Open2

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

okuokuokuoku

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

okuokuokuoku

実装した

https://twitter.com/okuoku/status/1657316139850924033

https://github.com/okuoku/eve3test/commit/3a70b1c057b6941f37941e564ca706008d3955c5

結局、Win32のマルチメディアタイマが今のところ一番お手軽なのは変っていないようだ。 timeBeginPeriod で精度を宣言し、 timeSetEvent でcallbackを登録する。今回はCygwin上で書いているので、タイマ部分以外は普通にpthreadで書いている。

(Cygwinにはtimerfdのサポートも入っているけど精度が謎だったので今回は避けた。)

もっとも、Windows 11以降はマルチメディアタイマは自動的に間引かれるようになったので、BGに廻したりするケースではあまり有効でないかもしれない。

Windows 11以降、ウィンドウ所有プロセスがエンド ユーザーに対して完全に隠された、最小化された、またはその他の方法で目に見えない、または聞こえない状態になった場合、Windows は既定のシステム解像度よりも高い解像度を保証しません。

https://twitter.com/okuoku/status/1417072495866253314