#017

【PC88,Z88DK】C言語でゲームループとFPS制御【PC88,Z88DK】C言語でゲームループとFPS制御戻る 設定


概要

 I/Oポートの40Hを読み込むと、5bit目に垂直帰線信号がセットされているので、それを監視する回数でFPSを制御します。

【参考】PC-8801覚え書き(外部サイト)

 40Hをインポートし、その値が変化するまでwhile文で監視します。

ソース

#include <stdio.h>
#include <stdlib.h>
#define TRUE    1

void vblank()
{
    while( inp( 0x40 ) & 0x20 ){}       //  垂直帰線期間
    while( !( inp( 0x40 ) & 0x20 ) ){}  //  垂直表示期間
}

void main()
{
    for( int i = 0; TRUE; i++ ){
        for( int j = 0; j < 15; j++ ){  //  60/15=4FPS
            vblank();                   //  垂直帰線期間になるまで待つ
        }
        printf( "%d ", i );
    }
}

解説

 vblank()関数を定義し、これを呼びたすと垂直帰線期間が開始されるまで待ちます。I/Oポート40Hの取得結果5bit目は、0:垂直表示期間、1:垂直帰線期間です。

 最初の垂直帰線期間を待つ処理は要らないような感じもしますが、ごく短い間隔でこの関数を連続で呼ばれた際の対策です。

 垂直帰線を15回待ったら、変数「i」がインクリメントされるため、フレームレートが正確に60であれば、60/15=4FPSとなります。が、実際のフレームレートの値は60ピッタリではないと思われます。


関連記事

#020 【PC88,Z88DK】C言語で任意の座標に文字描画

#013 【PC88,Z88DK】C言語でHelloWorld

#010 【Z88DK】Z88DKの導入方法


最終更新日時:2022/05/03
戻る戻る back