Each of the ASICs on the video board (Mercury, Venus, etc. but not 3D-RAM) has a 32-bit mode word register which is accessed with the instruction code 01000; this is the most common register accessed via JTAG. I was able to find lists in the Real3D firmware describing what each bit of each mode word does (least significant bit first):
- Code: Select all
Jupiter
=======
0 - GLOBAL RESET (LSB)
1 - Enable Two Channel
2 - Enable Interlace
3 - Enable Two Processor
4 - Disable Fog
5 - Disable Illumination
6 - Disable Scroll
7 - Disable S-Buffer
8 - Enable Scroll Smoothing
9 - Display Edges Only
10 - Slope
11 - Trap Pixel Data
12 - Trap Line FIFOs
13 - Threshold[0]
14 - Threshold[1]
15 - Threshold[2]
16 - Threshold[3]
17 - Threshold[4]
18 - Threshold[5]
19 - Enable MISRs
20 - Enable Memory Test
21 - Enable Edge Resolver Compare
22 - Enable Blend Compare
23 - Enable Smudge Compare
24 - Enable Color Calc Test
25 - Gamma Bypass
26 - Dac Strobes Invert
(bits 27-31 unused)
Mercury
=======
0 - NOT Initialized (LSB)
1 - Block CPU Write
2 - Block Culling
3 - Block Burst
4 - Block PingPong
5 - Force PingPong
6 - Block Poly Request
7 - Force Poly Request
8 - Block LOS
9 - MISR Enable
10 - SDRAM Short Refresh
11 - Memory Pointer JTAG
12 - Stats Sel [0]
13 - Stats Sel [1]
14 - Stats Sel [2]
15 - Burst Always
16 - Stack Mem Test [0]
17 - Stack Mem Test [1]
18 - Model FIFO Test
19 - Culling SDRAM Test
20 - Ignore Discard
21 - Model FIFO Ignore Discard
22 - Model FIFO Cycle
23 - LOS Test
24 - MISR MAC Sel
25 - MAC Test
26 - Datamux Test
27 - Counter Test
28 - Mux Isolation Sel [0]
29 - Mux Isolation Sel [1]
30 - Fltfunc Test
31 - Do Nothing (MSB)
Venus
=====
(bits 0-3 unused)
4 - Stop SDRAM writes/reads
5 - Always Available
6 - Test 1x
7 - MISR Enable
8 - Stats Mode[0]
9 - Stats Mode[1]
10 - Projection Scale Disable
11 - Snapshot Enable
12 - Stats Disable
13 - Polygon Mem Test
14 - Texture Update
15 - Polygon FIFO Test
16 - No writes to rd FIFO
17 - No reads to rd FIFO
18 - Short Refresh
19 - Pmem ROM Checksum Enable
20 - Test Mode[0]
21 - Test Mode[1]
22 - Test Mode[2]
23 - Counter Test
(bits 24-31 unused)
Earth
=====
0 - Two Processors (LSB)
1 - Two Monitors
2 - Disable Texture Xluc
3 - Disable Polygon Xluc
4 - Disable Contour Xluc
5 - Disable Stencil
6 - Test/Trap Input FIFO[0]
7 - Test/Trap Input FIFO[1]
8 - Stats Sel[0]
9 - Stats Sel[1]
10 - Stats Sel[2]
11 - Enable LOS Test
12 - Trap Code[0]
13 - Trap Code[1]
14 - Trap Code[2]
15 - Enable DBM Test
16 - Enable Video Mem Test
17 - Cycle Video Mem
18 - Enable MISRs
19 - Disable DRAM Refresh
20 - Disable Mars Freeze
21 - Select Database Color
(bits 22-31 unused)
Mars
====
0 - Two Processors (LSB)
1 - Disable Texture
2 - Disable Shading
3 - Disable Illumination
4 - Disable Fading
5 - Enable Compare Test
6 - Enable MISRs
7 - Enable Memory Test
8 - Enable CDRAM Debug
9 - Short Refresh
10 - Disable Texture Updates
11 - Hi Res
(bits 12-31 unused)
For example, 0x80000 is written to the Mercury mode word register immediately before testing culling RAM.
Interestingly there is nothing that suggests anything to do with sun clamping or signed fixed shading values. Perhaps these are set via different registers, or not even via JTAG at all.