用 AI 讀懂 1993 年的 68000 組語:把《Babylonian Twins》從 Amiga 搬進 Godot
Babylonian Twins Blog · 2026-09-03
開發者 Rabah Shihab 在 1993 年制裁時期的巴格達,用純 68000 組合語言寫出 Amiga 500 平台遊戲《Babylonian Twins》,原始碼分散在 26 個檔案裡,總共 72,758 行組語。2010 年他把引擎重寫成 C++ 搬上 iPhone,新引擎瘦身到 34,000 行,之後在 iOS 與 Android 上累積超過兩百萬次下載。十多年後他決定再做一次移植,目標是 Godot 4,還想把 1993 年原始版本也內嵌進新版裡。這篇部落格文章記錄了他怎麼靠 Claude Code 裡跑的 Claude Fable 5 讀懂自己 33 年前寫的組語。
背景:三個版本,三個時代
整個移植分成三個階段完成。第一階段是「安全牌」:把 2010 年那份 34,000 行的 C++ 引擎搬進 Godot 4,這段作業從晚上 22:23 開始,到 22:44 兩個主角就已經能在畫面上跑動,一個晚上內主要玩法就接上了新引擎。真正棘手的留到第二階段:讓 1993 年那份原始 68000 組語重新組譯出來,產出跟當年出貨執行檔逐位元組相同的二進位檔。
技術細節:把二進位倒推回關卡資料
Shihab 用現代組譯器 vasm,在 Apple Silicon Mac 上重新組譯 1993 年原始碼——下午 14:34 匯入原始碼,到 14:49 vasm 就重現出當年出貨的二進位檔。逐位元組比對成功才能確定後續回推格式時是「讀對」了。原始碼裡的關卡、圖磚、物件擺放全無文件留存,只能從執行期讀取邏輯反推,像這樣的片段隨處可見:
move.l #$dff000,a0 ;Base for hardware registers
lea save(pc),a1 ;Get the system
move.w #$4000,intena(A0) ;from the AMIGA
逐步比對執行邏輯後,總共回推出七種未文件化的資料結構:
- 圖磚地圖:每關由 256 張 16×16 像素圖磚組成,排成沒有標頭的可變寬度網格
- 地圖格屬性:實心地面、可攀爬、機關、門等物理屬性,用 6 位元代碼塞進 16 位元字組
- 物件表:敵人擺放位置用相對於基準標籤的位移表示,例如
dc.w hiddenwallR-lrb,20 - Copper 特效:天空漸層其實是一張色彩查表
- 精靈圖:Amiga 特有的 5 個 1 位元平面加一個遮罩層的 bit-plane 格式
- 門的資料:是執行期疊上去的圖層,從未被畫進關卡編輯器地圖裡
- 讓 1993 年的關卡編輯器
MEDITOR.S直接跑起來,驗證第二關資料是否還原正確
門的線索特別關鍵:「門是靠執行期程式碼畫出來的,從沒被畫進編輯器地圖裡」,這解釋了為何想把地圖資料一比一搬過去行不通。第三階段把整個 1993 年 Amiga 版本用 FS-UAE 與 WinUAE 模擬器包成「訪客模式」嵌進現代版本裡,並處理原始版 50 Hz 與現代版 60 Hz 之間的時脈切換。
結果與後續
移植過程連帶抓出好幾個原版存在卻從沒被發現的 bug:守衛推擠判定漏掉上邊界檢查,可隔著實心地板攻擊;音效原本單聲道卻被當立體聲計算,播到一半被截斷;教學關卡甚至整個漏掉「離開」提示,直到 15 年後才被 Google Play 一則一星負評挖出來。這些都是原始版本從沒被抓到的邏輯錯誤,靠逐行重讀組語才浮現。目前原始磁碟映像(ADF)已免費放上 itch.io,iOS/Android 版「Definitive Edition」已上架,Steam 版提供免費試玩,完整版預計 2026 年秋天上市,屆時將內嵌可執行的 1993 年原始版本。
沒有 CopyNES 也能拷卡帶:用聲音訊號把 NES 新款卡匣的 ROM 錄出來
Mathstodon(JordiGH 貼文串) · 2026-09-03
數學系背景的開發者 JordiGH 買到 2025 年發行的 NES homebrew 卡帶《Xcavator》實體版,想留一份數位備份分享給朋友,但業界公認最可靠的專業級 NES 卡帶讀取器 CopyNES 早已停產、市面難尋。於是他翻出一套叫 TapeDump 的老工具——把卡帶內容編碼成聲音、靠錄音把 ROM「唱」出來——但這套工具從未支援過《Xcavator》用的新款 homebrew mapper UNROM-512,他只好自己動手寫補丁。他沒有寫成正式部落格,而是直接在Mathstodon 上開了一串「資訊傾倒」貼文,逐步記錄解法。
背景:沒有讀卡機,只有一片 flash cart
《Xcavator》是 2025 年才推出的 NES homebrew 新作,JordiGH 手上有實體卡帶,卻缺乏專業讀取設備。業界公認最可靠的方案是 Kevin Horton(kevtris)做的 CopyNES,但這套硬體早就停產,二手市場也難買到。他手邊有的只是一片可燒錄軟體的 flash cart,加上一台電視擷取卡,缺的是一套能在 NES 上跑、把 ROM 讀出來的軟體。
技術細節:把 ROM 編碼成聲音訊號
他找到的答案是 TapeDump——一套燒進 flash cart、開機執行的 NES 程式。運作方式是先開機執行 TapeDump,趁機器還通電時把 flash cart 換成要備份的目標卡帶(俗稱熱插拔),接著讓程式把卡帶內容轉換成一段音訊波形播放出來,用擷取卡錄下這段聲音,最後在電腦端用 FFT 訊號處理把音訊解碼回原始位元組。問題是 TapeDump 已經很久沒人維護,完全不認得《Xcavator》用的新款 mapper。
UNROM-512 是 RetroUSB 做的一款 discrete-logic 卡帶板,把原本的 UNROM 擴充到最多 512 KiB 的 PRG-ROM,還加上可切換的 CHR-RAM 與軟體控制的畫面鏡射模式。要讓 TapeDump 認得它,JordiGH 得自己寫 6502 組合語言補丁,還得把原本用舊版 TASM 組譯器寫成的原始碼轉成現代的 ca65 才方便維護。最大的限制是記憶體:整支 dump 程式得塞進 NES 僅有的 2048 位元組工作記憶體裡,因此 TapeDump 用固定位址的跳轉表架構——核心邏輯固定在 $0400,函式庫固定在 $01AF,讓通用邏輯(例如把位元編碼成音調的函式)跟每種 mapper 專屬的外掛程式碼互相呼叫。
要支援 UNROM-512,實際要修改 UNROM.s 裡的兩個地方:
- 容量偵測:原本的校驗和比對邏輯只認得 8 個 bank,得擴充成 16 個 bank 才能對應 512 KiB 的完整容量,做法是額外比較第 0 與第 9 個 bank 是否重複
- 鏡射模式:
UNROM-512支援額外的畫面鏡射組合,得反映在輸出的iNES標頭位元裡,模擬器才能正確顯示
後續:還沒做完的補丁
截至發文為止,容量偵測的補丁已經完成,鏡射模式那部分他自己承認「還沒做完」,整串貼文用一句「但這就是我目前的進度」作結。這串貼文本身也帶著自嘲——他一開頭就寫本來想寫成正式部落格文章或一場演講,但太興奮了沒空整理,乾脆把腦中的東西全部倒出來當貼文發了。
Verisign 決定拆掉整個 .name 三級網域結構,兩萬兩千個網域明年二月集體消失
Neil Fraser 部落格 · 2026-09-03
網域註冊商 Verisign 向 ICANN 提案,要把 .name 這個頂級域下、原本讓使用者申請「名.姓.name」格式網域的整個第三層結構直接廢除,ICANN 已在 2026 年 7 月 28 日核准這項提案,預計 2027 年 2 月生效。這代表像 Neil Fraser 這樣二十多年前註冊、且已預繳費用繳到 2040 年的三級網域,屆時仍會被強制註銷。Fraser 把這則消息寫在自己的部落格上,他自己就是這兩萬兩千個受影響帳號之一。
背景:一個原本用來避開 Verisign 的選擇
.name 這個頂級域的設計從一開始就跟大多數 TLD 不同:一般使用者申請到的不是 example.name,而是類似 *.co.uk 或 *.ny.us 那種第三層結構,例如 neil.fraser.name,每一筆註冊都附帶完整的 WHOIS 紀錄。Fraser 大約在 2001 年申請了 neil.fraser.name 與 beverly.fraser.name,原因之一就是想找一個不受 Verisign 直接控制的替代方案。諷刺的是,原本經營 .name 的 Global Name Registry 後來被 Verisign 收購,如今要砍掉這個結構的正是 Verisign 自己。
註銷的時間表
根據 Fraser 引用的資料,這次變動的時間軸相當明確,整個決策流程只花了三個半月:
| 日期 | 事件 |
|---|---|
| 2026-04-15 | Verisign 向 ICANN 提出廢除 .name 第三層結構的提案 |
| 2026-07-28 | ICANN 核准提案 |
| 2027-02 | 所有第三層網域正式終止,包含 Fraser 的網站 |
Verisign 給出的理由很簡短,只說是「為了簡化他們的行政管理」,文章裡沒有進一步的技術或商業細節。不管註冊人有沒有繳費、繳到哪一年,一律在生效日當天全部失效,Fraser 自己的兩筆網域都還預繳到 2040 年,同樣不能倖免。
被砍掉之後,誰來接手這些網址
三級網域終止後,原本的第二層網域——也就是 fraser.name 這一層——預期會被釋出,任何人都可以重新申請。這才是 Fraser 真正擔心的風險:一旦有人搶先註冊了 fraser.name,就能重新建立並完全控制 neil.fraser.name 這個名稱,等於能接管過去 25 年來任何綁定這個網域的帳號或服務。這已經不只是網站消失的問題,而是網域回收後可能被拿去做帳號劫持或服務冒名的資安疑慮。
原始來源:Neil Fraser 部落格