ROMルーチンにVBLANK待ちがあるので、それを呼び出す回数でFPSを制御します。
【参考】Enri's Home PAGE (mz-80K)(外部サイト)
0DA6HをCALLすると、VBLANKを待って0になったらRETされるようです。
#include <stdio.h>
#define TRUE 1
void main()
{
for( int i = 0; TRUE; i++ ){
for( int j = 0; j < 15; j++ ){ // 60/15=4FPS
asm( "CALL 0x0da6" ); // VBLANKを待つ
}
printf( "%d ", i );
}
}
asm()関数は、引数の文字列をアセンブリ言語として実行します。「CALL」命令は、指定したアドレスのサブルーチンを呼び出します。
VBLANKを15回待ったら、変数「i」がインクリメントされるため、フレームレートが正確に60であれば、60/15=4FPSとなります。が、実際のフレームレートの値は60ピッタリではないと思われます。
#018 【MZ80,Z88DK】C言語で任意の座標に文字描画
#011 【MZ80,Z88DK】C言語でHelloWorld
#010 【Z88DK】Z88DKの導入方法