As a child, I always wanted a Game Boy. I never got one, which was obviously terribly sad. 😀
To be fair, I otherwise had a great childhood. Still, apparently the missing Game Boy left enough of a gap that, several decades later, I decided to build one myself.
Choosing the hardware
The project started with buying a small colour display module. I decided to use an ESP32 as the brains of the system. It is inexpensive, easy to program and powerful enough to run emulators for older handheld consoles.
For the first prototype, I collected the other parts I needed:
- The display module
- An ESP32
- A small SD card
- Some cables
- A keypad I already had lying around
- A breadboard for connecting everything
The final version will need proper controls, including a directional pad, A and B buttons, and Start and Select. For the first test, however, the keypad was enough.
Testing the individual parts
Before trying to run any games, I created some simple tests using PlatformIO.
I first checked whether the display worked and whether it showed the correct colours. I then tested the keypad inputs and confirmed that the ESP32 could read the SD card.
Testing the parts separately made it much easier to distinguish wiring problems from software problems. By the end of this stage, the display, controls and storage were all working.
Getting Retro-Go running
The next step was Retro-Go, an emulator launcher designed for ESP32 devices.
This involved considerably more tinkering.
The software needed to be adapted to the specific display, SD card connection and controls I was using. There were also some interesting problems involving screen orientation, colour formats and display configuration.
After plenty of compiling, flashing, changing settings and trying again, the emulator finally started working.
I now have a functional Game Boy-style console running on a breadboard. It is not exactly portable yet, and the collection of jumper wires does not have quite the elegance of the original Nintendo hardware, but it works.
The next steps
The next stage is to turn the experiment into an actual handheld console.
I plan to:
- Design and 3D-print a prototype enclosure
- Create a proper directional pad and button layout
- Design a custom PCB for the controls
- Add Start, Select, A and B buttons
- Improve the audio and possibly add a physical volume control
- Replace the breadboard wiring with proper connectors
There will undoubtedly be more tinkering involved, but the most important part has already been proven: the ESP32, display, SD card and controls can work together as a small handheld games console.
It may have taken a few decades, but I am finally getting my Game Boy.