There are many Instructables out there using the RaspberryPi to build/make Retro Arcade cabinets. All of them are very concise in the instructions with the build and setting up the RaspberryPi. In this particular Instructable we will focus not so much on the build itself, but setting up/controller configuration and adding ROMs to the RaspberryPi and the troubleshooting that ensues. In addition, I will try to utilize this as a resource for finding hard questions, my work digging around the internet is your blessing.
I will also show two ways of approaching inputs for HAPP Joysticks and Buttons. There a multitude of other Instructables about connecting Xbox, and PS3 Controllers. I plan on going in depth, on how to setup the HAPP Joysticks and Buttons because for me (could be dumb) but I had to do a lot of research and learn much more Linux than necessary. However, my mistakes and mishaps are your fortune because I intend to walk thoroughly through step by step. Another major theme I will try to incorporate is where to get some of these hard to find material at low prices. Most often than not, one can find the materials for any project in the online, but if money is the issue then I encourage you to read on. This project is actually my senior project to graduate the General Engineering Technician (GET) program at Tri County Technical College, also my first Instructable and I will do my best to have a clear point and clear instructions. (Please be nice) My first instinct after the project announcement was to go to Instructables.com, and find some info on how to start (which there are very many). **Side note- I had been planning to make one of these for personal usage, so I saw the opportunity not only to get a good grade but also to benefit future projects - that I also hope to put on Instructables. Well one of the main problems I had was first, where can I find vintage ROMs and how to add them to the Pi? Well actually the question was how do I do this legally so that I wouldn't infringe on any copyright. Second problem, well let’s say personal vendetta, was where do I find these parts without funding the already rich fat cats who own everything. I usually alway go to my local thrift shops and always see these retro systems or at least games, so I started picking them up for $1-5 but that's pennies knowing that I physically owned the ROM now. The last problem was the best, setting up to run my HAPP Controls from the 40pin GPIO’s that the RaspberryPi.
(Updated 5/15/15) Time was short and my ability to get the Joysticks and Buttons were not working, so in effort to make it to the Senior Trade Show, I ordered IPAC2 board that acts like a keyboard or gamepad depending on user configuration. (Also it has the ability to easily set a 'Hot' button to access other buttons that would normally disrupt gameplay) **And it has a expansion pinout for a trackball --Future additions No worries though if you do not want to buy the IPAC2 board, although I had to opt not to use it I however obtained the necessary knowledge and found the resources to make it work. At the end of this Instructable I will leave a good amount of great resources that helped me, and will surely help you as well.
Step 1: How Do I Want to Use My Pi?
Well, this comes down what you really want to do with the RaspberryPi? Is it going to be used to run multiple platforms, or a single one; What controllers are you going to use? Also do you only want to use this as a gaming system or maybe you want it to be an entertainment center Thinking these small things through saves loads of time, and space on the drive. You could also have multiple uses for it, not only emulates games but could be made into an entertainment center controlled by an application on your phone.
For this Instructable we will be using RetroPie by (petrockblock), this was just my personal preference. (I also recommend due to the massive amount of support and blogs concerning issues, they are quite helpful)
Here is a list of other similar projects:
- Portable Battery Powered Pi By NEIN
- Table Top Touchscreen MAME by ChromationSystems
- Raspberry Pi Arcade Table by Aleator777
We however choose to build a custom cabinet:
Other bash scripts or
Any way you choose to play is fine as long as it works for you, do also take into account what games or emulators you want to specifically use.
- RetroPie Emulators (Which is what I needed, I wanted my teachers to be able to play games that they havent in decades)
1977 Atari 2600
1977 Apple II
1977 Commodore PET
1979 Atari 800
1980 Commodore VIC-20
1981 IBM PC
1982 Commodore C64
1982 Commodore CBM-II
1982 ZX Spectrum
1983 Nintendo Entertainment SystemGame
1984 Apple Macintosh
1984 Amstrad CPC
1984 Commodore Plus/4
1985 Commodoce 128
1985 Commodore Amiga
1985 Atari ST
1985 Sega Master SystemGame Console
1985 Sega System 16
1988 Sega Genesis
1988 CP I
1989 Atari Lynx
1989 Game Boy
1990 Sega Game Gear
1990 Neo Geo
1990 Super Nintendo Entertainment
1991 Sega CD
1993 CP System II
1994 Sega 32X
1994 Sony PlaystationGame Console
1996 CP System III
1996 Nintendo 64
1998 Game Boy Color
2001 Game Boy Advance
2004 C64 Direct-to-TV
Step 2: Gathering the Materials
Well first you are going to need to decide on how you want to display your MAMEing system. Again I'll refer you to the many instructables that go in depth on classic cabinets to portable ones. However, since this particular project is going to be displayed in our program section at school we (my partner in crime, pictures soon to come) decided we wanted to infuse some new age into this retro system.
Tools and Supplies Needed To Complete This Project:
**My father used to always say, "If a man has the right set of tools he can build anything". With that in mind: We may have had to use some other methods to obtain similar results. (We are a fairly small program so tools are sparse)
- List of tools we used, I am sure there are better ways of doing some of what we did so I will leave this to the user's discretion.
- Table Saw, Miter Saw, Jig Saw; Wood Putty, Wood glue, Silicon etc.
- (98"x48" 1/4") MDF board ($35), Highly recommend due to its soft nature (eg easier to cut). Again, this is just what we decided on, it has the closest look to a Retro Arcade Machine.
- RaspBerryPi B+ ($70) (Amazon has a the kit, with wifi bluetooth and HDMI cable and 8gb micro SD card )(here)
- LCD Tv ($100-200) (this particular one was donated to the college. HERE is where I would suggest to go to your local thrift shop and find a deal, the bigger tv actually caused some problems.) You can pick up a great monitor at a local thrift shop and buy an adapter to convert VGA to HDMI, really cheap and still great video play.
- Ultimarc IPAC2 -($35) Went with this option because of the expandable trackball pins (for future implementations), but this can be completed with or without a USB encoder or USB block. It will just be a little more wiring and simple code. (Here on eBay)
- Cheetah TV Wall Mount-($25 Optional) - Future use for rotation of the screen for vertical games (Still working on that)
- Computer Speakers (>$10) At a local thrift shop you will most definatily find an acceptable pair. (Unless one wants to play the sound from the HDMI cable through the Tv Speakers, again personal prefrence here)
-(Recommended) One or two more MicroSD cards, one for the main settings the other for testing purposes.
-(Optional) ($20) HAPP Button Controls for Two Players. (Retro Joysticks and Pushbuttons)
- (Optional)($ Donated) (20"X40") 1/16 inch Lexan Sheet. (Or any equilivant plastic board to cover the screen if desired
Now with everything gathered and hopefully have decided on which platform(s) that we will emulate.
Step 3: Setting Up RetroPie
So I cannot stress this enough, be careful when you setup your Pi. It is easy to miss a step and get confused. Will also be doing a RaspberryPi (stand alone - within the raspi) Setup
What is the RetroPie Script anyways ?
The RetroPie Setup Script lets you install and configure all the emulators, front-ends, drivers, and other components for your retro-gaming console.
Useful Programs: (Windows Users)/(Mac OS) (Files located in pictures)
-SD Formatter (.zip / .pkg) - Needed to erase and format SD cards
-WinSCP - Remotely log into Raspberry Pi through SSH
-Win32DiskImager - Needed to write .img files directly to a SD card
-Putty - On screen virtual Raspberry Pi Terminal
- Path 1 People Start Here:
- RetroPie SD-card image Version 3.0 BETA 2 for Raspberry Pi 2. (Downloading SD Image)
-Start by Downloading the .img File Above.
-Once downloaded, Right click on the file and Extract/retropie folder. When it is downloaded it is a .gz file, we need .img file so it needs to be extracted inorder to write to the card. (Use prefered method of unzipping file winRAR etc.)
-Once the RetroPie v. 3.0 beta (as of 6/2015), .img file is written to the Micro Sd Card. (Windows)(Mac)
-Insert the newly written SD card in the RaspberryPie then,
-Plug in the various cables e.g. (HDMI, 3.5 mm Jack, Power Cable, etc.)
-Turn on the tv to the correct HDMI outlet and wait for the Pi to boot up.
-After this process, it should boot to the terminal,
-The default username is: pi
-The default password is : raspberry (Note: Linux Security feature will cause no characters to appear, but if you spell it correctly and press Enter it will work)
Software Configuration of the Raspberry Pi:
When your Raspberry Pi has finished its first boot, it will prompt you to enter a “login” – this is your “user ID” on the system. (Default) Enter “pi” and press enter. It will then prompt you for a password. Type “raspberry” and press enter.
It will load into the RetroPie Shell (more than likely it will start repeting "Emulation Staion. Will reload again until a key is pressed" (something like that), press any key on whatever device you have connected (prefferably a keyboard) It will take you to a screen showing different information about your device and the command line should look some like ~pi:home/.
Into this command line type 'sudo raspi-config'. *sudo is the root command. Next you will want to likely :
Select the first option, “expand filesystem” and press enter. (This will take a few seconds.) You will be presented with a message saying that the partition will be resized on your next reboot. Press enter.
If you would like a personal password setup in your own configuration, select the 5th item on the menu, “change_pass” and press enter. Follow the prompts after that to set up a new password. This password will be used for the user ID “pi”. (Default ID and Password are "pi" , and "raspberry", respectivaly)
Configuring your Raspi-config Settings
At the Raspi-config menu, select option 8 “Advanced Options” and press enter
Go down to option “A3 Memory Split” and press enter.Enter “128/256/512 depending on Rasberry Pi A/B/B+” into the field. Press enter. // Some may need more processing power than others, it depends on your setup.
Back at the Raspi-config menu,
Go down to the 7th option “Overclock” and press enter. (this will prompt a warning saying 'overclocking' can be hard on the device and obtrude its longetivity)
Press enter again to get past the warning screen.
Go down to the last option “Pi2 (personal prefence)″ and press enter, then enter again. // Other people may need more voltage for output pins so play around with what works best in your setup
In this menu there are mulitude of options from PS3/Xbox360 controller driver installs to Enabling the usage of SHH , USB ROM Service , etc.
Raspi-config menu is exited by pressing the right arrow key twice to select “finish”and then press enter.
It will ask you if you want to reboot now, select “yes” and press enter.
It will take some time to reboot, as it is applying all the settings on the next startup.
Installing RetroPie and EmulationStation (Stand Alone) - Path 2 People
This section is for the newer Raspberry Pi 2 B+. If you downloaded and mounted the RetroPie Image (Raspberry Pi A/B/ B+), you can go ahead and skip to Installing “
**Please note that everything is case sensitive**
--Download and copy the Raspbian image on SD card
First, we need to make sure you have the latest updates. Type in the LX Terminal, 'command line':
sudo apt-get update
This will take a few minutes, when it’s done, you will be back at the terminal, then type:
sudo apt-get upgrade -y git
This will take a few minutes, when it’s done, type:
sudo apt-get install -y git dialog
This will take another alloted time depending on Internet Speed.
Last type in,
cd // just type 'cd' then press enter,
git clone git://github.com/petrockblog/RetroPie-Setup // This will download the latest RetroPie Script
Once again you will be brought back to the terminal prompt. Type:
cd RetroPie-Setup //This will bring up the RetroPie-Setup directory, if you want to see your options type 'ls' to get a list of directorys to explore or programs to write/run.
sudo ./retropie_setup.sh //This will bring you into the RetroPie Setup as the sudo(super user).
This will bring you to the RetroPie Setup Screen:
From this screen:
You will be presented with a screen where you have a few different options.
-Option 1 (Binaries Based Installation) and press enter. The Binaries Installation should take about 15min. When that is complete: You will now be presented with window text files explaining where to put your ROMs. **Note, the emulators will not show up in EmulationStation Shell if it has no ROM(s). Simply take note of each window and continue to press enter to get back at the RetroPie Setup screen.
If you want to ensure up to date sources and dont mind wating a day then,
- Select Option 2 ( Source Based Installation) and press enter, now go grab a drink and have a nice movie marathon because this bad boy will be 14+ hours depending on Internet Speed.
As we finish installations with each path we merge here:
Path 1 and Path 2 people can Select Option 3 Setup and Configurations now.
- Make sure you either enable; SSH Service, and/or USB Service. // This will allow you to utilize and sync your ROMs.
Next, ADDING ROMs!
For Further Instruction or help visit Advanced Configurations on petRockBlogs homepage.
Another great resource is this guy 'Floob' at DailyMotion.com, he shows you on screen how to do almost everything on the Raspberry Pi.
Step 4: Adding ROM's to Correct Emulators
This is where I really wanted to go indepth with this Instructable. Maybe I am somewhat daft, but this crucial part is seemingly overlooked. Not for lack of knowing how to Add these ROMs, but just on how to obtain them litigiously.
- Well I wouldn't personally get on Google and search for free ROMs because techinacilly and legally you have to have/own a physical copy of the game to use the ROM.
-But ones choice is their own, it is not like everyone knows how to torrent anyways these days. **(Not Condoned!)
- What one could do, for legalities, is go to a local thrift store and find a hard copy of the game and then you have your ROMs offical to use. (Recommended)
-This is also where I found gold, somehow someone gave their Atari 2600 and bookos of games to my local Salvation Army, which I found and bought the assortment for $20 (12 games and the console w/ 2 joysticks).
--Found many other GameGear, GameBoyColor, PS1, SNES,N64 Games at various other "Thrifty" places for very cheap, now I can legally use this game.
**Also you can find some Free ROMs that are legally loaned out to users for enjoyment, not profit.(check these out)
(Remember these services must be Enabled/Disabled after RetroPie script has been ran)
Let Us Explore Ways of Adding ROMs
Usb ROM Service: With this all one has to do for Retropie (v3 beta2), obtain a flash drive, plug into a PC and create a folder called "retropie". Unmount device from PC, then plug into the Raspberry Pi (wait 20s). Take the Usb out of the Pi, and back to the PC. ( You should see where within "retropie" folder we just made, that the Pi has made new folders for BIOS and ROMs.)
- From that point all you will have to do is copy your legally obtained ROMs into the correct emulator folders. Then start EmulationStation in the Terminal, you should see your new copied ROMs and the Emulators that simulate them.
SSH (Must be enabled by RetroPie Setup)
To copy files, you can use the command line tool "scp" or a GUI like WinSCP (for Windows) or Cyberduck (for MacOS). I will forgo explaining this due to the vast amount of information out there on how to SSH into Raspberry Pi.
More indepth articles on how to:
Step 5: Usb Joystick or GPIO. Gottem Covered
First thing is first (what choice did you make)- UltmarIPAC2, GPIO, USB SNES controller, PS3/XBOX 360 controller.
- Emulationstation and RetroPie are shells ()
- Emulationstation has a different configeration file (.cfg) than RetroPie
- This meaning that the keyboard in one shell that moves through emulator and selects your ROMs, can act completly different in the RetroPie emulators. **We will have to make some slight modifications
- Therefore "Enter" in the front end (Emulationstation), may not be the same button inside of RetroPie which causes mess of headaches.
Tip: (Emulation Station will automatically configure your setup to use its front-end)
- Once you have this configured, select the MAME emulator and then a ROM.
-When the game starts up (depending on configuration) press the 'Tab' or 'F1' to bring up the menu to setup "General Input for emulators"
Now the UltimarcIPAC2 will try to auto configure buttons. (Two paths from here. One is to change the .cfg file on the Pi, Two is download IPAC2 sofware and configure the board on there)
**** I edited my keyboard configration to "us 104", I think this caused major issues because in each shell the keyboard was hard to find which key did what.
GPIO PIN People- (Supports up to 2 Joysticks and 12 Buttons)
First you will want to :
Download DigitalLumberJacks (mk_arcade_joystick_rpi)
-The github repository also has very clear instructions on how to utilize that library.
As for those who want to set up using other controllers:
Step 6: Using IPAC 2 and the IPAC Shift/software
Well, unless you opt'd to purchase the I-Paccuve or a 40 pin GIPO connector(recommend some connector, it will save you major headaches and time)
-It is pretty much plug and play utilizing the IPAC 2 or an equilivant USB adapter, we will attatch each button and joysticks to their assined place. (Always have your connections labled and preffereably on a cheet sheet paper to help you during Retro Joystick an button configuring)
-If you purchased the Ultimarc IPAC 2, I highly reccomend downloading the software here so that you can assign your own buttons and shifts. (otherwise it has a setup to match MAME settings)
-The IPAC 2 reads as a keyboard when first plugged into the raspberry pi, if you want a setup to where you will eventually not need a keyboard then I suggest leaving it like this, otherwise you can set up each button and the joysticks as a gamepad.
-This USB encoding device allows us to use what they call 'IPAC Shift', or in other words hot keys. Inside the software you can assign any key any value, the IPAC Shift helps if you are trying to not have a keyboard.
-Wiring in the next step started for GPIO Pins, but all the same you need to have a ground bus for Joystick 1 and buttons and another for Joystick 2. **Make Sure You Wire these Normally Closed -- meaning when the button is depressed it goes to 0v.
To the people who opt'd not to buy the IPAC 2 or equivalnt device, fear not for there is a library you can download to use and map out keys with ease. DigitalLumberJacks mk_arcade_joystick (located in the last step)
Step 7: Ready to Practice Some Soldering Techniques
If you did not get the GPIO Connector, this part is por vue.
1) LABEL, LABEL, LABEL! I cannot stress this enough, learn from my hours of mistakes and label all your wires. Seemingly I am very lucky, in that, not once but twice did I drop the RaspberryPi and lose where my wires were.
2) Solder all of the ground pins to one bus for one side and dupilicate with the other side but in another Ground Pin. (If you are using two Joysticks and various Buttons, I advise connecting grounds for player one and player 2)
3) Make sure to use good soldering techniques by keeping the wire and its contact point hot while adding solder, no one wants a cold solder joint. (Headaches)
4) After you wire everything up, its time to give her a 'lil test before we make this permanet (to do this simply get a volt meter and check each output pin for voltatge) It is not fun to wire everything up and gluing it down, not knowing that you accidently used the wrong port (Ooops, Headaches).
5) Once everything is fully functional and looks the way you want it, then its time to Hot Glue the ba jeezes out of this thing. *(Why? Because Hot Glue is non conductive and easily obtainable for us ++++its cheap)
6) All said and finished go over to the referance page and download DigitalLumberJacks 'mk_arcade_joystick', from there you will find numerous links helping you further. (As I cannot due to switching to the IPAC2) But it can be done!
Started this instructable in Febuary 2015
-Since then I have optioned to get the Ultimarc IPAC2. (which is great, because now I know how to do it with just the pins, oh how I love to learn)
- One great thing about the IPAC2 is that it seemingly is plug and play, you can virtually assign commands via software. Also has expantion board for a trackball.
Step 8: Measure Twice...then Have Somone Else Cut It
This is not focused on the build so much as the rest of the somewhat troublesome software problems. (Unless you want to duplicate our cabniet, you can go on to the next step.
So for luck I did fairly well, my partner actually is very affulent with wood.
As stated before this Instructable is going to focus more on the ROM aspect.
This cabniet was a custom built concept and design by my partner and myself. Although we will discuss how we made ours, just incase others like the design.
We Started out with a (98"x48") 1/4" thick MDF board.
-We had to deside what (not only asteicly) but functionality of our console system.
-We choose to encoperate the classic build but considerably less space taken up.
With consideration for our Retro Joysticks and Buttons we had to decide on a fair width, so as to be compact but also not be so close you would be ontop of another playing a game.
- After a few design tries we decided 30" was perfect. So we thusly constructed a base to support our cabniet, to add support we renforced the bottom with 2"x4" to ensure stability.
- Next we had to draw out a few ideas ( something that preserves the old school but encorperates some new school design) We opted to utilize the most out of our board and keeping it simple, so we went with triangle sides with a few simple cuts to give some flair.
Step 9: Test Test and Test Again - Debugging
Unless you are lucky, you will likely run into some issues:
- In the few quick videos I am trying to show how I have blended the configuration to move more seemlessly around.
- Also I show in a game how to use/ utilize the hot key from the IPAC 2.
**If you did not purchase this device you still can set up hot keys.
Step 10: Troubleshooting and Downloads
List of Sources:
-Raspberry Pi Forum Index // Great for when you run into problems, because more than likely someone else is having the same problem. If not then Sign Up and ask away, they are very friendly and helpful
And Lets not forget
-Adafruit Learning System // Huge resource for many projects like this and others to get the creative juices flowing.
Credit where it is due: Huge hat tip to these guys, they work really hard and do a fantastic job