Tempest was a great game -- so much so, that Atari had it remade as Tempest 2000 and released for the Jaguar back in the early 90's. Tempest 2000 works perfectly well with the D-pad, but it turns-out that Jeff Minter also added support to Tempest 2000 for rotary controllers. The problem, of course, is that Atari never made such a controller...
I knew about the rotary controller support in Tempest 2000 when I bought it off the shelf 'back in the day'. I had always intended to build such a controller, but only recently got around to doing that -- more on that in some later post! Anyway, as part of that journey I ended-up with a few random extra parts. In particular, I had an extra rotary encoder.
Making Something Beautiful
From an electrical standpoint, joysticks and most other controllers are fairly simple. The real problem isn't wiring them, it is building something to hold those buttons, sticks, or whatever in a form that makes them usable. Often the simplest solution is to repurpose something designed to do a similar job into something that works more as one wishes.
The original TRS-80 joysticks that Tandy offered for use with the CoCo were awkward and are generally unloved. The best I can say about them is that they seem a bit less poorly designed than the ones made for the Dragon or the BBC Micro. :-) Nevertheless, they do offer a plastic shell with some rudimentary ergonomics, an available button, accommodations for wiring, and a pre-drilled hole ready for mounting the shaft of a rotary encoder.
At some point, an idea became obvious -- take the guts out of an old CoCo joystick and turn it into a rotary controller!
Getting It To Work
The procedure was relatively simple. First, disconnect the wires from the joystick gimbal and remove it from the housing. Next, mount the rotary encoder in the now vacant hole in the housing. Once the wiring is complete (see below), then install a knob that suits your tastes. That completes the mechanical installation!
For the wiring, solder a 10k resistor to each of the signal outputs from the encoder. Tie the other ends of those resistors to the +5V line from the CoCo. The common input on the encoder gets tied to Ground from the CoCo, as does one of the button terminals. The other button terminal connects to the button line from the CoCo, as expected. The X and Y lines from the CoCo are each tied directly to one of the signal outputs from the encoder. The connections are made so that in operation the X and Y lines alternate between +5V and Ground. Turning the encoder clockwise will cause (X,Y) to follow the sequence of (0,0) -> (0,5) -> (5,5) -> (5,0). Likewise, turning counter-clockwise will change the sequence to (0,0) -> (5,0) -> (5,5) -> (0,5).
Hopefully that description is clear? The circuit really is simple. I'll try to find some time to draw-up a little schematic to post. If I don't manage to do so and you want to build one, feel free to contact me if you can't figure-out the schematic. :-)
In any case, building the hardware is only the first step. This controller works a bit differently than the existing joysticks. Consequently, there is no software to make any sense of it. So, starting to figure that out will be the next step. As always, be sure to stay tuned!