1と2のリビジョン間の差分
2020-11-06 07:37:03時点のリビジョン1
サイズ: 2283
編集者: keitaroh
コメント:
2020-11-06 07:38:24時点のリビジョン2
サイズ: 2317
編集者: keitaroh
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 16: 行 16:
 * 信号が終わると、メインCPUはコンディションコードレジスタの IRQ Mask と FIRQ Mask を1に、ダイレクトページレジスタの値を $00 に設定する。  * 信号が終わると、メインCPUはコンディションコードレジスタの IRQ Mask と FIRQ Mask を1に(つまりIRQとFIRQを禁止)、ダイレクトページレジスタの値を $00 に設定する。

概要

  • メインCPUのプログラム群は、概ね「起動時処理部」/「テストモード処理部」/「ゲームモード処理部」の三つに大別できる。
  • 電源を入れるとメインCPUにリセット信号が送られ、ROMの割り込みベクタに書かれた起動時処理部の実行アドレスに制御が移る。
  • 起動時処理部では簡単なセルフテストが行われる。RAM/VRAMの読み書きテスト、垂直同期割り込みのテスト、プログラムROMのチェックサム確認など。
  • その後ディップスイッチの設定を確認し、オペレータがテストモード(サービスモード)を起動しようとしていたならテストモード処理部へ実行を移す(テストモード画面が描画される)。
  • そうでなければゲームモード処理部へ実行を移す(最終的にタイトル画面が描画される)。

起動までの流れ

メインCPUの起動

  • リセット信号が送られると、メインCPUはいったん動作を停止して信号が終わるのを待つ。
  • 信号が終わると、メインCPUはコンディションコードレジスタの IRQ Mask と FIRQ Mask を1に(つまりIRQとFIRQを禁止)、ダイレクトページレジスタの値を $00 に設定する。
  • そしてメモリ上の割り込みベクタテーブルより、RESET信号受付時の実行アドレスを読みだして($FFFE~$FFFFにある)プログラムカウンタレジスタへ代入し、新たな実行先とする。
  • この新たな実行先が起動時処理部である。初期版ROMでは $D3EE、後期版ROMでは $D3F3 から始まっている。

起動時処理部

  • まず初めに“ANDCC #$FF”を実行する。
    • ……のだが、筆者にはこの命令の意図がわかっていない。
    • ぶっちゃけただのtypoのような気がするのだが、6809での開発経験がないので断定しかねるところ。
  • 次に 16XX に対して、メインCPUへの垂直同期割り込みの停止と、サウンドCPU/58XX/56XXの停止を指示する。
  • そのあと、RAM/VRAM/共有RAMに対して読み書きテストを行う。

メインCPUのプログラム (最終更新日時 2020-11-11 00:25:38 更新者 keitaroh)