Load and Use During a DMA2 List: Difference between revisions
| 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) | Revision as of 05:18, 23 October 2026 RemmyLee (Hardware tests: nine DMA, MDEC and BIOS test pages with part names for titles; join one-sentence paragraphs per voice.md) | ||
| Line 1: | Line 1: | ||
| + | --- | ||
| + | title: Load and Use During a DMA2 List | ||
| + | type: test | ||
| + | summary: Measures how a RAM load, the use of its value and the accesses around them share time with a DMA2 list. | ||
| + | category: Hardware tests | ||
| + | info: Machine = SCPH-5501 | ||
| + | info: Program = followup8 | ||
| + | --- | ||
| + | |||
| + | ## Overview | ||
| + | |||
| + | Each row is 100 turns from the cache, timed on root counter 2 read by loads only, alone after one warm call and straight after a DMA2 list of 1024 empty nodes starts. The rows separate the cost of a load, of the instruction that uses its value, and of the access that follows.[^run] | ||
| + | |||
| + | Table: Groups | ||
| + | |||
| + | | Tag | Turn of the loop | | ||
| + | | --- | --- | | ||
| + | | UAX | A word load, its use two instructions later, then a second access 0 to 6 NOPs after the use | | ||
| + | | UPR | One to four load and use pairs back to back | | ||
| + | | UBR | The use by ADDU, BNE, SLL, a store at the loaded address and a store of the loaded value | | ||
| + | | UDS | A load and its use 2 to 8 instructions later, the turn padded to 10 instructions | | ||
| + | | ALN | Alone only: an I_STAT load then a RAM load, and a store, NOPs and a load | | ||
| + | |||
| + | ## Results | ||
| + | |||
| + | ### Second Access After a Use | ||
| + | |||
| + | A load, its use and a second RAM load up to 2 NOPs after the use took about 2,551 cycles during the list. With 4 NOPs it took 2,670 and with 6 NOPs about 3,545. A second access to I_STAT gave about 2,338 up to 2 NOPs and about 3,330 at 6 NOPs. A halfword store after the use took about 2,670 cycles at every gap from 0 to 6 NOPs.[^run] | ||
| + | |||
| + | ### Load and Use Pairs | ||
| + | |||
| + | During the list each load and use pair in a turn added about 1,220 cycles over 100 turns: one pair took about 1,343, two about 2,565, three about 3,780 and four about 5,017. Byte and halfword loads gave the same times as word loads.[^run] | ||
| + | |||
| + | ### Kind of Use | ||
| + | |||
| + | A use by ADDU, BNE or SLL took about 1,650 cycles alone and about 2,300 during the list. A store that used the loaded value as its address or as its data took about 1,650 alone and about 2,630 during the list.[^run] | ||
| + | |||
| + | ### Distance to the Use | ||
| + | |||
| + | With the turn padded to 10 instructions, the time during the list stayed at 2,339 to 2,360 cycles whether the value was used 2, 3, 5, 6 or 8 instructions after the load. Alone it fell from about 1,960 at a distance of 2 or 3 to about 1,555 at a distance of 8.[^run] | ||
| + | |||
| + | ### Alone Only | ||
| + | |||
| + | An I_STAT load followed at once by a RAM load took 1,261 cycles over 100 turns. With 1 to 3 NOPs between them it took about 1,465. A halfword store, n NOPs and a load took 1,478 cycles at 4 NOPs and 2,597 at 16 NOPs.[^run] | ||
| + | |||
| + | ## Runs | ||
| + | |||
| + | ### 2 October 2026 | ||
| + | |||
| + | [00RUN.txt](/tests/raw/20261002T0000Z-5501a-card-m/followup8/00RUN.txt) | ||
| + | |||
| + | ``` | ||
| + | ===== 00 RUN | BIOS 19951204 System ROM Version 3.0 11/18/96 A | ||
| + | 5 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 80016128 DCIC 00000000 BadVaddr 00000480 BDAM 00000000 | ||
| + | BPCM 00000000 SR 00000000 Cause 00000020 EPC 80016C84 PRId 00000002 | ||
| + | ``` | ||
| + | |||
| + | [01UAX.txt](/tests/raw/20261002T0000Z-5501a-card-m/followup8/01UAX.txt) | ||
| + | |||
| + | ``` | ||
| + | ===== 01 UAX F8 USE THEN ACCESS | BIOS 19951204 System ROM Version 3.0 11/18/96 A | ||
| + | BadVaddr as the group starts: 00000480 | ||
| + | 100 turns of a RAM lw, a NOP, an addu of it, a NOPs, then a second access, alone and | ||
| + | during a list of 1024 empty nodes. | ||
| + | RAM lw, 0 after the use: alone 1764, during 2551, list done at 10912; alone 1754, during 2552, list done at 10931; | ||
| + | RAM lw, 1 after the use: alone 1874, during 2551, list done at 10923; alone 1873, during 2551, list done at 10930; | ||
| + | RAM lw, 2 after the use: alone 1966, during 2557, list done at 10932; alone 1966, during 2552, list done at 10934; | ||
| + | RAM lw, 4 after the use: alone 2179, during 2670, list done at 11040; alone 2184, during 2671, list done at 11050; | ||
| + | RAM lw, 6 after the use: alone 2375, during 3554, list done at 10938; alone 2376, during 3537, list done at 10946; | ||
| + | RAM sh, 0 after the use: alone 1559, during 2671, list done at 11047; alone 1554, during 2670, list done at 11039; | ||
| + | RAM sh, 1 after the use: alone 1651, during 2663, list done at 11043; alone 1650, during 2661, list done at 11055; | ||
| + | RAM sh, 2 after the use: alone 1762, during 2673, list done at 11041; alone 1754, during 2675, list done at 11050; | ||
| + | RAM sh, 4 after the use: alone 1971, during 2666, list done at 11050; alone 1971, during 2665, list done at 11051; | ||
| + | RAM sh, 6 after the use: alone 2171, during 2687, list done at 11042; alone 2182, during 2683, list done at 11052; | ||
| + | I_STAT lw, 0 after the use: alone 1550, during 2337, list done at 10699; alone 1550, during 2342, list done at 10718; | ||
| + | I_STAT lw, 1 after the use: alone 1655, during 2338, list done at 10707; alone 1650, during 2337, list done at 10703; | ||
| + | I_STAT lw, 2 after the use: alone 1750, during 2340, list done at 10705; alone 1756, during 2342, list done at 10714; | ||
| + | I_STAT lw, 4 after the use: alone 1954, during 2442, list done at 10813; alone 1956, during 2450, list done at 10824; | ||
| + | I_STAT lw, 6 after the use: alone 2175, during 3340, list done at 10689; alone 2184, during 3318, list done at 10701; | ||
| + | Done. | ||
| + | ``` | ||
| + | |||
| + | [02UPR.txt](/tests/raw/20261002T0000Z-5501a-card-m/followup8/02UPR.txt) | ||
| + | |||
| + | ``` | ||
| + | ===== 02 UPR F8 USE PAIRS | BIOS 19951204 System ROM Version 3.0 11/18/96 A | ||
| + | BadVaddr as the group starts: 00000480 | ||
| + | 100 turns of n load-use pairs back to back (load, NOP, addu of it), word loads and | ||
| + | the shell's lb, lhu, lh in turn, alone and during a list of 1024 empty nodes. | ||
| + | 1 pairs, lw: alone 1272, during 1344, list done at 10733; alone 1269, during 1341, list done at 10735; | ||
| + | 2 pairs, lw: alone 2178, during 2566, list done at 10927; alone 2180, during 2563, list done at 10924; | ||
| + | 3 pairs, lw: alone 3064, during 3777, list done at 11119; alone 3064, during 3782, list done at 11127; | ||
| + | 4 pairs, lw: alone 3995, during 5014, list done at 11312; alone 3991, during 5022, list done at 11328; | ||
| + | 1 pairs, lb, lhu, lh: alone 1272, during 1343, list done at 10724; alone 1269, during 1341, list done at 10732; | ||
| + | 2 pairs, lb, lhu, lh: alone 2184, during 2566, list done at 10923; alone 2184, during 2561, list done at 10922; | ||
| + | 3 pairs, lb, lhu, lh: alone 3065, during 3781, list done at 11114; alone 3072, during 3782, list done at 11127; | ||
| + | 4 pairs, lb, lhu, lh: alone 3995, during 5017, list done at 11315; alone 3991, during 5014, list done at 11333; | ||
| + | Done. | ||
| + | ``` | ||
| + | |||
| + | [03UBR.txt](/tests/raw/20261002T0000Z-5501a-card-m/followup8/03UBR.txt) | ||
| + | |||
| + | ``` | ||
| + | ===== 03 UBR F8 USE KINDS | BIOS 19951204 System ROM Version 3.0 11/18/96 A | ||
| + | BadVaddr as the group starts: 00000480 | ||
| + | 100 turns of a RAM lw, a NOP and one use of it, then 4 NOPs, alone and during a list of | ||
| + | 1024 empty nodes; the lw reads a pointer to x_sbuf for the address use. | ||
| + | use by addu: alone 1650, during 2300, list done at 10716; alone 1650, during 2298, list done at 10714; | ||
| + | use by bne: alone 1655, during 2297, list done at 10714; alone 1650, during 2293, list done at 10723; | ||
| + | use by sll: alone 1652, during 2301, list done at 10716; alone 1656, during 2300, list done at 10712; | ||
| + | use by sh at it (address): alone 1650, during 2628, list done at 11039; alone 1661, during 2633, list done at 11043; | ||
| + | use by sh of it (data): alone 1650, during 2632, list done at 11034; alone 1661, during 2629, list done at 11042; | ||
| + | Done. | ||
| + | ``` | ||
| + | |||
| + | [04UDS.txt](/tests/raw/20261002T0000Z-5501a-card-m/followup8/04UDS.txt) | ||
| + | |||
| + | ``` | ||
| + | ===== 04 UDS F8 USE DISTANCE | BIOS 19951204 System ROM Version 3.0 11/18/96 A | ||
| + | BadVaddr as the group starts: 00000480 | ||
| + | 100 turns of a RAM lw whose value an addu uses d instructions on, the turn padded to 10 | ||
| + | instructions, alone and during a list of 1024 empty nodes. | ||
| + | use 2 on: alone 1962, during 2356, list done at 10718; alone 1956, during 2348, list done at 10729; | ||
| + | use 3 on: alone 1956, during 2352, list done at 10711; alone 1950, during 2360, list done at 10723; | ||
| + | use 5 on: alone 1750, during 2346, list done at 10719; alone 1752, during 2346, list done at 10714; | ||
| + | use 6 on: alone 1650, during 2348, list done at 10725; alone 1650, during 2350, list done at 10720; | ||
| + | use 8 on: alone 1551, during 2339, list done at 10717; alone 1557, during 2353, list done at 10721; | ||
| + | Done. | ||
| + | ``` | ||
| + | |||
| + | [05ALN.txt](/tests/raw/20261002T0000Z-5501a-card-m/followup8/05ALN.txt) | ||
| + | |||
| + | ``` | ||
| + | ===== 05 ALN F8 ALONE | BIOS 19951204 System ROM Version 3.0 11/18/96 A | ||
| + | BadVaddr as the group starts: 00000480 | ||
| + | Alone only: 100 turns of an I_STAT lw then a RAM lw k apart, and of a RAM sh, n NOPs | ||
| + | and a RAM lw. | ||
| + | I_STAT lw, 0 NOPs, RAM lw: alone 1261; 1335 | ||
| + | I_STAT lw, 1 NOPs, RAM lw: alone 1470; 1523 | ||
| + | I_STAT lw, 2 NOPs, RAM lw: alone 1463; 1529 | ||
| + | I_STAT lw, 3 NOPs, RAM lw: alone 1466; 1527 | ||
| + | I_STAT lw, 4 NOPs, RAM lw: alone 1553; 1620 | ||
| + | sh, 4 NOPs, lw: alone 1478; 1532 | ||
| + | sh, 6 NOPs, lw: alone 1554; 1626 | ||
| + | sh, 8 NOPs, lw: alone 1766; 1828 | ||
| + | sh, 10 NOPs, lw: alone 1954; 2027 | ||
| + | sh, 12 NOPs, lw: alone 2171; 2246 | ||
| + | sh, 14 NOPs, lw: alone 2372; 2449 | ||
| + | sh, 16 NOPs, lw: alone 2597; 2677 | ||
| + | Done. | ||
| + | ``` | ||
| + | |||
| + | ## References | ||
| + | |||
| + | [^run]: SCPH-5501 output: [followup8/00RUN.txt](/tests/raw/20261002T0000Z-5501a-card-m/followup8/00RUN.txt) and the files beside it, with the other runs listed under Runs. | ||