PGM converts (IGS PolyGame Master)¶
PGM is a cartridge platform (Neo-Geo-style): a common motherboard + a cartridge per game. Converting/preserving hits the protection: late games carry an IGS027A (ARM7 with an "execute-only" internal ROM) that takes part in the game. Once the protection is dumped and patched, the PGM can run unencrypted code on an ARM-less cartridge.
| Field | Value |
|---|---|
| Platform | IGS PGM (PolyGame Master, 1997) |
| Convert type | cartridge EPROM reprogram + protection bypass |
| Difficulty | 🟠 (EPROM) → 🔴 (games with undumped IGS027A) |
| Suicide? | no classic "battery suicide", but the ARM protection = same practical effect |
The motherboard (common)¶
| Block | Chip | Notes |
|---|---|---|
| CPU | 68000 @ 20 MHz | |
| Sound | Z80 @ 8.4 MHz + ICS2115 (WaveFront) | samples |
| Video | IGS023 | 256 sprites zoom/shrink, tilemaps, 15-bit palette |
| Internal | 128 KB BIOS (68000) + 2 MB internal tile ROM |
The motherboard can execute unencrypted code — that's what makes conversions possible once the protection is lifted.
Cartridge anatomy (2 PCBs)¶
| PCB | ROM | Role | Max size |
|---|---|---|---|
| PROG (top) | P | 68000 program (header + vectors + init) | 16 MB |
| T | tiles (32×32 backgrounds, 8×8 text) | 16 MB | |
| protection ASIC(s) | per game | — | |
| CHAR (bottom) | A | sprite colour (5 bits/pixel, 3 px/word) | 64 MB |
| B | sprite masks/visibility | 16 MB | |
| M | ADPCM samples (to the ICS2115) | 16 MB |
The wall: IGS protection¶
Three families, from simplest to toughest:
| Protection | Nature | Conversion impact |
|---|---|---|
| IGS025 (+ IGS022) | early protection ASIC(s) | bypassable, well documented |
| IGS027A | ARM7 with internal ROM (late games) | the ARM takes part in game logic → you need its internal ROM |
| IGS027A "execute-only" | start of the internal ROM executable but unreadable | partial dump for a long time; XingXing found how to fully dump it |
The ARM dump problem
Many IGS027A have their internal ROM protected as "execute-only": the code runs but can't be read as data. Trojans (injected code that spits out the content) gave partial dumps from the early 2010s; XingXing then found a full dump method — hence the recent preservation of many titles in MAME.
Converting / de-protecting (the principle)¶
- Get a "de-protected" program: a patched P where all ARM accesses are neutralised (the routines that called the IGS027A are replaced by native 68000 code, based on the internal-ROM dump).
- Burn this unencrypted program to a 27C160 (2 MB) or 27C322 (4 MB) EPROM.
- Fit it on an ARM-less cartridge (a simple donor board).
- The PGM motherboard runs the native code → no more ASIC needed.
→ A PGM multi without ARM is possible, but each game needs its hacked P to bypass the ARM (a per-title patch). That's the whole difficulty.
De-protection files: NOT in MAME → preserve them separately
The artifacts that make a de-protected repro cartridge possible — the
patched P (ARM-less program) and the donor board's GAL/PAL logic
(address decoding .jed) — are not part of the MAME romsets (MAME keeps the
original protected game + the IGS027A internal-ROM dump, not the repro
files). They are community artifacts (de-protection releases, e.g.
Arcade-Projects). We don't host them (protected content), but their existence
and source must be known: exactly the kind of files that disappear — archive
them yourself with your own dumps. See also the
general DIP/files rule.
Donor boards & EPROM¶
- PROG: gather P (68000) + T (tiles).
- CHAR: A (sprite colour, the biggest), B (masks), M (sound).
- Common EPROMs: 27C160 (2 MB) / 27C322 (4 MB) for P/T; A/B/M follow the game's sizes (often the original mask ROMs are reused if you only change the program).
Change only what must change
On some conversions, only P (+ ARM bypass) and possibly T change; the big A/B/M can sometimes be kept if the target game shares assets — but in general a real conversion = all the target game's ROMs.
Preservation (the main stake)¶
PGM is a textbook preservation case: without dumping the IGS027A internal ROMs, some games would remain unplayable in emulation and unconvertible. The dumps (trojan → XingXing) feed MAME and the FPGA (MiSTer) cores, and enable the de-protected cartridges.
Before / after¶
- Game with dumped IGS027A + patched P: the cartridge runs ARM-less, in native code → conversion/multi possible.
- Not-yet-dumped game: a clean conversion is impossible until the internal ROM is extracted.
Where to read more¶
- MAME — driver
igs/pgm.cpp+pgmprot_igs027a_type1.cpp(protection types) — https://github.com/mamedev/mame/blob/master/src/mame/igs/pgm.cpp - PGMTech (cartridge/ROM technical description) — https://github.com/laoo/PGMTech
- MiSTer IGS PGM core — https://github.com/MiSTer-devel/Arcade-IGSPGM_MiSTer
- Community conversions / de-protection: Arcade-Projects — https://www.arcade-projects.com/
Technical doc archived here
PGM hardware reverse-engineering (68000/Z80 memory map, cartridge pinout, P/T/A/B/M
ROMs, protection ASICs): PGMTech.tar.gz ·
README — upstream: https://github.com/laoo/PGMTech.
We host no ROMs or de-protection files.
Sources & attribution¶
- PGMTech (laoo) — PROG/CHAR cartridge structure, P/T/A/B/M ROMs — https://github.com/laoo/PGMTech
- MAME — PGM drivers / IGS027A protection (types 1/2/3, LPC), XingXing dumps — https://github.com/mamedev/mame
- Internal page: PGM
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.