-- m1-check.lua -- load the M1 COFF with dwt/loader/loader.lua and read the -- marker words the generated code wrote. -- -- M1_LOADER_LUA path to vendor/vt1200/dwt/loader/loader.lua -- M1_EXPECT_LOAD expected load() result (default 0x12345678) -- M1_EXPECT_SECOND expected &arr[1] in bits -- M1_EXPECT_LOADB expected sign-extended byte load (default 0xFFFFFF81) -- M1_EXPECT_STOREB expected byte store (default 0x81) -- -- The marker read runs one frame before loader.lua's inspection/exit frame. dofile(os.getenv("M1_LOADER_LUA")) local ENDF = tonumber(os.getenv("LOADER_END") or "2700") local EXPECT_LOAD = tonumber(os.getenv("M1_EXPECT_LOAD") or "0x12345678") local EXPECT_SECOND = tonumber(os.getenv("M1_EXPECT_SECOND") or "0x018A9020") local EXPECT_LOADB = tonumber(os.getenv("M1_EXPECT_LOADB") or "0xFFFFFF81") local EXPECT_STOREB = tonumber(os.getenv("M1_EXPECT_STOREB") or "0x81") local frames = 0 local checked = false emu.register_frame_done(function() frames = frames + 1 if frames == ENDF - 1 and not checked then checked = true local prog = manager.machine.devices[':maincpu'].spaces['program'] local add = prog:read_u32(0x018A8000) local load = prog:read_u32(0x018A8020) local second = prog:read_u32(0x018A8040) local loadb = prog:read_u32(0x018A8060) local storeb = prog:read_u8(0x018A8080) print(string.format( "M1: add=%d load=0x%08X second=0x%08X loadb=0x%08X storeb=0x%02X", add, load, second, loadb, storeb)) if add == 42 and load == EXPECT_LOAD and second == EXPECT_SECOND and loadb == EXPECT_LOADB and storeb == EXPECT_STOREB then print("M1 MAME: PASS") else print(string.format( "M1 MAME: FAIL (want add=42 load=0x%08X second=0x%08X loadb=0x%08X storeb=0x%02X)", EXPECT_LOAD, EXPECT_SECOND, EXPECT_LOADB, EXPECT_STOREB)) end end end, "m1-check")