Skip to main content

You read Part One right? Ok good..

The next step in my arcade machine build was to fully mock up all of the hardware that will be apart of the core system (there will be some other electrical stuff in the final console, but that’s unrelated to gameplay).

The Display

As I said before, a friend generously gave me a 19″ tube tv to use for the display. I wanted a tube to get a more authentic look to the screen when playing games. My plan was to turn the tv on its side, since most of the games were tall (relative to a normal tv). I immediately ran into unexpected behavior when I turned the tv on its side. Something about the tube, no idea what, caused colors to spread from opposite corners. It was like a blue spray opposite a green spray. Then when I rotated the tv 180°, it was a red spray opposite a green spray.  Pretty crazy, and not good.
Funny story… the next day, my wife came home from walking the kids to school and said “there’s an old tv laying in a yard near the trash cans down the street”. So, obviously, I drove right down there and put it in the car. The tv was missing a cord but once I added that, it worked just fine (and it even had fake woodgrain plastic on the outside! Talk about retro!)

But alas, when I got the Pi running and displaying through the tv, the menus were almost impossible to read.. so the tube tv was a bust altogether. Luckily, after a little asking around on Facebook , I found a friend with 2 old 19″ Dell LCD monitors, and he was willing to let them go from almost nothing. The next trick was to find a way to use the HDMI output from the Pi, and convert it into a VGA plug to go into the monitor (they’re pretty old). Luckily, a quick Amazon search led me to this adapter for $8.19 !! (I’ve heard that not all of these are created equal. You may want to research which one works with your specific setup. I’ve since found that some actually give you an 1/8″ audio output as well which sounds like a much better option.)

UPDATE: After some changes that I’d made to the system, and experimentation with displays and audio, I ordered a different HDMI -> VGA adapter with an onboard audio port from AdaFruit. It works WAY better, and although it’s a little more expensive ($25) I would highly suggest it.

All in all, the LCD will look just fine and be much lighter, which will make it easier to mount in the cabinet. Not having to deal with the weight of a tube tv will probably have a pretty big impact on the design of the cabinet overall, so my recommendation.. skip the tube, find a cheap/free old LCD.  (For the record, I also found the exact same monitor that my friend had, on Craigslist for $40.. still pretty cheap)


Note: Normally, sound is sent over HDMI, but if you convert to VGA, you’ll need to change the audio to come out via the analog headphone jack. Instructions for that here. I got the audio to come out, but apparently it has some strange behavior using analog. I think the ideal audio output would be via HDMI as long as your monitor has speakers.

The Control Hardware

As I was looking for the buttons and joysticks that I wanted to use, I was blown away at how many different types are available.  A quick look around Amazon and Ebay will show you tons of variations, color choices, lighting options, etc.  There are several websites that deal specifically with arcade control hardware and have even more options, Ultimarc being one of the more notable ones.

I ended up buying a board called the I-Pac ($55-ish) from Ultimarc and I absolutely recommend it! The idea is that this board emulates a computer keyboard. You wire a button or joystick (which is really just four buttons) to it, and the board turns a button press into a key press, then sends it over USB to the Pi (or other computer). You CAN reprogram the signals that it’s sending, but it’s default setup works great, and I had no need to reprogram it.

This is the I-Pac 2, meaning 2 player. There are also one and four player versions.

This is the I-Pac 2, meaning two player. There are also one and four player versions.

For joysticks, I found some on Amazon that I liked for under $10 a piece. They’re nice and solid. For buttons, I decided to get buttons with LED’s inside them, so I could light them up. You can get them on Ebay in several colors, and I got colored buttons for some, but white for most. It’s crazy to me, but these buttons are $1.85 each!  They shipped from Pennsylvania and were here in 2 days.  Another awesome thing about these buttons, is that you can take them apart and put a clear insert under the button surface, giving it a custom icon! I’ll be adding that later in the project.


Eventually, I replaced the 1 & 2 player buttons with white LED buttons that will get custom icon inserts.

The only other things that you need to hook it all together is a lot of wire (which I had) and wire connectors. I got these from Amazon, 100 pieces for $7 (and I used every single one of them, by the way).

Building the Control Board

Next up was actually setting up the controls on a temporary board so I could get the feel for how they worked, and make sure that everything worked as expected. This turned out to be much more helpful than I originally expected. I was able to experiment with different sizes for holes and how the joysticks need to be secured. I also learned quickly that I didn’t have enough buttons. (…Back to Ebay)   I realized that without a keyboard present, I had no way of traversing the menus in PiMame, and although I could remap buttons to do it, I decided to just add three more buttons to manage “Esc, Enter, Tab”, which are very important in navigating menus and updating settings. I’d also forgotten to add “Coin” buttons for each player to emulate putting a quarter in a machine, which is a necessary component of old arcade games.

I added these buttons to my existing configuration, so obviously they’re not in the ideal position, but since it was a prototype board, it didn’t matter.

To get started, I just took some scrap MDF (leftovers from disassembling Uber-Desk 1) and screwed it into some 2×4. I roughly mapped out where things should go and started drilling holes with forstner bits.

Roughly lay out the controls on scrap wood. This is your chance to get it wrong, then change it.

Roughly lay out the controls on scrap wood. This is your chance to get it wrong, then change it.

When drilling holes for the buttons, I overestimated the size initially. Eventually I settled on using a using 1 1/8″ because that was the closest size that I had, but honestly, I think it’s still a little too big. I’ve decided not to use the black riser that comes with the button, so measuring the widest part of the button shows that you need a hole just a little bigger than 1″.  1 1/8″ is ALMOST too much, but it works.  For the final control board, I’ll probably explore options to be able to create a hole in between 1″ and 1 1/8″.

There are a couple different types of buttons and they probably vary in size a bit. Just measure your buttons to find the necessary hole size.

There are a couple different types of buttons and they probably vary in size a bit. Just measure your buttons to find the necessary hole size.

The hole for the joystick allows you a little more wiggle room since my joysticks have an oversized cover that lays over the hole. You could easily get away with a 1″ hole. Whatever size you use, it has to be big enough for the joystick to lean outward in all directions when in use, so the hole MUST be quite a bit bigger than the stick itself. Another thing to remember (that I didn’t, but will in the final) is that the joystick needs to be square to the control panel when it’s mounted.  You want “up” to be STRAIGHT forward, “down” to be STRAIGHT back, etc.  I accidentally installed them slightly rotated, so all of my joystick movements are a little off. It’s not a huge deal to change, just something to keep in mind.

All mounted (although I ended up adding more buttons eventually)

All mounted (although I ended up adding more buttons eventually)

After mounting all of the controls in their respective holes, I started wiring. This was definitely the time consuming part. While you could buy a pre-made wire daisy chain, I decided to make my own as it’s very simple, just more labor intensive. Each button (with LED) has five terminals, of which you’ll use four. Two are for the button, two are for the LED.

You'll need wire crimpers to crimp the connectors down around the wires.

You’ll need wire crimpers to crimp the connectors down around the wires.

I currently have all of the LEDs wired together to a single power source, so I made two daisy chains, one for each terminal. ie, all of the ground terminals are connected, all of the hot terminals are connected. Making a daisy chain is simple, just cut a bunch of lengths of wire, then slide two ends into a wire connector and crimp it down using wire crimpers. Do this for as many connections as you have, the last one in the chain only having a single wire going into it. The opposite end is a free wire, which will eventually be connected to the power source. Then go through all of your LEDs, attach one chain to terminal A, then the other chain to terminal B.

These particular LEDs can be run at 5 or 12 volts. I found (in my pile of old parts) a 12 volt power source from an old iPhone dock and cut the connector off of it. Temporarily attach the the free end of each daisy chain to one of the power supply wires, plug it in and vóila! LIGHTS!

The brightness is dependent on the voltage applied (5v or 12v)  Pictured is 12v.

The brightness is dependent on the voltage applied (5v or 12v) Pictured is 12v.

The buttons themselves are wired slightly differently. You’ll need to make one more daisy chain to attach all of the ground terminals together. It’s free end goes into the “GND” terminal on the I-Pac board (either side is fine, they’re connected internally).

Next you’ll need to make a long wire for each button, with a wire connector on one end, and the other end just bare wire. The connector is plugged onto the “NO” terminal of the button (nothing goes on the “NC” terminal) and the bare end is attached to the I-Pac at the corresponding terminal.  ie The button that you want to be “Player 1” is attached to the “Start 1” terminal, etc. This is labor intensive, but pretty straight forward, and easy.

The wiring gets crazy pretty quickly. Once it's all working, go back and spend some time on cable management.

The wiring gets crazy pretty quickly. Once it’s all working, go back and spend some time on cable management.

Double check all of your connections, then attach the I-pac to your Pi via USB and boot it up! The majority of your buttons will work right away!

When you enter most of the emulators, you’ll find a config menu which will allow you to select a control, edit it, then press the button that you want to map to that control. Most of this was already working for me, I just had to make sure that my “ESC, Enter, Tab” buttons were mapped to allow me to get to the config menus, select things, exit menus, etc. I could walk you through this for each emulator, but if you’ve gotten this far, you can figure that out on your own.. it’s simple. There will be some experimentation 🙂

Assuming everything went as it was supposed to, you should have a working control console for your PiMame!!

final The next stage of this project will be cabinet design and construction! That’s the part that I’m really excited about, although it’ll be a while before I have a post ready to show any of it off.

If you’ve got questions, please ask them in the comments and I’ll do my best to answer them or point you towards someone that can!