The GB-Link firmware turns an RP2040 into a USB-to-Game Boy Link Cable adapter, bridging retro hardware to modern web clients.

Project history

The firmware originated from the Celio Firmware (CelioLink project) for Pokémon Generation III online functionality. It merged with the GB-Link project, which added Tetris online, multiboot, Game Boy Printer emulation, and Advance Wars support.

The GB-Link fork and Celio-Link share the same core codebase and releases but are maintained separately.

Supported modes

ModeCommandDescription
GBA Trade Emu0x00Emulate a GBA link partner for Pokémon Gen 3 trades
GBA Link0x01Bridge two GBA systems over the internet
GB Link0x02SPI passthrough for Game Boy
GB Printer0x03Game Boy Printer emulation (bit-bang SPI slave)
GBA Advance Wars0x04Advance Wars 1 + 2

Software stack

  • MCU: Raspberry Pi RP2040 (dual-core Arm Cortex-M0+)
  • RTOS: Zephyr 3.7.99
  • Host communication: WebUSB command endpoint
  • Link layer: RP2040 PIO for Game Boy bit-level protocol

Zephyr provides most low-level abstractions. The only MCU-specific implementation is in /src/layers/linkLayer_.c, which handles the low-level bit-layer of the link protocol. The remaining firmware is largely MCU-agnostic.

Repository structure

GBLink-Firmware/
├── src/              # Application source
├── boards/           # Board definitions
├── dts/bindings/     # Device tree bindings
├── scripts/          # Build and permission scripts
├── tests/host/       # Host-side tests
├── prj.conf          # Zephyr project config
├── west.yml          # West manifest
└── CMakeLists.txt    # Build configuration

Web frontends

You are free to use whichever web frontend you prefer:

License

GPL-3.0 — see the firmware repository.