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