"""Is the "$PSP" at DF 0xd800000 real structure, or another artifact? Checks: control addresses, interleave stability, longer dump, and whether the bytes actually parse as a PSP directory table.""" import sys, struct sys.path.insert(0,"/Users/user/src/tinygrad"); sys.path.insert(0,"/Users/user/dev/amd-psp-re/psp_out") from tinygrad import Device import regguard d=Device["AMD"]; adev=d.iface.dev_impl def rd(a): adev.wreg(14,a&0xffffffff); return adev.rreg(15) def bs(v): return struct.unpack('I',v&0xffffffff))[0] B=0xd800000 print("=== 1. regguard with tight + far controls ===") r=regguard.classify_read(rd,[B,B+4,B+0xc,B+0x10], controls=[B-0x1000,B+0x1000,B-0x10000,B+0x100000,0x0badf000]) for k,v in r.items(): print(" %-12s %s"%(hex(k) if isinstance(k,int) else k,v)) print("\n=== 2. interleave stability (stale latch?) ===") seq=[rd(B),rd(0x0badf000),rd(B),rd(B+4),rd(B),rd(0x16600),rd(B)] print(" B,bogus,B,B+4,B,THM,B =",[hex(x) for x in seq]) print(" B stable:",seq[0]==seq[2]==seq[4]==seq[6]) print("\n=== 3. dump 0x80 dwords from %#x ==="%B) dw=[rd(B+4*i) for i in range(0x80)] for i in range(0,0x80,8): print(" +%03x: %s"%(i*4," ".join("%08x"%x for x in dw[i:i+8]))) print("\n=== 4. does it parse as an AMD PSP directory? ===") raw=b"".join(struct.pack('len(raw): break t=raw[o]; sp=raw[o+1]; sz,=struct.unpack_from('