fix(attract): restore all remainder-driven cycles

The same raw Div32 pattern used by the item animation appears in every nested
idle phase: after division by 32, 40, or 16, the binary copies the remainder
from CX:BX before the second division. Readable C and Rust used quotients for
targets, word quads, the record strip, and the four-point chase, turning short
repeating chases into slow one-shot progressions.

Use `%32/2`, `%32/4`, `%40/4`, and `%16/4` for those cycles alongside the
already corrected `%144/8` items. Preserve the first-cycle phase-zero delay,
then repeat each incremental overlay state exactly. Add C and Rust coverage at
phase activation, reversal, deactivation, and wrap boundaries.

Test Plan:
- raw instruction review at `1000:01b7-063b` -- all remainder transfers confirmed
- `cargo test --workspace --all-targets --all-features` -- 125 passed
- `cargo clippy --workspace --all-targets --all-features -- -D warnings` -- passed
- `bash original/tools/test_reconstructed_c.sh` -- passed
- `python3 original/tools/audit_reconstruction.py --require-complete` -- passed with zero incomplete or unclassified units
- `cargo run -- --simulate attract --step 145 --screenshot /tmp/tdkpin-attract-remainder.png` -- passed; visually inspected at 640x460
- `rumdl check --flavor commonmark RECONSTRUCTION.md CHANGELOG.md` -- passed
- `git diff --cached --check` -- passed
This commit is contained in:
2026-08-23 20:53:12 +02:00
parent dd0299c30b
commit 7633ef9990
7 changed files with 82 additions and 39 deletions
+6 -5
View File
@@ -94,11 +94,12 @@ Wine record-57 transition `(75530,354765)/(3000,15)` to
`(77369,356597)/(1839,1832)` with exact Real48 spin `-5.28`, plus record 72
`(235348,356825)/(-3000,15)` to `(233253,358494)/(-2095,1669)` with spin
`+5.46`, seal both paths and both relative slingshot chains.
Raw `1000:061c-063b` further distinguishes the DOS divide outputs in the idle
item animation: it copies the remainder of `tick / 144` from `CX:BX` and then
divides that value by 8. The readable C and focused timer harness therefore use
`(tick % 144) / 8`, producing the repeating `0,1..9,8..1` sequence without the
previously inferred unbounded quotient.
Raw `1000:01b7-063b` further distinguishes the DOS divide outputs throughout
the idle animation: each nested phase copies the first division's remainder
from `CX:BX` before its second division. The readable C and focused timer
harness therefore use target `%32/2`, word-quad `%32/4`, record-strip `%40/4`,
four-point `%16/4`, and item `%144/8` cycles. This produces the repeating
animation rather than the previously inferred unbounded quotients.
## Reproducible gates