Firmware Architecture
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
| Mode | Command | Description |
|---|---|---|
| GBA Trade Emu | 0x00 | Emulate a GBA link partner for Pokémon Gen 3 trades |
| GBA Link | 0x01 | Bridge two GBA systems over the internet |
| GB Link | 0x02 | SPI passthrough for Game Boy |
| GB Printer | 0x03 | Game Boy Printer emulation (bit-bang SPI slave) |
| GBA Advance Wars | 0x04 | Advance 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 configurationWeb frontends
You are free to use whichever web frontend you prefer:
- launcher.gblink.io — Launcher for all subprojects
- celi0.link — GBA-focused frontend (Pokémon Gen 3)
License
GPL-3.0 — see the firmware repository.