Open2
simavr: エミュレータの動作速度を実機相当に制限したい

色々な方法が考えられるが、まぁホストPCで50Hz程度のタイマを廻してフレームを作り、フレーム内では16MHz/50Hz = 320kサイクルしか実行しないというように制御するのが良いんではないだろうか。

実装した
結局、Win32のマルチメディアタイマが今のところ一番お手軽なのは変っていないようだ。 timeBeginPeriod
で精度を宣言し、 timeSetEvent
でcallbackを登録する。今回はCygwin上で書いているので、タイマ部分以外は普通にpthreadで書いている。
(Cygwinにはtimerfdのサポートも入っているけど精度が謎だったので今回は避けた。)
もっとも、Windows 11以降はマルチメディアタイマは自動的に間引かれるようになったので、BGに廻したりするケースではあまり有効でないかもしれない。
Windows 11以降、ウィンドウ所有プロセスがエンド ユーザーに対して完全に隠された、最小化された、またはその他の方法で目に見えない、または聞こえない状態になった場合、Windows は既定のシステム解像度よりも高い解像度を保証しません。