🤖 Repo Assist here. I traced this to snap2tzx (the fuse-utils converter) — FUSE is not at fault. FUSE itself round-trips the Timex SCLD registers correctly: .z80 extended header stores out_scld_hsr / out_scld_dec (libspectrum z80.c, read ~L368-372, write ~L1410-1417). .szx stores them via the SCLD (ZXSTBID_TIMEXREGS) chunk (libspectrum szx.c). FUSE's peripherals/scld.c restores them on load (scld_from_snapshot, ~L241-251) and saves them on save (scld_to_snapshot, ~L280-287). The SCLD ports are 0xF4...
Fix ZX string token and graphics conversion (thanks, C.Born)
Add deparse tests for mixed-associativity at equal precedence
Replace magic display addresses with named constants
Add IY+d decimal-mode disassembler tests
Extend unittest to cover pokefinder incremented(), decremented(), and is_allocated()
Add HQ, AdvMAME, and NTSC4X scaler family test coverage
🤖 Repo Assist (automated assistant) here — focused investigation of this bug. I verified the current source against the discussion thread. The report and fredm's 2026-05-21 analysis both match the code: machine_reset() calls memory_pool_free() unconditionally at machine.c:344, for both hard and soft resets. module_reset(hard_reset) at machine.c:355 does thread the hard/soft flag to modules, but the pool is cleared before that. memory_pool_free() (memory_pages.c:255) frees every non-persistent pool...