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:
@@ -194,6 +194,25 @@ alternative is F=1, which gives back 12,288 B of RAM for +4.36 KB/s of wire.
|
||||
one extra SCSI command costs. **What is left of P6 is nothing** — 69.4's two
|
||||
unbuilt cases and 70.3's seek path are player work, not open questions.
|
||||
|
||||
Amended end of session 39: **P6d IS DONE — THE PLAYER SEEKS WITH SOUND ON IT —
|
||||
AND WHAT IT UNCOVERED IS AN ENCODER ITEM (FINDINGS 71).** `pg_aseek` rebuilds
|
||||
the lump index, the stream position, the remainder accumulator and the byte
|
||||
offset into the group, issues the second READ(10) 70.3 asked for, and re-arms
|
||||
channel 3 part way into the buffer: **132,162 B of spliced stream accounted for
|
||||
byte by byte in MAME's own capture**, across a branch at frame 37 that is
|
||||
deliberately *not* on a group boundary, in both chip configurations. 70.3's
|
||||
416.5 ms of silence is gone. **What replaces it is smaller and is not a player
|
||||
problem: the MSM6258's accumulator is an integrator with no leak, so a branch is
|
||||
a DC offset that does not decay** — −355 of 511 playing through (still −108 four
|
||||
seconds later, AC 0.00), an exact permanent −65 if the chip is STOPped and
|
||||
re-PLAYed. **A re-PLAY is 5.5x better and neither is zero.** The only fix that
|
||||
reaches zero is the ENCODER's: reset the predictor where a branch can land, and
|
||||
**resetting every frame makes all 119 of the container's branch points exact for
|
||||
0.33 dB**. That is a DLXP3 and it is now the cheapest open item in the tree. The
|
||||
seek also found a race that had passed this gate three times — `pg_ainit` waited
|
||||
on a *read-back* MTC and could start the scene one byte in, silently — which is
|
||||
71.2 and is fixed.
|
||||
|
||||
**THE COMPLETION TARGET IS M3, THE VERTICAL SLICE** (USER DECISION): one scene
|
||||
tree — a decision point, two outcomes, a death clip — with audio, streaming from
|
||||
a real SCSI volume on a stock 2 MB machine, playable. That is the point at which
|
||||
|
||||
Reference in New Issue
Block a user