re: the phase transitions -- and withdrawing yesterday's refutation
because the test probed the wrong state Nine stores to the phase field this+132, control-gated on the 136 query returning at least the 18 known ones. Attributed to the handler each lives in, they give the phase graph: entry -> 2, then 2 -> 0 (splash), 2 -> 3, 3 -> 4, and 4 -> 2 on event 0. That last edge is the problem with what I did last iteration. The event-0 block sets TWO fields one instruction apart -- stw r28,136(r30) for state 0 and stw r11,132(r30) with r11 = 2 for phase 2. So B from the menu lands in PHASE 2, the same phase as the boot title, and the test I ran believing it probed phase 4 state 0 probed nothing of the kind. So the refutation is withdrawn. Worse for me and better for the idea: A working on the B-returned title is exactly what the hypothesis predicts, since phase 2 is the phase that references BUTTON. The hypothesis is back to untested, now consistent with two observations rather than one, and what it still needs is the attract-returned title's phase -- which no test so far has read. The measurement from that iteration stands, because it does not depend on the phase: the B-returned title accepts A, so only the ATTRACT-returned title is inert. I have said so explicitly in the page rather than letting the withdrawal take the good half down with it. METHOD gets the lesson: before testing "state X behaves like this", check your route actually reaches state X. When a transition writes more than one field, read the whole block and not just the store you were looking for.
This commit is contained in:
@@ -308,7 +308,7 @@ here until 2026-08-28 and is now settled.)
|
|||||||
| ❔ | **the other ~319 SE cues** (Q8) | located one at a time by triggering them; only the three the menu needs have been done |
|
| ❔ | **the other ~319 SE cues** (Q8) | located one at a time by triggering them; only the three the menu needs have been done |
|
||||||
| 🟡 | **the paint-order tie-break** (Q3) | eight candidates refuted; costs one element's blend on one screen |
|
| 🟡 | **the paint-order tie-break** (Q3) | eight candidates refuted; costs one element's blend on one screen |
|
||||||
| 🟡 | **GamePart ids behind the buttons** (Q4) | the *screens* are measured; the ids are a name match onto the executable's class names |
|
| 🟡 | **GamePart ids behind the buttons** (Q4) | the *screens* are measured; the ids are a name match onto the executable's class names |
|
||||||
| 🟡 | **the boot transitions in code** (Q6) | `GamePart_Title` has **two nested state fields** — a 5-way phase at `this+132` and a 10-way state at `this+136` inside phase 4. Phase 0 = splash (`LOGO`), phase 2 = title + `PRESS Ⓐ` plate, phase 4 = the menu machine. Unknown: what the event *numbers* mean, and phase 1/3 |
|
| 🟡 | **the boot transitions in code** (Q6) | both levels decoded — phase at `this+132` (`entry→2`, `2→0`, `2→3`, `3→4`, `4→2`) and state at `this+136` inside phase 4. Phase 0 = splash (`LOGO`), phase 2 = title + `PRESS Ⓐ`, phase 4 = menu. Unknown: what the event *numbers* mean |
|
||||||
| ❔ | **builds 0/1 and 10/11**, the `DELTASABER` plates (Q2) | never seen anywhere in the boot path, the title-side screens or the attract loop. A mission load is the remaining candidate and this container kills runs before one completes |
|
| ❔ | **builds 0/1 and 10/11**, the `DELTASABER` plates (Q2) | never seen anywhere in the boot path, the title-side screens or the attract loop. A mission load is the remaining candidate and this container kills runs before one completes |
|
||||||
|
|
||||||
(An earlier version of this table called the audio items blocked on "an emulator
|
(An earlier version of this table called the audio items blocked on "an emulator
|
||||||
|
|||||||
@@ -231,3 +231,10 @@ agent's loop prompt, i.e. nowhere durable. See [`README.md`](README.md) for the
|
|||||||
scoped that way reported "no jump tables" for a function with two known ones.
|
scoped that way reported "no jump tables" for a function with two known ones.
|
||||||
Scope by `address between <start> and <end_address>` instead, and gate any such
|
Scope by `address between <start> and <end_address>` instead, and gate any such
|
||||||
query on a function whose answer you already know.
|
query on a function whose answer you already know.
|
||||||
|
* **Before testing "state X behaves like this", check that your route actually
|
||||||
|
reaches state X.** A test of "does Ⓐ work in phase 4 state 0" was run by
|
||||||
|
pressing Ⓑ, on the strength of a decoded `4 → state 0` edge — but the same basic
|
||||||
|
block also writes the *phase* field, sending it to phase 2. The test probed the
|
||||||
|
wrong state and produced a confident refutation of a live hypothesis. When a
|
||||||
|
transition sets more than one field, read the whole block, not the one store you
|
||||||
|
were looking for.
|
||||||
|
|||||||
@@ -35,9 +35,12 @@ neighbourhood, not just the line.
|
|||||||
|
|
||||||
## Screens, classes and RTTI
|
## Screens, classes and RTTI
|
||||||
|
|
||||||
* "the boot title is phase 2 and the attract title is phase 4 state 0, and only
|
* ~~"the boot title is phase 2 and the attract title is phase 4 state 0, and only
|
||||||
phase 2 handles Ⓐ" → **mine, and refuted the next iteration.** Ⓑ from the menu
|
phase 2 handles Ⓐ" → refuted~~ — **the REFUTATION is withdrawn.** The test
|
||||||
is the decoded edge `4 → 0`, and Ⓐ on that returned title opens the menu.
|
assumed Ⓑ lands in phase 4 state 0; the event-0 block actually sets
|
||||||
|
**phase = 2** and state = 0 together, so it probed phase 2. The hypothesis is
|
||||||
|
untested, not dead.
|
||||||
|
[`boot-config-and-gamepart-registry.md`](boot-config-and-gamepart-registry.md)
|
||||||
* "any title after the first one refuses input" → too broad. The **Ⓑ-returned
|
* "any title after the first one refuses input" → too broad. The **Ⓑ-returned
|
||||||
title accepts Ⓐ**; only the **attract**-returned title is inert.
|
title accepts Ⓐ**; only the **attract**-returned title is inert.
|
||||||
[`canary-scripted-input-traps.md`](canary-scripted-input-traps.md)
|
[`canary-scripted-input-traps.md`](canary-scripted-input-traps.md)
|
||||||
|
|||||||
@@ -535,3 +535,49 @@ Counting `stw rX, 136(r30)` per phase returned **0 for phase 4**, which is known
|
|||||||
to have 18 — the operand text is `r11, 136(r30)` and the pattern did not allow the
|
to have 18 — the operand text is `r11, 136(r30)` and the pattern did not allow the
|
||||||
space. The per-phase store counts were discarded. The `bctr` half *does* pass its
|
space. The per-phase store counts were discarded. The `bctr` half *does* pass its
|
||||||
control (phase 4 shows both known tables) and is reported above.
|
control (phase 4 shows both known tables) and is reported above.
|
||||||
|
|
||||||
|
|
||||||
|
## ✅ The phase transitions — and they invalidate yesterday's test
|
||||||
|
|
||||||
|
Nine stores to the phase field `this+132` across the `GamePart_Title`
|
||||||
|
neighbourhood, attributed to the handler each lives in (control: the same query
|
||||||
|
shape finds 30 stores to `this+136`, ≥ the 18 known in phase 4):
|
||||||
|
|
||||||
|
| store | sets phase | lives in |
|
||||||
|
|---|---|---|
|
||||||
|
| `0x821c4fbc` | 2 | outside the handlers (entry/setup) |
|
||||||
|
| `0x821c4fe0`, `0x821c4fec` | 4 | outside the handlers |
|
||||||
|
| `0x821c5010` | *(not an immediate)* | outside the handlers |
|
||||||
|
| `0x821c592c` | **0** | phase 2 |
|
||||||
|
| `0x821c5b00` | **3** | phase 2 |
|
||||||
|
| `0x821c6370` | **4** | phase 3 |
|
||||||
|
| **`0x821c6e04`** | **2** | **phase 4, in the event-0 block** |
|
||||||
|
| `0x821c7950` | 2 | the dispatcher |
|
||||||
|
|
||||||
|
```
|
||||||
|
entry → 2 2 → 0 (splash) 2 → 3 3 → 4 4 → 2 (event 0)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 🔴 Withdrawing the refutation from the previous iteration
|
||||||
|
|
||||||
|
The event-0 block sets **both** fields, one instruction apart:
|
||||||
|
|
||||||
|
```
|
||||||
|
821c6df8 li r11, 2
|
||||||
|
821c6e00 stw r28, 136(r30) ; state = 0
|
||||||
|
821c6e04 stw r11, 132(r30) ; phase = 2
|
||||||
|
```
|
||||||
|
|
||||||
|
So **Ⓑ from the menu lands in phase 2**, not phase 4 state 0. The previous section
|
||||||
|
tested "Ⓐ on the Ⓑ-returned title" believing it was probing phase 4 state 0 —
|
||||||
|
**it was probing phase 2**, the same phase as the boot title.
|
||||||
|
|
||||||
|
The test therefore says nothing about phase 4 state 0, and the refutation it
|
||||||
|
produced is **withdrawn**. Worse for me and better for the idea: Ⓐ working there
|
||||||
|
is exactly what the hypothesis predicts, since phase 2 is the phase that
|
||||||
|
references `BUTTON`.
|
||||||
|
|
||||||
|
**Status of the hypothesis: untested, and now consistent with two observations**
|
||||||
|
(Ⓐ works on the boot title and on the Ⓑ-returned title, both phase 2). What it
|
||||||
|
still needs is the **attract**-returned title's phase — the one thing no test so
|
||||||
|
far has read.
|
||||||
|
|||||||
@@ -660,7 +660,7 @@ state 0 (`sub_821C6458`). Same screen, different code. See
|
|||||||
**Candidate:** the boot title is phase 2; the attract-returned title is phase 4
|
**Candidate:** the boot title is phase 2; the attract-returned title is phase 4
|
||||||
state 0; only one of them wires up Ⓐ.
|
state 0; only one of them wires up Ⓐ.
|
||||||
|
|
||||||
### 🔴 Tested the same day — and the candidate is dead
|
### ⚠️ Tested the same day, and the TEST was invalid — see the withdrawal below
|
||||||
|
|
||||||
There was a cheaper test than reading `this+132`: the state graph says Ⓑ from the
|
There was a cheaper test than reading `this+132`: the state graph says Ⓑ from the
|
||||||
main menu goes `4 → 0`, so **the Ⓑ-returned title *is* phase 4 state 0**. If phase
|
main menu goes `4 → 0`, so **the Ⓑ-returned title *is* phase 4 state 0**. If phase
|
||||||
@@ -673,12 +673,18 @@ main menu goes `4 → 0`, so **the Ⓑ-returned title *is* phase 4 state 0**. If
|
|||||||
| *control* — Ⓐ on the boot title | → main menu ✅ |
|
| *control* — Ⓐ on the boot title | → main menu ✅ |
|
||||||
| Ⓐ on the **Ⓑ-returned** title | → **main menu** ✅ |
|
| Ⓐ on the **Ⓑ-returned** title | → **main menu** ✅ |
|
||||||
|
|
||||||
So phase 4 state 0 does wire up Ⓐ, and "the boot title is phase 2, the returned
|
**🔴 Withdrawn.** Reading the event-0 block in full shows it sets **two** fields,
|
||||||
title is phase 4 state 0, only phase 2 handles Ⓐ" is **refuted**. (Conditional on
|
one instruction apart: `stw r28, 136(r30)` (state = 0) *and* `stw r11, 132(r30)`
|
||||||
the graph reading that Ⓑ lands in state 0 — that edge is decoded, but which
|
with `r11 = 2` — **phase = 2**. So Ⓑ lands in **phase 2**, the same phase as the
|
||||||
*title* it produces is my inference.)
|
boot title, and this test never probed phase 4 state 0 at all.
|
||||||
|
|
||||||
### ✅ What the test did establish — the puzzle is narrower than this page says
|
The refutation is withdrawn. Ⓐ working on the Ⓑ-returned title is exactly what
|
||||||
|
the hypothesis predicts — phase 2 is the phase that references `BUTTON`.
|
||||||
|
|
||||||
|
### ✅ What the test DID establish — the puzzle is narrower than this page says
|
||||||
|
|
||||||
|
(This part stands: it is a measurement, independent of which phase the returned
|
||||||
|
title turns out to be.)
|
||||||
|
|
||||||
This page frames the problem as *the boot title accepts Ⓐ, a later title does
|
This page frames the problem as *the boot title accepts Ⓐ, a later title does
|
||||||
not*. That is too broad. **The Ⓑ-returned title accepts Ⓐ perfectly well** — a
|
not*. That is too broad. **The Ⓑ-returned title accepts Ⓐ perfectly well** — a
|
||||||
|
|||||||
Reference in New Issue
Block a user