Build a USB-to-3DO Controller Adapter
What Is This?
USB23DO lets you use any modern USB controller (Xbox, PlayStation, Switch, 8BitDo, etc.) on a real 3DO Interactive Multiplayer console. It supports up to 8 players via USB hub, 3 button mapping profiles, and even extension passthrough so you can daisy-chain native 3DO controllers.
Why would you want this?
- Use modern controllers on 3DO — the original 3DO controller is... not great
- Up to 8 players — connect a USB hub with multiple controllers
- 3 button profiles — Default (SNES-style), Fighting, and Shooter layouts
- Mouse support — USB mouse → 3DO mouse for Myst, The Horde, etc.
- Extension passthrough — native 3DO controllers can be daisy-chained after the adapter
- Profile switching on the fly — Hold Select + D-Pad to cycle
This is the most complex build in the Joypad adapter lineup due to the required level shifters — the 3DO uses 5V logic and the RP2040 is only 3.3V tolerant. Don't skip the level shifter or you'll damage your board.
Parts List
| Part | Price | Where to Buy |
|---|---|---|
| Waveshare RP2040-Zero | $5.99 | Waveshare / AliExpress |
| 4-channel BSS138 level shifter | $1–3 | AliExpress / Adafruit |
| USB-A female breakout board | $2.50 | Adafruit |
| DB9 female connector | $1–3 | Electronics suppliers / AliExpress |
| DB9 male connector (optional) | $1–3 | For native controller passthrough |
| 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–40
Or buy pre-built: USB-2-3DO Adapter at controlleradapter.com
Understanding the Level Shifter
⚠️ This is critical. The 3DO controller port uses 5V logic. The RP2040 GPIO is 3.3V only and NOT 5V tolerant. Connecting 3DO signals directly to the RP2040 will damage your board.
A bidirectional level shifter sits between the RP2040 and the 3DO, translating:
- Low side (LV): 3.3V from RP2040
- High side (HV): 5V from 3DO
All 4 signal lines (CLK, DATA_OUT, DATA_IN, CS_CTRL) must go through the level shifter.
Step 1: Wire the 3DO Connection (via Level Shifter)
3DO Controller Port Pinout (DB9)
Pin 1: Clock (CLK) — from console
Pin 2: Data Out — to console
Pin 3: Data In — from next controller in daisy chain
Pin 4: Audio Left (unused)
Pin 5: Audio Right (unused)
Pin 6: VCC (5V) — power from console
Pin 7: GND
Pin 8: Control Select
Pin 9: GND
Wiring Diagram
All signal lines go through the bidirectional level shifter:
| RP2040-Zero | Level Shifter (Low) | Level Shifter (High) | DB9 Female | Signal |
|---|---|---|---|---|
| 3V3 | LV | — | — | 3.3V reference |
| 5V | — | HV | — | 5V reference |
| GND | GND | GND | Pin 7, Pin 9 | Common ground |
| GPIO 2 | L1 | H1 → | Pin 1 | CLK (Clock in) |
| GPIO 3 | L2 | H2 → | Pin 2 | DATA_OUT (to console) |
| GPIO 4 | L3 | ← H3 | Pin 3 | DATA_IN (from next controller) |
| GPIO 5 | L4 | H4 → | Pin 8 | CS_CTRL (Control Select) |
| — | — | — | Pin 6 (5V) | 5V power to level shifter HV |
Extension Passthrough (Optional)
To allow native 3DO controllers to be daisy-chained after your adapter, add a DB9 male connector:
| DB9 Female Pin | DB9 Male Pin | Signal |
|---|---|---|
| Pin 1 | Pin 1 | CLK (passed through) |
| Pin 2 | Pin 2 | DATA_OUT (passed through) |
| Pin 3 | Pin 3 | DATA_IN (from next controller) |
| Pin 6 (5V) | Pin 5 | VCC |
| Pin 7 (GND) | Pin 9 | GND |
Step 2: Wire the USB Host Port
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
- ⚠️ NEVER connect 3DO signals directly to the RP2040 — always go through the level shifter
- ⚠️ D+ and D- are the most common USB mistake — if controllers aren't detected, these are swapped
- Keep USB wires under 15cm (6 inches)
- USB hubs are supported for multi-player — up to 8 controllers via powered hub
Step 3: Flash the Firmware
Download the UF2
Go to github.com/joypad-ai/joypad-os/releases and download:
| Board | Firmware File |
|---|---|
| RP2040-Zero | joypad_*_usb23do_rp2040zero.uf2 |
Enter Bootloader Mode
- Disconnect the board
- Hold BOOT
- While holding, plug the USB-C cable into your computer
- Release BOOT
RPI-RP2drive appears
Flash
- Drag and drop the
.uf2file onto theRPI-RP2drive - Drive auto-ejects — firmware is flashed
- Done!
Step 4: Test It
On the 3DO
- Power off the 3DO
- Connect the adapter via the DB9 cable to the controller port
- Plug a USB controller into the adapter's USB-A port
- Power on the 3DO
- Navigate menus and test in a game
LED Status
- 🔴 Red breathing = no controller connected
- 🔴 Solid red = Player 1 connected
- 🔵 Blue = Player 2
- 🟢 Green = Player 3
Button Mapping Profiles
How to Switch Profiles
- Hold Select for 2 seconds
- Press D-Pad Up/Down to cycle profiles
- LED blinks and controller rumbles to confirm
- Profile saves to flash
Default Profile (SNES-Style)
| Your Controller | 3DO Button |
|---|---|
| Cross / B | B (middle) |
| Circle / A | C (bottom) |
| Square / X | A (top) |
| Triangle / Y | — (disabled) |
| L1 / LB | L |
| R1 / RB | R |
| L2 / LT | L |
| R2 / RT | R |
| Select / Back | X (Stop) |
| Start | P (Play/Pause) |
| D-pad | D-pad |
| Left Stick | D-pad |
Fighting Profile
Optimized for Way of the Warrior and other fighting games:
| Your Controller | 3DO Button |
|---|---|
| Cross / B | B (Light Punch) |
| Circle / A | C (Medium Punch) |
| Square / X | A (Heavy Punch) |
| Triangle / Y | P (Light Kick) |
| L1 / LB | L (Medium Kick) |
| R1 / RB | R (Heavy Kick) |
| Select | X (Stop) |
| Start | P (Pause) |
Shooter Profile
Optimized for Doom, PO'ed, and Killing Time:
| Your Controller | 3DO Button |
|---|---|
| Cross / B | C (Jump) |
| Circle / A | B (Action) |
| Square / X | A (Weapon Switch) |
| Triangle / Y | X (Special) |
| L1/L2 | L (Primary Fire) |
| R1/R2 | R (Secondary Fire) |
| Start | P (Pause) |
Mouse Mode
USB mouse maps directly to 3DO mouse protocol:
| USB Mouse | 3DO Mouse |
|---|---|
| Left Click | Left Button |
| Right Click | Right Button |
| Middle Click | Middle Button |
| Movement | 1:1 Movement |
Compatible 3DO Consoles
- Panasonic FZ-1 / FZ-10
- Goldstar GDO-101M / GDO-202M
- Sanyo TRY 3DO
- Creative Labs 3DO Blaster (PC card)
Troubleshooting
3DO Doesn't Detect the Adapter
- Check all level shifter connections — every signal line must pass through it
- Verify 5V power from DB9 Pin 6 to level shifter HV
- Check 3.3V from RP2040 to level shifter LV
- Verify GND connections (DB9 Pin 7 and/or Pin 9)
Controller Not Detected (USB Side)
- D+ and D- swapped — GPIO 10 → D+ (green), GPIO 11 → D- (white)
- Try a different controller
- For multi-player, make sure the USB hub is powered
Extension Passthrough Not Working
- Check DATA_IN (Pin 3) connection through the level shifter
- Native controller must be at the end of the daisy chain
Board Damaged / Not Responding
- If you connected 3DO signals without a level shifter, the RP2040 GPIO may be damaged
- 5V on 3.3V-only GPIO is destructive — you may need a new board
What's Next?
- USB2DC Guide — USB controller on Dreamcast
- USB2Nuon Guide — USB controller on Nuon DVD players
- USB2GC Guide — USB controller on GameCube
- USB2USB Guide — Simpler build for USB-to-USB
- Community Discord — Share your build, get help
Estimated build time: 90–120 minutes (includes soldering and level shifter wiring). Difficulty: Hard.