SUPPORT
h_top333.jpg

書き込み画面モードって何だろう?

書き込み画面モードって何だろう?

 「表をつくってみよう」のページで、描画のときの各表示モジュールの可能な範囲は表1のようになると書きました。

 

表1
256X16dot ⇒ 横:0~255 縦:0~15
256X64dot ⇒ 横:0~255 縦:0~63
384X32dot ⇒ 横:0~383 縦:0~31
512X32dot ⇒ 横:0~511 縦:0~31

 

 しかし、「Macro操師」"ヘルプ"のLineやPset、あるいはソフトウェア仕様書にはこう書いてあります。

 

表2
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必要です)
・表示エリアと非表示エリアを合わせたサイズのビットイメージを一度に書き込むことができる

 


当ウェブサイトでは、お客さまによりよいサービスをご提供するため、Cookieを使用しています。
Cookieを無効にする方法を含め、当社のCookieの使用については「個人情報保護方針」をお読みください。

OK