Skip to content

t3chnicallyinclined/GP2040-CE-NOBD

 
 

Repository files navigation

GP2040-CE NOBD

Sponsor on GitHub Support on Ko-fi Donate via Strike

A fork of GP2040-CE v0.7.12 that adds NOBD (No OBD) — a sync window that groups near-simultaneous button presses so they arrive on the same USB frame. Built for MvC2, where split LP+HP presses cause dropped dashes.

Also includes a native Dreamcast Maple Bus driver — play on a real DC without an adapter. Jump to Dreamcast wiring →


Demo (MvC2)

Sync disabled — dropped dashes, stray jabs

NOBD.Demo.-.Sync.disabled.mp4

Sync enabled — dashes come out clean every time

NODB.Demo.-.Sync.Enabled.mp4

Flash

  1. Download the .uf2 for your board from the Releases page
  2. Unplug your board, hold BOOTSEL, plug in via USB
  3. Drag and drop the .uf2 onto the RPI-RP2 drive that appears
  4. Board reboots with new firmware — done

Supported boards: RP2040AdvancedBreakoutBoard, Pico, PicoW, Pico2


Configure

Open the web UI: hold S2 on boot → navigate to http://192.168.7.1Settings

NOBD Sync Window

Mode What it does
NOBD Sync Window Groups near-simultaneous presses. Default: 5ms
Stock Debounce GP2040-CE stock behavior. Set to 0 for raw passthrough

Recommended: Start at 5ms. If you still drop dashes occasionally, try 6–8ms.

A Release Debounce checkbox appears in NOBD mode — enables bounce filtering on button release. Off by default. Useful for rhythm games where release bounce causes phantom inputs, not needed for fighting games.


Dreamcast — Native Controller

GP2040-CE NOBD includes a native Maple Bus driver. Your fight stick talks directly to the Dreamcast — no adapter, no USB dongle, no level shifter.

Status: Beta — buttons, d-pad, triggers, and VMU save/load all confirmed working on real hardware. Analog stick untested.

What You Need

  • RP2040-based GP2040-CE board
  • A Dreamcast controller cable (cut from a broken controller or extension)
  • Soldering iron (not necessary if you have breakout screw terminals like in gp2040 advanced breakout board)

Cable Pinout

Pin Color (typical) Signal
1 Red VCC (+5V from console)
2 Green SDCKA (Data/Clock A)
3 Blue SDCKB (Data/Clock B)
4 White Sense
5 Black GND

Wire colors vary between cables — verify with a multimeter before soldering.

Wiring to RP2040AdvancedBreakoutBoard

DC Cable Board Connection Notes
Red (VCC) VCC Board is powered directly by the DC's 5V
Green (SDCKA) GPIO 2 Maple Bus Data A (default)
Blue (SDCKB) GPIO 3 Maple Bus Data B (default)
White (Sense) GND Tie directly to ground — tells DC a device is present
Black (GND) GND Common ground

Important — RP2040AdvancedBreakoutBoard: The board has a physical switch that selects between USB and the Options/Aux header. Flip it to the Options position before connecting to the Dreamcast, otherwise the board won't power on from the DC's 5V line.

The Maple Bus pins default to GPIO 2/3. If you wire to different pins, update them in the web UI under Settings → Dreamcast so the firmware knows where to look.

Wiring Photos

Wiring diagram placeholder

Controller cable pinout placeholder

Completed setup placeholder

Activating Dreamcast Mode

Hold L1 while plugging in the board. (or use the webui, the hot button can be configured)

Dreamcast mode OLED placeholder

For full Dreamcast wiring details and troubleshooting, see docs/DREAMCAST.md.

Selecting Dreamcast in the Web UI

In the web UI, go to Settings → Input Mode and select Dreamcast from the dropdown. The Dreamcast GPIO pin settings and VMU Manager link appear below.

Dreamcast input mode selection placeholder


VMU Manager

Manage your Dreamcast VMU saves from the web UI — no real VMU hardware needed.

VMU Manager page placeholder

Export

Download a complete 128KB backup of your VMU as a .bin file. Useful for archiving saves or transferring to other tools.

Import (.dci)

Upload a .dci save file (Nexus Memory Manager / Dreamcast Memory Manager format). The import automatically:

  • Converts byte order (DCI → flash format)
  • Allocates blocks top-down (matching Dreamcast convention)
  • Replaces any existing save with the same filename

DCI import success placeholder

MvC2 all characters unlocked placeholder

Format

Wipe and re-format the VMU. Requires typing "FORMAT" to confirm — all saves are permanently deleted.

Input Timing for Dreamcast

Debounce and NOBD sync windows are generally unnecessary in Dreamcast mode. The 16ms Maple Bus polling interval acts as a natural sync window — simultaneous presses within that window always land on the same frame. The default for fresh installs is Stock Debounce 0 (raw passthrough).

Dreamcast debounce hint placeholder


Why NOBD?

The short version: when you press two buttons "simultaneously," your fingers are actually 2–8ms apart. At 1000Hz USB polling, that gap splits your inputs across USB frames. In MvC2 — a 25-year-old arcade game with zero input leniency — that means a stray jab instead of a dash.

NOBD holds the first press for up to 5ms so both buttons commit on the same frame. Nothing added, nothing invented — just your two presses arriving together instead of split by a timing boundary you can't see or control.

Full technical explanation →


Finger Gap Tester

Measure your natural finger gap with the Finger Gap Tester — Python CLI or Rust GUI. Detects strays, bounces, pre-fire, and recommends a sync window value.


Contributing / Building from Source

See docs/README.md — covers how this project was built using AI-assisted firmware development (Claude Code), how to set up your build environment, and how to contribute without being a firmware expert.


Links

About

GP2040-CE fork with NOBD sync window (simultaneous button presses) + native Dreamcast Maple Bus controller output. Fight sticks for DC without adapters.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

No contributors

Languages

  • C 47.6%
  • C++ 31.0%
  • JavaScript 11.5%
  • TypeScript 4.2%
  • Python 3.9%
  • CMake 0.7%
  • Other 1.1%