M=manager.machine; CPU=M.devices[":maincpu"]; SP=CPU.spaces["program"] local f=io.open("sweep.bin","rb"); local d=f:read("a"); f:close() CODE={}; for i=1,#d do CODE[i]=string.byte(d,i) end STATE="wait" local function T() local t=M.time return t.seconds+t.attoseconds/1e18 end local function tick() local t=T() if STATE=="wait" then if t<5.0 then return end for i=1,#CODE do SP:write_u8(0x10000+i-1,CODE[i]) end SP:write_u32(0x18000,0) for i=0,31 do SP:write_u32(0x18100+i*4,0x5A5A5A5A) end CPU.state["SR"].value=0x2000; CPU.state["SP"].value=0x8000; CPU.state["PC"].value=0x10000 STATE="run"; print("[SW] injected") return end if STATE=="run" then local fl=SP:read_u32(0x18000) if fl==0xFF or t>25 then STATE="done" print("[SW] flag="..string.format("%X",fl)) for i=0,15 do local a=SP:read_u32(0x18100+i*8) local b=SP:read_u32(0x18100+i*8+4) print(string.format("[SW] PDA=%02X encA(<<24)=%08X encB(<<8)=%08X",0x80+i,a,b)) end M:exit() end end end SUB=emu.add_machine_frame_notifier(function() local ok,err=pcall(tick); if not ok then print("[SW] ERR "..tostring(err)); M:exit() end end)