45 lines
1.8 KiB
Lua
45 lines
1.8 KiB
Lua
-- 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")
|