Skip to content

Universal controller firmware core for adapters and custom controllers.

License

Notifications You must be signed in to change notification settings

herzmx/joypad-os

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

771 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, XAC, 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
Sega Dreamcast VMU emulation, Rumble, Profiles 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

Supported Input Devices

USB Controllers:

  • Xbox (OG/360/One/Series X|S, 360 Wireless Adapter)
  • PlayStation (Classic/DS3/DS4/DualSense)
  • Nintendo (Switch Pro, Switch 2 Pro, NSO GameCube, GameCube adapter)
  • 8BitDo (PCE 2.4g, M30, BT Adapters)
  • Hori (Horipad, Pokken Tournament)
  • Logitech Wingman
  • Sega Astro City Mini
  • Google Stadia
  • Raphnet adapters (PCEngine, etc.)
  • Generic HID gamepads

Bluetooth Controllers (via USB dongle or Pico W):

  • PlayStation (DS3/DS4/DualSense)
  • Nintendo (Switch Pro, Switch 2 Pro, Wii U Pro, Wiimote)
  • Xbox (One/Series Bluetooth models)
  • Google Stadia

Peripherals:

  • USB Bluetooth dongles (connect BT controllers via USB host)
  • 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 usb2pce_kb2040   # PCEngine adapter
make usb2gc_kb2040    # GameCube adapter
make usb2dc_kb2040    # Dreamcast adapter
make usb2nuon_kb2040  # Nuon adapter

Build Commands

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

# Console adapters (USB/BT input)
make usb2pce_kb2040       # PCEngine (KB2040)
make usb2gc_kb2040        # GameCube (KB2040)
make usb2gc_rp2040zero    # GameCube (RP2040-Zero)
make usb2dc_kb2040        # Dreamcast (KB2040)
make usb2nuon_kb2040      # Nuon (KB2040)
make usb2loopy_kb2040     # Casio Loopy (KB2040)
make usb23do_rp2040zero   # 3DO (RP2040-Zero)

# Native controller adapters
make n642dc_kb2040        # N64 → Dreamcast (KB2040)
make n642usb_kb2040       # N64 → USB (KB2040)
make snes2usb_kb2040      # SNES → USB (KB2040)
make snes23do_rp2040zero  # SNES → 3DO (RP2040-Zero)

# USB/BT passthrough
make usb2usb_feather      # USB → USB (Feather USB Host)
make usb2usb_rp2040zero   # USB → USB (RP2040-Zero)
make usb2usb_rp2350usba   # USB → USB (Waveshare RP2350-USB-A)
make bt2usb_pico_w        # Bluetooth → USB (Pico W)

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

Universal controller firmware core for adapters and custom controllers.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 92.1%
  • JavaScript 2.4%
  • CMake 2.0%
  • HTML 1.8%
  • Makefile 1.2%
  • Python 0.4%
  • Other 0.1%