RoadBlasters (Steering Yoke Conversion)
Arcade Hardware Hacking: Part I
Arcade Hardware Hacking: Part III
Temple of Doom was a great introduction to the Atari System 1 logic board, and as it turned out was very easy to adapt to the JAMMA standard. With the exception of inverting the directional buttons (and the ridiculous number of repairs I had to make to the board), everything was super straight forward and amounted to simply mapping pins on the logic board to JAMMA pins with the help of the schematics. But Temple of Doom isn’t the only great game released on this platform. System 1 is a modular platform; Atari was able to save a lot of money by shipping out new cartridge PCB kits to arcade owners. These kits typically came with a new marquee and control panel so if you already owned an Atari System 1 cabinet, you could swap out games pretty easily without having to freight an excessively heavy cabinet. Once games lost popularity, they were just dead space in the arcade. This cost square footage, and also a great deal of electricity to run all day. Atari’s approach to game refreshes (which predated JAMMA by a few years) made it easy for arcade owners to save money and space. The System 1 supported a handful of games including Temple of Doom, Marble Madness, Road Runner, and the focus of this post: RoadBlasters.
RoadBlasters was one of my favorite racing games (next to Outrun, which will forever be crowned the best), and was also a System 1 platform game. Unlike Temple of Doom, there’s no joystick. The controls are very nuanced, as they are with many arcade racers, and included a steering yoke and foot pedals. You can imagine this was handled very differently electronically than a racer you’d play on, say, NES (like Rad Racer, which I grew up on). It’s not a very popular game for home arcades because you typically need to own the original steering yoke (or a compatible aftermarket one, if such a thing exists) in order to play it, which means a dedicated machine or something hacky. I’ve always found at-home steering wheels and pedals a bit dumb anyway, and prefer playing a racer with a gamepad or joystick. I’m certainly not going to buy some old arcade yoke (or a complete cabinet!) just to play a game. They’re charging some stupid prices for these too, because they can.
RoadBlasters Optical Coupler Schematic
Not surprisingly, RoadBlasters uses optical sensors to detect the motion of the steering wheel. Since it was the technology of the time, many games (such as Tron) used a similar setup. The steering wheel included a disc with notches. As you turned the steering wheel, the optical sensors would detect either the notch or the disc. As you turn, signals get sent to the logic board which clock your movement in a given direction. Here, the direction is determined by whether a pin named VERT DIR1 is low or high. No idea why they didn’t use the HORIZ DIR1 pin for steering. ¯\_(ツ)_/¯
There’s a catch to how RoadBlasters was designed that made this adaptation a little more complex than Tron. As I explained in Part I, Tron uses a 10-bit counter logic chip to maintain a value from 0-127, and increments or decrements that value depending on whether the spinner sends a HIGH or LOW signal to the UP pin on the chip. Like Tron, RoadBlasters uses one pin for clocking and another pin for direction. Unlike Tron, instead of using an LS491 (or any other counter IC), RoadBlasters maintains this counter in the software, expecting a clock signal via the CLK1 pin, but an interleaved signal for the DIR 1 pin to set the direction. It seems that the game reads the DIR1 pin at both the rising and falling edges of the clock. Only signaling the DIR1 pin at the same time as CLK1 doesn’t work. Playing around with shorting some pins, I figured out the sequence of expected signals:
The logic board itself counts up or down 8 bits, so your possible values are 0-255, with 127 being a centered steering wheel. MAME tried to make this game playable by setting the wheel to a hard extreme of either 0 or 255 depending on which way you turn… and if you’ve noticed, the MAME version of this game is virtually unplayable. We need something a little more graceful, to slowly count up or down depending on how long you hold the directional pad down.
In Part I, I mentioned the utility of an NE555 timer chip to generate a clock pulse. This was later incorporated into the final prototype for Tron, so that the adapter could automatically move Tron’s arm (rather than depend on a rapid fire circuit). My at-home game rotates comfortably at around 80-100hz. The same technique can be used here with a few changes. We need to generate two signals instead of one – and they have to be interleaved. We could probably time this right with two NE555 timers, but that’s a little excessive. What we need here is often referred to as an RC Delay Circuit.
As the link explains, an RC (resistor-capacitor) delay does exactly what it says… relays a pulse with a slight delay. Here, we want to pulse the clock pin, but then immediately after tap the DIR1 pin to convey the correct direction. Implementing an RC delay allows us to send two signals – one right after the other.
After a little bit of trial and error, I configured the NE555 timer to just the right pulse rate using 1K for R1, 33K for R2, and 0.47 uF for C1.
NE555 Timer
The NE555 reset (pin 4) needs to be tied to a +5V source when you want to turn. If you recall from Part I, you can invert signals with the use of a 74LS04 or a 74LS86. The LS86 (quad XOR gate) makes more sense here, because when you’re done you’re going to want the timer to activate when EITHER the Left or Right directional buttons are pressed. So you can run your Left and Right JAMMA pins into an LS86 as the input, and the output will be LOW when no button is pressed, or HIGH when either one is pressed. Pin 3 then goes to both the CLK and DIR1 pins. DIR1 receives the clock signal just after the clock pin does, so that it’ll be active when the pin is read.
So by now, I’m able to turn reliably in one direction… not very useful for a racing game.
In order to turn in the other direction, the signal to DIR1 needs to be inverted when the other directional button is pressed. Looking back to the LS86, think about how you’d build a XOR gate to handle this. One way to do it is to send the CLK output into one input, and one of the two directional pins into the other. Take the output of that gate and make that your DIR1 signal.
Now we’re cookin’. With the RC circuit in place just in front of it, (a little trial and error landed me at 5K and a 103 cap) I placed an XOR gate between the CLK pulse and the DIR pin. Now we can increment or decrement the counter in either direction!
I quickly went from breadboard to prototyping board and built a small, cookie-sized circuit in the configuration above.
The rest of the pins simply map to JAMMA pins on a universal adapter. Any universal adapter will do. This happens to be one I fabricated.
It drives pretty good! There is no return to center but it feels natural this way, the way a steering wheel would. You could build a return to center with an 8-bit timer in sync with your steering, but I really like how this feels as it is – nice and smooth, and gamepad-friendly.
NOTE: It’s not easy playing with a phone in one hand, and a gamepad in another!
The pedals are quite easy: I mapped the accelerator/brake pedal to a single pin. When the voltage is high (default), the accelerator is down. Therefore, the button is essentially a “brake” button. Based on the schematic, this is exactly how RoadBlasters handles the brake too… by just grounding out the accelerator pin.
I’ve now finalized an adapter design, utilizing an MC34063AP to supply and onboard boost inverter for -12V. In addition to the steering circuit,
First run of fabricated boards have arrived and work excellent. The negative boost inverter supplies the -12V necessary to power the amplifier and certain ICs, and using the same op amp design from TRON provides solid sound. The steering circuit took a tiny bit of fine tuning to get just right, and I landed on a 224 capacitor for the 555 timing cap as offering the most playable experience. Very happy with this board!
I have since made a few small changes: certain super guns require a 470R resistor between CLK and the System 1, as they provide too much current. You can also turn the voltage down to compensate, and everything still works, but this is an important fix nonetheless. On an Axunworks setup, I seem to get a small bit of high frequency hum. I suspect this can be fixed by replacing C10 with a film capacitor as ceramic capacitors are known for generating this type of high frequency noise on switching inverters like this one.