Take the player through a branch with sound, and find the predictor does not seek
FINDINGS 71, ROADMAP P6d. 70.3 named exactly what was missing -- packed.s starts PG_AK/PG_AKF at lump 0 and has no audio seek path -- and priced its absence at a mean 416.5 ms of silence over the arcade's 409 within-container seek targets. pg_aseek is that path: the lump index, the stream position, the remainder accumulator and the byte offset into the group, then the second READ(10) at the lump's own LBA and a re-arm part way into the buffer. Measured off a real volume: 132,162 B of spliced stream accounted for byte by byte in MAME's own capture, across a branch at frame 37 -- four frames into lump 3, deliberately NOT on a group boundary -- in both chip configurations. Skip computed 2,604 B, cadence says 2,604. THE PREDICTOR DOES NOT SEEK, AND THE ERROR IS DC. The MSM6258's accumulator is a pure integrator with no leakage term, so a branch that hands the chip bytes chosen for a state it is not in produces an offset that does not decay. Playing through: DC -355 of 511 with AC 0.00 -- the right shape from the wrong ground -- still -108 four seconds later. STOP and re-PLAY: all 62,500 post-seek samples are EXACTLY a decode from the container's own init, and the whole error is the single constant -65. A re-PLAY is 5.5x better and neither is zero, so PG_ARST is a mailbox with a number under it. The host computes -65 out of the container's bytes and the gate asserts the equality rather than printing both. AND THE ONLY FIX THAT REACHES ZERO IS THE ENCODER'S. A player cannot set the chip's accumulator, only reset it. Resetting the encoder's predictor every frame makes all 119 of the container's branch points exact for 0.33 dB (21.99 -> 21.66), because the step table's floor is a constant 16. That is a DLXP3 and it is deliberately not in tools/encoder. TWO SILENT BUGS, BOTH CAUGHT BY THE CAPTURE. pg_udiv32 trashes d4 and pg_aseek held hz there, so the offset came out 1 byte instead of 2,604 -- 166 ms of the wrong part of the scene at exactly the right rate, every counter agreeing. And one already in the tree that had passed this gate three times: pg_ainit waited on a READ-BACK MTC before PLAY, which is the same test as "a byte has left RAM" only if no byte leaves in between. One does, and the chip then plays the scene one byte in, forever. Found by locating the capture's opening samples in the container image: sector 1 + 1. The witness is now the count that was written. ALL GREEN, two new stages included. Claude-Session: https://claude.ai/code/session_01194oWYW8DQXK1SZ2DnChW6
This commit is contained in:
+36
-1
@@ -770,7 +770,7 @@ echo "--- session 36: THE CONTAINER'S OWN AUDIO, OUT OF THE CHIP (FINDINGS 68) -
|
||||
# The run is part of packed_run.sh's gate half, so DLX_PK_GATE_ONLY takes it.
|
||||
if [ -f tmp/packed_gate_stage.log ] && \
|
||||
grep -aq -- "--- 5. THE AUDIO" tmp/packed_gate_stage.log; then
|
||||
sed -n '/--- 5. THE AUDIO/,$p' tmp/packed_gate_stage.log | \
|
||||
sed -n '/--- 5. THE AUDIO/,/--- 7. THE SEEK/p' tmp/packed_gate_stage.log | \
|
||||
grep -aE "^(OK|FAIL) |^ AUDIO:|^ {5}(nibbles per|worst|payload|-> |the player)"
|
||||
else
|
||||
echo " SKIPPED: no x68000 romset, or the container is silent"
|
||||
@@ -846,6 +846,41 @@ python3 tools/analysis/35_audio_level.py --gate > tmp/audio_level.log 2>&1 \
|
||||
grep -aE "DISC PEAK|LOUDEST PASSAGE|THE CLAMP|LEVEL GATE|NO AUDIO TRACK|^ 1\.0000|^ 0\.5" \
|
||||
tmp/audio_level.log
|
||||
|
||||
echo "--- session 39: THE SEEK, on the machine, with sound across it (FINDINGS 71) ---"
|
||||
# Run 7 of packed_run.sh, split out of the same log for the same reason session
|
||||
# 36's stage is split out of it: three verifiers in one file all emit OK lines,
|
||||
# and one grep over the whole thing prints this session's result under session
|
||||
# 31's heading.
|
||||
if [ -f tmp/packed_gate_stage.log ] && \
|
||||
grep -aq -- "--- 7. THE SEEK" tmp/packed_gate_stage.log; then
|
||||
sed -n '/--- 7. THE SEEK/,$p' tmp/packed_gate_stage.log | \
|
||||
grep -aE "^(OK|FAIL) |^ {4}-- the chip|^ {5}(the chip was|error against|-> )|DC +-?[0-9.]+ +AC"
|
||||
else
|
||||
echo " SKIPPED: no x68000 romset, or the container is silent"
|
||||
fi
|
||||
|
||||
echo "--- session 39: the audio seek path, run across a real branch (FINDINGS 71) ---"
|
||||
# ROADMAP P6d, and it is the item session 38's handoff put first: 70.3 named
|
||||
# what was missing -- "src/player/packed.s starts PG_AK/PG_AKF at lump 0 and has
|
||||
# no audio seek path at all" -- and priced its absence at a mean 416.5 ms of
|
||||
# silence over the arcade's 409 within-container seek targets.
|
||||
#
|
||||
# The MACHINE half of this is run 7 of tools/bench/packed_run.sh, above: two
|
||||
# passes over the container with the second starting at frame 37, which is four
|
||||
# frames into lump 3 and therefore NOT on a group boundary, so the byte offset
|
||||
# inside the lump is load-bearing. It runs in both chip configurations.
|
||||
#
|
||||
# THIS STAGE IS THE HOST HALF, and what it adds is the census the one branch
|
||||
# point on the machine cannot give. The chip's accumulator is an integrator with
|
||||
# NO LEAKAGE TERM, so the state error a branch creates is a DC offset that never
|
||||
# decays -- and the only fix that makes a branch free is in the ENCODER, not the
|
||||
# player. Both are priced here, and section 1 checks the host's arithmetic for
|
||||
# the machine's own branch point against what MAME's capture measured.
|
||||
python3 tools/analysis/37_audio_seek.py > tmp/audio_seek.log 2>&1 \
|
||||
|| { cat tmp/audio_seek.log; exit 1; }
|
||||
grep -aE "^(OK|FAIL) |RE-PLAYED BRANCH|\|DC\| against|step index the encoder|frame 37, the branch|reset every|never \(shipped\)|frames \(the cadence\)|1 frame |ONLY FIX" \
|
||||
tmp/audio_seek.log
|
||||
|
||||
echo "--- session 38: the refill climb with a second consumer, through a real branch point (FINDINGS 70) ---"
|
||||
# ROADMAP P6, the oldest item in it: 65.6 and 67.6 both recorded that the slack
|
||||
# table existed and that 51.3's climb had never met a branch point with audio on
|
||||
|
||||
Reference in New Issue
Block a user