0%

GP2040 Firmware and Pico Fighting Board

I’ve been working on gamepad/fightstick firmware as a hobby for about 6 months now. In that time I’ve worked on and released an alternative firmware for the Fightboard and Fightboard MX and the vsFIGHTER lines of keyboard-style arcade controllers. I wanted to start branching out from the ATmega32U4 used in those controllers, so I began researching the Raspberry Pi Pico and RP2040 microcontroller. The cost to performance ratio for the RP2040 is excellent, and the 2nd core allows for a ton of extra functionality without affecting the core input loop of a gamepad firmware. And so the GP2040 project was born…

GP2040 is an open source multiplatform gamepad firmware for RP2040 microcontrollers. It currently supports XInput (PC, Android, Raspberry Pi, etc.), Nintendo Switch, and PS3/PS4 (legacy input) via DirectInput. A primary focus of GP2040 is low input latency. All USB modes default to a 1ms/1000Hz polling rate (will vary based on system), and has a measured input latency of just 0.87ms on average in every input mode. GP2040 also includes options for emulating analog stick inputs via the D-Pad and common SOCD cleaning methods such as Up priority and Last Win. This makes it a great option for DIY fightsticks!

Speaking of DIY fightsticks, I’ve also developed an open source arcade board called the Pico Fighting Board which works with the GP2040 firmware. It uses the same footprint as the Brook line of arcade boards to make it easy to drop into existing arcade stick cases and to maintain wiring compatibility. It’s a simple board that can handle direct wiring or the common 20-pin wiring harness. The Pico Fighting Board also has a 3-pin header that provides a 5v signal for connecting your RGB LED chain. All the files for production are available on the Github page, or you can find prebuilt versions on the Feralware store.

My goal with these projects is to make performant, feature-rich and fully open source solutions for gamepads and fightsticks. Stay tuned to see where this goes!