ある時間からの経過時間を、10 ミリ秒単位で計測します。この機能を使うことにより、異なる機種間で同速度で動くプログラムを作ることができます。
N88BASIC は強力なグラフィック命令を持っているので、手軽にゲームを作れます。しかしせっかくゲームを作っても、BASIC には一定時間を計る命令がないため、機種が異なると同じ速度では動きません。これはアクションゲームなどでは大きな問題です。今までは、異なる機種で実行する際にはプログラムを修正していましたが、このソフトウェアを使えばその必要はなくなります。
このソフトウェアは、BASIC から呼び出す機械語関数です。まず、この機械語関数を読み込むスペースをメモリ上に確保する必要があります。CLEAR 命令で機械語領域を確保してください。機械語領域の他にも、グラフィック VRAM の余白などでもよいですが、ハードウェア割り込みによって常に参照されるので、安全な場所にしてください。CLEAR 命令で確保する場合は、次のように記述します。
CLEAR &H10
次に、呼び出す機械語関数の実行アドレスを定義します。この機械語関数のエントリーポイントは、オフセットアドレスの 0番地(つまり、先頭)です。次のように記述してください。
DEF USR0=0
あとは、プログラム中で関数を呼び出すだけです。
この関数は 0、1、2 のいずれかの引数をとります。それぞれの機能は次の通りです。
USR0( 0 ) タイマーを初期化、およびクリアします。最初に実行する必要があります。
USR0( 1 ) タイマーを終了します。プログラムの終了以前にかならずこの機能が実行されるようにしてください。
USR0( 2 ) 現在のタイマーの値を返します。これは、USR0(0) でタイマーをクリアしたときからの経過時間(単位は 10 ミリ秒)です。
具体的には、次のように使います。
*MAIN 'メインルーチンの先頭 A=USR0(0) : 処理 : WHILE USR0(2)<50:WEND GOTO *MAIN
この場合、USR0(2) が 50 以下である間ウェイトがかかります。単位は 10 ミリ秒なので、この場合だと 0.5 秒待つことになり、秒間 2 フレームで動作することになります。処理が追いつかない場合はノーウェイトとなります。
引数 0、1 の場合の戻り値は不定で、意味を持ちません。しかし、BASIC の仕様上、戻り値をかならず使用しなければならないので
A=USR0(0)
等としてください。