"""Dump one mid-scene battle draw's effect program for honest inspection.""" import sys, os, struct, pickle HERE = os.path.dirname(os.path.abspath(__file__)) sys.path.insert(0, HERE); sys.path.insert(0, os.path.dirname(HERE)) sys.path.insert(0, r'C:\VWE\TeslaRel410\dpl3-revive\patha') import emu860, emu_main, emu860c from driver import boot, CpuShim from vrboard import A ANAME = {int(a): a.name for a in A} emu860.Mem.log = lambda self, *a, **k: None TARGET = int(sys.argv[2]) if len(sys.argv) > 2 else 6234 data = open(sys.argv[1], 'rb').read() recs=[]; off=0 while True: i=data.find(b'VPXM',off) if i<0: break ln=struct.unpack_from('=4: a=struct.unpack_from('=TARGET-1: # run this draw fully, capturing the program region after h(shim) while True: reason,_=emu860c.run(500_000_000) if reason==3: continue if emu860c.getstate()['pc']==RECV: break hh=r.hooks.get(emu860c.getstate()['pc']) if hh: hh(shim) else: break break if h: h(shim) prog={a:emu860c.r32(a) for a in range(0x08158000,0x08170000,4) if emu860c.r32(a)} pickle.dump({'prog':prog,'qi':r.qi}, open(os.path.join(HERE,'battle_prog.pkl'),'wb')) print("dumped %d prog cells at cmd %d"%(len(prog), r.qi))