Files
psxrecomp/tools/check_vectors2.py
T
Matthew Stanley e88e9a0233 phase 4: fix mc_flag persistence so multi-sector card reads work
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>
2026-05-03 16:43:07 -07:00

38 lines
1.2 KiB
Python

"""Dump A0/B0/C0 dispatchers and shell trampoline RAM contents."""
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
if buf.count(b'{') == buf.count(b'}') and buf.strip(): break
s.close()
return json.loads(buf.decode())
def read(addr, n):
r = call({'id': 1, 'cmd': 'read_ram', 'addr': f'0x{addr:08X}', 'len': n})
return r.get('hex', '')
print('A0 dispatcher at RAM 0x5C4 (=ROM BFC100C4):')
print(' ', read(0x800005C4, 64))
print()
print('B0 dispatcher at RAM 0x5E0 (=ROM BFC100E0):')
print(' ', read(0x800005E0, 64))
print()
print('A0 table at RAM 0x874 (full first 0x100 = 64 entries):')
for off in range(0, 0x100, 16):
print(f' +{off:04X}:', read(0x80000874 + off, 16))
print()
print('B0 table at RAM 0x?? -- check via B0 dispatcher')
print()
print('Shell pad-state region [0x80079CB4..]:')
print(' ', read(0x80079CB4, 32))
print()
print('Card state structure 0x74C4..:')
print(' ', read(0x800074C4, 16))