Build a USB-to-Dreamcast Controller Adapter
What Is This?
USB2DC lets you use any modern USB controller (Xbox, PlayStation, Switch, 8BitDo, etc.) on a real Sega Dreamcast. Plug your favorite USB controller into the adapter, plug the adapter into a Dreamcast controller port, and play.
Why would you want this?
- Use a modern controller on Dreamcast — better sticks, better triggers, better ergonomics
- Up to 4 players via Maple Bus
- Analog trigger support — L/R triggers are analog, just like the original
- Rumble feedback — Puru Puru Pack vibration forwarded to your USB controller
- Player LED colors — Orange (P1), Blue (P2), Red (P3), Green (P4)
- Drop-in USB4Maple replacement — RP2040-Zero build uses the same pinout as USB4Maple
This build requires soldering — you'll wire a Dreamcast controller cable and a USB-A host port to your microcontroller.
Choose Your Board
Option A: Adafruit KB2040 (Default)
The default board for USB2DC. USB-C, built-in RGB LED, Pro Micro form factor.
Maple Bus pins: GPIO 2 (Data Line A) / GPIO 3 (Data Line B)
Option B: Waveshare RP2040-Zero (USB4Maple Compatible)
Uses the same pinout as USB4Maple, so if you already have a USB4Maple PCB or enclosure, you can flash Joypad OS firmware as a drop-in replacement.
Maple Bus pins: GPIO 14 (Data Line A) / GPIO 15 (Data Line B)
Parts List
| Part | Price | Where to Buy |
|---|---|---|
| Adafruit KB2040 | $8.95 | Adafruit |
| — or — Waveshare RP2040-Zero | $5.99 | Waveshare / AliExpress |
| USB-A female breakout board | $2.50 | Adafruit |
| Dreamcast controller extension cable | $5–10 | 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
Step 1: Prepare the Dreamcast Cable
Cut one end off a Dreamcast controller extension cable. You'll solder the loose wires to your microcontroller board.
Dreamcast Controller Connector Pinout
Looking at the controller plug (male, from controller cable):
___
/ 5 \
| 4 3 |
| 2 1 |
\_____/
| Pin | Signal | Description |
|---|---|---|
| 1 | SDCKA | Data Line A (Maple Bus) |
| 2 | GND (Sense) | Ground / device detect |
| 3 | +5V | Power from console |
| 4 | GND | Ground |
| 5 | SDCKB | Data Line B (Maple Bus) |
Strip about 5mm of insulation from each wire. Use a multimeter to identify which wire maps to which pin.
Step 2: Wire the Dreamcast Connection
KB2040 → Dreamcast
| KB2040 Pin | Dreamcast Pin | Signal |
|---|---|---|
| GPIO 2 | Pin 1 | SDCKA (Data Line A) |
| GPIO 3 | Pin 5 | SDCKB (Data Line B) |
| RAW/5V | Pin 3 | +5V Power |
| GND | Pin 2, Pin 4 | Ground (connect both) |
RP2040-Zero → Dreamcast (USB4Maple Compatible)
| RP2040-Zero Pin | Dreamcast Pin | Signal |
|---|---|---|
| GPIO 14 | Pin 1 | SDCKA (Data Line A) |
| GPIO 15 | Pin 5 | SDCKB (Data Line B) |
| 5V | Pin 3 | +5V Power |
| GND | Pin 2, Pin 4 | Ground (connect both) |
Maple Bus is the Dreamcast's bidirectional communication protocol. Both data lines carry clock and data signals — the firmware handles all the timing via PIO state machines.
Step 3: Wire the USB Host Port
Connect a USB-A breakout board for controller input.
USB-A Connector Pinout
┌───────────────────┐
│ 1 2 3 4 │
└───────────────────┘
VBUS D- D+ GND
(5V)
KB2040 → USB-A Host
| KB2040 Pin | USB-A Pin | Signal | Wire Color (typical) |
|---|---|---|---|
| GPIO 16 | Pin 3 | D+ | Green |
| GPIO 17 | Pin 2 | D- | White |
| RAW/5V | Pin 1 | VBUS (5V) | Red |
| GND | Pin 4 | Ground | Black |
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 |
Wiring Tips
- ⚠️ D+ and D- are the #1 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
- Connect both GND pins (Pin 2 and Pin 4) on the Dreamcast connector for reliable grounding
Step 4: Flash the Firmware
Download the UF2
Go to github.com/joypad-ai/joypad-os/releases and download:
| Board | Firmware File |
|---|---|
| KB2040 | joypad_*_usb2dc_kb2040.uf2 |
| RP2040-Zero | joypad_*_usb2dc_rp2040zero.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 Dreamcast)
- 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
On the Dreamcast
- Power off the Dreamcast
- Plug the adapter into a controller port
- Plug a USB controller into the adapter's USB-A port
- Power on the Dreamcast
- Navigate menus and test in a game
LED Status
- 🟠 Orange breathing = no controller connected (Dreamcast theme)
- 🟠 Solid orange = Player 1 connected
- 🔵 Blue = Player 2
- 🔴 Red = Player 3
- 🟢 Green = Player 4
Button Mapping
| Your Controller | Dreamcast Button |
|---|---|
| Cross / B | A |
| Circle / A | B |
| Square / X | X |
| Triangle / Y | Y |
| L1 / LB | L Trigger (digital) |
| R1 / RB | R Trigger (digital) |
| L2 / LT | D button |
| R2 / RT | R Trigger (analog) |
| L3 (stick click) | Z |
| R3 (stick click) | C |
| Select / Back | D (2nd Start) |
| Start | Start |
| Guide / Home | Start |
| D-pad | D-pad |
| Left Stick | Analog Stick |
Troubleshooting
Dreamcast Doesn't Detect the Adapter
- Check SDCKA (Data Line A) and SDCKB (Data Line B) wiring
- Verify 5V and GND connections — both GND pins (2 and 4) should be connected
- Try a different controller port on the Dreamcast
- Make sure you flashed the correct firmware for your board (KB2040 vs RP2040-Zero)
USB Controller Not Detected
- D+ and D- swapped — verify the correct GPIO pins for your board
- KB2040: GPIO 16 → D+, GPIO 17 → D-
- RP2040-Zero: GPIO 10 → D+, GPIO 11 → D-
- Try a different controller
Rumble Not Working
- Not all USB controllers support rumble feedback
- Xbox and PlayStation controllers generally work
- Rumble emulates the Dreamcast Puru Puru Pack
Analog Triggers Feel Wrong
- The Dreamcast L/R triggers are analog — make sure you're using L2/R2 (analog triggers) on your controller, not L1/R1 (digital shoulders)
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?
- USB2GC Guide — Use your USB controller on a GameCube
- USB2USB Guide — Simpler build for USB-to-USB
- USB23DO Guide — USB controller on 3DO
- Controller Archive — Full compatibility list
- Community Discord — Share your build, get help
Estimated build time: 45–90 minutes (includes soldering). Difficulty: Medium.