SEGA master system の仕様について
SEGA master systemのJavaScriptで書かれたエミュレータ
[https://github.com/ymizushi/Miracle:title]
が大変参考になる。
このリポジトリの docs
でほぼ必要な情報を入手することができる。
特に重要なのが、mk3man.pdf
だ。
このドキュメントは以下の章から成り立っている。
- CPU
- VDP(the Video Displya Processor)
- メモリ管理 (the Memory Management System)
- 入出力 (the Input/Output System)
- PSG音源(Programmable Sound Generator)
CPU
- Mk3 は 3.58 MHz の ザイログ Z80A 3.58MHz CPUを使っている
- Z80A は電源ONになったときにリセットサイクルが実行される。ゲーム機のリセットボタンは直接Z80AのRESETを操作することはできず、リセットボタンは入力に対してのソフトウェアポーリングで実現されている。
割り込みシステム
- マスク化不可能割り込み NMI (Non-Maskable Interrupt)
- マスク化可能割り込み INT (Maskable interrupt) の二種類がある。
NMIピンはゲーム機のポーズボタンに接続されており、ポーズボタンを押すことで $66番地のリスタート命令が実行される。
この命令は短銃なサブルーチン呼び出しとして実装されており、プログラムカウンターはスタックにプッシュされ、 $006番地に飛ばされる。
割り込みはエッジ・トリガで、ポーズボタンが押下されたら、一つの割り込みのみ取得することができる。
つまり、連続で割り込みが実行されることはない(前提として、チャタリング回避などのコンデンサがあることが前提と思われる。なので、チャタリング防止のためのコンデンサがMk3にはあるはず)。
NMIの最後の命令は必ず RETN
である必要がある。
ポーズボタンは特定用途で使用する。$0066に制御の移行セットアップ処理を記述する必要がある。
INT => Interrupt IE => Interrupt Enable Bits
今日はCPU。
次は、VDP。