「V9938」(MSX-VIDEO)は、MSX2用のVDP(Video Display Processor)として開発されたVLSIです。MSX2の開発にあたっては、TMS9918A(MSX1のVDP)とソフトウェア上位互換性があり、さらに機能強化されたビデオプロセッサが必要でした。V9938はこの条件を満たすVDPとして、株式会社アスキーとヤマハ株式会社によって共同開発され、以下の特徴があります。
- フルビットマップ表示モード
- テキスト80文字表示
- X、Y座標アクセスを実現し、I/Oドライバの負荷軽減と画面モードからの独立が可能
- 基本コマンドのハードウェア実行により、I/Oドライバの処理の軽減と高性能を実現
- デジタイズと外部同期機能の実現
- カラーパレット(9ビット×16種)とアナログRGB出力をサポート
- 1水平ライン上の表示スプライト数の増加
- ハードウェアによる垂直スクロール
1.1 レジスタ
V9938では、その機能を利用するために内部に「VDPレジスタ」を備えています。特に断りのない場合、これを単にレジスタと呼びます。レジスタは機能によって、
- コントロールレジスタ
- ステータスレジスタ
- パレットレジスタ
に分けられます。この内の、コントロールレジスタとステータスレジスタについては、BASICのVDP(n)というシステム変数によって参照することができます。
1.1.1 コントロールレジスタ(R#0〜R#23、R#32〜R#64)
V9938の動作を制御する書き込み専用の8ビットレジスタ群です。一般にR#nの記号で表します。R#0〜R#23は主に画面モードの設定に使用し、R#32〜R#46はVDPコマンド実行時に使用します。V9938にはR#24〜R#31に相当するコントロールレジスタはありません。
1.1.2 ステータスレジスタ(S#0〜S#9)
V9938から得られる各種の情報を読み取る為の読み出し専用の8ビットレジスタ群です。一般にS#nという記号で表します。
1.1.3 パレットレジスタ(P#0〜P#15)
カラーパレットを設定するための書き込み専用のレジスタ群です。一般にP#nという記号で表します。nはパレット番号を意味し、各パレットを512色中の1色に設定します。1つのパレットレジスタは9ビット長となっており、RGB各色につき、それぞれ3ビットずつ使用します。
カラーパレットは、リセット時には表4.1のように設定されます。「0」は輝度が0であることを意味し、「7」は輝度が最も高いことを意味しています。
ただし、GRAPHIC7*モードではカラーパレットを使わないため、この表は意味を持ちません。また、GRAPHIC5*モードではカラーコードが0〜3の4種類しか存在しないため、表4.1の4〜Fは意味を持ちません。
注意 |
*このGRAPHICモードは、BASICのスクリーンモードとは異なります。詳しくは、「4章 V9938の画面モード」を参照して下さい。
表4.1 リセット時のカラーパレット設定値
カラーコード | G | R | B |
0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 |
2 | 6 | 1 | 1 |
3 | 7 | 3 | 3 |
4 | 1 | 1 | 7 |
5 | 3 | 2 | 7 |
6 | 1 | 5 | 1 |
7 | 6 | 2 | 7 |
8 | 1 | 7 | 1 |
9 | 3 | 7 | 3 |
A | 6 | 6 | 1 |
B | 6 | 6 | 4 |
C | 4 | 1 | 1 |
D | 2 | 6 | 5 |
E | 5 | 5 | 5 |
F | 7 | 7 | 7 |
1.2 VRAM
V9938には128KバイトのVRAM(VIDEO RAM)と64Kバイトの拡張RAMを接続できます。V9938はこの128Kバイトのアドレス空間をアクセスするために17ビットのアドレスカウンタを持っています。なお、このメモリはV9938によって管理されるものですから、CPUから直接アクセスすることはできません。
拡張RAMはVRAMのように、その内容を画面に表示することはできませんが、VDPコマンド実行時には、ワークエリアとして、VRAMと同等に扱うことができます。ただし、MSX2では拡張RAMは使用しません。
1.3 I/Oポート
V9938はCPUとデータのやりとりを行うために、4つのI/Oポートを持っています。このポートは表4.2の機能を持ち、CPUのI/Oアドレスを通して接続されています。表中m、nで表されたアドレスはMAIN ROMの6、7番地に記録されています。アプリケーションプログラムは、この番地の内容を参照してVDPをアクセスして下さい。
表4.2 V9938のポート
ポート | アドレス | 用途 |
ポート#0(READ) | m | VRAMからのデータを読み出し |
ポート#0(WRITE) | n | VRAMへのデータ書き込み |
ポート#1(READ) | m+1 | ステータスレジスタの読み出し |
ポート#1(WRITE) | n+1 | コントロールレジスタへの書き込み |
ポート#2(WRITE) | n+2 | パレットレジスタへの書き込み |
ポート#3(WRITE) | n+3 | 間接指定されたレジスタへのデータ書き込み |
注意 |
mの値はMAIN ROMの6番地を参照して得る。
nの値はMAIN ROMの7番地を参照して得る。
MSX BASICやBIOSではVDPの書き込み専用レジスタの値を参照する必要が生じたときのために、それらのレジスタに書き込む値をメインメモリのワークエリアやVRAMの空き領域に存在しています。
ユーザープログラムが、この保存されている値を更新しないで、書き込み専用レジスタの値を変更したときには、その後のBASICやBIOSの動作は保証されません。