
書き込み画面モードって何だろう?
書き込み画面モードって何だろう?
「表をつくってみよう」のページで、描画のときの各表示モジュールの可能な範囲は表1のようになると書きました。
256X16dot | ⇒ 横:0~255 縦:0~15 |
256X64dot | ⇒ 横:0~255 縦:0~63 |
384X32dot | ⇒ 横:0~383 縦:0~31 |
512X32dot | ⇒ 横:0~511 縦:0~31 |
しかし、「Macro操師」"ヘルプ"のLineやPset、あるいはソフトウェア仕様書にはこう書いてあります。
256X16dot | ⇒ 横:0~2047 縦:0~15 |
256X64dot | ⇒ 横:0~511 縦:0~63 |
384X32dot | ⇒ 横:0~1023 縦:0~31 |
512X32dot | ⇒ 横:0~1023 縦:0~31 |
どちらかが間違っているのでは?と思った方もいるかもしれません。 実は、GU-3000シリーズでは、書き込み画面モードを表示画面モードと全画面モードから選択することができます。 表示画面モードでは、カーソルが表示エリアと非表示エリアで別々に動きます。
書き込み画面モードとカーソルの動き
表示画面モードになっているときは表1が正しいので正解です。 設定をかえない状態(デフォルト)では、表示画面モードになっています。
全画面モードでは、全表示エリアでカーソルが動きます。全画面モードのときは表2が正解です。
書き込み画面モードの選択
書き込み画面モードを選択するためには、Printを使います。
プログラム13
Sub Start()
Cursor 0 , 0
Cls
Print &h1F , &h28 , &h77 , &h10 , &h01 '・・・①
Line 16 , 8 , 511 , 63 '・・・②
End Sub
文字でないのにPrintを使うの?と思いましたか? 13-①ではPrintと書くことで、表示モジュールにコードを送ることができます。 それは実は文字に限らないのです。
「"Hello, GU-3000"と表示させてみよう」で、Hello,GU-3000をコードで表すと、
&h48 , &h65 , &h6c , &h6c , &h6f , &h2c , &h47 , &h55 , &h33 , &h30 , &h30 , &h30
となる、と書きました。
コードの&h20~&hFFが文字の表示に割り当てられていて、&h00~&h1Fは別の命令に割り当てられているのです。 Printの後のコードを表示モジュールが認識し、&h20~&hFFならば文字を表示させ、&h00~&h1Fならばその命令に従って動きます。
ソフトウェア仕様書の(全ソフトウェア仕様書とも)20ページの「書き込み画面モード選択」を見てください。
【コード】 1Fh 28h 77h 10h a
とありますね。
つまり、Printの後ろにこのコードを書き込めばよいのです。 "a"に00hを入れれば表示画面モード、01hを入れれば全画面モードが選択されます。 13-①では全画面モードを選択しています。 13-②で(x , y) = (16 , 8)から(x , y) = (511 , 63)の線を描きなさい、という命令がされています。 全画面モードを選択していますので、表2を見ると、範囲内ですから、きちんと表示されます。
もしも範囲外の場合はどうなるのでしょう?
プログラム14
Sub Start()
Cursor 0 , 0
Cls
Line 16 , 8 , 511 , 63 '・・・①
End Sub
プログラム14では書き込み画面モードの選択をしていませんから、デフォルトの表示画面モードになっています。 14-①と表1を比較すると範囲外になってますよね。 プログラム14を書き込むと、"?"と表示されると思います。
ソフトウェア仕様書の(全ソフトウェア仕様書とも)27ページの「ライン/ボックス描画」を見てください。
【コード】 1Fh 28h 64h 11h mode pen x1L x1H y1L y1H x2L x2H y2L y2H
とあります。
modeでライン(00h)か線のボックス(01h)か、あるいは塗りつぶしのボックス(02h)かを選択します。 penは表示をさせるか(01h)させないか(00h)を選択します。 x1L、x1Hは描画開始位置のx座標を16進法で表した値です。
例えば 5ならば0005hなので、x1L = 05h、x1H = 00hとなりますし、420ならば01A4hなので、x1L = A4h、x1H = 01hとなります。 同様にy1Lとy1Hは描画開始位置のy座標、x2Lとx2Hは描画終了位置のx座標、y2Lとy2Hは描画終了位置のy座標です。
そのため14-①をPrintに書き換えると
Print &h1F , &h28 , &h64 , &h11 , &h00 , &h01 , &h10 , &h00 , &h08 , &h00 , &hFF , &h01 , &h3F , &h00
になります。
このとき、表示画面モードでは、&hFFが範囲外のコードであるためキャンセルされます。 そして&h01、&h00は単独でのコマンドでないため無視されますが、&h3Fは文字コードで"?"に対応しているために"?"が表示されるわけです。
書き込み画面モードのまとめ
それぞれの書き込み画面モードの利点は下記のようなことがあげられます。両モードの特徴をよく理解したうえで、使い分けてみてはいかがでしょうか。
表示画面モード
・カーソルが表示エリアと非表示エリアで別々に動くため、見た目に関して、容易に作りたいプログラムを作ることができる。
全画面モード
・ラインやボックスを描くときに分割して書き込む必要がない
・非表示エリアにカーソルがあるとき、1 Byteで表示画面の左上にカーソルを移動させることができる (表示画面モードならば6 Byte必要です)
・表示エリアと非表示エリアを合わせたサイズのビットイメージを一度に書き込むことができる