|
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
|
|