arcade
OverviewRecentMaimaiChunithmSdvxSongsWiki
OverviewRecentSongsWiki
  1. Wiki
  2. Hardware
  3. IO protocols & cab internals

Hardware

IO protocols & cab internals

2 min read

back to index · see also controllers

what the cabs actually say over the wire. mostly so my home controllers can talk the same language, partly because i can't look at a serial port without wanting to sniff it.

scope note: this is about understanding the input hardware so i can build controllers that feel right. nothing here is about bypassing anything on real cabs. don't touch operators' machines, ever.


general#

  • sega cabs (maimai, chuni) run on ALLS PCs (windows-based) with separate IO boards talking over serial/USB
  • konami cabs (sdvx) run on konami PCs with their own IO boards
  • community documentation for many of these boards lives on sega.bsnk.me and similar sites. it's the reference for anything below marked with a source

maimai touch panel#

pre-DX panel (the one documented on sega.bsnk.me):

  • serial on COM3, 9600 baud, 8 data bits
  • text-based protocol, no null bytes
  • game → board packets in braces: {like this}
  • board → game packets in parens: (like this)

commands:

command what it does
{HALT} stop streaming touch state
{STAT} start streaming touch state
{??th} read threshold for a sensor
{??k?} set threshold for a sensor

in active mode, the board streams packed bitfields with the A1–8, B1–8 and C sensor states for each player, a few bits per byte so everything stays printable.

DX panel: more zones (34: adds D1–8 and E1–8 and splits C), different board. my washer firmware emulates a DX-style zone report. (verify the DX packet layout before trusting my notes, i reverse-engineered it from my own emulator setup and community docs)

lessons for controller builders#

  • the game expects a steady stream, not change-only events. stop sending and it thinks your hand is frozen
  • thresholds are set by the game at boot. your firmware should accept them even if you ignore them

CHUNITHM slider#

  • the slider board reports 32 touch values (16 cells × top/bottom), each a raw pressure/capacitance value 0–255
  • the game also sends LED data back to the board for the 31 lighting segments
  • air sensors are a separate IO board (beams reported as a bitmask)
  • protocol is a framed binary serial format with a sync byte, command, length, payload, checksum (verify framing)

lessons#

  • send raw values, not booleans. the game applies its own thresholding and it feels wrong if you pre-threshold
  • the LED data is how you get cab-accurate lighting for free. use it

SDVX#

  • buttons and knobs go through konami's IO board. knobs report as relative encoder deltas
  • most home controllers present as a USB HID gamepad/keyboard + mouse for knobs and let the PC side handle it
  • knob sensitivity is entirely about how many encoder counts map to a laser width. this is why every controller feels different

card readers#

  • aime (sega): NFC reader, reads FeliCa and MIFARE-based aime cards. lights up in colours on the cab
  • e-amusement pass (konami): FeliCa-based cards, also readable by the same kind of NFC hardware
  • phones with FeliCa (japanese ones mostly) can act as cards via app in some regions

my sniffing setup#

  • a cheap USB logic analyzer + saleae-compatible software for UART work on my own boards
  • a USB-serial adapter in passthrough mode to watch traffic between my own emulated board and my test PC
  • only my own hardware. never a public cab. i'm a guest at those arcades
Previousmy controllersNext gloves, sleeves & hand care

On this page

  • general
  • maimai touch panel
  • lessons for controller builders
  • CHUNITHM slider
  • lessons
  • SDVX
  • card readers
  • my sniffing setup