D598 - Two titles are two kinds of dump, and one names the code it wanted

Status: measured, with one section corrected Date: 2026-09-08

Nine iterations on one title, and the other one is a different object

PPSA02664 reaches furthest of any title here and had not been looked at once this session. Every tool built for PPSA03416 - the format record, the opens and reads and seeks, the mapping record, the call sites - was pointed at it, and the first thing it said was new:

path /app0/Media/globalgamemanagers is not considered suitable for apr reads flags:0x0
                                                                    [from image+0xf0fbef]

PPSA02664 asks whether a path is suitable for the asynchronous file path, is told flags:0x0, and declines. PPSA03416 never says this and goes ahead.

The directories say why:

PPSA03416 PPSA02664
ampr_emu.index 16,248 bytes absent
fakelib/libSceAmpr.sprx 218,678 bytes absent

PPSA03416 is a modified dump carrying a shim that implements the Ampr API in guest code (D592). PPSA02664 is a clean one. They are not two instances of one problem; they are two different problems that happen to reach the same subsystem.

That settles the scope question D594 raised and left open: serving the shim is compatibility with somebody else's emulation layer and applies to one title. Serving what PPSA02664 needs is implementing the platform, and no scope question arises.

The clean title names the code it expected - NO. Corrected below

This section was wrong and is kept so the mistake is legible. The instruction bytes below were read out of a turn transcript, and a turn runs the guest under sweeps: those runs faulted at image+0xf56e09 reading 0x6608c, not at the baseline wall image+0x39f7c. The comparison against 0x8a6c003d is real guest code at a site reached only under an intervention.

So this entry did the exact thing principle 3 names - an intervention that moves a wall is not a diagnosis - and did it in a decision entry, which is where it does the most damage. The baseline bytes are stable across runs and are different:

31 c0                  xor  eax, eax
85 d2                  test edx, edx
74 15                  je   …
48 8b 76 30            mov  rsi, [rsi+0x30]
 ff ca                 dec  edx
8b 14 96               mov  edx, [rsi+rdx*4]   <- faults

rsi is 0x542e2e00776f6c66 - ASCII, flow..T - so the guest walked a structure and got text where it expected a pointer. What survives from below is only that rbx holds 0x7fff0001 at the baseline fault, which was read from a run under settings rather than interventions.

What the section below claimed

Its fault is read of 0xffffffffffffffff at image+0x39f7c, which the report already flags as a general-protection fault rather than a read of minus one (D384). The registers say more than the address does:

rbx=0x7fff0001   rsi=0x542e2e00776f6c66

rbx is orbistoun's own Unimplemented placeholder, live at the fault. rsi is ASCII - flow\0..T - being used as a pointer.

And the instructions before it:

31 c0                  xor  eax, eax
e8 c0 7f 0c ff         call …
81 fb 3d 00 6c 8a      cmp  ebx, 0x8a6c003d
75 0c                  jne  …

The guest compares an error against 0x8a6c003d and branches. Our placeholder is 0x7fff0001, which does not match, so it takes the branch for a code it does not recognise - and that branch is what dies.

This is D125's shape with the answer attached: the finding is not merely a placeholder was used as a pointer but here is the value the guest was looking for.

What this does not establish

Which function should answer 0x8a6c003d. The comparison is on ebx, set before the call immediately preceding it, and no import has been tied to it yet. ORBISTOUN_RETURN can force any candidate to that value and the guest grades it, which is a measurement nobody has made.

Nor what the code means. 0x8a6c… is a vendor error space this project has not enumerated. Answering it because a guest compares against it would be fitting a constant to one branch, which is worth doing as an experiment and not as an implementation.

Nor that flags:0x0 is wrong. PPSA02664 declining the asynchronous path may be the correct outcome - orbistoun cannot serve it either. What the flags should be is unmeasured, and the fallback failing is a separate defect from the flags being zero.