function getPixel(x, y)
if x < 0 or x >= 160 or y < 0 or y >= 200 then
return -1
end
local addr = 0xC000 + (AND(y, 7) * 0x0800) + (AND(y, 0xF8) * 10) + SHR(x, 1)
if AND(x, 1) == 0 then
return AND(SHR(readMemory(addr), 1), 0x55)
end
return AND(readMemory(addr), 0x55)
end
function setPixel(x, y, c)
if x < 0 or x >= 160 or y < 0 or y >= 200 then
return
end
local addr = 0xC000 + (AND(y, 7) * 0x0800) + (AND(y, 0xF8) * 10) + SHR(x, 1)
if AND(x, 1) == 0 then
writeMemory(addr, AND(readMemory(addr), 0x55) + AND(c + c, 0xAA))
else
writeMemory(addr, AND(readMemory(addr), 0xAA) + AND(c, 0x55))
end
end
function floodFill(x, y, c0, c1)
c0 = AND(c0, 0x55)
if x < 0 or x >= 160 or y < 0 or y >= 200 or getPixel(x, y) ~= c0 then
return
end
local function floodFill_(x, y, c0, c1)
setPixel(x, y, c1)
if x < 159 and getPixel(x + 1, y) == c0 then
floodFill_(x + 1, y, c0, c1)
end
if y >= 1 and getPixel(x, y - 1) == c0 then
floodFill_(x, y - 1, c0, c1)
end
if x >= 1 and getPixel(x - 1, y) == c0 then
floodFill_(x - 1, y, c0, c1)
end
if y < 199 and getPixel(x, y + 1) == c0 then
floodFill_(x, y + 1, c0, c1)
end
end
floodFill_(x, y, c0, c1)
end
floodFill(0, 0, 0x50, 0x11)
floodFill(159, 199, 0x50, 0x11)
floodFill(0, 100, 0x50, 0x11)
floodFill(56, 12, 0x50, 0x11)
floodFill(56, 28, 0x50, 0x11)
floodFill(55, 66, 0x50, 0x11)
floodFill(84, 76, 0x50, 0x11)
floodFill(147, 81, 0x50, 0x11)
floodFill(4, 196, 0x50, 0x11)
floodFill(6, 155, 0x50, 0x11)