MSX Datapack wiki化計画

8章 V9958の構成の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
{{include unfinished_page}}

,{t},{BSIZE:1 0|SIZE:100%}
,{BSIZE:0}←[[7章 その他の機能]]                                                               ,{BSIZE:0|RIGHT}[[9章 YJK方式]]                                                                   →

,{c C},{CENTER}
,{c B},{BSIZE:0}
,{c D},{BSIZE:1}
,{c S},{SIZE:50}
 「V9958」は、MSX2+用のVDP(Video Display Processor)として開発されたVLSIで、TMS9918A(MSXのVDP)およびV9938(MSX2のVDP)とソフトウェア上位互換性があります。V9958は株式会社アスキーとヤマハ株式会社によって共同開発され、V9938に加えて以下の特徴があります。

* YJK方式により最大19,268色を同時に表示可能
* ハードウェアによる水平スクロール
* 全表示モードでコマンド機能を使用可能

 この章ではV9938に対して変更・追加された機能を解説します。この章で説明のない部分についてはV9938と同じ仕様です。

!!8.1 レジスタ

!8.1.1 追加されたレジスタ

{{svg 図P576.svg}}
,注意{CENTER|SIZE:100}
空きビットにはかならず「0」を設定して下さい。
リセット時には、全てのビットは「0」に設定され、機能的にはV9938と同等になります。

!8.1.2 変更されたレジスタ

 Status register 1のID番号を「2」とし、V9958であることを表します。V9938では「0」が返ってきます。

{{svg 図P577-1.svg}}
!!8.2 V9958の機能

 V9958ではV9938を拡張して、新たな機能を加えています。追加された機能には以下のようなものがあります。

!8.2.1 水平スクロール

{{svg 図P577-2.svg}}

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:50},{BSIZE:0|SIZE:100},{BSIZE:0|SIZE:0}
,R#25,MSK     ,0=左側8ドットはマスクされない(初期値)
,    ,        ,1=左側8ドットをマスクし、ボーダーカラーを表示する
,    ,        ,"R#27の値が「0」の場合は、マスクする必要ありません(GRAPHIC65,6では16ドットのマスクになる)。"
,    ,        ,"R#27の値が「0」の場合は、マスクする必要ありません(GRAPHIC5、6では16ドットのマスクになる)。"
,    ,SP2     ,0=水平方向画面サイズを1ページとする(初期値)
,    ,        ,スクロールは1ページ内で行われ、画面上には左側の隠れた部分が右側にも表れます。
,    ,        ,1=水平方向画面サイズを2ページとする
,    ,        ,スクロールは2ページで行われ、スクロールによって裏のページが表れます。
,    ,HO8〜HO0,"静止画の水平方向スクロール量をドット単位で設定する(GRAPHIC5,6は2ドット単位のスクロールになる)"
,    ,HO8〜HO0,"静止画の水平方向スクロール量をドット単位で設定する(GRAPHIC5、6は2ドット単位のスクロールになる)"

 水平スクロール時のVRAMアクセスは8ドット単位で行われ、R#27の値が「0」以外のときは、表示用のデータが不定になります。この不定のデータを表示させないためにマスクが必要になります。

HO8〜HO3に対する表示画面
 左方向へ、8ドット単位(GRAPHIC5,6は16ドット単位)で設定値だけシフトします。

{{svg 図P578.svg}}

,注意{SIZE:100|CENTER}
HO8は無視されます。

{{svg 図4.63.svg}}
図4.63 HO8〜HO3に対する表示画面

,注意{SIZE:100|CENTER}
SP2=1のときは、パターンネームテーブルの先頭アドレスは、奇数ページが選択されるように設定します。
各テーブルのベースアドレスは次のようになります。

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:300},{BSIZE:0|SIZE:0}
,パターンネームテーブル(PNT)        ,0〜31 偶数ページ
,                                   ,32〜63 奇数ページ
,パターンジェネレータテーブル(PGT)  ,ベースアドレス設定値
,                                   ,スクロールによって変化しない
,カラーテーブル(CT)                 ,ベースアドレス設定値
,                                   ,スクロールによって変化しない

HO2〜HO0に対する表示画面
 右方向へ、1ドット単位(GAPHIC5,6は、2ドット単位)で設定値だけシフトします。
 右方向へ、1ドット単位(GRAPHIC5,6は、2ドット単位)で設定値だけシフトします。

{{svg 図4.64.svg}}
図4.64 2画面水平スクロール

図4.64のように、左へ126ドットスクロールするときは、以下のようになります。

 R#26 = 128 = 8×16 (左へ128ドット)
 R#27 = 2           (右へ2ドット)

!8.2.2 ウエイト機能

{{svg 図P580.svg}}
,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:80},{BSIZE:0|SIZE:0}
,WTE ,0=ウエイト機能を無効にする(初期値)
,    ,V9938と同様に機能します。
,    ,1=ウエイト機能を有効にする
,    ,CPUがVRAMをアクセスした際に、V9958のVRAMアクセスが完了するまで、全てのV9958ポートへのアクセスに対してウエイト信号を発生します。
,    ,レジスタとカラーパレットへのアクセス未完了およびコマンドのデータレディによるウエイト機能はありません。


,注意{SIZE:100|CENTER}
ウエイト機能はMSXでは使っていません。
このビットを「1」にするときは、その前にダミーのVRAMアクセスを行って下さい。
!8.2.3 コマンド機能

{{svg 図P580.svg}}
,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:80},{BSIZE:0|SIZE:0}
,CMD ,0=GRAPHIC4〜7の表示モードのみコマンド機能を有効にする(初期値)。
,    ,1=全表示モードにおいてコマンド機能を有効にする
,    ,GRAPHIC4〜7モードでは、V9938と同様に機能し、それ以外の表示モードでは、GRAPHIC7モードとして動作します。したがってGRAPHIC4〜7モード以外でコマンドを使用するときには、パラメータはGRAPHIC7モードのX、Y座標系で指定します。
!8.2.4 YJK方式データの表示機能

{{svg 図P580.svg}}
,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:80},{BSIZE:0|SIZE:0}
,YJK ,0=VRAM上のデータをRGB方式(例えばGRAPHIC7の時は各3,3,2ビット)として扱う(初期値)。
,YJK ,"0=VRAM上のデータをRGB方式。(例えば、GRAPHIC 7の時は各3、3、2ビット)として扱う(初期値)。"
,    ,スプライトの表示色は従来通りです。
,    ,1=VRAM上のデータをYJK方式のみと見なし、これをRGB信号(各5ビット)に変換し、アナログ表示する。
,    ,1=VRAM上のデータをYJK方式のみと見なし、これをRGB信号(各5ビット)に変換し、アナログ出力する。
,    ,スプライトの表示色にはパレットが有効になります。
,YAE ,YJK方式のデータフォーマットの選択

以下は、YJK方式のデータフォーマットです。連続した4ドットをグルーピングして表します。

1)アトリビュートがない場合(YAE=0)(初期値)

{{svg 図4.65.svg}}
図4.65 アトリビュートなしのYJKデータフォーマット

YJK方式のデータは連続した4ドット分の情報でグループ分けされており、
,{t},{BSIZE:0}
,{c},{BSIZE:0},{BSIZE:0|SIZE:0}
, ,Y1、KL、KH、JL、JHで先頭1ドットのカラー情報
, ,Y2、KL、KH、JL、JHで2ドット目のカラー情報
, ,Y3、KL、KH、JL、JHで3ドット目のカラー情報
, ,Y4、KL、KH、JL、JHで4ドット目のカラー情報
となります。
KとJの値は4ドットに共通で使われます。Yの値は1ドットごとに指定します。

2)アトリビュートがある場合(YAE=1)

{{svg 図4.66.svg}}
図4.66 アトリビュート有りのYJKデータフォーマット

,{t},{BSIZE:0}
,{c},{B|SIZE:80|C},{BSIZE:0|SIZE:0}
,{c},{BSIZE:0|SIZE:80|C},{BSIZE:0|SIZE:0}
,A=0,YAE=0の場合と同じ(初期値)
,   ,Y、J、Kは全てYJK方式のデータとなります。■は1ドット分のカラー情報です。Aのビットは無視されます。
,   ,Y、J、Kは全てYJK方式のデータとなります。{{svg 図P583-2.svg}}は1ドット分のカラー情報です。Aのビットは無視されます。
,A=1,Y1〜Y4はそれぞれカラーコードとなり、カラーパレットを通してRGB出力されます。JとKはYJK方式のデータとなります。
 
3)YJKとYAEの組み合わせ
,{t},{BSIZE:0}
,{c},{SIZE:60|CENTER},{SIZE:60|CENTER},{SIZE:400|CENTER}
,YJK,YAE,VRAM データ
,{c},{CENTER},{CENTER},{LEFT}
,0        ,x,従来のカラーパレット経由
,1{ROWS:3},0,YJK→RGB変換テーブル経由
,         ,1{ROWS:2},A=0……YJK→RGB変換テーブル経由{BSIZE:1 1 0 1}
,         ,         ,A=1……カラーパレット経由{BSIZE:0 1 1 1}

{{svg 図4.67.svg}}
図4.67 YJKとJAEの組み合わせ
!8.2.5 V9958では削除された機能

+ コンポジットビデオ出力
+ マウス・ライトペンインターフェイス

 この変更に伴い、次の内部レジスタのビット(灰色の部分)が意味を持たなくなります。これらのレジスタに値を書き込む場合には、これらのビットに必ず「0」を書き込んで下さい。
 この変更に伴い、次の内部レジスタのビット({{svg 図P583-2.svg}}の部分)が意味を持たなくなります。これらのレジスタに値を書き込む場合には、これらのビットに必ず「0」を書き込んで下さい。

'''Status Register 1'''
{{svg 図P583.svg}}
,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:8|C},{BSIZE:0|SIZE:0}
,{c},{BSIZE:0|SIZE:70},{BSIZE:0|SIZE:0}
,FL  ,ライトペン光検出フラグ
,LPS ,ライトペン・マウススイッチ

'''Mode register 0'''
{{svg 図P584-1.svg}}
,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:8|C},{BSIZE:0|SIZE:0}
,{c},{BSIZE:0|SIZE:70},{BSIZE:0|SIZE:0}
,IE2 ,ライトペンによる割込み
,    ,(MSX2はV9938のライトペン機能は使用していない)

'''Mode register 2'''
{{svg 図P584-1.svg}}
{{svg 図P584-2.svg}}
,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:8|C},{BSIZE:0|SIZE:0}
,{c},{BSIZE:0|SIZE:70},{BSIZE:0|SIZE:0}
,MS ,マウスで使用
,LP ,ライトペンで使用
,    ,(MSX2はV9938のマウス・ライトペン機能は使用していない)

,{t},{BSIZE:1 0|SIZE:100%}
,{BSIZE:0}←[[7章 その他の機能]]                                                               ,{BSIZE:0|RIGHT}[[9章 YJK方式]]                                                                   →