psx.wiki

SPU 32-bit Stores: 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: SPU 32-bit Stores
+type: test
+summary: Checks whether a 32-bit store to an SPU register loses one of its halves at any store timing.
+category: Hardware tests
+info: Machine = SCPH-5501
+info: Program = SXSPU32 and SXSPU32B
+---
+
+## Overview
+
+A 32-bit store to the SPU is split into two 16-bit writes. In an earlier card run the console lost the low half of every store whose root counter 2 reading just before it was 1 mod 8. The loss showed in all four registers that run tried.[^f33] These probes repeat the stores to find the clock that decides the loss.[^run32]
+
+SXSPU32 makes 16 runs of 64 stores to 1C08h, the ADSR register of voice 0, with every voice keyed off. Each run zeroes root counter 2 at a different phase, waits for a sample tick seen in SPUSTAT bit 0, and notes the counter at that tick as T. Store i is made at T + 1536(i + 1) + 3i cycles, and each value is read back with LW.[^run32] SXSPU32B prints the memory control registers as found, then makes four runs of the same stores under each of three COM_DELAY values: the value as found, 00031125h and 00001325h.[^run32b]
+
+## Results
+
+No store lost a half in either probe. SXSPU32 made 1024 stores across every counter phase mod 8 and every phase from the sample tick, and all 1024 read back whole.[^run32]
+
+SXSPU32B found 1F801014h at 220931E1h and COM_DELAY at 00031125h. It made 768 stores under COM_DELAY 00031125h and 00001325h, and all read back whole.[^run32b]
+
+Table: Memory control registers as found by SXSPU32B
+
+| Address | Value |
+| --- | --- |
+| 1F801000h | 1F000000h |
+| 1F801004h | 1F802000h |
+| 1F801008h | 0013243Fh |
+| 1F80100Ch | 00003022h |
+| 1F801010h | 0013243Fh |
+| 1F801014h | 220931E1h |
+| 1F801018h | 00020843h |
+| 1F80101Ch | 00070777h |
+| 1F801020h | 00031125h |
+
+The loss in the card run therefore did not depend on the store's phase or on COM_DELAY alone. It depended on some other state that the card program had set.[^run32]
+
+## Runs
+
+### Run 5501a-link on 15 October 2026
+
+Raw output: [SXSPU32.txt](/tests/raw/20261015T2212Z-5501a-link/sxspu32/SXSPU32.txt)
+
+SXSPU32.txt:
+
+```
+SXDEV I_MASK at init 3C020100
+SXSPU32 start
+SXSPU32 run 0 T 2 poll 47 lost 0 of 64 by t mod 8: 4/0 12/0 5/0 9/0 5/0 11/0 8/0 10/0 by (t-T) mod 8: 5/0 9/0 5/0 11/0 8/0 10/0 4/0 12/0 high 0
+SXSPU32 run 1 T 5 poll 37 lost 0 of 64 by t mod 8: 4/0 9/0 8/0 10/0 5/0 13/0 5/0 10/0 by (t-T) mod 8: 13/0 5/0 10/0 4/0 9/0 8/0 10/0 5/0 high 0
+SXSPU32 run 2 T 7 poll 43 lost 0 of 64 by t mod 8: 8/0 10/0 5/0 13/0 4/0 10/0 5/0 9/0 by (t-T) mod 8: 9/0 8/0 10/0 5/0 13/0 4/0 10/0 5/0 high 0
+SXSPU32 run 3 T 5 poll 40 lost 0 of 64 by t mod 8: 5/0 13/0 4/0 10/0 5/0 9/0 8/0 10/0 by (t-T) mod 8: 9/0 8/0 10/0 5/0 13/0 4/0 10/0 5/0 high 0
+SXSPU32 run 4 T 6 poll 37 lost 0 of 64 by t mod 8: 9/0 8/0 11/0 5/0 13/0 4/0 9/0 5/0 by (t-T) mod 8: 9/0 5/0 9/0 8/0 11/0 5/0 13/0 4/0 high 0
+SXSPU32 run 5 T 5 poll 42 lost 0 of 64 by t mod 8: 5/0 13/0 4/0 10/0 5/0 9/0 8/0 10/0 by (t-T) mod 8: 9/0 8/0 10/0 5/0 13/0 4/0 10/0 5/0 high 0
+SXSPU32 run 6 T 2 poll 37 lost 0 of 64 by t mod 8: 5/0 10/0 5/0 10/0 7/0 9/0 5/0 13/0 by (t-T) mod 8: 5/0 10/0 7/0 9/0 5/0 13/0 5/0 10/0 high 0
+SXSPU32 run 7 T 3 poll 37 lost 0 of 64 by t mod 8: 5/0 13/0 4/0 9/0 5/0 9/0 8/0 11/0 by (t-T) mod 8: 9/0 5/0 9/0 8/0 11/0 5/0 13/0 4/0 high 0
+SXSPU32 run 8 T 6 poll 37 lost 0 of 64 by t mod 8: 5/0 14/0 5/0 10/0 4/0 9/0 8/0 9/0 by (t-T) mod 8: 8/0 9/0 5/0 14/0 5/0 10/0 4/0 9/0 high 0
+SXSPU32 run 9 T 0 poll 37 lost 0 of 64 by t mod 8: 9/0 5/0 9/0 8/0 11/0 5/0 13/0 4/0 by (t-T) mod 8: 9/0 5/0 9/0 8/0 11/0 5/0 13/0 4/0 high 0
+SXSPU32 run 10 T 7 poll 58 lost 0 of 64 by t mod 8: 9/0 5/0 14/0 8/0 10/0 4/0 9/0 5/0 by (t-T) mod 8: 5/0 9/0 5/0 14/0 8/0 10/0 4/0 9/0 high 0
+SXSPU32 run 11 T 6 poll 37 lost 0 of 64 by t mod 8: 9/0 8/0 11/0 5/0 13/0 4/0 9/0 5/0 by (t-T) mod 8: 9/0 5/0 9/0 8/0 11/0 5/0 13/0 4/0 high 0
+SXSPU32 run 12 T 4 poll 37 lost 0 of 64 by t mod 8: 11/0 5/0 13/0 4/0 9/0 5/0 9/0 8/0 by (t-T) mod 8: 9/0 5/0 9/0 8/0 11/0 5/0 13/0 4/0 high 0
+SXSPU32 run 13 T 3 poll 47 lost 0 of 64 by t mod 8: 9/0 8/0 10/0 5/0 14/0 4/0 9/0 5/0 by (t-T) mod 8: 5/0 14/0 4/0 9/0 5/0 9/0 8/0 10/0 high 0
+SXSPU32 run 14 T 3 poll 37 lost 0 of 64 by t mod 8: 8/0 10/0 5/0 13/0 5/0 10/0 4/0 9/0 by (t-T) mod 8: 13/0 5/0 10/0 4/0 9/0 8/0 10/0 5/0 high 0
+SXSPU32 run 15 T 1 poll 37 lost 0 of 64 by t mod 8: 13/0 5/0 9/0 5/0 10/0 8/0 10/0 4/0 by (t-T) mod 8: 5/0 9/0 5/0 10/0 8/0 10/0 4/0 13/0 high 0
+SXSPU32 end PASS
+```
+
+### Run 5501a-link on 15 October 2026
+
+Raw output: [SXSPU32B.txt](/tests/raw/20261015T2216Z-5501a-link/sxspu32b/SXSPU32B.txt)
+
+SXSPU32B.txt:
+
+```
+SXDEV I_MASK at init 3C040100
+SXSPU32B start
+SXSPU32B memctrl 1F801000 1F000000
+SXSPU32B memctrl 1F801004 1F802000
+SXSPU32B memctrl 1F801008 0013243F
+SXSPU32B memctrl 1F80100C 00003022
+SXSPU32B memctrl 1F801010 0013243F
+SXSPU32B memctrl 1F801014 220931E1
+SXSPU32B memctrl 1F801018 00020843
+SXSPU32B memctrl 1F80101C 00070777
+SXSPU32B memctrl 1F801020 00031125
+SXSPU32B com 00031125 run 0 T 4 poll 61 lost 0 of 64 by t mod 8: 5/0 13/0 5/0 9/0 5/0 10/0 7/0 10/0 by (t-T) mod 8: 5/0 10/0 7/0 10/0 5/0 13/0 5/0 9/0 high 0
+SXSPU32B com 00031125 run 5 T 0 poll 37 lost 0 of 64 by t mod 8: 4/0 9/0 7/0 11/0 6/0 12/0 5/0 10/0 by (t-T) mod 8: 4/0 9/0 7/0 11/0 6/0 12/0 5/0 10/0 high 0
+SXSPU32B com 00031125 run 10 T 5 poll 37 lost 0 of 64 by t mod 8: 9/0 5/0 9/0 8/0 10/0 5/0 14/0 4/0 by (t-T) mod 8: 5/0 14/0 4/0 9/0 5/0 9/0 8/0 10/0 high 0
+SXSPU32B com 00031125 run 15 T 2 poll 37 lost 0 of 64 by t mod 8: 9/0 5/0 10/0 7/0 11/0 5/0 12/0 5/0 by (t-T) mod 8: 10/0 7/0 11/0 5/0 12/0 5/0 9/0 5/0 high 0
+SXSPU32B com 00031125 run 0 T 7 poll 22 lost 0 of 64 by t mod 8: 7/0 11/0 4/0 12/0 5/0 9/0 6/0 10/0 by (t-T) mod 8: 10/0 7/0 11/0 4/0 12/0 5/0 9/0 6/0 high 0
+SXSPU32B com 00031125 run 5 T 5 poll 37 lost 0 of 64 by t mod 8: 9/0 5/0 9/0 8/0 10/0 5/0 14/0 4/0 by (t-T) mod 8: 5/0 14/0 4/0 9/0 5/0 9/0 8/0 10/0 high 0
+SXSPU32B com 00031125 run 10 T 3 poll 37 lost 0 of 64 by t mod 8: 9/0 6/0 9/0 7/0 12/0 5/0 12/0 4/0 by (t-T) mod 8: 7/0 12/0 5/0 12/0 4/0 9/0 6/0 9/0 high 0
+SXSPU32B com 00031125 run 15 T 1 poll 37 lost 0 of 64 by t mod 8: 7/0 11/0 4/0 9/0 5/0 9/0 6/0 13/0 by (t-T) mod 8: 11/0 4/0 9/0 5/0 9/0 6/0 13/0 7/0 high 0
+SXSPU32B com 00001325 run 0 T 0 poll 37 lost 0 of 64 by t mod 8: 7/0 12/0 6/0 12/0 4/0 9/0 5/0 9/0 by (t-T) mod 8: 7/0 12/0 6/0 12/0 4/0 9/0 5/0 9/0 high 0
+SXSPU32B com 00001325 run 5 T 5 poll 39 lost 0 of 64 by t mod 8: 5/0 13/0 4/0 10/0 5/0 9/0 8/0 10/0 by (t-T) mod 8: 9/0 8/0 10/0 5/0 13/0 4/0 10/0 5/0 high 0
+SXSPU32B com 00001325 run 10 T 2 poll 37 lost 0 of 64 by t mod 8: 9/0 5/0 10/0 7/0 11/0 5/0 12/0 5/0 by (t-T) mod 8: 10/0 7/0 11/0 5/0 12/0 5/0 9/0 5/0 high 0
+SXSPU32B com 00001325 run 15 T 6 poll 37 lost 0 of 64 by t mod 8: 9/0 8/0 11/0 5/0 13/0 4/0 9/0 5/0 by (t-T) mod 8: 9/0 5/0 9/0 8/0 11/0 5/0 13/0 4/0 high 0
+SXSPU32B end PASS
+```
+
+## References
+
+[^f33]: Hardware test run 20261005T0000Z-5501a-card-q: [05S32.txt](/tests/raw/20261005T0000Z-5501a-card-q/followup33/05S32.txt), lines 6 to 17.
+[^run32]: Hardware test run 20261015T2212Z-5501a-link on the SCPH-5501: [SXSPU32.txt](/tests/raw/20261015T2212Z-5501a-link/sxspu32/SXSPU32.txt).
+[^run32b]: Hardware test run 20261015T2216Z-5501a-link on the SCPH-5501: [SXSPU32B.txt](/tests/raw/20261015T2216Z-5501a-link/sxspu32b/SXSPU32B.txt).