世界を動かす技術を、日本語で。

1993年のアミガゲームをGodotに移植する、68000アセンブリを読み取るLLMを使って

概要

  • 1993年、バグダッドでAmiga 500用ゲーム「Babylonian Twins」を開発
  • 制裁下、資源も情報もほぼゼロの環境で純粋な68000アセンブリで制作
  • 2023年、Claude Fable 5とGodot 4を使い、現代に移植・再構築
  • オリジナルの挙動や感触を再現するための技術的工夫と検証
  • 移植過程・AIの活用・オリジナルとの違い・感想を詳細に記録

バグダッド発、Amiga 500でのBabylonian Twins開発記

  • 1993年、バグダッドでAmiga 500(512KB RAM、HDDなし、TV接続)を使用し開発
  • 当時20代の工学学生として、純粋な68000アセンブリで全て手作業でコーディング
  • Murtadha Salmanがアート、Mahir AlSalmanが音楽を担当
  • 制裁下、インターネットや開発リソース皆無、Amiga Hardware Reference Manual一冊のみ所持
  • 電気は一日数時間のみ、50°Cの酷暑でフロッピーディスクドライブが三度故障
  • ゲームはOSを一切利用せず、起動時に割り込みベクタを保存し、OS割り込みを停止
    • ハードウェアレジスタを直接操作、コッパーリストやブリッターを駆使し描画・アニメ制御
    • ジョイスティックやボタンも直接ハードウェアから読み取り
  • OSはレベル切替時のみ復帰し、ファイル読み込み後再び停止
  • イラク初の商業ゲームとして完成も、制裁とCommodore倒産で未発売状態が長期化
  • 2008年、Amigaフォーラムで発見され、YouTube動画から作者に連絡が届く
  • 2010年にiPhone向けにC++で手作業で移植、Apple・Googleで特集され200万DL突破

Claude Fable 5とGodot 4による現代移植

  • 今回の移植はAI(Claude Fable 5)主導、私は方向性や感触の最終判断のみ担当
  • ファイルフォーマット解析やアセンブリ読解、30年前のコード移植はAIが実施
  • AIは端末・ファイルシステムにアクセスし、アセンブル・ビルド・テストまで自動化
    • vasmでアセンブル、FS-UAEで実機動作確認、バイナリのdiffで完全一致を検証
    • コマンドラインフラグで自動プレイやスクリーンショット取得も実装
  • 移植前にバイナリ完全一致を目指し、オリジナルの状態を再現
    • ASM-Oneとvasmの違い(org命令やファイル名短縮等)をAIが自動で吸収・変換
    • オリジナルバイナリとの108バイトの差異は「実行後メモリ保存」の仕様によるもの

C++からGodotへの移植工程

  • 2010年版C++(34,000行)をGodot 4に移植する「安全な課題」から開始
    • プロジェクト作成から21分でプレイ可能なキャラが動作
    • 全エンティティ・メニュー・セーブ機能等も短時間で移植完了
    • 細かな挙動調整(ジャンプアークや当たり判定)は数日かけて調整
    • 息子と一緒にテストプレイ、親子の思い出に
  • ゲームプレイ状態はタイル単位(1.0=48px)、更新は60Hz固定
    • オリジナル(50Hz)と移植版(60Hz)で手調整されたパラメータを維持
  • Godot標準のCharacterBody2Dやmove_and_slide()は未使用
    • オリジナルの手書き物理・当たり判定ルーチンをそのまま移植

68000アセンブリの再構築

  • 72,758行・26ファイルのアセンブリを現代Mac上でvasmで再アセンブル
    • ファイル名短縮やデータ切断などの問題もAIが自動修正
    • アセンブル結果がオリジナルバイナリとbyte単位で一致するまで自動反復
    • ASM-One独自仕様(org命令の逆方向移動等)もAIがプリプロセスで吸収
  • バイナリの完全一致が以降の検証基準に
    • オリジナルの「実行後メモリ保存」という特殊なバイナリ生成プロセス
  • レベル・データフォーマットはAIがコードから逆解析し、仕様書なしでも再現

AIによる自動化と検証

  • AIは以下の自動化を実装
    • 全スクリプトのコンパイル・全レベルのビルドチェック
    • コマンドラインフラグによる自動テストプレイ・状態ダンプ・スクリーンショット取得
  • 移植後の「操作感」や「感触」だけは人間の目と手で最終確認
  • 画像比較や「ゲームの気持ちよさ」評価は自動化せず、私自身が確認

Claude Fable 5の進化とLLMの実力

  • 1年前のモデルではバイナリレベルマップ解析に複数回のヒントが必要
  • Claude Fable 5では一発で解析成功、推論力の向上を実感
  • Amigaアセンブリのような特殊ケースでもLLMの応用力が証明された

感想と今後

  • 30年前に作った自作ゲームがAIと現代エンジンで蘇生
  • AIの「変換力」と「自動化力」に驚き、手作業では気づかなかった検証まで自動化
  • 親子でのテストプレイや、コミュニティとの再発見も大きな成果
  • オリジナルゲームの無料公開を決定、質問も歓迎

補足・質問歓迎、オリジナルゲームは無料公開予定

Hackerたちの意見

これは素晴らしいね。Claude Codeが同じようなポートをするためのエンジニアリングガイドを出してくれたら面白いと思う。どんなツールを使ったかの説明も含めてね。バイナリからのリバースエンジニアリングはやったことあるけど、こんなに良い結果は出たことないよ。

いいアイデアだね。ポーティング体験をもっとスムーズにするための汎用的なゲームポーティングスキルになるかも。さっきの経験から、実際にClaudeにゲームのバイナリファイルを渡してみたら、GoDotにリバースエンジニアリングできたよ!

ドライブに保存されたセッションには、すべてのツールコールも含まれてるよね?オペレーターがデフォルト設定を変更してなければ、今頃は期限切れになってるだろうけど、実行は7月だったからね。

DOSのSDLポートで似たようなことをやってるよ。リポジトリはまだ公開してないけど、知識ベースやスキル、パッチを使えるリポジトリを作る予定なんだ。そうすれば、最初から全部を立ち上げる必要がなくなるからね。

いくつかのエリアでつまずいてるのを見ると、ちょっと嬉しい。だけど、どれだけ正確にできてるかにはいつも驚かされる。コンピュータの歴史やゲームの中でも、かなりマイナーな部分がエージェントにとって難しい領域になることをずっと期待してたんだ。昔の実装に必要だった非標準的で難解なことが、今触れるには信じられないほど複雑に感じる。多くの人がその場で作り上げて、誰も予想しなかった方法でハードウェアを使ってたんだよね。Tim FollinがSNESのPlockの音声を担当して、Miyamotoがその音声が本物だと驚いたことを思い出す。過去の開発について、コードの構造を知ることでどんなことが学べるのか、すごく興味深いよ。こういうの大好きだし、詳細な投稿に感謝してる。

Amigaハードウェアリファレンスマニュアル、通称「ザ・ブック」のコピーが一冊…ああ、これを見てると懐かしい思い出が蘇る。Babylonian Twinsは「Gods: Into the Wonderful」の雰囲気がすごく強いけど、あのゲームがインスピレーションになったのかな? https://www.lemonamiga.com/game/gods-into-the-wonderful https://www.youtube.com/watch?v=1kAXGjUwHyA

誰も言わなかったし、考えもしなかったけど、Babylonian Twinsの主なインスピレーションは、https://en.wikipedia.org/wiki/The_Maze_of_Galious なんだよ。これが一番古いんだ。

数週間前にZX81のゲームのメモリダンプをダウンロードして、ClaudeにGoで作ってもらったんだ。完璧にできたよ。バイナリを基本に戻して、さらにGoに変換した。ゲームがLLMのトレーニングには知られてないものだといいなと思って、いいベンチマークになるかも。パーソナルコンピュータの誕生の最初にいて、AIがその最初の体験を考古学のように扱う転換点にいるって、なんてクレイジーなことなんだろう。

すごい仕事だね!別の忘れられたゲーム(自分のじゃないけど)にもこれをやろうと思ってるから、これが今かなり可能になったのを見るのは嬉しいよ。

ありがとう!そう、去年はこれができなかったし、数ヶ月前も無理だったよ。忘れられたゲームやソフトウェアを復活させるのは素晴らしい時代だね。プロセスについて質問があったら教えてね。

どのゲームをやる予定なの?みんなで調整して、同じゲームを何度もやらないようにしようよ。

あなたが’93年にアセンブリでこのゲームを作ったことに、ほんとに感心してるよ。同じ頃、俺もアタリSTでゲームを作ろうとしてたんだけど、ドキュメントがほとんどなかった時代に、プロジェクトに対するその献身はすごいよね。デバッグの時のエピソードとかある?俺は、コードを手作りして最初からうまくいくって信じてたのに、デバッグが一番気が滅入る作業だったなぁ…

Hacker Newsで議論の続きを見る