タイトル画面でクラッシュする自作マスターシステム ROM をデバッグする
使うタイミング: WLA-DX でビルドした ROM が頭の中では正しく動くはずなのに、Gearsystem のタイトル画面でフリーズする場合。
前提条件
- MCP を有効にしてビルドした Gearsystem — drhelius/Gearsystem をクローンし、MCP_README.md の手順に従ってビルド
- ROM と対応する .sym シンボルファイル — アセンブラ(WLA-DX、asm6 など)の出力
フロー
-
ヘッドレスで起動し、クラッシュ箇所にブレークポイントを設定するGearsystem MCP で ROM を起動して、ラベル
init_vdpに CPU ブレークポイントを設定してから実行して。✓ コピーしました→ ブレークポイントで実行が停止する -
CPU と VRAM の状態を検査するZ80 レジスタと VRAM の先頭 32 バイトを表示して。初期化のこの時点でおかしいところはある?✓ コピーしました→ レジスタダンプと、期待値と実際の値に関する所見
-
ステップ実行しながら特定のメモリ領域を監視する$C000 にメモリアクセス ブレークポイントを追加して、そこに書き込みが発生するまでステップ実行して。✓ コピーしました→ 問題の命令で停止する
結果: 根本原因(例:VRAM が安全な状態になる前に VDP レジスタに書き込んでいた)と、正確な命令アドレスの特定。
注意点
- シンボルが読み込まれていない — アドレスが不透明になる — .sym が正確な ROM ビルドと一致していることを確認し、必要に応じて再ビルドして整合性を取る
- タイミング関連のバグが実機でのみ再現し、エミュレーターでは再現しない — エミュレーターには限界がある。バスタイミングのエッジケースについては、実機の SMS でテストすること