isl: rename built-ins 8/9/93 to stopwatch_start/_elapsed/_stop
They are start / read / stop of one of 32 per-phase stopwatches, not flag operations. 123-127 keep timer_* -- that is the mission timer, five scalars at [phase+304..320], a different clock. Artefact check: 84 lines changed across 5 files and all 84 pair exactly with their old-name partners once column padding is normalised (0 removed lines without an old name, 0 added lines without a new one). data/isl-timers.txt reproduces the same 675/675, 11.2 % control, 82/1 and identical histograms, which is what shows the rename is cosmetic. Also withdraws a label from the previous commit: sub_8230C398 is NOT the message pump. It runs every frame but drains nothing -- a state machine on [0x828E1F8C] that only allocates, builds strings, looks up and PUSHES. And bus+8216 is weak evidence: sub_82254A08 is a generic map find with ~120 sites, and the key looked up is a pointer, not a tag. The open handle is now the ring buffer at bus+4, not bus+8216.
This commit is contained in:
@@ -145,11 +145,27 @@ no table of subscribed tags to find either.
|
||||
### 🟡 Where the subscriber actually lives — located, not read
|
||||
|
||||
The bus object at `[0x828F35DC]` carries a **map at `+8216`**, looked up through
|
||||
`sub_82254A08` from **`sub_823001E8`** — whose only caller is `sub_8230C398`, the
|
||||
per-frame message pump (itself called from the frame loop `sub_821A6544` with the
|
||||
frame `dt`). So dispatch is a **runtime registry keyed by the tag**, and the
|
||||
question "does running out of time end the mission" reduces to: *what inserts into
|
||||
`bus+8216`, and with which key.* That insert path is not read here.
|
||||
`sub_82254A08` from **`sub_823001E8`** — whose only caller is `sub_8230C398`.
|
||||
|
||||
🔴 **Correction to my own label from the previous pass.** I called
|
||||
`sub_8230C398` "the per-frame message pump". It is *called* every frame (from
|
||||
`sub_821A6470` at `0x821A654C` and from the mission loop `sub_821AA1B0` at
|
||||
`0x821AA7DC`, both with the frame `dt`), but **it drains nothing**: its whole
|
||||
body is a state machine on the counter at `[0x828E1F8C]`, and across 466
|
||||
instructions it calls only an allocator (`sub_8230C160`), string building
|
||||
(`sub_8217FA08`), a map lookup (`sub_823001E8`) and a *push* (`sub_8225FEA0`).
|
||||
It is a boot/loading sequencer that posts messages, not the consumer of them.
|
||||
|
||||
Two further cautions the search turned up:
|
||||
|
||||
* `sub_82254A08` is a **generic map find** with ~120 call sites image-wide, and
|
||||
`+8216` is a common offset — the pair alone identifies nothing.
|
||||
* The key `sub_823001E8` looks up is a **pointer** (`lwz r4, 13780(r11)` stored
|
||||
and passed by address), **not a message tag**. So `bus+8216` may not be the
|
||||
subscriber registry at all.
|
||||
|
||||
**So the drain of the queue at `bus+4` is still unlocated**, and with it the
|
||||
answer to whether running out of time ends the mission.
|
||||
|
||||
## 🟡 Not settled
|
||||
|
||||
|
||||
Reference in New Issue
Block a user