ワークエリアの「JIFFY(0FC9EH)」が、垂直帰線割り込み毎にインクリメントされるので、それを監視する回数でFPSを制御します。
【参考】2章 割り込み - MSX Datapack wiki化計画(外部サイト)
0xfc9eの値を取得し、その値が変化するまでwhile文で監視します。
#include <stdio.h>
#define JIFFY 0xfc9e
#define PEEK( off ) ( *(unsigned char*)( off ) )
#define TRUE 1
void main()
{
for( int i = 0; TRUE; i++ ){
for( int j = 0; j < 15; j++ ){ // 60/15=4FPS
unsigned char b = PEEK( JIFFY );
while( b == PEEK( JIFFY ) ){} // 変化があるまで監視
}
printf( "%d ", i );
}
}
JIFFYの値は2バイトあるのですが、この目的では下位1バイトだけで問題ないので1バイトのみ取得しています。
垂直帰線を15回待ったら、変数「i」がインクリメントされるため、フレームレートが正確に60であれば、60/15=4FPSとなります。が、実際のフレームレートの値は60ピッタリではないと思われます。
#019 【MSX,Z88DK】C言語で任意の座標に文字描画
#012 【MSX,Z88DK】C言語でHelloWorld
#010 【Z88DK】Z88DKの導入方法