You are currently viewing Pico-GB GameBoy Emulator Handheld for Raspberry Pi Pico 🕹️

Pico-GB GameBoy Emulator Handheld for Raspberry Pi Pico 🕹️

Pico-GB is a 3d printed GameBoy emulator handheld gaming console for Raspberry Pi Pico that ressembles to the original Nintendo Game Boy released in 1989.

This homemade Game Boy emulator is a fun and creative way to bring back old games on the beloved classic Game Boy console. With just a few basic components and a little bit of tinkering and programming you can build your own handheld gaming console capable of playing original Game Boy titles.

All you need is a Raspberry Pi Pico, an ILI9225 LCD display, an SD card and a couple of micro-push buttons to get started!! With a few hours and some basic soldering skills, you can build yourself a beautiful handheld Game Boy emulator to play all your favorite classic games. So, if you’re feeling nostalgic for some good old fashion Game Boy gaming then building a homemade emulator handheld is a great and inexpensive way to do just that!

Pico-GB is based on the $4 Raspberry Pi Pico microcontroller. The case and buttons are 3D printed. The screen is a 2.2-inch LCD with a resolution of 220×176 pixels and 65K colors. There are 8 buttons: 4 for the DPAD + 4 action buttons (A, B, select, start). The buttons are 6x6x6mm micro push buttons.

The Game Boy emulator used by Pico-GB is Peanut-GB by Mahyar Koshkouei (deltabeard) with some changes done by me to support sound and accommodate SD card menu/save games on Raspberry Pi Pico.

Pico-GB with original Game Boy lens & buttons
The Pico-GB is compatible with original Game Boy lens and buttons

What you need

To make Pico-GB, you will need the parts below:

1xDownload 3d printed parts/.STL files
1xRaspberry Pi Pico
1x2.2inch ILI9225 176×220 LCD Display Module
1x32GB Micro SD Card with adapter
8xMicro Push Button Switch, Momentary Tactile Tact Touch, 6x6x6 mm, 4 pins
1xMAX98357 I2S Audio Amplifier Module
1xWeewooday 2W 8 Ohm small speaker 2.8cm (1.1in) diameter, 6mm high
1xEEMB Lithium Polymer Battery 3.7V 2000mAh
1xTP4056 Micro-USB Charger for Lipo Batteries
1xSS12F15 Miniature Slide Switch
1xSolderless Breadboard
1xSolderable Breadboard
1xDupont Wires Assorted Kit (Male to Female + Male to Male + Female to Female)
2x20 pins 2.54mm right angle male headers
1xPreformed Breadboard Jumper Wires
3D Printer Filament
Grey, Red, and Black or the colors of your choice!
4xM3x4mm Hex Socket Head Cap Screws
4xM2x4mm Hex Socket Head Cap Screws
4xM2x6mm Hex Socket Head Cap Screws
6xM2x8mm Hex Socket Head Cap Screws
DISCLAIMER: Some links are affiliate links. As an Amazon Associate I receive a small commission (at no extra cost to you) if you make a purchase after clicking one of the affiliate links. Thank you for supporting the channel!

Recommended tools

3D Printer (e.g. Creality Ender 3 V2)
Soldering Station (e.g. Yihua 939D+ III)
Set of 4 hexagonal screwdrivers (1.5 mm, 2mm, 2.5mm and 3mm)
Digital Multimeter
DISCLAIMER: Some links are affiliate links. As an Amazon Associate I receive a small commission (at no extra cost to you) if you make a purchase after clicking one of the affiliate links. Thank you for supporting the channel!

Electronics

The Pico-GB GameBoy emulator can be built entirely on a breadboard! No soldering required. This is useful for testing and if you don’t have a 3d printer.

The diagram below shows how everything is connected to the Raspberry Pi Pico. Note that the 3V3 (OUT) pin is used to power the LCD display and the MAX98357A amplifier.

Pico-GB: Raspberry Pi Pico Pins Assignment
The Pico-GB GameBoy emulator can be built entirely on a breadboard! No soldering required

Flashing the firmware

The Game Boy emulator used by Pico-GB is Peanut-GB by Mahyar Koshkouei (deltabeard) with some changes done by me to support sound and accommodate SD card menu/save games on Raspberry Pi Pico.

It’s easier to flash the firmware before starting the assembly so you can test that everything is working as expected at every stage of the build:

  • Push and hold the BOOTSEL button on the Pico, then connect to your computer using a micro USB cable. Release BOOTSEL once the drive RPI-RP2 appears on your computer.
  • Drag and drop the .UF2 file on to the RPI-RP2 drive. The Raspberry Pi Pico will reboot and will now run the emulator.

Preparing the SD Card

The SD card is used to store game ROMs and save game progress. For this project, you will need a FAT 32 formatted Micro SD card with roms you legally own. Roms must have the .gb extension.

  • Insert your SD card in a Windows computer and format it as FAT 32
  • Copy your .gb files to the SD card root folder (subfolders are not supported at this time)
  • Insert the SD card into the ILI9225 SD card slot using a Micro SD adapter

Pico-GB Assembly

Soldering the headers

For this project, you will need to attach two 20-pin 2.54mm right angle male headers to your Raspberry Pi Pico. You can also solder the wires directly.

Connecting the display

Connect the ILI9225 display to the Pico with ~20cm long wires with Dupont Female connectors as shown below:

  • LCD VCC = +3.3V (OUT) = RED
  • LCD GND = GND = BLACK
  • LCD CS = GP17 = WHITE
  • LCD CLK = GP18 = GREEN
  • LCD SDI = GP19 = BLUE
  • LCD RS = GP20 = PURPLE
  • LCD RST = GP21 = GREY
  • LCD LED (when present) = GP22 = YELLOW
Pico-GB Display Circuit
Pico-GB Display Circuit
LCD display connections

Note) Not all ILI9225 displays have a LED pin. However, if a LED pin is present, it must be connected to +3.3V or to a positive voltage between 0 and 3.3V (to adjust the brightness) otherwise the display won’t display anything

Note) The display VCC pin is not directly connected to the +3.3V pin of the Pico because there is only one 3.3V output on the Pico but we need to power multiple devices with 3.3V (ILI9225 LCD display + MAX98357 power amplifier module)

CAUTION) Not too many things can burn your Pico or your computer, but always check your connections twice. In particular, always check that there is no short between the +3.3V pin and the ground pin!

Preparing the SD Card

The SD card reader is used to store ROMs and save game progress. For this project, you will need a FAT 32 formatted Micro SD card with roms you legally own. Roms must have the .gb extension. All roms must be copied to the root folder. The Micro SD card should be inserted in the ILI9225 LCD display with an Micro SD adapter.

Connecting the SD Card Reader

  • SD MISO = GP12 = ORANGE
  • SD CS = GP13 = WHITE
  • SD SCK = GP14 = GREEN
  • SD MOSI = GP15 = BLUE
Pico GB SD Card reader connection

The ILI9225 sd card reader does not always function properly. When this happens, the Pico cannot communicate with the device and displays random characters instead of game names:

Bad connection with sd card reader or broken sd card reader

In that case, you can directly connect the sd card adapter to the Pico as shown below. In addition to the white/blue/green/orange wires shown, you need to connect the SD card to the Pico 3.3V (red wire) and to GND (black wire):

Direct connection to the sd card adapter

After connecting the display and the sd card reader to the Pico, you can check that your screen works correctly by connecting your Pico to USB. If everything works as expected, you should see the game selection menu!

Pico-GB game selection menu

Connecting the buttons

Solder the push buttons to the solderable breadboard as shown on the image below. Each button is connected to GND on one side and to the Raspberry Pi Pico on the other side. To connect the buttons to the Raspberry Pi Pico, I use ~20 cm wires with a female Dupont connector on one side.

  • UP = GP2 = BROWN
  • DOWN = GP3 = YELLOW
  • LEFT = GP4 = PURPLE
  • RIGHT = GP5 = GREY
  • BUTTON A = GP6 = WHITE
  • BUTTON B = GP7 = BLUE
  • SELECT = GP8 = ORANGE
  • START = GP9 = GREEN
  • BUTTONS GND = GND = BLACK
Pico-GB Buttons Circuit

Adding sound

Connect the MAX98357 amplifier to the Pico using ~20cm wires with Dupont female connectors and the speaker to the amplifier as shown below. As there is only one 3V3 output on Raspberry Pi Pico which must be shared between the LCD display and the sound amplifier, you can use the (+) line on the top of the solderable breadboard to distribute the 3.3V to all boards. Connect the 3.3V output of the Raspberry Pi Pico to the (+) line of the breadboard then connect each component that needs 3.3V to this (+) line.

  • MAX98357A DIN = GP26 = BLUE
  • MAX98357A BCLK = GP27 = GREEN
  • MAX98357A LRC = GP28 = WHITE
  • MAX98357 GND = GND = BLACK
  • MAX98357 VIN = 3V3 (OUT) = RED
Pico-GB sound circuit

Connecting the battery and charger (optional)

You can play your Pico-GB by simply connecting it to USB. However, if you want to use your Pico-GB anywhere and make it a portable handheld game console, you can add a Lipo battery + a on/off switch + a USB charger. As the power consumption of the Pico (even overclocked to 266MHz) is very low, this gives days of autonomy!

Note) The preferred way to provide power for Raspberry Pi pico when it is not connected to USB is to provide a voltage between between 1.8 and 5.5V to the VSYS pin.

CAUTION) Do not turn on the battery when the Pico is already connected to a power source via its micro USB connector. I kept the power circuit very simple but it should normally include a Schottky diode to prevent problems if you also supply power to the VBUS pin.

Pico-GB Power Circuit
Pico-GB Power Circuit

3D Printing

All parts are printed in PLA/PLA+ except for the pads which are printed in TPU. I print the shell with “Rapid prototyping” print settings and the buttons with “Super Quality” print settings. Because they are small parts, the buttons benefit from a small layer height (e.g. 0.12mm) to achieve the best quality. Alternatively, you can print the buttons in TPU for a softer feel.

Pico_GB_slicing_top
Pico-GB top cover
Pico-GB bottom cover
Pico-GB buttons
Pico-GB lens

Under the buttons, like on the original Game Boy, there are elastic pads to improve the feeling of pressing the buttons. They are printed in TPU with these print settings. TPU is notoriously difficult to print. The secret is to print slowly (20mm/s) + slow down the retractions or disable them completely (with a Bowden system) + keep the build plate at room temperature (TPU adheres very strongly, no need to heat the build plate). If you don’t want to use TPU, you can print them in PLA, the buttons will just feel a little bit less qualitative (more noise + less rebound).

Pico-GB TPU Pads

Pico-GB Controls

SD Card Game Selection Menu Controls

D-PAD UP/DOWNNext/previous item in the menu
D-PAD LEFT/RIGHTNext/previous page
A or BFlash and start the game
STARTStart the last game from flash (without rewriting, preserve the flash memory)
Game selection menu controls

In-Game Controls

SELECT+STARTResets back to the SD card menu.  Game saves are saved to the SD card.
SELECT+UP/DOWNIncrease/decrease sound volume
SELECT+RIGHT/LEFTSwitch between manual color palettes
SELECT+AEnable/disable fast-forward
Pico-GB in-Game controls

Known issues and limitations

  • No copyrighted games are included with Pico-GB / RP2040-GB. For this project, you will need a FAT 32 formatted Micro SD card with roms you legally own. Roms must have the .gb extension.
  • The RP2040-GB emulator is able to run at full speed on the Pico, at the expense of emulation accuracy. Some games may not work as expected or may not work at all. RP2040-GB is still experimental and not all features are guaranteed to work.
  • RP2040-GB is only compatible with original Game Boy DMG games (not compatible with Game Boy Color or Game Boy Advance games)
  • Repeatedly flashing your Pico will eventually wear out the flash memory (Pico is qualified for min. 100K flash/erase cycles)
  • The emulator overclocks the Pico in order to get the emulator working fast enough. Overclocking can reduce the Pico’s lifespan.
  • Use this software and instructions at your own risk! I will not be responsible in any way for any damage to your Pico and/or connected peripherals caused by using this software. I also do not take responsibility in any way when damage is caused to the Pico or display due to incorrect wiring or voltages.

Programming Games in MicroPython

Pico-GB can be used to program your own games in MicroPython or in C. See for example Tetris in MicroPython for Pico-GB

Makes

Pico-GB vs. Nintendo Game Boy
Pico-GB vs. Nintendo Game Boy
Pico-GB transparent
Transparent Pico-GB playing Super Mario Land!
Pico-GB “Analog Pocket” edition playing Metroid II Return of Samus
Inside the Pico-GB Game Boy
Inside the Pico-GB Game Boy