tempest 2000 rotary controller hack


Last updated 03/11/2012: I now have an improved rotary controller (based on my right hand spinner hack) for sale. Introducing the T2K Commander 


So one day i thought why not do something constructive and hack a controller to play Tempest 2000 with.I had already picked up a few old things that had mechanical encoders in them with a view to this. I tend to put things off for ages,but since i knew theoretically this should be really easy i got my arse into gear. The problem was, once I found out that it could be done, I found it rather hard to find any recent info on the net. So the following is a rundown of what I did, what i needed and why it works. 


Since you are here, you already know something about Atari Jaguar, and the excellent game for it- Tempest 2000. Tempest 2000 is based on Tempest, an arcade game from 1980. Through all Ataris history, they loved to introduce new control systems in each new arcade game. For instance, Asteroids is controlled purely with buttons. Missile Command features a trackball. Battlezone has two joysticks. And so Tempest had a spinner. This allows 360 degree rotation of your ship. In 1994 when the sequel of Tempest was being coded for the Atari Jaguar, it was designed to be used with the standard Atari Jaguar controller. However, obviously at least someone at Atari thought it stood to reason to use a spinner, because Jeff Minter was asked to add some code to allow a spinner to work. Thank god he did! He hacked a rotary controller used for the Atari 2600 game Indy 500 I'll explain why it's not an ideal thing to hack later. In the end, no special controller was made for Tempest 2000. Thankfully the code for an encoder was left in the game. I'm a newcomer to the Atari Jaguar, so I can't say when people first started making custom rotary controllers for Tempest 2000. There is talk of a guy called Jedi Jeff, perhaps he was the first. Here is one of his controllers owned by a collector at Jaguar Sector. Neat, huh? 


Both the original Tempest and Indy 500 have one thing in common- they are controlled with an encoder. An encoder gives out a digital signal such that reading the output in sequence tells you both the direction of rotation, and how fast it is rotating (see the 'grey coding' table in the link). The original Tempest used an optical encoder, which works exactly the same as in the older style mouse that has a ball. The mouse has two encoder opto- couples, to give two axis control. The Indy 500 controller uses a mechanical encoder. It's basically just a fancy switch. If you weren't worried about size, you could build one from scratch. In fact maybe one day i'll make a steampunk version... 

Anyway, the default for Tempest 2000 is to use left and right on the D-pad. This is a simple 'all or nothing' signal- it's either full left or full right or off. The game is designed so that when it sees 'left' or 'right' it rotates the spaceship at a set rate left or right until it sees OFF. However, if you set the game up for ROTARY in the options screen, then it's set up to see the quadrature coding. Now not only does the spaceship relate to rotary movement (which is more intuitive) but now the ships rotation is proportional to the speed you spin the dial. Instead of taking a set time to get to a point, you can get there quickly. 


Nowadays, encoders can be had that are quite small. The trade-off is of course they aren't as durable as say, a microswitch. Never the less, this is the simplest option for our controller hack. This is what you are looking for:


The base measures roughly 11mm x 13mm. Quite small (the pic above is at least 3 x actual size). Any knob you put on it will dwarf it! So,first, you need an encoder. You sometimes see them on ebay, and i guess specialist electronics suppliers have them, but they can be hard to find. Where ever you source yours from, the number of pulses per rotation needs to be divisible by 3. So a 20 pulse one won't do. (Edit: Apparently. The more i think about this, the more i wonder if it matters. I might have to test it out) As far as i can tell, in Tempest 2000,there are 72 positions per revolution (edit: In the first level. If you can survive that then it might not be too bad with 12 PPR since many of the following levels don't require as many turns. Just don't hack an Indy 500! What a waste...) . The Indy 500 controller has 12 PPR (pulses per rotation), therefore it would take SIX complete turns of the dial to complete 360 degrees in T2K! You can see now why i said earlier it's not an ideal choice for hacking. My guess is the programmers used an Indy 500 controller as it was readily available and would tell them all they needed to know about the coding. The design of the controller itself would have been someone elses concern. I used an old keyboard with a volume control, here is the donor:

rotary controller donor

The encoder out of this one has 30 'detents'. So about 2 1/2 turns for one complete revolution in T2K. This is pretty satisfactory. I have seen a 48 detent that some of the flight sim guys are using. And some of the other rotary controller hacks you can buy are using 36. I'm quite happy with 30, but 36 sounds ideal. Regardless, I doubt you'll have much fun under 24.


The controller itself is very hacker friendly. This is an ideal beginners hack. If you have some soldering experience, get cracking! If you are new to soldering, practice on an old PCB (if you are hacking an old keyboard, put it to use. solder some wires onto things). A keyboard is a good donor. Because of the position of the volume, the encoder is unlikely to be soldered to the main PCB. When you open the Jaguar controller, you just need to follow the trace for Left, Right and Common. the mechanical encoders will have 3 tags, or 5 if it has a push down button. connect the middle tag to Common. Solder onto the flex wire joints of the controller rather than the d-pad thingos. That way it can still be reverted back to a normal controller if need be. If you are pulling out an old encoder from something, if it's on a little pcb board, best to leave it on there. These things apparently don't like hand-soldering much. The pcb does make it a bit higher though, which will make it stick out of the controller more. But I'd rather that than the encoder dying after a few goes. Having said that, using a new encoder should be ok so long as you use a really hot iron, work very quickly and cool it down straight after (maybe hold it in front of a desk fan).

rotary controller internal

It's hard to tell in that craptastic pic, but there are 13 solder points along the bottom of the
PCB (as viewed like above) The wiring is COMMON- pin 1, RIGHT- pin 2, and LEFT- pin 12. You should 
verify this for yourself though, as there are apparently at least two different versions of controller 
(not counting the pro controller) and i couldn't say what has changed between versions. Which ever way you solder it, Murphys law dictates that when you are done, your spaceship will spin the wrong way! Just swap the left and right wires around in that case. Note: since I took that photo, i realised it is safer to take out both pcbs from the controller and flip them over. In the pic above I have bent the top pcb over. The ribbon cable it's connected to isn't designed for much flexing however, and there's a risk of breaking a wire or two. If you look at the second pic, all i've done is kinda jam the encoder into the d-pad hole with a bit of cardboard behind to stop any shorts. It will hold up for a while but i'll make some kinda disk for it at some stage. It can't be flat, not enough space, has to be dished like a straw boater hat. I could use the d-pad itself but i don't want to drill a hole through it. To use it, i find it much easier to hold the controller upside down so that the 'spinner' is on the right.

atari jaguar rotary controller complete


Ok, so adding an encoder to the controller is quite straight forward
(thank you whoever first did it!) but not being left handed, i really need to hold it upside down or sideways.
It irks me to use my left hand to spin. But it's also such a shame not to hold it the way it's supposed to
be held. So here is my variation on the theme. See if you can spot the difference.

atari jaguar rotary controller spinner on right

What about the B button? Well, after a bit of a think I hacked the D pad so that 'down' is B. (thank god i didnt drill a hole through it before!) buttons A, pause, option and the D pad share a common. So it was necessary to isolate 'down' completely because B and C have two separate lines. A little judicious use of the x-acto knife cut the traces in the right spots. That hack was enough for me to test out the concept, my plan being to hack C to 'left' and A to right as well. The encoder fits nicely into the B button hole with the little PCB it's attached to stopping it from coming out. Underneath, the  encoder is held in quite firmly using my patented proto-cardation technique. I played it a bit last night and i'm much happier holding it right side up (",) . Played well even though C and A are still on the right side of the controller. Definitely a bit slower to reach than if i did the full hack. Imagine how fast that will be to hit superzapper! Sure, it doesn't look 'quite right' and i do like devices to be aesthetically pleasing but then I'm not really looking at the controller while playing! Well, until i hack A and C over i still have to have a sneaky look when zapping or jumping... 


Well, playing T2K with a dial is awesome. Now you have the controller, here's how you get started First You need to set up the game for rotary, which is explained here: http://www.mdgames.de/Tempest2000RotarySupport.htm It's a once off. You will need two controllers to do it, then it's remembered on the cart. To select levels at the start, you can use A and C instead of up and down. And you can use them for up and down in the bonus levels too, using the dial for left and right. However, since you need a second normal controller plugged in to record high scores, you might as well use the D-pad on that for the bonus levels. The other way is pretty goofy. An interesting thing I notice with the hack is that the levels that aren't a complete circuit (eg: the flat section, and the one that is U shaped) feel like the controls are back to front. I realised this is a legacy of design, that these sections are actually a section of a circle. With that in mind, if you think of those levels as being the bottom of a circle, then rotating clock-wise and anti-clockwise makes sense. Another solution some people have resorted to is to install a switch on the controller to reverse the direction of travel.


Kontact me here 

rotary controller

Document made with Nvu