Mike McBike @ Home / Arcade Reps Teil 4 / Sega System C-2 Conversion |
|
{Sega System C-2 Conversion} Manchmal möchte man Dinge Tun, einfach, weil man sie kann. Wenn das Können dann nicht reicht, muss man warten, bis schlauere Leute einem den Weg bereiten. So geschehen beim berüchtigten Sega C-2-System, welches eine trickreiche Copy-Protection in Form eines programmierbaren Logikbausteines enthält. Man kaufe billiges Tetris-Spiel (Puyo Puyo): Japanbunt und putzig: {Technisches} Diese PCB aus der Sega System C2 Serie nervt nicht durch irgendwelche Suicide-Attitüden, dafür durch eine fiese Copy Protection, die einen auf der PCB verbauten Baustein vom Typ Altera EPM5032 abfragt. Genau nach dem Prinzip, wie es auch mit Dongles im PC-Software-Bereich geschieht. Hier ist alles drauf: Der EPM5032 - quasi ein registered GAL mit CPLD Anwandlungen... {Conversion}Man kann sich jetzt die Mühe machen, den Baustein zu verstehen oder aber man entfernt alle Abfragen aus dem Programm Code und erzeugt dafür eine gepatchte ROM-Version. Letzteres haben schlaue Leute in den Weiten des Internet gemacht und freundlicherweise veröffentlicht. Man ignoriert also den EPM und tauscht die EPROMs aus. Dabei darf man nicht vergessen auch die Jumper richtig zu setzen, die die entsprechenden unterschiedlichen EPROM-Größen einstellen: Ist ja klar, dass gerade auf meinem Board einer der Jumper total beschädigt war... Pin abgebrochen... Mir doch egal: Statt der 27C1000 stecken nun für den Shooter 27C020 drin. Das Ergebnis: Die ROM Images für Puyo Puyo 2 gibt es hier: {Reverse Engineering} Wer mich kennt, weiss, dass ich mich nicht mit einfachen Nachbauten zufrieden gebe, ich will verstehen, was da gemacht wurde! Also CSI Filderstadt... am Beispiel Thunder Force AC habe ich mal die Copy Protection Umgehung analysiert. IC31 und IC32 sind 68000er Programm Code (war ja eh klar...) Fazit: die funktionierende von der nicht funktionierenden Software unterscheidet sich in genau einem (1) Byte... Schritt 4: Codeanalyse Was jetzt high oder Low und in welcher Reihenfolge sinnvoll ist, probiert man am Besten aus, ich kann mir das auch nie merken... wenn man nachher die Texte lesen kann, war's richtig. Und hier der programmtechnische POI (Point of Interest) --> 0x209F * 2 = 0x413E: Schritt 5: Disassemblierung Da findet sich doch die 0x60 wieder, die früher mal eine 0x67 war... Kann es sein, dass da wer einen unbedingten Sprung (bra - branch always) aus einem bedingten Sprung gemacht hat (beq - branch on equal) - so einfach kann es sein... Genau 4 Bytes unterscheiden sich: Sega Mega Drive... Im Original: ein Register Ladebefehl: Ohne Copy Protection: einfach ausge-NOP-t... |
© 2013 - 2024 · W. Robel | e-Mail senden |