水島雄太のブログ

個人的かつ雑多なブログです。

20180315

SEGA master system の仕様について

SEGA master systemJavaScriptで書かれたエミュレータ 

[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。