MSX Datapack wiki化計画

3章 レジスタの機能の変更点

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

,{t},{BSIZE:1 0|SIZE:100%}
,{BSIZE:0}←[[2章 基本入出力]]                                                                 ,{BSIZE:0|RIGHT}[[4章 V9938の画面モード]]                                                         →

 この章では、VDPを制御するコントロールレジスタ、ステータスレジスタについて説明します。

!!3.1 コントロールレジスタ#0〜#23、#32〜#46(Write only)

!3.1.1 モードレジスタ

 モードレジスタは各種動作モードを設定するレジスタで、コントロールレジスタ#0、#1、#8、#9に配置されています。

'''Mode register 0'''

{{svg 図P455.svg}}

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,DG ,1のとき、カラーバスを入力モードにして、データをVRAMに取り込む
,   ,(デジタイズ機能を持ったMSX2でのみ使用可能)
,IE2,Interrupt Enable2(1のとき、ライトペンによる割り込みを可能にする)
,IE1,Interrupt Enable1(1のとき、水平帰線による割り込みを可能にする)
,M5 ,表示モードの設定に使用する
,M4 ,表示モードの設定に使用する
,M3, 表示モードの設定に使用する

 IE2はライトペン割り込み用のビットです。MSXではこの機能は使用しないので、常に「0」にして下さい。

'''Mode register 1'''

{{svg 図P456-1.svg}}

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,BL ,1=画面表示、0=画面非表示
,IE0,Interrupt Enable0(1のとき、垂直帰線による割り込みを可能にする)
,M1 ,表示モードの設定に使用する
,M2 ,表示モードの設定に使用する
,SI ,スプライトのサイズ 1=16×16、0=8×8
,MAG,スプライトの拡大 1=拡大する、0=拡大しない


'''Mode register 2'''

{{svg 図P456-2.svg}}

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,MS ,1=マウスを使用する(カラーバスは入力モード)、0=マウスを使用しない(カラーバスは出力モード)
,LP ,1=ライトペンを使用する、0=ライトペンを使用しない
,TP ,カラーコード0の色をカラーパレットの色にする
,CB ,1=カラーバスを入力モードにする、0=カラーバスを出力モードにする
,VR ,VRAMの種類を選択する
,   ,1=64K×1bitまたは64K×4bit、0=16K×1bitまたは16K×4bit
,SPD,1=スプライト非表示、0=スプライト表示
,BW ,1=白黒32階調、0=カラー(Composit encoder にのみ有効)
,   ,BWはMSXでは使用していません。

 MSはライトペン用の、LPはマウス用のレジスタです。MSXではこの機能は使用していないので、常に「0」にして下さい。


'''Mode register 3'''

{{svg 図P456-3.svg}}

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,LN ,1=縦212ドット表示、0=縦192ドット表示
,S1 ,同期モード選択(「7.4 同期モードの選択」参照)
,S0 ,同期モード選択(「7.4 同期モードの選択」参照)
,IL ,1=Interlace(完全NTSCタイミング)、0=Non Interlace(不完全NTSCタイミング)
,EO ,1=Even field/Odd fieldで2枚の絵を交互に表示、0=Even field/Odd fieldで同じ絵を表示
,NT ,1=PAL(313line)、0=NTSC(262line) RGB出力のみ有効
,DC ,1=DLCLK端子を入力モードにする、0=DLCLK端子を出力モードにする


!3.1.2 テーブルベースアドレスレジスタ

 V9938に対してVRAM上の各テーブルの先頭アドレスを宣言するためのレジスタ群です。
 表示モードによっては、設定できるデータの値に制限(実際のアドレスと異なる場合)があるので注意して下さい。詳しくは、各表示モードの解説を参照して下さい。

'''Pattern name table base address register'''

{{svg 図P457-1.svg}}

'''Color table base address register low'''

{{svg 図P457-2.svg}}

'''Color table base address register high'''

{{svg 図P457-3.svg}}

'''Pattern generator table base address register'''

{{svg 図P457-4.svg}}

'''Sprite attribute table base address register low'''

{{svg 図P458-1.svg}}

'''Sprite attribute table base address register high'''

{{svg 図P458-2.svg}}

'''Sprite pattern generator table base address register'''

{{svg 図P458-3.svg}}

!3.1.3 カラーレジスタ

 V9938の表示色、ブリンクなどを制御するためのレジスタ群です。

'''Text color/Back drop color register'''

{{svg 図P458-4.svg}}

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,TC3〜TC0 ,TEXT1、TEXT2モードにおけるテキストの色を指定
,BD3〜BD0 ,GRAPHIC7以外の表示モードにおけるバックドロップの色を指定
,BD7〜BD0 ,GRAPHIC7モードにおけるバックドロップの色を指定

'''Text color/Back color register'''

{{svg 図P458-5.svg}}

 TEXT2モードにおいてパターンにブリンクの属性がついているときは、このレジスタで指定された色とR#7で指定された色が交互に表示されます。

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,T23〜T20 ,パターンの1の部分の色を指定
,BC3〜BC0 ,パターンの0の部分の色を指定

'''Blinking period register'''

{{svg 図P459-1.svg}}

 GRAPHIC4〜GRAPHIC7のビットマップモードとTEXT2モードで、2ページの画面を交互に表示させる(ブリンクさせる)ためのレジスタです。このレジスタにデータをセットし、表示ページを奇数ページにセットするとブリンクを開始します。表4.3を参照して下さい。

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,ON3〜ON0 ,偶数ページの表示時間(ビットマップモード時)
,         ,R#7の色の表示時間(TEXT2モード時)
,OF3〜OF0 ,奇数ページの表示時間(ビットマップモード時)
,         ,R#12の色の表示時間(TEXT2モード時)

'''Color burst register 1'''

{{svg 図P459-2.svg}}

'''Color burst register 2'''

{{svg 図P459-3.svg}}

'''Color burst register 3'''

{{svg 図P459-4.svg}}

 カラーバーストレジスタには、それぞれ上記の値がパワーオン時にプリセットされます。この値を全て0にするとコンポジットビデオ出力の色成分の信号を消すことができます。R#20〜#22はMSX2では使用しません。

,補足{SIZE:100|CENTER}
MSXのコンポジットビデオ出力は、多くの場合V9938のRGBビデオ出力から外部回路により作成されます。したがって、コンポジット出力に影響のある機能は有効ではないとお考え下さい。

!3.1.4 ディスプレイレジスタ

 CRT上の表示位置を制御するレジスタ群です。

'''Display adjust register'''

{{svg 図P460-1.svg}}

 CRT上の表示位置を補正するためのレジスタです。

,{t},{BSIZE:0}
,{c N},{SIZE:40|BSIZE:0|CENTER}
,{c},{N},{SIZE:120|BSIZE:0},{N},{N},{N},{N},{N},{N},{N},{N},{N},{N},{N},{N},{N},{N},{N},{N}
,,左右の補正(H),7 ,6,5,4,3,2,1,0   ,15,14,13,12,11,10,9,8
,,             ,左, , , , , , ,中央,  ,  ,  ,  ,  ,  , ,右
,,上下の補正(V),7 ,6,5,4,3,2,1,0   ,15,14,13,12,11,10,9,8
,,             ,上, , , , , , ,中央,  ,  ,  ,  ,  ,  , ,下

'''Display offset register'''

{{svg 図P460-2.svg}}

 表示開始ラインをセットするためのレジスタです。このレジスタの値を変えることによって画面の縦スクロールを行うことができます。ただし、スクロールは256ライン単位で行われるので、スプライトテーブルなどは別のページに置かなければなりません。
{{svg 図4.1.svg}}
'''図4.1 ディスプレイオフセットレジスタの設定例'''

'''Interrupt line register'''

{{svg 図P461-1.svg}}

 V9938では、CRTが特定の走査線の表示を終えたときに割り込みを発生させることができます。このレジスタに割り込みを発生させる走査線の番号をセットし、R#0のビット4に「1」をセットします。
 詳しくは、添付のフロッピーディスクの中に走査線割り込みのサンプルプログラムが入っていますので、参照して下さい。

!3.1.5 アクセスレジスタ

 V9938のレジスタやVRAMをアクセスするときに使用するレジスタ群です。

'''VRAM Access base address register'''

{{svg 図P461-2.svg}}

 V9938のVRAMをアクセスするときに、アドレスの上位3ビットをこのレジスタにセットします。
 また、このレジスタの値は、VRAMをアクセスするとA13からのキャリーを受けて自動的にインクリメントされます。ただし、GRAPHIC1、GRAPHIC2、MULTICOLOR、TEXT1モードではインクリメントしません。

'''Status register pointer'''

{{svg 図P461-3.svg}}

 V9938のステータスレジスタ(S#0〜S#9)を読み出す際、このレジスタにステータスレジスタの番号(0〜9)をセットします。


'''Color palette address register'''

{{svg 図P462-1.svg}}

 V9938のカラーパレットにアクセスする際、このレジスタにパレットの番号をセットします。

'''Color register pointer'''

{{svg 図P462-2.svg}}

 V9938では、このレジスタの値をポインタとして他のレジスタをアクセスすることができます。また、AIIビットの指定によって、内容を自動的にインクリメントさせることができます。

!3.1.6 コマンドレジスタ

 V9938のコマンドを実行するときに使用するレジスタ群です。詳しくは5章を参照して下さい。

'''Source X low register'''

{{svg 図P462-3.svg}}

'''Source X high register'''

{{svg 図P462-4.svg}}

'''Source Y low register'''

{{svg 図P462-5.svg}}

'''Source Y high register'''

{{svg 図P463-1.svg}}

'''Destination X low register'''

{{svg 図P463-2.svg}}

'''Destination X high register'''

{{svg 図P463-3.svg}}

'''Destination Y low register'''

{{svg 図P463-4.svg}}

'''Destination Y high register'''

{{svg 図P463-5.svg}}

'''Number of dot X low register'''

{{svg 図P463-6.svg}}

'''Number of dot X high register'''

{{svg 図P463-7.svg}}

'''Number of dot Y low register'''

{{svg 図P463-8.svg}}

'''Number of dot Y high register'''

{{svg 図P464-1.svg}}

'''Color register'''

{{svg 図P464-2.svg}}

'''Argument register'''

{{svg 図P464-3.svg}}

'''Command register'''

{{svg 図P464-4.svg}}


!!3.2 ステータスレジスタ#0〜#9(Read only)

 V9938の状態を読み出すための、読み出し専用のレジスタ群です。

'''Status register 0'''

{{svg 図P464-5.svg}}

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,F  ,垂直帰線割り込みフラグ
,   ,S#0を読み出すとリセットされる
,5S ,第5スプライトフラグ
,   ,1水平線上にスプライトが5個(GRAPHIC3〜GRAPHIC7モードは9個)並ぶとリセットされる
,C  ,衝突フラグ
,   ,スプライトが衝突するとセットされる
,5th sprite#,第5(第9)スプライトの番号がセットされる

'''Status register 1'''

{{svg 図P465-1.svg}}

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,FL ,ライトペンスイッチ(ライトペンフラグがセットされているとき)
,   ,ライトペンが光を検出するとセットされる。このとき、IE2がセットされていると割り込みを発生する。S#1を読み出すとリセットされる。
,   ,マウススイッチ2(マウスフラグがセットされているとき)
,   ,マウスのスイッチ2が押されたらセットされる。S#1を読み出してもリセットされない。
,LPS,ライトペンスイッチ(ライトペンフラグがセットされているとき)
,   ,ライトペンのスイッチが押されるとセットされる。S#1を読み出してもリセットされない。
,   ,マウススイッチ1(マウスフラグがセットされているとき)
,   ,マウスのスイッチ1が押されたらセットされる。S#1を読み出してもリセットされない。
,ID#,V9938のID番号
,FH ,水平帰線割り込みフラグ
,   ,水平帰線(R#19で指定)による割り込み(フラグIE1ガセットされているとき)が発生するとセットされる。S#1を読み出すとリセットされる。

FLとLPSはライトペン用のレジスタですがMSXではこのインターフェイスは使用していないので、ビット6、7は意味を持ちません。

'''Status register 2'''

{{svg 図P465-2.svg}}

,{t},{BSIZE:0}
,{c},{BSIZE:0|SIZE:100},{BSIZE:0}
,TR ,転送レディフラグ
,   ,CPU to VRAM、VRAM to CPUなどのコマンドを実行するときは、CPUはこのフラグを見ながらデータを読み書き(転送)する。1のとき転送可。
,VR ,垂直帰線期間フラグ
,   ,垂直帰線期間中は1になる。
,HR ,水平帰線期間フラグ
,   ,水平帰線期間中は1になる。
,BD ,境界色発見フラグ
,   ,サーチコマンドの実行で、境界色または非境界色を発見したら1になる。
,EO ,表示フィールドフラグ
,   ,0=第1フィールド、1=第2フィールド
,CE ,コマンド実行フラグ
,   ,コマンドを実行中は1になる。


'''Column register low'''

{{svg 図P466-1.svg}}

'''Column register high'''

{{svg 図P466-2.svg}}

'''Row register low'''

{{svg 図P466-3.svg}}

'''Row register high'''

{{svg 図P466-4.svg}}

 これらのレジスタには、スプライトの衝突座標などがセットされます。詳しくは「6.2.8 スプライトの衝突」をご参照下さい。

'''Color register'''

{{svg 図P466-5.svg}}

 POINT、VRAM to CPUなどのコマンドを実行すると、VRAMのデータがこのレジスタにセットされます。

'''Border X register low'''

{{svg 図P467-1.svg}}

'''Border X register high'''

{{svg 図P467-2.svg}}

 サーチコマンドで発見した境界色または非境界色のX座標が、このレジスタにセットされます。


,{t},{BSIZE:1 0|SIZE:100%}
,{BSIZE:0}←[[2章 基本入出力]]                                                                 ,{BSIZE:0|RIGHT}[[4章 V9938の画面モード]]                                                         →