X1turbo Agency

X1turbo Agency ブログ

8bitコンピュータ X1turboの探求サイト

X1turbo Agency

X1turboのVBlankタイミングについて

X1turboの垂直同期信号について

ずっと気になっていたVBlank周りの時間を計測してみます。

f:id:x1turbo_agency:20200530205515p:plain
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の値が同じなので変わらないハズですが)