Build a USB-to-GameCube Controller Adapter
What Is This?
USB2GC lets you use any modern USB controller (Xbox, PlayStation, Switch, 8BitDo, etc.) on a real GameCube or Wii console. Plug your favorite USB controller into the adapter, plug the adapter into a GameCube controller port, and play.
Why would you want this?
- Use a modern controller on GameCube/Wii — better ergonomics, more options
- 5 button mapping profiles — Default, SNES, Smash Bros Melee, Mario Kart Wii, and Fighting game layouts
- Rumble support — vibration feedback is forwarded to your USB controller
- Keyboard mode — use a USB keyboard for Phantasy Star Online
- Copilot mode — combine multiple controllers into one for accessibility
This build requires soldering — you'll wire up a USB-A host port for controller input and a GameCube cable for console output. It's a step up from the USB2USB build, but still very approachable.
Parts List
| Part | Price | Where to Buy |
|---|---|---|
| Waveshare RP2040-Zero | $5.99 | Waveshare / AliExpress |
| USB-A female breakout board | $2.50 | Adafruit |
| GameCube controller extension cable | $5–8 | Amazon / AliExpress |
| 22–26 AWG wire | $3–5 | Any electronics supplier |
| Soldering iron + solder | $15–30 | If you don't have one |
| USB-C data cable | ~$5 | For flashing firmware |
Total: ~$25–35 (less if you already have a soldering iron and wire).
You can also use an Adafruit KB2040 ($8.95) instead of the RP2040-Zero — it's the "default" board for this adapter, but the RP2040-Zero works great and is cheaper/smaller.
Step 1: Prepare the GameCube Cable
Cut one end off a GameCube controller extension cable. You'll solder the loose wires to your microcontroller board.
GameCube Controller Cable Pinout
The cable has these conductors:
Pin 1: VCC (5V)
Pin 2: Data (bidirectional joybus line)
Pin 3: GND
Pin 4: GND
Pin 6: 3.3V (some cables — optional)
Strip about 5mm of insulation from each wire. Use a multimeter in continuity mode to identify which wire is which — GameCube cables aren't always color-coded consistently.
Tip: If you're not sure which pin is which on the connector, search for "GameCube controller port pinout" — the plug has a distinctive notched shape that makes orientation easy.
Step 2: Wire the GameCube Connection
RP2040-Zero → GameCube
| RP2040-Zero Pin | GameCube Cable | Signal |
|---|---|---|
| 5V | Pin 1 | VCC (5V power) |
| GND | Pin 3 | Ground |
| 3V3 | Pin 6 | 3.3V (if present in cable) |
| GPIO 7 | Pin 2 | Data (joybus) |
The data line uses the GameCube's joybus protocol, implemented via PIO on the RP2040. The firmware handles all the timing — you just need to get the wire to the right pin.
KB2040 → GameCube
Same signals, same pin assignments — GPIO 7 for data, 5V, 3.3V, and GND.
Step 3: Wire the USB Host Port
This is identical to the USB2USB Pico wiring — you're connecting a USB-A breakout board so controllers can plug in.
USB-A Connector Pinout
┌───────────────────┐
│ 1 2 3 4 │
└───────────────────┘
VBUS D- D+ GND
(5V)
RP2040-Zero → USB-A Host
| RP2040-Zero Pin | USB-A Pin | Signal | Wire Color (typical) |
|---|---|---|---|
| GPIO 10 | Pin 3 | D+ | Green |
| GPIO 11 | Pin 2 | D- | White |
| 5V | Pin 1 | VBUS (5V) | Red |
| GND | Pin 4 | Ground | Black |
KB2040 → USB-A Host
The KB2040 uses different GPIO pins for PIO-USB. Check the wiring guide for KB2040-specific pin assignments.
Wiring Tips
- ⚠️ D+ and D- are the most common mistake — if your USB controller isn't detected, these are almost certainly swapped
- Keep USB wires under 15cm (6 inches)
- No USB hubs — PIO-USB only supports direct controller connections
- A USB-A breakout board with labeled pins is much easier than cutting a cable open
Step 4: Flash the Firmware
Download the UF2
Go to github.com/joypad-ai/joypad-os/releases and download:
| Board | Firmware File |
|---|---|
| RP2040-Zero | joypad_*_usb2gc_rp2040zero.uf2 |
| KB2040 | joypad_*_usb2gc_kb2040.uf2 |
Enter Bootloader Mode
- Disconnect the board from everything
- Hold BOOT (or BOOTSEL)
- While holding, plug the USB-C cable into your computer
- Release the button
RPI-RP2drive appears
Flash
- Drag and drop the
.uf2file onto theRPI-RP2drive - Drive auto-ejects — firmware is flashed
- Done!
Step 5: Test It
Basic Test (Without GameCube)
- Plug the adapter into your PC via USB-C
- Plug a USB controller into the USB-A port
- Open config.joypad.ai in Chrome
- You should see the controller in the input monitor
- Press buttons and verify they register
On the GameCube
- Power off the GameCube
- Plug the adapter into a controller port (the GameCube cable end)
- Plug a USB controller into the adapter's USB-A port
- Power on the GameCube
- Navigate menus and test in a game
LED Status
- 🟢 Solid green = no controller connected
- 🔵 Solid blue = controller connected and working
Using Profiles
USB2GC has 5 built-in button mapping profiles optimized for different games:
How to Switch
- Hold Select for 2 seconds
- Press D-Pad Up to cycle forward, D-Pad Down to cycle backward
- Controller rumbles and LED flashes to confirm
- Profile saves to flash — it remembers your choice
Profile Overview
| Profile | Best For | Key Differences |
|---|---|---|
| Default | Most games | Standard mapping — A/B/X/Y, analog triggers |
| SNES | SNES-style games | L/R as full digital press, Select→Z |
| SSBM | Super Smash Bros. Melee | Light shield, multiple jump buttons, 85% stick sensitivity |
| MKWii | Mario Kart Wii | LB→Wheelies, RB→Drift, RT→Item throw |
| Fighting | Fighting games | Right stick disabled (prevents accidental input), LB→C-Up |
Default Button Mapping
| Your Controller | GameCube |
|---|---|
| Cross / A | B |
| Circle / B | A |
| Square / X | Y |
| Triangle / Y | X |
| RB / R1 | Z |
| LT / L2 | L (analog) |
| RT / R2 | R (analog) |
| Start | Start |
| Left Stick | Control Stick |
| Right Stick | C-Stick |
Troubleshooting
GameCube Doesn't Detect the Adapter
- Check your GameCube cable wiring — especially the data line on GPIO 7
- Make sure 5V and GND are connected
- Verify the 3.3V connection if your cable has it
- Try a different controller port on the GameCube
- Try pressing the reset button on the GameCube
USB Controller Not Detected
- This is almost always D+ and D- swapped on the USB host wiring
- Verify GPIO 10 → D+ (green) and GPIO 11 → D- (white) on RP2040-Zero
- Make sure VBUS is providing 5V to the USB-A connector
- Try a different controller
- Check the controller compatibility list
Rumble Not Working
- Not all controllers support rumble feedback — Xbox and PlayStation controllers do
- High-current rumble may need more power than the adapter can provide
- Try using a powered USB hub between the controller and adapter (note: PIO-USB hub support is limited)
Buttons Feel Wrong
- You might be on the wrong profile. Hold Select + D-Pad to cycle through them
- The default profile maps Cross→B and Circle→A (not the other way around) — this matches GameCube layout conventions
RPI-RP2 Drive Doesn't Appear
- Hold BOOT before connecting USB
- Try a different cable (data-capable)
- Try a different USB port
What's Next?
- GC2USB Guide — Go the other direction — use a GameCube controller on PC
- USB2USB Guide — Simpler build if you just need USB-to-USB
- BT2N64 Guide — Bluetooth controllers on N64
- Controller Archive — Full compatibility list
- Community Discord — Share your build, get help
Estimated build time: 45–90 minutes (includes soldering). Difficulty: Medium.