Detailed VB Memory Map

0x0000 0000 - 0x0007 FFFF	Display RAM, VIP	0x7FFFF bytes
0x0000 0000 - 0x0000 5FFF	L FrameBuff0		0x6000 bytes
0x0000 6000 - 0x0000 7FFF	CHR 0-511		0x2000 bytes
0x0000 8000 - 0x0000 DFFF	L FrameBuff1		0x6000 bytes  
0x0000 E000 - 0x0000 FFFF	CHR 512-1023		0x2000 bytes
0x0001 0000 - 0x0001 5FFF	R FrameBuff0		0x6000 bytes
0x0001 6000 - 0x0001 7FFF	CHR 1024-1535		0x2000 bytes
0x0001 8000 - 0x0001 DFFF	R FrameBuff1		0x6000 bytes
0x0001 E000 - 0x0001 FFFF	CHR 1536-2047		0x2000 bytes
0x0002 0000 - 0x0003 BFFF	BAM (BGMap RAM)		0x1C000 bytes *(1)
0x0003 C000 - 0x0003 D7FF	PARAM_TABLE		0x017FF bytes
0x0003 D800 - 0x0003 DBFF	WAM (World RAM)		0x00400 bytes
0x0003 DC00 - 0x0003 DDFF	CLMN_TBL1		0x00200 bytes 
0x0003 DE00 - 0x0003 DFFF	CLMN_TBL2		0x00200 bytes 
0x0003 E000 - 0x0003 FFFF	OAM (Object RAM)	0x02000 bytes

*(1)	The boundary between BAM and the PARAM_TABLE is variable

0x0004 0000 - 0x0005 F7FF	VIP Mirroring [How does this work?]
0x0005 F800 - 0x0005 F870	VIP - Only assessable in HWords

*0x0005 F800			INTPND	Interrupt Pending
*0x0005 F802			INTENB	Interrupt Enabled Flag
*0x0005 F804			INTCLR	Clear the bits in INTPND
*0x0005 F820			DPSTTS	Display Status
*0x0005 F822			DPCTRL	Display Control

0x0005 F824			BRTA	Color 1 Brightness (0-80 [0-100?])
0x0005 F826			BRTB	Color 2 Brightness (0-80 [0-100?])
0x0005 F828			BRTC	Color 3 Brightness = A + B + C

0x0005 F82A			REST	Counter, reset with 0x0000?
0x0005 F82E			FRMCYC	Repeat/G_CLK?
0x0005 F830			CTA	Column Table Address, R/L (Read Only?)
*0x0005 F840			XPSTTS	?
*0x0005 F842			XPCTRL	?
0x0005 F844			VER	Static Number?

0x0005 F848			SPT0	Pointers to the 4 OBJ groups in OAM
0x0005 F84A			SPT1
0x0005 F84C			SPT2
0x0005 F84E			SPT3

0x0005 F860			GPLT0	4 four-color (2-bit) palettes for BGMaps
0x0005 F862			GPLT1
0x0005 F864			GPLT2
0x0005 F866			GPLT3
0x0005 F868			JPLT0	4 four-color (2-bit) palettes for OBJs
0x0005 F86A			JPLT1
0x0005 F86C			JPLT2
0x0005 F86E			JPLT3

0x0005 F870			BKCOL	Screen cleared to BKCOL before rendering
					0: Black, 1-3: BRTA-BRTC

0x0007 8000 - 0x0007 FFFF	Linear mirror of CHR Data	0x8000 bytes

	Serial access memory, 0x700 bytes (where?)

0x0008 0000 - 0x00FF FFFF	Mirror of 0x0000 0000 - 0x0007 FFFF

0x0100 0000 - 0x0100 05FF	Sound Memory

Sound data consists of 32 WORDs masked with 0x3F to form 6-bit samples

0x0100 0000 - 0x0100 007F	SOUNDCH1 Data			0x20 bytes
0x0100 0080 - 0x0100 00FF	SOUNDCH2 Data			0x20 bytes
0x0100 0100 - 0x0100 017F	SOUNDCH3 Data			0x20 bytes
0x0100 0180 - 0x0100 01FF	SOUNDCH4 Data			0x20 bytes
0x0100 0200 - 0x0100 027F	Sweep  Data			0x20 bytes
0x0100 0280 - 0x0100 02FF	Modulation Data			0x20 bytes

0x0100 0400 - 0x0100 05FF	Sound Control Registers (WORDs masked w/0xFF)

	Channel 1: Standard wave
0x0100 0400			S1CTRL	Sound1 Control Register
0x0100 0404			S1LEN	Length Register
0x0100 0408			S1FL	Frequency low byte
0x0100 040C			S1FH	Frequency high byte
0x0100 0410			S1?L	Unknown
0x0100 0414			S1?H	Unknown
0x0100 0418			S1INST	Instrument

	Channel 2: Standard wave
0x0100 0440			S2CTRL	Sound2 Control Register
0x0100 0444			S2LEN	Length Register
0x0100 0448			S2FL	Frequency low byte
0x0100 044C			S2FH	Frequency high byte
0x0100 0450			S2?L	Unknown
0x0100 0454			S2?H	Unknown
0x0100 0458			S2INST	Instrument

	Channel 3: Standard wave
0x0100 0480			S3CTRL	Sound3 Control Register
0x0100 0484			S3LEN	Length Register
0x0100 0488			S3FL	Frequency low byte
0x0100 048C			S3FH	Frequency high byte
0x0100 0490			S3?L	Unknown
0x0100 0494			S3?H	Unknown
0x0100 0498			S3INST	Instrument

	Channel 4: Standard wave
0x0100 04C0			S4CTRL	Sound4 Control Register
0x0100 04C4			S4LEN	Length Register
0x0100 04C8			S4FL	Frequency low byte
0x0100 04CC			S4FH	Frequency high byte
0x0100 04D0			S4?L	Unknown
0x0100 04D4			S4?H	Unknown
0x0100 04D8			S4INST	Instrument

	Channel 5: Sweep/Modulation
0x0100 0500			S5CTRL	Sound5 Control Register
0x0100 0504			S5LEN	Length Register
0x0100 0508			S5FL	Frequency low byte
0x0100 050C			S5FH	Frequency high byte
0x0100 0510			S5?L	Unknown
0x0100 0514			S5?H	Unknown
0x0100 0518			S5INST	Instrument

	Channel 6: Noise
0x0100 0540			S6CTRL	Sound6 Control Register
0x0100 0544			S6LEN	Length Register
0x0100 0548			S6FL	Frequency low byte
0x0100 054C			S6FH	Frequency high byte
0x0100 0550			S6?L	Unknown
0x0100 0554			S6?H	Unknown
0x0100 0558			S6INST	Instrument

0x0100 0580			SMREG	Main sound control register

0x0200 0000 - 0x0200 002C	Hardware Control Registers (WORDs masked w/0xFF)

0x0200 0000			LPC	Link Port Control Register

10000000 (R/W)			INTDIS	1: Clear & Disable interrupts
					0: Enable
01000000 (?)			RFU	Unused, set to 1
00100000 (?)			RFU	Unused, set to 1
00010000 (R/W)			CLKSEL	1: External clock
					0: Internal (20 MHz/40 - 500 KHz)
00001000 (?)			RFU	Unused, set to 1
00000100 (W)			COMSTRT	1: Start comm. on falling edge of clock
00000010 (R)			COMSTAT	1: Communicating
					0: Idle
00000001 (?)			RFU	Unused, set to 1


0x0200 0004			LPC2	Link Port Control Register

10000000 (R/W)			INTDIS	1: Clear and disable interrupts
					0: Enable
01000000 (?)			RFU	Unused, set to 1
00100000 (?)			RFU	Unused, set to 1
00010000 (R/W)		InterruptLevel	???
00001000 (R/W)		ControlSignal	???
00000100 (R)		ControlSample	???
00000010 (R/W)		ControlWrite	???
00000001 (R)		ControlRead	???


- In/Out data for the timer, keypad and link port -
0x0200 0008 (R/W)		LPT	Link Port Transmit data
0x0200 000C (R)			LPR	LinkPort Receive data
0x0200 0010 (R)			KLB	Keypad LowByte
0x0200 0014 (R)			KHB	Keypad HighByte
0x0200 0018 (R/W)		TLB	Timer LowByte
0x0200 001C (R/W)		THB	Timer HighByte


0x0200 0020 (R/W)		TCR	Timer Control Register

10000000 (?)			RFU	Unused, set to 1
01000000 (?)			RFU	Unused, set to 1
00100000 (?)			RFU	Unused, set to 1
00010000 (R/W)			TCLK	Resolution of the clock 1: 20µs
					0: 100ms (default)
00001000 (R/W)			TINT	1: Enable interrupt
					0: Disable
00000100 (W)			TCLR	1: Clear status flag
00000010 (R)			TSTAT	1: Counted to zero
					0: Disabled
00000001 (R/W)			TEN	1: Restart count
					0: Disable


0x0200 0024 (R/W)		WCR	Wait States Control Register

10000000 (?)			RFU	Unused, set to 1
01000000 (?)			RFU	Unused, set to 1
00100000 (?)			RFU	Unused, set to 1
00010000 (?)			RFU	Unused, set to 1
00001000 (?)			RFU	Unused, set to 1
00000100 (?)			RFU	Unused, set to 1
00000010 (R/W)			WEXP	1: 1 wait  0: 2 waits (default)
00000001 (R/W)			WROM	1: 1 wait  0: 2 waits (default)


0x0200 0028 (R/W)		KCR	Keypad Control Register

10000000 (R/W)			INTDIS	1: Clear and Disable Interrupts
					0: Enable (default)
01000000 (?)			RFU	Unused, set to 1
00100000 (R/W)			KLATCH	1: Software data latch
					0: Hardware read
00010000 (R/W)			KCLK	1: Software clock
					0: Hardware read
00001000 (?)			RFU	Unused, set to 1
00000100 (W)			KSTART	1: Start hardware read
					0: Idle (default)
00000010 (R)			KSTAT	1: Reading
					0: Idle
00000001 (R/W)			KSUSP	1: Pause reading
					0: Resume (default)


0x0400 0000 - 0x04FF FFFF	Expansion area	0x00FF FFFF bytes max
0x0500 0000 - 0x0500 FFFF	Work RAM	0xFFFF bytes (mask with ffff)
0x0600 0000 - 0x0600 1FFF	Cartridge RAM	0x00FF FFFF bytes max
0x0700 0000 - 0x07FF FFFF	Cartridge ROM	0x00FF FFFF bytes max *(2)

*(2)	All ROMs must be powers of 2 in size (256k, 512, 1024, 2048 etc.)
	The ROM starts at 0x700 0000 and goes up. But, due to addressing
	rollover, you can always read the ROM backwards from 0x07FF FFFF
	down.  This is how the reset vector is read.