-- Does graphics PAGE 1 display at all in 256-colour mode, and under what -- priority? page0 <- 0 everywhere, page1 <- 0xC0 (white) everywhere. -- If page 0 composites on top TRANSPARENTLY, the screen should be white. M=manager.machine; SP=M.devices[":maincpu"].spaces["program"]; SUB=nil local function load_mode() for _,p in ipairs{"../tools/bench/crtc_mode.lua","tools/bench/crtc_mode.lua"} do local f=loadfile(p); if f then return f() end end error("no crtc_mode.lua") end local MODE = load_mode() local CRTC, GV, GPAL = 0xE80000, 0xC00000, 0xE82000 local function T() local t=M.time; return t.seconds+t.attoseconds/1e18 end local st,tp,n = "wait",nil,0 -- (label, VCReg1, VCReg2, page1 scrollX) local TRIALS = { {"vc1=0000 scroll384", 0x0000, 0x001F, 384}, {"vc1=0002 scroll384", 0x0002, 0x001F, 384}, {"vc1=06E4 scroll384", 0x06E4, 0x001F, 384}, {"vc1=0000 scroll0", 0x0000, 0x001F, 0}, {"vc1=0002 scroll0", 0x0002, 0x001F, 0}, {"vc1=0000 vc2=00FF", 0x0000, 0x00FF, 0}, } SUB = emu.add_machine_frame_notifier(function() local t=T() if st=="wait" then if t<3.0 then return end MODE.apply(SP) SP:write_u16(GPAL+0*2, 0x0000) -- index 0 = black SP:write_u16(GPAL+0xC0*2, 0xFFFF) -- index C0 = white -- buffer mode: one pass sets page0=0x00 and page1=0xC0 for every word SP:write_u16(CRTC+20*2, MODE.r20 | 0x0800) for y=0,255 do local base=GV+y*1024 for x=0,255 do SP:write_u16(base+x*2, 0xC000) end end SP:write_u16(CRTC+20*2, MODE.r20) st,tp="run",t elseif st=="run" and t>tp+0.30 then n = n + 1 if n > #TRIALS then print("[P1] done"); M:exit(); st="done"; return end local tr = TRIALS[n] SP:write_u16(0xE82500, tr[2]) SP:write_u16(0xE82600, tr[3]) SP:write_u16(CRTC+16*2, tr[4]); SP:write_u16(CRTC+18*2, tr[4]) print(string.format("[P1] trial %d: %s", n, tr[1])) tp = t st = "snap" elseif st=="snap" and t>tp+0.20 then M.video:snapshot(); st="run"; tp=t end end)