20070311
Inner XBOX GPU registers quick list (use notepad to keep correct tab alignments)

This list doesn't bring much details but is really useful once you get some practice.
This practice will only come with open source demos. I will try to have each register
covered by at least one demo. Demos will be released slowly, one by one, for openxdk.

See Wikipedia, project "Nouveau" for symbolic constants matching most of these registers
(in Renouveau directory, in nv_objects.h). New ones will be added there once tested.
cvs -d:pserver:anonymous@nouveau.cvs.sourceforge.net:/cvsroot/nouveau export -r HEAD renouveau

First, a note about push buffer engine (a DMA engine) that will target inner registers :

To reach top speed, you just have to write commands and parameters in standard memory
and warn push buffer that you have finished writing a few commands. Then they will be
taken to GPU through DMA very fast. You can keep on writing new commands while previous
ones are still on their way to GPU. You can also keep pre-sent long sequences, just 
update a few coordinates or write/erase jump commands and ask push buffer to send it
again to GPU. Using push buffer is quite a specific, speed oriented, programming style.

Where this idea comes from? Two sources :

A) Authors of "State of Emergency" game described their troubles while porting the
game from PS2 to XBOX. They couldn't obtain a better performance on XBOX, which is
quite estonishing... They had to bypass official 3D library and work directly with
push buffers. They had to send very big prepared push buffers, and in parallel
have the next one updated. While data bus is busy with DMA transfert it is important
to not have CPU doing too many memory accesses that would interfere with it.
So using cached data is important. So, it costs a lots of memory and forces you to
calculate things in a very precise way according to a very precise time window.
But the result is great : rock solid 60fps, and tons of characters moving on screen.
(Story of SOE port can be found here: http://www.bringyou.to/games/PS2.htm)

B) Chris "Neovanglist" Gilbert, linuzappz, Hago @ gmx, Pixel, yulius, gawd^ & jbit
created, a few years ago, a library named gsKit for ps2dev (open dev kit for ps2).
It shows how to send directives to the GS (the ps2 GPU) through DMA. It's a nice
example of push buffer programming style. Performance : 27800 triangles/frame (60fps).
(Can go up to 130000 v/f : http://www.hsfortuna.pwp.blueyonder.co.uk/buff4/buff4.htm
 Note that it can go up to 198000 v/f by just adding "--LoopCS 6,6" after "loop:".
 See ps2_initial_fantasy.zip for my own implementation : 250000 vertices/frame.
 DMA transferts are easy to trigger thanks to saotome's vulib, improved a bit.
 With triangle strips 1 vertice=1 triangle, with triangle lists 3 vertices=1 triangle.)

Second, the data format for push buffer commands :

Each command (or method) is followed by one or more parameters. They are 32 bits values.

33222222222211111111110000000000 \_bit index inside method/command value 
10987654321098765432109876543210 /
0SJ_____nparamSubch______indexJJ (address=index*4=command)

Usually, GPU will read the index (or address) field, and redirect the nparam parameters
toward that GPU inner register address (and following addresses if nparam>1).

If bit 0 or bit 1 of method is set, it means a JUMP command (other bits are address&~3)
If bit 29 of method is set, it means a JUMP to push buffer head (other bits are offset&~3)
If bit 30 of method is set, it means all parameters go to same GPU register sequentially.
Otherwise, parameters go to consecutive GPU registers, but see below about cursors.
Bits 12-2 of method is GPU destination register index for 1st or all parameters (0-0x1FFC)
Bits 17-13 can be considered as the subchannel ID (but also as part of address) (0-7)
Bits 28-18 is the number of parameters following the method in push buffer (0-0x7FF)

This is the kind of macro you can use to build up a method :
#define EncodeMethod(subchannel,command,nparam)=((nparam<<18)+(subchannel<<13)+command)
In most cases, command is directly the address of a GPU inner register.

There are special inner GPU addresses ranges that act like temporary buffers.
Data written there is redirected to some hidden inner inner place inside GPU.
There are, actually, cursors registers that point at their destination (indexes).
Each written data automatically increments the associated cursor. Two of them exist.
Cursors inner GPU registers addresses are 0x1E9C & 0x1EA4. They allow you to define
the destination index (unit is the quad : 4x32 bits) in GPU program & constants area.
Associated ranges are 0x0B00-0x0B7C (Program area) and 0x0B80-0x0BFC (Constants).
A GPU program is often called a shader. Usually a shader needs constant quaternions.

There is a specific case : if command=0x0100, that triggers an interrupt caught by DPC.

Subchannels can be considered as a part of inner register address or as separate ID:
SUBCH_3D					0
SUBCH_2						2
SUBCH_3						3
SUBCH_4						4

Some registers can be directly attached to a standard DirectX 8 state description.



Third, the inner GPU registers list :

for SUBCH_3D:						Address	Example
binds Dma channel 13 (Gr) to this sub channel		0x0000	param=13
wait for idle (wait until GPU pauses)			0x0100	param=0
triggers an interrupt (GPU system call handled in DPC)	0x0100	param=subprogID
wait/makespace (often used before calling subprogID)	0x0110	param=0
defines pixel & DS tiles, number of buffers caches	0x0120	params=0,1,n
ask for idle (asks GPU to pause)			0x012C	param=0
stop drawing (prevents GPU from drawing into buffers)	0x0130	param=0
binds Dma channel 2 and 3,3 (below) to?			0x0180	params=2,3,3
binds Dma channel 4 and 9,10,3,3,8 (below) to?		0x0190	params=4,9,10,3,3,8
binds Dma channel 9 to?					0x0194	param=9
binds Dma channel 10 to?				0x0198	param=10
binds Dma channel 12 to?				0x01A8	param=12
sets width & height of render target surface!		0x0200	param=wwhh
sets format of render target & depth stencil surface!	0x0208	param=format
sets pitches of render target & depth stencil surface!	0x020C	param=(render target pitch<<16)|(depth stencil pitch)
sets addr of render target (addr-dmabase)!		0x0210	param=render target offset
sets addr of depth stencil (addr-dmabase)!		0x0214	param=depth stencil offset
sets simple renderstate (8 PSAlpha inputs)		0x0260	params=values
sets simple renderstate (PSFinalCombinerIn)		0x0288	params=abcd,efg
sets control 0 flags (yuv, zb_usew, depth format)	0x0290	param=flags
sets specular flags (lighting related) 			0x0294	param=1|(flag<<16)
sets color material					0x0298 	param=flags
sets fog table (none/linear, exp, or exp2)		0x029C	param=0x2601, 0x800 or 0x801
sets fog range (enable, disable or disable Fog)		0x02A0	param=2,1 or 0
sets deferred renderstate (FogEnable)			0x02A4	param=0 or 1
sets complex renderstate (FogColor)			0x02A8	param=xbgr color
sets scissors exclusive flag (0:out is ok 1:in is ok)	0x02B4	param=0 or 1
sets scissors rectangles horizontal coordinates		0x02C0	params=x1|((x2-1)<<16) (8 times max)
sets scissors rectangles vertical coordinates		0x02E0	params=y1|((y2-1)<<16) (8 times max)
sets simple renderstate (AlphaTestEnable)		0x0300	param=value
sets simple renderstate (AlphaBlendEnable)		0x0304	param=value
sets complex renderstate (CullMode on/off)		0x0308	param=0 or 1
sets complex renderstate (ZEnable: Depth enable)	0x030C	param=0 or 1
sets simple renderstate (DitherEnable)			0x0310	param=value
lighting related 					0x0314	param=1
sets defered renderstate (PointScaleEnable)		0x0318	param=0 or 1
sets defered renderstate (PointSpriteEnable)		0x031C	param=0 or 1
sets complex renderstate (EdgeAntiAlias)		0x0320	params=value,value
sets complex renderstate (VertexBlend)			0x0328	param=value
sets complex renderstate (StencilEnable)		0x032C	param=0 or 1
sets complex renderstate (StencilFail)			0x032D	param=mode
sets simple renderstate (PointOffsetEnable)		0x0330	param=value
sets simple renderstate (WireFrameOffsetEnable)		0x0334	param=value
sets simple renderstate (SolidOffsetEnable)		0x0338	param=value
sets simple renderstate (AlphaFunc)			0x033C	param=value
sets simple renderstate (AlphaRef)			0x0340	param=value
sets simple renderstate (SrcBlend)			0x0344	param=value
sets simple renderstate (DstBlend)			0x0348	param=value
sets simple renderstate (BlendColor)			0x034C	param=value
sets simple renderstate (BlendOp)			0x0350	param=value
sets simple renderstate (ZFunc)				0x0354	param=value
sets simple renderstate (ColorWriteEnable)		0x0358	param=value
sets simple renderstate (ZWriteEnable)			0x035C	param=value
sets simple renderstate (StencilWriteMask)		0x0360	param=value
sets simple renderstate (StencilFunc)			0x0364	param=value
sets simple renderstate (StencilRef)			0x0368	param=value
sets simple renderstate (StencilMask)			0x036C	param=value
sets simple renderstate (StencilZFail)			0x0374	param=value
sets simple renderstate (StencilPass)			0x0378	param=value
sets simple renderstate (ShadeMode)			0x037C	param=value
sets complex renderstate (LineWidth)			0x0380	param=width (0-511)
sets simple renderstate (PolygonOffsetZSlopScal)	0x0384	param=value
sets simple renderstate (PolygonOffsetZOffset)		0x0388	param=value
sets complex renderstate (FillMode)			0x038C	params=front,back
sets common viewport parameters! (MinZ & MaxZ)		0x0394	params=zmin*zscale,zmax*zscale or 0*zscale,1*zscale
sets complex renderstate (CullMode cw/ccw)		0x039C	param=0x404|(0:same as frontface, 1:opposite of frontface)
sets complex renderstate (FrontFace cw/ccw)		0x03A0	param=0x900 or 0x901
sets complex renderstate (NormalizeNormals)		0x03A4	param=0 or 1
sets front ambient or emissive material source color	0x03A8	params=r,g,b
sets front diffuse material source alpha		0x03B4	param=alpha
lighting related 					0x03B8	param=1
sets light type for the 8 possible light sources	0x03BC	param=flags : 2 bits per light source
sets texture stage 0 state (TexCoordIndex)		0x03C0	params=encoded_wrapping_mode(3 times)
sets texture stage 1 state (TexCoordIndex)		0x03D0	params=encoded_wrapping_mode(3 times)
sets texture stage 2 state (TexCoordIndex)		0x03E0	params=encoded_wrapping_mode(3 times)
sets texture stage 3 state (TexCoordIndex)		0x03F0	params=encoded_wrapping_mode(3 times)
sets texture stage 0 coordinates transform flag		0x0420	param=0 or 1
sets texture stage 1 coordinates transform flag		0x0424	param=0 or 1
sets texture stage 2 coordinates transform flag		0x0428	param=0 or 1
sets texture stage 3 coordinates transform flag		0x042C	param=0 or 1
sets point size 					0x043C	param=size (0-511)
mWorld*mView matrix					0x0480	params=matrix
mWorld1*mView matrix (vertex blend)			0x04C0	params=matrix
mWorld2*mView matrix (vertex blend)			0x0500	params=matrix
mWorld3*mView matrix (vertex blend)			0x0540	params=matrix
inverse of mWorld*mView matrix (may be normalized)	0x0580	params=matrix
inverse of mWorld1*mView matrix (vertex blend)		0x05C0	params=matrix
inverse of mWorld2*mView matrix (vertex blend)		0x0600	params=matrix
inverse of mWorld3*mView matrix (vertex blend)		0x0640	params=matrix
mWorld*mView*mProjection*mViewport (no vertex blend)	0x0680	params=matrix
mProjection*mViewport (vertex blend)			0x0680	params=matrix
sets texture state 0 coordinates transform matrix	0x06C0	params=matrix
sets texture state 1 coordinates transform matrix	0x0700	params=matrix
sets texture state 2 coordinates transform matrix	0x0740	params=matrix
sets texture state 3 coordinates transform matrix	0x0780	params=matrix
shader constants related				0x0840	params=matrix
shader constants related				0x0880	params=matrix
shader constants related				0x08C0	params=matrix
shader constants related				0x0900	params=matrix
sets fog table parameters (for exp or exp2)		0x09C0	params=param1,param2,0
shader constants related				0x09D0	params=0,0,1.0f,0
sets front specular power parameters			0x09E0	params=6 floats
sets simple renderstate (SwathWidth)			0x09F8	param=value
color computation related				0x09FC	param=1
sets front ambient or emissive material source color	0x0A10	params=r,g,b
sets common viewport parameters! (X,Y,Z limits?)	0x0A20	params=x+w,y-h,zmin*zscale,0.0f
sets point parameters (point scale enabled)		0x0A30	params=parameters (8 floats)
color computation related				0x0A50	params=0,0,0,1.0f
sets simple renderstate (16 PSConstants)		0x0A60	params=values
sets complex renderstate (TextureFactor)		0x0A60	params=texturefactor(16 times)
sets simple renderstate (8 PSAlpha outputs)		0x0AA0	params=values
sets simple renderstate (8 PSRGB inputs)		0x0AC0	params=values
sets texture stage 0 state (ColorKeyColor)		0x0AE0	param=color
sets texture stage 1 state (ColorKeyColor)		0x0AE4	param=color
sets texture stage 2 state (ColorKeyColor)		0x0AE8	param=color
sets texture stage 3 state (ColorKeyColor)		0x0AEC	param=color
sets common viewport parameters! (X,Y,Z dimensions)	0x0AF0	params=w,h,(zmax-zmin)*zscale,0.0f
loads quaternions (GPU code) in Program GPU area(min)	0x0B00	params=quaternions
loads quaternions (GPU code) in Program GPU area(max)	0x0B7C	params=quaternions
loads quaternions constants in Constant GPU area(min)	0x0B80	params=quaternions
loads quaternions constants in Constant GPU area(max)	0x0BFC	params=quaternions
sets light source #0 back ambient light color		0x0C00	params=r,g,b
sets light source #0 back diffuse light color		0x0C0C	params=r,g,b
sets light source #0 back specular light color		0x0C18	params=r,g,b
sets light source #1 back ambient light color		0x0C40	params=r,g,b
sets light source #1 back diffuse light color		0x0C4C	params=r,g,b
sets light source #1 back specular light color		0x0C58	params=r,g,b
...
sets light source #7 back ambient light color		0x0DC0	params=r,g,b
sets light source #7 back diffuse light color		0x0DCC	params=r,g,b
sets light source #7 back specular light color		0x0DD8	params=r,g,b
sets light source #0 ambient light color		0x1000	params=r,g,b
sets light source #0 diffuse light color		0x100C	params=r,g,b
sets light source #0 specular light color		0x1018	params=r,g,b
sets light source #0 range (float)			0x1024	param=range
sets light source #0 half vector (directional light)	0x1028	params=x,y,z
sets light source #0 direction (normalized)		0x1034	params=x,y,z
sets light source #0 spot half vector (spot light)	0x1040	params=x,y,z
sets light source #0 spot direction (spot light)	0x104C	params=x,y,z
sets light source #0 spot constant (spot light)		0x1058	param=constant
sets light source #0 position (point or spot light)	0x105C	params=x,y,z
sets light source #0 attenuation0 (point/spot light)	0x1068	param=attenuation0
sets light source #0 attenuation1 (point/spot light)	0x106C	param=attenuation1
sets light source #0 attenuation2 (point/spot light)	0x1070	param=attenuation2
sets light source #1 ambient light color		0x1080	params=r,g,b
sets light source #1 diffuse light color		0x108C	params=r,g,b
sets light source #1 specular light color		0x1098	params=r,g,b
sets light source #1 range (float)			0x10A4	param=range
sets light source #1 half vector (directional light)	0x10A8	params=x,y,z
sets light source #1 direction (normalized)		0x10B4	params=x,y,z
sets light source #1 spot half vector (spot light)	0x10C0	params=x,y,z
sets light source #1 spot direction (spot light)	0x10CC	params=x,y,z
sets light source #1 spot constant (spot light)		0x10D8	param=constant
sets light source #1 position (point or spot light)	0x10DC	params=x,y,z
sets light source #1 attenuation0 (point/spot light)	0x10E8	param=attenuation0
sets light source #1 attenuation1 (point/spot light)	0x10EC	param=attenuation1
sets light source #1 attenuation2 (point/spot light)	0x10F0	param=attenuation2
...
sets light source #7 ambient light color		0x1380	params=r,g,b
sets light source #7 diffuse light color		0x138C	params=r,g,b
sets light source #7 specular light color		0x1398	params=r,g,b
sets light source #7 range (float)			0x13A4	param=range
sets light source #7 half vector (directional light)	0x13A8	params=x,y,z
sets light source #7 direction (normalized)		0x13B4	params=x,y,z
sets light source #7 spot half vector (spot light)	0x13C0	params=x,y,z
sets light source #7 spot direction (spot light)	0x13CC	params=x,y,z
sets light source #7 spot constant (spot light)		0x13D8	param=constant
sets light source #7 position (point or spot light)	0x13DC	params=x,y,z
sets light source #7 attenuation0 (point/spot light)	0x13E8	param=attenuation0
sets light source #7 attenuation1 (point/spot light)	0x13EC	param=attenuation1
sets light source #7 attenuation2 (point/spot light)	0x13F0	param=attenuation2
color computation related				0x16BC	param=1
vertex shader feed configuration for v0-v15 (addr)	0x1720  params=addrV0, addrV1, ..., addrV15 (s=stride:offset to reach next fetch)
vertex shader feed configuration for v0-v15 (feed)	0x1760  params=feedV0, feedV1, ..., feedV15 (0xssssssn2 n=nbr of floats to fetch)
sets back ambient or emissive material source color	0x17A0	params=r,g,b
sets back diffuse material source alpha			0x17AC	param=a
sets back ambient or emissive material source color	0x17B0	params=r,g,b
sets complex renderstate (LogicOp)			0x17BC	params=switch(0 or 1),logicop
sets deferred renderstate (TwoSidedLighting)		0x17C4	param=value
sets simple renderstate (PSCompareMode)			0x17F8	param=value
triggers beginning of a vertex feed (5=triangles list)	0x17FC	param=5 then 0 (to end the feed and start drawing)
indexed batch (this is where batches can be enqueued!)	0x1800	params=((index[n+1]<<16)|index[n]),... (sequentially into same register thanks to bit 30 set : use 0x40001800)
index data (this is where indices can be enqueued!)	0x1808	param=index(16 lower bits) (usually last index is put here when total indices count is not even)
vertex batch (this is where batches can be enqueued!)	0x1810	params=(((vertexcount-1)<<24)|startvertex),... (sequentially into same register : use 0x40001810)
vertex feed (this is where vertices can be enqueued!)	0x1818	params=floats,... (sequentially into same register thanks to bit 30 set : use 0x40001818)
pixel shader first constant copy?			0x181C	params=r,g,b
special shader setting					0x194C	param=0xffffffff
special shader setting					0x1950	param=0
special shader setting					0x195C	param=0xffffffff
special shader setting					0x1960	param=0
sets texture stage 0 address				0x1B00	param=addr
sets texture stage 0 format				0x1B04	param=format
sets texture stage 0 modes				0x1B08	param=modes
sets texture stage 0 hardware flags			0x1B0A	param=flags
sets texture stage 0 software flags			0x1B0C	param=flags
sets texture stage 0 pitch				0x1B10	param=pp00
sets texture stage 0 filters				0x1B14	param=filters
sets texture stage 0 width & height			0x1B1C	param=wwhh
sets texture stage 0 state (BorderColor)		0x1B24	param=color
sets texture stage 0 state (BumpEnvMat00)		0x1B28	param=[-8.0,+8.0]
sets texture stage 0 state (BumpEnvMat01)		0x1B2C	param=[-8.0,+8.0]
sets texture stage 0 state (BumpEnvMat11)		0x1B30	param=[-8.0,+8.0]
sets texture stage 0 state (BumpEnvMat10)		0x1B34	param=[-8.0,+8.0]
sets texture stage 0 state (BumpEnvLScale)		0x1B38	param=float luminance scale
sets texture stage 0 state (BumpEnvLOffset)		0x1B3C	param=float luminance offset
sets texture stage 1 address				0x1B40	param=addr
sets texture stage 1 format				0x1B44	param=format
sets texture stage 1 modes				0x1B48	param=modes
sets texture stage 1 hardware flags			0x1B4A	param=flags
sets texture stage 1 software flags			0x1B4C	param=flags
sets texture stage 1 pitch				0x1B50	param=pp00
sets texture stage 1 filters				0x1B54	param=filters
sets texture stage 1 width & height			0x1B5C	param=wwhh
sets texture stage 1 state (BorderColor)		0x1B64	param=color
sets texture stage 1 state (BumpEnvMat00)		0x1B68	param=[-8.0,+8.0]
sets texture stage 1 state (BumpEnvMat01)		0x1B6C	param=[-8.0,+8.0]
sets texture stage 1 state (BumpEnvMat11)		0x1B70	param=[-8.0,+8.0]
sets texture stage 1 state (BumpEnvMat10)		0x1B74	param=[-8.0,+8.0]
sets texture stage 1 state (BumpEnvLScale)		0x1B78	param=float luminance scale
sets texture stage 1 state (BumpEnvLOffset)		0x1B7C	param=float luminance offset
sets texture stage 2 address				0x1B80	param=addr
sets texture stage 2 format				0x1B84	param=format
sets texture stage 2 modes				0x1B88	param=modes
sets texture stage 2 hardware flags			0x1B8A	param=flags
sets texture stage 2 software flags			0x1B8C	param=flags
sets texture stage 2 pitch				0x1B90	param=pp00
sets texture stage 2 filters				0x1B94	param=filters
sets texture stage 2 width & height			0x1B9C	param=wwhh
sets texture stage 2 state (BorderColor)		0x1BA4	param=color
sets texture stage 2 state (BumpEnvMat00)		0x1BA8	param=[-8.0,+8.0]
sets texture stage 2 state (BumpEnvMat01)		0x1BAC	param=[-8.0,+8.0]
sets texture stage 2 state (BumpEnvMat11)		0x1BB0	param=[-8.0,+8.0]
sets texture stage 2 state (BumpEnvMat10)		0x1BB4	param=[-8.0,+8.0]
sets texture stage 2 state (BumpEnvLScale)		0x1BB8	param=float luminance scale
sets texture stage 2 state (BumpEnvLOffset)		0x1BBC	param=float luminance offset
sets texture stage 3 address				0x1BC0	param=addr
sets texture stage 3 format				0x1BC4	param=format
sets texture stage 3 modes				0x1BC8	param=modes
sets texture stage 3 hardware flags			0x1BCA	param=flags
sets texture stage 3 software flags			0x1BCC	param=flags
sets texture stage 3 pitch				0x1BD0	param=pp00
sets texture stage 3 filters				0x1BD4	param=filters
sets texture stage 3 width & height			0x1BDC	param=wwhh
sets texture stage 3 state (BorderColor)		0x1BE4	param=color
sets texture stage 3 state (BumpEnvMat00)		0x1BE8	param=[-8.0,+8.0]
sets texture stage 3 state (BumpEnvMat01)		0x1BEC	param=[-8.0,+8.0]
sets texture stage 3 state (BumpEnvMat11)		0x1BF0	param=[-8.0,+8.0]
sets texture stage 3 state (BumpEnvMat10)		0x1BF4	param=[-8.0,+8.0]
sets texture stage 3 state (BumpEnvLScale)		0x1BF8	param=float luminance scale
sets texture stage 3 state (BumpEnvLOffset)		0x1BFC	param=float luminance offset
color computation related				0x1D6C	param=0
param for time related operation			0x1D70	param=(TimeIndex<<1)+TimeValidFlag(1)
color computation related				0x1D78	param=1
sets complex renderstate MultiSample(AA/Mask)		0x1D7C	param=(mask<<16)|(AA&15)
color computation related				0x1D80	param=1
OcclusionCullEnable & StencilCullEnable flags		0x1D84	param=flags
multipurpose parameter registers (A & B)		0x1D8C	params=A,B (match the 2 outer registers below!)
multipurpose parameter register (A)			0x1D8C	param=A (matches VIDEOREG(NV_PGRAPH_PARAMETER_A)!)
multipurpose parameter register (B)			0x1D90	param=B (matches VIDEOREG(NV_PGRAPH_PARAMETER_B)!)
sets simple renderstate (PSReserved thus unused)	0x1D90	param=value
flag triggers a rectangle fill (A=Z|Stencil & B=Color)	0x1D94	param=flag
sets rectangle target horizontal coordinate for fill	0x1D98	params=x1|((x2-1)<<16)
sets rectangle target vertical coordinate for fill	0x1D9C	params=y1|((y2-1)<<16)
sets simple renderstate (PSFinalCombinerConst0)		0x1E20	param=value
sets simple renderstate (PSFinalCombinerConst1)		0x1E24	param=value
sets back specular power parameters			0x1E28	params=6 floats
sets simple renderstate (8 PSRGB outputs)		0x1E40	param=value
sets simple renderstate (PSCombinerCount)		0x1E60	param=value
color computation related				0x1E68	param=0x7F800000
sets complex renderstate (ShadowFunc)			0x1E6C	param=0-7
sets deferred renderstate (PSTextureModes)		0x1E70	param=modes
sets simple renderstate (PSDotMapping)			0x1E74	param=value
sets simple renderstate (PSInputTextureSource)		0x1E78	param=0x00210000
vertex shader type					0x1E94  params=6,0/1 or param=4(FVF)
Sets quaternion cursor index for next Program load	0x1E9C	param=quaternion index
Sets current Program start address (unit=quaternion)	0x1EA0	param=quaternion index
Sets quaternion cursor index for next Constants load	0x1EA4	param=quaternion index

for SUBCH_2 (add 0x4000 to address/method) :		Address	Example
binds Dma channel 14 (Gr) to this GPU sub channel	0x0000	param=14
binds Dma channel 7 to?					0x0180	param=7

for SUBCH_3 (add 0x6000 to address/method) :		Address	Example
binds Dma channel 16 (Gr) to this GPU sub channel	0x0000	param=16
binds Dma channel 17 (Gr) to?				0x019C	param=17
binds Dma channel 3 to?					0x02FC	param=3
image bitblt (source coordinates)			0x0300  param=(x<<16)|y
image bitblt (destination coordinates)			0x0304	param=(x<<16)|y
image bitblt (size -triggers the bitblt!-)		0x0308	param=(w<<16)|h

for SUBCH_4 (add 0x8000 to address/method) :		Address	Example
binds Dma channel 17 (Gr) to this GPU sub channel	0x0000	param=17
binds Dma channel 3 and 11 (below) to?			0x0184	params=3,11
binds Dma channel 11 to?				0x0188	param=11
image bitblt preparation (encoded bytes per pixel)	0x0300  param=encoded_bpp (1/4/10 for 1/2/4 bytes per pixel)
image bitblt preparation (destination+source pitches)	0x0304  param=(dstp<<16)|srcp
image bitblt preparation (source address)		0x0308  param=srcaddr
image bitblt preparation (destination address - base)	0x030C  param=dstaddr-dmabase

(list will evolve over time because of new findings, fixes, etc... survey changelog!)

This whole thing is put under AFL license
