As more and more various custom parts came out for the Game Boy Zero project, more and more people asked if I was going to do a followup guide for making one using all custom and aftermarket parts. So… here we are!
In this guide I’ll be showing one of the (many) ways you can piece together a Game Boy Zero using entirely custom and aftermarket parts. This means that you won’t have to chop up or sacrifice a single original Game Boy part to make this, which is nice.
Below is a list of parts that I will be using in my build:
- Aftermarket case from ebay
- All-in-one button PCB from Helder
- White NES-style buttons from kitsch-bent for X/Y buttons
- Green buttons/d-pad from handheld-legend
- Rubber button pads from ebay
- Speaker from Adafruit
- BW backup camera screen from Amazon
- 2500 mAh Lithium Ion Polymer Battery from Adafruit
- PowerBoost 1000C battery charger/5V boost from Adafruit
- microB USB Breakout board from SparkFun
- Powerstrip PCB from Helder
- JST battery extension cable from Adafruit
- 9mm tactile switches (I got mine locally but the ones linked to from amazon look identical)
- Volume wheel from ebay (not *quite* as thick as the original wheel, but close)
- PJ325 headphone jack from ebay
- Power switch from ebay
- Micro-SD card cartridge adaptor from prerunnerseth
- USB ports (I got mine locally but the ones linked to from amazon look identical)
- DS-Lite GBA cartridge readers from ebay
- Cartridge label from Dominator
- Aftermarket cartridge shell from kitsch-bent
- Screen cover from Dominator
- 3D-Printed screw bracket by wermy
- 3D-Printed button wells by wermy
First I modified my case just like in the first build, but this time I left 1-2mm around the edges of the screen so that I can easily attach the screen cover from Dominator when the time comes:
I used the built-in X/Y button hole guides in Helder’s All-in-one (AIO) board to mark where to drill (super handy!). This time, in stead of making a pilot hole that I then expanded with a dremel (like I did last time), I used a Unibit from Irwin. It made it much, much easier to drill clean, perfectly-round holes right where I wanted them:
Hand Held Legend also sells a similar looking drill bit.
Next I mounted my screen. I used the BW screen from Amazon because it’s what I had on-hand, but lots of folks are reporting great success with the Gearbest screen, which is apparently very easy to modify to run off 5V and has a nice, consistent (and small) controller board.
If you do get one of the BW screens, be careful taking it apart because there is a *lot* of double-sided tape holding the screen cover on. I actually broke one screen trying to remove it. ಠ_ಠ
Once you get it taken apart, you may or may not need to modify it to run off of 5V. The one I got has a tiny controller board (nice!) but showed some flickering when trying to run it off of 5V without modification. Thankfully this particular board was very easy to modify: you just attach a wire from the red input power wire to the regulator chip pin shown here:
Once I did that all flickering went away and it works great! If you happen to get a different driver board in yours, be sure to check out the wiki to see if someone else has the same screen and has already figured out if/what you need to modify.
Next I mounted my screen just like I did in part 3 of the original guide:
I then attached my 3D-printed screw bracket and button wells, which worked wonderfully if I do say so myself:
Next I attached some wires to the All-in-one board before putting it and my buttons in the case. Specifically, I attached wires to 2 of the 3 available USB ports on it (I won’t be using the 3rd one), another set of USB wires to the input pins, and then wires for my L/R buttons.
If you have a spare USB cable (and who doesn’t?) that you are willing to chop up for this, it’s a perfect source of wire since it’s already color-coded for USB and appropriately gauged for the data and power wires. You’ll notice I only attached a ground wire to the L button pin on the right-hand side of the above image — I’ll be joining the ground pins on the L/R buttons on the other side of the case so it’s one less wire I have to run between the front/back of the case.
After I was done with that I went ahead and put it and my buttons in the case and started wiring up the headphone jack and speaker. The pins for the headphone jack I’m using go (from left to right in the above image): ground, left channel, right channel switch, right channel, left channel switch. What I mean by switch is that without headphones connected, they are connected to their respective channel. So, you’d want your speaker hooked up to the switch pins, and your audio source (the all-in-one board) connected to the L/R channel pins.
Since we only have one speaker, we’ll want to join our L/R channels. You can do this by adding a 10-Ohm resistor on each channel before joining them, as shown in the image below (all I had handy was 22-Ohm but they worked fine too):
I have yellow for my left channel and green for my right channel. If you don’t add the resistors, your sound will be distorted and noisy. Some discussion about this as well as some fantastic wiring diagrams by a3k4 can be found here (thanks a3k4!). The point at which the resistors join will be connected to one of the speaker wires, and the other speaker wire will be connected to the ground pin on the headphone jack. It’s also recommended to add some ferrite beads to the ground and L/R wires (before they join) that are attached to the speaker to further reduce noise and make it sound better. I don’t have any of those at the moment so I’ll have to come back and add mine later. Helder has mentioned that he may be adding those resistors and ferrite beads to a future version of the AIO board, so definitely keep an eye out for that!
Now wire it up to the AIO board:
The naming for the pads might seem a little weird (and Helder mentioned he’d probably update it in a future revision), but you’ll attach the ground wire to the “switch” pad, and the left/right channel wires to the left/right pads. You should go ahead and test it out before gluing/mounting your headphone jack/speaker.
The setup for this is nearly identical to what I did in part 5 of the original guide: you attach the PWM0 pad on the AIO to GPIO pin 18 on your Raspberry Pi Zero and PWM1 to GPIO pin 13, and add “dtoverlay=pwm-2chan,pin=18,func=2,pin2=13,func2=4” to the end of your config.txt file (definitely check out the original guide if you need clearer instructions for doing all that). In addition to those things, you also need to connect the 5V/GND input wires on the AIO to your Pi (PP1 for 5V and PP6 for GND), otherwise your amplifier on the AIO won’t have any power:
And then you also need to attach your volume wheel to the POT1,2,3,4/GND pads on the AIO board:
If you’re holding your volume wheel with the pins facing down, you can just connect the wires in order as shown above. After you do that, you should be able to load up RetroPie and test it out!
If that checks out, then you can go ahead and attach your headphone jack and speaker:
Mine’s a little messy (i.e nothing covering the resistors next to the headphone jack) because I’ll be coming back later to add some ferrite beads, but you get the idea. 🙂 You may need to add a piece of plastic or something under the headphone jack to raise it up a bit to where it needs to be.
I was going to mount the volume wheel, but I’ve got something I want to try out with that, so I’ll save it for next time. I’m hoping to have the rest of this build wrapped up in one more installment of this guide, but we’ll see how that goes…
Until next time!