Skip to main content
HayBox supports a wide variety of controllers and PCBs, primarily targeting B0XX-style digital controllers. The firmware is highly modular and can be adapted to different hardware configurations.

Official B0XX Controllers

B0XX R1

First generation B0XX controller with ATMega32U4 (Arduino Leonardo)
  • Platform: AVR (Leonardo)
  • Config: b0xx_r1

B0XX R2

Second generation B0XX controller with improved design
  • Platform: AVR (Leonardo)
  • Config: b0xx_r2

B0XX R4

Latest generation B0XX with RP2040 processor and advanced features
  • Platform: RP2040 (Raspberry Pi Pico)
  • Dual-core processing
  • Config: b0xx_r4

Third-Party Controllers

Fight Sticks and Rectangles

LBX

Low Budget Box - DIY-friendly rectangle controller
  • Platform: AVR (Leonardo)
  • Brook board support with mode switching
  • Config: lbx

Smash Box

Hit Box Arcade’s Smash Box controller
  • Platform: AVR (Arduino Mega)
  • Additional thumb cluster buttons
  • Config: smashbox

C53

Compact 53-key layout controller
  • Platform: RP2040
  • Config: c53

Schism

Advanced rectangle controller design
  • Platform: RP2040
  • Config: schism

GameCube PCBs

GCCPCB1

Crane’s GameCube controller PCB (Version 1)
  • Platform: AVR (Leonardo)
  • Drop-in GameCube shell replacement
  • Config: gccpcb1

GCCPCB2

Crane’s GameCube controller PCB (Version 2)
  • Platform: AVR (Leonardo)
  • Improved revision with better routing
  • Config: gccpcb2

GCCMX

GameCube MX-style mechanical switch PCB
  • Platform: AVR (Leonardo)
  • Cherry MX switch compatibility
  • Brook board mode support
  • Config: gccmx

HTangl V1

HTangl’s custom GameCube PCB
  • Platform: RP2040
  • Config: htangl_v1

Development Boards

Raspberry Pi Pico

Generic RP2040 development board configuration
  • Platform: RP2040
  • 22 GPIO buttons mapped
  • Ideal for prototyping
  • Config: pico

Arduino Boards

Generic Arduino configurations for testing
  • Uno (ATmega328P, no USB)
  • Nano (ATmega328P, no USB)
  • Leonardo (ATMega32U4, USB)
  • Micro (ATMega32U4, USB)
  • Mega (ATmega2560, no USB)
  • Config: arduino

Platform Comparison

FeatureRP2040 (Pico)AVR (ATMega32U4)
Clock Speed133-200 MHz16 MHz
CoresDual-coreSingle-core
RAM264 KB2.5 KB
Flash2 MB32 KB
Input Latency~0.5ms~1-2ms
USB StackTinyUSBLUFA
Console SupportJoybus (PIO)Joybus (bit-bang)
Advanced FeaturesDisplay, RGB LEDs, Config storageLimited
RP2040-based controllers offer significantly better performance and more features, but AVR-based controllers are well-tested and reliable for most use cases.

Choosing a Configuration

When selecting a configuration for your controller:
  1. Check your PCB documentation - Most PCBs will specify which config to use
  2. Identify your microcontroller - Look for markings like “ATMega32U4” or “RP2040”
  3. Browse the configs - Check the config/ directory for your hardware
  4. Verify pin mappings - Ensure the button mappings match your hardware layout
Using the wrong configuration can result in incorrect button mappings or non-functional hardware. Always verify your hardware matches the config before flashing.

Creating Custom Configurations

If your hardware isn’t listed, you can create a custom configuration:
  1. Copy an existing config directory (e.g., config/pico)
  2. Modify config.cpp with your button mappings
  3. Update env.ini with the correct platform settings
  4. Build and flash your custom firmware
See the Pinouts page for details on configuring button mappings.

Build docs developers (and LLMs) love