usb2gc¶
USB/BT controllers to GameCube/Wii console.
Overview¶
Connects USB and Bluetooth controllers to a GameCube or Wii console via the joybus protocol. Supports 5 button mapping profiles, keyboard mode for PSO, copilot mode (merge multiple controllers), and rumble feedback. Requires 130MHz overclock for joybus timing.
Input¶
- USB HID, XInput, Bluetooth controllers
- USB keyboard (keyboard mode for Phantasy Star Online)
- USB mouse (mapped to analog stick)
Output¶
GameCube Output -- joybus PIO protocol on a single port.
Core Configuration¶
| Setting | Value |
|---|---|
| Routing mode | MERGE (all inputs blended to one output) |
| Player slots | 4 (fixed assignment) |
| Max USB devices | 4 |
| Clock speed | 130MHz (required for joybus) |
| Profile system | 5 profiles, saved to flash |
Profiles¶
Hold Select for 2 seconds, then press D-Pad Up/Down to cycle. Controller rumbles and LED flashes to confirm. Profile persists across power cycles.
| Profile | Description |
|---|---|
| Default | Standard mapping for most games |
| SNES | L/R as full analog press, Select mapped to Z |
| SSBM | Super Smash Bros. Melee competitive (light shield, multi-jump, 85% stick sensitivity) |
| MKWii | Mario Kart Wii (LB=wheelie, RB=drift, RT=item throw) |
| Fighting | 2D fighters (right stick disabled, LB=C-Up macro) |
See the Profiles (Detailed) section below for full button mapping tables per profile.
Key Features¶
- Keyboard mode -- Toggle with Scroll Lock or F14. Works with PSO and other GC keyboard games.
- Copilot mode -- Multiple controllers merge into one output. All inputs OR'd together.
- Rumble -- Forwarded to compatible controllers (Xbox, DualShock 3/4/5, Switch Pro, 8BitDo).
- Adaptive triggers -- DualSense L2/R2 analog mapped to GC L/R with configurable threshold.
Supported Boards¶
| Board | Build Command |
|---|---|
| KB2040 | make usb2gc_kb2040 |
| RP2040-Zero | make usb2gc_rp2040zero |
Build and Flash¶
Profiles (Detailed)¶
Default Profile¶
Standard mapping for most games:
| USB Input | GameCube Output |
|---|---|
| B1 (Cross/A) | B |
| B2 (Circle/B) | A |
| B3 (Square/X) | Y |
| B4 (Triangle/Y) | X |
| L1 (LB/L) | (disabled) |
| R1 (RB/R) | Z |
| L2 (LT/ZL) | L (analog) |
| R2 (RT/ZR) | R (analog) |
| S1 (Select) | (profile switch) |
| S2 (Start) | Start |
| D-Pad | D-Pad |
| Left Stick | Control Stick |
| Right Stick | C-Stick |
SNES Profile¶
For SNES-style controllers (L/R as full press):
| USB Input | GameCube Output |
|---|---|
| L1 (LB) | L (digital + full analog) |
| R1 (RB) | R (digital + full analog) |
| S1 (Select) | Z |
| Other | Same as Default |
SSBM Profile¶
Super Smash Bros. Melee competitive mapping:
| USB Input | GameCube Output | Notes |
|---|---|---|
| B1 (Cross/A) | B | Attack |
| B2 (Circle/B) | A | Jump |
| B3 (Square/X) | Y | Jump |
| B4 (Triangle/Y) | X | Jump |
| L1 (LB) | Z | Grab |
| R1 (RB) | X | Short hop aerial |
| L2 (LT @ 88%) | L (17% analog) | Light shield |
| R2 (RT @ 55%) | L+R | Quit combo |
| Left Stick | 85% sensitivity | Precision movement |
Key features: light shield at 17% on L trigger, quick quit combo (L+R+Start) on RT, multiple jump buttons (A, X, Y, RB), 85% stick sensitivity for precise movement.
MKWii Profile¶
Mario Kart Wii optimized:
| USB Input | GameCube Output | Notes |
|---|---|---|
| L1 (LB) | D-Up | Wheelies/tricks |
| R1 (RB) | R (full analog) | Drift |
| R2 (RT) | Z (instant) | Item throw |
| Other | Same as Default |
Fighting Profile¶
2D fighting game layout:
| USB Input | GameCube Output | Notes |
|---|---|---|
| L1 (LB) | C-Up | Macro input |
| R1 (RB) | Z | |
| Right Stick | Disabled | Prevents accidental input |
| Other | Same as Default |
Troubleshooting¶
Controller not detected by console: - Check GameCube cable connections (data, 3.3V, ground). - Verify the data pin assignment matches your board.
Rumble not working: - Only compatible USB/BT controllers support rumble feedback. - Check USB power supply -- rumble requires more current. Use a powered USB hub for multiple controllers.
Profile not saving: - Wait 5 seconds after changing the profile for the flash write to complete. - Reflash firmware if flash memory appears corrupted.
Keyboard mode not activating: - Press Scroll Lock or F14 on the connected USB keyboard. - Check the LED indicator for keyboard mode status.
Stick drift or incorrect calibration: - GameCube expects analog center at 128. USB controllers are auto-calibrated. - Check for physical stick drift on the input controller.