Skip to content

joypad-ai/joypad-core

Repository files navigation

Joypad Core

Joypad Core

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

Joypad Core 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 Core 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 Core 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 Core 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-core.git
cd joypad-core && 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 Core 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 Core is licensed under the Apache-2.0 License.

The Joypad name and branding are trademarks of Joypad Inc.

Sponsor this project

Contributors 6