I love retro gaming – Contra, Zelda, Desert Strike – good times. But those games were annoyingly hard, and the controllers; oh the controllers… The NES controller was super unresponsive (SNES was a little better), and the Atari CX-40 was just torture. Wouldn’t it be great to have an arcade stick for these retro machines, like the NES Advantage? But three different arcade sticks will lead to storage/cash flow problems. What you really want is a single arcade stick that can plug into multiple retro machines. MULTIiple CONsoles of the RETRO kind.
I had been looking for a retro gaming fabrication project to really push the Fireball’s and my limits. This seemed like a good place to start. To really show that with a CNC you can make multiple copies of the same project easily, I would make at least two units: One was to be a gift, the other for myself. The idea was that the second copy should take far less time to build than the first. In essence, the project consisted of three parts:
1. Arcade quality controls
This was easy; I would use Sanwa and Zippy parts; this would be familiar territory due to my experience with my arcade cabinet. I avoided the Sanwa style buttons which clip into the deck, and instead used the threaded through-hole American type. This is because I knew my deck would need to be thick (thin MDF ‘gives’ when you press it, making it annoying); plus the Sanwa buttons can only be mounted on a fairly thin deck.
Because I wanted this to be a comfortable stick, wanted to carefully test the button layout. I built two cheap prototypes to ensure that the deck size and button spacing was comfortable:
Here is Steve helping debug one of the prototypes with Contra. Even in this crappy form, it was already a lot better than using the original NES controller.
2. Interfacing controls to consoles
I knew I wanted to support the NES, SNES and Atari 2600 (I have an N64, but that has analog controls, so I excluded it). The Atari connection is a simple one-cable-per-input (plus ground) deal; but NES and SNES use shift registers to encode the input. Rather than try to figure out the circuit, I just took the circuit boards from real controllers (you can get knock-off controllers for a couple bucks each).
A little hot glue and it is all installed:
Then I needed to make the one joystick and set of buttons drive all three boards. To simplify debugging/parts replacement, I soldered a custom distributor board, where the buttons are plugged in via headers (left two columns in the image below), and the three controllers are in series with that switch (the S, N and A columns in the image below). The end product is a fairly compact header setup, which allows you to work with each of the three controllers independently:
Each of the three controllers outputs to a 9 pin female D-Sub plug; and then you can plug in whatever cable you need for your machine. I provide three cables, with the console plug on one end, and a male 9D-Sub on the other.
3. Nice enclosure
This was the hardest part. I had done some small things on the CNC machine, but never something this complex. To keep things simple, I set the design as a flat sided box (no slopes, chamfer, etc), but with rounded corners. To make it look like more than just a slab of MDF, I decided I would add some artwork under a sheet of transparent acrylic, and shiny new chrome screws to hold the whole thing together.
Building a box with rounded corners is not as simple as you think. At first I though of using quarter round dowels held between the vertical walls, but it soon became apparent that the tolerances to which quarter rounds are cut are not great. First, they are not 90 degrees – they vary from 80 to about 85 degrees; and then the radius also varies along the length; not the road to a neat box. Instead, I decided to design and cut custom corner pieces from 1/4″ MDF, and stack them up to the 2″ height of the box (i.e. 8 of these pieces per corner). This means you need 32 pieces per case; this ended up being the most tedious part of the project – cutting the 32 pierces on the Fireball ended up taking more than two hours, and kicked up a lot of dust of course. But the results were worth it in the end. Here is my PC partway through one of those boring two hour sessions cutting some corner parts:
Being able to design the corner pieces gave me a lot of freedom – that’s the upside. I decided to make them be the major structural piece – all other flat surface would be glued by these.
The top deck (with the controls) would then bolt to the corners by means of an embedded nut. Here you can see how the shape of the corners fits with the vertical surfaces, and the machined bolt hole (always better to machine the hole while you are CNC routing, rather than drilling after the fact):
Incidentally, embedding a nut and using a bolt is far better than using a self-threading wood screw, as that will become progressively more and more loose as the MDF compacts, and cannot be easily repaired. A steel nut however, will last forever.
I learned that test-fitting as you go along is very important – I found a couple of bugs in parts which I had to re-cut. Remember kids, the earlier you find a bug, the cheaper it is to fix.
Here is a view of the internals. Notice the C-shaped pieces along the long vertical walls. Those are there to provide strength to prevent the long walls from collapsing; if they were not there, the only thing preventing the walls from collapsing inwards would be the thing edge of the 1/8″ MDF glued to the floor piece. Retro gaming can be a very frustrating experience, so you need to make these things tough.
Now for the
toxic fun part. Although the Fireball cuts MDF very neatly, there are still visible seams once the glue sets. This is where Bondo Automotive Putty comes in (this is a trick I learnt from the Cosplay crowd). It smells terrible, it’s messy as anything, but it is cheap, and works really, really well on MDF. Here are the bits you will need – nothing exotic. The tile I use to mix the bondo on, to protect the workbench.
First, you mix up the goop, apply it to the part, and let it dry. At this stage it looks worse than when you started:
Then you break out the sander with a fine paper, and start reducing the mass. You end up with a super-smooth finish. Because Bondo and MDF have a similar density, they reduce at the same rate, so this works very well, and is safe.
Once all the seams are neat, you can spray with regular spray paint. I decided on white, as I have enough black/beige bricks around my TV as it is. Once the paint dried, I wired up and tested all the connections.
Incidentally, Starfox on the SNES is great for testing, because it has a screen where you can try different control sets, and it shows you how the ship responds to each button push. You can test without pesky aliens shooting at you for as long as you need, and it uses every button on the controller.
Once everything was ready, I added the artwork and acrylic sheet, the decals and some Little Rubber Feet
Now Unit 00 was ready to be packed and gift wrapped. I used an old Xbox 360 cardboard box – just flip it inside out, and add some bubble wrap and custom decals. I also made a brief instruction manual, which you can download here.
One of the things I wanted to achieve on this project was a kind of mass-production (after all, all the design work was done, and I had all the G-code for the parts ready to re-use). Well, it was much faster to produce Unit 01 than Unit 00. In fact, I would say I took around half the time, and managed to fix up a few small bugs along the way – so some kind of “mass production” (or at least “non-unique production”) is completely possible. Here is the second unit (this time with white stick top)