1章 MSX-VIDEOの構成
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) モードレジスタ#O 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を実装しなければならないという項目は含まれていませんから、これを使うと互換性を欠く恐れがあります。
図4.1 VRAMと拡張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からのデータ饒み出し ポート#O(WRI正) n' VRAMへのデータ書き込み ポート#1(READ) n + 1 ステータス・レジスタの読み出し ポート#1(WRITE) n'+ 1 コントロール◎レジスタへの書き込み ポート#2(WRI正) n'+ 2 パレ・ント・レジスタへの書き込み ポート#3(WRITE) n'+ 3 引接指定されたレジスタへの書き込み 注)nの値はMAIN-ROMの6番地を参照して得る n'の値はMAIN-ROMの7番地を参照して得る
表4.3 MSX-VODEOのポート