XenoGC GameCube modchip firmware ported from the ATmega8L to the RP2040.
1:1 port of XenoAT.c (protocol, control flow, magic addresses,
embedded MN10200 drivecode); only the hardware layer is rewritten.
One .uf2 works on both the Raspberry Pi Pico and the Waveshare RP2040-Zero.
Recommended to flash the pico before you wire it up, or if already wired up remove the drive from GameCube when reflashing so it doesn't try to power the entire GC 3V3 rail.
- Hold BOOTSEL on the RP2040 (BOOT on RP2040-Zero) and plug it into USB.
- It mounts as a drive named
RPI-RP2. - Drag
xenopico.uf2onto it. The board reboots and runs the firmware.
| GPIO | Signal | Original AVR | Direction |
|---|---|---|---|
| 0 | SYNC | X_STR |
input, pull-up |
| 1 | IN | X_IN |
input, no pull |
| 2 | OUT | X_OUT |
output |
| 3 | SCLK | X_CLK |
output |
| 16 | WS2812 | (onboard LED) | output |
| 25 | LED | (onboard LED) | output |
The firmware drives both onboard LED types, so the same image suits either board (the LED your board doesn't have just toggles a free pin, harmlessly):
| Board | LED | sync/patch | streaming | success |
|---|---|---|---|---|
| Raspberry Pi Pico | green GPIO25 | off | flashing | green |
| Waveshare RP2040-Zero | WS2812 GPIO16 | red | blue | green |
(On bench USB power with no drive attached it will sit on red in the sync wait on RP2040-Zero.)
Built against Pico SDK 2.1.1.
export PICO_SDK_PATH=/path/to/pico-sdk
mkdir build && cd build
cmake -DPICO_BOARD=pico ..
makexenopico.uf2 prebuilt firmware, ready to flash
xenopico.c firmware: hardware layer + 1:1 protocol port
payloads.S / .h embed the drivecode blobs via .incbin
ws2812.pio WS2812 driver (Zero RGB LED)
qcode.bin upload.bin XenoShell.bin stock XenoGC drivecode blobs
CMakeLists.txt pico_sdk_import.cmake
qcode.bin, upload.bin, XenoShell.bin are the stock XenoGC drivecode
blobs from the original XenoGC source release (gc-forever, Feb 2011):
https://www.gc-forever.com/forums/viewtopic.php?t=439 . They are embedded
byte-exact (md5-verified against that release's XenoAT/ folder):
qcode.bin 9b24be69f11269b001149b6c26ba3d05
upload.bin 29d96c609bb31c2b2ced9c3a733d63ea
XenoShell.bin ee07bf968e3c7659704b5d66ed08fb58