Future Driver

VDPレジスタの詳細

VDPレジスタの詳細

VDPの動作設定は全てVDPレジスタへの値書き込みで行います。 VDPレジスタは23本あり、全て8bitです。

VDPレジスタ 0x00

0x00 - Mode Set Register No. 1
bit	7	6	5	4	3	2	1	0
	0	0	0	IE1	1	PS	M3	DD

IE1	1=水平割り込み有効,0=無効
PS	1=512色, 0=8色(CRAMのbit1, 5, 9 しか使わない)
M3	1=HV Counter動作, 0=HV Counter停止
DD	1=表示無効 0=表示有効
※Bit5を1にすると左8dot幅の領域がBG色のみになる。 (スプライトとBGが非表示になる)

VDPレジスタ 0x01

0x01 - Mode Set Register No. 2
bit	7	6	5	4	3	2	1	0
	TMS9918	DISP	IE0	M1	M2	SMS	0	0

TMS9918 1=TMS9918互換モード, 0=メガドライブモード
DISP	1=表示有効, 0=表示無効(VRAMがフリーになる)
IE0	1=垂直割り込み有効, 0=無効
M1	1=DMA有効、0=無効
M2	1=PAL(240lines), 0=NTSC(224Lines)
SMS	1=SMS互換モード, 0=メガドライブモード
※SMS互換モード時は拡大スプライト等があるが、メガドライブモードでは無効。

VDPレジスタ 0x02

0x02 - Pattern Name Table Address for Plane A
bit	7	6	5	4	3	2	1	0
	0	0	A15	A14	A13	0	0	0

Plane Aのパターンネームテーブルアドレスを指定します。 アドレスの上位3bitだけを指定するので8KBytes単位となります。

VDPレジスタ 0x03

0x03 - Pattern Name Table Address for Window
bit	7	6	5	4	3	2	1	0
	0	0	A15	A14	A13	A12	A11	0

VRAMに配置したWindowのパターンネームテーブルアドレスを指定します。 アドレスの上位5bitだけを指定するので2KBytes単位となります。

VDPレジスタ 0x04

0x04 - Pattern Name Table Address for Plane B
bit	7	6	5	4	3	2	1	0
	0	0	0	0	0	A15	A14	A13

VRAMに配置したPlane Bのパターンネームテーブルアドレスを指定します。 アドレスの上位3bitだけを指定するので8KBytes単位となります。

VDPレジスタ 0x05

0x05 - Sprite Attribute Table Base Address
bit	7	6	5	4	3	2	1	0
	0	A15	A14	A13	A12	A11	A10	A9

VRAMに配置したスプライトアトリビュートテーブルアドレスを指定します。 アドレスの上位7bitだけを指定するので512Bytes単位となります。

VDPレジスタ 0x07

0x07 - Backdrop Color
bit	7	6	5	4	3	2	1	0
	0	0	N5	N4	N3	N2	N1	N0

背景色を指定します。 CRAMに配置した色0〜63番のいずれかを指定します。 プレーンA, プレーンB, スプライトは割り当てたパレットの 0番目(0x00)の色が通過色になりますが、 それら全てが通過したpixelはここで指定した色番号で表示されます。

VDPレジスタ 0x0A

0x0A - H Interrupt Register
bit	7	6	5	4	3	2	1	0

水平割り込みラインを設定します。 0x00なら全てのラインで水平割り込みが発生します。 実際に割り込み発生を有効にするには、IE1ビットをセットする必要があります。

VDPレジスタ 0x0B

0x0B - Mode Set Register No. 3
bit	7	6	5	4	3	2	1	0
	0	0	0	0	IE2	VSCR	HSCR	LSCR

IE2	1=THピン割り込み有効, 0=無効
VSCR	1=セル単位垂直スクロール有効, 0=無効
HSCR	1=セル単位水平スクロール有効, 0=無効
LSCR	1=ライン単位水平スクロール有効, 0=無効

VSCR, HSCR, LSCRの3bitで表される組み合わせパターンは下記の通りです。 HSCRとLSCRの両方のビットが1の場合、HSCRよりもLSCRが優先されます。

VSCR, HSCR, LSCR (3bit) 垂直スクロール方式 水平スクロール方式
0x00 全画面単位 全画面単位
0x01 全画面単位 ライン単位
0x02 全画面単位 セル単位
0x03 全画面単位 ライン単位
0x04 セル単位 全画面単位
0x05 セル単位 ライン単位
0x06 セル単位 セル単位
0x07 セル単位 ライン単位

VDPレジスタ 0x0C

0x0C - Mode Set Register No. 4
bit	7	6	5	4	3	2	1	0
	RS0	0	0	0	S/TE	LSM1	LSM0	RS1

S/TE	1=Hilight/Shadow(半透明色)有効, 0=無効
RS0	1=水平解像度40セル(320pixel), 0=32セル(256pixel)
RS1	1=水平解像度40セル(320pixel), 0=32セル(256pixel)

LSMxの組み合わせで垂直解像度とインターレース方式が下記の様に決まります。

LSM1	LSM0
0	0	ノンインターレース(224line)
0	1	インターレース(224lineを448lineに拡大)
1	0	ノンインターレース(224line)
1	1	インターレース (448line)

VDPレジスタ 0x0D

0x0D - H Scroll Data Table Base Address
bit	7	6	5	4	3	2	1	0
	0	0	A15	A14	A13	A12	A11	A10

VRAMに配置した水平スクロールデータテーブルアドレスを指定します。 アドレスの上位6bitだけを指定するので1KBytes単位となります。

VDPレジスタ 0x0F

0x0F - Auto Increment Data
bit	7	6	5	4	3	2	1	0
	I7	I6	I5	I4	I3	I2	I1	I0

データポート(0xC00000)にアクセスした後にアドレスを自動加算(Address++) する事が可能です。 加算するサイズをバイト単位(0〜255bytes)で設定します。 自動加算しない場合は 0 を設定してください。

以下はこのレジスタで2bytesづつ自動加算する様設定されている前提で、 unsigned int型の配列colors[64]に格納されている色データをCRAMに転送する例です。

	addressPort = (unsigned int *)0xC00004;
	*addressPort = 0xC0000000;
	for(n = 0; n < 64; n++){
		/* 自動加算されるのでループ中はアドレス設定不要 */
		*dataPort = colors[n];
	}

VDPレジスタ 0x10

0x10 - Scroll Size
bit	7	6	5	4	3	2	1	0
	0	0	VSZ1	VSZ0	0	0	HSZ1	HSZ0

VSZx	垂直サイズ
HSZx	水平サイズ

Plane A と Plane B のサイズを指定します。 両者のサイズを個別に設定する事は出来ません。

xSZ1	xSZ0
0	0	32 cells (256pixel)
0	1	64 cells (512pixel)
1	0	無効
1	1	128 cells (1024pixel)

この設定値により、 パターンネームテーブルに必要なVRAM容量が決まります。 32 x 32cells なら1枚のPlane当り32 * 32 * 2 = 2048bytes必要です。 もし水平320pixelの画面解像度を設定し、 水平256pixel(32cells)のスクロールサイズを設定した場合、 画面解像度に対して足りない水平64pixel分が常にラッピング表示されます。



inserted by FC2 system