psx.wiki

GPU State: Difference between revisions

Revision as of 04:48, 23 October 2026
RemmyLee
(Main page: drop the Hardware Tests lede)
Revision as of 05:11, 23 October 2026
RemmyLee
(Hardware tests: 72 more test pages, listed on the main page by area; RUN.toml no longer published)
Line 1:Line 1:
+---
+title: GPU State
+type: test
+summary: Measures what GPUSTAT and the GP1(10h) info indices report after each GP0 and GP1 setting and after a GP1(00h) reset.
+category: Hardware tests
+info: Machine = SCPH-5501
+info: Program = gpustate
+---
+
+## Overview
+
+The program reads the state of the [GPU](/hardware/gpu/) in two ways: [GPUSTAT](/hardware/gpu/gpustat/) directly, and the GP1(10h) info indices through GPUREAD. Before each info read it loads GPUREAD with the known word 2BCD1234h by writing two pixels and reading them back with GP0(C0h). An index that does not write GPUREAD therefore shows 2BCD1234h.[^src]
+
+The groups read every GP1(10h) index and its mirrors (S10), the GP0(E1h) to GP0(E6h) bits as GPUSTAT and the info indices show them (SEB), GPUSTAT after each primitive (STP) and after the GP0 no-operation commands (SGN), the GP1(03h) and GP1(04h) parameters (SDR), the IRQ1 flag (SIR), the GP1(00h) reset (SRS) and 40 display modes (SMD).[^src]
+
+## Results
+
+Indices 02h to 05h return the texture window, drawing area top left, drawing area bottom right and drawing offset. They replace only the bits of their own setting: with GPUREAD holding 2BCD1234h, index 02h returned 2BC5A5A5h for a texture window of 5A5A5h, and index 05h returned 2BD55923h for an offset of 155923h. Index 07h returned 00000002h. Indices 00h, 01h, 06h and 08h to 0Fh returned 00000000h.[^s10]
+
+Only the low 4 bits of the index count. Index 12h and the words 10000102h, 1000FF02h and 10FFFFF2h all read the texture window like index 02h, and 17h and 27h read the version like 07h.[^s10]
+
+GP1(04h) takes only bits 0 and 1 as the DMA direction. GPUSTAT shows the direction in bits 29 and 30. A parameter of 4 or FFFFFCh gave the same GPUSTAT as 0. GP1(03h) takes only bit 0: a parameter of 2 or FFFFFEh left the display on like 0, and 1 or FFFFFFh turned it off and set GPUSTAT bit 23.[^sdr]
+
+GP0(1Fh) set GPUSTAT bit 24 and I_STAT bit 1. GP1(01h) left bit 24 set, and GP1(02h) cleared it. A second GP0(1Fh) while bit 24 was still set raised no new I_STAT bit 1. GP0(1Fh) written behind a 1008 x 248 fill set bit 24 at 19,255 cycles, the moment the fill finished.[^sir]
+
+GP1(00h) left GPUSTAT at 14802000h and cleared indices 02h to 05h to zero. A parameter of FFFFFFh made no difference. After the reset the drawing area is a single pixel at 0,0: a 4 x 4 tile drawn there changed one pixel.[^srs]
+
+## Runs
+
+### 28 September 2026
+
+[gpustate_safe/00RUN.txt](/tests/raw/20260928T0000Z-5501a-card-h/gpustate_safe/00RUN.txt)
+
+```
+===== 00 RUN | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+8 tests
+A chain program, linked at 80010000
+Saved on the card in slot 2, from image 1
+COP0 at start: BPC 00000000 BDA 80024F50 TAR 8010D600 DCIC 00000000 BadVaddr 1F801DAA BDAM FFFFFFFF
+BPCM 00000000 SR 70000000 Cause 00000020 EPC 8010E1B4 PRId 00000002
+```
+
+[gpustate_safe/01S10.txt](/tests/raw/20260928T0000Z-5501a-card-h/gpustate_safe/01S10.txt)
+
+```
+===== 01 S10 GPU GP1 10H INDICES | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+BadVaddr as the group starts: 1F801DAA
+GP1(10h): the GPUREAD latch holds 2BCD1234h (two pixels read back) before each
+command; GPUREAD is read twice after it. E2h 5A5A5h, E3h 4B011h, E4h 781F4h,
+E5h 155923h are set first.
+GPUSTAT 5606200F at start
+index 00 (GP1 word 10000000): 00000000, again 00000000
+index 01 (GP1 word 10000001): 00000000, again 00000000
+index 02 (GP1 word 10000002): 2BC5A5A5, again 2BC5A5A5
+index 03 (GP1 word 10000003): 2BC4B011, again 2BC4B011
+index 04 (GP1 word 10000004): 2BC781F4, again 2BC781F4
+index 05 (GP1 word 10000005): 2BD55923, again 2BD55923
+index 06 (GP1 word 10000006): 00000000, again 00000000
+index 07 (GP1 word 10000007): 00000002, again 00000002
+index 08 (GP1 word 10000008): 00000000, again 00000000
+index 09 (GP1 word 10000009): 00000000, again 00000000
+index 0A (GP1 word 1000000A): 00000000, again 00000000
+index 0B (GP1 word 1000000B): 00000000, again 00000000
+index 0C (GP1 word 1000000C): 00000000, again 00000000
+index 0D (GP1 word 1000000D): 00000000, again 00000000
+index 0E (GP1 word 1000000E): 00000000, again 00000000
+index 0F (GP1 word 1000000F): 00000000, again 00000000
+index 10 (GP1 word 10000010): 00000000, again 00000000
+index 11 (GP1 word 10000011): 00000000, again 00000000
+index 12 (GP1 word 10000012): 2BC5A5A5, again 2BC5A5A5
+index 13 (GP1 word 10000013): 2BC4B011, again 2BC4B011
+index 14 (GP1 word 10000014): 2BC781F4, again 2BC781F4
+index 15 (GP1 word 10000015): 2BD55923, again 2BD55923
+index 16 (GP1 word 10000016): 00000000, again 00000000
+index 17 (GP1 word 10000017): 00000002, again 00000002
+index 18 (GP1 word 10000018): 00000000, again 00000000
+index 19 (GP1 word 10000019): 00000000, again 00000000
+index 1A (GP1 word 1000001A): 00000000, again 00000000
+index 1B (GP1 word 1000001B): 00000000, again 00000000
+index 1C (GP1 word 1000001C): 00000000, again 00000000
+index 1D (GP1 word 1000001D): 00000000, again 00000000
+index 1E (GP1 word 1000001E): 00000000, again 00000000
+index 1F (GP1 word 1000001F): 00000000, again 00000000
+mirror (GP1 word 10000012): 2BC5A5A5, again 2BC5A5A5
+mirror (GP1 word 10000102): 2BC5A5A5, again 2BC5A5A5
+mirror (GP1 word 1000FF02): 2BC5A5A5, again 2BC5A5A5
+mirror (GP1 word 10FFFFF2): 2BC5A5A5, again 2BC5A5A5
+mirror (GP1 word 10800005): 2BD55923, again 2BD55923
+mirror (GP1 word 10000017): 00000002, again 00000002
+mirror (GP1 word 10000027): 00000002, again 00000002
+mirror (GP1 word 10000018): 00000000, again 00000000
+mirror (GP1 word 11000003): 2BC4B011, again 2BC4B011
+mirror (GP1 word 15000003): 2BC4B011, again 2BC4B011
+mirror (GP1 word 1F000003): 2BC4B011, again 2BC4B011
+mirror (GP1 word 50000003): 2BC4B011, again 2BC4B011
+mirror (GP1 word 90000003): 2BC4B011, again 2BC4B011
+mirror (GP1 word D0000003): 2BC4B011, again 2BC4B011
+mirror (GP1 word 5F000007): 00000002, again 00000002
+Index 3, then E3h 12345h: GPUREAD 0004B011, then 0004B011, index 3 again 00012345
+Latch 7FFF7FFF: index 7 00000002, index 8 00000000, index 2 0005A5A5
+Latch 0: index 7 00000002, index 8 00000000, index 2 0005A5A5
+C0h 4x1, one word read 22221111, GP1(10h) 7, GPUREAD 00000002, GPUSTAT D606200F, next word 00000002, GPUSTAT then 5606200F
+Latch after GP1(01h): 44443333
+Latch after a 4x1 rectangle: 44443333
+Latch after a fill: 44443333
+Waits that ran out: 2
+Done.
+```
+
+[gpustate_safe/02SEB.txt](/tests/raw/20260928T0000Z-5501a-card-h/gpustate_safe/02SEB.txt)
+
+```
+===== 02 SEB GPU E1 TO E6 BITS | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+BadVaddr as the group starts: 1F801DAA
+E1h-E6h written with one bit set, bit 0 to 23. E1h and E6h are read from GPUSTAT
+(bits 0-15 shown, then 11-12), E2h-E5h from GP1(10h) 2-5 with the latch at 0.
+GPUSTAT 5606200F at start
+E1h, GP1(09h)=0: GPUSTAT 0-15:
+ 0:2001 1:2002 2:2004 3:2008 4:2010 5:2020 6:2040 7:2080
+ 8:2100 9:2200 10:2400 11:2000 12:2000 13:2000 14:2000 15:2000
+ 16:2000 17:2000 18:2000 19:2000 20:2000 21:2000 22:2000 23:2000
+E1h, GP1(09h)=1: GPUSTAT 0-15:
+ 0:2001 1:2002 2:2004 3:2008 4:2010 5:2020 6:2040 7:2080
+ 8:2100 9:2200 10:2400 11:A000 12:2000 13:2000 14:2000 15:2000
+ 16:2000 17:2000 18:2000 19:2000 20:2000 21:2000 22:2000 23:2000
+E1h 800h with GP1(09h)=1, then GP1(09h)=0: GPUSTAT 5606A000; E1h 0 then 56062000
+E6h: GPUSTAT 11-12:
+ 0:0001 1:0002 2:0000 3:0000 4:0000 5:0000 6:0000 7:0000
+ 8:0000 9:0000 10:0000 11:0000 12:0000 13:0000 14:0000 15:0000
+ 16:0000 17:0000 18:0000 19:0000 20:0000 21:0000 22:0000 23:0000
+E2h: index 2:
+ 0:000001 1:000002 2:000004 3:000008 4:000010 5:000020 6:000040 7:000080
+ 8:000100 9:000200 10:000400 11:000800 12:001000 13:002000 14:004000 15:008000
+ 16:010000 17:020000 18:040000 19:080000 20:000000 21:000000 22:000000 23:000000
+E3h: index 3:
+ 0:000001 1:000002 2:000004 3:000008 4:000010 5:000020 6:000040 7:000080
+ 8:000100 9:000200 10:000400 11:000800 12:001000 13:002000 14:004000 15:008000
+ 16:010000 17:020000 18:040000 19:080000 20:000000 21:000000 22:000000 23:000000
+E4h: index 4:
+ 0:000001 1:000002 2:000004 3:000008 4:000010 5:000020 6:000040 7:000080
+ 8:000100 9:000200 10:000400 11:000800 12:001000 13:002000 14:004000 15:008000
+ 16:010000 17:020000 18:040000 19:080000 20:000000 21:000000 22:000000 23:000000
+E5h: index 5:
+ 0:000001 1:000002 2:000004 3:000008 4:000010 5:000020 6:000040 7:000080
+ 8:000100 9:000200 10:000400 11:000800 12:001000 13:002000 14:004000 15:008000
+ 16:010000 17:020000 18:040000 19:080000 20:100000 21:200000 22:000000 23:000000
+All 24 bits set, latch 0: index 2 000FFFFF 3 000FFFFF 4 000FFFFF 5 003FFFFF
+E1h and E6h FFFFFFh: GPUSTAT 56063FFF
+Waits that ran out: 0
+Done.
+```
+
+[gpustate_safe/03STP.txt](/tests/raw/20260928T0000Z-5501a-card-h/gpustate_safe/03STP.txt)
+
+```
+===== 03 STP GPU TEXPAGE TO STAT | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+BadVaddr as the group starts: 1F801DAA
+Texpage attribute A into GPUSTAT: E1h 655h before each primitive, then GPUSTAT
+bits 0-10 and 15 (mask 87FFh) after it, for A = 0000 01FF 00AA 0155 0E00 F000 FFFF.
+GPUSTAT 5606200F at start
+tex tri 24h: 0600 07FF 06AA 0755 0600 0600 07FF
+tex quad 2Ch: 0600 07FF 06AA 0755 0600 0600 07FF
+raw tex tri 25h: 0600 07FF 06AA 0755 0600 0600 07FF
+semi tex tri 26h: 0600 07FF 06AA 0755 0600 0600 07FF
+gouraud tex tri 34h: 0600 07FF 06AA 0755 0600 0600 07FF
+gouraud tex quad 3Ch: 0600 07FF 06AA 0755 0600 0600 07FF
+tex tri 1024 wide (culled): 0600 07FF 06AA 0755 0600 0600 07FF
+tex tri, no area: 0600 07FF 06AA 0755 0600 0600 07FF
+tex tri outside the area: 0600 07FF 06AA 0755 0600 0600 07FF
+sprite 64h, A as CLUT: 0655 0655 0655 0655 0655 0655 0655
+sprite 7Ch, A as CLUT: 0655 0655 0655 0655 0655 0655 0655
+flat tri 20h: 0655 0655 0655 0655 0655 0655 0655
+gouraud line, A as colour: 0655 0655 0655 0655 0655 0655 0655
+fill, A as colour: 0655 0655 0655 0655 0655 0655 0655
+tex quad, FFFFh in the other UV words: 0600 07FF 06AA 0755 0600 0600 07FF
+GP1(09h)=1, tex tri A 0800h: GPUSTAT 5606A000
+GP1(09h)=1, sprite A 0800h: GPUSTAT D6062000
+E1h page 768 (red), tex tri names page 832 (green), then a raw sprite: pixels 03E003E0
+E1h mode 0, tex tri names mode 2, semi tile 404040 over 7FFF: pixels 5EF75EF7
+Waits that ran out: 0
+Done.
+```
+
+[gpustate_safe/04SGN.txt](/tests/raw/20260928T0000Z-5501a-card-h/gpustate_safe/04SGN.txt)
+
+```
+===== 04 SGN GPU GP0 NOP WORDS | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+BadVaddr as the group starts: 1F801DAA
+GP0 words psx-spx calls NOPs (gpu.txt:722-737) and GP0(01h) with parameters: GPUSTAT
+and GP1(10h) 2-5 before and after, and whether the GPUREAD latch moved.
+GPUSTAT 5606200F at start
+GP0 00000000: GPUSTAT D6062155 to D6062155, latch 001F001F, E2h-E5h changed: 2BC00000 2BC00000 2BC3BE7F 2BC00000
+GP0 00FFFFFF: GPUSTAT D6062155 to 56062155, latch 001F001F
+GP0 04FFFFFF: GPUSTAT 56062155 to 56062155, latch 001F001F
+GP0 0800ABCD: GPUSTAT D6062155 to D6062155, latch 001F001F
+GP0 10FFFFFF: GPUSTAT 56062155 to 56062155, latch 001F001F
+GP0 1EFFFFFF: GPUSTAT D6062155 to D6062155, latch 001F001F
+GP0 E0FFFFFF: GPUSTAT 56062155 to 56062155, latch 001F001F
+GP0 E7FFFFFF: GPUSTAT 56062155 to D6062155, latch 001F001F
+GP0 E8FFFFFF: GPUSTAT D6062155 to D6062155, latch 001F001F
+GP0 EFFFFFFF: GPUSTAT 56062155 to 56062155, latch 001F001F
+GP0 01FFFFFF: GPUSTAT D6062155 to D6062155, latch 001F001F
+GP0 01000000: GPUSTAT 56062155 to 56062155, latch 001F001F
+E1h 0 then GP0 000001FFh: GPUSTAT D6062000
+Waits that ran out: 0
+Done.
+```
+
+[gpustate_safe/05SDR.txt](/tests/raw/20260928T0000Z-5501a-card-h/gpustate_safe/05SDR.txt)
+
+```
+===== 05 SDR GPU GP1 02 03 04 | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+BadVaddr as the group starts: 1F801DAA
+GP1(04h) parameters: GPUSTAT idle after each. GP1(03h) parameters: GPUSTAT.23.
+Then GPUSTAT.25 in each direction while GP0(A0h) waits for data and while GP0(C0h)
+has data to read.
+GPUSTAT 5606200F at start
+GP1(04h)=000000: GPUSTAT 9406200F
+GP1(04h)=000001: GPUSTAT 3606200F
+GP1(04h)=000002: GPUSTAT D606200F
+GP1(04h)=000003: GPUSTAT 7406200F
+GP1(04h)=000004: GPUSTAT 1406200F
+GP1(04h)=000005: GPUSTAT B606200F
+GP1(04h)=000006: GPUSTAT 5606200F
+GP1(04h)=000007: GPUSTAT 7406200F
+GP1(04h)=FFFFFC: GPUSTAT 9406200F
+GP1(04h)=FFFFFD: GPUSTAT B606200F
+GP1(04h)=FFFFFE: GPUSTAT 5606200F
+GP1(04h)=FFFFFF: GPUSTAT 7406200F
+GP1(03h)=000000: GPUSTAT 1406200F
+GP1(03h)=000001: GPUSTAT 9486200F
+GP1(03h)=000002: GPUSTAT 1406200F
+GP1(03h)=000003: GPUSTAT 1486200F
+GP1(03h)=FFFFFE: GPUSTAT 9406200F
+GP1(03h)=FFFFFF: GPUSTAT 9486200F
+Dir 0: A0h 4x1 waiting 1006200F, one word in 1006200F, done 1406200F; C0h 4x1 9806200F, one word read 9806200F, both 9406200F
+Dir 1: A0h 4x1 waiting B206200F, one word in A206200F, done B606200F; C0h 4x1 3A06200F, one word read 3A06200F, both 3606200F
+Dir 2: A0h 4x1 waiting D206200F, one word in C206200F, done D606200F; C0h 4x1 DA06200F, one word read DA06200F, both D606200F
+Dir 3: A0h 4x1 waiting 7006200F, one word in 6006200F, done 7406200F; C0h 4x1 FA06200F, one word read FA06200F, both F406200F
+Waits that ran out: 0
+Done.
+```
+
+[gpustate_safe/06SIR.txt](/tests/raw/20260928T0000Z-5501a-card-h/gpustate_safe/06SIR.txt)
+
+```
+===== 06 SIR GPU IRQ1 FLAG | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+BadVaddr as the group starts: 1F801DAA
+GP0(1Fh) IRQ1 (gpu.txt:711-713): GPUSTAT.24 and I_STAT.1 after it, after GP1(01h),
+GP1(02h) with parameters, and GP0(1Fh) queued behind a 1008x248 fill. Interrupts
+off; I_STAT.1 acknowledged after each row.
+GPUSTAT 5606200F at start
+GP0(1Fh): GPUSTAT D706200F, I_STAT.1 1
+then GP1(01h): GPUSTAT D706200F
+then GP1(02h)=FFFFFF: GPUSTAT D606200F, I_STAT.1 1
+GP0(1Fh) FFFFFFh: GPUSTAT D706200F, I_STAT.1 1
+GP0(1Fh) again without GP1(02h): I_STAT.1 0 (edge only?)
+GP0(1Fh), GP1(02h), acknowledged, GP0(1Fh): GPUSTAT D706200F, I_STAT.1 1
+Fill 1008x248 then GP0(1Fh): bit 24 at 19255 cycles, GPU idle at 19255
+Waits that ran out: 0
+Done.
+```
+
+[gpustate_safe/07SRS.txt](/tests/raw/20260928T0000Z-5501a-card-h/gpustate_safe/07SRS.txt)
+
+```
+===== 07 SRS GPU GP1 00H RESET | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+BadVaddr as the group starts: 1F801DAA
+GP1(00h) (gpu.txt:743-757) from a set state: DMA 2, GP1(09h) 1, GP1(08h) 27h, display
+on, E1h 7FFh, E2h-E5h set, E6h 3, IRQ1 on, latch 2BCD1234h. Then what it left: GPUSTAT,
+the latch, GP1(10h) 2-8, whether GP1(09h) kept (E1h bit 11 into GPUSTAT.15), I_STAT.1.
+GPUSTAT 5606200F at start
+GP1(00h): GPUSTAT 14802000, GPUREAD 00010001, index 2-5 00000000 00000000 00000000 00000000, 7 00000002, 8 00000000, GPUSTAT.15 after E1h 800h 1, I_STAT.1 1
+GP1(00h) FFFFFFh: GPUSTAT 14802000, GPUREAD 00010001, index 2-5 00000000 00000000 00000000 00000000, 7 00000002, 8 00000000, GPUSTAT.15 after E1h 800h 1, I_STAT.1 1
+After GP1(00h), a 4x4 tile at 0,0: pixels changed (bit per pixel, row by row) 0001
+A0h 16x1 cut by GP1(00h) after 4 words, 4 more words after: row reads 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
+C0h 8x1, one word 00000000, GP1(00h): GPUSTAT 98802000, GPUREAD 00000000 00000000
+Waits that ran out: 0
+Done.
+```
+
+[gpustate_safe/08SMD.txt](/tests/raw/20260928T0000Z-5501a-card-h/gpustate_safe/08SMD.txt)
+
+```
+===== 08 SMD GPU DISPLAY MODES | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+BadVaddr as the group starts: 1F801DAA
+Display modes: each width 256/320/368/512/640, 240 lines or 480 interlaced, NTSC or
+PAL, 15 or 24 bit, with the fullscreen ranges of gpu.txt:821-873. For each: GPUSTAT at
+IRQ0, two frames in CPU cycles and in hblanks (timer 1 source 1), dots in 16 lines
+(timer 0 source 1). Interrupts off; timers put back.
+GPUSTAT 5606200F at start
+256 240p NTSC 15-bit (GP1(08h) 00): GPUSTAT 5600200F, frames 566170 566100 cycles, 263 263 hblanks, 5456 dots in 16 lines
+320 240p NTSC 15-bit (GP1(08h) 01): GPUSTAT 5602200F, frames 566108 566119 cycles, 263 263 hblanks, 6818 dots in 16 lines
+368 240p NTSC 15-bit (GP1(08h) 40): GPUSTAT 5601200F, frames 566105 566118 cycles, 263 263 hblanks, 7791 dots in 16 lines
+512 240p NTSC 15-bit (GP1(08h) 02): GPUSTAT 5604200F, frames 566108 566092 cycles, 263 263 hblanks, 10911 dots in 16 lines
+640 240p NTSC 15-bit (GP1(08h) 03): GPUSTAT 5606200F, frames 566108 566118 cycles, 263 263 hblanks, 13648 dots in 16 lines
+256 240p NTSC 24-bit (GP1(08h) 10): GPUSTAT 5620200F, frames 566109 566118 cycles, 263 263 hblanks, 5456 dots in 16 lines
+320 240p NTSC 24-bit (GP1(08h) 11): GPUSTAT 5622200F, frames 566076 566151 cycles, 263 263 hblanks, 6816 dots in 16 lines
+368 240p NTSC 24-bit (GP1(08h) 50): GPUSTAT 5621200F, frames 566105 566118 cycles, 263 263 hblanks, 7792 dots in 16 lines
+512 240p NTSC 24-bit (GP1(08h) 12): GPUSTAT 5624200F, frames 566108 566119 cycles, 263 263 hblanks, 10912 dots in 16 lines
+640 240p NTSC 24-bit (GP1(08h) 13): GPUSTAT 5626200F, frames 566140 566118 cycles, 263 263 hblanks, 13648 dots in 16 lines
+256 480i NTSC 15-bit (GP1(08h) 24): GPUSTAT 5648000F, frames 563958 566119 cycles, 262 263 hblanks, 5456 dots in 16 lines
+320 480i NTSC 15-bit (GP1(08h) 25): GPUSTAT 564A000F, frames 563955 566118 cycles, 262 263 hblanks, 6819 dots in 16 lines
+368 480i NTSC 15-bit (GP1(08h) 64): GPUSTAT 5649000F, frames 563958 566118 cycles, 262 263 hblanks, 7795 dots in 16 lines
+512 480i NTSC 15-bit (GP1(08h) 26): GPUSTAT 564C000F, frames 563944 566119 cycles, 262 263 hblanks, 10912 dots in 16 lines
+640 480i NTSC 15-bit (GP1(08h) 27): GPUSTAT 564E000F, frames 563958 566119 cycles, 262 263 hblanks, 13653 dots in 16 lines
+256 480i NTSC 24-bit (GP1(08h) 34): GPUSTAT 5668000F, frames 563942 566118 cycles, 262 263 hblanks, 5458 dots in 16 lines
+320 480i NTSC 24-bit (GP1(08h) 35): GPUSTAT 566A000F, frames 563958 566118 cycles, 262 263 hblanks, 6816 dots in 16 lines
+368 480i NTSC 24-bit (GP1(08h) 74): GPUSTAT 5669000F, frames 563936 566118 cycles, 262 263 hblanks, 7794 dots in 16 lines
+512 480i NTSC 24-bit (GP1(08h) 36): GPUSTAT 566C000F, frames 563954 566119 cycles, 262 263 hblanks, 10916 dots in 16 lines
+640 480i NTSC 24-bit (GP1(08h) 37): GPUSTAT 566E000F, frames 563958 566119 cycles, 262 263 hblanks, 13652 dots in 16 lines
+256 240p PAL 15-bit (GP1(08h) 08): GPUSTAT 5610200F, frames 674403 674400 cycles, 314 314 hblanks, 5441 dots in 16 lines
+320 240p PAL 15-bit (GP1(08h) 09): GPUSTAT 5612200F, frames 674444 674406 cycles, 314 314 hblanks, 6818 dots in 16 lines
+368 240p PAL 15-bit (GP1(08h) 48): GPUSTAT 5611200F, frames 674397 674406 cycles, 314 314 hblanks, 7778 dots in 16 lines
+512 240p PAL 15-bit (GP1(08h) 0A): GPUSTAT 5614200F, frames 674447 674407 cycles, 314 314 hblanks, 10899 dots in 16 lines
+640 240p PAL 15-bit (GP1(08h) 0B): GPUSTAT 5616200F, frames 674396 674428 cycles, 314 314 hblanks, 13620 dots in 16 lines
+256 240p PAL 24-bit (GP1(08h) 18): GPUSTAT 5630200F, frames 674397 674457 cycles, 314 314 hblanks, 5439 dots in 16 lines
+320 240p PAL 24-bit (GP1(08h) 19): GPUSTAT 5632200F, frames 674413 674390 cycles, 314 314 hblanks, 6818 dots in 16 lines
+368 240p PAL 24-bit (GP1(08h) 58): GPUSTAT 5631200F, frames 674396 674458 cycles, 314 314 hblanks, 7776 dots in 16 lines
+512 240p PAL 24-bit (GP1(08h) 1A): GPUSTAT 5634200F, frames 674389 674406 cycles, 314 314 hblanks, 10899 dots in 16 lines
+640 240p PAL 24-bit (GP1(08h) 1B): GPUSTAT 5636200F, frames 674396 674458 cycles, 314 314 hblanks, 13619 dots in 16 lines
+256 480i PAL 15-bit (GP1(08h) 2C): GPUSTAT 5658000F, frames 670092 672256 cycles, 312 313 hblanks, 5441 dots in 16 lines
+320 480i PAL 15-bit (GP1(08h) 2D): GPUSTAT 565A000F, frames 670095 672256 cycles, 312 313 hblanks, 6816 dots in 16 lines
+368 480i PAL 15-bit (GP1(08h) 6C): GPUSTAT 5659000F, frames 670147 672256 cycles, 312 313 hblanks, 7776 dots in 16 lines
+512 480i PAL 15-bit (GP1(08h) 2E): GPUSTAT 565C000F, frames 670092 672307 cycles, 312 313 hblanks, 10899 dots in 16 lines
+640 480i PAL 15-bit (GP1(08h) 2F): GPUSTAT 565E000F, frames 670095 672256 cycles, 312 313 hblanks, 13619 dots in 16 lines
+256 480i PAL 24-bit (GP1(08h) 3C): GPUSTAT 5678000F, frames 670096 672256 cycles, 312 313 hblanks, 5442 dots in 16 lines
+320 480i PAL 24-bit (GP1(08h) 3D): GPUSTAT 567A000F, frames 670095 672256 cycles, 312 313 hblanks, 6818 dots in 16 lines
+368 480i PAL 24-bit (GP1(08h) 7C): GPUSTAT 5679000F, frames 670147 672256 cycles, 312 313 hblanks, 7778 dots in 16 lines
+512 480i PAL 24-bit (GP1(08h) 3E): GPUSTAT 567C000F, frames 670096 672307 cycles, 312 313 hblanks, 10894 dots in 16 lines
+640 480i PAL 24-bit (GP1(08h) 3F): GPUSTAT 567E000F, frames 670089 672256 cycles, 312 313 hblanks, 13619 dots in 16 lines
+Waits that ran out: 0
+Done.
+```
+
+### 27 September 2026 (5501a-card-g3)
+
+Output files: [00RUN.txt](/tests/raw/20260927T0000Z-5501a-card-g3/gpustate_safe/00RUN.txt) · [01S10.txt](/tests/raw/20260927T0000Z-5501a-card-g3/gpustate_safe/01S10.txt) · [02SEB.txt](/tests/raw/20260927T0000Z-5501a-card-g3/gpustate_safe/02SEB.txt) · [03STP.txt](/tests/raw/20260927T0000Z-5501a-card-g3/gpustate_safe/03STP.txt) · [04SGN.txt](/tests/raw/20260927T0000Z-5501a-card-g3/gpustate_safe/04SGN.txt) · [05SDR.txt](/tests/raw/20260927T0000Z-5501a-card-g3/gpustate_safe/05SDR.txt) · [06SIR.txt](/tests/raw/20260927T0000Z-5501a-card-g3/gpustate_safe/06SIR.txt) · [07SRS.txt](/tests/raw/20260927T0000Z-5501a-card-g3/gpustate_safe/07SRS.txt) · [08SMD.txt](/tests/raw/20260927T0000Z-5501a-card-g3/gpustate_safe/08SMD.txt).
+
+### 27 September 2026 (5501a-card-g2)
+
+Output files: [00RUN.txt](/tests/raw/20260927T0000Z-5501a-card-g2/gpustate_safe/00RUN.txt) · [01S10.txt](/tests/raw/20260927T0000Z-5501a-card-g2/gpustate_safe/01S10.txt) · [02SEB.txt](/tests/raw/20260927T0000Z-5501a-card-g2/gpustate_safe/02SEB.txt) · [03STP.txt](/tests/raw/20260927T0000Z-5501a-card-g2/gpustate_safe/03STP.txt) · [04SGN.txt](/tests/raw/20260927T0000Z-5501a-card-g2/gpustate_safe/04SGN.txt) · [05SDR.txt](/tests/raw/20260927T0000Z-5501a-card-g2/gpustate_safe/05SDR.txt) · [06SIR.txt](/tests/raw/20260927T0000Z-5501a-card-g2/gpustate_safe/06SIR.txt) · [07SRS.txt](/tests/raw/20260927T0000Z-5501a-card-g2/gpustate_safe/07SRS.txt) · [08SMD.txt](/tests/raw/20260927T0000Z-5501a-card-g2/gpustate_safe/08SMD.txt).
+
+## References
+
+[^src]: Console test suite (PsyQ build), programs/gpu/gpustate.c and gpustate.md.
+[^s10]: Hardware test run 20260928T0000Z-5501a-card-h: [gpustate_safe/01S10.txt](/tests/raw/20260928T0000Z-5501a-card-h/gpustate_safe/01S10.txt).
+[^sdr]: Hardware test run 20260928T0000Z-5501a-card-h: [gpustate_safe/05SDR.txt](/tests/raw/20260928T0000Z-5501a-card-h/gpustate_safe/05SDR.txt).
+[^sir]: Hardware test run 20260928T0000Z-5501a-card-h: [gpustate_safe/06SIR.txt](/tests/raw/20260928T0000Z-5501a-card-h/gpustate_safe/06SIR.txt).
+[^srs]: Hardware test run 20260928T0000Z-5501a-card-h: [gpustate_safe/07SRS.txt](/tests/raw/20260928T0000Z-5501a-card-h/gpustate_safe/07SRS.txt).