13 minutes
The Open xGB Display – A Development Board for Game Boy Color and Game Boy Advance IPS Mods

TL;DR
- Development board for Game Boy Color and Game Boy Advance display mods (RGB TFT replacement system)
- Modular hardware platform with support for multiple configurations
- Flexible integration via FPC/FFC adapters for different console layouts
- Based on RP2350B or RP2354B
- Optional USB video output via additional CH32V305 coprocessor (UVC support)
- Fully open source hardware and software
- All design files and firmware available in the repository
Introduction
If you have been following the blog, you might be familiar with my previous projects, the Open DMG Display and the Open AGB Display, and maybe also with the recently added USB video output on the Open DMG Display.
I also did a proof-of-concept for video output on the Game Boy Advance, but I didn’t implement this into a working mod.
This project brings all of that together. However, instead of another device-specific mod, I wanted to focus on a generic board with reusable code as a blueprint for MCU-based display mods. It can be seen as an invitation for the community to build upon.
Maybe you would like to design a Game Boy Color with a huge display, but you’re not familiar with writing firmware or drivers for TFT displays. Or perhaps you are strong in software but don’t want to design the circuitry from scratch. This is where the xGB Display helps you jump-start your project.
It offers:
- A generic board that can be used in multiple different projects
- Two example implementations using the board (CGB and AGB)
- Support for different displays
- Tested components and schematics
What to Expect – and What Not To
I hope this project finds its target audience and continues to mature over time. It is by no means a finished product. I expect bugs in both the software and the hardware, and you should as well when using the provided materials.
All data and materials are provided “as is”. If you have questions, I’m happy to help when I have the time, however, support is not guaranteed, and responses may be delayed. If you encounter any problems, I would appreciate it if you report them so the project can continue to improve. If you are able to fix an issue yourself, contributions are very welcome!
Disclaimer: Use of the provided information, files, and build instructions is entirely at your own risk. No guarantee is given regarding accuracy, completeness, or functionality. Any liability for damage to hardware or software, consequential damages, or other claims arising from use is excluded.
The Firmware
The firmware is based on the Open AGB Display. It has the same set of features. The relevant changes are:
- Dynamic configuration capabilities for Game Boy Color and Game Boy Advance signals
- Support for multiple TFT modules (see Hardware section for details)
- A new module that sends frame data via serial output to the USB video output coprocessor
In addition to the main firmware, there is also code running on the CH32V305 coprocessor for video output via USB.
Configuration
In order to allow the same firmware to run in different modes on different target hardware, it is crucial to provide configuration information about the underlying hardware and the connected peripherals. This is done using information blocks stored at the end of the flash memory. There are two blocks that are mandatory for running the firmware:
- The HIB (Hardware Information Block), which holds information about the hardware the firmware is running on
- Hardware revision
- The PIB (Product Information Block), which holds information about the configuration of the hardware
- Connected peripherals
- Product revision
Currently, only a minimal amount of information is stored in these blocks. To allow for more information in the future, each block includes a version field. The blocks can be created using a Python script, which you will find in the firmware repository in the scripts subfolder. The firmware will restart into the bootloader if no valid information blocks are found!
Signals and Timings
Capturing the Game Boy signals is done very similarly to how it is implemented in the Open AGB Display. That post already describes the details. The most important takeaway is that the frame timing is driven by the Game Boy’s signal, which allows for low latency in combination with the RGB interface on the recommended TFT displays.
The Hardware
I designed a very small and fairly dense board for this project. It can be used to implement a mod directly or as a basis for designing your own board using the provided design files.
I also designed two types of demo implementations using this board: one for the Game Boy Advance and one for the Game Boy Color. Besides the board itself, you’ll also need an FPC adapter cable to connect it to the original Game Boy hardware. Examples of these FPC designs are also provided in the repository.
If you wish to utilize the coprocessor for USB video output, you’ll also need an FPC or FFC connection for the USB port. Again, example designs are provided and are intended to fit the demo mods.
The Open xGB Display Board
I will briefly describe some aspects of the Open xGB PCB, which I hope will help you understand what the hardware offers.

-
Misc connections: These are mainly intended for implementing user input via buttons. By default, they are used to navigate the menu. They operate at input levels between 0V and 3.3V, where a low level means pressed and a high level means released. They can be directly connected to the Game Boy’s input buttons. The default mapping is: 1 for Enter, 2 for Right, and 3 for Left. These connections are also available on the connector to the Game Boy, so it may be more convenient to access them via an FPC.
-
Main MCU (RP2354B): If you are using the RP2354B, which I would recommend, you do not need external flash. If you have reasons to use the RP2350B, there is still a footprint for external flash memory.
-
Generic xGB connector: The 24-pin FFC connector is intended to connect the Game Boy display signals to the OXD board. In addition, it carries the general power-enable signal as well as the three misc connections described in (1).
-
USB video coprocessor: Since the RP235xB only offers a USB FS interface, which is not fast enough for UVC video output, a second microcontroller has been added to the board. It is a small CH32V305 MCU with a USB HS interface. The controller is connected via a serial link that uses two SPI interfaces connected together. It is implemented as a fully independent circuit powered by USB, so it does not consume power unless it is in use. Unfortunately, it does not allow bootloader access, so it must be flashed via a debug probe (which is relatively inexpensive, though).
-
USB and debug connection to the RP235xB: The 10-pin FFC connector is intended for use with the debug adapter. It provides access to the SWD interface as well as USB for the RP235xB.
-
TFT connector: The 40-pin FFC connector is intended to connect a TFT module. The pinout supports a range of displays from buydisplay.com (see TFTs). If you are using a display with a different pinout or connector, it should not be difficult to reroute this part of the board.
-
Power supplies: There are two SMPS power supplies for the main circuit (they do not power the coprocessor). One supplies 3.3V for the RP235xB and peripherals. The other is used exclusively for the backlight. The supplies are chosen to operate within the range of two rechargeable AA cells but can also be powered from a 5V supply if required. The backlight supply is a current source regulated via a PWM DAC. This helps prevent flicker caused by on/off cycles. You will also find JP1 in this area. If bridged, the enable line will be tied to the battery, so the device will start directly when power is applied.
-
Supply terminals: Solder pads for connecting the supply voltage (typically a ~3V battery). In addition to power, you also need to provide a voltage above ~0.7V to the enable line in order to start the OXD. If you do not want to use the enable line, bridge JP1 (see 7).
Firmware Flashing and Debug Adapter
In order to get any firmware onto the Open xGB Display board, you’ll need some kind of adapter to connect to the 10-pin FFC connectors. This is also true if you want to do any debugging during development. You could either use a 10-pin FFC-to-pin-header adapter or the debug adapter I created for the Open AGB Display. I will explain the process using this adapter in the following section.

The debug adapter uses a 10-pin same-side FFC cable to connect to the debug connectors on the OXD board. It provides a JST-SH (1.0 mm pitch) 3-pin connector that is compatible with the Raspberry Pi Pico Debug Probe. It also offers a USB-C port to access USB during development. There is a possibility to power the target from this USB-C port by bridging JP1 and/or JP2, but you have to be careful with this feature. The 5V supply will be directly connected to the supply terminals. If those terminals are connected to the Game Boy, you will supply it with 5V, which might destroy your hardware.
Flashing the RP235xB: There are two ways to get the firmware onto the RP235xB. The easiest way is to plug the device into a computer via USB and boot into bootloader mode by holding SW1 during power-up. The device will show up as a mass storage device. You can then simply copy the provided UF2 file. Don’t forget to provide the information block data along with the firmware. You only need to do this once.
If you have a suitable debug adapter at hand and want to compile the code yourself, you can also flash the firmware using SWD.
Flashing the CH32V305: There is currently only one way to get firmware onto the CH32V305: you must connect a debugger to the chip. I recommend using a WCH-Link and connecting it via a JST-to-pin-header adapter to the debug board. If you bought a Pico Debug Probe, you will already have such an adapter.

With the CH32V305, you’ll need to connect JP1 and/or JP2 on the debug adapter board in order to power the chip via a connected USB cable. As the WCH-Link uses pin headers and also provides 5V, wiring it up to an FFC adapter is also a good option.
Within the release files you will find a hex file with the firmware. This can be flashed using the wlink software with the following command:
wlink flash [PATH TO RELEASE FILES]/xgb2usb.hex
TFTs
The project currently exclusively uses TFT modules with a parallel RGB interface. This brings some advantages:
- A bufferless interface, which reduces latency
- Full control over frame timing
- The ability to let the input signal drive frame timing
- Prevention of tearing
In order to support as many displays out of the box as possible, I decided to use displays from buydisplay.com (not sponsored). They provide a wide range of displays with RGB interfaces and a consistent pinout.


-
Implemented
- ER-TFT028A5-4: 2.80", 1500:1, 480x640, 800 cd/m², 30 mA, 9.00V
- ER-TFT040-3: 4.00", 800:1, 480x480, 400 cd/m², 30 mA, 15.00V
- ER-TFT034-2: 3.40", 800:1, 480x480, 550 cd/m², 30 mA, 18.00V
- ER-TFT3.95-1: 3.95", 800:1, 720x720, 350 cd/m², 30 mA, 15.00V
- Signal timings need to be optimized, limited support
-
Pin compatible
- ER-TFT3.54-1: 3.54", 1000:1, 640x960, 450 cd/m², 30 mA, 15.00V
-
Pin compatible but requires backlight supply changes
- ER-TFT3.53-1: 3.53", 1000:1, 480x800, 400 cd/m², 15 mA, 21.00V
- Backlight current must be set via a different resistor
- ER-TFT020-6: 2.00", 1000:1, 480x360, 800 cd/m², 90 mA, 3.00V
- Low backlight voltage, requires a different backlight supply
- ER-TFT024-5: 2.40", 1000:1, 480x640, 350 cd/m², 60 mA, 3.00V
- Low backlight voltage, requires a different backlight supply
- ER-TFT021-1: 2.10", 700:1, 480x480, 300 cd/m², 60 mA, 3.20V
- Low backlight voltage, requires a different backlight supply (round display)
- ER-TFT3.53-1: 3.53", 1000:1, 480x800, 400 cd/m², 15 mA, 21.00V
When choosing a display, the most important criteria are size and resolution. Most of the currently supported TFTs have a 480-pixel width, which allows integer scaling for both CGB (160×144) and AGB (240×160). This is especially useful for allowing DMG and CGB games on the Game Boy Advance to be stretched to full width.
How to Use
In order to provide a better understanding of how this project can be used, I built two mods based on the OXD PCB: one for the Game Boy Advance and one for the Game Boy Color. I won’t go into great detail here because the Game Boy Advance variant is essentially a refinement of the Open AGB Display, and I will write another more detailed post about how to build the Game Boy Color version. I will therefore only describe what is required to build something useful with the OXD board.
Game Boy Connection FPC Examples
In order to connect the board to a Game Boy Color or Game Boy Advance, you’ll need to connect the display signals to the 24-pin FFC connector. You could do this using off-the-shelf FFC or FPC cables, which are no longer very expensive. Remember that the misc signals used for the control buttons are also available on the FFC connector, as well as the enable line. It therefore makes sense to include these in an FPC design as well.

On the left is the connection FPC for the Game Boy Color with its 50-pin display connector. On the right is the 32-pin Game Boy Advance variant. You can see that both cables expose the misc and enable pins via solder pads. This has proven to work quite well if you use thin wires for the connections to the Game Boy PCBs.

For my mods, I connected left, right, and select for the Game Boy Color, and left shoulder, right shoulder, and select for the Game Boy Advance to the misc connection pads. The enable line is connected to the power switch.

USB FPC Examples
For the USB connection to the CH32V305, which can be used for video streaming, I also designed FPCs. I used USB-C connectors and additional 5.1 kΩ resistors to enable proper 5V negotiation when connected.

Both designs include additional pads to connect to the 5V line provided by USB. This can be useful, for example, for connecting a battery charger.

3D Prints
In order to fit everything into original or aftermarket cases, I had to design some 3D-printed parts. These mainly include a frame to hold the TFT module and the board, as well as covers for the USB ports. I also found it useful to design templates for cutouts and display alignment.

Game Boy Advance
For the Game Boy Advance, I used the same display module as in the Open AGB Display (ER-TFT034-2). This time, I added an additional frame to provide better side support and to align the OXD board. The case cutouts and custom lens are the same as in the Open AGB Display. On the top, there is a cutout for the USB-C connector.
Game Boy Color
I think the Game Boy Color mod turned out really nicely, and I haven’t previously written a post covering it. As mentioned, I will cover the mod in more detail in a separate post. I will link it here as soon as it is published.
Please have a look at his post: CCGB

Known Issues
- The placement of the USB port on the AGB mod is not ideal because the connector can apply stress to the TFT module.
- In AGB mode, the video output occasionally shows a shifted line, resulting in a one-frame glitch. This may be due to a software issue or a limitation of the serial transfer or board signal integrity, and requires further investigation.
Files
Source code and release binaries are hosted on codeberg.org. Please let me know if anything is missing.
-
Hardware
- Open XGB Display
- Debug adapter
-
Software
2658 Words
2026-04-13 02:00