Skip to content

USBRetro: Robust USB host controller input for retro consoles.

License

Notifications You must be signed in to change notification settings

chaosweilder/USBRetro

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

675 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Joypad OS

Joypad OS

Universal controller firmware foundation for adapters, controllers, and input systems.

Joypad OS is a modular, high-performance firmware platform for building controller adapters, custom controllers, and input/output bridges across USB, Bluetooth, and native game console protocols.

Formerly known as USBRetro, this project now serves as the foundational firmware layer of the Joypad ecosystem — a universal platform for extending how controllers work, connect, and evolve.

Joypad OS focuses on real-time controller I/O, protocol translation, and flexible routing, making it easy to build everything from classic console adapters to next-generation, assistive, and AI-augmented input devices.


What Joypad OS Enables

  • Universal input/output translation — Convert USB HID devices into native console protocols and vice versa.
  • Modular firmware apps — Build specific bridges like usb2usb, usb2gc, snes2usb, passthrough adapters, merged inputs, and hybrid devices — all on a shared core.
  • Flexible routing & passthrough — Support multi-output controllers, input merging, chaining devices, and advanced mods.
  • Hardware-agnostic foundation — Designed to run across RP2040 today, with future portability to ESP32 and nRF platforms.
  • Foundation for accessibility & assistive play — Enables custom controllers and input extensions for gamers with diverse needs.

Joypad OS is the real-time nervous system of the Joypad platform.


Supported Outputs

Output Features Documentation
USB Device HID Gamepad, XInput, Xbox OG, Xbox One, PS3, PS4, PS Classic, Switch Docs
PCEngine / TurboGrafx-16 Multitap (5 players), Mouse, 2/3/6-button Docs
GameCube / Wii Profiles, Rumble, Keyboard mode Docs
Nuon DVD Players Controller, Spinner (Tempest 3000), IGR Docs
3DO Interactive Multiplayer 8 players, Mouse, Extension passthrough Docs
Casio Loopy 4 players (experimental) Docs

Products

Pre-built adapters available at controlleradapter.com:

  • USB-2-PCE - PCEngine/TurboGrafx-16 adapter
  • GC USB - GameCube/Wii adapter with profiles
  • NUON USB - Nuon DVD player adapter

Supported USB Devices

Controllers:

  • Xbox (OG/360/One/Series X|S)
  • PlayStation (Classic/DS3/DS4/DualSense)
  • Nintendo Switch (Pro/Joy-Cons)
  • 8BitDo (PCE 2.4g, M30, Adapters)
  • Generic HID gamepads

Peripherals:

  • USB Keyboards (full HID support)
  • USB Mice (PCEngine mouse, Nuon spinner, 3DO mouse)
  • USB Hubs (up to 8 devices for 3DO)

Complete hardware compatibility list


For Users: Updating Firmware

Quick Flash

  1. Download latest .uf2 from Releases
  2. Enter bootloader:
    • USB-2-PCE / NUON / 3DO: Hold BOOT + connect USB-C
    • GC USB: Just connect USB-C (no button)
  3. Drag .uf2 file to RPI-RP2 drive
  4. Done! Drive auto-ejects when complete

Full installation guide


For Developers: Building Firmware

Quick Start

# Install ARM toolchain (macOS)
brew install --cask gcc-arm-embedded cmake git

# Clone and initialize
git clone https://github.com/joypad-ai/joypad-os.git
cd joypad-os && make init

# Build specific product
make usb2gc         # GameCube adapter
make usb2pce        # PCEngine adapter
make usb2nuon       # Nuon adapter
make usb23do        # 3DO adapter

Build Commands

make init          # Initialize submodules (one-time setup)
make all           # Build all products
make clean         # Clean build artifacts

# Build specific products
make usb2pce       # USB2PCE (KB2040 + PCEngine)
make usb2gc        # USB2GC (KB2040 + GameCube)
make usb2nuon      # USB2Nuon (KB2040 + Nuon)
make usb23do       # USB23DO (KB2040 + 3DO)
make usb2loopy     # USB2Loopy (KB2040 + Casio Loopy)
make snes23do      # SNES23DO (SNES→3DO bridge)

Output firmware files appear in releases/ directory.

Complete build guide


Documentation

Console-Specific Guides


Architecture

Joypad OS uses a modular architecture:

  • RP2040 - Dual-core ARM Cortex-M0+ microcontroller
  • TinyUSB - USB host stack for polling USB devices
  • PIO - Programmable I/O for timing-critical console protocols
  • Dual-Core: Core 0 handles USB input, Core 1 runs console output
  • Router - Flexible input→output routing (SIMPLE/MERGE/BROADCAST)
  • Apps - Per-product configuration (router, profiles, features)

See CLAUDE.md for detailed architecture


Community & Support


Acknowledgements


License

Joypad OS is licensed under the Apache-2.0 License.

The Joypad name and branding are trademarks of Joypad Inc.

About

USBRetro: Robust USB host controller input for retro consoles.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 96.2%
  • CMake 2.2%
  • Makefile 1.5%
  • Other 0.1%