mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-26 10:19:47 -04:00
e88e9a0233
Before: only sector 0 read succeeded; sector ≥1 reads aborted at 2 bytes
because mc_flag was loaded from mc_slots[].flag on every 0x81 select but
never saved back. The clear in MC_CMD lived only in the working static, so
every reselect re-loaded the stale 0x08 ("new card / changed battery") init
value, and the BIOS bailed every multi-sector op as "card was just inserted,
re-init."
After: BIOS shell memcard menu reads the full 15-sector directory area for
both slots. Real save filenames decode (e.g. "BISLPS-01234SAVE00") and per
card icons render in the bottom panes — the Phase 4 success criterion.
Also bundled this session:
- debug_server: B9D0..B9F0 added to always-on wtrace ranges; fn_dump_parse
default window scoped to 1M most-recent entries (filter scans against the
full 128M ring used to freeze the debug server thread for many seconds).
- ISSUES.md + diagnostic tools/*.py written during the audit.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
27 lines
838 B
Python
27 lines
838 B
Python
"""Count fn_entry hits per func in the ring."""
|
|
import socket, json, sys
|
|
batch = int(sys.argv[1]) if len(sys.argv) > 1 else 10000
|
|
s = socket.create_connection(('127.0.0.1', 4370), timeout=600)
|
|
s.sendall((json.dumps({
|
|
'id': 1, 'cmd': 'fn_entry_dump',
|
|
'count': batch,
|
|
'seq_lo': '0', 'seq_hi': '999999999999',
|
|
'reverse': False,
|
|
}) + '\n').encode())
|
|
buf = b''
|
|
while True:
|
|
c = s.recv(65536)
|
|
if not c: break
|
|
buf += c
|
|
if buf.strip().endswith(b'}'):
|
|
try: json.loads(buf.decode()); break
|
|
except: continue
|
|
r = json.loads(buf.decode())
|
|
print(f"total={r.get('total')} oldest={r.get('oldest')} returned={len(r.get('entries', []))}")
|
|
hist = {}
|
|
for e in r.get('entries', []):
|
|
k = e['func']
|
|
hist[k] = hist.get(k, 0) + 1
|
|
for k in sorted(hist, key=lambda x: -hist[x]):
|
|
print(f" {k}: {hist[k]}")
|