psx.wiki

GPU Timing at Game Scale: 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 Timing at Game Scale
+type: test
+summary: Measures GPU drawing time for screen-sized fills and draws and the time the display fetch takes from drawing in each video mode.
+category: Hardware tests
+info: Machine = SCPH-5501 (NTSC)
+info: Program = gputiming2
+---
+
+## Overview
+
+The program times the commands a game sends at full scale: screen-sized fills, copies and uploads, polygons by area and shape, ordering-table lists and a frame-like list. Root counter 2 counts system clock cycles from just before the first GP0 word, and the program polls [GPUSTAT](/hardware/gpu/gpustat/) until bits 26 and 28 are both set. Interrupts are off, and each row prints four samples.[^src]
+
+Every group starts with the display collapsed by GP1(07h), which keeps the [GPU](/hardware/gpu/) in vertical blank. One group (HDM) repeats four draws under each display mode to show how much time the display fetch takes from drawing.[^src]
+
+## Results
+
+With the display collapsed, the time of a GP0(02h) fill grows with its width. A 640 x 240 fill took about 1.8 times as long as a 320 x 240 one.[^hfl]
+
+Table: Screen-sized fills
+
+| Size | Cycles (median of four) |
+| --- | --- |
+| 320 x 240 | 6,232 |
+| 368 x 240 | 6,937 |
+| 512 x 240 | 9,144 |
+| 640 x 240 | 11,088 |
+| 1008 x 248 | 17,213 |
+
+Fills written back to back add up: one 64 x 64 fill took about 718 cycles, and five in a row took about 3,053. The display mode made no difference to a 320 x 240 fill. It took about 6,232 cycles with the display live at 320 x 240 and also at 640 x 480 interlaced and in 24-bit colour.[^hfl]
+
+The display fetch slows the other commands. A 15-bit sprite of 256 x 128 took 93,489 cycles with the display collapsed and grew with the width and depth of the live display:[^hdm]
+
+Table: 256 x 128 sprite under each display mode
+
+| Display | Cycles (median of four) |
+| --- | --- |
+| Collapsed | 93,489 |
+| 256 x 240 | 93,494 |
+| 320 x 240 | 99,110 |
+| 512 x 240 | 101,325 |
+| 640 x 240 | 103,049 |
+| 640 x 480 interlaced | 102,288 |
+| 640 x 480 interlaced, 24-bit | 108,664 |
+
+A 128 x 128 copy grew from about 20,977 cycles collapsed to about 23,010 at 640 x 480 interlaced in 24-bit colour. A Gouraud-shaded triangle of size 200 took about 20,830 to 21,070 cycles in every mode.[^hdm]
+
+Turning the display off with GP1(03h) did not remove the cost. At 320 x 240 with the display off the sprite took 99,565 cycles. With the display on it took 99,110.[^hdm]
+
+## Runs
+
+### 28 September 2026
+
+[gputiming2/00RUN.txt](/tests/raw/20260928T0000Z-5501a-card-h/gputiming2/00RUN.txt)
+
+```
+===== 00 RUN | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+14 tests
+A chain program, linked at 80100000
+Saved on the card in slot 2, from image 1
+COP0 at start: BPC 00000000 BDA 80024F50 TAR 8001D3F0 DCIC 00000000 BadVaddr 1F801DAA BDAM FFFFFFFF
+BPCM 00000000 SR 70000000 Cause 00000020 EPC 8001DF5C PRId 00000002
+```
+
+[gputiming2/01HFL.txt](/tests/raw/20260928T0000Z-5501a-card-h/gputiming2/01HFL.txt)
+
+```
+===== 01 HFL GPU FILLS BY SIZE | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+BadVaddr as the group starts: 1F801DAA
+Fills (GP0 02h) by size with the display collapsed; back-to-back fills of 64x64;
+the 320x240 fill with the display live at 320x240 and at 640x480 interlaced.
+Fill 16x1: 176 176 181 176
+Fill 16x16: 294 293 295 294
+Fill 32x32: 354 350 356 354
+Fill 64x64: 721 716 719 720
+Fill 128x128: 1812 1818 1803 1817
+Fill 256x248: 5383 5395 5389 5448
+Fill 320x240: 6240 6232 6231 6233
+Fill 368x240: 6971 6968 6903 6906
+Fill 512x240: 9141 9084 9147 9148
+Fill 640x240: 11088 11088 11092 11082
+Fill 1008x248: 17210 17216 17204 17216
+Fill 16x248: 1627 1622 1636 1644
+Fill 256x16: 473 481 475 476
+Fill 1008x1: 294 305 291 296
+2 fills of 64x64 written back to back: 1261 1268 1316 1317
+3 fills of 64x64 written back to back: 1915 1860 1916 1855
+4 fills of 64x64 written back to back: 2454 2458 2470 2457
+5 fills of 64x64 written back to back: 3052 3050 3054 3056
+Fill 320x240, display live 320x240: 6180 6230 6184 6242
+Fill 320x240, display live 640x480i: 6230 6239 6244 6192
+Fill 320x240, display live 320x240 24-bit: 6237 6229 6234 6241
+Done.
+```
+
+[gputiming2/02HXD.txt](/tests/raw/20260928T0000Z-5501a-card-h/gputiming2/02HXD.txt)
+
+```
+===== 02 HXD GPU CPU TO VRAM | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+BadVaddr as the group starts: 1F801DAA
+CPU to VRAM: GP0(A0h) data by DMA2 (SyncMode 1, 16-word blocks, direction 2) and by
+CPU stores, 16x16 to 256x128, read back by the CPU and compared, display collapsed and
+live at 320x240 (psx-spx gpu.txt:698-702: DMA to VRAM may skip words outside vblank).
+Collapsed, A0h 16x16 DMA block 16: channel done 300 265 259 252, idle 411 319 313 306, wrong words 0
+Collapsed, A0h 32x32 DMA block 16: channel done 981 972 956 956, idle 1097 1026 1010 1010, wrong words 0
+Collapsed, A0h 64x64 DMA block 16: channel done 3700 3676 3678 3660, idle 3811 3730 3732 3714, wrong words 0
+Collapsed, A0h 128x64 DMA block 16: channel done 7311 7308 7313 7332, idle 7422 7372 7367 7386, wrong words 0
+Collapsed, A0h 128x128 DMA block 16: channel done 14596 14589 14584 14584, idle 14707 14643 14638 14638, wrong words 0
+Collapsed, A0h 256x128 DMA block 16: channel done 29037 29011 29029 29019, idle 29148 29065 29083 29078, wrong words 0
+Collapsed, A0h 128x128 CPU stores: idle 34476 34447 34451 34444, wrong words 0
+Collapsed, A0h 256x128 CPU stores: idle 3239 3242 3237 3244, wrong words 0
+Live 320x240, A0h 16x16 DMA block 16: channel done 271 252 248 252, idle 387 306 302 306, wrong words 0
+Live 320x240, A0h 32x32 DMA block 16: channel done 977 971 956 956, idle 1097 1025 1010 1010, wrong words 0
+Live 320x240, A0h 64x64 DMA block 16: channel done 3703 3678 3663 3660, idle 3814 3732 3717 3714, wrong words 0
+Live 320x240, A0h 128x64 DMA block 16: channel done 7345 7362 7379 7327, idle 7461 7416 7433 7381, wrong words 0
+Live 320x240, A0h 128x128 DMA block 16: channel done 14720 14736 14658 14720, idle 14831 14790 14717 14774, wrong words 0
+Live 320x240, A0h 256x128 DMA block 16: channel done 29116 29119 29101 29075, idle 29232 29173 29155 29129, wrong words 0
+Live 320x240, A0h 128x128 CPU stores: idle 34450 34447 34447 34451, wrong words 0
+Live 320x240, A0h 256x128 CPU stores: idle 3236 3236 3239 3238, wrong words 0
+Done.
+```
+
+[gputiming2/03HRD.txt](/tests/raw/20260928T0000Z-5501a-card-h/gputiming2/03HRD.txt)
+
+```
+===== 03 HRD GPU VRAM TO CPU | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+BadVaddr as the group starts: 1F801DAA
+VRAM to CPU: GP0(C0h) data by DMA2 (SyncMode 1, 16-word blocks, direction 3) and by
+CPU loads, 16x16 to 256x128, against the words written first, display collapsed and
+live at 320x240.
+Collapsed, C0h 16x16 DMA block 16: bit 27 at 41 66 66 71, channel done 298 247 247 292, idle 352 301 301 346, wrong words 0
+Collapsed, C0h 32x32 DMA block 16: bit 27 at 41 71 66 66, channel done 1072 1098 1092 1098, idle 1126 1152 1152 1152, wrong words 0
+Collapsed, C0h 64x64 DMA block 16: bit 27 at 41 76 66 68, channel done 4459 4438 4425 4431, idle 4513 4492 4479 4485, wrong words 0
+Collapsed, C0h 128x64 DMA block 16: bit 27 at 41 71 66 66, channel done 8933 8930 8915 8907, idle 8987 8984 8979 8961, wrong words 0
+Collapsed, C0h 128x128 DMA block 16: bit 27 at 41 70 70 70, channel done 17842 17833 17833 17833, idle 17896 17887 17887 17887, wrong words 0
+Collapsed, C0h 256x128 DMA block 16: bit 27 at 41 66 68 71, channel done 35722 35703 35708 35711, idle 35779 35757 35762 35765, wrong words 0
+Collapsed, C0h 128x128 CPU loads: reads end 9666 9630 9637 9635, wrong words 0
+Collapsed, C0h 256x128 CPU loads: reads end 18988 18983 18996 18996, wrong words 0
+Live 320x240, C0h 16x16 DMA block 16: bit 27 at 41 68 66 66, channel done 269 289 247 247, idle 323 343 301 301, wrong words 0
+Live 320x240, C0h 32x32 DMA block 16: bit 27 at 124 71 66 66, channel done 1080 1109 1109 1111, idle 1134 1163 1163 1165, wrong words 0
+Live 320x240, C0h 64x64 DMA block 16: bit 27 at 41 76 66 68, channel done 4459 4438 4425 4431, idle 4513 4492 4479 4485, wrong words 0
+Live 320x240, C0h 128x64 DMA block 16: bit 27 at 40 71 66 66, channel done 8938 8958 8957 8968, idle 8992 9013 9011 9022, wrong words 0
+Live 320x240, C0h 128x128 DMA block 16: bit 27 at 41 66 66 156, channel done 17958 17892 17856 17915, idle 18012 17946 17910 17969, wrong words 0
+Live 320x240, C0h 256x128 DMA block 16: bit 27 at 124 91 66 66, channel done 35953 35721 35859 35896, idle 36007 35784 35913 35950, wrong words 0
+Live 320x240, C0h 128x128 CPU loads: reads end 9624 9629 9632 9632, wrong words 0
+Live 320x240, C0h 256x128 CPU loads: reads end 18987 18994 18994 18994, wrong words 0
+Done.
+```
+
+[gputiming2/04HCP.txt](/tests/raw/20260928T0000Z-5501a-card-h/gputiming2/04HCP.txt)
+
+```
+===== 04 HCP GPU SCREEN COPIES | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+BadVaddr as the group starts: 1F801DAA
+VRAM to VRAM copies (GP0 80h) of screen size: whole buffers side by side, shifted by
+one pixel and one row (overlapping), and 16 copies of 16x16 back to back.
+Copy 320x240 from 0,256 to 320,256: 101445 101395 101402 101401
+Copy 256x240 from 0,256 to 256,256: 78725 78788 78784 78776
+Copy 128x240 to x 512: 39239 39165 39167 39231
+Copy 64x240 to x 512: 22379 22378 22310 22375
+Copy 320x120 down 120 rows: 50869 50818 50753 50747
+Copy 320x240 to x+1 (overlapping): 101880 101950 101884 102071
+Copy 320x240 to x-1 (overlapping): 102187 102186 102189 102190
+Copy 320x240 to y+1 (overlapping): 101531 101396 101397 101401
+Copy 320x240 to y-1 (overlapping): 101404 101522 101392 101403
+Copy 368x240 to x 640: 113644 113640 113773 113598
+4 copies of 16x16 back to back: 2683 2632 2643 2673
+Done.
+```
+
+[gputiming2/05HTF.txt](/tests/raw/20260928T0000Z-5501a-card-h/gputiming2/05HTF.txt)
+
+```
+===== 05 HTF GPU FLAT TRI AREA | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+BadVaddr as the group starts: 1F801DAA
+Flat triangles (GP0 20h) by area and shape: right triangles of legs 0 to 240, wide
+and tall ones of equal area, turned, flat top, flat bottom, general, a sliver.
+Flat right triangle legs 0: 192 194 188 194
+Flat right triangle legs 1: 193 188 194 193
+Flat right triangle legs 8: 192 188 305 193
+Flat right triangle legs 16: 305 302 305 312
+Flat right triangle legs 32: 492 488 488 492
+Flat right triangle legs 64: 1333 1338 1346 1334
+Flat right triangle legs 128: 4558 4551 4546 4551
+Flat right triangle legs 240: 15107 15098 15098 15100
+Flat 512 wide 32 tall: 4487 4493 4496 4487
+Flat 32 wide 240 tall: 2669 2670 2670 2670
+Flat 256 wide 64 tall: 4483 4491 4492 4491
+Flat 64 wide 240 tall: 4555 4551 4546 4551
+Flat turned 45 degrees, 128 across: 3581 3524 3581 3580
+Flat flat top 128: 4610 4731 4613 4607
+Flat flat bottom 128: 4550 4551 4547 4546
+Flat general 128: 3879 3884 3881 3886
+Flat sliver 200 long: 433 432 427 485
+Done.
+```
+
+[gputiming2/06HTG.txt](/tests/raw/20260928T0000Z-5501a-card-h/gputiming2/06HTG.txt)
+
+```
+===== 06 HTG GPU GOURAUD TRI AREA | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+BadVaddr as the group starts: 1F801DAA
+Gouraud triangles (GP0 30h), the same shapes, dither off; then dither on.
+Gouraud right triangle legs 0: 386 387 386 384
+Gouraud right triangle legs 1: 328 323 324 324
+Gouraud right triangle legs 8: 395 398 399 397
+Gouraud right triangle legs 16: 516 519 513 520
+Gouraud right triangle legs 32: 950 944 945 938
+Gouraud right triangle legs 64: 2570 2518 2524 2520
+Gouraud right triangle legs 128: 8878 8875 8826 8826
+Gouraud right triangle legs 240: 29748 29752 29744 29744
+Gouraud 512 wide 32 tall: 8893 8827 8827 8827
+Gouraud 32 wide 240 tall: 4823 4823 4829 4823
+Gouraud 256 wide 64 tall: 8765 8764 8758 8762
+Gouraud 64 wide 240 tall: 8630 8641 8640 8636
+Gouraud turned 45 degrees, 128 across: 6761 6766 6765 6765
+Gouraud flat top 128: 8890 8888 8946 8935
+Gouraud flat bottom 128: 8809 8770 8815 8815
+Gouraud general 128: 7486 7487 7494 7499
+Gouraud sliver 200 long: 759 763 758 767
+Gouraud dithered right triangle legs 0: 385 385 386 385
+Gouraud dithered right triangle legs 1: 324 322 322 324
+Gouraud dithered right triangle legs 8: 396 400 400 391
+Gouraud dithered right triangle legs 16: 522 515 523 518
+Gouraud dithered right triangle legs 32: 948 936 948 943
+Gouraud dithered right triangle legs 64: 2523 2576 2579 2574
+Gouraud dithered right triangle legs 128: 8832 8887 8878 8832
+Gouraud dithered right triangle legs 240: 29745 29728 29745 29744
+Gouraud dithered 512 wide 32 tall: 8884 8827 8827 8827
+Gouraud dithered 32 wide 240 tall: 4826 4827 4817 4825
+Gouraud dithered 256 wide 64 tall: 8764 8770 8815 8815
+Gouraud dithered 64 wide 240 tall: 8643 8640 8641 8647
+Gouraud dithered turned 45 degrees, 128 across: 6761 6768 6768 6768
+Gouraud dithered flat top 128: 8938 8942 8946 8935
+Gouraud dithered flat bottom 128: 8825 8772 8815 8815
+Gouraud dithered general 128: 7499 7493 7494 7544
+Gouraud dithered sliver 200 long: 817 817 761 762
+Done.
+```
+
+[gputiming2/07HTT.txt](/tests/raw/20260928T0000Z-5501a-card-h/gputiming2/07HTT.txt)
+
+```
+===== 07 HTT GPU TEXTURED TRIS | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+BadVaddr as the group starts: 1F801DAA
+Textured triangles (GP0 24h) at 4, 8 and 15 bits: legs 16 to 240 at texture 1:1
+(cold: another page named first, so the cache starts empty; warm: repeated), 128 at
+texture 64 (magnified) and 255 (minified), and 128 with u running down the screen.
+Depth 0 legs 16 texture 1:1, cold: 574 568 569 576
+Depth 0 legs 16 texture 1:1, warm: 470 469 473 468
+Depth 0 legs 64 texture 1:1, cold: 3839 3850 3902 3847
+Depth 0 legs 64 texture 1:1, warm: 2527 2530 2541 2536
+Depth 0 legs 128 texture 1:1, cold: 13781 13791 13789 13852
+Depth 0 legs 128 texture 1:1, warm: 13020 13021 13079 13021
+Depth 0 legs 240 texture 1:1, cold: 46351 46410 46402 46602
+Depth 0 legs 240 texture 1:1, warm: 46423 46425 46426 46375
+Depth 0 legs 128 texture 64: 10291 8830 8837 8847
+Depth 0 legs 128 texture 255: 17333 17998 17982 17991
+Depth 0 legs 128, u down the screen: 45824 44968 45154 44970
+Depth 0 gouraud-textured legs 128: 13103 13160 13102 13108
+Depth 0 raw legs 128: 12961 12960 12958 12962
+Depth 1 legs 16 texture 1:1, cold: 875 624 629 630
+Depth 1 legs 16 texture 1:1, warm: 468 468 469 468
+Depth 1 legs 64 texture 1:1, cold: 4990 4999 4999 5010
+Depth 1 legs 64 texture 1:1, warm: 3925 3918 3923 3920
+Depth 1 legs 128 texture 1:1, cold: 18578 18519 18519 18519
+Depth 1 legs 128 texture 1:1, warm: 18538 18541 18542 18526
+Depth 1 legs 240 texture 1:1, cold: 63271 63258 63320 63260
+Depth 1 legs 240 texture 1:1, warm: 63277 63342 63278 63288
+Depth 1 legs 128 texture 64: 11443 10296 10346 10352
+Depth 1 legs 128 texture 255: 27095 27629 27633 27629
+Depth 1 legs 128, u down the screen: 70640 70700 70699 70709
+Depth 1 gouraud-textured legs 128: 18498 18692 18562 18509
+Depth 1 raw legs 128: 18357 18358 18353 18355
+Depth 2 legs 16 texture 1:1, cold: 747 752 747 809
+Depth 2 legs 16 texture 1:1, warm: 474 468 472 476
+Depth 2 legs 64 texture 1:1, cold: 7366 7306 7305 7358
+Depth 2 legs 64 texture 1:1, warm: 6471 6411 6473 6411
+Depth 2 legs 128 texture 1:1, cold: 27794 27797 27795 27795
+Depth 2 legs 128 texture 1:1, warm: 27816 27818 28059 27874
+Depth 2 legs 240 texture 1:1, cold: 95973 95948 95963 95956
+Depth 2 legs 240 texture 1:1, warm: 95997 95978 95992 96001
+Depth 2 legs 128 texture 64: 17079 16109 16113 16109
+Depth 2 legs 128 texture 255: 44307 44668 44673 44916
+Depth 2 legs 128, u down the screen: 71725 71731 71671 71683
+Depth 2 gouraud-textured legs 128: 27785 27838 27841 27794
+Depth 2 raw legs 128: 27625 27628 27814 27636
+Done.
+```
+
+[gputiming2/08HMX.txt](/tests/raw/20260928T0000Z-5501a-card-h/gputiming2/08HMX.txt)
+
+```
+===== 08 HMX GPU MODE COSTS | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+BadVaddr as the group starts: 1F801DAA
+Drawing modes on five shapes: plain; semi-transparent in modes 0-3 (the command's
+semi bit, mode from E1h or the texpage attribute); dither; E6h 1 (set mask), 2 (check
+mask, over pixels with bit 15 clear) and 3.
+Plain: flat tri 128: 4547 4552 4547 4555
+Plain: gouraud tri 128: 8822 8821 8821 8821
+Plain: textured tri 128: 27632 27635 27633 27689
+Plain: rect 128x128: 8595 8593 8604 8595
+Plain: textured rect 128x128: 47047 46997 47061 47177
+Semi mode 0: flat tri 128: 6857 6851 6859 6855
+Semi mode 0: gouraud tri 128: 8887 8946 8935 8946
+Semi mode 0: textured tri 128: 31087 31098 31027 31088
+Semi mode 0: rect 128x128: 12956 12977 12970 12969
+Semi mode 0: textured rect 128x128: 54692 54696 54688 54882
+Semi mode 1: flat tri 128: 6852 6860 6855 6847
+Semi mode 1: gouraud tri 128: 8929 8946 8935 8946
+Semi mode 1: textured tri 128: 31092 31038 31022 31092
+Semi mode 1: rect 128x128: 12974 12973 12966 12956
+Semi mode 1: textured rect 128x128: 54684 54700 54865 54696
+Semi mode 2: flat tri 128: 6857 6850 6847 6860
+Semi mode 2: gouraud tri 128: 8941 8935 8946 8935
+Semi mode 2: textured tri 128: 31025 31082 31089 31086
+Semi mode 2: rect 128x128: 12970 12966 12973 12966
+Semi mode 2: textured rect 128x128: 54696 54692 54879 54694
+Semi mode 3: flat tri 128: 6851 6847 6856 6859
+Semi mode 3: gouraud tri 128: 8887 8876 8882 8935
+Semi mode 3: textured tri 128: 31025 31082 31089 31086
+Semi mode 3: rect 128x128: 12970 12966 12973 12966
+Semi mode 3: textured rect 128x128: 54696 54873 54683 54689
+Dither: flat tri 128: 4554 4553 4546 4551
+Dither: gouraud tri 128: 8833 8830 8832 8832
+Dither: textured tri 128: 27686 27696 27629 27695
+Dither: rect 128x128: 8610 8604 8609 8595
+Dither: textured rect 128x128: 47048 47060 47232 46995
+E6h 1: flat tri 128: 4546 4546 4551 4547
+E6h 1: gouraud tri 128: 8881 8832 8832 8832
+E6h 1: textured tri 128: 27685 27632 27631 27629
+E6h 1: rect 128x128: 8602 8602 8598 8598
+E6h 1: textured rect 128x128: 47048 47058 47058 47239
+E6h 2: flat tri 128: 6852 6862 6855 6847
+E6h 2: gouraud tri 128: 8887 8888 8946 8935
+E6h 2: textured tri 128: 31034 31090 31029 31026
+E6h 2: rect 128x128: 12970 12973 12966 12956
+E6h 2: textured rect 128x128: 54694 54700 54685 54869
+E6h 3: flat tri 128: 6857 6858 6859 6851
+E6h 3: gouraud tri 128: 8893 8887 8949 8892
+E6h 3: textured tri 128: 31085 31083 31089 31084
+E6h 3: rect 128x128: 12970 12961 12973 12966
+E6h 3: textured rect 128x128: 54688 54697 54872 54696
+Done.
+```
+
+[gputiming2/09HQD.txt](/tests/raw/20260928T0000Z-5501a-card-h/gputiming2/09HQD.txt)
+
+```
+===== 09 HQD GPU QUADS BY SIDE | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+BadVaddr as the group starts: 1F801DAA
+Quads by side 16 to 240: flat (28h), gouraud (38h), textured 15-bit 1:1 (2Ch),
+gouraud-textured (3Ch), and a square of 128 turned 45 degrees.
+Flat quad 16: 383 385 394 380
+Gouraud quad 16: 667 669 672 667
+Textured quad 16: 1165 613 620 620
+Gouraud-textured quad 16: 906 900 904 904
+Flat quad 64: 2548 2544 2539 2542
+Gouraud quad 64: 4737 4737 4731 4782
+Textured quad 64: 13543 14175 14168 14160
+Gouraud-textured quad 64: 14328 14337 14280 14342
+Flat quad 128: 9002 8997 9006 9001
+Gouraud quad 128: 17361 17367 17364 17360
+Textured quad 128: 55248 55064 55076 55065
+Gouraud-textured quad 128: 55232 55172 55232 55244
+Flat quad 240: 30134 30194 30248 30121
+Gouraud quad 240: 59172 59132 59171 59125
+Textured quad 240: 191326 191464 191287 191282
+Gouraud-textured quad 240: 191628 191454 191498 191635
+Flat quad 128 turned 45 degrees: 8769 8767 8764 8758
+Done.
+```
+
+[gputiming2/10HRA.txt](/tests/raw/20260928T0000Z-5501a-card-h/gputiming2/10HRA.txt)
+
+```
+===== 10 HRA GPU RECTS BY SIDE | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+BadVaddr as the group starts: 1F801DAA
+Rectangles by side 8 to 240: flat (60h), textured at 4, 8, 15 bits (64h) with the
+texture cold and warm; a 320x240 flat rect; a 256x240 15-bit sprite (a background).
+Flat rect 8: 181 176 179 176
+Textured rect 8 depth 0, cold: 285 284 288 287
+Textured rect 8 depth 0, warm: 190 188 188 191
+Textured rect 8 depth 1, cold: 476 288 284 288
+Textured rect 8 depth 1, warm: 190 193 194 193
+Textured rect 8 depth 2, cold: 348 343 348 348
+Textured rect 8 depth 2, warm: 193 188 194 188
+Flat rect 16: 296 294 299 299
+Textured rect 16 depth 0, cold: 411 411 407 408
+Textured rect 16 depth 0, warm: 305 305 302 307
+Textured rect 16 depth 1, cold: 598 593 593 598
+Textured rect 16 depth 1, warm: 306 305 310 312
+Textured rect 16 depth 2, cold: 894 894 893 893
+Textured rect 16 depth 2, warm: 306 305 310 312
+Flat rect 32: 725 717 721 724
+Textured rect 32 depth 0, cold: 1321 1310 1311 1311
+Textured rect 32 depth 0, warm: 733 727 726 727
+Textured rect 32 depth 1, cold: 1990 1986 1986 1989
+Textured rect 32 depth 1, warm: 729 733 731 728
+Textured rect 32 depth 2, cold: 3138 3143 3138 3136
+Textured rect 32 depth 2, warm: 728 733 736 733
+Flat rect 64: 2356 2352 2303 2353
+Textured rect 64 depth 0, cold: 4843 4843 4836 4833
+Textured rect 64 depth 0, warm: 2369 2370 2365 2312
+Textured rect 64 depth 1, cold: 7441 7441 7441 7392
+Textured rect 64 depth 1, warm: 7456 7465 7403 7460
+Textured rect 64 depth 2, cold: 11927 11927 11927 11926
+Textured rect 64 depth 2, warm: 11944 11944 11939 11946
+Flat rect 128: 8606 8593 8604 8595
+Textured rect 128 depth 0, cold: 18787 18899 18839 18778
+Textured rect 128 depth 0, warm: 18860 18859 18858 18857
+Textured rect 128 depth 1, cold: 29146 29141 29151 29143
+Textured rect 128 depth 1, warm: 29165 29164 29165 29176
+Textured rect 128 depth 2, cold: 47036 47033 47206 46974
+Textured rect 128 depth 2, warm: 47054 46992 47052 46993
+Flat rect 240: 29519 29520 29521 29522
+Textured rect 240 depth 0, cold: 65228 65403 65224 65228
+Textured rect 240 depth 0, warm: 65241 65299 65237 65302
+Textured rect 240 depth 1, cold: 102291 102050 102114 102113
+Textured rect 240 depth 1, warm: 102122 102250 102130 102071
+Textured rect 240 depth 2, cold: 164159 164145 164154 164154
+Textured rect 240 depth 2, warm: 164172 164410 164175 164176
+Flat rect 320x240: 39158 39164 39288 39156
+15-bit sprite 256x240: 175213 175206 175394 175275
+Done.
+```
+
+[gputiming2/11HOT.txt](/tests/raw/20260928T0000Z-5501a-card-h/gputiming2/11HOT.txt)
+
+```
+===== 11 HOT GPU ORDERING TABLES | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+BadVaddr as the group starts: 1F801DAA
+Linked lists by DMA2 (direction 2), one primitive a node, spread over a 16-wide grid:
+16x16 4-bit sprites (7Ch), 32-pixel gouraud triangles, 32x32 8-bit textured quads, for
+1 to 256 nodes; 64 sprites with the CLUT the same or alternating; 64 sprites with an
+E1h node before each, the page the same or alternating.
+1 sprites 16x16 4-bit: channel done 61 83 75 76, idle 420 268 260 266
+8 sprites 16x16 4-bit: channel done 1153 1134 1124 1123, idle 1489 1453 1436 1497
+32 sprites 16x16 4-bit: channel done 5330 5313 5325 5306, idle 5666 5628 5642 5676
+128 sprites 16x16 4-bit: channel done 22059 22016 22049 22049, idle 22389 22391 22364 22365
+256 sprites 16x16 4-bit: channel done 44321 44311 44375 44307, idle 44711 44684 44686 44635
+1 gouraud triangles 32: channel done 50 86 78 78, idle 831 820 819 819
+8 gouraud triangles 32: channel done 3863 3863 3863 3879, idle 5065 5040 5041 5065
+32 gouraud triangles 32: channel done 18301 18327 18290 18306, idle 19497 19509 19518 19481
+128 gouraud triangles 32: channel done 76126 76120 76096 76117, idle 77325 77295 77278 77288
+256 gouraud triangles 32: channel done 153124 153171 153129 153117, idle 154318 154340 154306 154297
+1 textured quads 32 8-bit: channel done 53 89 87 81, idle 2757 1379 1386 1384
+8 textured quads 32 8-bit: channel done 8044 8043 8045 8049, idle 9862 9838 9847 9853
+32 textured quads 32 8-bit: channel done 37036 37016 37008 37011, idle 38842 38808 38806 38812
+128 textured quads 32 8-bit: channel done 152872 152896 152866 152865, idle 154694 154696 154689 154659
+256 textured quads 32 8-bit: channel done 306875 306918 306868 306940, idle 308635 308656 308604 308683
+64 sprites, CLUT the same: channel done 11018 10858 10894 10875, idle 11408 11232 11204 11251
+64 sprites, CLUT alternating: channel done 12621 12650 12603 12598, idle 12954 12965 12975 12977
+64 E1h and sprite nodes, page the same: channel done 11141 11134 11153 11134, idle 11483 11454 11469 11455
+64 E1h and sprite nodes, page alternating: channel done 19127 19228 19411 19204, idle 19707 19855 20028 19840
+Done.
+```
+
+[gputiming2/12HFR.txt](/tests/raw/20260928T0000Z-5501a-card-h/gputiming2/12HFR.txt)
+
+```
+===== 12 HFR GPU FRAME LIST | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+BadVaddr as the group starts: 1F801DAA
+A frame-like list by DMA2: fill 320x240, then N gouraud-textured 8-bit triangles of
+about 24-40 by 20-36 pixels, an E1h node, then M 16x16 4-bit sprites; display collapsed,
+live at 320x240, and live at 640x480 interlaced.
+Collapsed, fill only: channel done 162 85 85 85, idle 6193 6159 6155 6155
+Collapsed, 100 triangles 30 sprites: channel done 66086 65848 65786 65808, idle 66426 66163 66096 66122
+Collapsed, 200 triangles 60 sprites: channel done 125154 125192 125146 125217, idle 125494 125505 125520 125533
+Live 320x240, fill only: channel done 132 85 85 91, idle 6158 6159 6143 6155
+Live 320x240, 100 triangles 30 sprites: channel done 65777 65821 65812 65771, idle 66112 66135 66127 66141
+Live 320x240, 200 triangles 60 sprites: channel done 127703 127640 126749 127712, idle 128033 127955 127065 128100
+Live 640x480i, 200 triangles 60 sprites: channel done 128202 127494 128175 128202, idle 128543 127869 128502 128572
+Done.
+```
+
+[gputiming2/13HDM.txt](/tests/raw/20260928T0000Z-5501a-card-h/gputiming2/13HDM.txt)
+
+```
+===== 13 HDM GPU DISPLAY SHARE | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+BadVaddr as the group starts: 1F801DAA
+Four draws under each display mode, fullscreen NTSC ranges: collapsed, 240 lines at
+each width, 640x480 interlaced, 320 and 640x480i in 24-bit, and 320x240 with the
+display off (GP1 03h 1).
+Collapsed, fill 256x248: 5381 5394 5454 5448
+Collapsed, 15-bit sprite 256x128: 93489 93489 93498 93561
+Collapsed, gouraud tri 200: 20827 20830 20840 20834
+Collapsed, copy 128x128: 20977 20916 20979 20980
+256x240, fill 256x248: 5445 5391 5380 5384
+256x240, 15-bit sprite 256x128: 93489 93489 93498 96110
+256x240, gouraud tri 200: 21013 21018 21016 21013
+256x240, copy 128x128: 21342 21283 21342 21412
+320x240, fill 256x248: 5818 5749 5814 5881
+320x240, 15-bit sprite 256x128: 99745 98035 98538 99682
+320x240, gouraud tri 200: 21004 21011 21002 21013
+320x240, copy 128x128: 21402 21287 21347 21402
+368x240, fill 256x248: 5871 5804 5870 5874
+368x240, 15-bit sprite 256x128: 96355 99683 99691 99685
+368x240, gouraud tri 200: 21073 21011 21062 21011
+368x240, copy 128x128: 21888 21832 21890 21102
+512x240, fill 256x248: 5394 5564 5993 5933
+512x240, 15-bit sprite 256x128: 101319 101444 101328 101322
+512x240, gouraud tri 200: 21014 21071 20835 20835
+512x240, copy 128x128: 22188 22196 22136 22138
+640x240, fill 256x248: 6052 6054 6054 6054
+640x240, 15-bit sprite 256x128: 103088 103013 103085 97931
+640x240, gouraud tri 200: 21073 21138 21018 21071
+640x240, copy 128x128: 21352 21416 21278 21344
+640x480i, fill 256x248: 5993 6112 6001 6061
+640x480i, 15-bit sprite 256x128: 103075 101504 100276 103072
+640x480i, gouraud tri 200: 21069 21071 21006 21125
+640x480i, copy 128x128: 21409 21296 21462 21286
+320x240 24-bit, fill 256x248: 5932 5993 5993 5993
+320x240 24-bit, 15-bit sprite 256x128: 97255 101321 101322 101389
+320x240 24-bit, gouraud tri 200: 21069 21011 21078 21011
+320x240 24-bit, copy 128x128: 21897 21944 21586 20982
+640x480i 24-bit, fill 256x248: 6467 6419 6474 6479
+640x480i 24-bit, 15-bit sprite 256x128: 108658 108667 108661 108668
+640x480i 24-bit, gouraud tri 200: 20831 20890 21131 21071
+640x480i 24-bit, copy 128x128: 22984 22976 23039 23047
+320x240 display off, fill 256x248: 5818 5875 5869 5752
+320x240 display off, 15-bit sprite 256x128: 99690 99683 97137 99447
+320x240 display off, gouraud tri 200: 21013 21005 21066 21018
+320x240 display off, copy 128x128: 21409 21462 21476 21469
+Done.
+```
+
+[gputiming2/14HPL.txt](/tests/raw/20260928T0000Z-5501a-card-h/gputiming2/14HPL.txt)
+
+```
+===== 14 HPL GPU DRAWSYNC POLL | BIOS 19951204 System ROM Version 3.0 11/18/96 A
+BadVaddr as the group starts: 1F801DAA
+What a DrawSync-style poll sees: during a DMA2 list, how many times GPUSTAT.26 rose
+before the channel ended and after, when bits 26 and 28 were set for good (64 reads
+in a row), and the last change (gpu.txt:1023-1026).
+8 gouraud triangles 64: [26 rose 0 then 1, first at 17995, channel done 13601, idle for good 17995, last change 17995] [26 rose 0 then 1, first at 18009, channel done 13549, idle for good 18009, last change 18009] [26 rose 0 then 1, first at 18006, channel done 13549, idle for good 18006, last change 18006] [26 rose 0 then 1, first at 17995, channel done 13607, idle for good 17995, last change 17995]
+32 sprites 16x16: [26 rose 0 then 1, first at 5813, channel done 5470, idle for good 5813, last change 5813] [26 rose 0 then 1, first at 5635, channel done 5358, idle for good 5635, last change 5635] [26 rose 0 then 1, first at 5641, channel done 5358, idle for good 5641, last change 5641] [26 rose 0 then 1, first at 5667, channel done 5320, idle for good 5667, last change 5667]
+fill 256x248 then a flat tri 16: [26 rose 0 then 1, first at 5492, channel done 174, idle for good 5492, last change 5492] [26 rose 0 then 1, first at 5493, channel done 175, idle for good 5493, last change 5493] [26 rose 0 then 1, first at 5491, channel done 174, idle for good 5491, last change 5491] [26 rose 0 then 1, first at 5491, channel done 174, idle for good 5491, last change 5491]
+tri, copy 128x128, tri: [26 rose 0 then 1, first at 21168, channel done 251, idle for good 21168, last change 21168] [26 rose 0 then 1, first at 21175, channel done 256, idle for good 21175, last change 21175] [26 rose 0 then 1, first at 21164, channel done 251, idle for good 21164, last change 21164] [26 rose 0 then 1, first at 21164, channel done 251, idle for good 21164, last change 21164]
+Done.
+```
+
+## References
+
+[^src]: Console test suite (PsyQ build), programs/gpu/gputiming2.c and gputiming2.md.
+[^hfl]: Hardware test run 20260928T0000Z-5501a-card-h: [gputiming2/01HFL.txt](/tests/raw/20260928T0000Z-5501a-card-h/gputiming2/01HFL.txt).
+[^hdm]: Hardware test run 20260928T0000Z-5501a-card-h: [gputiming2/13HDM.txt](/tests/raw/20260928T0000Z-5501a-card-h/gputiming2/13HDM.txt).