CMT 周りの不具合?

CMTから読み込むときは、おおざっぱに言うと通常下記のような手順でやります。

  • CMT LOAD OPEN
  • CMT からデータ取得
  • 上記を、読み込みたいバイト数分、ループで繰り返す
  • CMT LOAD STOP

もちろん、バックグラウンドでは、CMT割り込みで、割り込みルーチンの中で、SUB CPUから、CPUにデータを転送しています。



ただし、CMT LOAD STOPの前に、CMT SAVE STOPを入れた場合。。。まぁ、普通は入れないんですが、他のエミュレータでは問題がないのに、iP6 Plus では問題が発生します。(汗)


どうやら、CMT SAVE STOPのルーチンは、実際にSUB CPUに終了命令を送る前に、結構長いループが行われて居るみたいですね。

STOPキーが押されていたら、そのループは即座に抜け出すのですが、通常はおささってないので、指定されたループ回数をこなそうとするので、メイン処理が停滞します。


その間に、次のCMT読み込み割り込みがかかって、ファイルの最後に到達しているので、CMT読み込み中に、STOPキーが押されたときと同じ、割り込み処理へ移行、Break in xx になるようです。(汗)


ところで、CMT割り込みって、定期的に発生するようになっているみたいですね。。(^^;
SUB CPU側が、データが手に入ってから、CPUに対して割り込みをかけるというのが、普通の考え方ですが。。
RS-232Cだと、まさにそういう考え方でしか、実装できないと思われ。。

この時代のパソコンでは、そこまで出来なかったのかなぁ。。
よく分かりません。(^^;;


いずれにしても、思い出した頃に、再開するので、頭を昔に戻すのが大変ですね。(^^;;