MSXのVBLANK待機ルーチン
初代MSXのZ80アセンブリによる実装アプローチ。
JIFFYカウンタを使う方法(標準ワークエリア利用) 編集
MSXのBIOSワークエリアには、VBLANKごとにインクリメントされる JIFFY(アドレス $FC9E)があります。これを監視して値が変わるまでループするのが最も簡単です。
; VBLANK待機ルーチン
WAITVBLNK:
LD A,(0FC9EH) ; 現在のJIFFY値を取得
WVBL1:
CP (0FC9Eh) ; 変化するまで待つ
JR Z,WVBL1
RET
BIOS依存なので機種差が少ない。
VDPステータスレジスタを直接読む方法 編集
VDPポート $99(ステータスレジスタ)を読み、VBLANKフラグ(ビット7)を監視します。
WAITVBLNK_VDP:
IN A,(99h) ; VDPステータス読み出し
RLA ; ビット7をキャリーに
JR NC,WAITVBLNK_VDP
RET
BIOSを経由せず高速に動作。
割り込みフラグ方式 編集
VBLANK割り込みでフラグを立て、メインループはそのフラグが立つまで待機する方法。 ゲームやデモではこの方式が多いです。
; 割り込みハンドラ
VBLANK_INT:
LD A,1
LD (VBLFlag),A
EI
RETI
; メインループ
MainLoop:
LD A,(VBLFlag)
OR A
JR Z,MainLoop
XOR A
LD (VBLFlag),A
; --- ここで画面更新処理 ---
JP MainLoop