From a remote user's NES→Genesis play-screen port feedback. Six items, all
verified (the two flagged "if you change one thing" are the first two):
- inspectBackgroundMap (NES render:false) now returns DECODED structured data
instead of a 4096-char CIRAM hex blob: `tiles` grid, `subPaletteGrid`
(per-tile BG sub-palette 0-3, decoded from the attribute table so the agent
never hand-decodes the 2-bit-per-16x16-block format), and `distinctTiles`.
New `decodeNametable()` in platforms/nes/ppu.js. Plus the scoping that was
asked for: `region:{x,y,w,h}` sub-rectangle, `attributesOnly:true` (smallest
payload), and `outputPath` to spill a full-screen decode to disk + return a
summary. The reported three-step "raw hex -> Python decode -> eyeball"
collapses to one call. (ppu.test.js +3 cases.)
- inspectPalette: NES `area:"bg"|"sprite"|"all"` + `subPalette:0-3` filters.
"confirm BG sub-palette 3" goes from 32 entries to 4 (~87% smaller). Swatch
PNG still shows the full set.
- pressButton: was holding for `frames` then stepping 1 more to release but
reporting `frames+1`, contradicting the documented default of 2. Now reports
`frames` (held) + `releaseFrames` + `framesStepped` honestly.
- loadMedia: omit `framebuffer` until a frame has run (the pre-boot default
e.g. 256x192 doesn't match real output e.g. 256x224 and misled dimension
routing); return a `framebufferNote` pointing at stepFrames instead.
- buildSource: strip the GCC -ftime-report timing table + LTO interprocedural
phase dump from the inline log/tail on SUCCESS (noise that crowded out the
linker-map/objcopy signal). Full untrimmed log still written to logPath;
nothing stripped on failure. (toolchain.denoise.test.js, 4 cases.)
All verified live through the MCP wire. Suite 372 -> 379, all green.