I went for the Gameboy Advance mod because:
1. The two extra shoulder buttons is useful for many games and systems.
2. The smaller space created more of a challenge and a nice compact finished product.
I started with an old Gameboy Advance. My design intent was to take advantage of a Raspberry Pi Zero for the main backend of the system. I also wanted to minimise 'hacking' of the plastic casing by using all the existing ports/buttons/switches etc. where I could so that the unit looked somewhat 'factory' after the mods.
The speaker was in poor condition so I ended up sourcing a replacement of the same size.
The dimensions were all checked, re-checked and verified with a vernier. It was important to get this right!
As you can see, I created my own conductive pads for the buttons and the following components are positoned as per the Nintendo layout:
1. Power switch
2. Headphone jack
3. Volume pot
4. Link connector
5. Shoulder buttons
6. Battery pos and neg terminals
7. All buttons
1. Boost converter for battery pack to output a constant voltage regardless of battery level.
2. Audio amplifier with hardware change-over for headphones. Adjustable by volume pot.
3. The link port on top of the GBA, typically used for linking to eachother is re-purposed as a serial port and connected to Tx and Rx on the RPi for configuration over command line. A FTDI chip handles the USB enumeration etc. and power will be supplied by USB if connected instead of the batteries. I modified a gameboy link cable and added a USB connector for this.
4. Custom TFT display with PWM adjustable brightness.
5. Power LED will shine green, and change to red on low battery using a comparator circuit.
6. All buttons are connected via internal pull-ups in the RPi. Debouncing is performed in software.
Due to size, most of my components are surface mount, and 0805 packages for passives for a balance of size and 'solderability'.
1. Bottom right is audio amp circuit.
2. Top right is power indication LED circuit with comparator and trimmer for low battery indication.
3. Top centre is USB interface driver going to RPI Tx and Rx for serial access.
4. Centre is the flat flex connector for the TFT display.
2. Bottom right is the input power boost converter and power switch. Around there is also the 'OR'ing to use USB power over batteries if available.
3. Centre is obviously the RPi Zero in all its glory. Power is provided direct to the GPIO pins instead of the micro USB port normally used. (Yes this bypasses the input fuse.. but watcha gonna do).
The small PCB does two things:
1. Convert the 0.8mm pitch to a more common 1mm pitch because the cable and connector was easier to source.
2. Re-align the cable to match my PCB connector.
PCB was made using OHSPark.
The shortest off-the-shelf flat flex I could buy was too long so I cut it to size and used the soldering iron to melt the plastic back to solder to my adapter. This was the result…
It does the business!.
Some blue electrical tape to reduce the risk of any contact with the metal case.
Also the new speaker has been installed here.
The Pi is running RetroPi which boots into EmulatorStation at power up. Power is being supplied via USB here, but testing showed that the DC boost converter was functioning as expected.
The screen is slightly larger than the window view so the left and bottom of the screen are cut off slightly. This can be adjusted in RetroArch so that the games don't have this issue.
So credit where it's due:
Notros Frame buffer mirroring for the TFT display.
ADAFruit Retrogame for RPI GPIO to virtual keypress (I modified source code to suit my own needs)
Drogon WiringPi (Configuration of audio PWM output and software PWM control for screen brightness)
RetroPi (Made all this within the realm of possibility for me)
I utilize button combos to control some emulator features such as speed up, rewind, auto save/load and exit rom. Button combos also allow adjustment of screen brightness. This removed the need to drill out and install new buttons 'ruining' the look of the case.
These are all features of RetroArch but required a bit of configuring. Perfect use of the USB serial port.
The average consumption for my 'nominal' use would be around 330mA out of batteries at 3.0V.