Got something we don't? Need a correction? Send it!

Register Map
	


0x01000000: TA access base

0xa4000000: graphics memory base (64bit interface)

0xa5000000: graphics memory base (32bit interface)


##############################################################################
#### Miscellaneous


0xa0702c00: Something to do with what kind of video cable is attached, + ARM7 control

		-------- -------- ------cc -------r

		c - Video cable type (same as on CCN::PDTRA) (BootROM code copies the c bits from CCN::PDTRA to here)

		r - ARM7 core reset (when released from reset, the ARM7 will take reset exception?)

		My guess: The c field in this register controls some aspect of the display adapter;
			   only c != 3 (ok RGB picture) and c == 3 (lost signal on RGB scart) seem to have any effect...
			   c != 3 might select RGB/VGA output format, c == 3 might select Composite output format.
			  Why is there anything video related in this register???


0xff80002c: CCN::PCTRA

		-------- ----ssss -------- --------

		s - Set to 0xa to be able to read the cable type from PDTRA below (already setup by BootROM)


0xff800030: CCN::PDTRA

		------cc --------

		c - Video cable type (read-only):

			0 - VGA
			1 - (Undefined)
			2 - RGB Scart
			3 - Composite / No cable attached

		My guess: This value comes directly from the wiring of the cable attached to the
			   DC's video port... read this reg, and write those bits to 0xa0702c00 to
			   configure the display adapter to work with the connected adapter.
			   (The BootROM does this.)



##############################################################################
#### System ASIC (interrupt control)

0xa05f6900: System ASIC - interrupt control stuff, for instance

Offset	Name Desc

0x0000:	Pending interrupts 1

		-------- --p----- -----TtO o-vsSrrr

		p - TA has finished enqueueing punch-thru list
		T - TA has finished enqueueing transparent modifier list
		O - TA has finished enqueueing opaque modifier list
		t - TA has finished enqueueing transparent list
		o - TA has finished enqueueing opaque list

		v - Vertical retrace interrupt (occurs at BEAMPOS=0x01/0x02 on PAL machine in 640x480IL/50Hz)
		s - Scanline interrupt 2 (specify which scanline it should occur at in SCANINTPOS)
		S - Scanline interrupt 1 (specify which scanline it should occur at in SCANINTPOS)
		r - Render done-related, all three? (Bit #2 is probably the real render-done bit)

		When reading:
			Any 1 bits mark pending interrupts
		When writing:
			Writing a 1 in any bit position will clear the corresponding pending bit

		All non-masked interrupts will cause IRQ9 exception


0x0008: Pending interrupts 2

		-------- -------- -------- ----Pp-r

		P - TA has run out of PP-block space
		p - TA has run out of primitive space
		r - 3D rendering unit is really unhappy (this only happened once, when doing some nasty poking)

		Same functionality as Pending interrupts 1, just different interrupt sources


0x0030: Enabled interrupts 1

		

		Read/write:
			0 bits inhibit the corresponding interrupts; 1 bits enable them


0x0038: Enabled interrupts 2

		

		Same functionality as Enabled interrupts 1, just different interrupt sources




##############################################################################
#### PVR2 Core

0xa05f8000: graphics registers base


Reg.    Name Desc

0x00:	COREID (PVR2 Core ID)

		xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx

		x - 0x17fd11db for all DCs ?

		Euro DC, PAL 640x480IL 50Hz: 0x17fd11db
		US DC, NTSC 640x480IL 60Hz:  0x17fd11db
		US DC, VGA 640x480 60Hz:     0x17fd11db


0x01:	CORETYPE (PVR2 Core version)

		xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx

		x - 0x11 for all DCs?

		Euro DC, PAL 640x480IL 50Hz: 0x00000011
		US DC, NTSC 640x480IL 60Hz:  0x00000011
		US DC, VGA 640x480 60Hz:     0x00000011


0x02:   COREDISABLE (PVR2) (Enable/disable the submodules of the PVR2 Core)

		-------- -------- -------- -----brt

		b - Graphics memory bus disable (0 = enabled, 1 = disabled)
		r - 3D rendering unit disable (0 = enabled, 1 = disabled)
		t - TA disable (0 = enabled, 1 = disabled)

		Note: Neither CPU nor graphics hardware can access graphics
		      memory when the bus is disabled. Writes will ignore, and reads
		      will hang the requesting unit (be it CPU, TA, 3D or 2D unit).
		      Graphics memory will not lose its contents when the bus
		      is disabled.

		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000


0x03-0x04: Unknown

		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000


0x05:	RENDERSTART (3D) (Start render strobe)

		-------- -------- -------- --------

		Writing anything to this register will start the 3D rendering unit

		Note: Reading from this register has no e        Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000


0x06-0x07: Unknown

		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000


0x08:	PRIMALLOCBASE (3D) (Primitive allocation base)

		-------- xxxx---- -------- --------

		x - Base        of primitive allocation array, and BGPlane location [encoded as address/(1024*1024)]

		Euro DC, PAL 640x480IL 50Hz: 0x00400000
		US DC, NTSC 640x480IL 60Hz:  0x00400000
		US DC, VGA 640x480 60Hz:     0x00400000


0x09-0x0a: Unknown

		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000


0x0b:	TILEARRAY         (Tile Array base address)

		-------- xxxxxxxx xxxxxxxx xxxxxxxx

		x - Base address of Tile Array

		Euro DC, PAL 640x480IL 50Hz: 0x005667c0
		US DC, NTSC 640x480IL 60Hz:  0x005667c0
		US DC, VGA 640x480 60Hz:     0x005667c0


0x0c-0x0f: Unknown

		Euro DC, PAL 640x480IL 50Hz: 0x00000101
		US DC, NTSC 640x480IL 60Hz:  0x00000101
		US DC, VGA 640x480 60Hz:     0x00000101
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		        PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000



0x10:	BORDERCOLOR (2D) (Border colour)

		aaaaaaaa rrrrrrrr gggggggg bbbbbbbb

		argb - 32bit background colour

		Euro DC, PAL 640x480IL 50Hz: 0x00ffffff
		US DC, NTSC 640x480IL 60Hz:  0x00ffffff
		US DC, VGA 640x480 60Hz:     0x00ffffff


0x11:	BITMAPTYPE (        ap display settings)

		-------- c------- -------- ----mmde

		e - Bitmap display enable
		d - Line doubling enable
		m - Display mode:
			0 - ARGB1555
			1 - RGB565
			2 - RGB888 (Support seems a bit wacky though)
			3 - ARGB8888
		c - Pixel clock double enable (27MHz/54MHz select);
		    enable for VGA, disable for PAL/NTSC

		Euro DC, PAL 640x480IL 50Hz: 0x0000000d
		US DC, NTSC 640x480IL 60Hz:  0x0000000d
		US DC, VGA 640x480 60Hz:     0x0080000d


0x12:	RENDERFORMAT (3D) (Render output format)        --- -------- -------- dfff

		d - Dither enable for 16bpp output formats
		f - Render output format:

		    0 - 0RGB1555
		    1 - RGB565
		    2 - ARGB4444
		    3 - ARGB1555
		    4 - RGB888
		    5 - 0RGB8888
		    6 - ARGB8888
		    7 - ARGB4444

		Euro DC, PAL 640x480IL 50Hz: 0x00000006
		US DC, NTSC 640x480IL 60Hz:  0x00000006
		US DC, VGA 640x480 60Hz:     0x00000006


0x13:	RENDERPITCH (3D) (Render target pitch)

		-------- -------- -------p pppppppp

		p - Pitch: distance between beginning        ine and beginning of the
		    next in the render target [encoded as (bytes/8)]

		Euro DC, PAL 640x480IL 50Hz: 0x00000140
		US DC, NTSC 640x480IL 60Hz:  0x00000140
		US DC, VGA 640x480 60Hz:     0x00000140


0x14:	FRAMEBUF (2D) (Framebuffer address)

		-------- xxxxxxxx xxxxxxxx xxxxxxxx

		x - Base address of currently displayed framebuffer inside video memory

		Euro DC, PAL 640x480IL 50Hz: 0x00200000
		US DC, NTSC 640x480IL 60Hz:  0x00200000
		US DC, VGA 640x480 60Hz:     0x00200000


0x15:	FRA        D) (Framebuffer address, short field)

		-------- xxxxxxxx xxxxxxxx xxxxxxxx

		x - Base address of currently displayed framebuffer inside video memory, for short field

		Euro DC, PAL 640x480IL 50Hz: 0x00200a00
		US DC, NTSC 640x480IL 60Hz:  0x00200a00
		US DC, VGA 640x480 60Hz:     0x00200000


0x16:   Unknown

		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000


0x17:   DIWSIZE (2D) (Display window size)

		--mmmmmm mmmmh        hll llllllll

		m - Row modulo [encode as ((bytes/4)+1)]
		h - Number of lines in bitmap window [encode as (rows-1)]
		l - Row length [encode as ((bytes/4)-1)]

		Euro DC, PAL 640x480IL 50Hz: 0x2813be7f
		US DC, NTSC 640x480IL 60Hz:  0x2813be7f
		US DC, VGA 640x480 60Hz:     0x00177e7f


0x18:	RENDERBASE (3D) (Render target base address)

		-------u xxxxxxxx xxxxxxxx xxxxxxxx

		u - unknown, set to 0

		x - Base address of render target

		Euro DC, PAL 640x480IL 50Hz: 0x00600000
		US DC, NTSC 640x4        :  0x00600000
		US DC, VGA 640x480 60Hz:     0x00600000


0x19:	Unknown
		Euro DC, PAL 640x480IL 50Hz: 0x00600a00
		US DC, NTSC 640x480IL 60Hz:  0x00600a00
		US DC, VGA 640x480 60Hz:     0x00600000


0x1a:	RENDERWINDOWX (3D) (Render output window X-start and X-stop)

		-----XXX XXXXXXXX -----xxx xxxxxxxx

		x - minimum allowed X coordinate (for example 0)
		X - maximum allowed X coordinate (for example screenwidth-1)

		Note: This specifies the on-screen area which will be written
		      by the 3d        

		Euro DC, PAL 640x480IL 50Hz: 0x027f0000
		US DC, NTSC 640x480IL 60Hz:  0x027f0000
		US DC, VGA 640x480 60Hz:     0x027f0000


0x1b:	RENDERWINDOWY (3D) (Render output window Y-start and Y-stop)

		-----YYY YYYYYYYY -----yyy yyyyyyyy

		y - minimum allowed Y coordinate (for example 0)
		Y - maximum allowed Y coordinate (for example screenwidth-1)

		Note: This specifies the on-screen area which will be written
		      by the 3d hardware

		Euro DC, PAL 640x480IL 50Hz: 0x01df0000
		US DC, NTSC 640        Hz:  0x01df0000
		US DC, VGA 640x480 60Hz:     0x01df0000


0x1c:	Unknown

		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000


0x1d:	CHEAPSHADOWS (3D) (Cheap shadow enable + strength)

		eeeeeeee eeeeeeee eeeeeeee iiiiiiii

		e - enable bits (um, perhaps just one of them...)
		i - intensity of polygons within shadow volume (0 .. 255)

		Euro DC, PAL 640x480IL 50Hz: 0x00000001
		US DC, NTSC 640x480IL 60Hz:  0x00000001
		US D        0x480 60Hz:     0x00000001


0x1e:	CULLINGVALUE (3D) (Minimum allowed polygon area)

		ffffffff ffffffff ffffffff ffffffff

		f - 32bit float which specifies minimum polygon area (smaller
		    polygons will be culled) when small polygon culling is
		    enabled

		Euro DC, PAL 640x480IL 50Hz: 0x3f800000
		US DC, NTSC 640x480IL 60Hz:  0x3f800000
		US DC, VGA 640x480 60Hz:     0x3f800000


0x1f:	UNNAMED (3D) (Something to do with rendering)

		-------- --U----- ----U--- --------

		U - Unknown, must        herwise 3D stops rendering prematurely)

		Euro DC, PAL 640x480IL 50Hz: 0x0027df77
		US DC, NTSC 640x480IL 60Hz:  0x0027df77
		US DC, VGA 640x480 60Hz:     0x0027df77


0x20:	Unknown
		Euro DC, PAL 640x480IL 50Hz: 0x00000007
		US DC, NTSC 640x480IL 60Hz:  0x00000007
		US DC, VGA 640x480 60Hz:     0x00000007


0x21:	UNNAMED (3D) (Something to do with rendering)

		-rrr---- -------- -------- --------

		r - values in the range 4 .. 7 will make rendered graphics appear in all wrong colours

		Euro DC,        480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000


0x22:	Unknown

		Euro DC, PAL 640x480IL 50Hz: 0x38d1b710
		US DC, NTSC 640x480IL 60Hz:  0x38d1b710
		US DC, VGA 640x480 60Hz:     0x38d1b710


0x23:	BGPLANE (3D) (Background plane location)

		----uuuU xxxxxxxx xxxxxxxx xxxxxuuu

		u - Unknown, set to 0
		U - unknown, set to 1
		x - Address of background plane, relative to PRIMALLOCBASE
		    [encoded as (bgplane - primitivebase)/4]

		Note:        ground plane should be stored as a triangle in the
		      internal primitive format

		Euro DC, PAL 640x480IL 50Hz: 0x01000000
		US DC, NTSC 640x480IL 60Hz:  0x01000000
		US DC, VGA 640x480 60Hz:     0x01000000


0x24-0x27: Unknown

		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00800408
		US DC, NTSC 640x480IL 60Hz:  0x00800408
		US DC, VGA 640x480 60Hz:     0x00800408
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000


0x28:	UNNAMED

		-------- -------- -------- xxxxxxxx

		x - Unknown, value must be nonzero (otherwise most of PVR2 goes down?)

		Euro DC, PAL 640x480IL 50Hz: 0x00000020
		US DC, NTSC 640x480IL 60Hz:  0x00000020
		US DC, VGA 640x480 60Hz:     0x00000020


0x29:	Unknown

		Euro DC, PAL 640x480IL 50Hz: 0x0000001f
		US DC, NTSC 640x480IL 60Hz:  0x0000001f
		US DC, VGA 640x480 60Hz:     0x0000001f


0x2a:	UNNAMED (PVR) (Graphics memory control)

		---ppppp pppppppp -U------ --------

		p - Some periodicity setting for graphics memory
		U - unknown, must be 1 (otherwise 3D renders some things wrong)

		Note: Changing the periodicity setting gives varying white streaks
		      on screen... Probably because graphics memory sometimes is unavailable
		      when 2D reads pixels to display in framebuffer window; 3D read/writes
		      also fail sometimes.

		Euro DC, PAL 640x480IL 50Hz: 0x15d1c951
		US DC, NTSC 640x480IL 60Hz:  0x15d1c951
		US DC, VGA 640x480 60Hz:     0x15d1c951


0x2b:	Unknown
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000


0x2c:	FOGTABLECOLOR (3D) (Fogging colour when using table fog)

		aaaaaaaa rrrrrrrr gggggggg bbbbbbbb

		Euro DC, PAL 640x480IL 50Hz: 0x007f7f7f
		US DC, NTSC 640x480IL 60Hz:  0x007f7f7f
		US DC, VGA 640x480 60Hz:     0x007f7f7f


0x2d:	FOGVERTEXCOLOR (3D) (Fogging colour when using vertex fog)

		aaaaaaaa rrrrrrrr gggggggg bbbbbbbb

		Euro DC, PAL 640x480IL 50Hz: 0x007f7f7f
		US DC, NTSC 640x480IL 60Hz:  0x007f7f7f
		US DC, VGA 640x480 60Hz:     0x007f7f7f


0x2e:	FOGDENSITY (3D) (Fog table scale factor)

		-------- -------- mmmmmmmm eeeeeeee

		m,e - coefficient as m * 2^(e - 7)

		Euro DC, PAL 640x480IL 50Hz: 0x0000ff07
		US DC, NTSC 640x480IL 60Hz:  0x0000ff07
		US DC, VGA 640x480 60Hz:     0x0000ff07


0x2f:	COLORCLAMPMAX (3D) (Maximum ARGB in render pipeline before fogging)

		aaaaaaaa rrrrrrrr gggggggg bbbbbbbb

		Euro DC, PAL 640x480IL 50Hz: 0xffffffff
		US DC, NTSC 640x480IL 60Hz:  0xffffffff
		US DC, VGA 640x480 60Hz:     0xffffffff


0x30:	COLORCLAMPMIN (3D) (Minimum ARGB in render pipeline before fogging)

		aaaaaaaa rrrrrrrr gggggggg bbbbbbbb

		Euro DC, PAL 640x480IL 50Hz: 0xff000000
		US DC, NTSC 640x480IL 60Hz:  0xff000000
		US DC, VGA 640x480 60Hz:     0xff000000


0x31-0x32: Unknown

		Euro DC, PAL 640x480IL 50Hz: 0x0040000b
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x034b0000
		US DC, NTSC 640x480IL 60Hz:  0x03450000
		US DC, VGA 640x480 60Hz:     0x03450000


0x33:	SCANINTPOS (2D) (Scanline interrupt positions)

		------YY YYYYYYYY ------yy yyyyyyyy

		Y - Scanline interrupt 1 line number within field
		y - Scanline interrupt 2 line number within field

		Note: The interrupt seems to be triggered 2-3 PAL scanlines later than specified
		      here (unsure about VGA though)

		Euro DC, PAL 640x480IL 50Hz: 0x00150104
		US DC, NTSC 640x480IL 60Hz:  0x00150104
		US DC, VGA 640x480 60Hz:     0x00150104 (BootROM bug, should be 0x002a0208;
							 interrupt is not used by BootROM)


0x34:   IMAGECONTROL (2D) (image control stuff)

		-------- -------- -------U jkuiuuuu

		U - Unknown, set to 1
		u - Unknown, set to 0
		j - Set to 1 when 50Hz interlace, otherwise 0 (Note: short field must be put 1 line
							       further down in this mode)
		k - Set to 1 when 60Hz interlace, otherwise 0
		i - 0: Interlace disable, one field per frame
		    1: Interlace enable, two fields per frame

		Euro DC, PAL 640x480IL 50Hz: 0x00000190
		US DC, NTSC 640x480IL 60Hz:  0x00000150
		US DC, VGA 640x480 60Hz:     0x00000100


0x35:	BORDERWINDOWX (2D) (Border-colour rectangle X-start and X-stop)

		------xx xxxxxxxx ------XX XXXXXXXX

		x - start
		X - stop

		Euro DC, PAL 640x480IL 50Hz: 0x008d034b
		US DC, NTSC 640x480IL 60Hz:  0x007e0345
		US DC, VGA 640x480 60Hz:     0x007e0345


0x36:	FRAMETOTAL (2D) (Total number of frame cycles)

		------yy yyyyyyyy ------xx xxxxxxxx

		y - Number of scanlines per frame
		x - Number of clocks per scanline

		PAL: Clock frequency is exactly 27MHz (period 37.037037...ns)
		NTSC: Clock frequency is 27027000Hz? (period exactly 37ns?)
		VGA: Clock frequency is 2x the machine's original clock frequency? (enable in BITMAPTYPE)

		Euro DC, PAL 640x480IL 50Hz: 0x0270035f
		US DC, NTSC 640x480IL 60Hz:  0x020c0359
		US DC, VGA 640x480 60Hz:     0x020c0359


0x37:	BORDERWINDOWY (2D) (Border-colour rectangle Y-start and Y-stop)

		------yy yyyyyyyy ------YY YYYYYYYY

		y - start
		Y - stop

		Euro DC, PAL 640x480IL 50Hz: 0x002c026c (BootROM bug, should probably be 0x00160134)
		US DC, NTSC 640x480IL 60Hz:  0x00240204 (BootROM bug, should probably be 0x00120102)
		US DC, VGA 640x480 60Hz:     0x00280208


0x38:	UNNAMED (2D?)

		-------- -------- -----u-- --------

		u - PAL: must be 1, otherwise vsync pulses never show up in BEAMPOS ??

		Euro DC, PAL 640x480IL 50Hz: 0x07d6a53f
		US DC, NTSC 640x480IL 60Hz:  0x07d6c63f
		US DC, VGA 640x480 60Hz:     0x03f1933f


0x39:	TEXTURESTRIDE (3D) (Width of rectangular texture)

		-------- -------- -------- ---wwwww

		w - Texture width [encoded as ((bytes or texels???)/32)]

		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000


0x3a:	BITMAPTYPE2 (2D) (Bitmap display settings 2)

		-------- --UUUUUU -------d u---b-iv

		d - Horizontal pixel doubling enable
		u - Unknown, should be 0
		b - Bitmap display disable
		i - VGA: should be 0 (otherwise display disappears)
		    PAL: 0: half-step-down enabled for odd fields, if interlace is enabled
			 1: half-step-down-disabled
		v - Unknown, VGA: should be 0 (otherwise display disappears)
			     PAL: enabling shifts the screen ~50 pixels to the right
		U - Unknown, VGA: must be at least 4 (otherwise all colours become inverted)
			     PAL: must be roughly within 0x10 .. 0x70? (otherwise all colours become inverted)

		Euro DC, PAL 640x480IL 50Hz: 0x00160000
		US DC, NTSC 640x480IL 60Hz:  0x00160000
		US DC, VGA 640x480 60Hz:     0x00160000


0x3b:	DIWSTARTH (2D) (Bitmap window X-start)

		-------- -------- ------xx xxxxxxxx

		x - Window start X position

		Euro DC, PAL 640x480IL 50Hz: 0x000000ae
		US DC, NTSC 640x480IL 60Hz:  0x000000a4
		US DC, VGA 640x480 60Hz:     0x000000a8


0x3c:	DIWSTARTV (2D) (Bitmap window Y-start)

		------yy yyyyyyyy ------YY YYYYYYYY

		y - Window start Y position, long field
		Y - Window start Y position, short field

		Note: In 50Hz interlace mode (see IMAGECONTROL), the short field
		      Y-start must be moved down one line extra. Not sure why...

		Euro DC, PAL 640x480IL 50Hz: 0x002e002d
		US DC, NTSC 640x480IL 60Hz:  0x00120012
		US DC, VGA 640x480 60Hz:     0x00280028


0x3d:	OUTPUTCOMPRESS (3D) (XY scaling/compression of rendering output)

		-------- -------x yyyyyyyy yyyyyyyy

		x - Enable 2x compression horizontally
		y - Compress vertically by this factor [encoded in 6.10 fixed point]

		Note: Setting y compression to anything else than 1.0 enables
		       anti-aliasing when rendering; then, the Tile Array must list
		       the tiles in column-major order (otherwise rendering screws up)
		      The render output window size is changed along with the
		       compression factors


		Euro DC, PAL 640x480IL 50Hz: 0x00000400
		US DC, NTSC 640x480IL 60Hz:  0x00000400
		US DC, VGA 640x480 60Hz:     0x00000400


0x3e-0x41: Unknown

		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000


0x42:	TEXTUREPALETTEMODE (3D) (Texture palette mode) ???

		-------- -------- -------- ------mm

		m - Palette format: 
			0 - ARGB1555
			1 - RGB565
			2 - ARGB4444
			3 - ARGB8888

		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000


0x43:	BEAMPOS (2D) (Current raster beam position)

		-------- -------- --vhufYY YYYYYYYY

		v - Vertical retrace (0 = in progress, 1 = not in progress)
		h - Horizontal retrace (0 = in progress, 1 = not in progress)
		u - unknown
		f - long/short field (if interlace)
		Y - Beam Y position; notice that this contains the 'virtual scanline
		    number'; that is, in interlace modes this value will start as 0 or 1
		    (depending on the current field) and count up by 2 each time

		Euro DC, PAL 640x480IL 50Hz: --------
		US DC, NTSC 640x480IL 60Hz:  --------
		US DC, VGA 640x480 60Hz:     --------


0x44:	UNNAMED (PVR) (Graphics memory control)

		Note: Setting this register too low (less than ~0x11000) causes graphics
		      memory to be filled with some value (which value, varies a little
		      from attempt to attempt)
		Wild guesses: This might be refresh rate control, or a setting for how long
			      a page in the SDRAM is allowed to be open

		Euro DC, PAL 640x480IL 50Hz: 0x00093f39
		US DC, NTSC 640x480IL 60Hz:  0x00093f39
		US DC, VGA 640x480 60Hz:     0x00093f39


0x45:	Unknown
		Euro DC, PAL 640x480IL 50Hz: 0x00200a00
		US DC, NTSC 640x480IL 60Hz:  0x00200000
		US DC, VGA 640x480 60Hz:     0x00200000


0x46:	UNNAMED (3D) (Something render related)

		-------- -------- tttttttt ssssssss

		s - scale factor for the colours written by 3D unit to framebuffer
		t - scale factor for the colours written by 3D unit to framebuffer

		Euro DC, PAL 640x480IL 50Hz: 0x00008040
		US DC, NTSC 640x480IL 60Hz:  0x00008040
		US DC, VGA 640x480 60Hz:     0x00008040


0x47-0x48: unknown

		Euro DC, PAL 640x480IL 50Hz: 0x000000ff
		US DC, NTSC 640x480IL 60Hz:  0x000000ff
		US DC, VGA 640x480 60Hz:     0x000000ff
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000


0x49:	PPMATRIXBASE (TA) (Root PP-block matrices base address)

		-------- xxxxxxxx xxxxxxxx xxxxxxxx

		x - Start address of the PP-block matrices; they
		    must be in enumerated order; must be 32-byte aligned;
		    must be *after* PP-allocation area

		Euro DC, PAL 640x480IL 50Hz: 0x000c2680
		US DC, NTSC 640x480IL 60Hz:  0x000c2680
		US DC, VGA 640x480 60Hz:     0x000c2680


0x4a:	PRIMALLOCSTART (TA) (Primitive allocation area start)

		-------- xxxxxxxx xxxxxxxx xxxxxxxx

		x - Start address of the primitive allocation area

		Note: Allocation begins from start address, and
                      grows toward end
		      When out of space, TA issues an interrupt
		      Don't set up zero-length buffer, instead
		      set a minor buffer (0x100 or so bytes)...
		      otherwise TA might still write a little
		      at the start

		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000


0x4b:	PPALLOCSTART (TA) (PP-block allocation area start)

		-------- xxxxxxxx xxxxxxxx xxxxxxxx

		x - Start address of the pp-block allocation area

		Note: Allocation begins at the end address, and
                      grows backwards towards start
		      When out of space, TA issues an interrupt
		      Don't set up zero-length buffer, instead
		      set a minor buffer (0x100 or so bytes)...
		      otherwise TA might still write a little
		      at the end

		Euro DC, PAL 640x480IL 50Hz: 0x0009e800
		US DC, NTSC 640x480IL 60Hz:  0x0009e800
		US DC, VGA 640x480 60Hz:     0x0009e800


0x4c:	PRIMALLOCEND (TA) (Primitive allocation area end)

		-------- xxxxxxxx xxxxxxxx xxxxxxxx

		x - End address of the primitive allocation area

		Note: TA will write a bit further than this, so
		      leave some (0x100? 0x200?) bytes of scratch
		      space after the end address

		Euro DC, PAL 640x480IL 50Hz: 0x0009e740
		US DC, NTSC 640x480IL 60Hz:  0x0009e740
		US DC, VGA 640x480 60Hz:     0x0009e740


0x4d:	PPALLOCPOS (TA) (Current PP-block allocation position)

		xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx

		x - Current allocation position [encoded as address/4]

		Note: Writing to this register has no effect
		Note: Disabling the TA makes this register lose its contents

		Euro DC, PAL 640x480IL 50Hz: 0x00030980
		US DC, NTSC 640x480IL 60Hz:  0x00030980
		US DC, VGA 640x480 60Hz:     0x00030980


0x4e:	PRIMALLOCPOS (TA) (Current primitive allocation position)

		xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx

		x - Current allocation position

		Note: Writing to this register has no effect
		Note: Disabling the TA makes this register lose its contents

		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000


0x4f:	TILEARRAYSIZE (TA) (Tile Array dimensions)

		-------- --yyyyyy -------- --xxxxxx

		x - Number of tiles in X direction [encoded as numtilesx - 1]
		y - Number of tiles in Y direction [encoded as numtilesy - 1]

		Euro DC, PAL 640x480IL 50Hz: 0x000e0013
		US DC, NTSC 640x480IL 60Hz:  0x000e0013
		US DC, VGA 640x480 60Hz:     0x000e0013


0x50:	PPBLOCKSIZE (TA) (PP-block sizes)

		-------- ---u--pp --TT--tt --OO--oo

		u - Unknown, set to 1
		p - Punch-thru pp-block size
		T - Translucent modifier pp-block size
		t - Translucent pp-block size
		O - Opaque modifier pp-block size
		o - Opaque pp-block size

		   Block size is encoded as:

		   0 - 0 entries
		   1 - 8 entries
		   2 - 16 entries
		   3 - 32 entries

		Euro DC, PAL 640x480IL 50Hz: 0x00100203
		US DC, NTSC 640x480IL 60Hz:  0x00100203
		US DC, VGA 640x480 60Hz:     0x00100203


0x51:	TASTART (TA) (Start vertex enqueueing strobe)

		-------- -------- -------- --------

		Writing anything to this register will start the TA for enqueueing

		Note: Reading this register has no effect
		      Strobing this register in the middle of primitive enqueueing
		       makes the whole system go haywire!?
		      When this register is strobed, it seems that the internal
		       allocation-position pointers are set up, but the whole TA is
		       not reset; therefore, you want to reset the TA manually
		       (using COREDISABLE) before beginning a rendering pass

		Note: The BootROM writes 0x80000000 to this register, then reads it.
		      You may want to do likewise, for compatibility purposes.

		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000


0x52-0x58: Unknown

		Euro DC, PAL 640x480IL 50Hz: 0x00000000		; TA related
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000		; TA related
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000

0x59:	PPALLOCEND (TA) (PP-block allocation area end)

		-------- xxxxxxxx xxxxxxxx xxxxxxxx

		x - End address of PP-block allocation area

		Euro DC, PAL 640x480IL 50Hz: 0x000c2680
		US DC, NTSC 640x480IL 60Hz:  0x000c2680
		US DC, VGA 640x480 60Hz:     0x000c2680


0x5a-0x7f: Unknown

		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0xba80f6cc
		US DC, NTSC 640x480IL 60Hz:  0xba80f6cc
		US DC, VGA 640x480 60Hz:     0x279cc2f3
		Euro DC, PAL 640x480IL 50Hz: 0x1cf56513
		US DC, NTSC 640x480IL 60Hz:  0x1cf56513
		US DC, VGA 640x480 60Hz:     0x1cf56513
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x64f02f9e
		US DC, NTSC 640x480IL 60Hz:  0x8d51612b
		US DC, VGA 640x480 60Hz:     0xfe6bc855
		Euro DC, PAL 640x480IL 50Hz: 0x0000012b
		US DC, NTSC 640x480IL 60Hz:  0x0000012b
		US DC, VGA 640x480 60Hz:     0x0000012b
		Euro DC, PAL 640x480IL 50Hz: 0x00000001
		US DC, NTSC 640x480IL 60Hz:  0x00000001
		US DC, VGA 640x480 60Hz:     0x00000001
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000
		Euro DC, PAL 640x480IL 50Hz: 0x00000000
		US DC, NTSC 640x480IL 60Hz:  0x00000000
		US DC, VGA 640x480 60Hz:     0x00000000



0x80 .. 0xff: (3D) Fog table



0x400 .. 0x800: (3D) Texture palette data
This banner below is OUR banner, the one that helps us pay bills. The one above is our host.

All names, logos, symbols, representations, and anything is copyright Sega and we aren't associated with nor are they associated with us.