- Dank der 2024 veröffentlichten Sega-Channel-Spiel-Image-CD von September 1996 lassen sich Spiele und Menüdaten nun tatsächlich aus einem rund 60 MB großen Broadcast-Image extrahieren
- Sega Channel war ein Abo-Dienst, der Genesis-Spiele über Kabelnetze in Schleife ausstrahlte; Nutzer spielten, indem der Adapter im kontinuierlichen Daten-Loop das gewünschte Spiel fand und herunterlud
- Die Image-Erstellungskette bestand aus MENUMAKR, PKSPREAD und NSF; ein Durchbruch bei der Analyse gelang, weil in der für die finale Kodierung zuständigen NSF.EXE Debug-Symbole erhalten geblieben waren
- Die Rekonstruktion erfolgte, indem zunächst ein C-Programm erstellt wurde, das dieselbe Ausgabe wie NSF erzeugt, anschließend mit einem umgekehrten Decoder Dateien getrennt und schließlich .SA-Kompression entpackt wurden, um standardmäßige Genesis-ROMs zu erhalten
- Zu den extrahierten Inhalten gehörten die Sega-Channel-Exklusivtitel Chessmaster und Klondike, neue Builds, mit Wasserzeichen versehene ROMs sowie Menü- und Spielbeschreibungs-ROMs, die sich alle im Emulator ausführen ließen
Hintergrund zu Sega Channel und den Image-Dateien
- Sega Channel war ein Game-on-Demand-Dienst, der von Juni 1994 bis Juni 1998 betrieben wurde
- Der landesweite Start erfolgte im Dezember 1994
- Je nach Kabelanbieter zahlten Nutzer meist 10 bis 15 US-Dollar pro Monat und hatten Zugriff auf eine Bibliothek von rund 50 Sega-Genesis-Spielen pro Monat
- Der Dienst erreichte in der Spitze etwa 250.000 Abonnenten
- Abonnenten erhielten eine Adapter-Cartridge, die an den Genesis angeschlossen wurde und mit dem Kabelfernsehanschluss verbunden war
- Beim Start suchte sie nach dem Sega-Channel-Signal und lud das Spielmenü herunter
- Der Download des Menüs dauerte in der Regel etwa 20 Sekunden
- Nach der Auswahl eines Spiels wurde dieses in etwa 1 Minute in den RAM des Adapters geladen
- Das heruntergeladene Spiel verhielt sich dann wie eine normale Retail-Cartridge
- Wenn der Strom abgeschaltet oder die Menütaste des Adapters gedrückt wurde, wurde das heruntergeladene Spiel gelöscht
- Speicherdaten blieben erhalten, solange der Nutzer kein anderes Spiel herunterlud
- Neben Retail-Spielen bot Sega Channel auch einen Bereich Test Drives
- Dort konnten zeitlich oder inhaltlich eingeschränkte Vorabversionen gespielt werden
- Es gab auch Spiele, die nur auf Sega Channel verfügbar waren
Wie Broadcast-Images erstellt und übertragen wurden
- Mitarbeiter von Sega Channel stellten monatliche Spiel-Line-ups sowie Inhalte wie Spieltipps, Handbücher, News und digitale Fan-Art zusammen
- Anschließend wurden die Inhalte an Foley Hi-Tech übergeben
- Foley Hi-Tech erstellte die Menügrafiken und -animationen und fügte die monatlichen Inhalte ein
- Das Ergebnis war eine rund 60 MB große Spiel-Image-Datei
- Das Spiel-Image wurde auf CD gebrannt und zu einer Satelliten-Uplink-Anlage in Denver, Colorado, geschickt
- Die CD wurde in den Uplink-Spielservern installiert
- Der Server strahlte die Spieldaten fortlaufend in einer Schleife per Satellit aus
- Kabel-Headends in den gesamten USA empfingen das Satellitensignal und leiteten es an die Abonnenten weiter
- In einer Umgebung, in der Kabel-TV-Anbieter keine Daten von den Abonnenten empfangen konnten, bestimmte die kontinuierliche Loop-Ausstrahlung die Interaktionsweise des Dienstes
- Wenn ein Nutzer ein Spiel auswählte, suchte der Adapter im Sega-Channel-Datenstrom nach den zugehörigen Spieldaten
- Das rund 60 MB große Spiel-Image wurde mit 2 Trägern zu je 6 Mbps bei insgesamt etwa 12 Mbps übertragen
- Wenn es keine Signalprobleme gab, konnten Nutzer das gewählte Spiel innerhalb eines Daten-Loops spielen
- Das Menü lag mehrfach im Datenstrom vor, damit es schneller heruntergeladen werden konnte
Entdeckung der Spiel-Image-CD von September 1996
- Im November 2024 entdeckte der Sonic-Retro-Forennutzer RisingFromRuins beim Durchsehen eines vor langer Zeit gekauften Stapels von PC-Hardware eine Sega-Channel-Spiel-Image-CD von September 1996
- Er veröffentlichte Fotos der CD und lud eine Kopie der Spiel-Image-Datei von der Disc hoch
- Ziel der Analyse war es, Daten aus der Image-Datei zu extrahieren und zu prüfen, ob sie Exklusivspiele oder Prototypen enthält
- Zunächst wurde die Image-Datei mit einem Hex-Editor untersucht
- Genesis-Spiele besitzen einen standardisierten ASCII-Header, und auch Spieltipps sowie herunterladbare Handbücher sollten eigentlich lesbar sein
- In der tatsächlichen Datei waren jedoch keine lesbaren Strings zu sehen
- Dadurch lag nahe, dass die Image-Datei verschleiert oder verschlüsselt worden war
Die in einer Entwickler-Tool-CD gefundene Image-Erstellungskette
- Ein wichtiger Hinweis war, dass der Nutzer tdijital 2017 eine Backup-CD mit Sega-Channel-Entwicklungsunterlagen von Foley Hi-Tech veröffentlicht hatte
- Auf dieser CD waren bereits eine Contest-Version von Primal Rage, ein japanisches Sega-Channel-Quizspiel sowie Menü-Demo-ROMs von Dezember 1994 bis Januar 1996 identifiziert worden
- Die Entwickler-Tools selbst waren jedoch nicht tiefgehend analysiert worden
- Statt den Download-Code auf der Genesis-Seite rückzuentwickeln, wurde der Ansatz gewählt, die Tools zur Erstellung des Spiel-Images zu reverse engineeren
- Der Ablauf der Image-Erstellung bestand aus drei Stufen
- MENUMAKR: Fügt Spiele, Beschreibungen, News-Texte, Art und Musik hinzu und erzeugt ein Menü-Binary sowie die Skriptdatei
MENUSPIN.BAT - PKSPREAD: Ein von Scientific Atlanta entwickeltes Programm, das den Inhalt von
MENUSPIN.BATvalidiert undPMAP.DATausgibt - NSF: Kodiert die Eingabedateien mithilfe von
PMAP.DATund erzeugt die finale Spiel-Image-Datei
- MENUMAKR: Fügt Spiele, Beschreibungen, News-Texte, Art und Musik hinzu und erzeugt ein Menü-Binary sowie die Skriptdatei
- Scientific Atlanta war ein Kabelausrüster, der mit Sega bei der Broadcast-Hardware von Sega Channel und der Adapter-Cartridge zusammenarbeitete
- Zentrales Analyseobjekt war NSF.EXE, das die finale Image-Datei erzeugte
Reverse Engineering von NSF.EXE
- NSF.EXE war im Debug-Modus kompiliert, die Optimierung war deaktiviert, und Symbole waren in der ausführbaren Datei enthalten
- Das Programm war mit Borland C++ 4.1 kompiliert worden
- Da IDA Pro die Debug-Symbole nicht automatisch erkannte, wurden sie in Turbo Debugger geprüft und manuell übertragen
- Statt sofort einen Decoder zu schreiben, wurde zunächst ein äquivalentes Programm zu NSF.EXE erstellt
- Wenn sich eine Ausgabe erzeugen ließ, die Byte für Byte identisch mit den von DOS-NSF.EXE erzeugten Images war, konnte man davon ausgehen, den Algorithmus korrekt verstanden zu haben
- Dafür wurden Test-Spiel-Image-Dateien erzeugt und die Implementierung so angepasst, dass die Ausgaben übereinstimmten
- Nach einem Arbeitstag und mehreren Abenden Debugging entstand ein C-Programm, das dieselbe Ausgabe wie NSF.EXE erzeugt
- Es wurde umgesetzt, indem IDA und Visual Studio parallel geöffnet und die Logik möglichst nah am Assembler nachgebildet wurde
- Ziel war nicht, ein identisches kompiliertes Binary wie das Original zu erzeugen
- Die Implementierung nutzt C99-Deklarationen und
stdint.h-Typen und lässt sich daher möglicherweise nicht unverändert mit Borland C++ 4 kompilieren
Das Übertragungs-Kodierungsverfahren von NSF
- Die Funktion
GetDatavon NSF holt ausPMAP.DATfür jedes Paket die Eingabedatei, die Dateiposition und Sega-Channel-Metadaten- Zu diesen Metadaten gehören unter anderem die Datei-ID und die verfügbare Spielzeit bei zeitbegrenzten Demos
- Danach werden aus der Datendatei 246-Byte-Blöcke gelesen
- Die Funktion
LoadFramesetzt vor jedes Datenpaket einen Header und invertiert alle Datenbytes- Die Byte-Invertierung könnte mit der Übertragung zusammenhängen oder dazu dienen, den Paketinhalt zu verschleiern
- In die Spieldaten werden außerdem BCH-Fehlerkorrekturcodes und Paritätsbits eingefügt
- Dadurch wachsen 246 Byte Nutzdaten auf 288 Byte an
- Der Header enthält mehrere Felder
GameTimeSyncundGameTimeBitübertragen Werte für das Spiellimit bitweiseServiceIDist meist 1 und könnte mit Express Games zusammenhängenFileIDidentifiziert jede Datei innerhalb des Spiel-Images eindeutig; das Menü ist immer Datei 0Addressgibt an, an welche RAM-Adresse der Adapter die Datei herunterladen soll- Enthalten sind außerdem
HeaderCRCundHeader Copy
- Die Funktion
InterLeaveteilt Pakete in 450-Bit-Blöcke auf und mischt die Bits innerhalb dieser Blöcke- Das scheint dazu zu dienen, Burst-Fehler gleichmäßiger zu verteilen, damit die Fehlerkorrektur besser funktioniert
- Dieser Vorgang wird in Einheiten von 10 Paketen wiederholt
- 10 Pakete werden zu einem 2880-Byte-Frame zusammengefasst
- Der Frame wird auf die Festplatte geschrieben, indem etwa die ersten 2 Byte von Paket 0, dann die ersten 2 Byte von Paket 1 usw. verflochten werden
- Dasselbe Verfahren setzt sich fort, bis die gesamte Image-Datei erzeugt ist
Dekodierung und Dekompression
- Nachdem die Funktionsweise von NSF verstanden war, wurde ein Decoder-Programm geschrieben, das den Prozess in umgekehrter Reihenfolge zurückläuft
- Der Decoder extrahiert einzelne Datendateien aus dem Image
- Die erste Ausgabe des Decoders enthielt jedoch keine gültigen Genesis-ROM-Daten
- Der Grund war, dass die Spieldaten vor der Übertragung komprimiert worden waren
- Das Tool zur ROM-Kompression war
GAMEEDIT.EXEauf der Foley-Hi-Tech-CD- Dieses Tool selbst musste nicht erneut reverse engineered werden
- Der GitHub-Nutzer Octocontrabass hatte das .SA-Kompressionsformat bereits reverse engineered
- Mit Octocontrabass’ Tool
unsawurden die.SA-Dateien zu standardmäßigen ROM-Dateien dekomprimiert
Spiele und Inhalte aus dem Image von September 1996
- Das auffälligste Ergebnis waren zwei Sega-Channel-Exklusivspiele, die im September 1996 ausgestrahlt wurden
- Chessmaster: Ein Schachspiel, das es in den 1990ern auf mehreren Plattformen gab, aber nicht für Genesis
- Klondike: Ein Solitaire-Spiel, das Sega für Sega Channel in Auftrag gab und das von David Crane, bekannt durch Pitfall, programmiert wurde
- Die Spiele im Image lassen sich in mehrere Kategorien einteilen
- Exklusive Inhalte: Chessmaster, Klondike, Olympic Summer Games - Test Drive, Sega Channel Game Guide
- Neue Builds: Bugs Bunny in Double Trouble, OutRunners, Super Volleyball, World Series Baseball '96
- Einträge, die sich von bestehenden Dumps nur durch Padding unterscheiden: Flashback, Phantasy Star II, The Punisher
- Bestehende Dumps mit hinzugefügtem Wasserzeichen: Alex Kidd in the Enchanted Castle, Ecco - The Tides of Time, Sonic & Knuckles u. a.
- Viele Spiele, die mit bestehenden Dumps übereinstimmen: Castlevania - Bloodlines, Streets of Rage 2, ToeJam & Earl, X-Men, Ys III u. a.
- Black Squirrel von Sonic Retro fand einen Weg, das Menü von September 1996 im Emulator auszuführen
- Dazu werden die Bytes
0-0x1003FFaus einem Sega-Channel-Demo-Cartridge-ROM kopiert und anschließend die Menüdaten aus dem Spiel-Image angehängt - Die Download-Funktion arbeitet zwar nicht, aber das Menü lässt sich durchsuchen
- Dazu werden die Bytes
- Der letzte Inhalt war ein Spielbeschreibungs-ROM
- Es sah wie ein normales Genesis-ROM aus, zeigte im Emulator aber zunächst nur einen schwarzen Bildschirm
- Der Grund war, dass es nicht wie bei einer normalen Cartridge ab Adresse 0, sondern ab 0x100000 gelinkt war
- Es scheint für die direkte Ausführung aus dem Adapter-Speicher von Sega Channel vorgesehen gewesen zu sein
- Nachdem hinter dem Header Nullen ergänzt wurden, sodass der Code mit den Vektoren des Headers ausgerichtet war, lief es im Emulator
- Danach erschien ein entwicklerseitiges Menü, in dem die internen Namen der einzelnen Spiele sichtbar waren
- Auf diesem Weg ließ sich schließlich der gesamte Inhalt der Spiel-Image-Datei im Emulator ausführen
Noch keine Kommentare.