CPS-2 converts¶
Converting a CPS-2 B-board to another game = reprogram every EPROM, replace the mask ROMs with EPROMs, set ~24 jumpers for the target game, use the right PAL (or a universal PAL + a wire on revisions 3/4), and inject the game's keys (or it stays on a suicide screen). Here is the real procedure.
| Field | Value |
|---|---|
| Platform | Capcom CPS-2 |
| Type | B-board EPROM reprog + jumpers + PAL + keys |
| Difficulty | 🟠 (EPROMs, PAL, jumpers, key handling) |
| Suicide? | Yes — decryption keys in battery-backed SRAM |
Warning
A conversion is done from your own dumps. The decryption and keys are game-specific: without a valid key, the board stays on a suicide screen. Work methodically — one jumper mistake = dead game.
1. Understand the B-board ROM map¶
The B-board has sockets numbered by function:
| Sockets | Contents | EPROM to use |
|---|---|---|
| ROM 1–2 | QSound program (Z80) | 27C010 / 27C1001 (1 Mbit) |
| ROM 3–10 | main program (68000, encrypted) | 27C4096 (4 Mbit) — all games |
| ROM 11–12 | sound samples (QSound) | 27C160 (16 Mbit) / 27C322 (32 Mbit) |
| ROM 13–20 | graphics (original mask ROMs) | 27C400/800 (mask pinout) or 27C160/322 |
Key points:
- The main program is always in 27C4096 (max 4 Mbit) — it cannot be merged. Same for the QSound program (max 1 Mbit).
- The CPS-2 bank-switches between 2 ROMs: you can merge two banks into a single larger EPROM (see the PAL G method below).
- A converted B-board is recognisable by its graphics mask ROMs replaced with EPROMs (windowed packages / with a label).
2. Two strategies¶
A. Universal "G" PAL + 32 Mbit EPROM (the simplest)¶
You merge the banks into a 27C322 (32 Mbit) EPROM and use a universal "G" PAL (burned onto a GAL16V8). Since the 32 Mbit mask ROMs have the same pinout as the EPROMs, there's no more pinout headache.
File size → density → EPROM to use table:
| File | Density | EPROM (EPROM pinout) | EPROM (mask pinout) |
|---|---|---|---|
| 128 KB | 1 Mbit | 27C010 / 27C1001 | — |
| 256 KB | 2 Mbit | 27C020 / 27C2001 | — |
| 512 KB | 4 Mbit | 27C040 / 27C4096 | 27C400 |
| 1 MB | 8 Mbit | 27C080 / 27C801 | 27C800 |
| 2 MB | 16 Mbit | 27C160 | 27C160 (same pinout) |
| 4 MB | 32 Mbit | 27C322 | 27C322 (same pinout) |
Main program = always 27C4096 (4 Mbit). QSound program = 27C010/27C1001 (1 Mbit). For graphics/sound, pick the model by the pinout the socket expects (EPROM vs mask column above).
Example — D&D: Tower of Doom:
- Sound ROM 11 (2 MB) + ROM 12 (2 MB) → merged into a 32 Mbit in socket 11 (socket 12 left empty).
- Graphics: ROM 13 (2 MB) + ROM 14 (1 MB) are bank-switched together → you must first double ROM 14 (ROM14+ROM14), then merge ROM13 + the doubled ROM14 → one 32 Mbit mask ROM in socket 13. (13/14 go together, 15/16 together, etc. — not 14+15.)
Rev 3/4 + PAL G: the mandatory wire
With a PAL G on a revision 3 or 4 B-board, you must add a jumper wire (otherwise broken sound). This is the classic omission.
B. Original PAL + exact-size EPROMs¶
You keep the target game's original PAL (to burn) and fit the EPROMs at their exact sizes. You then must respect the mask ROM vs EPROM pinout:
- 4/8 Mbit exist in mask pinout (27C400 / 27C800) or EPROM pinout (27C040 / 27C080 / 27C801) — don't confuse them, the pinout jumper must match.
3. Setting the jumpers (the critical point)¶
There are ~24 jumpers: they tell the board, for each socket, the size and pinout of the expected ROM.
- Sockets 1–10 (program + QSound): the only possible jumpers set the JEDEC / non-JEDEC pinout (EPROM type), not the size.
- Graphics/sound sockets: the jumpers encode the density and the mask vs EPROM pinout.
Jumper logic table (transcribed)¶
A jumper is noted C (Closed, bridged) or O (Open). The jumpers are grouped per socket; they change two things: the function of the high address pins (hence the size) and the pinout (mask vs EPROM, JEDEC vs non-JEDEC).
| Jumper group | Sockets involved | What they set |
|---|---|---|
| JP1–JP9 | 1–2 (QSound Z80 program) | EPROM type: 27C1000 (non-JEDEC) vs 27C1001/27C010 (JEDEC) |
| pinout jumpers | 3–10 (main program) | only JEDEC / non-JEDEC (size fixed = 4 Mbit, 27C4096) |
| density + pinout jumpers | 11–12 (sound) | density (16/32 Mbit) + mask vs EPROM |
| density + pinout jumpers | 13–20 (graphics) | density (4/8/16/32 Mbit) + mask (27C400/800) vs EPROM (27C040/080/801) |
Concrete case, sockets 1–2 (QSound): the function of pins 2 and 26 is A16 or GND. For a 27C1001 / 27C010 (JEDEC): A16 → pin 2, GND → pin 26, which gives the C-O-O-C pattern on JP1,2,3,4 and JP5,6,8,9. For a 27C1000 (non-JEDEC), invert this pattern.
Size rule (high address pin = last active line):
| EPROM | Density | High address pin |
|---|---|---|
| 27C010/1001 | 1 Mbit | A16 |
| 27C4096 | 4 Mbit | A18 |
| 27C160 | 16 Mbit | A19 |
| 27C322 | 32 Mbit | A20 |
→ The bigger the EPROM, the more address lines to enable (jumper on the "address" side rather than "GND") on the corresponding socket.
Per-game table traps
- The settings assume 27C1001 (1 Mbit) in sockets 1–2 → invert for 27C1000.
-
Some online tables are wrong: the jumper order is sometimes inverted relative to the mask ROM banks. Cross-check.
-
Don't confuse mask pinout (27C400/800) and EPROM pinout (27C040/080/801) at the same density → the pinout jumper must match the fitted EPROM.
-
With the PAL G + 27C322 method (see §2A), the mask/EPROM pinout is no longer an issue (same pinout).
Exact per-game values: see the full per-game jumper table — hard-transcribed from jumper_data_settings.xls (a reference file recovered and archived in the repo, the original source being dead).
Example: Street Fighter Alpha → Super Street Fighter II¶
A typical real conversion. You need to gather: the correct EPROMs, the daughterboard (if the target game has one), the right PAL in PAL3, then set the jumpers for SSF2's ROM sizes, and finally flash/inject SSF2's keys (see §4). Without the right EPROM + PAL3 + jumpers + keys combination, the board stays on a suicide screen or shows glitches (see §6).
4. The keys / suicide¶
The main program is encrypted; the CPS-2 custom decrypts it with the game's key. After a conversion you must supply the target game's key:
- Flash the keys into the B-board's SRAM, or
- install an InfiniKey-CPS2 (replaces battery + keys, no more suicide).
- If the board previously ran on another key (battery/InfiniKey), short EXC5 to purge the old key.
See also de-suicide/phoenix on CPS-2.
5. Verification checklist¶
- EPROMs the right way round and in the right socket
- Right PAL in PAL3 (or PAL G)
- Jumper wire fitted if PAL G on rev 3/4
- Jumpers set + continuity/open checked with a multimeter
- Keys flashed / InfiniKey configured for the new game
6. Troubleshooting by screen colour¶
| Screen | Cause | Fix |
|---|---|---|
| Solid colour | suicide screen | flash keys / InfiniKey; short EXC5 if the old game used battery/InfiniKey |
| White | main program not read | check program ROMs, reseat B-board |
| Grey / dark blue | invalid keys | reflash the correct game keys |
| Jailbars / missing sprites | contacts / graphics ROMs | reseat, recheck ROM 13–20 |
| Broken sound | PAL G without the wire on rev 3/4 | fit the jumper wire |
Required hardware¶
- An EPROM programmer handling up to 32 Mbit (TL866II+ is limited to 16 Mbit natively → adapters for 27C322; otherwise a high-end programmer).
- GAL16V8 (to burn the PAL G or the game's PAL).
- EPROMs: 27C010/1001, 27C4096, 27C400/800, 27C160, 27C322.
- Soldering iron, braid, knife (to cut/restore the jumpers).
Alternative: the multi¶
To "have everything" without reprogramming, the CPS-2 multi (Darksoft) replaces the B-board with an SD kit — see the multi page for installation.
Tool archived here
Source of ArcadeHacker_CPS2.tar.gz
(Arduino sketch for CPS-2 de-suicide/re-key) · README.
(The PDF guide is not archived — its content is transcribed above.)
Sources & attribution¶
- Arcade-Projects — The Definitive Guide to CPS2 Conversions (xodaraP) — https://www.arcade-projects.com/threads/the-definitive-guide-to-cps2-conversions.10778/
- Jumper table jumper_data_settings.xls — http://petes-emulation.com/ftp/acm/docs/jumper_data_settings.xls
- Arcade Otaku Wiki — CPS2 — https://wiki.arcadeotaku.com/w/CPS2
- Internal page: CPS-2
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.