mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-26 18:25:35 -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>
35 lines
1.2 KiB
Python
35 lines
1.2 KiB
Python
"""Check whether R/W/D-setup functions are dispatched in recomp."""
|
|
import socket, json
|
|
|
|
def call(d):
|
|
s = socket.create_connection(('127.0.0.1', 4370)); s.settimeout(15.0)
|
|
s.sendall((json.dumps(d) + '\n').encode())
|
|
buf = b''
|
|
while True:
|
|
try: c = s.recv(65536)
|
|
except socket.timeout: break
|
|
if not c: break
|
|
buf += c
|
|
depth=0; ins=False; esc=False
|
|
for b in buf:
|
|
if esc: esc=False; continue
|
|
if b==0x5C: esc=True; continue
|
|
if b==0x22: ins=not ins; continue
|
|
if ins: continue
|
|
if b==0x7B: depth+=1
|
|
elif b==0x7D: depth-=1
|
|
if depth==0 and buf.strip(): break
|
|
s.close()
|
|
return json.loads(buf.decode())
|
|
|
|
for pc, label in [
|
|
(0x000059A0, 'R-setup FUN_bfc159A0 (sets gate=0x02)'),
|
|
(0x00005A04, 'W-setup FUN_bfc15A04 (sets gate=0x04)'),
|
|
(0x00005AB8, 'D-setup FUN_bfc15AB8 (sets gate=0x08)'),
|
|
(0x00006524, 'SIO RX byte handler at PC 0x6524'),
|
|
(0x00006414, 'SIO callback area'),
|
|
(0x00006594, 'SIO callback area 2'),
|
|
]:
|
|
r = call({'id':1,'cmd':'dispatch_check','addr':f'0x{pc:08X}'})
|
|
print(f" 0x{pc:08X} {label}: in_ring={r.get('found')}")
|