🔧

Build a USB-to-Dreamcast Controller Adapter

Medium45–90 minutes💰 $34–56🧩 5 parts

🛒 Don't want to build? Buy a ready-made adapter and support Joypad.

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

  1. Disconnect the board from everything
  2. Hold BOOT (or BOOTSEL)
  3. While holding, plug the USB-C cable into your computer
  4. Release the button
  5. RPI-RP2 drive appears

Flash

  1. Drag and drop the .uf2 file onto the RPI-RP2 drive
  2. Drive auto-ejects — firmware is flashed
  3. Done!

Step 5: Test It

Basic Test (Without Dreamcast)

  1. Plug the adapter into your PC via USB-C
  2. Plug a USB controller into the USB-A port
  3. Open config.joypad.ai in Chrome
  4. You should see the controller in the input monitor

On the Dreamcast

  1. Power off the Dreamcast
  2. Plug the adapter into a controller port
  3. Plug a USB controller into the adapter's USB-A port
  4. Power on the Dreamcast
  5. 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?


Estimated build time: 45–90 minutes (includes soldering). Difficulty: Medium.

More Build Guides

Need help with this build?

Join our community for build support. Get help on Discord →