■グラフィックVRAM(LEDTP)について

 表示ドットバッファ(LEDTP)は、表示されたグラフィックを保管している「グラフィックVRAM」です。
このLEDTPは以下の様に構成されています。

上記表のX・YはPSETやPOINT文に対応してます。LEDTPもEDTOPと同様に仮想スクリーン8行分用意されています(実際の表示は4行まで)。
縦8ドットで1バイトを構成しています(つまり、1バイトで縦8ドット:横1バイトを表現出来ます)。
試しにダイレクトモードで、POKE&H6201,214 を実行すると、画面左上の縦8列が変化します。
X座標・Y座標に対するアドレスの求め方は &H6201+192*Y+X になります。

 このグラフィックVRAMの応用ですが、プログラム中に上記アドレスにデータの書き込みを行っても表示は更新されません。
データの書き込みを行った後、システムコール(ROMサブルーチン)のDOTDS(&H022C)をコールし、表示を更新を行ってください。
このシステムコールはBASICからでも呼び出し可能です。DOTDSの多用すると画面がチラつくので
全ての表示データの書き込みを終えてからコールするようにしましょう。

 さらに、"BSAVE ファイル名,&H6201,768" とすると上画面(Y=0〜3)までの画面のスナップショットを撮る事が出来ます(768=192*4)。
保存したファイルを "BLOAD ファイル名,&H6201"でロードして CALL &H022C を実行すると画面を呼び出す事が出来ます。
(ダイレクトモードでは、CALL文は不要。)
ちなみに入力中のテキスト画面のスナップショットをロードしても、あくまで画面イメージが呼び出されるだけでテキストの入力を
続行出来るわけではありません(テキスト入力は、EDTOPを参照する為).


これを利用すれば高速画面切り替え、アニメーションを行う事が出来ます。ゲームに利用価値大です!


サンプルプログラム
 以下のプログラムは「巨大戦艦1000C」のBASIC部分です。実画面分の画像データの「GRAPHIC.DAT」を行50,90で呼び出しています。
ロード先アドレスをずらす(変数DX)事によって、巨大戦艦が移動しているように見えます。
大容量の画像データのやりとりもPB-1000ならBASICだけで簡単に行えるのです。

20 PRINTREV;:CLS:LOCATE4,0:PRINTREV;"*** SPACE SHIP 1000C ***":LOCATE9,1:PRINTNORM;"DOT ADVENTURE";REV:LOCATE8,3:PRINTNORM;"(C)1990 RETURNS";:GOTO130
30 CLS:LOCATE9,0:PRINTREV;"PLAYER READY ?";:LOCATE12,2:PRINT"LEFT =";M:FORI=0TO500:NEXT
40 CLS:X=0:Y=0:DX=&H6221:Q=-1
50 BLOAD"GRAPHIC.DAT",DX:CALL&H022C:IF POINT(X,Y)=1 THEN 80 ELSEDRAW(X,Y):MX=X:MY=Y:X=X+1:K$=INKEY$:Y=Y-(K$="" AND Y<31)+(K$<>"" AND Y>0)
60 DX=DX+Q:IF DX=&H6211 THEN Q=1 ELSEIF DX=&H6221 THEN Q=-1
70 DRAWC(MX,MY):IF X>191 THEN 90 ELSE 50
80 M=M-1:IF M>0 THEN LOCATE0,0:PRINT"MISS !":BEEP:FORI=0TO500:NEXT:GOTO 30 ELSELOCATE0,0:PRINT"GAME OVER":BEEP:BEEP:FORI=0TO1:K$=INKEY$:I=-(K$=" "):NEXT:GOTO10
90 FORI=10TO0STEP-1:BLOAD"GRAPHIC.DAT",DX:CALL&H022C:FORJ=0TO(I*10):NEXTJ:CLS:FORJ=0TO10:NEXTJ,I:FORI=1TO30:FORJ=0TO3:LOCATEI,J:PRINTCHR$(233);:NEXTJ,I
100 FORI=0TO1:LOCATE0,0:IF I=0 THEN PRINT REV; ELSE PRINT NORM;
110 LOCATE7,1:PRINT"CONGRATULATIONS !!":FORJ=0TO100:NEXTJ,I:GOTO100
120 FORI=0TO10:K$=INKEY$:I=I-(K$<>"")*40:NEXT:IFK$<>""THEN M=3:RETURN30 ELSERETURN
130 LOCATE8,2:PRINTREV;"HIT SPACE BAR !";NORM;:GOSUB120:LOCATE8,2:PRINTCHR$(5);:GOSUB120:GOTO130