CPU Access Types During a DMA2 List
Measures each kind of CPU access the BIOS shell makes while a DMA2 list of empty nodes runs.
| Machine | SCPH-5501 |
|---|---|
| Program | followup7 |
This is an old revision of this page, as edited by RemmyLee at 05:41, 23 October 2026. Edit this revision | Latest revision
Overview
In the logo race window the BIOS shell runs 2,971 instructions in about 12,000 cycles: byte, halfword and word loads, RAM stores of all three widths, branches, and stores to GP1, DMA6, DMA2, the SPU voice registers and I_STAT. Each group here changes one thing at a time so that each kind of access gets its own figure. A row is 100 turns from the cache, timed on root counter 2 read by loads only, alone and straight after a DMA2 list of 1024 empty nodes starts.1
| Tag | Turn of the loop |
|---|---|
| WID | One load of each width, and two back to back |
| USE | A load whose value an ADDU uses 1, 2 or 4 instructions later, or never |
| WLK | A load whose address moves 0, 4 or 24 bytes a turn |
| BRN | A load and a branch, taken and not taken, and a branch on the loaded value |
| STW | Stores of each width, one and two a turn, and a store then 0 to 16 NOPs then a load |
| SHP | The shell's three loop shapes, with narrow and with word accesses |
| ON7 | One word load padded to 6 to 12 instructions, with the NOPs after or before it |
| IOL | I/O loads and stores alone and beside a RAM load |
| UNC | The loop run from KSEG1 |
| OTC | DMA6 clearing a 1024-entry table alone, during a list and just before one |
See also:
Results
Loads
The width of a load made no difference. One LB, LBU, LH, LHU or LW a turn took 950 to 959 cycles alone and 1,331 to 1,342 during the list. Two back to back took about 1,465 alone and about 2,551 during the list.1
A load whose value was used 1 instruction later cost the same as an unused load: about 1,156 cycles alone and 1,331 during the list. Used 2 instructions later it took about 1,550 alone and about 2,333 during the list, and 4 instructions later about 1,460 alone and about 2,333 during the list. The three widths behaved alike.1
Moving the address 4 or 24 bytes a turn gave the same times as a fixed address. A branch after the load, taken or not, added nothing. A branch on a loaded byte took about 1,460 cycles alone and about 2,333 during the list.1
Stores
One store a turn of any width took 449 cycles alone and about 1,383 during the list. Two stores a turn took about 564 alone and about 2,712 during the list.1
A halfword store, 0 to 4 NOPs and a word load took about 1,470 cycles alone and 2,614 to 2,660 during the list. With 16 NOPs between them it took 2,587 alone and 2,657 during the list.1
Shell Loop Shapes
The copy loop (load, use, store) took about 1,550 cycles alone and 2,668 during the list. The L2 shape took about 2,370 alone and about 3,880 during the list. The L1 shape took about 4,905 alone and about 7,250 during the list. Word accesses in place of byte and halfword accesses gave the same times.1
I/O During the List
A load of I_STAT, timer 2, GPUSTAT or DMA6 CHCR took 846 cycles alone and 1,126 to 1,139 during the list. With a RAM load added, each took about 1,265 alone and about 2,340 during the list.1
Stores of FFFFFFFFh to I_STAT and of 04000002h to GP1 took 646 cycles alone and about 1,098 during the list. A store of 0 to SPU KOFF took 822 alone and about 1,100 during the list.1
Uncached Code
Run from KSEG1, 100 turns of 4 NOPs took about 4,448 cycles alone and about 8,940 during the list. With a load in each turn it took about 4,868 alone and about 10,165 during the list.1
DMA6 and DMA2
DMA6 cleared a 1024-entry table in 1,109 to 1,118 cycles alone and 1,141 to 1,181 cycles while a DMA2 list ran. Started just before a list, DMA6 and the list were both done at about 20,930 cycles.1
Runs
2 October 2026
===== 00 RUN | BIOS 19951204 System ROM Version 3.0 11/18/96 A
10 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 80016C84 PRId 00000002
===== 01 WID F7 LOAD WIDTHS | BIOS 19951204 System ROM Version 3.0 11/18/96 A
BadVaddr as the group starts: 00000480
100 turns of one RAM load of each width with p NOPs, then two back to back,
alone and straight after a DMA2 list of 1024 empty nodes starts.
lb, p 0: alone 959, during 1338, list done at 10740; alone 950, during 1331, list done at 10706;
lb, p 12: alone 1852, during 1906, list done at 10735; alone 1846, during 1909, list done at 10705;
lbu, p 0: alone 950, during 1342, list done at 10736; alone 955, during 1331, list done at 10703;
lbu, p 12: alone 1846, during 1923, list done at 10734; alone 1846, during 1918, list done at 10712;
lh, p 0: alone 954, during 1336, list done at 10734; alone 955, during 1338, list done at 10709;
lh, p 12: alone 1846, during 1923, list done at 10733; alone 1846, during 1915, list done at 10709;
lhu, p 0: alone 959, during 1338, list done at 10740; alone 950, during 1331, list done at 10706;
lhu, p 12: alone 1846, during 1912, list done at 10740; alone 1846, during 1911, list done at 10712;
lw, p 0: alone 955, during 1337, list done at 10735; alone 955, during 1338, list done at 10709;
lw, p 12: alone 1846, during 1923, list done at 10733; alone 1846, during 1915, list done at 10709;
two lb: alone 1464, during 2565, list done at 10934; alone 1464, during 2551, list done at 10892;
two lbu: alone 1464, during 2552, list done at 10926; alone 1469, during 2551, list done at 10901;
two lh: alone 1463, during 2551, list done at 10924; alone 1469, during 2551, list done at 10895;
two lhu: alone 1468, during 2551, list done at 10929; alone 1471, during 2551, list done at 10901;
two lw: alone 1463, during 2551, list done at 10924; alone 1469, during 2551, list done at 10895;
Done.
===== 02 USE F7 LOAD USE | BIOS 19951204 System ROM Version 3.0 11/18/96 A
BadVaddr as the group starts: 00000480
100 turns of a RAM load whose value an addu uses d instructions on (d 1, 2, 4; 0 never),
the turn padded to 6 instructions, alone and during a list of 1024 empty nodes.
lw, use 0: alone 1156, during 1331, list done at 10734; alone 1157, during 1337, list done at 10712;
lw, use 1: alone 1156, during 1332, list done at 10738; alone 1158, during 1331, list done at 10703;
lw, use 2: alone 1548, during 2336, list done at 10707; alone 1557, during 2338, list done at 10685;
lw, use 4: alone 1455, during 2330, list done at 10711; alone 1470, during 2338, list done at 10689;
lb, use 0: alone 1157, during 1331, list done at 10729; alone 1154, during 1331, list done at 10712;
lb, use 1: alone 1151, during 1346, list done at 10744; alone 1158, during 1331, list done at 10702;
lb, use 2: alone 1549, during 2330, list done at 10714; alone 1555, during 2335, list done at 10698;
lb, use 4: alone 1461, during 2333, list done at 10718; alone 1456, during 2329, list done at 10683;
lh, use 0: alone 1156, during 1331, list done at 10733; alone 1157, during 1348, list done at 10723;
lh, use 1: alone 1156, during 1332, list done at 10738; alone 1158, during 1331, list done at 10703;
lh, use 2: alone 1551, during 2330, list done at 10711; alone 1554, during 2338, list done at 10689;
lh, use 4: alone 1459, during 2323, list done at 10718; alone 1470, during 2337, list done at 10695;
two lw, each used 1 on: alone 1672, during 2551, list done at 10930; alone 1668, during 2551, list done at 10898;
two lb, each used 1 on: alone 1669, during 2556, list done at 10938; alone 1670, during 2557, list done at 10908;
two lh, each used 1 on: alone 1666, during 2557, list done at 10927; alone 1669, during 2551, list done at 10894;
Done.
===== 03 WLK F7 WALK | BIOS 19951204 System ROM Version 3.0 11/18/96 A
BadVaddr as the group starts: 00000480
100 turns of a RAM load whose address moves s bytes a turn (0 fixed, 4, 24 as the
shell's records), k NOPs after, alone and during a list of 1024 empty nodes.
lw, step 0, k 0: alone 959, during 1348, list done at 10750; alone 951, during 1333, list done at 10712;
lw, step 0, k 8: alone 1546, during 1646, list done at 10725; alone 1546, during 1649, list done at 10699;
lw, step 4, k 0: alone 959, during 1331, list done at 10732; alone 955, during 1331, list done at 10699;
lw, step 4, k 8: alone 1546, during 1641, list done at 10724; alone 1546, during 1654, list done at 10700;
lw, step 24, k 0: alone 959, during 1338, list done at 10732; alone 955, during 1331, list done at 10702;
lw, step 24, k 8: alone 1546, during 1656, list done at 10729; alone 1546, during 1647, list done at 10715;
lb, step 0, k 0: alone 959, during 1337, list done at 10735; alone 955, during 1334, list done at 10701;
lb, step 0, k 8: alone 1546, during 1641, list done at 10724; alone 1546, during 1654, list done at 10700;
lb, step 4, k 0: alone 953, during 1345, list done at 10739; alone 955, during 1331, list done at 10705;
lb, step 4, k 8: alone 1546, during 1643, list done at 10738; alone 1546, during 1647, list done at 10715;
lb, step 24, k 0: alone 955, during 1335, list done at 10733; alone 955, during 1337, list done at 10708;
lb, step 24, k 8: alone 1546, during 1655, list done at 10728; alone 1546, during 1649, list done at 10699;
lh, step 0, k 0: alone 959, during 1337, list done at 10739; alone 951, during 1331, list done at 10705;
lh, step 0, k 8: alone 1546, during 1650, list done at 10721; alone 1546, during 1645, list done at 10713;
lh, step 4, k 0: alone 959, during 1331, list done at 10732; alone 955, during 1331, list done at 10699;
lh, step 4, k 8: alone 1546, during 1641, list done at 10724; alone 1546, during 1654, list done at 10700;
lh, step 24, k 0: alone 959, during 1338, list done at 10732; alone 955, during 1331, list done at 10702;
lh, step 24, k 8: alone 1546, during 1656, list done at 10729; alone 1546, during 1647, list done at 10715;
Done.
===== 04 BRN F7 BRANCH | BIOS 19951204 System ROM Version 3.0 11/18/96 A
BadVaddr as the group starts: 00000480
100 turns of a RAM lw then a forward branch 0 or 2 on (taken or not, to its delay
slot's next word), and a branch on the loaded value (lb, nop, bne as the shell).
lw, 0 NOPs, branch not taken: alone 958, during 1332, list done at 10723; alone 962, during 1334, list done at 10705;
lw, 0 NOPs, branch taken: alone 958, during 1338, list done at 10732; alone 962, during 1334, list done at 10705;
lw, 2 NOPs, branch not taken: alone 1152, during 1337, list done at 10743; alone 1153, during 1336, list done at 10715;
lw, 2 NOPs, branch taken: alone 1156, during 1332, list done at 10738; alone 1158, during 1331, list done at 10703;
lb, nop, bne on it, not taken: alone 1461, during 2333, list done at 10725; alone 1465, during 2337, list done at 10689;
lb, nop, bne on it, taken: alone 1456, during 2330, list done at 10711; alone 1470, during 2338, list done at 10689;
Done.
===== 05 STW F7 STORES | BIOS 19951204 System ROM Version 3.0 11/18/96 A
BadVaddr as the group starts: 00000480
100 turns of RAM stores (sb, sh, sw) one a turn and two back to back; then a sh, n
cached NOPs and a RAM lw; alone and during a list of 1024 empty nodes.
sb, p 0: alone 449, during 1382, list done at 10836; alone 449, during 1383, list done at 10807;
sb, p 12: alone 1646, during 1675, list done at 10843; alone 1650, during 1669, list done at 10819;
sh, p 0: alone 449, during 1383, list done at 10832; alone 449, during 1383, list done at 10807;
sh, p 12: alone 1646, during 1675, list done at 10843; alone 1650, during 1669, list done at 10819;
sw, p 0: alone 449, during 1390, list done at 10840; alone 449, during 1383, list done at 10807;
sw, p 12: alone 1646, during 1678, list done at 10846; alone 1650, during 1669, list done at 10819;
two sb: alone 564, during 2712, list done at 11143; alone 564, during 2711, list done at 11113;
two sh: alone 559, during 2711, list done at 11133; alone 564, during 2716, list done at 11118;
two sw: alone 564, during 2717, list done at 11151; alone 555, during 2717, list done at 11117;
sh, 0 NOPs, lw: alone 1472, during 2618, list done at 11051; alone 1461, during 2614, list done at 11020;
sh, 2 NOPs, lw: alone 1461, during 2620, list done at 11042; alone 1469, during 2625, list done at 11025;
sh, 4 NOPs, lw: alone 1474, during 2658, list done at 11049; alone 1470, during 2660, list done at 11021;
sh, 8 NOPs, lw: alone 1762, during 2657, list done at 11051; alone 1749, during 2653, list done at 11024;
sh, 12 NOPs, lw: alone 2168, during 2655, list done at 11039; alone 2175, during 2660, list done at 11021;
sh, 16 NOPs, lw: alone 2587, during 2657, list done at 11048; alone 2585, during 2655, list done at 11018;
Done.
===== 06 SHP F7 SHELL SHAPES | BIOS 19951204 System ROM Version 3.0 11/18/96 A
BadVaddr as the group starts: 00000480
100 turns of the shell's loop shapes: the copy (load, use 6 on, store), L2 (lw, 6 ALU,
lhu, store of it 6 on) and L1 (four loads each used 2 on, a store), narrow and wide.
copy, lb/sb: alone 1550, during 2669, list done at 11047; alone 1550, during 2668, list done at 11025;
L2 shape, lw, lhu/sh: alone 2369, during 3869, list done at 11245; alone 2372, during 3880, list done at 11219;
L1 shape, lb, lhu, lh, lh/sh: alone 4905, during 7257, list done at 11630; alone 4902, during 7248, list done at 11606;
copy, lw/sw: alone 1554, during 2674, list done at 11043; alone 1559, during 2666, list done at 11014;
L2 shape, lw/sw: alone 2369, during 3899, list done at 11246; alone 2372, during 3879, list done at 11216;
L1 shape, lw/sw: alone 4910, during 7257, list done at 11620; alone 4906, during 7246, list done at 11603;
Done.
===== 07 ON7 F7 ONE FINE | BIOS 19951204 System ROM Version 3.0 11/18/96 A
BadVaddr as the group starts: 00000480
100 turns of one RAM lw padded with p NOPs after it, then with p NOPs before it,
alone and during a list of 1024 empty nodes (followup6 ONE p 7 to 12 finer).
after, p 6: alone 1247, during 1331, list done at 10728; alone 1246, during 1331, list done at 10698;
after, p 7: alone 1349, during 1416, list done at 10807; alone 1348, during 1414, list done at 10785;
after, p 8: alone 1446, during 1593, list done at 10755; alone 1447, during 1609, list done at 10732;
after, p 9: alone 1546, during 1652, list done at 10735; alone 1546, during 1652, list done at 10698;
after, p 10: alone 1646, during 1742, list done at 10750; alone 1646, during 1742, list done at 10723;
after, p 11: alone 1746, during 1817, list done at 10750; alone 1746, during 1817, list done at 10709;
after, p 12: alone 1846, during 1919, list done at 10743; alone 1846, during 1912, list done at 10720;
before, p 6: alone 1249, during 1332, list done at 10734; alone 1248, during 1333, list done at 10708;
before, p 7: alone 1348, during 1416, list done at 10814; alone 1346, during 1414, list done at 10783;
before, p 8: alone 1446, during 1597, list done at 10759; alone 1446, during 1592, list done at 10732;
before, p 9: alone 1546, during 1636, list done at 10722; alone 1546, during 1645, list done at 10713;
before, p 10: alone 1646, during 1745, list done at 10752; alone 1646, during 1739, list done at 10725;
before, p 11: alone 1746, during 1828, list done at 10738; alone 1746, during 1809, list done at 10715;
before, p 12: alone 1846, during 1912, list done at 10734; alone 1846, during 1909, list done at 10705;
Done.
===== 08 IOL F7 IO DURING | BIOS 19951204 System ROM Version 3.0 11/18/96 A
BadVaddr as the group starts: 00000480
100 turns of one IO access, then of it and a RAM lw, alone and during a list of 1024
empty nodes (interrupts off; I_STAT writes of ones clear nothing).
I_STAT lw: alone 846, during 1128, list done at 10524; alone 846, during 1138, list done at 10513;
I_STAT lw, RAM lw: alone 1263, during 2340, list done at 10711; alone 1266, during 2340, list done at 10691;
timer 2 lhu: alone 846, during 1135, list done at 10534; alone 846, during 1126, list done at 10500;
timer 2 lhu, RAM lw: alone 1268, during 2339, list done at 10712; alone 1255, during 2340, list done at 10685;
GPUSTAT lw: alone 846, during 1126, list done at 10524; alone 846, during 1127, list done at 10496;
GPUSTAT lw, RAM lw: alone 1268, during 2342, list done at 10712; alone 1266, during 2342, list done at 10685;
DMA6 CHCR lw: alone 846, during 1139, list done at 10538; alone 846, during 1126, list done at 10506;
DMA6 CHCR lw, RAM lw: alone 1268, during 2349, list done at 10725; alone 1266, during 2341, list done at 10691;
I_STAT sw FFFFFFFFh: alone 646, during 1096, list done at 10523; alone 646, during 1101, list done at 10509;
I_STAT sw FFFFFFFFh, RAM lw: alone 1068, during 2303, list done at 10717; alone 1060, during 2297, list done at 10682;
SPU KOFF sh 0: alone 822, during 1095, list done at 10534; alone 822, during 1107, list done at 10510;
SPU KOFF sh 0, RAM lw: alone 1068, during 2300, list done at 10714; alone 1060, during 2299, list done at 10690;
GP1 sw 04000002h: alone 646, during 1098, list done at 10527; alone 646, during 1098, list done at 10508;
GP1 sw 04000002h, RAM lw: alone 1068, during 2303, list done at 10717; alone 1060, during 2297, list done at 10682;
Done.
===== 09 UNC F7 UNCACHED | BIOS 19951204 System ROM Version 3.0 11/18/96 A
BadVaddr as the group starts: 00000480
100 turns run from KSEG1 (no cache): 4 NOPs, a RAM lw and 3 NOPs, a lw, a sh and 2 NOPs,
alone and during a list of 1024 empty nodes.
KSEG1, 4 NOPs: alone 4448, during 8939, list done at 11949; alone 4447, during 8940, list done at 11924;
KSEG1, lw, 3 NOPs: alone 4869, during 10162, list done at 12152; alone 4867, during 10168, list done at 12123;
KSEG1, lw, sh, 2 NOPs: alone 5477, during 11482, list done at 12493; alone 5481, during 11463, list done at 12458;
Done.
===== 10 OTC F7 OTC | BIOS 19951204 System ROM Version 3.0 11/18/96 A
BadVaddr as the group starts: 00000480
DMA6 (OTC) clearing 1024 entries: alone, then straight after a DMA2 list of 1024 empty
nodes starts, then just before one (as the BIOS orders them); cycles by timer 2.
alone 1118; during a list 1181, list done at 11596; then a list, both done at 20942
alone 1109; during a list 1141, list done at 11572; then a list, both done at 20918
Done.