Future Driver

Z80のメモリ

Z80のメモリマップ

Z80 68000 Description
0000h 〜 1FFFh 0xA00000 〜 0xA01FFF 8KBytes RAM
7F11h 0xC00011 PSG音源ポート
6000h None バンクレジスタ
4000h 0xA04000 FM音源レジスタポート(プライマリ)
4001h 0xA04001 FM音源データポート(プライマリ)
4002h 0xA04002 FM音源レジスタポート(セカンダリ)
4003h 0xA04003 FM音源データポート(セカンダリ)
8000h 〜 FFFFh 0x000000 〜 0x3FFFFF 32KBytes ROMウィンドウ

Z80のRAM

Z80のアドレス 0000h 〜 2000h までがRAMです。
特に制限はありませんが、 68000が自由に読み書き出来る都合上、 プログラムのバグで68000が間違ったアドレスを書き込むとRAMの内容があっさり破壊されるので注意です。

Z80のROM

Z80はカートリッジの全領域をアクセス出来ます。
但しカートリッジ容量が32MBitまであるのに対しZ80のメモリ空間は64KBytesなので、 32KBytes単位のバンク切り替えでアクセスします。

バンク切り替え

バンクを切り替えるにはバンクレジスタ(アドレス 6000h) にバンク番号を書き込みます。
バンクレジスタへの書き込み方法は特殊で、バンク番号を1回のバイトアクセスで指定する事が出来ません。 具体的には、バンク番号を下位bit15から上位bit23まで1bitづつ順に書き込んでいきます。

下記は68000から見た任意のカートリッジROMアドレス(24bit) をバンクセレクトするサブルーチンの例です。

	;**************************************************
	;使い方
	;下記にアドレスを書き込んでからこのルーチンを呼ぶ事
	;
	;	ROM_HIGH	= 68000アドレス上位
	;	ROM_MID		= 68000アドレス中位
	;	ROM_LOW		= 68000アドレス下位 ...このコードでは未使用
	;
	;**************************************************
BANK_SEL:
	PUSH	AF
	PUSH	HL
	LD	HL, 6000h
	LD	A, (ROM_MID)
	RLCA
	LD	(HL), A		; bit 15
	LD	A, (ROM_HIGH)	;
	LD	(HL), A		; bit 16
	RRA
	LD	(HL), A		; bit 17
	RRA
	LD	(HL), A		; bit 18
	RRA
	LD	(HL), A		; bit 19
	RRA
	LD	(HL), A		; bit 20
	RRA
	LD	(HL), A		; bit 21
	XOR	A
	LD	(HL), A		; bit 22
	LD	(HL), A		; bit 23
	POP	HL
	POP	AF
	RET

尚、68000からも0xA06000に対して上記シーケンスを行う事で、 Z80の代わりにバンクセレクトが可能です。



inserted by FC2 system