该项目使用 SkoolKit 将 Denton Designs 的经典 ZX Spectrum 48K 游戏 The Great Escape 从原始游戏的磁带图像逆向工程转换为交叉引用和带注释的 HTML 反汇编和完整汇编源代码。
《大逃亡》是一款 1986 年等距 3D 越狱游戏,适用于 48K ZX Spectrum,您将扮演一名战俘,试图逃离纳粹战俘营。这是最受好评的 Spectrum 游戏之一,我想知道作者如何将所有这些魔力融入到 48K ZX Spectrum 中。
在这里阅读当前版本的反汇编。它不仅仅是一个程序集列表:它还解码了游戏图形、角色、物品、动画以及有关游戏运作的各种其他细节。
请注意,反汇编可能落后于源代码树的头部:在我推送更新的构建之前,它可能不会包含最新的更改。
我的第一个目标是建立一个完整记录的游戏反汇编。 SkoolKit 使我们能够构建适合重建原始游戏的精确图像的带注释的程序集列表以及 HTML 格式的详细交叉引用反汇编。
第二个是将带注释的程序集转换为 C 源代码,其行为与原始游戏完全相同。正在进行的重新实现项目位于该存储库中,并且两个项目同时进行。
SkoolKit 是由 Richard Dymond 编写的用于反汇编 ZX Spectrum 软件的无与伦比的 Python 工具包。
除了生成交叉引用的 HTML 反汇编之外,SkoolKit 还可以生成带注释的汇编列表。我们可以使用它将游戏重新组装为 .TAP 文件,您可以将其加载到模拟器中。您可以用它来改变游戏并修复 30 年前的错误!
git clone https://github.com/dpt/The-Great-Escape.git
cd <cloned repo>
make disasm
如果一切顺利,您将看到如下输出:
$ make disasm
tap2sna.py --output-dir build @TheGreatEscape.t2s && mv build/TheGreatEscape.z80 build/TheGreatEscape.pristine.z80
Downloading http://www.worldofspectrum.org/pub/sinclair/games/g/GreatEscapeThe.tzx.zip
Extracting The Great Escape.tzx
Writing build/TheGreatEscape.z80
mkdir -p build
sna2skool.py --hex --sft TheGreatEscape.sft build/TheGreatEscape.pristine.z80 > TheGreatEscape.skool
Using skool file template: TheGreatEscape.sft
skool2html.py --hex --asm-labels --rebuild-images TheGreatEscape.skool
Using ref files: TheGreatEscape.ref, TheGreatEscapeBugs.ref, TheGreatEscapeChangelog.ref, TheGreatEscapeFacts.ref, TheGreatEscapeGame.ref, TheGreatEscapeGlossary.ref, TheGreatEscapeGraphics.ref
Parsing TheGreatEscape.skool
Output directory: build/TheGreatEscape
Copying /usr/local/lib/python3.7/site-packages/skoolkit/resources/skoolkit.css to skoolkit.css
Copying TheGreatEscape.css to TheGreatEscape.css
Copying static-images/BarbedWire.png to static-images/BarbedWire.png
Copying static-images/GameWindow.png to static-images/GameWindow.png
Copying static-images/JoystickControls.png to static-images/JoystickControls.png
Writing disassembly files in asm
Writing maps/all.html
Writing maps/routines.html
Writing maps/data.html
Writing maps/messages.html
Writing maps/unused.html
Writing buffers/gbuffer.html
Writing reference/bugs.html
Writing reference/changelog.html
Writing reference/facts.html
Writing reference/glossary.html
Writing graphics/glitches.html
Writing Intro.html
Writing Controls.html
Writing Completion.html
Writing Characters.html
Writing Items.html
Writing Masks.html
suggested width 17 > actual 16
Writing RoomObjects.html
Writing Rooms.html
Writing Map.html
Writing index.html
build/TheGreatEscape/index.html
并深入了解。 make tap
将构建build/TheGreatEscape.tap
make z80
来构建 .z80 映像。上述任何步骤都会自动调用其之前的步骤。
make skool
-- 构建 .skool 文件TheGreatEscape.skool
make tap
build/TheGreatEscape.tap
如果 skool 文件不符合您的口味,并且您更喜欢常规的程序集列表: make asm
将构建build/TheGreatEscape.asm
。例如,然后可以将其传递到 Pasmo 中以构建二进制文件。
游戏的逆向工程现已完成,但工作将继续提高反汇编的准确性和可读性。
以下是我在 2016 年 1 月向同事提供的有关该项目的演示文稿中的幻灯片。
还有一个最近更新的版本,是为 2020 年向 ABug 用户组介绍该项目而编写的:http://abug.org.uk/index.php/2020/07/04/the-great-escape-risc -os-conversion-david-thomas/
2019 年,我在我的网站上写了一篇关于该项目的大文章:http://www.davespace.co.uk/the.great.escape/