mirror of
https://github.com/a2-4am/passport-test-suite.git
synced 2025-04-21 20:37:13 +00:00
90 lines
2.0 KiB
Lua
90 lines
2.0 KiB
Lua
require "lfs"
|
|
|
|
infiles = {}
|
|
fileindex = 0
|
|
for f in lfs.dir(".") do
|
|
if f:match(".woz$") then
|
|
infiles[#infiles + 1] = f
|
|
end
|
|
end
|
|
table.sort(infiles)
|
|
|
|
function calc(line)
|
|
return line % 8 * 1024 + math.floor(line / 64) * 40 + math.floor((line%64) / 8) * 128 + 8192
|
|
end
|
|
|
|
function textcalc(line)
|
|
return calc(line * 8) - 8192 + 0x0400
|
|
end
|
|
|
|
function striphibitstring(a)
|
|
local b = ""
|
|
for i = 1, string.len(a) do
|
|
b = b .. string.char(a:byte(i) & 0x7f)
|
|
end
|
|
return b
|
|
end
|
|
|
|
mainmem = emu.item(manager:machine().devices[":ram"].items["0/m_pointer"]) -- always gets main memory
|
|
function getscreenline(i)
|
|
return striphibitstring(mainmem:read_block(textcalc(i), 40))
|
|
end
|
|
|
|
function getscreen()
|
|
local b = ""
|
|
for i = 0, 23 do
|
|
b = b .. getscreenline(i) .. "\n"
|
|
end
|
|
return b
|
|
end
|
|
|
|
function savescreen(outfile)
|
|
local h = io.open(outfile, "w")
|
|
h:write(getscreen())
|
|
h:close()
|
|
end
|
|
|
|
function createblankdsk(outfile)
|
|
local h = io.open(outfile, "wb")
|
|
for i = 1, 143360 do
|
|
h:write(0x00)
|
|
end
|
|
h:close()
|
|
end
|
|
|
|
state = "waiting_for_main_menu"
|
|
function driver()
|
|
if state == "waiting_for_main_menu" then
|
|
if getscreen():match("rack disk") then
|
|
fileindex = fileindex + 1
|
|
if fileindex > #infiles then
|
|
manager:machine():exit()
|
|
return
|
|
end
|
|
dsk, subcount = infiles[fileindex]:gsub(".woz$", ".dsk")
|
|
if subcount == 0 then
|
|
print("ERROR unable to parse filename")
|
|
return
|
|
end
|
|
print(infiles[fileindex])
|
|
createblankdsk(dsk)
|
|
manager:machine().images["flop1"]:load(infiles[fileindex])
|
|
manager:machine().images["flop2"]:load(dsk)
|
|
emu.keypost("C")
|
|
state = "waiting_for_process"
|
|
end
|
|
end
|
|
if state == "waiting_for_process" then
|
|
if getscreen():match("Press any key") then
|
|
log, subcount = infiles[fileindex]:gsub(".woz$", ".log")
|
|
savescreen(log)
|
|
emu.keypost(" ")
|
|
state = "waiting_for_main_menu"
|
|
end
|
|
end
|
|
end
|
|
|
|
manager:machine():video().frameskip = 10
|
|
manager:machine():video().throttled = false
|
|
emu.register_frame_done(driver)
|