// %第1版第12刷 P197〜P201 // !!!4章 画面表示に関する諸機能  MSX-VIDEOは画面のON/OFFや表示位置の補正など、画面表示に関する種々の細かい設定が可能です。本章では、それらの設定によって使用可能なMSX-VIDEOの機能を説明します。 '''●画面のON/OFF'''  R#1のビット6を用いて、画面のON/OFFを行います(図4.49)。OFFにすると、画面はR#7レジスタの下位4ビット(GRAPHIC7の場合は8ビット)で指定される色に変わり、その際VDPコマンドで描画を行う際の速度が少し向上します。 {{div_begin style='text-align:center;'}} {{svg 図4.49.svg,,size:630x140}} '''図4.49 画面のON/OFF''' {{div_end}} '''●画面表示位置の補正'''  R#18は画面の表示位置を補正するためのレジスタです(図4.50)。BASICの”SET ADJUST”命令の機能に相当します。 {{div_begin style='text-align:center;'}} {{svg 図4.50.svg,,size:450x360}} '''図4.50 表示位置の補正''' {{div_end}} '''●Y方向ドット数の切り換え'''  R#9のビット7を用いて、画面のY方向のドット数を192ドットまたは212ドットのどちらかに切り換えることができますが、この機能は、TEXT2およびGRAPHIC4〜7の5種類の画面モードにおいてのみ有効です。なお、TEXT2モードで212ドットを設定した場合、テキストの行数は26.5(=212/8)となって、27行目の文字は上半分しか表示されません。 {{div_begin style='text-align:center;'}} {{svg 図4.51.svg,,size:630x140}} '''図4.51 縦のドット数切り換え''' {{div_end}} '''●表示ページの切り換え'''  GRAPHIC4〜7モードでは、R#2でパターンネーム・テーブルの先頭アドレスを設定することにより、簡単に表示ページが切り換えられます。実際、BASICの”SET PAGE”命令の第2パラメータでは、このようにして表示ページを切り換えています。 {{div_begin style='text-align:center;'}} {{svg 図4.52.svg,,size:610x360}} '''図4.52 ページ切り換え''' {{div_end}} '''●画面の自動交互表示'''  GRAPHIC4〜7のモードでは、以下の方法を用いて2枚のページを交互に表示することができます。表示させられるページは、0ページと1ページ、または2ページと3ページの組み合わせです。 交互表示を開始するには、まずR#2を用いて奇数ページ(1または3)を選択し、さらにR#13に画面交代の周期を設定します。R#13の上位4ビットは偶数ページの表示時間、下位4ビットは奇数ページの表示時間を、それぞれ1/6秒単位で表したものです。両方の時間ともに0を設定した場合には、奇数ページのみ表示されます。 {{div_begin style='text-align:center;'}} {{svg 図4.53.svg,,size:480x150}} '''図4.53 画面交代の周期の設定''' {{div_end}} '''●インターレースモードの設定'''  インターレースとは、通常の画面と走査線を通常より半ライン下にずらした画面を高速に切り換えながら表示し、擬似的にY方向の分解能を2倍に高める手法です。MSX-VIDEOでは、R#9のビット3を”1”にすることによって、インターレースモードが設定されます。2枚の画面は1/60秒ごとに切り替わります。  また、GRAPHIC4〜7の画面モードで奇数ページを選択し、さきほど述べた画面の交互表示を行う場合、普通は1/6秒を単位とするゆっくりとしたスピードで画面が切り替わるのですが、R#9のビット2を”1”としておくと、1/60秒間隔で交互表示が行われます。この機能とインターレース機能を組み合わせると、画面の縦方向の表示ドット数を2倍にすることができます。 {{div_begin style='text-align:center;'}} {{svg 図4.54.svg,,size:680x410}} '''図4.54 インターレースモードの設定''' {{div_end}} {{div_begin style='text-align:right;'}} '''リスト4.5 インターレースの使用例''' {{div_end}} 1000 '================================================== 1010 ' List 4.5 interlace mode 1020 '================================================== 1030 ' 1040 COLOR 15,0,0 : SCREEN 5,,,,,0 'non interlace mode 1050 ' 1060 SET PAGE 0,0 : CLS 1070 LINE (32,0)-(64,120),15,BF 1080 SET PAGE 1,1 : CLS 1090 LINE (192,91)-(224,211),15,BF 1100 ' 1110 VDP(10)=VDP(10) OR &B00001100 'interlace mode!!! 1120 ' 1130 FOR I=32 TO 192 1140 SET PAGE 1,0 1150 LINE(I,0)-STEP(0,120),0 1160 LINE(I+33,0)-STEP(0,120),15 1170 SET PAGE 1,1 1180 LINE(256-I,91)-STEP(0,120),0 1190 LINE(223-I,91)-STEP(0,120),15 1200 NEXT I 1210 ' 1220 VDP(10)=VDP(10) AND &b11110011 'interlace off '''●画面の縦方向スクロール'''  R#23は画面の表示開始ラインを設定するレジスタです。このレジスタの値を変えることによって、画面の縦方向スクロールを行うことができます。ただし、スクロールは256ライン単位で行われますから、スプライト用テーブルなどは他のページに移動させなくてはなりません。この例をリスト4.6に示します。 {{div_begin style='text-align:right;'}} '''リスト4.6 画面スクロールの例''' {{div_end}} 1000 '============================================================ 1010 ' List 4.6 Hardware Scroll 1020 '============================================================ 1030 ' 1040 SCREEN 5,2: COLOR 15,0,0: CLS 1050 COPY (0,0)-(255,43) TO (0,212),,PSET 'erase (212,0)-(255,255) 1060 ' 1070 FOR I=1 TO 8: D(I)=VAL(MID$("00022220",I,1))-1: NEXT 1080 ' 1090 OPEN "GRP:" AS #1 1100 FOR I=0 TO 3 1110 PRESET (64,I*64): PRINT #1,"Hit CURSOR Key" 1120 NEXT 1130 ' 1140 J=STICK(0) 1150 P=(P+D(J)) AND &HFF 1160 VDP(24)=P 1170 GOTO 1140 '''●色コード0の機能設定'''  16種類の色コードの中で、0だけは特別な機能を持ち、この色を指定した部分は、カラーパレットP#0にどんな色が設定されていても”透明色(画面の周辺色が透けて見える)”とみなされます。しかし、R#8のビット5を”1”にするとこの機能は解消され、色コード0はパレットP#0が定義する色に変わります。 {{div_begin style='text-align:center;'}} {{svg 図4.55.svg,,size:640x370}} '''図4.55 色コード0の機能''' {{div_end}} '''●走査線位置による割り込みの発生'''  MSX-VIDEOでは、CRTが特定の走査線の表示を終えた瞬間に割り込みを発生させることができます。その場合は割り込みを発生させたい走査線番号をR#19に設定し、R#0のビット4を”1”にしておいてください(図4.56)。 {{div_begin style='text-align:center;'}} {{svg 図4.56.svg,,size:550x220}} '''図4.56 走査線割り込みの発生''' {{div_end}}