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 特徴
■解像度 | 横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)と同じです。
1)パターンネームテーブルの設定
図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 特徴
■解像度 | 横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)と同じです。
1)パターンネームテーブルの設定
'''図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