SRの、VRAMの表示用アドレス

自分用のメモです。。
かなり、専門的な話になります。。。


I/O C9H の、VRAMのアドレスの切り替えというのは、CRTCが、VRAMから読み取って、画面に出力する場合の、CRTCが読み取る、VRAMのアドレスのことのようです。
長いので、便宜上、VRAMの表示用アドレスと表記します。

ちなみに、モード5までは、このアドレス選択しか有りませんでした。。
何故かというと、モード5までは、CPUが自由に、VRAMにアクセス出来たからです。


モード6からは、CPUは、CRTCを通さないと、VRAMにアクセス出来なくなりました。
なので、CRTCに、どのメモリーをVRAMとして使うのか?というアドレス選択も有るのだと思います。


ちなみに、I/O に、アクセスしたいY座標を出力すると、CRTCが、その横1ラインのイメージを、RAMの先頭に出すので、そこを読み書きします。
横1ラインずつしかアクセス出来ない。。SRには、そういう制限があります。。



このI/O C9Hの実装ですが、キャラクターモードか、グラフィックスモードによって、計算式が違います。
I/O C1Hのb2 1:キャラクターモードか、 0:グラフィックスモードの切り替えがあります。
これが、今、どっちの画面を表示しているかを表しています。


つまり、I/O C1Hの b2が1(キャラクターモード)のときに、テキスト画面用のVRAMの表示用アドレスを、変更します。

VRAM = RAM + (val)*0x1000;

です。


I/O C1Hの b2が0(グラフィックスモード)のときに、グラフィックス画面用のVRAMの表示用アドレスを変更します。

VRAM = RAM +((val & 8) ? 0x8000: 0x0000);

となります。