Way back when, I bought an iCade. This bartop-style arcade machine was actually a very pretty bluetooth controller. Simply slot your first-generation iPad into the ‘screen’ and pair. A number of iPad games supported it, but I never really enjoyed the experience. So, I decided to turn it into a ‘proper’ arcade machine by bending back an old laptop and wiring the controls to the circuitry of an old handheld USB controller.
It’s been a couple of years now and, never having been happy with the result, I decided to try again. This time, the Mighty Mouse that is the Raspberry Pi will be running the show.
The main problem with the previous build was the screen. The iCade is old-school portrait style so any regular screen needs to be rotated to fit. The old Compaq laptop I was using had a polarising filter which, when in place, gave a jarring effect from eye-to-eye. I tried to locate a suitably sized screen for the iCade but everything was either too small, too large or way too expensive.
Mind you, I still had my old iPad lying around. It’s now more-or-less defunct bar the most basic operations and it’s forever stuck on iOS 5. Could I upcycle the screen? To Google!
The answer, to my surprise, was a resounding yes. A company in (you guessed it) China was producing a generic LVDS-to-HDMI board (eBay UK) and had a variant that supported the screen of the first-generation iPad. All of these was quickly procured from a popular auction site for the princely sum of £23. Two weeks later a bundle of circuits and cables turn up. Time to get a screwdriver.
If this project is of interest to you, time for a massive disclaimer. What I did next ONLY WORKS ON THE FIRST GENERATION IPAD. Any attempt to remove the screen from ANY OTHER MODEL will probably result in a SHATTERED SCREEN and SADNESS. Why? Only the first-gen iPads used clips to hold the screen in place, all others are GLUED.
Getting the screen out was surprisingly easy, just gently release the clips with a small flat-edged screwdrivers little-by-little. The screen then comes out easily with a few cables and sticky bits to remove.
To my utter astonishment, wiring in the mystery boards from Schengen worked first time. Suddenly, my iPad screen was a 720p TV. The board supports HDMI, VGA and composite inputs and even comes with a remote control and control buttons to set brightness, contrast and more. Sure enough, a test wire-up to my Raspberry Pi 3 got a screen right away. The project was up and running.
You will need:
- An iCade (lots on eBay at time of writing)
- Raspberry Pi 3 (only sensible choice for running arcade games) and a nice, fast SD card
- iPad screen LVDS-to-HDMI convertor
- 12V 2A PSU to power the interface (barrel connector, centre positive) (example)
- 5V 2.5A Raspberry Pi PSU
- 11 jumper leads with at least one socket/female end (about 20cm in length) to connect the controls to the GPIO on the Pi
- 20cm HDMI cable (Male-Male)
- Thick black card
- USB-powered speaker
- Command Velcro stickers (large)
- (Optional) Raspberry Pi heatsinks (if you’re planning on overclocking to run some of the more demanding games)
Start by disassembling the iCade and removing all the electrical gubbins, snipping the wires to the controllers with a bit of length left over. Now attach the jumper leads (not the socket side) to each line (you’ll need a ground too). I used small electrical junctions but you could solder them instead. Feed the jumper leads through the back of the controller assembly (I opened a hole with some pilers). You can now reassemble the controller unit.
Here’s my choice of GPIO connections (Broadcom pin names):
- Joystick Left: GPIO22
- Joystick Right:GPIO17
- Joystick Up:GPIO27
- Joystick Down:GPIO4
- Red 1:GPIO6
- Red 2:GPIO12
- Black 1:GPIO13
- Black 2:GPIO16
- White 1:GPIO26
- White 2:GPIO21
Of course, you’ll need to ground the controllers as well to any of the Pi’s GND pins.
Note that the right-hand black buttons are unused (although there is capacity to add them if you wish).
Remove the iPad retaining ‘dongle’ at the front.
Mount the iPad screen centrally on the backplane. I initially secured it with screws, but the pressure caused light blemishes on the screen. I now use two ‘Command’ velcro strips to hold it place, much better.
You’ll need to make a small cut of an inch or so to feed the cable between the screen and the convertor board, so it can go to the rear of the backplane without getting in the way.
You can now resemble the entire iCade unit.
I now mounted the convertor circuit (which is actually composed of three parts) to the back of the iCade, screwing them in place.
Screw the Pi into place in a suitable spot to connect the HDMI cable to both it and the convertor as well as reaching the jumper leads.
Connect the jumpers to the GPIO on the Raspberry Pi, not forgetting the ground.
For sound, I had an old USB-powered speaker lying around that I was able to connect directly to the Pi’s audio out and use the Pi’s USB ports to power it. So that all got screwed on the back too. I even procured a small in-line volume control so adjusting it would not require a keyboard.
How about power? I decided not to be clever, mainly due to the requirements of the Pi 3, so built a 2-gang extension lead with in-line power switch to power both the Pi and the convertor. This was mounted, with the two PSUs, to the side of the rear of the iCade again using Command velcro strips so it can be moved if access is required.
Finally, with a LOT of measuring, I cut out a bezel for the front using thick black card.
Time for some software, methinks.
As with previous projects, I used the amazing Retropie variant of Rasbian. This saves So. Much. Time. I’ll leave you to comb their excellent site for details on how to set everything up, but how to read the inputs from the controllers? Well, this turns out to be much easier than I expected thanks to Adafruit’s Retrogame code which was built exactly for this purpose. Once installed, it monitors GPIO lines of your choosing and converts any input to the keypress of your choice. Emulators are none the wiser. Here’s my config file to match the GPIO wire-up from earlier (/boot/retrogame.cfg):
LEFT 22 # Joypad left RIGHT 17 # Joypad right UP 27 # Joypad up DOWN 4 # Joypad down A 6 # 'A' button B 12 # 'B' button X 13 # 'X' button Y 16 # 'Y' button S 26 # 'Select' button D 21 # 'Start' button ESC 26 21 # Hold Start+Select to exit ROM
Depending on what emulators you are using, you will need to configure them to use the controllers, so have a keyboard handy when setting up. Currently, I’m just using MAME for arcade games but there’s no reason to avoid NES, SNES, ZX Spectrum, whatever Retropie can handle.
A couple of points on the display. Of course, initially, the screen is landscape but fortunately, Raspbian makes it quite straightforward to adjust this from the command line:
sudo nano /boot/config.txt
And enter the following on a new line at the end of the file:
Now reboot the Pi. EmulationStation plays very well with this new setup, as do the variants of MAME.
You may find the screen doesn’t look quite right, maybe a little stretchy. This is a common problem all to do with the Pi choosing the wrong HDMI mode because the screen’s CPU is telling it porkies. Thankfully, it can be easily resolved. Again, from the command line:
sudo nano /boot/config.txt
And add the following at the end of the file:
This forces the Pi to use the optimum settings for the iPad screen. If, for any reason, you don’t get a display, you can mount the Boot partition of the SD card on a regular PC/Mac and remove those lines from boot/config.txt. If you get ‘dancing speckles’ on the screen, have a play with the brightness and contrast controls.
Finally I have an iCade that I’m happy with. Whilst this isn’t a complete write-up, if I’ve not made anything clear or have been plain confusing, ask away in the comments below. If you ever want to have a play, I’ll be bringing it along to future Raspberry Jam events in Milton Keynes.