Skip to content

CPS-1 converts

On CPS-1, conversion is more accessible than CPS-2 (no program encryption), but it all hinges on one custom: the CPS-B-21, which holds the per-game graphics configuration (144 registers, battery-backed on the affected boards). Converting = right ROMs + right CPS-B-21 config.

Field Value
Platform Capcom CPS-1 (+ CPS-1.5 / Dash)
Type EPROM reprogram + CPS-B-21 configuration
Difficulty 🟡 (EPROM + custom config / possible C-board mod)
Suicide? No on standard CPS-1; yes on Dash/Kabuki (encrypted sound Z80)

The architecture

Board Role
A-board common: 68000, Z80, JAMMA, sound
B-board game program + graphics ROMs
C-board carries the CPS-B-21 custom (and the battery on affected revisions)

Changing game = reprogram the B-board ROMs and match the CPS-B-21 config (on the C-board).

The heart of it: the CPS-B-21

The CPS-B-21 handles layer priorities, palettes, starfield, sprite parameters via 144 registers (serially transferred). Two worlds:

C-board type CPS-B-21 config Consequence
90631C-5 (battery-backed) programmed in internal memory backed by a battery battery loss = config lost = dead game
92631C-6 (battery-less) hardwired default logic "battery-less" games don't use custom registers

→ To convert to a game that requires a custom config, you need either a correctly programmed battery-backed C-board, or to reprogram the CPS-B-21, or a replacement tool (see OpenKey below).

The modern solution: OpenKey-CPS1 (jwestfall69)

An open-source PCB that sits between the B-board and the C-board and reprograms the CPS-B-21 on the fly — replaces the battery and lets you pick the game without swapping the chip.

  • Game selection via a 5-position switch (or solder jumpers to fix it).
  • Each binary combination = a game / a B-XX variant. Real examples:
Code (5 bits) Game / config
00000 Captain Commando
00010 Knights of the Round
00111 Cadillacs & Dinosaurs
01100 B-01 chip variant

Full OpenKey codes table per game / B-XX

C-board mod if the board was 'locked'

Some C-boards were modified to prevent reprogramming the CPS-B-21 (pins 45/46 tied to +5 V). To restore the programmable state: remove the 45/46→+5 V wire and bridge pins 45, 46 and 47 (GND) with a solder blob. On a typical battery-less conversion, you cut the ground trace to CPS-B-21 pins 42 and 44 and fit two 1 kΩ SMD resistors (R1/R2) — pins 45/46 already pulled high. (Hardware: ATtiny404 MCU, 2×20 connectors.)

The ROMs

  • CPS-1 uses standard EPROMs for program, graphics and sound — reprogram to the target game's sizes, respecting the socket pinout (adapters if needed).
  • Starting from a donor B-board with compatible sizes simplifies the job.

Program EPROM (B-board), game by game

The 68000 program lives on the B-board (with the CPS-B-21 and PALs). Classic EPROM 27C010 (128 KB), up to 8 positions; late / CPS-1.5 games move to 27C040 / 27C4096 (512 KB). The BPRG1 PAL on later B-boards enables the enlarged program ROM space. 16-bit program (68000) → loaded even/odd (words). (Board architecture & faults: CPS-1 PCB. Source: MAME capcom/cps1.cpp.)

Mapping: 128 KB → 27C010 · 512 KB → 27C040 (or 27C4096, 16-bit mask pinout on the original B-board).

Game Program EPROM
Ghouls'n Ghosts 27C010 + 1× 27C040
Strider 27C010 + 1× 27C040
Final Fight 27C010 + 1× 27C040
Magic Sword 27C010 + 1× 27C040
Carrier Air Wing 27C010 + 1× 27C040
Mercs 27C010 + 1× 27C040
1941 27C010 + 1× 27C040
Mega Twins 27C010 + 1× 27C040
Street Fighter II 27C010
Three Wonders 27C010
The King of Dragons 27C010
Varth 27C010
Captain Commando 27C040 + 2× 27C010
Knights of the Round 27C040
Warriors of Fate 27C040
SF2: Champion Edition 27C040
SF2: Hyper Fighting 27C040
Cadillacs & Dinosaurs 27C040
The Punisher 27C010 + 1× 27C040
Saturday Night Slam Masters 27C040 + 4× 27C010

What this tells you

To reburn a blown program or convert: identify the density per position (check the B-board silkscreen). The Q-Sound / CPS-1.5 games (Dinosaurs, Punisher, Slam Masters, Warriors of Fate) also carry the Kabuki layer — see below.

Dash / CPS-1.5 (Kabuki) case

Dash games (Cadillacs & Dinosaurs, Punisher, Slam Masters, Warriors of Fate…) have an encrypted "Kabuki" sound Z80 with a battery-backed keysuicide. For those:

  • Phoenix ROM (decrypted) = frees you from the battery, or
  • re-key / battery replacement.

See CPS-1.

Procedure (summary)

  1. Identify the donor B-board and the C-board (battery-backed vs battery-less).
  2. Program the EPROMs for the target game (your dumps), at the right sizes/pinout.
  3. Configure the CPS-B-21: correctly programmed C-board, or OpenKey set to the game code, or reprogramming.
  4. (Dash/Kabuki) handle the sound key (phoenix / re-key).
  5. Test colours, layer priorities, sprites, sound.

Settings (DIP)

CPS-1 is configured via three DIP banks on the A-board (physical config, not soft-dip):

Bank General function
DIPSW A coinage
DIPSW B difficulty, bonus/extend
DIPSW C lives, demo sound, flip screen, free play, test/service

After conversion, set per the target game (positions don't mean the same from one game to another) — cf. general DIP convention. Safe start: all OFF, enable test (DIPSW C) to check I/O and screen, then adjust.

Before / after

A common game's B-board becomes the target game (image + sound). If priorities/ colours are wrong → the CPS-B-21 config doesn't match (wrong code / wrong C-board).

Alternative: the multi

The CPS-1 multi (Darksoft) puts all CPS-1 games on one SD B-board and handles the config — see the multi page.

Tools archived with us

Open-source source archived in the repo (repos disappear): openkey-cps1.tar.gz (firmware + KiCad PCB design) · README.

Where to buy / read more

Sources & attribution

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.