
Chase H.Q. per ZX Spectrum — reingegnerizzato e ricostruito in C portabile
Reverse engineering di David Thomas, 2023-2024
Progetto iniziato: marzo 2023

Questa è una disassemblazione in corso della conversione per ZX Spectrum di Chase H.Q. di Ocean Software. Finora copre solo la versione 48K e il primo livello del gioco. La versione 128K è migliore (carica tutti i livelli in una volta, ha musica AY e animazioni del menu), ma ha molto più codice da considerare, quindi è più facile iniziare dalla versione 48K, livello 1.
Nota: al momento sto lavorando alla versione 128K sul branch "128k".
In questo repository c'è un file control di SkoolKit che puoi usare per disassemblare il gioco. Funziona quando il gioco si trova in uno stato "pristine" appena caricato. Vedi sotto per come creare uno snapshot pristine e le istruzioni su come usare SkoolKit. Ho fornito un Makefile per automatizzare la maggior parte dei passaggi necessari.
La disassemblazione attuale è qui.
Per scoprire come funziona! (e forse un giorno potremmo creare nuovi livelli...)
pip3 install skoolkit
make pristine
Vedrai:
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
Crea un file skool così:
make skool
Un file skool è un listing assembly di alto livello da cui possiamo generare normali listing assembly o disassemblazioni HTML. I file generati vengono inseriti in una directory chiamata 'build' per impostazione predefinita. Puoi modificare il file skool e riconvertirlo in un altro file control così:
make ctl
Questo rende facile riportare le tue modifiche nel file control principale facendo:
cp build/ChaseHQ.ctl ChaseHQ.ctl
Oppure puoi fare un diff dei due per essere più selettivo nello staging.
Più grande e dettagliato diventa il file control, migliore sarà la nostra spiegazione del gioco!
Crea un listing assembly così:
make asm
Di solito modifico tenendo aperti tutti e tre i file control, skool e assembly per poter controllare l'impatto delle mie modifiche:

Crea un file tap o z80 da caricare in emulatori o veri Spectrum così:
make tap # or z80
Probabilmente dovrai fare entrambe le cose.
Guarda https://youtu.be/ZcoFi4T4tsU per un breve video in cui uso Spectrum Analyser per scoprire come il gioco costruisce il suo back buffer.
Se non sei interessato alla disassemblazione in sé, un bel sottoprodotto sono i POKE per rendere il gioco più facile, più difficile o semplicemente diverso:
Crediti infiniti
POKE 39998,166
Tempo infinito
POKE 39937,0
1 colpo per catturare
POKE 46351,62
Turbo infiniti
POKE 45221,0
Modifica la frequenza di spawn delle auto
POKE 23834,<frequenza di spawn> -- 20 è il valore predefinito per il Livello 1. 10 farebbe comparire le auto il doppio delle volte.
Imposta il colore del livello
POKE 23796,<byte attributo> -- 112 è nero su giallo, come per il Livello 1. 96 darebbe nero su verde.
POKE 23797,<byte attributo>
Thread del forum Spectrum Computing: https://spectrumcomputing.co.uk/forums/viewtopic.php?p=113633
Gioca a Chase H.Q. online: http://torinak.com/qaop#!chasehq
Il mio precedente progetto di disassemblazione: https://github.com/dpt/The-Great-Escape