P6 のSTICK 割り込み について

私がなんとなく、分かっている(つもり)の内容を書きます。
間違っていたら、お教え下さい。

割り込み許可状態

  • メインCPUから、サブCPUに、コマンド6 を送る(コマンド6 は、ゲームで使うキーが押されているかどうかを、調査するコマンドです。)
  • サブCPUは、押されているかどうかを調査してから、メインCPUに割り込みをかける
  • サブCPUが、割り込みベクターをデータバス(実際には、8255のポート)に送出する。このコードが、16H
  • メインCPUは、割り込み要求を受け取り、ベクター番号を取り込んで、割り込みルーチンへJP
  • 割り込みルーチンの中で、サブCPUからのデータを受け取る。

というのが、大まかな流れですよね。。
以上が、割り込み許可だった場合の話。


割り込み禁止状態

  • メインCPUから、サブCPUに、コマンド6を送る
  • サブCPUは、押されているかどうかを調査してから、メインCPUに割り込みをかける
  • サブCPUが、割り込みベクターをデータバス(実際には、8255のポート)に送出する。このコードが、16H
  • しかし、割り込みは禁止されているので、CPUは割り込みを無視する(?)
  • どうやって、押されたか分かるようになるかというと、メインCPUは、割り込みベクターの、16H が送られてくるのを待つ
  • 16Hが来たら、その後の、サブCPUからのデータを受け取る。

エミュレータの実装は?

もともとの、iP6 には、そういう機能が実装されてなかったので、それを受け継いでいる iP6 Plusも、ハドソン系などの割り込み禁止のまま動くゲームは、全くキー入力出来なくなる。(一応、対応しようとした残骸は見つかりますが。。。)


割り込みが禁止の時は、8255のステータスビットを見ながら、違うビットを、ON/OFFしたりして、16Hを送り出したことにして。。等としないといけないらしい。


あと、エミュだと、キーの調査自体は、一瞬で完了するので、サブCPUの返答が、一瞬でかえってくるように、実装しがちだが、一瞬で帰すのは良くないとか、聴いたような気がする。


やはり、サブCPUも、普通に内部プログラムを実行して動いている、一つのCPUであり、BUSYになったり、コマンドを受け取れるようになったり、色々状態遷移をしているのだけど、あまり速すぎると、良くないらしい。

それに、8255のステータスのON/OFFが、絡んでくるので、ややこしい。。(^^;

あと、下手にいじると、他のゲームが起動しなくなったりして。。(((( ;゚д゚))))アワワワワ

iP6 Plus も対応出来る? ま、まぁ。。不可能ではないと思いたいですけどねぇ。。(^^;; 

サブCPUも、エミュレートしたい?

あと、サブCPUの内部プログラムは、サブCPUの内部ROMに書き込まれていて、P6起動中に、メインCPUから読み取れない。。どうするかというと、サブCPUを物理的に引っこ抜いて、特殊な機器で読み取るらしいです。。


サブCPUの内部ROMが有れば、そのCPUをエミュレートするという手もないわけではないですが、そのROMの取り込みは、サブCPUを引っこ抜いて下さいだと、敷居が少し高いですね。。。汗