P6月間企画(その15)
SRモードでの画面周りについて、の続きです。
今回は、横320ドットのグラフィックモードについて、その4です。
○グラフィックモード320×200/320x204ドット
7)それぞれのモードの利点
○一度にアクセスするビット数が多い(直接アクセスモード)
画面の描画をする際に、1命令で1ドット描く(ビットマップモード)か、2ドット描く(直接アクセスモード)の違いです。単純に2倍の速さが可能になります。
○ドット単位で扱える(ビットマップモード)
背景絵+キャラクタなどの重ね合わせ処理などが容易に出来るのがビットマップモードです。
(多分、これがビットマップモードの本来の目的だと思われます)
直接アクセスモードの場合は、一度VRAMの内容を読み出して、ANDを取ってORを取る、という処理が必要になります。
○アドレス計算がし易い(ビットマップモード)
XY座標で指定できるビットマップモードに比べて、アドレスが不連続かつ難解な直接アクセスモードでは、目的の場所を算出するのも大変だったりします。
○アドレス空間が狭い(ビットマップモード)
X座標は、通常0〜319の範囲で指定します。
そのため、CPUから見たアドレス空間としては、せいぜい0〜511(0x0000〜0x01FF)だけをVRAMアドレスとして割り当てればいい事になります。
一方、直接アクセスモードでは、0x0000〜0x7FFFのアドレス空間を消費してします。
さらに、リード/ライト割り当て設定を使えば、もっと便利なものになります。
例えば、通常のSR-BASICの状態は
リード:
0x0000〜0x7FFF:BASIC-ROM
0x8000〜0x9FFF:RAM(0x8000〜0x9FFF)
0xA000〜0xBFFF:RAM(0xA000〜0xBFFF)
0xC000〜0xDFFF:RAM(0xC000〜0xDFFF)
0xE000〜0xFFFF:RAM(0xE000〜0xFFFF)
ライト:
0x0000〜0x7FFF:RAM(0x0000〜0x7FFF)
0x8000〜0x9FFF:RAM(0x8000〜0x9FFF)
0xA000〜0xBFFF:RAM(0xA000〜0xBFFF)
0xC000〜0xDFFF:RAM(0xC000〜0xDFFF)
0xE000〜0xFFFF:RAM(0xE000〜0xFFFF)
ですが、
リード:
0xC000〜0xDFFF:RAM(0x0000〜0x1FFFを割り当てる)
ライト:
0xC000〜0xDFFF:RAM(0x0000〜0x1FFFを割り当てる)
とすると、BASIC-ROMは見えた状態で、VRAMにアクセスする事が出来ます。これにより、割り込み禁止をせずに、画面描画が可能になります。
あ、当然、0xC000〜0xDFFFに本来あるRAMには、このままではアクセスできませんよ。
利点が多いビットマップモードですが、速度を上げるために直接アクセスモードを使う事も多々あります。88版のソフトからの移植では、片方だけでなく両方のモードを使う事がほとんどです。
2018年06月15日
この記事へのコメント
コメントを書く

