Capcom CP System II (CPS-2)¶
Capcom's arcade system (1993), successor to the CPS-1. A two-board architecture (A-board + B-board) and, above all: program encryption whose keys live in battery-backed SRAM — hence the famous "suicide" when the battery dies, and the whole de-suicide ecosystem.
Identification¶
| Field | Value |
|---|---|
| Manufacturer | Capcom |
| Year | 1993 (last game: Hyper Street Fighter II, 2003) |
| System / family | CPS-2 |
| Connector type | JAMMA (A-board) + extra button harness (kick harness) |
| Players | 2 (mostly fighting games) |
| Screen orientation | Horizontal |
| Resolution / sync | 384×224, 15 kHz |
| Power | +5 V, +12 V, -5 V |
Architecture — two boards¶
The A-board / B-board relationship is that of a console + cartridge:
- A-board (base, common to all games): JAMMA connector, CPU, common hardware, sound. Both players' buttons 4/5/6 go through the 34-pin kick harness (Hirose DF1B) on the A-board edge:
- B-board (the game): game ROMs + decryption-key SRAM, kept alive by a battery. This is what you swap to change game.
| Block | Component |
|---|---|
| Main CPU | Motorola 68000 @ 16 MHz — encrypted program, decrypted by the CPS2 ("DL-1525") custom with a battery-backed SRAM key |
| Sound CPU | Z80 @ 8 MHz |
| Sound | QSound (Lucent DL-1425 DSP, positional stereo sound) |
| Graphics | CPS2 customs (evolution of the CPS-1) — 384×224, more sprites/colours |
Regions & B-board colours¶
The region is coded by the case colour of the B-board + the version text colour. An A-board and a B-board must have compatible colours (blue and green are interchangeable). (Source: Wikipedia.)
| Region | Case colour | Version-text colour |
|---|---|---|
| Japan | Green | White |
| USA | Blue | Red |
| Europe / World | Blue | Blue |
| Asia | Grey | Yellow |
| Hispanic | Orange | Green |
| Brazil | Orange | Magenta |
| Oceania | Blue | Orange |
The "suicide" & de-suicide¶
The most important point of a CPS-2. The program is encrypted; the decryption keys are in volatile memory on the B-board, kept alive by a 3.6 V ½ AA lithium battery (type Saft LS14250, on an axial holder). A capacitor near the battery keeps the keys alive for a few minutes when powered off.
- When the battery dies (then the capacitor drains), the keys are lost → the game no longer boots: that's the "suicide".
Crack timeline¶
| Date | Event |
|---|---|
| Jan 2001 | CPS-2 Shock obtains decrypted data via a hardware hack (XOR tables for emulation) |
| Jan 2007 | Andreas Naive & Nicola Salmoria break the encryption (2 four-round Feistel ciphers, 64-bit keys) → integrated into MAME |
| Apr 2016 | Eduardo Cruz, Artemio Urbina, Ian Court: clean de-suicide, no hardware modification |
Replacing the battery (board still alive)¶
A relatively safe operation if the keys are still there: the capacitor holds the memory for a few minutes while you solder a fresh battery.
- Get a 3.6 V ½ AA battery (Saft LS14250 or equivalent), ideally with solder tabs (don't short it).
- Desolder the old one, quickly solder the new one (mind the polarity).
- Check the game still boots.
Don't dawdle
If the capacitor drains before the new battery is in place → suicide. To be safe, some power the board during the swap or piggyback a backup battery in parallel before removing the old one.
De-suicide — reprogram the security (dead board)¶
The ArcadeHacker method (Eduardo Cruz, 2016): you rewrite the decryption keys into the volatile memory via an Arduino programmer. The board works again with no hardware modification; a fresh battery then keeps the keys. No need for phoenix ROMs if you want to stay original.
Hardware: Arduino Uno + LCD Keypad Shield, a 7-pin header, Dupont cables (F-F and M-M), test clips or a 6-pin JST NH connector, 5 V ≥ 1.5 A power, soldering iron.
Supported revisions & connector:
| B-board revision | Connector |
|---|---|
| 93646B-3, 93646B-4 | CN2 |
| 93646B-5, 93646B-6, 93646B-7 | CN9 |
| 97691A-3, 97691A-4 (single black board) | CN9 |
Power-on order (critical)
Power the game board FIRST, then the Arduino. On shutdown, cut the Arduino first, then the board. A common ground is mandatory, ~5 V stable. CN2 boards have pinout inconsistencies in the docs → check the pins before connecting.
Step-by-step procedure (after ArcadeHacker)¶
Preparation
- Get the
ArcadeHacker_CPS2.inosketch (GitHub repo, see sources) and install the Arduino IDE. - Assemble the programmer: solder a 7-pin header onto the top-right pad of the LCD Keypad Shield, mount the shield on the Uno, connect Dupont cables to pins 2, 3, 11, 12 and GND.
- Upload the sketch to the Arduino (USB).
Board preparation
- Open the B-board (security Torx T20 screwdriver).
- Identify the revision (PCB marking): 93646B-3/4, -5, -6/7, or 97691A-3/4.
- If the battery is flat, fit a fresh 3.6 V ½ AA battery (on a holder preferably).
Wiring — 93646B-3 / 93646B-4 (CN2 connector)
| Arduino | → CN2 | Signal |
|---|---|---|
| pin 2 | A32 | DATA |
| pin 3 | A30 | SETUP1 |
| pin 11 | A31 | CLOCK |
| pin 12 | A29 | SETUP2 |
| GND | C32 | Ground |
Power: +5 V → CN7 A25; GND → CN7 A23 and B23 (external supply, left OFF).
Wiring — 93646B-5/6/7 & 97691A (CN9 connector)
| Arduino | → CN9 | Signal |
|---|---|---|
| pin 2 | pin 2 | DATA |
| pin 3 | pin 3 | SETUP1 |
| pin 11 | pin 4 | CLOCK |
| pin 12 | pin 5 | SETUP2 |
| GND | pin 6 | Ground |
Power: rev -5 via CN7 (like -3/-4); rev -6/-7 via the CN9 power pins.
Programming
- Separate the A-board and the B-board.
- Power the B-board first (external supply), then the Arduino (USB).
- On the LCD screen, navigate (up/down/left/right) and select the game matching the board's ROM set.
- Confirm → the programmer writes the keys into the security.
- Turn off the Arduino first, then the B-board. Disconnect all wires.
Verification
- Reassemble A + B, test. If it fails: recheck the wiring and redo a keyload (take your time).
Alternatives¶
- Phoenix ROMs: a decrypted program that runs without a battery or keys → reflash the B-board's program ROMs. Simple for preservation, but the board is no longer "original".
- InfiniKey-CPS2: a module that holds the keys (long-life battery replacement / suicide-free).
Common faults¶
| Symptom | Likely cause | Lead |
|---|---|---|
| Dead board / won't boot | Flat battery → keys lost (suicide) | Phoenix ROMs, or key reprogramming (de-suicide) |
| No image | A-board (power, custom) | Check power, JAMMA contacts |
| No sound / mono sound | Z80 / QSound / stereo wiring | Sound-stage diagnosis |
| Corrupted graphics | ROMs / B-board contacts | Reseat, connector cleaning |
Recap¶
A CPS-2 logic board has few electrolytic capacitors (mostly the sound stage) — nothing like a CRT or a Mega Drive Model 2. The weak point remains the battery (see suicide), not the caps. In case of degraded sound / a leaking cap: targeted recap of the audio stage. Kits: Console5 (arcade PCB).
Conversions¶
- Changing game = swap the B-board. The A-board stays; the B-board carries the game (ROMs + keys).
- Colour / region compatibility: A-board and B-board must have compatible colours (blue and green interchangeable; see the region table above).
- ROM-level conversion (reflashing a B-board to another game): more advanced, depends on the ROM configuration; often tied to phoenix / multigame. (procedure to detail from a verified source.)
- Phoenix ROMs free you from the battery → easier preservation.
- ⚠️ Do not host ROMs — we describe the method, not the protected content.
→ CPS-2 converts guide (B-board, region, phoenix) · CPS-2 Darksoft multi
(Dedicated conversion page to create: conversions/cps2/…)
Emulation & FPGA¶
- MAME: full emulation since the decrypted XOR tables were published (Naive & Salmoria, 2007).
- FPGA / MiSTer: the jtcps2 core (Jotego) rebuilds CPS-1.5/CPS-2 in hardware logic, handling the decryption keys — one of MiSTer's most complete arcade cores.
EPROM repair¶
68000 program on the B-board in 27C4096 / 27C160 (16-bit) or 27C040. Per-game table + B-board jumpers: CPS-2 converts · per-game jumpers. ⚠ Suicide (battery) → see de-suicide.
→ Methods: PCB fault-finding · Recap · EPROM · Backup batteries (suicide) · Traces & vias
Modernisation & mods¶
The common ground for every JAMMA board
Video, power, control panel and upscalers depend on the cabinet rather than the board: everything is centralised in Modernising a cabinet. To run the board outside a cabinet (at home, on a display): supergun.
- Anti-suicide — the priority mod 🟠: this platform suicides (key/program held by a battery). Replacing the battery without cutting power only postpones the problem; the durable route is de-suiciding → conversions and de-suiciding → save batteries.
- Storage 🟡: the game lives in EPROM/mask ROM on the board. Changing or restoring a game means reprogramming the EPROMs (and, for a mask ROM, using a pinout adapter) → EPROM method.
- Media preservation: replacing the original storage, multicarts, ODEs and modern options by family → PCB preservation hub.
- Scan rate 📺: ~15.62 kHz / 59.6 Hz — standard resolution, a classic 15 kHz chassis is fine — the most common JAMMA case → tri-sync and upscalers.
(Computed from the MAME sources —
capcom/cps1.h (8 MHz / 512)— pixel clock ÷ htotal.) - FPGA / emulation: see the Emulation & FPGA section below.
Photos / assets¶
(To add: A-board, coloured B-board, battery location, connectors.)
Sources & attribution¶
Text:
- Wikipedia — CP System II (architecture, regions, suicide, crack) — CC-BY-SA — https://en.wikipedia.org/wiki/CP_System_II
- ArcadeHacker (Eduardo Cruz) — Capcom CPS2 Security Programming Guide (battery, de-suicide, revisions, hardware) — http://arcadehacker.blogspot.com/2016/09/capcom-cps2-security-programming-guide.html
- ArcadeHacker — de-suicide code repo — https://github.com/ArcadeHacker/ArcadeHacker_CPS2
- Hackaday — Desuiciding Capcom Arcade Boards (2016) — https://hackaday.com/2016/09/15/desuiciding-capcom-arcade-boards/
- RetroRGB — InfiniKey-CPS2 — https://retrorgb.com/infinikey-cps2-prevents-cps-2-arcade-boards-from-suiciding.html
- System16 — Capcom CPS-2 Hardware — © — to reference — https://www.system16.com/hardware.php?id=690
- MAME — decryption implementation (2007)
Review & corrections
How this space is used
Spotted a wrong value, an outdated procedure, a chip reference that does not match your board? Say so here, with what you observed (model, board revision, serial number, measurement). Every report is cross-checked against a source before anything changes — an unverifiable correction is published as “reported by …, not cross-checked” rather than silently applied.
Reading is open to everyone; posting requires signing in with Discord. Reports from the wiki's declared reviewers are handled first; anyone else's are read too, but go through a human before anything is changed.