MSX-VIDEOは次のような特徴を持ち、TMS9918Aと比べて大幅に表示能力が向上しています。
- 9ピットのカラーパレットによって、512色の表現が可能
- 最大512x424ドットの分解能(インターレース使用時)
- 最大256色が同時に表示可能
- グラフィック的に操作しやすいフルビットマップ・モードの採用
- 1行80文字のテキスト表示モードの採用
- LINE,SEARCH,AREA-MOVEなどがハードウェア的に実行可能
- スプライトは同一水平ラインに8個まで表示可能
- スプライトは1ラインごとに異なった色の指定が可能
- ビデオ信号のディジタイズ機能内蔵
- スーパーインポーズ機能内蔵
これらの機能を実現するMSX-VIDEOの画面表示システムの構成要素は、数多くのレジスタ群、MSX-VIDEOによって管理されるVRAM,MSX-VIDEOとCPU間のデータ受け渡しを行うI/Oポートの3つの部分に大別されます。
1.1レジスタ
MSX-VIDEOは、その多くの機能を実現するために、内部に49本のレジスタを備えています。これを本書では“VDPレジスタ”と呼ぶことにします。VDPレジスタは機能によって以下の3種に分類されます。なおコントロール・レジスタ群とステータス・レジスタ群については、BASICからVDP(n)というシステム変数を用いて参照することも可能です。
(1)コントロール・レジスタ群(R#0〜R#23,R#32〜R#46)
MSX-VIDEOの動作を制御する書き込み専用8ビットレジスタ群です。一般にR#nの記号で表されます。R#0〜R#23は主に画面モードの設定に用いられ、R#32〜R#46は5章で述べるVDPコマンドの実行時に用いられます。R#24〜R#31に相当する番号のコントロール・レジスタは存在しません。各コントロール・レジスタの役割を表4.1に示します。
名称 | 対応するVDP(n) | 機能 | 名称 | 対応するVDP(n) | 機能 |
R#0 | VDP(0) | モードレジスタ#0 | R#20 | VDP(21) | カラーバースト信号1 |
R#1 | VDP(1) | モードレジスタ#1 | R#21 | VDP(22) | カラーバースト信号2 |
R#2 | VDP(2) | パターンネームテーブル | R#22 | VDP(23) | カラーバースト信号3 |
R#3 | VDP(3) | カラーテーブル(LOW) | R#23 | VDP(24) | 画面のハードスクロール |
R#4 | VDP(4) | パターンジェネレータテーブル | |||
R#5 | VDP(5) | スプライトアトリビュートテーブル(LOW) | R#32 | VDP(33) | SX:転送元X座標(LOW) |
R#6 | VDP(6) | スプライトパターンジェネレータテーブル | R#33 | VDP(34) | SX:転送元X座標(HIGH) |
R#7 | VDP(7) | 周辺色/テキストモード時の文学色 | R#34 | VDP(35) | SY:転送元Y座標(LOW) |
R#8 | VDP(9) | モードレジスタ#2 | R#35 | VDP(36) | SY:転送元Y座標(HIGH) |
R#9 | VDP(10) | モードレジスタ#3 | R#36 | VDP(37) | DX:転送先X座標(LOW) |
R#10 | VDP(11) | カラーテーブル(HIGH) | R#37 | VDP(38) | DX:転送先X座標(HIGH) |
R#11 | VDP(12) | スプライトアトリビュートテーブル(HIGH) | R#38 | VDP(39) | DY:転送先Y座標(LOW) |
R#12 | VDP(13) | テキストブリンク時の文字色 | R#39 | VDP(40) | DY:転送先Y座標(HIGH) |
R#13 | VDP(14) | ブリンク周期 | R#40 | VDP(41) | NX:X方向転送ドット数(LOW) |
R#14 | VDP(15) | VRAMアクセスアドレス(HIGH) | R#41 | VDP(42) | NX:X方向転送ドット数(HIGH) |
R#15 | VDP(16) | S#nの間接指定 | R#42 | VDP(43) | NY:Y方向転送ドット数(LOW) |
R#16 | VDP(17) | P#nの間接指定 | R#43 | VDP(44) | NY:Y方向転送ドット数(HIGH) |
R#17 | VDP(18) | R#nの間接指定 | R#44 | VDP(45) | CLR:対CPUデータ転送用 |
R#18 | VDP(19) | 画面位置の補正(ADJUST) | R#45 | VDP(46) | ARG:転送方向/VRAM・拡張RAM指定 |
R#19 | VDP(20) | 割り込み発生の走査線番号 | R#46 | VDP(47) | CMR:VDPコマンドを発行 |
(R#32〜R#46 VDPコマンド用レジスタ)
表4.1コントロール・レジスタ一覧
(2)ステータス・レジスタ群(S#0〜S#9)
MSX-VIDEOから得られる各種の情報を読み取るための、読み出し専用8ピットレジスタ群です。一般にS#nという記号で表されます。各レジスタの役割を表4.2に示します。
名称 | 対応するVDP(n) | 機能 | 名称 | 対応するVDP(n) | 機能 |
S#0 | VDP(8) | 割り込み情報 | S#5 | VDP(-5) | 検出したY座標(LOW) |
S#1 | VDP(-1) | 割り込み情報 | S#6 | VDP(-6) | 検出したY座標(HIGH) |
S#2 | VDP(-2) | VDPコマンド制御情報/その他 | S#7 | VDP(-7) | VDPコマンドで得られたデータ |
S#3 | VDP(-3) | 検出したX座標(LOW) | S#8 | VDP(-8) | サーチコマンドで得られたX座標(LOW) |
S#4 | VDP(-4) | 検出したX座標(HIGH) | S#9 | VDP(-9) | サーチコマンドで得られたX座標(HIGH) |
表4.2ステータス・レジスタ一覧
(3)パレット・レジスタ群(P#0〜P#15)
カラーパレットを設定するためのレジスタ群です。一般にP#nという記号で表されます。nはパレット番号を表し、各パレットを512色中の1色に設定する働きをします。1つのパレットレジスタは9ピット長となっており、RGB各色につき、それぞれ3ビットずつ使用されます。
1.2 VRAM
MSX-VIDEOには128KバイトのVRAM(Video RAM)と64Kバイトの拡張RAMを接続できます。MSX-VIDEOは、この128Kバイトのアドレス空間をアクセスするため、17ビットのアドレス・カウンタを持っています.なお,これらのメモリはMSX-VIDEO自身によって管理されるもので、CPUから直接アクセスすることはできません。
拡張RAMは、VRAMのようにその内容を画面に表示することはできませんが、VDPコマンド実行時にはVRAMと同等に扱うことが可能です。実際、画像データを取り扱う際、これだけの広い領域がワークエリアとして使えると、たいへん便利です。ただし、MSX2の仕様には拡張RAMを実装しなければならないという項目は含まれていませんから、これを使うと互換性を欠く恐れがあります。
1.3 I/Oポート
MSX-VIDEOは外部とデータをやりとりするために、4つのI/Oポートを持っています。これらのポートは表4.3に示したような機能を持ち、CPU(Z80)のI/Oアドレスを通して接続されています。表中n,n'で表されたアドレスはMAIN-ROMの6,7番地に記録されています。通常はn=n'=98Hですが、機種によっては異なる可能性もありますので、より安全確実なプログラムを目指すためには、この番地の内容を読んでポートアドレスを得なければいけません。
なお、一般にMSXではプログラムの互換性を確保するために入出力はすべてBIOSを通して実行することが推奨されていますが、画面表示に関しては特にスピードを要求されることが多いため、これらのI/Oポートを介してMSX-VIDEOを直接アクセスすることが許されています。
アドレス | 用途 | |
ポート#0(READ) | n | VRAMからのデータ読み出し |
ポート#0(WRITE) | n' | VRAMへのデータ書き込み |
ポート#1(READ) | n + 1 | ステータス・レジスタの読み出し |
ポート#1(WRITE) | n'+ 1 | コントロール・レジスタへの書き込み |
ポート#2(WRITE) | n'+ 2 | パレット・レジスタへの書き込み |
ポート#3(WRITE) | n'+ 3 | 間接指定されたレジスタへの書き込み |
注)nの値はMAIN-ROMの6番地を参照して得る
n'の値はMAIN-ROMの7番地を参照して得る
表4.3 MSX-VIDEOのポート