- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
{{include unfinished_page}}
,{t},{BSIZE:1 0|SIZE:100%}
,{BSIZE:0}←[[1章 V9938の構成]] ,{BSIZE:0|RIGHT}[[3章 レジスタの機能]] →
この章では、VDPを操作するのに必要なコントロールレジスタ、パレットレジスタ、ステータスレジスタ、VDPにアクセスする方法などについて説明します。
!!2.1 コントロールレジスタのアクセス
V9938のコントロールレジスタ(R#0〜R#46)にデータをセットする方法は、直接指定と間接指定の2通りあります。
!2.1.1 直接指定
ポート#1に、データ、レジスタ番号の順に出力する方法です。この順番は必ず守らねばならないので、割り込みルーチンなどでV9938をアクセスしているときには注意が必要です。
{{svg 図P449.svg}}
!2.1.2 間接指定
コントロールレジスタR#17(Control register pointer)でレジスタ番号を指定する方法で、非オートインクリメントとオートインクリメントの2つのモードがあります。
'''1.非オートインクリメント'''
直接指定でR#17にレジスタ番号をセットし、ポート#3にデータを出力します。R#17の値は間接指定では変更できません。
非オートインクリメントモードでは、R#17の内容は不変なので、再セットする必要はありません。このモードはVDPコマンドの実行時など、同じレジスタに連続してデータを送るときに使用します。
{{svg 図P450-1.svg}}
'''2.オートインクリメント・モード'''
直接指定でR#17にレジスタ番号をセットし、ポート#3にデータを出力します。このときR#17のAIIビットに「0」をセットすると、ポート#3にデータを出力するたび、R#17の内容はオートインクリメントされます。
このモードを使用すると、スクリーンモードの変更時など、連続した多数のレジスタを一度に書き換える場合に便利です。
{{svg 図P450-2.svg}}
!2.2 パレットレジスタのアクセス
!!2.2 パレットレジスタのアクセス
パレットレジスタにデータをセットするためには、レジスタR#16(Color palette address pointer)にパレット番号を指定します。そして、ポート#2ヘデータを連続で出力します。これは、V9938のパレットレジスタ(P#0〜P#15)は9ビットの長さを持つため、最初に赤と青の輝度、次に緑の輝度とデータを2度に分けて出力する必要があるからです。
R#16は、ポート#2にデータを2バイト書き込むとオートインクリメントします。
{{svg 図P451-1.svg}}
!2.3 ステータスレジスタのアクセス
!!2.3 ステータスレジスタのアクセス
V9938のステータスレジスタ(S#0〜S#9)を読み出すには、レジスタR#15(Status register pointer)にステータスレジスタ番号をセットし、ポート#1を読み出します。
MSXの割り込みルーチンは、R#15に「0」がセットされていることを前提にしています。したがって、ステータスレジスタをアクセスする前には、必ず割り込みを禁止し、目的の処理が終了した後に、R#15に「0」をセットしてから割り込みを解除して下さい。
{{svg 図P450-2.svg}}
{{svg 図P451-2.svg}}
!!2.4 VRAM(VIDEO RAM)のアクセス
V9938には128KバイトのVRAMと64Kバイトの拡張RAMを接続することができます。拡張RAMはVDPコマンド実行時にワークエリアとして使用することができます。ただし、MSX2では拡張RAMは使用しないので、R#45のビット6には常に「0」を設定して下さい。
メモリマップは以下のようになっています。
{{svg 図P452.svg}}
VRAMアクセスは次の手順で行います。
+バンク切り換え(VRAM〜拡張RAM)
+アドレスカウンタセット(A16〜A14)
+アドレスカウンタセット(A7〜A0)
+アドレスカウンタセット(A13〜A8) 読み出し・書き込み指定
+データの読み出し・書き込み
'''1.アドレスカウンタセット(A16〜A14)'''
レジスタR#14(VRAM Access base address register)を使って、アドレスカウンタの上位3ビット(A16〜A14)をセットします。
このレジスタは、TMS9918互換モードのときには、オートインクリメントを指定してもカウントアップしません。
{{svg 図P453-1.svg}}
'''2.アドレスカウンタセット(A7〜A0)'''
ポート#1に、アドレスカウンタの下位8ビット(A7〜A0)にセットするデータを出力します。
{{svg 図P453-2.svg}}
'''3.アドレスカウンタセット(A13〜A8) 読み出し・書き込みの設定'''
ポート#1に、アドレスカウンタの残りの6ビット(A13〜A8)にセットするデータと読み出し・書き込みの指定を出力します。
{{svg 図P453-3.svg}}
'''4.データの読み出し・書き込み'''
ポート#0にデータを読み出し・書き込みをすると、アドレスカウンタが自動的にインクリメントされるので、連続してアクセスすることができます。
ただし、TMS9918互換モードのときには、A16〜A14はインクリメントされません。
{{svg 図P454.svg}}
{{svg 図P454-1.svg}}
!!2.5 V9938の画面構成
V9938の画面は以下のような構成になっています。
{{svg 図4部2章011.svg,,size:630x500}}
{{svg 図P454.svg}}
,{t},{BSIZE:1 0|SIZE:100%}
,{BSIZE:0}←[[1章 V9938の構成]] ,{BSIZE:0|RIGHT}[[3章 レジスタの機能]] →