Quick Index

Back to Top
IO Boards & Overview
DIY Options & Modifications

5panel.dance

↙️↖️⏺️↗️↘️

GitHubYouTubeBlueSkyDiscordKo-Fi


Info

This page is a work in progress!
Information here is subject to change. If you find inaccuracies or have suggestions, contact me!

Page Directory

5panel.dance/
└── guide/
└── Pump it Up Simulator Guide
├── IO Boards & Overview
└── DIY Options & Modifications


What Is An IO Board?

An IO board, short for "Input/Output board," is a circuit board responsible for handling communication between a game and its various inputs and outputs. Many arcade games are built with a proprietary IO device, to ensure that players can't just plug in a gamepad or keyboard to cheat the system. This is especially important for games like Pump it Up, where people pulling up to the cab with a keyboard and playing with their hands would be very problematic for the leaderboards.

This page will only be covering IO boards that work with official PIU software in some capacity, without requiring modifications to the game's software or environment.

Things That Are Not IO Boards

There are a few devices in the chain going from the dance pads to the main IO board that are often mistaken for IO boards, but are actually there to make the IO board's job easier. These include the JAMMA PCB and stage PCBs.

The JAMMA PCB is a board attached to the side of the MK PC hardware. It features seevral connectors of varying types, including Molex 5V/12V power, a large (typically blue) JAMMA slot which holds another PCB with several wires soldered on, multiple smaller connectors, and a few tactile buttons. This board is responsible for relaying the signals sent from the "pad IO"/"foot PCBs" to the actual PIUIO, as well as supplying power to the PIUIO and cabinet lights. The JAMMA PCB is not needed for a barebones, DIY setup, and is only required for everything to work properly in a full cabinet.

The stage PCBs, also commonly called "pad IO PCBs" or "foot PCBs", can be found in both pads, underneath the top middle piece of metal between the red arrows. These are responsible for taking the dozens of wires required to connect every individual sensor and LED strip in the pad, and condensing them down to a more manageable handful of signals for the JAMMA board to pass to the PIUIO. These boards are not needed for a barebones, DIY setup, and are only used for the game to be able to poll and address each individual sensor and light in the pads.

Earlier revisions of these boards feature a large socketed FPGA chip, while later revisions use smaller ICs. They are functionally identical, and will work even on the newest LX model pads.

Types of PIU I/O Boards

Pump it Up has used several different proprietary IO boards throughout its lifetime. This guide will be focusing primarily on modern IO boards, as very few people are looking for information on older boards due to incompatibility with modern setups. I also don't really know anything about IO boards older than the MK6IO. I'll update this page as I learn more.

The most commonly discussed boards, both official and unofficial, are as follows. Click on any to jump to its section for more information.

Official IO Boards

The following section will cover official IO boards used in Pump it Up cabinets manufactured by Andamiro.

LXIO

AKA: MK10IO, ATXMega PIUIO, Nuvoton PIUIO
Compatibility: PRIME 2 - Phoenix


The "LXIO" board was released around late 2016/early 2017 with the LX model cabinet, which was made available alongside Pump it Up: PRIME 2. It is a completely new piece of hardware compared to the PIUIO, featuring built-in support for the front panel button board, as well as faster polling rates (up to ~1000Hz). Unlike the PIUIO, the LXIO operates as a standard USB HID device, and doesn't suffer from the USB 1.0 control transfer shenanigans that the PIUIO does. This means that it is not backwards compatible with games that only support the PIUIO. The only games that officially support it are Pump it Up: PRIME 2 and onwards. Older games can only be played via LXIO through unofficial, third party means.

There are a few hardware revisions of the LXIO, too. Boards produced from release until roughly mid-late 2024 were based on Atmel ATXMega microcontrollers, and were officially referred to as "ATXMega PIUIO" boards. There were slightly different hardware revisions for boards included in LX cabinets, versus boards that were available as upgrade kits for older cabinets; I'll update this section to clarify once I have more information. Later boards produced towards the end of 2024 and onward are based on a Nuvoton ARM microcontroller. I'm not sure which specifically, but they're functionally identical to the ATXMega boards, just with a slightly different firmware. If I had to guess, this was probably done for cost reasons.

Andamiro has also released several firmware updates for the LXIO. There isn't a lot of documentation on what changed, but the USB PID seems to be different for each. The only thing I've seen this actually have an effect on is whether or not the board works for third-party IO hooks, used to make older titles LXIO-compatible; some drivers and hooks expect a specific PID/VID, and hadn't been tested on all firmwares. It doesn't seem to make any perceptible difference to anyone who's just playing the game.

PIUIO

AKA: MK6IO, MK9IO
Compatibility: Exceed 2 - Phoenix



Two hardware revisions of the PIUIO. | Photo credit: @spaghettisnail

The PIUIO is by far the most common and widely supported IO board. It was released with the MK6 PC hardware used in Pump it Up: Exceed 2 and has been supported by every game since. It does not include built-in support button board hardware, and has a very limited polling speed, maxing out at around 250Hz but averaging considerably lower. However, using third party drivers (eg. piuio2key or piuio2vjoy) to run the device in USB 2.0 mode for use with simulators can achieve upwards of 1000Hz polling rates. This is not possible on official software.

The PIUIO is often looked down on as inferior hardware due to its slow polling, but it's powered by the Cypress EZ-USB FX2 microcontroller, which is quite capable. The actual reason behind the polling rate issues stems from a decision Andamiro made when writing the PIUIO's firmware. Data is moved back and forth between the game and the PIUIO using control transfer requests, which are designed to set up or tear down a device connection, not move polling data around. However, with USB 1.0, control transfers have a guaranteed round trip time, meaning the same length of time will always pass between sending the data and receiving it back. This guarantees a stable and consistent polling speed with no jitter, but with the tradeoff of it being really slow.

If Anadmiro made the decision to run the PIUIO at USB 2.0 speeds, it would be considerably faster, at 250us per round trip instead of 10ms. However, they claim to have run into reliability issues at those speeds, so the device was forced down to USB 1.0 speeds by official games.

Button Board IO

AKA: "the buttonboard"
Compatibility: Pro - Phoenix

The button board IO was released as part of an upgrade kit for Pump it Up: PRO, initially for FX and GX model cabinets, alongside an actual button board plate. Once installed, players would be able to navigate menus using four buttons on the front of the cabinet instead of the dance pads. Supported inputs were left, right, select, and options. The button board was required by Pro and Pro 2, which only allowed menu inputs through the front buttons, similar to In the Groove. CX and TX cabinet models include built-in button boards, with no need for a separate upgrade kit. The hardware is identical internally, if I'm not mistaken. The button board on LX model cabinets is not the same hardware; instead, the LXIO added support for front panel buttons with no additional IO board.

The button board IO has a different USB PID than the PIUIO, but it functions otherwise identically, running in USB 1.0 mode and using control transfer requests for polling data. It cannot be used for hitting arrows, though. Only menu navigation.


DIY Options

Due to the prohibitive cost of official hardware for anyone that isn't an arcade owner and operator with money to burn on upgrades, the community has created several low-cost DIY solutions for playing official PIU software at home! These options range from free, to ~$5, to ~$100 depending on the hardware, overall quality, and the extent of DIY stuff you're willing to do. The most commonly referenced projects can be found in this section.

BrokeIO

Compatibility: Yes

BrokeIO is a custom IO board developed by Bedrock as a drop-in replacement for the PIUIO, sharing a similar form factor and layout. It's based on the Raspbbery Pi RP2040 microcontroller, and supports essentially all cabinet hardware (including lights!) without any extra setup. By holding down the service button behind the coin door for 2 seconds, the IO board goes into a configuration mode, where it can be toggled between PIUIO, LXIO, keyboard, gamepad, XInput, and Nintendo Switch modes.

This is easily the best and most versatile IO replacement that currently exists, and given how easy it is to install, it's hard to beat. It works with any game that supports the PIUIO, it can be used in LXIO mode for faster polling rates on PRIME 2 and later, and you can use it natively on simulators via gamepad and keybnoard modes. You can also play Mario Kart 8 Deluxe on your dance pads with it! Or any other Nintendo Switch game!

These boards are currently made to order If you share any mutual Discord servers with Bedrock, I recommend reaching out to him directly. I will update this page with more information over time regarding availability!

The firmware is open source, and you can find it here.

piuio-pico

AKA: the PicoFX firmware
Compatibility: Exceed 2 - Phoenix

piuio-pico was developed for a hand controller I designed called the PicoFX. All you need to be able to use it is a $4 Raspberry Pi Pico microcontroller (specifically the RP2040-based Pico 1, not the RP2350-based Pico 2), and a willingness to learn some DIY electronics stuff if you don't already have the knowledge or experience. The codebase currently only supports full-panel inputs with no multiplexing, meaning that the game will see all 4 sensors light up at the same time. Be advised: this may potentially be detected as cheating if used on currently supported and online games! It also supports lights for each panel, and WS2812B-compatible ARGB LEDs for cabinet lights. There is an experimental branch for button board functionality, which has been tested and works with official games, but may be changed in the future.

Just because this code was written for a specific use case doesn't mean you can't wire it up to your own hardware, though! piuio-pico has been used for everything from custom hand controllers to full dance pads. For 12V LEDs, you will need to bring your own hardware in the form of some MOSFETs, and be willing to modify the code for cabinet lights if you want to use anything more than a strip of 6 WS2812B-compatible LEDs. But for a basic setup, if all you need is buttons, it can do that no problem! You can even buy a Pico with headers or screw terminals preattached if you can't/don't want to solder.

For power users and/or those who are willing to order a custom PCB, my PicoIO board breaks out all of the inputs to JST XH connectors. The connectors for each button have pins for 5V-12V LEDs via built-in MOSFETs; you just need to provide an external power supply appropriate for the LEDs. WS2812B data and power pins are also exposed, alongside some extra IO that aren't used by the firmware, in case you want to play around with addons.

piuio-pico's codebase is open source, and you can find it here.

piuio_clone

Compatibility: Exceed 2 - Phoenix

piuio_clone is a PIUIO emulation firmware for the ATMega328 (or, more commonly, the Arduino Uno) developed by racerxdl. This was the only real option back when I first threw together a PIUIO clone for Fiesta 2 back in 2016 or so when I was just getting into PIU at home! There are some easy to follow schematics available in the "simple" branch to get you up and running, though keep in mind the "simple" branch does not support lights. All you need is an Arduino Uno (or compatible clone), a USB cable you can cut apart, and a way to wire up your desired buttons.

The main branch of the software supports all cabinet buttons and lights, but is configured for OpenITG and StepMania. I personally haven't used this branch, and I can't speak for how difficulty it is to set it up and get everything wired. For anyone that just wants to make a pad work, it's recommended that you use the "simple" branch.

Power users, or those willing to learn how to make an AVR work without a whole development board, can build a very simple and straightforward circuit with a bare ATMega328, clock, and necessary passive components to make a barebones dedicated PIUIO clone on nothing but a breadboard or piece of perfboard. I wouldn't recommend this for first time use unless you know what you're doing, but it's what I eventually swapped over to, and it served me well for many years!

The main drawback for this project is that it uses bitbanged USB on a microcontroller that's already not very fast, so polling rates are going to be rather slow even if you use a custom driver like piuio2key. I would recommend using piuio-pico unless you just so happen to have a spare Arduino Uno or some ATMega328s laying around.

You can find the main repository for piuio_clone here.

PIUIO_Arduino

Compatibility: Exceed 2 - Phoenix

PIUIO_Arduino is another PIUIO clone firmware for the Arduino, but instead of supporting any ATMega328 chip with a USB cable soldered on, it uses the built-in USB port. This is possible because instead of the PIUIO code running on the ATMega328 itself, the firmware is instead flashed to the ATMega8u2/16u2, which is normally used as a "bridge" to program the ATMega328 over USB, which it doesn't natively support on its own. It also supports lighting, through the use of shift regisers.

There are a couple downsides to this particular project that only really make it a feasible choice for anyone who might already have the right hardware laying around. You MUST have an Arduino that has an ATMega16u2 or 32u4. Most Arduino clones forgo this in favour of a cheaper non-programmable serial chip, and the Arduino Uno R4 uses a completely different MCU. The most common piece of compatible hardware that most people are likely to have on hand would be an official Uno R3.

Because the hardware required is so specific, alongside the extra steps required to put the ATMega8u2/16u2 in DFU mode for reprogramming, I would recommend going with piuio-pico if you don't already have the right hardware on hand.

You can find the main repository for piuio_clone here.

You can find a fork by 48productions, with some extra documentation and a wiring diagram (in the "ArduinoPIUAux_Lights" directory) here.