うーむ、タイマが嫌な感じ。Ruputer は分解能の最小タイマは 64Hzなんで、それ毎にエミュレーションを中断させて割り込ませないといけないけだ。この辺の話は Console/Emulator Programming に書いてある。わたしも参考にしました。

つまり、64Hz だけのCPUサイクルを実行させて64Hzタイマ登録ルーチンを実行する。そして、エミュレートに余った時間は sleep し、他のタスクに使用させるようにする。

で、ここで問題なのが sleep 。余った時間はいくつになるかは不明。Windows だと、Sleep で高精細に待てるが、Linux だと、10ms 単位程度でしか待てない(nanosleep, select 等でも)。ということで、少々のレトリックを使うことになるのかもしれない。

もちろん、CPUブン回してビジーウェイトするという方法もあるけど Ruputer 程度のCPUやグラフィックにそれを行なうのは嫌。

レトリックの話はまた今度。というか、『ブレゼンハム法』時間版みたいな感じですけどね。

コメントを残す

メールアドレスが公開されることはありません。