該專案使用 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/