SRモードでの画面周りについて、の続きです。
今回は、横640ドットのグラフィックモードについて、その2です。
○グラフィックモード640×200/640x204ドット
4)ビットマップモード
『Y座標をポート0xCE、X座標をアドレスで指定』する事で、指定のXY座標の位置にドットを描く』のは、横320ドットの場合ですが、この回路をそのまま横640ドットの場合にも使っているために、分かりにくい動作になっています。
VRAMアドレスを示す時に4バイト単位で見ましたが、その4バイト単位で同じ回路を使って、横320ドットと横640ドットの表示がされているようです。
横320ドットの場合、上図の1ドット単位でアクセスが出来るように、ビットマップモード用変換回路が動作します。
X座標とY座標を個別に指定し、図内の太線四角枠が一度に指定するドットになります。横320ドットの場合は、一度に指定するドットは1ドットです。
同じ回路を使うため、横640ドットのビットマップモードで、一度に指定するドットは下図のようになります。
図内の太線四角枠が一度に指定するドットになります。横640ドットの場合は、一度に指定するドットは、B/Rプレーンのいずれかの4ドットです。
つまり、2回指定しないと4ドットの色を全部決める事はできませんし、1ドット単位で設定する事はできません。
さらに、枠内の(0,0)などは指定する時のXY座標です。Y座標は実際のY座標と一致するのですが、X座標は一致しません。
実際の座標(x,y)、指定座標(X,Y) とすると、以下の通りになります。
X,Y = 0,0 の時、x = 4〜 7, y = 0 のプレーンB
X,Y = 1,0 の時、x = 0〜 3, y = 0 のプレーンB
X,Y = 2,0 の時、x = 4〜 7, y = 0 のプレーンR
X,Y = 3,0 の時、x = 0〜 3, y = 0 のプレーンR
X,Y = 0,1 の時、x = 4〜 7, y = 1 のプレーンB
X,Y = 1,1 の時、x = 0〜 3, y = 1 のプレーンB
X,Y = 2,1 の時、x = 4〜 7, y = 1 のプレーンR
X,Y = 3,1 の時、x = 0〜 3, y = 1 のプレーンR
X,Y = 4,0 の時、x = 12〜15, y = 0 のプレーンB
X,Y = 5,0 の時、x = 8〜11, y = 0 のプレーンB
X,Y = 6,0 の時、x = 12〜15, y = 0 のプレーンR
X,Y = 7,0 の時、x = 8〜11, y = 0 のプレーンR
X,Y = 4,1 の時、x = 12〜15, y = 1 のプレーンB
X,Y = 5,1 の時、x = 8〜11, y = 1 のプレーンB
X,Y = 6,1 の時、x = 12〜15, y = 1 のプレーンR
X,Y = 7,1 の時、x = 8〜11, y = 1 のプレーンR
:
以下同様です。
一般化すると、
指定座標(X,Y) (ただし、X=4*n n=0,1,2,…,159)の時
X+0,Y の時、x = X*2+4 〜X*2+7, y = Y のプレーンB
X+1,Y の時、x = X*2+0 〜X*2+3, y = Y のプレーンB
X+2,Y の時、x = X*2+4 〜X*2+7, y = Y のプレーンR
X+3,Y の時、x = X*2+0 〜X*2+3, y = Y のプレーンR
となります。
横640ドットなのですが、実際にX座標に指定する値は、0〜319という事になります。
5)ビットマップモードで
・Y座標の設定を204以上にした場合はどうなる?
・X座標の設定を320以上にした場合はどうなる?
横320ドットと同じです。
6)ビットマップモードで
・ポート0xC8のビット3でイネーブル/ディセーブルの切換だけど、ビット4のビットマップページ指定との関係は?
・メモリ割り当てと同時に使うとどうなる?
・そもそもビットマップモードとは?
横320ドットと同じです。
7)それぞれのモードの利点
基本的に横320ドットと同じなのですが、ビットマップモードの利点である『ドット単位で扱える』事がなくなっており、さらに、直接アクセスモードの方が分かりやすくなっています。
あくまでも横320ドットが基本で、横640ドットは付け足しのような印象です。

