N88BASIC では、プログラムの実行速度は機種の速度に依存しています。なので、空ループを用いてウェイトをとっていては、機種間で実行速度に差が出てしまいます。
ここでは、実行速度差を小さくする方法を何通りか紹介します。
FOR ループの中に T$=TIME$ の一文を入れます。TIME$ の取得はどの機種でも時間がかかるため、機種間での差が小さくなります。
この方法を用いる場合、あらかじめ 1 秒間で T$ = TIME$ が何度実行できるかを調べておきます。あとは実際にウェイトをかけるときにその回数だけループすれば約 1 秒間のウェイトをかけられます。
先頭の方に次のコードを記述します。
T=0:T$=TIME$:WHILE T$=TIME$:WEND:T$=TIME$:WHILE T$=TIME$:T=T+1:WEND
実際にウェイトをかけたいところに次のコードを記述します。次の例ではサブルーチンにしています。
*WA:FOR WA=0 TO T:WA=WA-1:T$=TIME$:NEXT:RETURN
繰り返す回数を半分にすれば、約 0.5 秒のウェイトとなります。このようにしてウェイトの時間を設定できます。
画面書き換えの垂直同期信号の周期を利用する方法です。IO ポートのアドレス A0H の 5 ビット目を読むことにより、垂直同期信号の発生を知ることができます(ON の場合は信号が発生)。垂直同期の周期はだいたい 1 秒間に 60 回前後ですが、機種により多少異なります。
次の例では、約 0.5 秒のウェイトをとっています。
FOR I=0 TO 30:WHILE(INP(&HA0)AND 2^5)>0:WEND:WHILE(INP(&HA0)AND 2^5)=0:WEND:NEXT
ハードウェアのタイマを利用する方法で、BASIC だけでは実現できませんが、一番正確な方法です。BLOAD 命令などによりマシン語のプログラムを呼び出し、利用します。このサイトでも Timer Driver というプログラムを公開していますので、よかったら使ってみてください。