GTE Register Writes and Expansion Reads
Measures which value a GTE command uses when its input is written a few instructions after it, by instruction cache state, the end of a DMA2 list of empty nodes by poll rate, and timed expansion port reads by cache line.
| Machine | SCPH-5501 |
|---|---|
| Program | followup31 |
This is an old revision of this page, as edited by RemmyLee at 05:49, 23 October 2026. Edit this revision | Latest revision
Overview
The program runs three groups.1 GCL and ICR run their code from RAM and reload one chosen line of the instruction cache before the timed part. One instruction fetch from RAM therefore falls at a known place.23
| Tag | Group |
|---|---|
| GCL | A GTE command with one of its inputs written 0 to 10 instructions after it, at word 0 to 3 of a cache line, cold, warm and with one line reloaded: the command's, the next, the write's or the one before; 8 times each |
| LPW | DMA2 lists of 256 and 1024 empty nodes polled with 0 to 64 cached NOPs between the polls, then one read of CHCR after a cached wait of w turns |
| ICR | 100 turns of a timed EXP3 lbu at read delay 4, 9 and 14, an EXP2 lbu at read delay 4 and an EXP2 lw at read delay 9, warm and with the head, loop or tail line reloaded |
See also:
Results
GTE Input Written After the Command
The commands were NCS, CDP, GPL, NCLIP, RTPS and RTPT. Each row writes one of the command's input registers a few instructions after the command word. Each row prints the value of one result register for each cache state. In 52 of the 60 rows the cold run and the warm run gave different results. With the command's own line reloaded, and with the line before it reloaded, every row gave the warm result.2
With the command at word 2 of its line, reloading only the next line gave the cold result in every row except RTPT with DQB written 10 instructions after it. Each case ran 8 times, and all 8 gave the same result in every row except two RTPT rows with DQB, where the write's line reloaded gave 00000030h seven times and 00000010h once.2
DMA2 List End
Timer 2 counted from the CHCR write to the poll that found the list done. The polls found a list of 256 empty nodes done at 2,672 to 2,692 counts with 0 to 4 NOPs between polls. With 16 NOPs they found it done at 2,711 to 2,717 counts and with 64 NOPs at 2,843 to 2,852 counts. A list of 1024 nodes was done at 10,533 to 10,578 counts at every poll rate.4
With a single read of CHCR after a cached wait, the 256-node list was already done at the first read, which came 2,662 counts after the CHCR write. The 1024-node list read busy at 10,533 counts and done at 10,530 counts on the next try, so it ended at about 10,530 counts.4
Expansion Port Reads
Warm, a hundred turns of an EXP3 lbu took 1,203 counts at read delay 4, 1,703 at read delay 9 and 2,203 at read delay 14. Each step of 5 in the read delay therefore added 500 counts over the 100 turns, which is 5 counts a read. An EXP2 lbu at read delay 4 took 1,203 counts and an EXP2 lw at read delay 9 took 6,803 counts.3
Reloading the loop's line made each row slightly faster: 1,194, 1,689, 2,184, 1,194 and 6,738 counts. Reloading the head or the tail line, emptying the cache and calling VSync(0) first changed the times by no more than 52 counts.3
Runs
5 October 2026
===== 00 RUN | BIOS 19951204 System ROM Version 3.0 11/18/96 A
3 tests
A chain program, linked at 80100000
Saved on the card in slot 2, from image 1
COP0 at start: BPC 00000000 BDA 00000000 TAR BFC02BAC DCIC 00000000 BadVaddr 00000480 BDAM 00000000
BPCM 00000000 SR 00000000 Cause 00000020 EPC 8001E6BC PRId 00000002
===== 01 GCL F31 GTE ROWS BY CACHE LINE | BIOS 19951204 System ROM Version 3.0 11/18/96 A
BadVaddr as the group starts: 00000480
GTE rows by cache state (old 00010002, new 00030004); gte_ctrl 80103B6C, gte_pre 80103E30, evict 80103F4C, run_state 80103F84, one_row 801041F0, evictor 8010F260
NCS, RBK (MAC1) 0 after, lead 0 at 80110780, command word 2, write word 3 (same line): cold 00010002 x8; warm 00030004 x8; cmd 00030004 x8; next 00010002 x8; write 00030004 x8; prev 00030004 x8;
NCS, RBK (MAC1) 0 after, lead 1 at 80110780, command word 3, write word 0: cold 00030004 x8; warm 00030004 x8; cmd 00030004 x8; next 00030004 x8; write 00030004 x8; prev 00030004 x8;
NCS, RBK (MAC1) 0 after, lead 2 at 80110780, command word 0, write word 1 (same line): cold 00030004 x8; warm 00030004 x8; cmd 00030004 x8; next 00030004 x8; write 00030004 x8; prev 00030004 x8;
NCS, RBK (MAC1) 0 after, lead 3 at 80110780, command word 1, write word 2 (same line): cold 00010002 x8; warm 00030004 x8; cmd 00030004 x8; next 00010002 x8; write 00030004 x8; prev 00030004 x8;
NCS, RBK (MAC1) 1 after, lead 0 at 80110780, command word 2, write word 0: cold 00010002 x8; warm 00030004 x8; cmd 00030004 x8; next 00010002 x8; write 00010002 x8; prev 00030004 x8;
NCS, RBK (MAC1) 1 after, lead 1 at 80110780, command word 3, write word 1: cold 00030004 x8; warm 00030004 x8; cmd 00030004 x8; next 00030004 x8; write 00030004 x8; prev 00030004 x8;
NCS, RBK (MAC1) 1 after, lead 2 at 80110780, command word 0, write word 2 (same line): cold 00010002 x8; warm 00030004 x8; cmd 00030004 x8; next 00010002 x8; write 00030004 x8; prev 00030004 x8;
NCS, RBK (MAC1) 1 after, lead 3 at 80110780, command word 1, write word 3 (same line): cold 00010002 x8; warm 00030004 x8; cmd 00030004 x8; next 00010002 x8; write 00030004 x8; prev 00030004 x8;
NCS, RBK (MAC1) 2 after, lead 0 at 80110780, command word 2, write word 1: cold 00010002 x8; warm 00030004 x8; cmd 00030004 x8; next 00010002 x8; write 00010002 x8; prev 00030004 x8;
NCS, RBK (MAC1) 2 after, lead 1 at 80110780, command word 3, write word 2: cold 00010002 x8; warm 00030004 x8; cmd 00030004 x8; next 00030004 x8; write 00030004 x8; prev 00030004 x8;
NCS, RBK (MAC1) 2 after, lead 2 at 80110780, command word 0, write word 3 (same line): cold 00010002 x8; warm 00030004 x8; cmd 00030004 x8; next 00010002 x8; write 00030004 x8; prev 00030004 x8;
NCS, RBK (MAC1) 2 after, lead 3 at 80110780, command word 1, write word 0: cold 00010002 x8; warm 00030004 x8; cmd 00030004 x8; next 00010002 x8; write 00010002 x8; prev 00030004 x8;
NCS, BBK (MAC3) 4 after, lead 0 at 80110780, command word 2, write word 3: cold 00010002 x8; warm 00030004 x8; cmd 00030004 x8; next 00010002 x8; write 00010002 x8; prev 00030004 x8;
NCS, BBK (MAC3) 4 after, lead 1 at 80110780, command word 3, write word 0: cold 00010002 x8; warm 00030004 x8; cmd 00030004 x8; next 00030004 x8; write 00010002 x8; prev 00030004 x8;
NCS, BBK (MAC3) 4 after, lead 2 at 80110780, command word 0, write word 1: cold 00010002 x8; warm 00030004 x8; cmd 00030004 x8; next 00010002 x8; write 00010002 x8; prev 00030004 x8;
NCS, BBK (MAC3) 4 after, lead 3 at 80110780, command word 1, write word 2: cold 00010002 x8; warm 00030004 x8; cmd 00030004 x8; next 00010002 x8; write 00010002 x8; prev 00030004 x8;
NCS, VZ0 (MAC3) 1 after, lead 0 at 80110780, command word 2, write word 0: cold 00000002 x8; warm 00000004 x8; cmd 00000004 x8; next 00000002 x8; write 00000002 x8; prev 00000004 x8;
NCS, VZ0 (MAC3) 1 after, lead 1 at 80110780, command word 3, write word 1: cold 00000004 x8; warm 00000004 x8; cmd 00000004 x8; next 00000004 x8; write 00000004 x8; prev 00000004 x8;
NCS, VZ0 (MAC3) 1 after, lead 2 at 80110780, command word 0, write word 2 (same line): cold 00000002 x8; warm 00000004 x8; cmd 00000004 x8; next 00000002 x8; write 00000004 x8; prev 00000004 x8;
NCS, VZ0 (MAC3) 1 after, lead 3 at 80110780, command word 1, write word 3 (same line): cold 00000002 x8; warm 00000004 x8; cmd 00000004 x8; next 00000002 x8; write 00000004 x8; prev 00000004 x8;
CDP, RGBC (MAC1) 1 after, lead 0 at 80110780, command word 2, write word 0: cold 00000040 x8; warm 00000080 x8; cmd 00000080 x8; next 00000040 x8; write 00000040 x8; prev 00000080 x8;
CDP, RGBC (MAC1) 1 after, lead 1 at 80110780, command word 3, write word 1: cold 00000080 x8; warm 00000080 x8; cmd 00000080 x8; next 00000080 x8; write 00000080 x8; prev 00000080 x8;
CDP, RGBC (MAC1) 1 after, lead 2 at 80110780, command word 0, write word 2 (same line): cold 00000040 x8; warm 00000080 x8; cmd 00000080 x8; next 00000040 x8; write 00000080 x8; prev 00000080 x8;
CDP, RGBC (MAC1) 1 after, lead 3 at 80110780, command word 1, write word 3 (same line): cold 00000040 x8; warm 00000080 x8; cmd 00000080 x8; next 00000040 x8; write 00000080 x8; prev 00000080 x8;
CDP, RGBC (MAC1) 2 after, lead 0 at 80110780, command word 2, write word 1: cold 00000040 x8; warm 00000080 x8; cmd 00000080 x8; next 00000040 x8; write 00000040 x8; prev 00000080 x8;
CDP, RGBC (MAC1) 2 after, lead 1 at 80110780, command word 3, write word 2: cold 00000040 x8; warm 00000080 x8; cmd 00000080 x8; next 00000080 x8; write 00000080 x8; prev 00000080 x8;
CDP, RGBC (MAC1) 2 after, lead 2 at 80110780, command word 0, write word 3 (same line): cold 00000040 x8; warm 00000080 x8; cmd 00000080 x8; next 00000040 x8; write 00000080 x8; prev 00000080 x8;
CDP, RGBC (MAC1) 2 after, lead 3 at 80110780, command word 1, write word 0: cold 00000040 x8; warm 00000080 x8; cmd 00000080 x8; next 00000040 x8; write 00000040 x8; prev 00000080 x8;
GPL, MAC3 0 after, lead 0 at 80110780, command word 2, write word 3 (same line): cold 00030004 x8; warm 00010002 x8; cmd 00010002 x8; next 00030004 x8; write 00010002 x8; prev 00010002 x8;
GPL, MAC3 0 after, lead 1 at 80110780, command word 3, write word 0: cold 00010002 x8; warm 00010002 x8; cmd 00010002 x8; next 00010002 x8; write 00010002 x8; prev 00010002 x8;
GPL, MAC3 0 after, lead 2 at 80110780, command word 0, write word 1 (same line): cold 00030004 x8; warm 00010002 x8; cmd 00010002 x8; next 00030004 x8; write 00010002 x8; prev 00010002 x8;
GPL, MAC3 0 after, lead 3 at 80110780, command word 1, write word 2 (same line): cold 00030004 x8; warm 00010002 x8; cmd 00010002 x8; next 00030004 x8; write 00010002 x8; prev 00010002 x8;
GPL, MAC3 1 after, lead 0 at 80110780, command word 2, write word 0: cold 00030004 x8; warm 00010000 x8; cmd 00010000 x8; next 00030004 x8; write 00030004 x8; prev 00010000 x8;
GPL, MAC3 1 after, lead 1 at 80110780, command word 3, write word 1: cold 00030004 x8; warm 00010000 x8; cmd 00010000 x8; next 00010000 x8; write 00010000 x8; prev 00010000 x8;
GPL, MAC3 1 after, lead 2 at 80110780, command word 0, write word 2 (same line): cold 00030004 x8; warm 00010000 x8; cmd 00010000 x8; next 00030004 x8; write 00010000 x8; prev 00010000 x8;
GPL, MAC3 1 after, lead 3 at 80110780, command word 1, write word 3 (same line): cold 00030004 x8; warm 00010000 x8; cmd 00010000 x8; next 00030004 x8; write 00010000 x8; prev 00010000 x8;
NCLIP, SXY2 (MAC0) 0 after, lead 0 at 80110780, command word 2, write word 3 (same line): cold FFFFFFE0 x8; warm FFFFFFC0 x8; cmd FFFFFFC0 x8; next FFFFFFE0 x8; write FFFFFFC0 x8; prev FFFFFFC0 x8;
NCLIP, SXY2 (MAC0) 0 after, lead 1 at 80110780, command word 3, write word 0: cold FFFFFFC0 x8; warm FFFFFFC0 x8; cmd FFFFFFC0 x8; next FFFFFFC0 x8; write FFFFFFC0 x8; prev FFFFFFC0 x8;
NCLIP, SXY2 (MAC0) 0 after, lead 2 at 80110780, command word 0, write word 1 (same line): cold FFFFFFC0 x8; warm FFFFFFC0 x8; cmd FFFFFFC0 x8; next FFFFFFC0 x8; write FFFFFFC0 x8; prev FFFFFFC0 x8;
NCLIP, SXY2 (MAC0) 0 after, lead 3 at 80110780, command word 1, write word 2 (same line): cold FFFFFFE0 x8; warm FFFFFFC0 x8; cmd FFFFFFC0 x8; next FFFFFFE0 x8; write FFFFFFC0 x8; prev FFFFFFC0 x8;
RTPS, OFX (SXY2) 2 after, lead 0 at 80110780, command word 2, write word 1: cold 00000001 x8; warm 00000003 x8; cmd 00000003 x8; next 00000001 x8; write 00000001 x8; prev 00000003 x8;
RTPS, OFX (SXY2) 2 after, lead 1 at 80110780, command word 3, write word 2: cold 00000001 x8; warm 00000003 x8; cmd 00000003 x8; next 00000003 x8; write 00000003 x8; prev 00000003 x8;
RTPS, OFX (SXY2) 2 after, lead 2 at 80110780, command word 0, write word 3 (same line): cold 00000001 x8; warm 00000003 x8; cmd 00000003 x8; next 00000001 x8; write 00000003 x8; prev 00000003 x8;
RTPS, OFX (SXY2) 2 after, lead 3 at 80110780, command word 1, write word 0: cold 00000001 x8; warm 00000003 x8; cmd 00000003 x8; next 00000001 x8; write 00000001 x8; prev 00000003 x8;
RTPT, OFX (SXY0) 10 after, lead 0 at 80110780, command word 2, write word 1: cold 00000001 x8; warm 00000003 x8; cmd 00000003 x8; next 00000001 x8; write 00000001 x8; prev 00000003 x8;
RTPT, OFX (SXY0) 10 after, lead 1 at 80110780, command word 3, write word 2: cold 00000001 x8; warm 00000003 x8; cmd 00000003 x8; next 00000003 x8; write 00000001 x8; prev 00000003 x8;
RTPT, OFX (SXY0) 10 after, lead 2 at 80110780, command word 0, write word 3: cold 00000001 x8; warm 00000003 x8; cmd 00000003 x8; next 00000001 x8; write 00000001 x8; prev 00000003 x8;
RTPT, OFX (SXY0) 10 after, lead 3 at 80110780, command word 1, write word 0: cold 00000001 x8; warm 00000003 x8; cmd 00000003 x8; next 00000001 x8; write 00000001 x8; prev 00000003 x8;
RTPT, OFX (SXY1) 8 after, lead 0 at 80110780, command word 2, write word 3: cold 00000001 x8; warm 00000003 x8; cmd 00000003 x8; next 00000001 x8; write 00000001 x8; prev 00000003 x8;
RTPT, OFX (SXY1) 8 after, lead 1 at 80110780, command word 3, write word 0: cold 00000001 x8; warm 00000003 x8; cmd 00000003 x8; next 00000003 x8; write 00000001 x8; prev 00000003 x8;
RTPT, OFX (SXY1) 8 after, lead 2 at 80110780, command word 0, write word 1: cold 00000001 x8; warm 00000003 x8; cmd 00000003 x8; next 00000001 x8; write 00000001 x8; prev 00000003 x8;
RTPT, OFX (SXY1) 8 after, lead 3 at 80110780, command word 1, write word 2: cold 00000001 x8; warm 00000003 x8; cmd 00000003 x8; next 00000001 x8; write 00000001 x8; prev 00000003 x8;
RTPT, OFX (SXY2) 10 after, lead 0 at 80110780, command word 2, write word 1: cold 00000001 x8; warm 00000003 x8; cmd 00000003 x8; next 00000001 x8; write 00000001 x8; prev 00000003 x8;
RTPT, OFX (SXY2) 10 after, lead 1 at 80110780, command word 3, write word 2: cold 00000001 x8; warm 00000003 x8; cmd 00000003 x8; next 00000003 x8; write 00000001 x8; prev 00000003 x8;
RTPT, OFX (SXY2) 10 after, lead 2 at 80110780, command word 0, write word 3: cold 00000001 x8; warm 00000003 x8; cmd 00000003 x8; next 00000001 x8; write 00000001 x8; prev 00000003 x8;
RTPT, OFX (SXY2) 10 after, lead 3 at 80110780, command word 1, write word 0: cold 00000001 x8; warm 00000003 x8; cmd 00000003 x8; next 00000001 x8; write 00000001 x8; prev 00000003 x8;
RTPT, DQB (IR0) 10 after, lead 0 at 80110780, command word 2, write word 1: cold 00000010 x8; warm 00000030 x8; cmd 00000030 x8; next 00000030 x8; write 00000030 x8; prev 00000030 x8;
RTPT, DQB (IR0) 10 after, lead 1 at 80110780, command word 3, write word 2: cold 00000010 x8; warm 00000030 x8; cmd 00000030 x8; next 00000030 x8; write 00000030 x7 00000010 x1; prev 00000030 x8;
RTPT, DQB (IR0) 10 after, lead 2 at 80110780, command word 0, write word 3: cold 00000010 x8; warm 00000030 x8; cmd 00000030 x8; next 00000030 x8; write 00000030 x7 00000010 x1; prev 00000030 x8;
RTPT, DQB (IR0) 10 after, lead 3 at 80110780, command word 1, write word 0: cold 00000010 x8; warm 00000030 x8; cmd 00000030 x8; next 00000030 x8; write 00000030 x8; prev 00000030 x8;
Done.
===== 02 LPW F31 DMA2 LIST BY POLL RATE | BIOS 19951204 System ROM Version 3.0 11/18/96 A
BadVaddr as the group starts: 00000480
DMA2 lists of empty nodes, CHCR 01000401, GP1(04h)=2, BCR 00050010, timer 2 from the CHCR write.
List 256 nodes, 0 NOPs between polls: 2692 (130 polls) 2672 (130 polls) 2682 (131 polls)
List 256 nodes, 4 NOPs between polls: 2689 (66 polls) 2685 (66 polls) 2679 (66 polls)
List 256 nodes, 16 NOPs between polls: 2713 (32 polls) 2717 (32 polls) 2711 (32 polls)
List 256 nodes, 64 NOPs between polls: 2852 (10 polls) 2843 (10 polls) 2846 (10 polls)
List 1024 nodes, 0 NOPs between polls: 10533 (529 polls) 10533 (529 polls) 10533 (529 polls)
List 1024 nodes, 4 NOPs between polls: 10550 (266 polls) 10561 (266 polls) 10561 (266 polls)
List 1024 nodes, 16 NOPs between polls: 10576 (128 polls) 10576 (128 polls) 10577 (128 polls)
List 1024 nodes, 64 NOPs between polls: 10572 (38 polls) 10578 (38 polls) 10555 (38 polls)
List 256 nodes, one read after w cached turns (w, timer 2 at the read, B busy or C clear):
860:2662C 864:2667C 868:2671C 872:2675C 876:2689C 880:2705C 884:2717C 888:2725C
892:2735C 896:2747C 900:2759C 904:2776C 908:2787C 912:2795C 916:2812C 920:2819C
924:2831C 928:2843C 932:2857C 936:2867C 940:2879C
List 1024 nodes, one read after w cached turns (w, timer 2 at the read, B busy or C clear):
3460:10462B 3464:10473B 3468:10487B 3472:10498B 3476:10511B 3480:10533B 3484:10530C 3488:10530C
3492:10536C 3496:10547C 3500:10559C 3504:10571C 3508:10583C 3512:10595C 3516:10607C 3520:10623C
3524:10631C 3528:10643C 3532:10659C 3536:10667C 3540:10679C 3544:10691C 3548:10703C 3552:10715C
3556:10727C 3560:10739C 3564:10751C 3568:10771C 3572:10775C 3576:10787C 3580:10803C
Done.
===== 03 ICR F31 SLOW READ BY CODE LINE | BIOS 19951204 System ROM Version 3.0 11/18/96 A
BadVaddr as the group starts: 00000480
Timed reads (100 turns, timer 2 from its zeroing to its read) with one line of the code reloaded; code 80110350, icr_state 80104B58, icr_row 80104D70, evict 80103F4C, evictor 8010F260; EXP3 00003022, EXP2 00070777
EXP3 lbu, read delay 4: warm 1203 x8; head 1203 x8; loop 1194 x8; tail 1206 x8; cold 1207 x8; vsync 1203 x8;
EXP3 lbu, read delay 9: warm 1703 x8; head 1703 x4 1707 x4; loop 1689 x8; tail 1692 x1 1706 x7; cold 1702 x8; vsync 1703 x8;
EXP3 lbu, read delay 14: warm 2203 x7 2205 x1; head 2203 x7 2204 x1; loop 2184 x8; tail 2206 x8; cold 2202 x1 2197 x6 2203 x1; vsync 2203 x6 2184 x2;
EXP2 lbu, read delay 4: warm 1203 x8; head 1203 x8; loop 1194 x8; tail 1206 x8; cold 1207 x8; vsync 1203 x8;
EXP2 lw, read delay 9: warm 6803 x8; head 6803 x8; loop 6738 x8; tail 6806 x8; cold 6751 x7 6756 x1; vsync 6803 x7 6805 x1;
Done.
References
-
^ SCPH-5501 output: followup31/00RUN.txt
-
^ a b c SCPH-5501 output: followup31/01GCL.txt
-
^ a b c SCPH-5501 output: followup31/03ICR.txt
-
^ a b SCPH-5501 output: followup31/02LPW.txt