BASIC 5Z001 Tips

あまり参考にならないかも

1.音楽再生が終わったかを判定する

PEEK($37E7)で得られる値が

 0の時、再生していない。

 1の時、再生中

です。

再生中でもMUSIC命令、NOISE命令を実行できますが、現在演奏中の音楽が終了するまで待たされます。

2.グラフィック画面上の任意の座標のPCGを変更する

MZ-1500でのBASICのグラフィック画面モードは1000個のPCGを画面に敷き詰めることによって実現しています。

1024個のPCGが登録できるため、残り24個を別途グラフック画面モードで定義できますが、

画面上のグラフィックとして表示しているPCGを変更、参照するには以下の方法がありました。

変数X、Yが変更したいPCG座標とします。

INIT "CRT:G":CLS3

 ~ グラフィック命令で画面描画 ~

POKE $108C, $1

F = (40 * Y) + X+1

FONT$(2, F) = HEXCHR$( ”~PCGデータ文字列~”)

POKE $108C, $0

RAMアドレス $108Cにグラフィックモードかイメージモードかの値が入っています。

素知らぬ顔して書き換えて、終わったら元に戻しておきましょう

3.BSDファイルにバイナリデータを書込み・読出しする

BSDファイルは文字列データ・数値データをアスキー形式で記録してBASICから書込み、読出しが可能です。

以下のようにするとバイナリデータで書き込みが出来ます。

10 WOPEN #1, "TEST"

20 PRINT #1, HEXCHR$("00010203040506070809AABBCCDDEEFF")

30 CLOSE #1


バイナリデータ "00010203040506070809AABBCCDDEEFF"の16バイトがBSDファイル に書き込まれます。

通常、文字列直でPRINT#で書き込むと単に32バイトのアスキー文字列として書き込まれます。

なので16バイト節約できます。


しかし、読出しには注意が必要があります。

なぜなら元々BSDファイルはアスキー形式での書き込みを前提にしており、1つのデータの終了を 0x0Dで判定しています。

バイナリデータ中に0x0Dが出てくるとバイナリデータの途中で終了と見なされてそこまでのバイナリデータが読み取られます。

なので読出しは例えば以下のよう配慮する必要があります。

10 ROPEN #1, "TEST"

20 D$=""

30 INPUT #1, A$ : D$ = D$ + A$ : IF LEN(D$) < 16 THEN D$ = D$ + CHR$($D) : GOTO 30

40 CLOSE #1