テクハンwiki

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#0VDP(0)モードレジスタ#0R#20VDP(21)カラーバースト信号1
R#1VDP(1)モードレジスタ#1R#21VDP(22)カラーバースト信号2
R#2VDP(2)パターンネームテーブルR#22VDP(23)カラーバースト信号3
R#3VDP(3)カラーテーブル(LOW)R#23VDP(24)画面のハードスクロール
R#4VDP(4)パターンジェネレータテーブル
R#5VDP(5)スプライトアトリビュートテーブル(LOW)R#32VDP(33)SX:転送元X座標(LOW)
R#6VDP(6)スプライトパターンジェネレータテーブルR#33VDP(34)SX:転送元X座標(HIGH)
R#7VDP(7)周辺色/テキストモード時の文学色R#34VDP(35)SY:転送元Y座標(LOW)
R#8VDP(9)モードレジスタ#2R#35VDP(36)SY:転送元Y座標(HIGH)
R#9VDP(10)モードレジスタ#3R#36VDP(37)DX:転送先X座標(LOW)
R#10VDP(11)カラーテーブル(HIGH)R#37VDP(38)DX:転送先X座標(HIGH)
R#11VDP(12)スプライトアトリビュートテーブル(HIGH)R#38VDP(39)DY:転送先Y座標(LOW)
R#12VDP(13)テキストブリンク時の文字色R#39VDP(40)DY:転送先Y座標(HIGH)
R#13VDP(14)ブリンク周期R#40VDP(41)NX:X方向転送ドット数(LOW)
R#14VDP(15)VRAMアクセスアドレス(HIGH)R#41VDP(42)NX:X方向転送ドット数(HIGH)
R#15VDP(16)S#nの間接指定R#42VDP(43)NY:Y方向転送ドット数(LOW)
R#16VDP(17)P#nの間接指定R#43VDP(44)NY:Y方向転送ドット数(HIGH)
R#17VDP(18)R#nの間接指定R#44VDP(45)CLR:対CPUデータ転送用
R#18VDP(19)画面位置の補正(ADJUST)R#45VDP(46)ARG:転送方向/VRAM・拡張RAM指定
R#19VDP(20)割り込み発生の走査線番号R#46VDP(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#0VDP(8)割り込み情報S#5VDP(-5)検出したY座標(LOW)
S#1VDP(-1)割り込み情報S#6VDP(-6)検出したY座標(HIGH)
S#2VDP(-2)VDPコマンド制御情報/その他S#7VDP(-7)VDPコマンドで得られたデータ
S#3VDP(-3)検出したX座標(LOW)S#8VDP(-8)サーチコマンドで得られたX座標(LOW)
S#4VDP(-4)検出したX座標(HIGH)S#9VDP(-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)nVRAMからのデータ読み出し
ポート#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のポート