Two sessions, unrecorded until now, committed together because their edits
share files and cannot be split cleanly after the fact.
Session 28 (FINDINGS 60): the container is DLX5 -- every record sector-aligned,
120/120 starting on a boundary where 3/120 did, +0.48% on the wire and zero
clocks -- and the ring's release rounds to RECALN so no pad is stranded. Two
encoder levers measured and refused: `--spans all` buys +0.19 dB for +67% of
the wire, and joint span/lam selection emits byte-identical containers because
`lam` never leaves its floor on any of 120 frames.
Session 29 (FINDINGS 61): the packed full-frame blit is 27.3% of a 12 fps
frame, a channel fills GVRAM in buffer mode off the disc with the CPU halted,
and it walks the 1,024 B line stride itself through array chaining. At the
9 clk/B dual-address floor the codec is 110.4% of a frame and a decoder-free
packed literal player is 55.2%, at +4.89 dB -- 2.75 dB past a ceiling the
codec's scene-wide palette cannot cross. Encoder work is parked; the codec is
kept and not built on.
check.sh is ALL GREEN before and after, plus one new stage that gates the ORDER
of the measured paint costs rather than their values.
Claude-Session: https://claude.ai/code/session_01194oWYW8DQXK1SZ2DnChW6
src/player/load.i expands both codebooks to word-per-pixel form and packs the
palette to GGGGGRRRRRBBBBBI out of the RAW container header, byte-exact against
tools/bench/dlxload.py on both CPU cores. The palette half is gated on words
read back out of the palette registers at $E82000, so "the words reached the
hardware" is part of what passes. ROADMAP P1 is done; P2's encoder half (a
reserved black entry, 23.4) is not, and is a re-encode rather than an edit.
A scene change costs 18.96 ms of 68000 time, 22.8% of one 12 fps frame; boot
costs 24.70 ms. The scratch tables describe the CRTC, not the scene, so
pal_tables is a separate entry point built once at boot -- 5.29 ms off every
scene change.
The one that moves something: the scene header is 5,920 B that no rate table in
this tree included, because it belongs to no frame record. In FINDINGS 51.3's
currency it is divided by the surplus pipe - wire, so it is hypersensitive:
138 ms of extra refill climb at 488 KB/s and 1.099 s at 451.4 KB/s, for the
same bytes. tools/analysis/22_scene_load.py prices it across explicit rates.
Recorded as open: the two CPU cores agree to <3% on every stage but the table
build, where they differ by 16.4%. px68k's C68K charges a flat 50 clocks for
MULU/MULS (c68kmacro.h:1869) where the 68000 charges 38+2n, which explains
4,608 of the 8,703 clock gap. 4,095 clocks are unexplained. Nothing else in
src/player/ multiplies, so no figure in FINDINGS 24-52 is affected.
decode.s and stream.s are untouched; decode.bin is still 1,296 B at the same
MD5. check.sh gains a stage that gates byte-exactness on both cores and
deliberately does not gate the cycle counts -- MAME's clock is 1/55.46 s and a
wall timing would make the green light host-sensitive.
Claude-Session: https://claude.ai/code/session_01194oWYW8DQXK1SZ2DnChW6