Pokémon Jade Pikachu 解析レポート
ステージ1終了時クラッシュの調査記録
このサイトについて
Pokémon Jade (Special Pikachu Edition) で、ステージ1終了時に発生するクラッシュを調査し、修正パッチを作成するまでの記録です。 原因の切り分け、ROMの静的解析、エミュレーター上での動的検証、IPSパッチの生成方法を目的別に読めるように整理しています。
動的解析により、クラッシュは $241C の2回目のバンク呼び出し内で発生すると特定しました。 修正条件 DE=1400 を組み込んだ修正版ROMで、ステージ1から2への遷移成功を確認済みです。
このリポジトリで案内する範囲では、本作の実行には hhugboyまたはmGBAが必要です。 ROMヘッダーにはMBC1と記録されていますが、実際には非公認の NT-newマッパー でROMの区画を切り替えます。 この方式に対応しない一般的なGame Boyエミュレーターでは、違うROM領域を命令として読み込むため、白画面、画面崩れ、クラッシュなどが発生します。
修正版の動作確認はmGBA 0.10.3で行っています。 EmuHawk 2.11.1のGambatteとSameBoyでは、標準MBC5へ変換した実験版も正常に動作しませんでした。 詳細はEmuHawk互換化の実験をご覧ください。
このサイトは文章、数値、必要最小限の命令例、自作の図表を中心に公開します。 ゲーム画面は、再現条件と表示異常を論評するために不可欠な画像だけを、出所と引用目的を明示して掲載します。 ROM、修正版ROM、パッチバイナリ、動画、セーブデータ、ステート、抽出素材、詳細な派生ダンプは公開しません。 詳しくは公開方針と権利表示をご覧ください。
目的別の読み方
このゲームの正体・成立経緯を知りたい
ゲーム背景調査レポートをご覧ください。 同名のTelefang系bootlegとの区別、Makon Soft作品としての系譜、ゲーム内容、言語版、既知のクラッシュ、特殊マッパー、未解明点を、ネット資料とROMの直接観測を分けて整理しています。
結論と修正根拠を知りたい
調査と修正の全記録をご覧ください。 クラッシュの再現から原因の切り分け、失敗した試行、DE=1400 への修正、ステージ2への遷移確認までを1本にまとめています。
ROM内の処理の流れを知りたい
ステージ遷移の静的解析をご覧ください。 状態変数、分岐先、レベル番号の変換、修正処理の配置をステージ終了後の流れに沿って説明しています。 再検証に必要な範囲の命令例を本文中に掲載しています。
mGBAで調査を再現したい
エミュレーター確認手順をご覧ください。 監視する状態変数、ブレークポイント、各地点で記録する値と期待される実行経路を簡潔にまとめています。
IPSパッチの仕組みと作成方法を知りたい
IPSパッチ作成ガイドをご覧ください。 変更する12 bytes、IPSファイルの構造、専用スクリプトによる生成手順、対象ROMの誤識別を防ぐ検査を説明しています。
カートリッジ画像を確認したい
three.jsを用いたカートリッジの3D画像および撮影画像はカートリッジ 3Dビューアーからご覧ください。
調査状況
| 項目 | 状態 | 内容 |
|---|---|---|
| 対象ROMの同定 | 確認済み | サイズとSHA-256を固定 |
| ステージ遷移の静的解析 | 整理済み | 状態変数、主要ルーチン、修正処理を整理 |
| エミュレーターでの再現確認 | 確認済み | $240A 到達後、$241C 内で不正命令へ逸走 |
| 原因の確定 | 確認済み | NT-newマッパー用バンク指定と破壊された E の再設定不足 |
| 修正パッチ | 確認済み | 修正版ROMでステージ1から2への遷移に成功 |
確認済みの範囲
- 対象ROMのサイズとSHA-256
- mGBA 0.10.3上での未修正ROMのクラッシュ再現
$241Cの2回目のバンク呼び出しへの問題範囲の絞り込み- セレクター
14、処理番号00による呼び出し先からの正常復帰 DE=1400を組み込んだ修正版ROMでのステージ1から2への遷移- IPSを元ROMへ適用し直した結果と、修正版ROMのbyte単位での一致
- ステージ1から5までの各ゴールでの正常な処理
未確認の範囲
- hhugboyや、mGBA 0.10.3以外のバージョンでの互換性
- 別のIPS適用ツールで作成した修正版ROMの一致