カピバラ父さんのプログラミング処方箋~垂直帰線期間

X68000に限らず、モニタディスプレイに映像を表示するコンピュータシステムを 使う上で、「走査線」を意識することは必須です。

走査線はディスプレイに映っている映像を1ドットずつ描いているものの正体で、 非常に高速に、規則正しい動きをしています。

肉眼では見えませんが、CPUからその動きを監視でき、タイミング調整に有用なので、 理解を深めておくことをおすすめします。

横の動き

走査線を理解するのに「光の色が変化する電球を掲げた台車」をイメージしてみます。

この台車は、表示画面の左端から右端まで、直線レールを比較的のんびりと等速直線運動で転がります。

右端についたら、台車ごと背負って左端まで猛ダッシュで戻り、折り返して助走します。

もう少し厳密に言うと、

  1. のんびり直線運動は約22.09マイクロ秒
  2. 猛ダッシュ折返し助走に約9.66マイクロ秒
かかります。

これは高解像度モードの場合で、1周期は約31.75マイクロ秒、周波数はその逆数の31.5キロヘルツになります。

また、「のんびり直線運動」の間を「水平表示期間(データ表示期間)」と言い、 「猛ダッシュ折返し助走」は「フロントポーチ」「同期パルス」「バックポーチ」の合計です。

縦の動き

横の動きをしているレール全体も、上から下へ等速で降ろし、下の端に達したら猛ダッシュで上に巻き返します。

これも厳密に言うと、

  1. 等速降下は水平走査512回分(約16.25ミリ秒)
  2. 巻き返しは水平走査56回分(約1.78ミリ秒)
となります。

これも合計で1周期は約18ミリ秒、周波数は55.46ヘルツです。60ヘルツよりも1割くらい遅いことに注目です。

V-SYNCの監視方法

横の動きをH-SYNC(水平同期)、縦の動きをV-SYNC(垂直同期)と言います。

1画面分の描画開始と終了は、V-SYNC状態を監視すれば分かるため、 この動きにメインルーチンの周期を一致させると、ゲームの動きが安定します。

vsync:
	@@:
	btst.b	#4,$e88001	* 帰線期間から抜けることを確認
	beq	@b

	@@:
	btst.b	#4,$e88001	* 表示期間が終わるまで待つ
	bne	@b
	rts

$e88001は、MFP(マルチファンクションペリフェラル)のGPIPデータレジスタで、 4ビット目に、垂直表示期間なら1、垂直帰線期間なら0が反映されています。

上記のvsyncをメインルーチンからスーパーバイザーモードで呼び出せば、垂直帰線期間の一定のタイミングまで 待ってくれますので、フレームレートが安定することが期待できます。

ただ、この方法では空ループで毎フレーム最長18ミリ秒もCPUを無駄にしてしまいますので、 実用上は、割り込みを使って合わせる方法を使います。 その説明は長くなりそうなので、一旦区切ります。


プログラミング処方箋へ

Copyright©2026 カピバラ父さん