UPDATE 2: 9/19/2019 – Added information about the joystick installation (Requested).
UPDATE 1: 11/24/2016 – There have been some questions about how the touch sensor was wired to the encoder. Unfortunately I did not have the connections documented, so I had to take apart the control panel to check it. I have included the touch sensor wiring below in the How To section below.
A few years ago, my Dad gave me an iCade for Christmas. It was fun for a short time. However, after a while the lack of games and the Bluetooth controller latency started to bug me. I had always wanted to build one of those big Mame cabinets, so I thought, “why not mod the iCade and build a nice desktop arcade machine (bar top arcade machine ?) that can play all my favorite classic games?” The goal was to be able to play Mame, Game Boy Advanced, Daphane, and Sega Games.
The first thing I did was Google “iCade mods” and started reading about others modding the iCade. The more I read, the more convinced I became to rip apart the stock iCade and begin a ground up rebuild.
Parts List :
Raspberry Pi 3
CanaKit 5V 2.5A Raspberry Pi 3 Power Supply
GeauxRobot 3PCS Raspberry Pi Copper Cooling Heat Sinks
Easyget Zero Delay Arcade USB Encoder
Xinci XC-DG003 Portable Aluminum Ultra Bright USB LED
FlePow Portable Power Strip Surge Protector Travel Charger
ARCTIC S111 USB-Powered Portable Stereo Speakers
Tontec® 10.1 Inches 1280×800 IPS Raspberry Pi Screen
Aurum Ultra Series High Speed HDMI Cable
Adafruit Standalone Momentary Capacitive Touch Sensor
iPazzPort 2.4GHz Mini Wireless Fly Keyboard
Gold Leaf Arcade Pushbuttons
Plexiglas (Cover Screen)
Misc Screws, Table, Cable ties, etc.
Photoshop to create graphics
How To :
I started by removing the controls and taking all the panels apart. I wanted the end result to look more like an actual arcade cabinet, so I built a new panels.
The top panel was extended. The middle panel was moved closer to the front of the cabinet. This moved the screen closer to the player and helped with the overall aesthetics. I also added a speaker and bottom panel to the cabinet. The only original panels used are the two side panels, which I stripped the black vinyl off of, and the plastic iCade control panel (because I wanted the 25 cent display).
Next, I started gathering the components needed to make this cabinet come to life. I decided on a 10.1 screen. Originally, the screen was going to be mounted in the portrait orientation, but later I converted it to landscape since it made playing scrolling games much better. (Example Metal Slug, The Simpsons, etc…). With the screen in landscape orientation, the portrait games are smaller, but in the end it looks good and I hardly notice it while playing.
The next big decision was the controls. It seems like everyone on the internet has an opinion about joysticks and buttons. I like to play games that work better with a 4 way joystick (Example Ms. Pacman), but I also like to play games like Gauntlet that require an 8 way joystick. Eventually I found the Mag-Stik Plus on ultimarc.com. This joystick allows you to switch “from 4 to 8 way mode from the top of the panel”. The Mag-Stik Plus seemed to fix my 4 way / 8 way joystick conundrum, however it is too big for the plastic iCade control panel. After a few minutes with my handy dandy Dremel, a nice hole was cut and the stick was installed.
During testing, I did not like how noisy the iCade buttons were. Wow are they noisy! When playing a game like Galaga, the loud click click click sound was too much. I decided to replace the buttons with some Gold Leaf Arcade Pushbuttons. These buttons are the same size as the stock iCade buttons, were simple to install, and are much quieter.
While I was reading about other iCade mods, I ran across this site. They took an momentary capacitive touch sensor and installed it behind the stock iCade 25 cent display. This allows you to simulate sliding endless quarters into the machine by swiping your finger over the sensor (Ingenious). It took some trial and error, but I finally figured out how to make it work on all my Mame games.
The joystick, the buttons, and the capacitive touch sensor were all hooked up to the Easyget Zero Delay Arcade USB Encoder.
Update 1: Touch Sensor wiring – I do not have access to Photoshop or Visio right now, so you are stuck with my awful MS Paint skills.
First, I spliced the touch sensor’s power (VDD) and ground (GND) into the USB cable that powers the USB joystick encoder. Second I connected the OUT on the sensor to the blue wire that usually connects a button to the encoder. The other wire was not needed so I used some electrical tape tie it down.
Once the wiring was complete and tested I used some super glue to secure the sensor in place. Finally a little more electrical tape was used to secure the wires inside the control panel.
End Update 1
Update 2: Joystick Mounting – The Mag-Stik Plus came with a metal mounting plate that lines up perfectly with the holes already in the plastic ION control panel.
The plate goes on the bottom of the control panel and 4 screws are used to fasten it from the top of the control panel.
For the joystick to to fit correctly I had to cut the bottom of the panel and rotated the joystick 90 degrees. I then mapped the controller directions in RetroPie to account for the rotation.
End Update 2
I painted the cabinet black and started looking for a solution for the sound. I found some cheap ARCTIC S111 USB-Powered Portable Stereo Speakers on Amazon, ripped them apart, and mounted them into the cabinet. The speakers have a built-in amp that I also mounted in the cabinet. I have read that the Raspberry Pi’s 3.5mm audio jack outputs 1v max. I can’t confirm this, but without the amp, the speakers were not loud enough.
Next, I started to assemble all the parts. The 10.1 screen and USB LED light are powered by the USB ports on the power strip. I had to run the Raspberry Pi 3 off a CanaKit 5V 2.5A Raspberry Pi 3 Power Supply plugged into an outlet on the power supply. When the Raspberry Pi was plugged into the USB ports on the power strip, it could not get enough power and caused random game issues.
I used a 12 inch HDMI cable to connect the Raspberry Pi HDMI port to the screen controller board. When powering on, the Raspberry Pi tries to boot before the screen is fully powered. This could be because the screen is plugged into the USB port on the power supply, so I had to edit /boot/config.txt file and set hdmi_force_hotplug=1. I will post my full config.txt file below.
Using Photoshop.. that I have installed on a work computer… Shhh, I made a template of the control panel top, control panel front, marquee, and both sides. My wife and I then scoured the internet looking for classic arcade artwork and came up with a theme to cover the cabinet. I will attach the Photoshop template files below.
Once the art was complete, I sent it to Game on Grafix for printing. They did a great job and I would recommend them for your projects.
Installing the vinyl was a little tricky. We ended up using Windex and a squeegee to help position the vinyl. I am super happy with how it turned out.
The Finished Project :
Photoshop Template Files :
iCade Photoshop Files
/boot/config.txt (For Raspberry Pi 3) :
WARNING I am not responsible if you mess your Raspberry Pi up by using this. Use this an an example only. It works for me but your mileage my vary
<br /> # For more options and information see<br /> # http://www.raspberrypi.org/documentation/configuration/config-txt.md<br /> # Some settings may impact device functionality. See link above for details</code></p> <p># uncomment if you get no picture on HDMI for a default "safe" mode<br /> #hdmi_safe=1</p> <p># uncomment this if your display has a black border of unused pixels visible<br /> # and your display can output without overscan<br /> disable_overscan=1</p> <p># uncomment the following to adjust overscan. Use positive numbers if console<br /> # goes off screen, and negative if there is too much border<br /> #overscan_left=16<br /> #overscan_right=16<br /> #overscan_top=16<br /> #overscan_bottom=16</p> <p># uncomment to force a console size. By default it will be display's size minus<br /> # overscan.<br /> #framebuffer_width=1280<br /> #framebuffer_height=800</p> <p># uncomment if hdmi display is not detected and composite is being output<br /> hdmi_force_hotplug=1</p> <p># uncomment to force a specific HDMI mode (this will force VGA)<br /> hdmi_group=1<br /> hdmi_mode=4</p> <p># uncomment to force a HDMI mode rather than DVI. This can make audio work in<br /> # DMT (computer monitor) modes<br /> #hdmi_drive=2</p> <p># uncomment to increase signal to HDMI, if you have interference, blanking, or<br /> # no display<br /> #config_hdmi_boost=4</p> <p># uncomment for composite PAL<br /> #sdtv_mode=2</p> <p>#uncomment to overclock the arm. 700 MHz is the default.<br /> #arm_freq=800</p> <p># Uncomment some or all of these to enable the optional hardware interfaces<br /> #dtparam=i2c_arm=on<br /> #dtparam=i2s=on<br /> #dtparam=spi=on</p> <p># Uncomment this to enable the lirc-rpi module<br /> #dtoverlay=lirc-rpi</p> <p># Additional overlays and parameters are documented /boot/overlays/README</p> <p># Enable audio (loads snd_bcm2835)<br /> dtparam=audio=on</p> <p>gpu_mem_256=128<br /> gpu_mem_512=256<br /> gpu_mem_1024=256<br /> overscan_scale=1<br /> #gpu_mem=320</p> <p>#RootDelay<br /> rootdelay=10</p> <p>#Overclock Settings<br /> arm_freq=1300<br /> over_voltage=6<br /> temp_limit=80<br /> core_freq=500</p> <p>#GPU Based<br /> h264_freq=333<br /> avoid_pwm_pll=1<br /> gpu_mem=450<br /> v3d_freq=500<br /> #Ram Overclock<br /> sdram_freq=588<br /> sdram_schmoo=0x02000020<br /> over_voltage_sdram_p=6<br /> over_voltage_sdram_i=4<br /> over_voltage_sdram_c=4<br />