
Chase H.Q. für ZX Spectrum — reverse-engineert und in portablem C rekonstruiert
Reverse Engineering von David Thomas, 2023-2024
Projektstart: März 2023

Dies ist eine laufende Disassemblierung der ZX-Spectrum-Umsetzung von Chase H.Q. durch Ocean Software. Bisher deckt sie nur die 48K-Version und das erste Level des Spiels ab. Die 128K-Version ist besser (lädt alle Level auf einmal, hat AY-Musik und Menübildschirm-Animationen), aber sie hat viel mehr Code zu berücksichtigen, daher ist es einfacher, zunächst mit 48K Level 1 zu beginnen.
Hinweis: Ich arbeite derzeit an der 128K-Version auf dem Branch „128k“.
In diesem Repository befindet sich eine SkoolKit-Control-Datei, mit der du das Spiel disassemblieren kannst. Dies funktioniert mit dem Spiel, wenn es sich in einem „unberührten“ Zustand direkt nach dem Laden befindet. Weiter unten findest du Anleitungen zur Erstellung eines unberührten Snapshots und zur Bedienung von SkoolKit. Ich habe ein Makefile bereitgestellt, um die meisten der erforderlichen Schritte zu automatisieren.
Die aktuelle Disassemblierung ist hier zu finden.
Um herauszufinden, wie es funktioniert! (und vielleicht könnten wir eines Tages neue Level erstellen ...)
pip3 install skoolkit
make pristine
Du wirst Folgendes sehen:
Downloading https://worldofspectrum.net/pub/sinclair/games/c/ChaseH.Q..tzx.zip
Extracting Chase HQ - Side 1.tzx
Program: CHASE HQ
Fast loading data block: 23755,3870
Data (514 bytes)
Data (6914 bytes)
Data (19074 bytes)
Data (16130 bytes)
Data (4 bytes)
Data (6898 bytes)
Tape finished
Simulation stopped (PC at start address): PC=23372
Writing chase-hq.z80
So erstellst du eine Skool-Datei:
make skool
Eine Skool-Datei ist eine High-Level-Assembly-Listing, aus der wir reguläre Assembly-Listings oder HTML-Disassemblierungen erzeugen können. Generierte Dateien werden standardmäßig in einem Verzeichnis namens 'build' abgelegt. Du kannst die Skool-Datei bearbeiten und sie wie folgt wieder in eine andere Control-Datei zurückverwandeln:
make ctl
Dadurch kannst du deine Änderungen ganz einfach in die Haupt-Control-Datei zurückführen, indem du Folgendes ausführst:
cp build/ChaseHQ.ctl ChaseHQ.ctl
Oder du kannst die beiden per diff vergleichen, um beim Staging selektiver vorzugehen.
Je größer und detaillierter die Control-Datei wird, desto besser ist unsere Erklärung des Spiels!
So erstellst du ein Assembly-Listing:
make asm
Ich bearbeite die Quellen normalerweise mit geöffneter Control-, Skool- und Assembly-Datei, um die Auswirkungen meiner Änderungen zu prüfen:

So erstellst du eine TAP- oder Z80-Datei zum Laden in Emulatoren oder echte Spectrum-Computer:
make tap # or z80
Du wirst wahrscheinlich beides tun müssen.
Unter https://youtu.be/ZcoFi4T4tsU findest du ein kurzes Video, in dem ich Spectrum Analyser ausführe, um herauszufinden, wie das Spiel seinen Backbuffer aufbaut.
Wenn dich die Disassemblierung selbst nicht interessiert, sind die POKEs ein nettes Nebenprodukt, um das Spiel einfacher, schwerer oder einfach anders zu machen:
Unbegrenzte Credits
POKE 39998,166
Unbegrenzte Zeit
POKE 39937,0
1 Treffer zur Festnahme
POKE 46351,62
Unbegrenzte Turbos
POKE 45221,0
Auto-Spawnrate beeinflussen
POKE 23834,<spawn rate> -- 20 ist der Standardwert für Level 1. 10 würde doppelt so häufig spawnen.
Levelfarbe festlegen
POKE 23796,<attribute byte> -- 112 ist Schwarz auf Gelb, wie bei Level 1. 96 würde Schwarz auf Grün ergeben.
POKE 23797,<attribute byte>
Spectrum-Computing-Forumsthread: https://spectrumcomputing.co.uk/forums/viewtopic.php?p=113633
Chase H.Q. online spielen: http://torinak.com/qaop#!chasehq
Mein vorheriges Disassemblierungsprojekt: https://github.com/dpt/The-Great-Escape