Put sound on the wire, and find three LSBs are worth 25 dB
ROADMAP P6, everything in the item except the bus half session 20 closed. tools/encoder/adpcm.py is an MSM6258 codec, tools/encoder/extract_audio.py takes the same seconds of the same stream the frames come from, tools/bench/verify_adpcm.py is the gate, tools/analysis/32_audio_wire.py the container arithmetic. There is no reference encoder -- ffmpeg has a decoder for this format and none the other way -- so what is gated is the decoder the encoder runs INSIDE its own nibble search, sample-exact against ffmpeg's over 4,268 nibbles. An encoder that agrees with its own wrong decoder is what that catches. The Singe window: 156,250 samples -> 78,125 B at 21.97 dB, which is 7,812.5 B/s to the byte. Normalising the disc's -13.4 dBFS level moves the SNR 21.97 -> 21.97, so the level is not a lever. And the two published delta formulas are not the same codec. They differ by at most 3 in 12-bit units; encode for one and decode on the other and the SNR goes 21.97 -> -2.88 dB, the noise louder than the signal, because ADPCM is recursive the way the video codec is temporally recursive. Which one the chip runs is now P6a and it is a precondition on shipping any audio. And audio is the first thing the packed branch's simplification has cost anything for. A record has no index BY DESIGN, so audio cannot be per-record without making records variable; it rides a fixed cadence (F, A), the obvious F=1 wastes 57.3% of every audio sector, and the pick is F=11 A=14 -- 0.09% padding, 14,336 B held, wire 582.0 -> 589.6 KB/s. The codec container, which kept its index, pays zero. The MAME experiment did not work and 65.5 says so: :okim6258 is there at $E92001/$E92003, read out of the machine's own program map, and feeding it from Lua recorded silence across control 0..3 x port C 0..15. The register semantics were not guessed at further. FINDINGS 65. check.sh ALL GREEN before and after, with a new stage. Claude-Session: https://claude.ai/code/session_01194oWYW8DQXK1SZ2DnChW6
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
-- Ask MAME what the x68000's ADPCM device is, and where the 68000 reaches it.
|
||||
-- FINDINGS 64.4 recorded that no MAME source tree is on this machine; this is
|
||||
-- the way to ask the same question without one.
|
||||
M = manager.machine
|
||||
local done = false
|
||||
SUB = emu.add_machine_frame_notifier(function()
|
||||
if done then return end
|
||||
done = true
|
||||
print("[AD] === devices whose tag looks like an ADPCM chip ===")
|
||||
for tag, dev in pairs(M.devices) do
|
||||
local t = tag:lower()
|
||||
if t:find("adpcm") or t:find("oki") or t:find("msm") or t:find("6258") then
|
||||
print(string.format("[AD] DEV %-24s shortname=%s", tag, tostring(dev.shortname)))
|
||||
end
|
||||
end
|
||||
local sp = M.devices[":maincpu"].spaces["program"]
|
||||
print("[AD] === program map, $E90000..$EA0000 ===")
|
||||
local ok, err = pcall(function()
|
||||
for _, e in ipairs(sp.map.entries) do
|
||||
if e.address_start >= 0xE90000 and e.address_start < 0xEA0000 then
|
||||
print(string.format("[AD] MAP %08X-%08X", e.address_start, e.address_end))
|
||||
end
|
||||
end
|
||||
end)
|
||||
if not ok then print("[AD] MAP unavailable: " .. tostring(err)) end
|
||||
print("[AD] done")
|
||||
M:exit()
|
||||
end)
|
||||
Reference in New Issue
Block a user