由 David Thomas 进行逆向工程,2023-2024
项目启动:2023 年 3 月

这是 Ocean Software 出品的 ZX Spectrum 版 Chase H.Q. 的一个进行中的反汇编项目。目前只涵盖 48K 版本和游戏的第一关。128K 版本更好(一次性加载所有关卡,包含 AY 音乐和菜单屏幕动画),但有 很多 更多代码需要考虑,所以先从 48K 第一关入手更容易。
注意:我目前正在 "128k" 分支上处理 128K 版本。
此仓库中有一个 SkoolKit _控制_文件,你可以用它来反汇编游戏。这适用于游戏处于“纯净”的刚加载状态。请参阅下文了解如何制作纯净的快照以及如何驱动 SkoolKit 的说明。我提供了一个 Makefile 来自动化大部分所需步骤。
当前的反汇编结果在这里。
为了弄清楚它的运作方式!(也许有一天我们可以制作新的关卡……)
pip3 install skoolkit
make pristine
你将看到:
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
像这样构建一个 skool 文件:
make skool
skool 文件是一种高级汇编清单,我们可以从中生成常规汇编清单或 HTML 反汇编。生成的文件默认放在名为“build”的目录中。你可以编辑 skool 文件,然后将其转换回另一个控制文件,如下所示:
make ctl
这样可以轻松地将你的更改拉回主控制文件,只需执行:
cp build/ChaseHQ.ctl ChaseHQ.ctl
或者你可以对两者进行 diff,以便在暂存时更有选择性。
控制文件变得越大、越详细,我们对游戏的解释就越好!
像这样构建汇编清单:
make asm
我通常同时打开控制、skool 和汇编这三个文件进行编辑,以便检查我的更改的影响:

像这样构建可用于加载到模拟器或真实 Spectrum 的 tap 或 z80 文件:
make tap # or z80
你可能需要两种方法都试一试。
查看 https://youtu.be/ZcoFi4T4tsU 获取我运行 Spectrum Analyser 来了解游戏如何构建其后备缓冲区的短视频。
如果你对反汇编本身不感兴趣,那么一个不错的副产品是用于让游戏更简单、更难或只是变得不同的 POKE:
无限续币
POKE 39998,166
无限时间
POKE 39937,0
一击抓捕
POKE 46351,62
无限涡轮
POKE 45221,0
影响车辆生成率
POKE 23834,<spawn rate> -- 20 是第一关的默认值。10 会使生成频率加倍。
设置关卡颜色
POKE 23796,<attribute byte> -- 112 是黄底黑字,如第一关所示。96 则会是绿底黑字。
POKE 23797,<attribute byte>
Spectrum Computing 论坛帖子:https://spectrumcomputing.co.uk/forums/viewtopic.php?p=113633
在线玩 Chase H.Q.:http://torinak.com/qaop#!chasehq
我之前的反汇编项目:https://github.com/dpt/The-Great-Escape