mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-26 10:19:47 -04:00
255d05e8e4
frame_fingerprint's wr column is an ordered hash over main-RAM writes. DMA and device writes (MDEC-out, CD, SPU, GPU->RAM) are recorded in host device-service order. Native shards flush cycles at every store barrier, while batched interpreted and static code services devices after the block. So identical guest writes gave a different wr forever after. - ws: an order-independent sum of a splitmix64 term per (addr, val) over main RAM. Together with wc it is the main-RAM judge column. wr and pc stay as ordered locators. - qc: fingerprint-eligible writes that FMV-quiet kept out. If a straddled write falls into a quiet frame in one run only, the cumulative columns never agree again, and qc is where that shows. - The accumulator moves to runtime/include/frame_fingerprint.h so the semantics are unit-tested (frame_fingerprint_test). - The JSON buffer is sized from the real maximum entry length (284 B), which the old 224 B per entry could overflow. docs/TCP_COMMANDS.md documents the column roles, the one-frame snapshot straddle and the FMV-quiet caveat (set PSX_DEBUG_FMV_QUIET=0 for A/B identity runs). Existing columns keep their meaning. Nothing outside debug-tools builds changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>