Converts PGM (IGS PolyGame Master)¶
Le PGM est une plateforme à cartouches (façon Neo-Geo) : une carte-mère commune + une cartouche par jeu. Convertir/préserver bute sur la protection : les jeux récents embarquent un IGS027A (ARM7 avec ROM interne « execute-only ») qui participe au jeu. Une fois la protection dumpée et patchée, le PGM sait faire tourner du code non chiffré sur une cartouche sans ARM.
| Champ | Valeur |
|---|---|
| Plateforme | IGS PGM (PolyGame Master, 1997) |
| Type de convert | reprog EPROM cartouche + contournement de la protection |
| Difficulté | 🟠 (EPROM) → 🔴 (jeux à IGS027A non dumpés) |
| Suicide ? | pas de « suicide à pile » classique, mais protection ARM = même effet pratique |
La carte-mère (commune)¶
| Bloc | Puce | Notes |
|---|---|---|
| CPU | 68000 @ 20 MHz | |
| Son | Z80 @ 8,4 MHz + ICS2115 (WaveFront) | échantillons |
| Vidéo | IGS023 | 256 sprites zoom/shrink, tilemaps, palette 15 bits |
| Interne | 128 Ko BIOS (68000) + 2 Mo ROM tuiles interne |
La carte-mère peut exécuter du code non chiffré — c'est ce qui rend les conversions possibles une fois la protection levée.
Anatomie d'une cartouche (2 PCB)¶
| PCB | ROM | Rôle | Taille max |
|---|---|---|---|
| PROG (dessus) | P | programme 68000 (header + vecteurs + init) | 16 Mo |
| T | tuiles (fonds 32×32, texte 8×8) | 16 Mo | |
| ASIC(s) de protection | selon le jeu | — | |
| CHAR (dessous) | A | couleur des sprites (5 bits/pixel, 3 px/mot) | 64 Mo |
| B | masques/visibilité des sprites | 16 Mo | |
| M | échantillons ADPCM (vers l'ICS2115) | 16 Mo |
Le mur : la protection IGS¶
Trois familles, de la plus simple à la plus coriace :
| Protection | Nature | Impact conversion |
|---|---|---|
| IGS025 (+ IGS022) | ASIC(s) de protection early | contournable, bien documenté |
| IGS027A | ARM7 avec ROM interne (jeux tardifs) | l'ARM participe à la logique de jeu → il faut sa ROM interne |
| IGS027A « execute-only » | début de la ROM interne exécutable mais non lisible | dump partiel longtemps ; XingXing a trouvé comment dumper entièrement |
Le problème du dump ARM
Beaucoup d'IGS027A ont leur ROM interne protégée en « execute-only » : le code s'exécute mais ne se lit pas comme données. Des trojans (code injecté qui fait recracher le contenu) ont permis des dumps partiels dès les années 2010 ; XingXing a ensuite trouvé une méthode de dump complet — d'où la préservation récente de nombreux titres dans MAME.
Convertir / dé-protéger (le principe)¶
- Obtenir un programme « dé-protégé » : une P patchée dont tous les accès à l'ARM sont neutralisés (les routines qui appelaient l'IGS027A sont remplacées par du code natif 68000, à partir du dump de la ROM interne).
- Graver ce programme non chiffré sur une EPROM 27C160 (2 Mo) ou 27C322 (4 Mo).
- Le poser sur une cartouche sans dispositif ARM (carte donneuse simple).
- La carte-mère PGM exécute le code natif → plus besoin de l'ASIC.
→ Un multi PGM sans ARM est possible, mais chaque jeu doit avoir sa P hackée pour contourner l'ARM (patch spécifique par titre). C'est là toute la difficulté.
Fichiers de dé-protection : PAS dans MAME → à préserver à part
Les artefacts qui rendent une cartouche de repro dé-protégée possible — la
P patchée (programme sans ARM) et la logique GAL/PAL de la carte
donneuse (décodage d'adresses .jed) — ne font pas partie des romsets MAME
(MAME conserve le jeu protégé d'origine + le dump de la ROM interne
IGS027A, pas les fichiers de repro). Ce sont des artefacts communautaires
(releases de dé-protection, ex. Arcade-Projects). On ne les héberge pas ici
(contenu protégé), mais leur existence et leur source doivent être connues :
c'est typiquement le genre de fichiers qui disparaît — à archiver de son côté
avec ses propres dumps. Voir aussi la règle générale DIP/fichiers.
Cartes donneuses & EPROM¶
- PROG : réunir P (68000) + T (tuiles).
- CHAR : A (couleur sprites, la plus grosse), B (masques), M (son).
- EPROM courantes : 27C160 (2 Mo) / 27C322 (4 Mo) pour P/T ; les A/B/M suivent les tailles du jeu (souvent mask ROM d'origine réutilisées si on ne change que le programme).
Ne changer que ce qui doit l'être
Sur certaines conversions, seules P (+ contournement ARM) et éventuellement T changent ; les grosses A/B/M peuvent parfois être conservées si le jeu cible partage des assets — mais en général une vraie conversion = toutes les ROM du jeu cible.
Préservation (l'enjeu principal)¶
Le PGM est un cas d'école de préservation : sans dump des ROM internes IGS027A, des jeux resteraient injouables en émulation et inconvertibles. Les dumps (trojan → XingXing) alimentent MAME et les cœurs FPGA (MiSTer), et rendent possibles les cartouches dé-protégées.
Avant / après¶
- Jeu à IGS027A dumpé + P patchée : la cartouche tourne sans ARM, en code natif → conversion/multi possible.
- Jeu non encore dumpé : conversion impossible proprement tant que la ROM interne n'est pas extraite.
Où se documenter¶
- MAME — driver
igs/pgm.cpp+pgmprot_igs027a_type1.cpp(types de protection) — https://github.com/mamedev/mame/blob/master/src/mame/igs/pgm.cpp - PGMTech (description technique cartouche/ROM) — https://github.com/laoo/PGMTech
- Cœur MiSTer IGS PGM — https://github.com/MiSTer-devel/Arcade-IGSPGM_MiSTer
- Conversions communautaires / dé-protection : Arcade-Projects — https://www.arcade-projects.com/
Doc technique archivée chez nous
Reverse-engineering du hardware PGM (memory map 68000/Z80, brochage cartouche,
ROM P/T/A/B/M, ASIC de protection) :
PGMTech.tar.gz ·
README — upstream : https://github.com/laoo/PGMTech.
On n'héberge ni ROM ni fichier de dé-protection.
Sources & attribution¶
- PGMTech (laoo) — structure cartouche PROG/CHAR, ROM P/T/A/B/M — https://github.com/laoo/PGMTech
- MAME — drivers PGM / protection IGS027A (types 1/2/3, LPC), dumps XingXing — https://github.com/mamedev/mame
- Page interne : PGM
Relecture & corrections
À quoi sert cet espace
Une valeur fausse, une procédure dépassée, une référence de puce qui ne colle pas à ta carte ? Signale-le ici, avec ce que tu as constaté (modèle, révision de carte, numéro de série, mesure). Chaque signalement est recoupé avec une source avant toute modification — une correction invérifiable est publiée en tant que « signalé par …, non recoupé » plutôt qu'appliquée en silence.
La lecture est ouverte à tous ; écrire demande une connexion Discord. Les signalements des relecteurs déclarés du wiki sont traités en priorité ; les autres sont lus aussi, mais passent par un humain avant toute modification.