This project began when I came across this RP2040 Game Boy project:
https://github.com/YouMakeTech/Pico-GB
I found it to be an excellent piece of work, though the display and scaling weren’t quite what I was looking for. So I modified and expanded upon it to match the experience I wanted, which eventually led to the creation of this project.
I also gained incredibly valuable information from these two repositories:
https://github.com/deltabeard/RP2040-GB
https://github.com/fhoedemakers/pico-peanutGB
This project would not have been possible without the knowledge and resources from these two sources, so I would like to express my thanks in advance.
I created this project not just for myself, but for my two nieces — so they could enjoy it during this Christmas holiday. My hope is that it becomes a small spark of happiness for anyone who crosses paths with it this season.
– Noch
Section: Hardware0. Check list
RP2350 can use all of these version.
1. Before doing anything else, start by 3D printing the parts, especially the front piece.
2. Prepare a 5x7 cm universal PCB board and mark the layout according to the reference image.
We will cut this section out so the ST7789 display can sit flush and properly fit onto the PCB.
3. After preparing the PCB, apply a thin layer of double-sided tape to the back of the ST7789 display board as shown.
4. Place the PCB with the attached display into the 3D-printed front piece.
5. Use a permanent marker or pencil to mark the positions where the buttons will be placed.
6. Apply thin double-sided tape onto the marked spots to prepare for button placement.
Place the directional buttons and test the press. If the buttons still feel uncomfortable to press, adjust and reposition them until they suit your finger placement better.
7. Once you’re satisfied with the feel and responsiveness, solder all the buttons onto the PCB. Then use a multimeter to verify that the connections are properly made.
Then repeat the same process until all buttons are done.
8. Connect one side of every button together using copper wire to form a common ground.
For the A and B buttons, extend the copper wiring downward, as the RP2350 board will later be positioned on top of these buttons.
At this stage, apply electrical tape or any suitable insulating material over the soldered joints for the A, B, and Function buttons.
If the signal side of the Function button will be positioned underneath the board, extend the copper wiring downward just as you did with the A and B buttons.
After that, place the RP2350 board as shown in the reference image. Secure it in place using double-sided tape.
No need to worry about movement later, as the battery will fit tightly against the board and hold everything firmly in position.
9. Here are the GPIO pins we will use to connect all modules to the RP2350.
ST7789 - RP2350 GPIO
GND - any GND
VCC - 3v3 out
SCL - 18
SDA - 19
RES (or RST) - 21
DC - 20
CS - 17
BL - 22SD Card module - RP2350 GPIO
MISO - 12
CS -13
CSK -14
MOSI - 15
GND - any GND
VCC - 3v3 outMAX98357 (Sound) - RP2350 GPIO
DIN - 26
BCLK - 27
LRC - 28
GND - and GND
VCC - 3v3 out* For the 3V3 line, I used a scrap piece of PCB as an extension, since it needs to be shared by quite a few modules.
Button - RP2350
UP - 2
Down - 3
Left - 4
Right - 5
A - 6
B - 7
Select - 8
Start - 9
Function - 10At this stage, place the PCB assembly into the 3D-printed front piece and roughly position each board. This is the layout we will be using. For the top power switch, place it firmly into position as shown above and solder it directly onto the PCB.
Connect all components to the GPIO pins as shown earlier.
Here’s a small tip: I usually install the SD card module first, and I flip it upside down to make soldering easier.
At this stage, insert the SD card as well. This helps ensure proper alignment and positioning before soldering. Follow the reference image for placement.
10. Complete all wiring connections, including the speaker.
For the power supply, we will feed power through the 3V3 OUT rail, where the battery will also be connected.
You may route the switch through either Ground or VCC depending on your preference, though I personally chose to switch VCC.
That completes the hardware assembly.
Section: SoftwareBefore doing anything else, first load the UF2 file and prepare the SD card with the required files at the root directory.
UF2 file: https://drive.google.com/file/d/1JsL94q7HW4-oBvkfGAXMqce-teC6LuIM/view?usp=drive_link
SD Card root: https://drive.google.com/file/d/1ZahHANiYN6jVqWz_1qLCGkLRXzwk-0TZ/view?usp=drive_link
First, extract the SD card ZIP contents directly into the root of your SD card.The directory structure should look like this:
|- bios
|- gb
|- gbcIf you want to enable the cover art feature, create a folder named cover inside both the gb and gbc directories.
|- bios
|- gb
| |- cover
|- gbc
|- coverIf you have a Game Boy Color BIOS file, place it inside the bios folder and name it gbc_bios.bin (all lowercase).
If you want to create cover art, first resize the image to 240x240, then convert it to.bmp format.
I used XnConvert (Portable) and set the output format to:
BMP – Windows Bitmap RGB565
Other formats may result in incorrect display, so make sure the output settings are configured exactly as above.Once the SD card is prepared, insert it into the slot. After that, proceed to the RP2350 flashing step.
For the firmware, flash it to the RP2350 by holding down the BOOT button while connecting it to a Windows USB port.Once the file explorer window appears, copy the.uf2 file into it. The board will reboot automatically after the transfer.
In this version, there are limitations regarding ROM loading.
When using the RP2350 on the Raspberry Pi Pico 2, the available PSRAM is limited, which means 4MB ROMs cannot be executed and may even corrupt the firmware.
Because of this, I locked the system to prevent running ROMs larger than 4MB. However, if you’re using a board with 8MB PSRAM or more, this version will work without that restriction.
for rp2350 with PSRAM > 4MB: (Raspberry pi Pico 2 is 4MB cannot use this one)
https://drive.google.com/file/d/1nCEUA6ed5lniaHu-YfvadGu71SJy39SY/view?usp=drive_link
Usage InstructionsMode selection screen: choose Game Boy or Game Boy Color.
Press the Function button (the center button added beyond the original Game Boy layout) to open the Settings Menu. Inside, you will find the following options.
- Brightness – Adjust the screen brightness.
- Palette – Change the default Game Boy color palette.
- Boot Logo – Enable or disable the boot logo.
If you want to use your own logo, replace the file inside bios/logo.bmp (same preparation method as cover art).
- Display Mode – Change how the screen is rendered during gameplay:
• Basic – Normal display mode.
• Pixel – Pixel-perfect native rendering. The image becomes smaller but performance improves slightly.
• LCD – Simulates LCD sub-pixel texture.
• ScanL – Adds scanline effects.- Quick Resume – When ON, the system will automatically boot directly into the last loaded ROM the next time you power it on.
On the game selection screen, pressing Select will delete the selected game directly from the list.
Pressing Start will display the cover art stored inside the corresponding cover folder.
While playing, you can hold the Function button and press the following keys to trigger additional features:
• Function + Up/Down – Volume control
• Function + Left/Right – (Game Boy only) Switch color palette
• Function + A – Fast mode (audio is disabled during fast mode)
• Function + B – Toggle HUD display
• Function + Select – Adjust screen brightness
• Function + Start – Exit game
* When saving a game, it’s recommended to keep the HUD enabled.
If data is being written to the SD card, a save indicator will appear in the upper-right corner of the screen.
Do not power off the device while this indicator is active, as doing so may corrupt your save data.That should cover the main features and usage.If you’d like to see a review of the project, you can watch it here:https://www.youtube.com/watch?v=j2mZzkdA7sU
(The video is in Thai, but you can use AI translation if you prefer English.)
I hope you enjoy this project. :D







Comments