While still working on putting the finishing touches on the arcade cabinet I mentioned last time, I got distracted building a neat little Game Boy mod. I got my inspiration after seeing the great work by the author of SuperPiBoy and several other modders.
Seeing it as a good excuse to get rid of an older Raspberry Pi board I had hanging around, I got a Dremel tool, a broken Game Boy DMG from eBay and set to work.
Early on I decided to make the changes to the case as unobtrusive as possible, and other than the somewhat ungainly RCA video jack (which I had to have), I think I’ve accomplished what I was after:
Here are some pictures – see below for some additional notes:
The following isn’t meant to be a tutorial (the author of SuperPiBoy does a better job than I ever could); however, if you have any questions, I’ll be happy to answer them (just post a comment below).
The Case and the Computer
Before I started the project, I saw some clean examples of DMG case modification, as well as some badly butchered ones. I wanted to keep the case as neat as possible (of course, I failed this fairly early on – since this was my first work with a Dremel tool, I shaved the screen edges pretty unevenly).
To reduce the Pi’s footprint, I removed almost every unnecessary protruding component from the board – the ethernet jack, the USB jacks, audio jack and the GPIO header pins. One of the USB contacts was connected to the Teensy controller, the other to an external USB jack. Likewise, the audio connector was connected to a 3.5mm audio jack on the case. Because I didn’t need to use GPIO as an input device, I only used GPIO ports to power the screen and the amplifier.
One final change I made to the Pi involved moving the protruding capacitor from the board. Since it fell underneath a protruding section of the screen’s controller board, I soldered wires to the capacitor and moved it to the side of the case, where there was sufficient space.
While there is at least one place where you can buy a re-made DMG controller PCB, I wanted to reuse the original Game Boy controller board. This turned out to be difficult, as the PCB was less friendly to modification than I anticipated, but after drilling a bunch of holes near exposed contacts, I managed to solder wires to all the buttons.
To provide input to the Raspberry Pi, I decided to salvage what I could of the Teensy 3.1 that I had butchered while attempting to tack it on to a breakout board. Unable to desolder the breakout board (and its seemingly hundreds of pins), I went at it with some pliers and managed to mostly salvage the controller – at least enough to wire input to 8 pins.
To connect the Teensy to the Raspberry Pi, I wired the USB wires directly to the Raspberry Pi (since I had removed the USB port casing from the Pi).
To make it possible to open the menu and exit the emulator without adding additional buttons, I wrote a short Teensy sketch that provides basic input to the emulators as well as sends meta-commands. Holding down Start and Select for 2 seconds causes the Teensy to send F1 (Open Menu command) to RetroArch; holding down Start, Select A and B causes it to send ESC (Quit command). While I wasn’t sure how this would work out (and whether it would interfere with controls), so far it’s been working out fine.
I followed SuperPiBoy’s choice of screen, and purchased the cheapie TFT/LCD monitor from Amazon. This wasn’t an entirely flawless experience, as I ended up mangling the first one I received (the ribbon cables are extremely delicate and I managed to rip two of them before I was ever able to make the screen work).
I was able to remove the second monitor from the case without any issues, however, as well as bypass the voltage regulator to allow the monitor to run at 5V.
Shortly before I finished the project, I decided to add the ability to play on a larger screen, so I added an RCA jack to the side of the Game Boy. The jack shuts off the video to the onboard screen whenever a cable is plugged in, which hopefully saves some juice as well. Unfortunately, it’s hard to fit in an RCA jack without making it protrude from the case, but this was one instance where I was ready to forgo form for function.
I wanted both headphones and speaker for the project, so I bought a 3.5mm audio jack and a cheap 3W amp to provide audio for the Game Boy. I also wanted to reuse the existing volume control, which was easy enough to do – I removed part of the PCB that contained the volume control with the Dremel tool, and glued it to the case.
Wiring went from the Raspberry Pi to the volume potentiometer, then to the 3.5mm audio jack (I used a new one, but it fit perfectly in the space of the original), then to the amp, and from there to speaker. Combined with the video out jack, this made it possible to hook up both audio and video output to TV, using the Game Boy as little more than a controller.
Had I been able to find a 4-pole jack (specifically, the kind that cuts off the current to the onboard components), I would’ve been able to wire both audio and video through the same port – but this was not to be.
To power the Game Boy, I used a sparkfun Charger/Booster and an 850 mAh Lithium Polymer battery. I realized fairly early on that 850 mAh isn’t anywhere near enough – the charge lasts little more than 30 minutes. Good news is that the battery is easily replaceable – I’m currently waiting for a more powerful 2000 mAh. Bad news is that the battery compartment already tends to get pretty hot, so the possibilities aren’t just limited by space – temperature and ventilation play a part as well.
Finally, I reused the Game Boy’s onboard power switch by removing part of the PCB containing it with the Dremel tool and gluing it to the case. Wiring of the switch allows the battery to charge even when the Pi is turned off.
This project took enough effort to completely kill any desire to do any additional software work. So I more or less plopped the RetroPie image onto an SD card and backed off.
In the end, this was as much a project in soldering as it was in hot-gluing components. Because wire contacts were often sub-optimal (due to space and other constraints) and because the wires needed to be constantly moved and adjusted, I wasn’t shy with gluing wires to avoid nasty surprises later. The controller wires especially had to be extended and shortened numerous times, to make it easier to close the case.
While I wasn’t able to use the screws at the top of the case due to the space being overtaken by the screen, I was able to reuse the bottom two screws. As a result, the case looks fairly neat at the bottom – even if it’s sealed at the top with Scotch tape.
I used a Raspberry Pi B for this project (I had an extra one I hadn’t touched in over a year), but that was probably not ideal in this case. To run the emulators at a decent speed, I have to overclock the CPU to 900MHz, which is costly in terms of both stability and power efficiency.
I received the 2000 mAh battery today (July 17), and it’s a (comparative) monster. It takes up almost the entire space of the Game Boy’s battery compartment – I had to cut a hole on one side to make room for the whole thing. Luckily, the changes were limited to the inside of the compartment, so the outer shell remains intact:
As far as the lifetime of the battery, I was able to squeeze out a solid hour and 44 minutes at 900 Mhz (2 overvolt), running RetroArch most of the time (I was getting ~30 minutes with the smaller battery). At this speed NES emulation isn’t perfect, so I will continue to tinker with the settings to see if I can get decent performance without frying anything – the compartment tends to get quite warm over time.