Introduction: A DIY Arcade Table Powered by Raspberry Pi
Gaming with emulators has been around quite awhile, but nothing brings back the nostalgia of the old arcade like playing games with a vintage joystick and those big round buttons. Like many of us, I have always dreamed of owning an original stand-up arcade machine, but the reality of it was that they are too bulky, expensive, and difficult to find. Enter Raspberry Pi and the RetroPie project - which proves that dreams can come true!
The following Instructable follows in GREAT detail the steps, process, pitfalls, and learning involved in making myself the ultimate home arcade table. For each step be sure to read the notes located throughout the pictures as well - I added lots of other tips that came to mind as I reviewed them.
I hope that this Instructable helps out loads of other people to build their own arcade table/machine and may your inner arcade kid be unlocked!
Are you ready? Let's begin...
Step 1: Stuff You Will Need...
What kind of skills do you need to get started?
I am by no means a professional carpenter in any way (my apologizes now to experts out there if I mis-name anything in this Instructable!). I had done a number of other projects before attempting the arcade table, but nothing that required the same precision and patience. If you are feeling intimidated, I offer one piece of solid advice - you can build anything you want as long as you have the right tools and a little bit of know how.
The know how you get from researching as many web resources you can find (hopefully this Instructable will play a big part in that) as well as thinking about each step of your build before proceeding. Be slow and methodical about it - it's ok - no one is watching. It's a good thing when it comes to stuff like this.
As for the tools, the trick is to not be cheap about it. Don't cut corners or try to make due with "what you have" - trust me when I say it will end in disappointment. Always buy the right tools and materials for the job. You have a much better chance of coming out the other end with something you're proud of :)
Tools I used:
- Clamps - lots of them. I have a bunch of Quick Grips, several C-Clamps, and three long bar clamps (the big ones) and there were times when I was using all of them at once.
- A good drill (Personally, I love DeWalt tools) with various bits (small to spade bits)
- A level (two footer will do, but if you can get a smaller one as well that will help)
- A tape measure
- Carpenter Square (so your table isn't built all wonky)
- A Jigsaw with really good blades (I bought special Bosch jigsaw blades designed for cutting curves)
- A table saw is nice to have and will speed things up - although the build can be done with just a jigsaw
- A power sander (I like the mouse sanders) and lots of sand paper for them of various grits (from coarse to very fine)
- A router with a straight bit
- Kreg Jig (a must have tool for any cabinet work!)
- A wire crimper for making wires for the joystick controls and power wires
- And the usual stuff : set of screwdrivers, set of pliers, a cabinet hammer, an Allen wrench set.
- Natural hair paint brush for the oil based finish
Building materials I used:
These are your own choice - price stuff out to fit your budget and be creative:
- One 4'x8' sheet of maple cabinet grade plywood (good both sides, of course)
- One sheet of 1/4" acrylic (aka Plexiglass) roughly 3.5' by 2' (get it cut professionally - more on this later)
- Lots of flat head screws of various lengths
- Lots of Kreg jig screws of various lengths
- keep in mind you don't have to buy the actual Kreg jig brand - I learned there are cheaper alternatives. Talk to your local hardware store person.
- Furniture hardware bolts and nuts/washers for attaching the acrylic to the table top
- Some all-round fastening banding
- Wire brackets for your wire management inside the table
- Natural wood filler (for goof-ups)
- Oil-based polyurethane (I like Minwax brand)
Note: Sorry about the imperial measurements! Canada is metric but for some dumb reason our building materials still live in the silly world of imperial ;)
Technology materials I used:
- Raspberry Pi 2 with Case, Heat Sinks, WIFI dongle, AC adapter.
- Make sure you get a case that comes with heat sinks for the Pi CPU / GPU. Some games are heavy on the processor.
- When I started, the Raspberry Pi 3 wasn't out yet - this will make a very good future upgrade. Regardless, the Pi 2 runs almost everything really well - but I'm an old school gamer. Old games don't tend to require intense processing power. Note that I have even tested many games on Pi 1 B+ and it even performs well.
- 16 GB Micro SD card (Sandisk Extreme)
- Make sure you check that your brand is compatible with Raspberry Pi
- 16GB is more than enough space for the the OS / emulators / games
- MicroSD USB Adapter
- For getting RetroPie on to a MicroSD for the Pi. You will only use this once so it is best to find one to borrow if you can.
- WIFI dongle
- A necessity to avoid having to plug a keyboard into your arcade table all the time to do configuring and maintenance. If you have a Raspberry Pi 3 it is built in (lucky you!)
- Joystick and button hardware
- I bought all mine from ultracabs.co.uk (the kit comes with everything you need)
- LG non-widescreen monitor
- Pretty much all vintage games are designed for 4:3 ratio monitors so a wide screen would be a waste as it would spend all its time in "letterbox" mode
- Of course, non widescreen monitors are harder to find nowadays - I got a brand new one from ebay
- For easy mounting I would recommend getting one that has VESA mount holes (a standard)
- Inlet Module plug (standard PC power plug receptacle)
- This can also be referred to as a "pluggy do-hickey"
- Click here to find this on Amazon
- Wire connectors and wire
- I used connectors for wiring up the module plug. I used the extra wire for extending some of the wires that attached two of my buttons. The wire you need is 22AWG and I bought it at The Source (Canada)
The big question that is always asked is how much will it cost? This really depends on a lot of factors such as the quality/type of building materials you choose and how many components you can find for free (computer monitor, for instance). The following is an approximate breakdown of the costs if you need to purchase almost everything:
- Plywood $60
- Acrylic Sheet (Plexiglass) $160
- Fasteners, wood filler, sand paper $50
- Polyurethane $25
- Pi 2 Kit (Pi, case, heat sinks, power adapter, WIFI dongle) $100
- MicroSD card $20
- Joystick controls kit $120
- Monitor $100
- Inlet Module Plug $5
- Wire Connectors / Wire $10
- Table top graphic printing $30
- Speakers (I found some old ones to reuse) $0
GRAND TOTAL: $680
Step 2: I Love It When a Plan Comes Together...
It's going to be really tempting to get right into cutting wood and assembling your table, but you will be much better off if you come up with a plan first. Even a little sketch is better than nothing. So try and stop getting ahead of yourself, sit down in your comfortable chair, and plan out the shape and dimensions of your arcade table. See my sketch above - my dimensions stayed pretty close to my original specs. And do yourself a favour and do it in pencil. You will screw up and have to make changes.
Attachments
Step 3: Time to Cut It Out...
With your fancy plan in hand you can start cutting out the pieces. A few tips on cutting out your material:
- Before you make any cuts, plan out how you are going to get all the pieces you need out of a single 4X8 sheet of plywood. If you mess this up you may need to purchase another sheet = more money.
- If you use plywood like I did you have a good chance of suffering from a scorching case of tear out when you cut it. Tear out looks awful and will make you curl into the fetal position and weep. There are some techniques for minimizing tear out but I found the best approach is to use a brand new blade designed for plywood and to go VERY, VERY slow.
- Just in case, make sure your good side (the side that will be showing on your table) is facing the correct way. For a table saw the good side should be up - for the jigsaw the good side should be down. To determine this it is all about which direction the blade does the cutting - that's the direction tear out will occur if it happens...you want that to be on a less obvious side OR better yet hidden inside the table.
- You can avoid the whole tear out issue by using an easier material to cut like MDF and then paint it instead of stain - but I really wanted a nice wood look for my arcade table.
- Cut your larger pieces out using a table saw if you can - but if you must, you could use a jigsaw. If so, take the time to setup a jig. Don't try to do the cut free hand. You're not a surgeon - face it. Mistakes cost money and look terrible :(
- You will need to spend LOADS of time sanding down all the edges so they are nice and smooth and no cut marks are visible. I used my little mouse sander for this with increasing grit sand paper. Always finish off with a sanding of a high grit count (lighter sanding) sand paper to make it smooth as possible. You will also need to do a lot of sanding by hand to sand in the corners that the mouse sander won't reach.
When all is done you should roughly have all your pieces ready to go - like a giant jigsaw puzzle.
Step 4: Assemble the Joystick Control Box
At this point I jumped right into building the box that will house the joysticks and buttons. I call this the joystick control box. In my design this is a box that protrudes out of the table on the player side. A few thoughts and tips:
- To get this to work your cuts need to be crazy precise, but it is doable if you just take your time. I suppose a Jointer would be crazy useful when it comes to cutting and fitting all your table pieces. Something my budget would not allow - but if you have access to one, go for it!
- If you need to trim down pieces and your overall control box becomes a bit smaller, that's ok. You can design the rest of the table around these minor changes.
- You can find the dimensions I used on my sketch in the previous step
- I used 3/4" x 3/4" trim around the inside edges of the box to screw it all together - I want my table to not only be deliciously geeky but also be a nice piece of furniture in our living room. Nice furniture does not have heads of screws showing. See the picture for how I did this, but there are other ways too! Note that I did not own a Kreg jig at this point in the build and thus was not blessed upon with the holiness of salvation that is Kreg jig joinery.
When finished you have your control box! Feel free to put it on your lap and mimic using the joystick while making "pew pew" noises - nobody is watching.
Step 5: Putting It All Together
With the joystick control box completed the next step is to assemble the rest of the table (minus the table top). Thoughts and tips on this step:
- I framed out the inside of the table in much the same way as I did for the control box using 1" trim in order to hide all fasteners and to provide extra strength. Although not shown here, you can see the internal framing in some of the pictures of step 11.
- Instead of trying to miter corners of the table, I designed the two end pieces of the table to extend out - this is much easier and has a cool retro look to it
- To cut the insert of the joystick control box into the front of the table I simply laid down the control box on the front piece and carefully traced it out and cut very carefully with my jigsaw (making sure to cut INSIDE the line as the thickness of the jigsaw blade would make the cut too big)
- I used lots of bar clamps to assemble with decent length flat head screws for the internal frame. I also used my Kreg jig to connect up the ends down near the feet of the table (see picture).
- During this step, be sure to use your carpenter square to make sure the table is assembled as close to square as possible
- As shown in the pictures, this is the step where your clamps are used a lot to hold the pieces together while you fasten.
- This step can really be done in lots of ways, so be creative - you only need to make sure that the table is VERY solid when finished. I tend to over engineer everything I build, but that is better than having something that is wobbly.
Step 6: Drilling Holes Into the Table for Controls
Of all the steps in building the table, this was the scariest. Putting a big ugly hole into my nice joystick control box. Some tips and tricks:
- Find a scrap piece of plywood and drill several different sized holes into it to find the one that fits your buttons and joystick perfectly. Remember that your joystick should be able to move around freely and hit all contacts on all directions without hitting the edge of its hole. With 3/4" plywood this is a real possibility, so test it out well first.
- After you find the hole sizes that work, mark where your joystick and buttons are going to go. I used Rolfebox's controls template located on his own Instructable as a PDF (starcade_controls.pdf). He did extensive testing and prototyping to get the location of the joystick and buttons just right (nice one, mate). Print out the PDF and tape it to your joystick control box.
- Before drilling holes into your table, drill the different hole sizes into another spare piece of plywood and use that as a jig. Clamp down the jig and line up the hole in the piece with the target on the actual control box. Drill down through the hole into the table. This not only ensures you get a nice straight hole, but it also protects against any tear out. Large spade bits are AWFUL for this. When the bit comes out inside the control box it will tear out really bad - but that's ok since it is inside the table and no one will see it.
- Any little mishaps can be cleaned up with wood filler (see list in step one) but we want to avoid that as much as possible
You can un-clench your sphincter and move onto the next step!
Step 7: Final Cutting, Finishing, and Mounting the Monitor.
With the table cabinet completed the next step is the table top. I had already cut out the table top in step 3, but it is at this point I needed to cut the hole for the screen. Some thoughts and tips:
- You need to make sure the hole you cut is exactly the size of the viewable area of your computer screen. The last thing you want is any of the video game action to be covered by the table top. To make this cut you will need to drill holes in the table top to insert your jigsaw blade into to start the cut. Go slow and be careful!
- Some computer monitors have a tendency to turn off when there is a power surge (or other reasons) and have to be manually turned on again with the power button. If this happens to your screen in the table it would mean uninstalling the screen just to press the power button. What a pain! To address this I used my router to route out a notch (using a straight router bit) so that I could stick a tool in to turn the power on without taking the whole screen out. I also had to route out a notch for the buttons on the bottom of the monitor since they protruded out of the monitor casing a bit.
- Once my hole was cut I mounted the monitor to check for fit. This is when I discovered an issue. My table top thickness is 3/4" plywood which means the screen sits 3/4" below the surface of the table. No problem except for the fact that players are sitting at the arcade table looking at this screen from an angle. The result is that about 1/2" of the bottom of the screen is blocked from view by the table top edge. Most games put important stuff down there like number of lives, score, etc. Clearly something had to be done. To address the issue I routed out all the plywood around the edge so the screen sat only 1/4" from the table top surface. See pictures for details.
At this point, the table is pretty much complete in terms of woodwork except for the bottom (we will get that later). It would be best to tackle the polyurethane finishing stage (my least favourite stage) before installing any components into the table:
- For the finish I used an oil based polyurethane (Minwax - semi-gloss). I'm a big fan of this stuff as it not only makes the wood look shiny and provides protection, but the oil also seeps into the wood giving it a nice tanned look. Many projects in the past I have loved UNTIL I stained them so I resisted all urges on this one. I only applied poly and it paid off.
- Make sure you are in a well ventilated room - oil based finishes are smelly and not good for your brain :S
- Have a lantern or high powered flashlight to inspect your table after each finish for drips. Drips suck and are difficult to remove if they dry. While applying the poly, they are also really hard to see. Since I did most of the finishing in my workshop in the late evenings I did this step using a worker's lantern as well as a head lamp on my head - I was pretty much ready for spelunking, but I was determined to avoid drips.
- Use a natural hair brush for oil based paints
- Expect to add at least 3 coats of polyurethane - it looks better and better with each coat!
After the finishing is complete we can add the monitor to the table top:
- To mount the monitor to the underside of the table top I built a giant C-shaped bracket out of spare plywood and drilled holes in it to match the standard VESA mount on the back of my monitor. A trip to the hardware store followed to buy four bolts that would fasten into the VESA mount holes of the monitor to secure it. The monitor bracket itself was attached to the table top with four Kreg jig drilled holes and fasteners.
With this step completed you have something that actually looks like an arcade table. Who would have thought? Time to step away from the workshop and move to your computer for the next step...
Step 8: Setting Up Your Raspberry Pi With RetroPie
Now that the table is well underway it is time to tackle the less manly and more geeky part of the build. In my experience I spent more time on this part than the actual building of the table, but that is mostly due to the sheer amount of research that was required. Hopefully this step will help you to avoid the hours of troubleshooting I had to endure.
First thing you need to do is check out the RetroPie project. A bunch of smart people got together and amalgamated a collection of arcade/console emulators into one install. This is open source community development at its best! We will need to install RetroPie on your Raspberry Pi. But before we do, let's go over some terminology.
RetroPie is the project that brings together a lot of technologies into one easy install. It installs an operating system called Raspbian (Linux based) and an application that runs immediately on startup called Emulation Station. Emulation Station is a collection of all sorts of game emulators all accessible from an easy menu. An emulator is simply an application that makes the Raspberry Pi behave like a Nintendo, Sega, etc. For example, Mame4All is an emulator that plays old style arcade machine games.
Alright, with that out the way, let's get into the technical nitty-gritty of the build!
Downloading RetroPie
- Download the SD-CARD image of RetroPie. My initial setup was done using version 3.6. Like most things on the web, finding the page isn't completely clear. Scroll down the retropie project website until you see the RetroPie SD-card image link. Download it to your computer.
- The SD Card image is currently zipped up as a GZ archive. Unzip it to a really big IMG file using 7zip.
Copying RetroPie onto your SD Card
- Next we need to prepare the SD Card. This will act as the hard drive of the Raspberry Pi. But first it needs to be formatted. So how do you do that? The easiest way is to get your hands on an SD Card USB Adapter so you can plug it into your computer and work with the SD Card directly. You can format the SD Card using a tool called SDCardFormatter (a very imaginative name). Download SDCardFormatter here
- The next step is to get RetroPie onto a MicroSD card. We have the SD Card image of RetroPie, but you can't just copy it over to the MicroSD card - you need to use disk imaging software to copy it all over. A common one is Win32DiskImager (sorry Mac folks - not sure what to use but should be easy to figure out). Download Win32DiskImager here.
- When completed, plug the MicroSD card into your Raspberry PI and fire it up! It should go through some startup screens and then a control setup screen (we aren't even close to that - calm down!). Congratulations, you now have RetroPie installed! But now we need to configure it and this is all done through the command prompt. Press F4 to get to the command prompt to do the next steps.
Expand the file system and Overclocking
- After the RetroPie image is copied onto the MicroSD you will be surprised to see that your huge MicroSD card is only around 56MB in size now. This is always the case when imaging RetroPie. We need to expand the file system. At the command prompt type:
sudo raspi-config
- A menu will open on the screen. Click enter on "Expand file system"
- Your MicroSD card should now have the maximum amount of space
- There has been some documentation that Overclocking your Raspberry Pi can help with some sound issues when gaming. With the newer Pis coming out that are faster and faster, I don't think this is so much of an issue now. In any case, it is in this menu that you can set your Pi to be overclocked. Be warned that while it does make your Pi run faster it also makes it run hotter. Never overclock unless you have installed a heat sink on your Pi CPU / GPU.
Raspberry Pi WIFI Setup
- Unless you want to plug in a keyboard into your arcade table all the time to do maintenance you are going to need to setup WIFI. Plug your WIFI dongle into the Pi and type the following the command:
sudo nano /etc/network/interfaces
- This will open a text editor (called nano) so you can modify settings. Change the file to read:
auto lo iface lo inet loopback iface eth0 inet dhcp allow-hotplug wlan0 auto wlan0 iface wlan0 inet dhcp wpa-ssid "WHATEVER YOUR WIRELESS SSID IS" wpa-psk "WHATEVER YOUR WIRELESS PASSWORD IS"
- Save and exit from nano (CTRL+X) and reboot your Raspberry Pi by typing:
sudo reboot
Update Raspbian
- Before getting too much farther we should make sure that Raspbian (that's the operating system that your Raspberry Pi runs) is up to date. This is the same as doing a windows update, but through a command line. Type the following and press enter:
sudo apt-get update
- Now update all installed packages of Raspbian (this will take a while)
sudo apt-get dist-upgrade
- Note that neither of the above steps will work if your WIFI is not setup correctly
Install WinSCP
- Once we get your table up and running, you are going to need a quick and easy way to get files (games) onto your Pi. This is where WinSCP comes in. Think of it as a tool to "upload" files to your Raspberry Pi
- Download and install WinSCP onto your windows computer.
- In order to connect WinSCP to your Pi it needs to know the Pi's IP address. This can easily be found by running the following command on the Raspberry Pi:
ifconfig
- A bunch of stuff is dumped on the screen, but the IP will be the one listed after the wlan0 (for example 192.168.2.102)
- Create a new connection in WinSCP (see photo) with:
- file protocol set to SCP
- IP set to your IP address discovered above
- username is pi
- password is raspberry
- You can now copy any files you want from your computer to your raspberry pi via the wireless network
Install Putty
- Up to this point we required the raspberry pi to be hooked up to a monitor via the HDMI cable in order to work with it. Once it is in the arcade table, this is no longer an option unless you plan on having a keyboard hooked up to it all the time (I'm pretty sure arcade machines don't have keyboards!). In order to run commands like we have, you will need to have another tool that will connect to the Pi and provide us a command prompt. This is what Putty does.
- Putty is a windows tool - for a mac you can simply use the built in terminal
- Download and install Putty onto your windows computer
- Run Putty and connect to your Pi using the same credentials and IP as when you connected with WinSCP
- A terminal window will open with a command prompt with which you can type commands to your Pi through the network the same as we have been doing - pretty sweet! You could theoretically disconnect your monitor and do the rest of the steps through Putty if you wish, but it is always nicer working directly on the Pi itself.
Installing the Joystick testing tool (jstest)
- To test your joysticks (It's coming soon, I promise!) it is useful to install jstest onto your Pi. Type the following and press enter:
sudo apt-get install joystick
- We will go over how to use jstest later.
Fixing issue with Xin-Mo Dual Joysticks
- If you did not purchase this brand of arcade joystick you can skip this step. If you do have this brand then you're in for a WONDERFUL treat. You need to update the kernel of Raspbian. A kernel is the main guts of an operating system. Xin-Mo dual joysticks have two weird things happening:
- The joysticks seem to fire multiple events which makes game play down right infuriating
- Since two joysticks are masquerading as one the second joystick will not work. This makes having two joysticks on your arcade table pretty pointless - good gaming calls for good company. We need to fix this!
- Updating Raspbian's kernel will fix both these issues
- Before we get into the nastiness of kernel updating, we need one more program installed in order to pull it off. Enter the command:
sudo apt-get -y install gcc make ncurses-dev
- We are now ready to update the kernel, but to what? A smart guy with the handle "Feederchain" actually went into the kernel code of Raspbian and made the necessary tweaks (kudos to you Feederchain - you are a true wizard http://blog.petrockblock.com/community/members/feederchain/). Luckily for you I have uploaded the entire custom kernel for you to download (see the bottom of this step for the file)
- Using WinSCP copy over the kernel file (customkernel.tar.gz) to /home/pi (WinSCP will be in this folder by default when it starts up)
- The kernel is archived in a gz file. Next step is to extract it onto the pi:
tar xpfvz customkernel.tar.gz
- Move to the folder that was just created by the extraction:
cd custom_kernel_1.20150317-1
- run install to update kernel:
sudo ./install.sh
- This step was required for RetroPie 2.6 and I repeated the process for RetroPie 3.6, but it is possible it might not be necessary. It is worth a shot to try your joysticks without doing this first.
UPDATE : For Raspberry Pi 3 the previous step with updating the kernel is no longer necessary. You can fix the joystick problem by editing the /boot/cmdline.txt file:
sudo nano /boot/cmdline.txt
- Add the following to the end of the only line in the text document (starting with a space):
usbhid.quirks=0x16c0:0x05e1:0x040
- Save the file and reboot
- Web references for this step are:
http://blog.petrockblock.com/forums/topic/autofire-on-the-axis/#post-87676
https://retropie.org.uk/docs/Xin-Mo-Controller/
Setup Audio for Raspberry PI
- We wouldn't want to miss out on all those awesome bleeps and bloops! We need to setup the headphone jack to be the main audio output port.
- Open the RetroPie setup screen by typing the following commands:
cd ~/RetroPie-Setup sudo ./retropie_setup.sh
- Cursor down and click on Setup / Configuration
- Cursor down to "Set Audio Configurations"
- Select Headphones and press enter
- Press ESC to return to the main menu and ESC to exit setup
Customize the Splash Screen
- You may have noticed that when RetroPie boots up you see a splash screen on the screen (a sort of joystick-baked pie). You can replace this splash screen with whatever you want.
- Design your splash screen and save as a PNG image that is 1280X1024
- Open WinSCP, connect to your Pi, and navigate to
/home/pi/RetroPie/splashscreens
- Create a new folder here called "MySplash" and copy your PNG image to that folder
- Back in RetroPie setup (assuming you haven't exited it yet) go to "Configure Splashscreen"
- Select "Choose own splashscreen" and select "MySplash" and press enter
- Press ESC to return to the main menu and ESC to exit setup
Changing the Emulation Station Theme
- You can change the look of Emulation Station to one of many themes. The RetroPie github repo does a good job of explaining this - so I will just leave this here
That should be it in terms of the RetroPie. The next step is to copy over some games for testing!
Linux Command Quicklist
For reference I have included below a quick and dirty list of useful commands for Linux
To shutdown your Raspberry Pi
sudo poweroff
To reboot your Raspberry Pi
sudo reboot
To exit Emulation Station (RetroPie) and get to the command prompt (if keyboard connected to PI)
press F4
Test joysticks with jstest
jstest /dev/input/js1
- assuming that js0 is the keyboard. If no keyboard present then swap out js1 with js0
To find any file use the command:
sudo find / -name nameOfFile.ext
To list with details
ls -lah
To remove file(s)
rm filename.ext
rm *.*
rm startsWithThis*.*
To remove a directory that has files in it
rm -r directoryName
To remove everything in a directory including files and sub directories
rm -rf *
To download anything from the web:
wget "http://url"
To get access to a connected USB thumb drive
cd /media/usb
To go into the Raspberry Pi setup type at command prompt:
sudo raspi-config
To go into the RetroPie setup type at command prompt:
cd ~/RetroPie-Setup<br>sudo ./retropie_setup.sh
To exit a program at any time press:
CTRL+C
Attachments
Step 9: Installing and Configuring Games
The next step is to install and configure some test games on RetroPie:
- Games are called ROMs (Read Only Memory). They are called this since they are digital versions of the old cartridges / circuit boards of retro games. You can't get more read only than game cartridges.
- ROMs are stored as ZIP files
- To install ROMs onto RetroPie you need to find the game ROMs (Zip files) for specific emulators and copy them into their corresponding emulator folder on your Raspberry Pi. The emulator folders are located at:
/home/pi/RetroPie/roms/[name of emulator]
- WinSCP is the perfect tool to copy these files to your Pi
- There is no need to uncompress the ROM zip files. Just leave them zipped up as is in their corresponding emulator folder.
- Emulation Station will need to be restarted before your games will show up. If you are currently at the command prompt on your Pi you can restart with the command:
sudo reboot
- RetroPie comes with a number of games, including some ports of old PC games such as Doom! Of course, if you don't mind skirting outside the law, there is a whole world of pirated games out there on the web. Obviously I can't recommend websites or provide tips on how to find these games - but as it is with the internet, people will always find a way.
- On that same note there is a website that has a collection of game ROMs that are all public domain and legal to download and use. Check out pdroms.de
In order to test the joysticks in the next step you will want to make sure you have a few different emulator games installed and ready to go.
Step 10: Prototyping Your Arcade Table
With all the configuration finished on the Pi and some test games installed we are ready to get something actually working - at least as a prototype. A big part of this process is configuring the joysticks. Be warned - it is time consuming and involves a lot of testing and tweaking so it is best to build a simple prototype and wire the joysticks all up. This way you can plug your joystick USB into your Pi and complete all configuration before everything is mounted inside the table. This is a much more comfortable setup then being hunched over your arcade table for hours on end. We will save that for when you are actually playing games on it!
For my prototype, I built a simple joystick rack and drilled all the holes for the joysticks and buttons. As a side note, it isn't a bad idea to do this step before drilling the holes in your actual joystick control box of the table - treat this as a practise run.
The joystick I bought from Ultracabs came with a simple instruction sheet, a USB connector hub-like circuit board, and a whack load of wires. There was no easy way to wire this up and not look like a mess. The instructions are pretty clear, but if you want a bit more guidance the folks at Ultracabs put together a helpful video of the entire process. See picture of finished prototype.
That is the easy part - now on to configuring the joysticks.
Configuring Joysticks with RetroArch (Most Emulators)
The configuration of your joysticks depends on what emulators of the RetroPie you are going to use. Most people will gravitate towards a small handful of them - I am only interested in Commodore 64 / MAME / NES / SNES. Obviously the more emulators you use the longer you will be configuring and testing - BUT there is a shortcut. RetroPie implements a system called RetroArch which is a global configuration that most of the emulators will use for the joysticks. In a nutshell, RetroArch is the tool we use to map the select button, the start button, A, B, etc. to specific buttons you have installed in the arcade table. It is done by updating a text file.
Enough talk - let's do this!
- Plug in your prototype joysticks into the Pi and start it up. Raspbian starts up (OS) and then Emulation Station. Emulation Station will recognize this is the first load and require you to configure your joysticks.
- Go through and follow the instructions with either one of your joysticks. By default, it assumes that the controller is a game pad so you will need to skip some of the button mappings; you can press and hold any button to skip.
That was crazy easy?! This process does configure your joysticks to work with Emulation Station and also sets up defaults for RetroArch - but there is one thing about the defaults I didn't like. An intuitive way to exit an emulator and get back to Emulation Station when the user is done playing a game. By default RetroArch is configured so that pressing select (the hotkey button) and start (the emulator shut down button) at the same time will exit the emulator. That works, but I find it TOO easy to press that combination of buttons by accident while in the middle of the game. Instead I wanted to setup my player one button (which is on the front edge of the table and not on the deck of the joystick control box) to be the hotkey button and one of my yellow buttons to be the exit emulator button. This would ensure no accidental emulator exit could occur.
To make this change we simply need to edit the RetroArch text file with the corresponding id numbers for the desired buttons - BUT What the heck are those button's id numbers? This is where the jstest tool saves the day (We already installed it in a previous step).
Run jstest by typing in the command:
jstest /dev/input/js0
- Note that the js0 might be js1 if you have a keyboard hooked up since it takes the js0 identifier.
- The second joystick (if you have one) will be js2, in this case
When jstest is running you will see a display of all the detected buttons for that joystick. This display will also change when you press any of the buttons or mess with the joystick. It is essentially a testing tool, but more importantly you will be able to see the ID numbers that are assigned to each button. Press the button you wish to be your hotkey button and note the id number. Do the same for the button you wish to be the exit emulator button.
Now onto the edit of RetroArch text file. Type the following into the command prompt:
cd /opt/retropie/configs/all ls
This will dump out a list of all files and folders. Among the list you should see a folder called retroarch-joypads (It is possible the folder might have a different name). This was setup when you did the initial control configuration with Emulation Station. Type the follow commands:
cd retroarch-joypads sudo nano [whatever the name of the CFG file is].cfg
This will open the nano editor once again. To change the hotkey and emulator exit buttons, two lines need to be adjusted to the id numbers you noted from the jstest:
input_exit_emulator_btn = "4" input_enable_hotkey_btn = "8"
Where 8 is the id number of your hotkey button and 4 is the id number of your exit emulator button.
Run a game (anything except MAME) and this button combination should exit the game.
Here is a great YouTube video on this process.
The RetroArch documentation can be found here.
Configuring Joysticks for MAME
RetroArch sets up joystick configuration for most of the emulators of Emulation Station, but MAME seems to be a beast of its own. To configure MAME games you need to run any MAME game and press the TAB button to open the menu. From there you can edit the "general controls" (which are global to all MAME games) and configure all the joysticks and buttons for all games.
To add the same button combination to exit the MAME emulator (just like in RetroArch) scroll down the list to UI Cancel and set it to the same key combinations (it allows combinations of buttons as input!)
You may find you need to adjust the "game controls" to customize controls for certain games. Unlike "general controls" these changes only apply to the game in question.
With that you should have a working prototype of your arcade table that should keep your gaming needs at bay while you finish the rest of the table build :)
Step 11: Adding Joysticks and Wiring It Up
This is the step where we put all the parts into the table. Time to pull up the sleeves again:
- There is no doubt that your arcade table is going to have a few wires running through it. Many of the wires are going to be power cords supplying power to the multiple components : monitor, speakers, and your Raspberry Pi. I wanted to have a single switch that powered on the whole table (all three components). I bought an inexpensive power bar, cut the plug end off and wired it up to an Inlet Module plug. In order to do this I bought a wire crimping set and added proper wire connectors to the ends of all the bare wires from the power bar. This is electricity we are talking about here - so this is not something you would want to do half-assed. Wiring it up wasn't too difficult (see pictures for tips) and there are lots of references on how to do it online. In the end you have a power bar that is turned on by a flick of a switch - which turns on my entire arcade table.
- The Inlet Module Plug I purchased requires a fuse (I only figured this out after the fact) so I had to go out and buy one. Make sure that the amperage (measure of electrical current) of the fuse is large enough to handle all the components that will draw power through it. It's easy to do - just find out the power draw of your monitor (the biggest power hog), your speakers, and the Pi and add them all up. If the total is less than your fuse's amperage then you are good to go.
- I mounted my speakers facing down on angled mounts (built from plywood end cuts) so they would be flush with the bottom of the table. The sound coming out of the bottom of the table instead of directly at the player is reminiscent of the old style arcade machines; many had their speakers pointed out the top.
- Funny enough, the power supply for the dumb speakers was bigger than the actual computer (Pi)! In any case, I mounted it with some All-Round banding.
- I spent some time doing cable management with a bunch of wire brackets I bought at the hardware store. This is not a necessity, but I like to keep things neat and tidy.
- I dismantled my prototype and mounted the joysticks and buttons into the table (your table should start looking really awesome now) and rewired them exactly as they were before. My sketch from my prototype helped a lot at this stage.
- Because my player one and player two buttons are mounted on the far left of the table the wires that needed to connect to them were too short to reach! This is where I used the spare 22AWG wire (I bought mine at The Source). I cut the original wire and soldered in a length of the spare wire to extend it.
- The wiring inside the joystick control box was a bit unruly, but not really avoidable due to the sheer amount of wires.
Step 12: Top It and Bottom It Off
The step of the final assembly has arrived! Some thoughts on this step:
- I finished up the woodwork on the bottom to close it all in (we have cats) and also designed it so a large hatch panel could be removed for easy access. I have since used it a few times to access the Pi to hook up a keyboard. I suppose you could just leave the whole bottom open, but I wanted to close it as much as possible to keep the dust down.
- I had the acrylic table top covering cut professionally. Acrylic is a HELLISH product to work with if you don't know what you are doing - it chips really easily. At $100 a sheet, mistakes can be very costly. Not to mention that the clear plastic top is what everyone sees. So I decided to not even risk it. I took the whole table top as a template to a local place called Piedmont Plastics. They have locations across North America. If you live elsewhere I am sure there would be other companies like it. It cost roughly $160 and was the most expensive part of the whole build - but well worth it to avoid the aggravation and it looks awesome. I fastened the acrylic down with four furniture screws I found at my hardware store. They have a nice flat top on them which looks clean and professional on the table top.
Step 13: Designing Table Top Graphics
No arcade machine is complete without some cool cabinet graphics. I have seen some arcade builds that include back lighting and all sort of neat features. For my table I aimed for a table top graphic and that is all. Since the table top is covered by a sheet of acrylic, mounting the graphic was fairly easy - it was pressed between the table top and the acrylic. Some thoughts and tips on this process:
- You can download all sorts of different vintage arcade game graphics from www.arcadeartwork.org (isn't the internet awesome?). Although there are a large number of high resolution images, I would recommend only working with the vector graphics so you can scale them to whatever size you want without loosing quality. You can find them on the sidebar main navigation of the website.
- Measure your table top and be sure to leave a 1/4" bleed edge around all edges. Have fun and design your graphic! I used Photoshop but free alternatives like Gimp would work just as well. Either way, make sure your image resolution is high. Printing needs a nice high resolution to avoid pixelated graphics. Mine was 300dpi.
- When the table top graphic was finished I converted it to a PDF and printed it out in black and white. I then cut each page out and taped it all together. It involved a bit of work, but worth it since I could test how well the graphic would fit on the table top. I made note of any issues and altered my graphic accordingly. Not only this, but by doing all the cutting provided me with some practise on how to do it effectively.
- Because I'm paranoid I did this step twice but the second time in color to see if the colors looked right on the table top.
- Finally I had my PDF professionally printed by a local printer (avoid Staples - go with a printing company). It cost about $30 and was worth every penny. I had it printed on a heavy stock to avoid any waviness when mounted under the acrylic.
- I carefully cut out the final graphic (using a sharp utility knife) and placed it where I wanted it to be on the table top. I then laid the acrylic over top and used a pin to mark the center of the four bolt holes. I then cut out the holes, and secured the finished graphic on the table top with double sided tape (non-acidic). I finally placed the Acrylic table top covering back and secured it down
Step 14: The Finished Table!
Congratulations - you're done! Now on with the fun part - the gaming! Hopefully this Instructable took a lot of the guess work out of your own arcade table build and saved you some time and headaches. Please feel free to drop me any comments or questions. Thanks for reading and good luck!