Files
Sylpheed/docs/re/f5-code-route-no-literal-target.md
sylph-decoder aa54a5aeec re: F5 code route -- not settled, plus a bounded negative on literal targets
The brief asks for two routes and I had only run the capture. This runs the
code route far enough to record an honest failure: the title's phase 2 and 3
handlers dispatch through vtables on nearly every branch, so finding the
clock write statically needs indirect-call resolution this container does
not do cheaply.

What the scan does establish: over 0x821C4000-0x821CD000 there is no
`li rN,<v>` for any v in 160..250, against a control of 684 li instructions
in the same range. So the snap target is computed or data-derived, not a
literal in the title's code.

Refutation aimed at my own capture result: a literal would have NAMED the
target and refuted "unpinnable from any capture". None exists, so that claim
survives and gains a second reason.

Names the instrument that would settle it: a write-watch on the clock field
in Canary, which would also close "which function advances the clock".

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jc4pciRArGHfxGGhEbwp5t
2026-09-03 19:54:10 +00:00

2.7 KiB
Raw Permalink Blame History

F5, the code route — ❔ not settled, with one bounded negative

Question: does the code handling Ⓐ on the title assign a target time, or raise a rate multiplier?

What the human looks at: nothing directly — this is the cross-check the brief asks for, that the capture's answer is right for the right reason.

What this does NOT cover: F6, and the capture route, which is settled (f5-verified-with-full-quad-reader.md).

Instrument: ⟨image⟩ via tools/ppc-dis.

❔ I did not find the instruction

The brief asks for two routes. The capture route is done; this one is not, and I am recording that rather than dressing a partial result as an answer.

Where I looked: the five GamePart_Title phase handlers (boot-config-and-gamepart-registry.md) — sub_821C5690, the inline phase 1, sub_821C5818, sub_821C5EC0, sub_821C6458. Phases 2 and 3 dispatch through vtables (mtspr/bctr) on almost every branch, so following the clock write statically means resolving indirect calls, which this container's tooling does not do cheaply.

✅ What the scan does establish

No literal time constant in the range exists. Over 0x821C4000–0x821CD000, for every value 160…250:

li rN, <v>  for v in 160..250  :  none

Control: the same scan finds 684 li instructions in that range, commonest values 0, 1, small integers and address halves — so the scan sees li fine, and the absence is about the values, not the method.

So the snap target is computed or read from the loaded bundle, not written as a literal in the title's code.

Refutation attempt — against my own capture result, and it survived

f5-snap-target-undecodable-with-reach.md says the target is somewhere in [160,238) and unpinnable from any capture. A literal in the code would have named it and refuted the "unpinnable" framing outright. There is none.

That leaves the capture claim standing and gives it a second reason: a data-derived target has no constant to find, which is consistent with it landing inside the one window where nothing observable changes.

⚠️ Reach of this negative: one address range, one instruction form, one tool. A float in .rdata, a value computed at runtime, or a handler outside 0x821C4000–0x821CD000 would all escape it.

What would settle it

A write-watch on the UI group's clock field in Canary — /canary is read-write and the draw logger already proves the pattern. That names every writer, including the snap, and would also close the standing "which function advances the clock" question. It is a real instrument, not a bigger search, and it is the next thing to build here.