MSX Datapack wiki化計画

10章 V9958の画面モードの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
{{include unfinished_page}}

,{t},{BSIZE:1 0|SIZE:100%}
,{BSIZE:0}←[[9章 YJK方式]]                                                                    ,{BSIZE:0|RIGHT}[[5部 スロットとカートリッジ|5部 スロットとカートリッジ]]                                 →

,{c C},{CENTER}
,{c B},{BSIZE:0}
,{c D},{BSIZE:1}
,{c S},{SIZE:50}
 MSX-BASIC 3.0では、YJKモードおよびYJK/RGB混在モード(以下、YJKモードとYJK/RGB混在モードを総称して、自然画モードと呼ぶ)として、SCREEN 10〜12を設けていますが、V9958ではそれに相当するGRAPHICモードはありません。
 V9958を自然画モードにするためには、表示モードをGRAPHIC 7にした上で、R#25のbit 3、4を操作します。詳しくは、10.4のサンプルプログラムをご参照ください。

!!10.1 SCREEN 9

 SCREEN 9 は韓国バージョンのMSXでハングル文字を表示するために使われています。したがって、日本製のMSXでは使用しません。

!!10.2 SCREEN 10、11

!10.2.1 特徴

,{t},{BSIZE:0}
,{c},{B},{B}
,■解像度               ,横256×縦212ドット(または縦192ドット)のYJK・RGB混在モード
,■表示色               ,"12,499色同時(全画面)"
,■スプライト           ,モード2(パレットが使用可能)
,■1画面に必要なVRAM容量,128Kバイト(2画面)

!10.2.2 関係するレジスタとVRAMの領域

 GRAPHIC 7 (SCREEN 8) と同じです。BASICではSCREEN 10またはSCREEN 11として扱います。

!10.2.3 初期設定

 R#25以外は、GRAPHIC 7 (SCREEN 8)と同じです。
{{svg 図P588.svg}}
 {{svg 図P588-2.svg}}は表示モード設定用のビットをYJK・RGB混在モードにセットした例です。この表示モードでは、LN=1のとき縦212ドット、LN=0のとき縦192ドット(BASICではサポートしない)に設定されます。その他のビットは任意に設定します。

1)パターンネームテーブルの設定
{{svg 図4.68.svg}}
'''図4.68 SCREEN 10、11モードのパターンネームテーブル'''

!10.2.4 SCREEN 10、11モードのVRAMマップ

 GRAPHIC 7 (SCREEN 8)と同じです。

!10.2.5 SCREEN 10とSCREEN 11の違い

 VDP上ではSCREEN 10と11は何の違いもありません。アトリビュートが「0」の画素はYJK方式で表示され、アトリビュートが「1」の画素はYの4ビットが色コードとして扱われます。MSX-BASIC 3.0ではこのYJK/RGB混在モードをさらに2つのスクリーンモードとして扱います。
 SCREEN 10では、

* LINE、PSETなどの描画コマンド
* PRINT#文による文字表示
* 漢字モードにおけるグラフィック画面へのPRINT文

などで色指定を行うときは、SCREEN 0から7までで使用する通常の色コードである0〜15だけが使用できます。これ以外の値はIllegal function callとなります。この色指定でRGB以外の部分、すなわちJKの成分(下位3ビット)はそのままにして、描画されない画素の表示が影響されることを防ぎます。
 例えば、色コード15のドットはこの画面ではY成分の部分(上位4ビット)及びアトリビュートビットを1にすることになり、VRAM上では&HF8となりますが、SCREEN 10のときは描画に際して、このような変換を意識する必要はありません。
 一方、SCREEN 11では、色コードの扱いはVRAM上の値そのものとなり、色コードは0〜255を指定できます。

!!10.3 SCREEN 12

!10.3.1 特徴

,{t},{BSIZE:0}
,{c},{B|SIZE:200},{B}
,■解像度               ,横256×縦212ドット(または縦192ドット)のYJKモード
,■表示色               ,"19,268色同時(全画面)"
,■スプライト           ,モード2(パレットが使用可能)
,■1画面に必要なVRAM容量,128Kバイト(2画面)

!10.3.2 関係するレジスタとVRAMの領域

 GRAPHIC 7 (SCREEN 8) と同じです。BASICではSCREEN 12として扱います。

!10.3.3 初期設定

 R#25以外は、GRAPHIC 7 (SCREEN 8)と同じです。

,{c A},{BGCOLOR:CCC}
,{t},{BSIZE:0}
,{c},{B|SIZE:80|C},{B|S|C},{B|S|C},{B|S|C},{B|S|C},{B|S|C},{B|S|C},{B|S|C},{B|S|C},{BSIZE:0|SIZE:0}
,    ,7  ,6  ,5  ,4  ,3  ,2  ,1  ,0,
,{c},,{D|C},{D|C},{D|C},{D|C|A},{D|C|A},{D|C},{D|C},{D|C}
,R#25,0    ,CMD  ,VDS  ,0      ,1      ,WTE  ,MSK  ,SP2

 ■(灰色)は表示モード設定用のビットをYJKモードにセットした例です。この表示モードでは、LN=1のとき縦212ドット、LN=0のとき縦192ドット(BASICではサポートしない)に設定されます。その他のビットは任意に設定します。
{{svg 図P591.svg}}
 {{svg 図P588-2.svg}}は表示モード設定用のビットをYJKモードにセットした例です。この表示モードでは、LN=1のとき縦212ドット、LN=0のとき縦192ドット(BASICではサポートしない)に設定されます。その他のビットは任意に設定します。

1)パターンネームテーブルの設定
{{svg 図4.69.svg}}
'''図4.69 SCREEN 12モードのパターンネームテーブル

!10.3.4 SCREEN 12モードのVRAMマップ

 GRAPHIC 7 (SCREEN 8)と同じです。

!!10.4 SCREEN 10、11、12の設定方法

 SCREEN 0〜8の切り替えは、モードレジスタに値を設定することによって行いますが、自然画モード(SCREEN 10〜12)については、別の方法を使います。なぜならば、自然画モードとはV9958にとって、GRAPHIC 7モードでR#25のYEAビットとYJKビットを設定した状態だからです。
 したがって、GRAPHICモードが7の状態で以下のプログラムを実行すれば、SCREENモードを10、11、12に設定することができます。
 MODE変数のbit 5のSET、RESETはROM内のルーチン(GRPPRT、NVBXLNなど)を使用する可能性がある場合にのみ必要で、アプリケーションがVDPを直接操作する場合には必要ありません。もちろん、そのような場合には、アトリビュートの操作はアプリケーションプログラムから行わなければなりません。
 また、BASICで行っているようなサービス(SCREEN 12からSCREEN 10に切り替えた時アトリビュートを落としている)は、以下の中には含まれていません。

'''リスト4.1 SCREEN 10、11、12の設定方法'''

 mode     equ    0fafch
 rg25sa   equ    0fffah             ;register #25 save area
 wrtvdp   equ    47h
 
 screen10:
          ld     hl,mode
          res    5,(hl)
          ld     a,(rg25sa)
          or     00011000b
          ld     b,a
          ld     c,25
          jp     wrtvdp
 
 screen11:
          ld     hl,mode
          set    5,(hl)
          ld     a,(rg25sa)
          or     00011000b
          ld     b,a
          ld     c,25
          jp     wrtvdp
 
 screen12:
          ld     a,(rg25sa)
          and    11100111b
          or     00010000b
          ld     b,a
          ld     c,25
          jp     wrtvdp
 
          end

,{t},{BSIZE:1 0|SIZE:100%}
,{BSIZE:0}←[[9章 YJK方式]]                                                                    ,{BSIZE:0|RIGHT}[[5部 スロットとカートリッジ|5部 スロットとカートリッジ]]                                 →