私がなんとなく、分かっている(つもり)の内容を書きます。
間違っていたら、お教え下さい。
割り込み許可状態
- メインCPUから、サブCPUに、コマンド6 を送る(コマンド6 は、ゲームで使うキーが押されているかどうかを、調査するコマンドです。)
- サブCPUは、押されているかどうかを調査してから、メインCPUに割り込みをかける
- サブCPUが、割り込みベクターをデータバス(実際には、8255のポート)に送出する。このコードが、16H
- メインCPUは、割り込み要求を受け取り、ベクター番号を取り込んで、割り込みルーチンへJP
- 割り込みルーチンの中で、サブ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を引っこ抜いて下さいだと、敷居が少し高いですね。。。汗