D565 - The first measured command packets, and a census that contradicts its own report
Status: measured Date: 2026-09-04
What arrived
obSCEne ran the probe set from docs/HANDOVER-OBSCENE.md
on real hardware - firmware 12.40, generation 5, as a native
title, with a submitted frame reaching the display. Section
166-agc called the Class B builders and captured what they
wrote.
This is the first command-stream material this project has
ever had, and it is measured.
The encodings
| Builder | Bytes | First dword | Closes? |
|---|---|---|---|
sceAgcCbNop |
4 | 0xffff1000 |
no |
sceAgcCbReleaseMem |
32 | 0xc0064900 |
yes |
sceAgcDcbDmaData |
28 | 0xc0055000 |
yes |
sceAgcDcbWaitRegMem |
56 | three packets | yes |
Read as a header of type in bits 30-31,
count in bits 16-29 and opcode in bits 8-15,
with a packet length of (count + 2) dwords:
ReleaseMem 0xc0064900 type 3 opcode 0x49 count 6 -> 32 bytes = extent
DmaData 0xc0055000 type 3 opcode 0x50 count 5 -> 28 bytes = extent
WaitRegMem 0xc0027904 type 3 opcode 0x79 count 2 -> 16 bytes
+16 0xc0053c00 type 3 opcode 0x3c count 5 -> 28 bytes
+44 0xc0017904 type 3 opcode 0x79 count 1 -> 12 bytes = 56 total
The arithmetic closes exactly, three times, including a three-packet decomposition that lands on the extent to the byte. That is what makes the field split evidence rather than a guess: it was not cited from anywhere, it was the only reading under which the measured lengths add up.
sceAgcCbNop is the exception and is recorded as such -
its count field reads 0x3fff, which describes no 4-byte
packet. Consistent with a no-op whose count is not a body length.
One builder emitted three packets. That is the finding a parser has to be built around: a command-stream reader cannot assume one call is one packet.
b0 bb ff ee appears in three of the four bodies and came
from no argument the probe supplied.
The shader call refused, and named a new code
sceAgcCreateShader was invoked with the header shape
this project had established - magic 31 32 33 34, then
0x18, then a length, at both observed lengths
0xd8 and 0x118. It answered
0x8a6c002f and wrote
nothing; both out-slots came back sixteen zero bytes.
So the recorded header shape is not sufficient,
which is a real negative result: the wall is not simply "nobody called
it". And 0x8a6c002f is a fifth measured member of the
0x8a6c family, beside 0x8a6c000a,
0x8a6c0002 and the 0x8a6c003d the guest tests
for.
The census contradicts the report it is in
The same file records sceAgcCbNop as
absent - and 121 other libSceAgc symbols
with it - while section 166-agc called it and captured four
bytes of its output. All five symbols the Agc section exercised are
recorded absent.
The cause is visible two sections up: 900-surface/agc
skipped with "belongs to the other console
generation, so absence is expected rather than a gap", on hardware
that 005-generation had just identified as generation 5
with gpu = agc. The gate is inverted for this library.
This matters beyond one report. This morning's ask was written around "472 libSceAgc symbols recorded absent" and treated that as the blocker. The absent count was not measuring what it appeared to measure, and a probe result contradicting its own census is the more reliable half. Reported back rather than worked around - it is obSCEne's to fix.
What is still open
Class A is unanswered.
166-agc/dcb-constructor-audit passed with 0x0
and named nothing, so what constructs the Dcb object those nine
functions take is still unknown.
sceAgcCbNop's unnamed sibling
0x7d86501b8094ef57 was skipped - "the loader did not
resolve this symbol for this build" - which is expected: nothing on
either side knows its name.
What this does not establish
That the field split is the vendor's. It is the reading under which three measured lengths close, which is strong and is not a citation. A different split that happened to agree on these three would be indistinguishable here.
Nor what any opcode means. 0x49,
0x50, 0x79 and 0x3c are numbers
that appeared; the builders' names suggest what they are for, and
nothing here confirms it.