エミュレーター確認手順

目的は、看板接触からクラッシュまでに最後に到達した境界ルーチンを特定し、修正後に遷移完了を確認することです。

警告hhugboyまたはmGBAを使用してください

本作は、ROMヘッダーに書かれたMBC1ではなく、非公認のNT-newマッパーによる特殊なバンク切替を必要とします。対応しないエミュレーターは、ゲームが指定した区画とは違うROM領域を読み込むため、白画面になったり、データを命令として実行してクラッシュしたりします。

このリポジトリで案内する実行環境はhhugboyとmGBAです。以下のデバッガー手順と修正版の動的確認にはmGBA 0.10.3を使用しています。EmuHawk 2.11.1のGambatteとSameBoyでは正常動作しませんでした。

重要動的確認済み

未修正ROMは $240A に到達後、$241C の2回目のバンク呼び出しから復帰せず、$242A より前にクラッシュします。DE=1400 を与えた手動確認では呼び出し先から $FF9E へ正常復帰し、修正版ROMではステージ1から2への実際の遷移にも成功しました。

監視対象

可能なら書き込み監視(watchpoint)を設定します。

  • C21C: ステージ内状態。終了時に 06 -> 07 を期待
  • C219: 全体状態。終了時に 05 -> 06 -> 00 を期待
  • C21B: 各全体状態内のサブ状態
  • C27D: 論理レベル番号。1面終了時に 00 -> 01 を期待

実行ブレークポイントは次の順に設定します。

  1. 240A — 終了演出の待機
  2. 242A — レベル番号更新
  3. 0C98 — global mode 5 dispatcher
  4. 0CA9 — mode 5初期化
  5. 0D9F — mode 5から6への移行
  6. 0DA9 — global mode 6 dispatcher
  7. 0E64 — 次レベルの内部ID選択

記録してほしい値

各ブレークポイントへ初めて到達したとき、以下を記録します。

  • PC
  • SP
  • AF, BC, DE, HL
  • 現在のROMバンク/マッパー状態(表示できる場合)
  • C219 C21B C21C C27D の4 bytes

クラッシュ時には停止位置のPCと、その直前数命令も記録します。

期待される最短経路

240A -> 242A -> 0C98 -> 0CA9
     -> 0D9F -> 0DA9 -> 0E64

1面終了時、242A 実行後は C27D=01, C21B=00, C219=05 が期待値です。0E64 では変換表により C21A=04 となり、その後 C219=00 へ戻るはずです。

修正版ROMでステージ1から2への画面遷移を確認済みです。画面記録はローカルの非公開検証資料として管理し、公開レポートには含めません。より長期の回帰確認を行う場合は、後続ステージのゴールでも同じ終了演出が正常に動くか確認します。