53 lines
1.6 KiB
Lua
53 lines
1.6 KiB
Lua
-- m4-check.lua -- load the M4 COFF with dwt/loader/loader.lua and read the
|
|
-- marker words written by unsigned.c.
|
|
--
|
|
-- M4_LOADER_LUA path to vendor/vt1200/dwt/loader/loader.lua
|
|
-- LOADER_END loader inspection/exit frame
|
|
--
|
|
-- The marker read runs one frame before loader.lua's inspection/exit frame.
|
|
-- Markers (0x20 bits apart):
|
|
-- 018A8000 le(5,7) == 1
|
|
-- 018A8020 ule(7,5) == 0 (unsigned <=)
|
|
-- 018A8040 sum_le(10) == 55
|
|
-- 018A8060 ge(7,5) == 1 (signed >=)
|
|
-- 018A8080 uge(5,7) == 0 (unsigned >=)
|
|
-- 018A80A0 gt(5,7) == 0 (signed >)
|
|
-- 018A80C0 ugt(7,5) == 1 (unsigned >)
|
|
-- 018A80E0 ne(7,5) == 1
|
|
-- 018A8100 lt(7,5) == 0 (signed <)
|
|
-- 018A8120 ult(5,7) == 1 (unsigned <)
|
|
|
|
dofile(os.getenv("M4_LOADER_LUA"))
|
|
|
|
local ENDF = tonumber(os.getenv("LOADER_END") or "2700")
|
|
|
|
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 m = {}
|
|
for i = 0, 9 do
|
|
m[i] = prog:read_u32(0x018A8000 + i * 0x20)
|
|
end
|
|
print(string.format(
|
|
"M4: le=%d ule=%d sum_le=%d ge=%d uge=%d gt=%d ugt=%d ne=%d lt=%d ult=%d",
|
|
m[0], m[1], m[2], m[3], m[4], m[5], m[6], m[7], m[8], m[9]))
|
|
local want = {1, 0, 55, 1, 0, 0, 1, 1, 0, 1}
|
|
local ok = true
|
|
for i = 0, 9 do
|
|
if m[i] ~= want[i + 1] then
|
|
ok = false
|
|
end
|
|
end
|
|
if ok then
|
|
print("M4 MAME: PASS")
|
|
else
|
|
print("M4 MAME: FAIL (want le=1 ule=0 sum_le=55 ge=1 uge=0 gt=0 ugt=1 ne=1 lt=0 ult=1)")
|
|
end
|
|
end
|
|
end, "m4-check")
|