re: a THIRD timed channel in the decoder -- my "only two" was wrong, and +0xC4/+0xC8 are timings not masks

Chasing F1 I examined a counter block I had skipped. this+0x10 decrements
every update and fires output bit 0x4 at zero, guarded against the HELD
word by cfg +0xA0; it is re-armed from +0xC4 = 10 and +0xC8 = 8.

So my statement that "the only two timed inputs in the whole decoder are LB
and LT" is false, and two constants I tabulated as ring-word button masks
(B|Y and Y) are counter reload values. A number that is a valid mask AND a
valid duration cannot be told apart by its value, only by its use, and I
classified those two by value.

What it does not change: F1 is still not answered. This channel is guarded
by cfg +0xA0 = ring bit 1 = B, not a direction. The D-pad and left-stick
paths still carry no counter, so "a held DIRECTION has no repeat timer in
C_PAD_DECODER" stands, and the human's observation that it repeats in the
real game is consistent with the caveat this page already carried: the
repeat is in the layer above.

Explicitly NOT offering 10 and 8 as F1's two numbers. They belong to a
channel on a button that is not a direction, and at 60 units/s they are
0.167 s and 0.133 s -- about 7 moves a second, which does not match "a
medium pace, slow enough to see which item is selected". Reporting them as
the menu repeat would be the same read-a-config-infer-a-behaviour error
this correction is about.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jc4pciRArGHfxGGhEbwp5t
This commit is contained in:
sylph-decoder
2026-09-02 16:35:55 +00:00
parent dc5aa93f06
commit 6da9dac745

View File

@@ -102,3 +102,51 @@ It says nothing about layers above the decoder, and **nothing here has been
confirmed against a running capture**: no row may be labelled *measured*. The confirmed against a running capture**: no row may be labelled *measured*. The
obvious check is to hold a direction on a real menu and count cursor moves per obvious check is to hold a direction on a real menu and count cursor moves per
present. present.
## 🔴 Correction 2026-09-02 — there is a THIRD timed channel, and my "only two" was wrong
I wrote above: *"the only two timed inputs in the whole decoder are LB and LT."*
**That is false.** Chasing F1 I examined a counter block I had skipped, and found a
third timer on a different shape:
```
8220BB50 lwz r11,16(r31) ; this+0x10, a counter
8220BB5C addic. r11,r11,-1 ; decrements EVERY update
8220BB64 bne -> skip ; only when it reaches ZERO:
8220BB6C lwz r11,160(r31) ; cfg +0xA0
8220BB70 lwz r10,12(r10) ; ...against the HELD word
8220BBAC ori r11,r11,0x4 ; fires output bit 0x4
```
and it is re-armed from two more constants I had mis-read as button masks:
```
8220CB50 lwz r11,196(r31) ; +0xC4 = 10 -> this+0x10
8220CB58 lwz r11,200(r31) ; +0xC8 = 8 -> this+0x14
```
⚠️ **So `+0xC4` and `+0xC8` are TIMINGS, not masks.** My constructor table read
them as ring-word button sets (`B|Y` and `Y`) because 10 and 8 are legal masks.
They are counter reload values, exactly like `+0xB4`/`+0xBC` = 10. **A number that
is a valid mask and a valid duration cannot be told apart by its value — only by
its use**, and I classified these by value.
### What it does NOT change
**F1 is still not answered here.** This third channel is guarded by cfg `+0xA0`,
which is ring bit 1 — **B**, not a direction. The D-pad and left-stick paths still
carry **no counter**, so the finding stands where it matters:
> **A held DIRECTION has no repeat timer in `C_PAD_DECODER`.**
The human watched the real game and reports that a held direction *does* repeat.
Both can be true, and the caveat this page already carried is the reason:
**the repeat is in the layer above.** That is where F1 must be answered — the
consumer of `this+0x24C`, or a capture holding a direction on a real menu.
⚠️ **And I am not offering 10 and 8 as F1's two numbers.** They are this channel's
constants, on a button that is not a direction. At 60 units/s they would be
0.167 s and 0.133 s — about 7 moves a second, which does not match *"a medium
pace, slow enough to see which item is selected"*. Reporting them as the menu
repeat would be the same error as reading a config value and inferring a
behaviour, which is the error this correction is about.