X1turboのVBlankタイミングについて
X1turboの垂直同期信号について
ずっと気になっていたVBlank周りの時間を計測してみます。
X1turboは IOポート 1a01h PB7に垂直帰線期間信号(VBlank)が出ています。
これはVBlankに入ると Lowになり、VBlank外では Highになります。
これをポーリングしてVBlankを検出します。
これがどの位のタイミングで変化しているかが気になっていたのです。
CPUのクロック数計測
まずは、CPUのクロック数で計測を行います。
実際は計測以外のコードも入っているので、合計値は少なめな値です。
対象はエミュレータ(武田さんエミュ)と実機(X1turboZIII)で計測します。
計測結果
Emu/実機 | VBlank 期間(msec) | VBlank外 期間(msec) | 合計(msec) |
---|---|---|---|
24KHz (Emu) | 1.32 | 15.52 | 16.84 |
15KHz (Emu) | 2.96 | 12.07 | 15.03 |
24KHz (実機) | 1.37 | 15.51 | 16.88 |
15KHz (実機) | 3.00 | 12.07 | 15.07 |
- Emuと実機ではほぼ差がありませんでした。
- Width40,Width80でも計測しましたが差はありませんでした。
- 15KHz,24KHzでVBlank時間に倍近い差があります。
15KHz, 24KHzで意外にも差があるのが判りました。
であれば、60回x60秒=3600回の長いフレームを計測してみます。
60秒にどれだけ近いか、という事になりますね。
以下が結果です。
Emu/実機 | 実測時間(sec) | 同期時間(msec) |
---|---|---|
24KHz(Emu) | 1:05 | 18.05 |
15KHz(Emu) | 0:58 | 16.11 |
24KHz(実機) | 1:05 | 18.05 |
15KHz(実機) | 0:58 | 16.11 |
24KHzにけっこう大きなずれがありますね。
レースゲームなどでタイム計測をVBlankで行うと思わぬずれが発生しそうです。
まとめ
この計測が意味するところは、X1turboのVBlankは60fps程度かと思っていたら、
15KHzは 約 62fps、24KHzは 約 55fpsという結果でした。
最近のLEDディスプレイでも、640x400表示が可能なものは、
水平周波数 24.8KHz 垂直周波数 56.3Hzだったので
これで、ちょっとすっきりしました。
今度は、X1 / X1turbo / X1turboZ では異なるかどうかが気になりますね。
(CRTCの値が同じなので変わらないハズですが)