miminya.me ~ ez2-io

Projects › ez2-io

ez2-io

EZ2DJ / EZ2AC arcade I/O board documentation, and a USB HID replacement for the PC-side ISA card

Written inC++
LicenseMIT
Last updated15 Aug 2026

Documentation of the arcade I/O board used by EZ2DJ / EZ2AC cabinets, and a USB replacement for the PC-side ISA interface card.

The original system is a two-part design: an I/O board mounted in the cabinet that connects to the buttons, lamps, turntable encoders and coin mechanism, and an ISA card in the host PC. The two are linked by a DB25 cable carrying an 8-bit data bus and an address bus. The game reaches the board through x86 port I/O at base address 0x100.

This repository documents that link and replaces the ISA card with an ATmega32U4 board presenting a USB HID gamepad and lamp output device. The I/O board, cabinet harness, lamps, encoders and on-board MCU are unmodified.

Personal sidestory

I (Roganis) started this project in July to resolve the framepacing issues of my cab which ran Time Traveler. Getting this game on a modern config meant redoing the IO part among other things was mandatory. Claude Code goes pretty far in many projects I've done recently so I wanted to see if we could go through such a big endeavour even though I'm nowhere technically skilled for this.

The credited people who reversed lots of things EZ2 related are honestly the biggest share of what makes this work. I've battle tested this IO project in an arcade for the past few weeks and it's indistinguishable from actual IO so it's time to release the code.

I will try to do a full-on PCB replacement to have both IO and ISA boards on one PCB with all IO harnesses for a drop-in but that's a big byte I'm not yet ready to take. Having some fun with the game, releasing this and playing the summer away. Enjoy!

Contents

Path Description
docs/bus-protocol.md DB25 pinout, read/write cycles, host port map
docs/board-architecture.md Board block diagram and component roles
docs/connector-pinout.md Cabinet-side connector pinouts
docs/original-firmware.md AT89C51 firmware disassembly notes; ISA card PAL
docs/arduino-bridge.md Build, wiring, bring-up and 2EZConfig binding
docs/replacement-board.md RP2040 design replacing both original boards
firmware/ez2_hid_bridge/ Arduino sketch for the USB bridge
AI-DISCLOSURE.md Which parts of this project are human work and which are AI-assisted

Status

Item State
DB25 bus protocol Measured on hardware; agrees with the IKA Victor schematic and the ISA card PAL
Host port map 0x101–0x104, 0x106 Measured; matches prior community documentation
Port 0x105 Identified during this work; see the open question below
Cabinet connector pinout Transcribed from the IKA Victor schematic; not fully re-verified by continuity
Arduino USB bridge Working on hardware, bound in 2EZConfig V2
RP2040 replacement board Design draft only. No schematic, layout or firmware exists yet

Parts of this repository were produced with AI assistance and parts were measured on real hardware. AI-DISCLOSURE.md records which is which, and lists what has and has not been confirmed on a machine.

Known issues

  • Coin input may drop every second credit. docs/original-firmware.md indicates, from an AI disassembly not yet confirmed on hardware, that the on-board MCU serves an incrementing 8-bit coin counter on port 0x105, not a level or pulse on bit 0. The bridge sketch edge-detects bit 0, which registers one press per two counter increments. The fix is to latch the whole byte and treat any change as a credit. This has not yet been confirmed against hardware and the sketch is unchanged pending that test.
  • Port 0x105 bit 1 was previously recorded as an unexplained "companion bit". The counter interpretation accounts for it, but this is also unconfirmed.
  • The number of 74LS138 decoders on the board is unsettled: the schematic shows two, one measurement session suggested three. This affects documentation only, not the protocol.

Requirements

  • Arduino Micro or Leonardo (ATmega32U4, 5 V, native USB). Boards without native USB — Uno, Nano, Mega — cannot present an HID device.
  • Arduino IDE. The sketch uses no external libraries.

This documentation builds on, and is cross-checked against, several independent sources:

  • DJKero, EZ2-IO — software reversing that established the host port map.
  • masa2310 (Theme of RDM) — cabinet harness and DB25 cable documentation.
  • kasaski / ben-rnd, 2EZConfig and 2EZConfig V2 — game-side port semantics and lamp naming; the binding target for the bridge.
  • IKA Victor Co., Inc. — KiCad schematic recreation of the I/O board (EZ2IO.sch v1.0, 2020-12-25). Not included here; obtain it from its authors. Nets and connector references in these documents follow its naming.

Contributed by this repository: the DB25 wire-level protocol, port 0x105, the firmware disassembly, and the USB bridge.

Binaries not included

Two original binaries are referenced throughout the documentation and are not distributed here, as both are copyrighted material belonging to their original vendors:

  • EZ2IO.bin — AT89C51 firmware, "EZ2DJ PROGRAM V 1.1", 1999. Read it from the MCU on your own board, or use it to reflash a board with a dead MCU.
  • EZ2CARD.JED — PAL16V8 fuse map for the ISA card address decoder, ONOFF System, 1998.

docs/original-firmware.md describes the contents of both in enough detail to work with them, and .gitignore is set up to keep them out of commits if you place copies in the working tree.

License

Documentation and the bridge sketch in this repository are offered under the MIT License — see LICENSE. The license covers this repository's own contents only; it does not extend to the referenced third-party schematic or binaries.

This page is synced from README.md in the ez2-io repo.

Updated 18 Oct 2026

9 projects

Display Properties