mirror of
https://github.com/Adorable-Catgirl/Zorya-NEO.git
synced 2024-11-23 10:48:06 +11:00
I've finally split up the BIOS a bit.
This commit is contained in:
parent
ea6e5da1c3
commit
3c18756141
@ -1,5 +0,0 @@
|
|||||||
os.execute("mkdir -p pkg")
|
|
||||||
os.execute("rm -rf pkg/*")
|
|
||||||
|
|
||||||
os.execute("mkdir -p release")
|
|
||||||
os.execute("rm -rf release/*")
|
|
92
.buildactions/02_lzss.lua
Normal file
92
.buildactions/02_lzss.lua
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
local M = {}
|
||||||
|
local string, table = string, table
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
local POS_BITS = 12
|
||||||
|
local LEN_BITS = 16 - POS_BITS
|
||||||
|
local POS_SIZE = 1 << POS_BITS
|
||||||
|
local LEN_SIZE = 1 << LEN_BITS
|
||||||
|
local LEN_MIN = 3
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
function M.compress(input)
|
||||||
|
local offset, output = 1, {}
|
||||||
|
local window = ''
|
||||||
|
|
||||||
|
local function search()
|
||||||
|
for i = LEN_SIZE + LEN_MIN - 1, LEN_MIN, -1 do
|
||||||
|
local str = string.sub(input, offset, offset + i - 1)
|
||||||
|
local pos = string.find(window, str, 1, true)
|
||||||
|
if pos then
|
||||||
|
return pos, str
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
while offset <= #input do
|
||||||
|
local flags, buffer = 0, {}
|
||||||
|
|
||||||
|
for i = 0, 7 do
|
||||||
|
if offset <= #input then
|
||||||
|
local pos, str = search()
|
||||||
|
if pos and #str >= LEN_MIN then
|
||||||
|
local tmp = ((pos - 1) << LEN_BITS) | (#str - LEN_MIN)
|
||||||
|
buffer[#buffer + 1] = string.pack('>I2', tmp)
|
||||||
|
else
|
||||||
|
flags = flags | (1 << i)
|
||||||
|
str = string.sub(input, offset, offset)
|
||||||
|
buffer[#buffer + 1] = str
|
||||||
|
end
|
||||||
|
window = string.sub(window .. str, -POS_SIZE)
|
||||||
|
offset = offset + #str
|
||||||
|
else
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if #buffer > 0 then
|
||||||
|
output[#output + 1] = string.char(flags)
|
||||||
|
output[#output + 1] = table.concat(buffer)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return table.concat(output)
|
||||||
|
end
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
function M.decompress(input)
|
||||||
|
local offset, output = 1, {}
|
||||||
|
local window = ''
|
||||||
|
|
||||||
|
while offset <= #input do
|
||||||
|
local flags = string.byte(input, offset)
|
||||||
|
offset = offset + 1
|
||||||
|
|
||||||
|
for i = 1, 8 do
|
||||||
|
local str = nil
|
||||||
|
if (flags & 1) ~= 0 then
|
||||||
|
if offset <= #input then
|
||||||
|
str = string.sub(input, offset, offset)
|
||||||
|
offset = offset + 1
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if offset + 1 <= #input then
|
||||||
|
local tmp = string.unpack('>I2', input, offset)
|
||||||
|
offset = offset + 2
|
||||||
|
local pos = (tmp >> LEN_BITS) + 1
|
||||||
|
local len = (tmp & (LEN_SIZE - 1)) + LEN_MIN
|
||||||
|
str = string.sub(window, pos, pos + len - 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
flags = flags >> 1
|
||||||
|
if str then
|
||||||
|
output[#output + 1] = str
|
||||||
|
window = string.sub(window .. str, -POS_SIZE)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return table.concat(output)
|
||||||
|
end
|
||||||
|
|
||||||
|
local lzss = M
|
@ -1,20 +1,8 @@
|
|||||||
local function make_platform(plat)
|
|
||||||
os.execute("mkdir -p pkg/bios")
|
|
||||||
print("Making "..plat..".bios")
|
|
||||||
os.execute("luacomp src/loader.lua -O pkg/bios/"..plat..".bios")
|
|
||||||
--os.execute("ZY_PLATFORM="..plat.." luacomp src/loader.lua -O pkg/bios/"..plat..".bios")
|
|
||||||
print("ZY_PLATFORM="..plat.."luacomp src/loader.lua -O pkg/bios/"..plat..".bios")
|
|
||||||
print("[[ $".."(stat --printf=%s pkg/bios/"..plat..".bios) > 4096 ]]")
|
|
||||||
if (os.execute("[[ $".."(stat --printf=%s pkg/bios/"..plat..".bios) > 4096 ]]")) then
|
|
||||||
io.stderr:write("WARNING: "..plat.." bios is over 4KiB!\n")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function mkplat(plat)
|
local function mkplat(plat)
|
||||||
local h = io.popen("luacomp src/loader.lua")
|
local h = io.popen("luacomp src/loader.lua")
|
||||||
local loader = h:read("*a")
|
local loader = h:read("*a")
|
||||||
h:close()
|
h:close()
|
||||||
local h = io.popen("ZY_PLATFORM="..plat.." luacomp src/zy-neo/zinit.lua -mluamin | lua5.3 utils/makezbios.lua")
|
local h = io.popen("ZY_PLATFORM="..plat.." luacomp src/zy-neo/neoinit.lua | lua5.3 utils/makezbios.lua")
|
||||||
local dat = h:read("*a")
|
local dat = h:read("*a")
|
||||||
h:close()
|
h:close()
|
||||||
os.execute("mkdir -p pkg/bios")
|
os.execute("mkdir -p pkg/bios")
|
||||||
@ -42,7 +30,26 @@ function actions.osdi_bios()
|
|||||||
mkplat("osdi")
|
mkplat("osdi")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function actions.bootstrap()
|
||||||
|
--os.execute("luacomp src/zy-neo/zinit.lua | lua5.3 utils/makezbios.lua > pkg/bios/bootstrap.bin")
|
||||||
|
local h = io.popen("luacomp src/zy-neo/zinit.lua")
|
||||||
|
local dat = h:read("*a")
|
||||||
|
h:close()
|
||||||
|
local h = io.open("pkg/bios/bootstrap.bin", "wb")
|
||||||
|
h:write(lzss.compress(dat))
|
||||||
|
h:close()
|
||||||
|
end
|
||||||
|
|
||||||
|
function actions.bios()
|
||||||
|
actions.managed_bios()
|
||||||
|
actions.initramfs_bios()
|
||||||
|
actions.prom_bios()
|
||||||
|
actions.osdi_bios()
|
||||||
|
actions.bootstrap()
|
||||||
|
end
|
||||||
|
|
||||||
actions[#actions+1] = "managed_bios"
|
actions[#actions+1] = "managed_bios"
|
||||||
actions[#actions+1] = "initramfs_bios"
|
actions[#actions+1] = "initramfs_bios"
|
||||||
actions[#actions+1] = "prom_bios"
|
actions[#actions+1] = "prom_bios"
|
||||||
actions[#actions+1] = "osdi_bios"
|
actions[#actions+1] = "osdi_bios"
|
||||||
|
actions[#actions+1] = "bootstrap"
|
@ -2,4 +2,10 @@ function actions.clean()
|
|||||||
print("Cleaning up...")
|
print("Cleaning up...")
|
||||||
--os.execute("rm -rf .docs")
|
--os.execute("rm -rf .docs")
|
||||||
--os.execute("rm -rf .ktmp")
|
--os.execute("rm -rf .ktmp")
|
||||||
|
os.execute("mkdir -p pkg")
|
||||||
|
os.execute("rm -rf pkg/*")
|
||||||
|
|
||||||
|
os.execute("mkdir -p release")
|
||||||
|
os.execute("rm -rf release/*")
|
||||||
|
|
||||||
end
|
end
|
@ -3,7 +3,8 @@ tty = {}
|
|||||||
do
|
do
|
||||||
local gpu = component.proxy(component.list("gpu")())
|
local gpu = component.proxy(component.list("gpu")())
|
||||||
if not gpu.getScreen() then
|
if not gpu.getScreen() then
|
||||||
gpu.bind(component.list("screen")())
|
local saddr = component.list("screen")()
|
||||||
|
gpu.bind(saddr)
|
||||||
end
|
end
|
||||||
local gfg = -1
|
local gfg = -1
|
||||||
local gbg = -1
|
local gbg = -1
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
--#include "src/lzss.lua"
|
--#include "src/lzss.lua"
|
||||||
return assert(load(lzss_decompress(%s), "=bios.lua"))(lzss_decompress)
|
return assert(load(lzss_decompress(%s), "=BOOTSTRAP.lua"))(lzss_decompress)
|
@ -1,4 +1,4 @@
|
|||||||
function lzss_decompress(a)local b,c,d,e,j,i,h,g=1,'',''while b<=#a do
|
local function lzss_decompress(a)local b,c,d,e,j,i,h,g=1,'',''while b<=#a do
|
||||||
e=c.byte(a,b)b=b+1
|
e=c.byte(a,b)b=b+1
|
||||||
for k=0,7 do h=c.sub
|
for k=0,7 do h=c.sub
|
||||||
g=h(a,b,b)if e>>k&1<1 and b<#a then
|
g=h(a,b,b)if e>>k&1<1 and b<#a then
|
||||||
|
@ -23,7 +23,7 @@ local bootfs = cproxy(baddr)
|
|||||||
assert(bootfs.exists(".zy2/image.tsar"), "No boot image!")
|
assert(bootfs.exists(".zy2/image.tsar"), "No boot image!")
|
||||||
|
|
||||||
local romfs_file = assert(bootfs.open(".zy2/image.tsar", "rb"))
|
local romfs_file = assert(bootfs.open(".zy2/image.tsar", "rb"))
|
||||||
local rfs = utils.readfile(bootfs, romfs_file)
|
local rfs = readfile(bootfs, romfs_file)
|
||||||
|
|
||||||
--[[local romfs_dev = tsar.read(function(a)
|
--[[local romfs_dev = tsar.read(function(a)
|
||||||
local c = ""
|
local c = ""
|
||||||
@ -65,7 +65,7 @@ end
|
|||||||
|
|
||||||
function bfs.getcfg()
|
function bfs.getcfg()
|
||||||
local h = assert(bootfs.open(".zy2/cfg.lua", "r"))
|
local h = assert(bootfs.open(".zy2/cfg.lua", "r"))
|
||||||
return utils.readfile(bootfs, h)
|
return readfile(bootfs.address, h)
|
||||||
end
|
end
|
||||||
|
|
||||||
bfs.addr = baddr
|
bfs.addr = baddr
|
@ -53,7 +53,7 @@ end
|
|||||||
|
|
||||||
function bfs.getcfg()
|
function bfs.getcfg()
|
||||||
local h = assert(bootfs.open(".zy2/cfg.lua", "r"))
|
local h = assert(bootfs.open(".zy2/cfg.lua", "r"))
|
||||||
return utils.readfile(bootfs, h)
|
return readfile(bootfs.address, h)
|
||||||
end
|
end
|
||||||
|
|
||||||
bfs.addr = baddr
|
bfs.addr = baddr
|
@ -8,7 +8,7 @@ local bootfs = cproxy(baddr)
|
|||||||
--find active partition
|
--find active partition
|
||||||
local bs, p, t, ss = bootfs.readSector(1), "I4I4c8I3c13", {}
|
local bs, p, t, ss = bootfs.readSector(1), "I4I4c8I3c13", {}
|
||||||
for i=1, 15 do
|
for i=1, 15 do
|
||||||
t = {p:unpack(bs:sub((i*32)+1, (i+1)*32))}
|
t = {sunpack(p, bs:sub((i*32)+1, (i+1)*32))}
|
||||||
if (t[4] & 0x200 and t[4] & 0x40) then
|
if (t[4] & 0x200 and t[4] & 0x40) then
|
||||||
ss = t[1]
|
ss = t[1]
|
||||||
end
|
end
|
||||||
|
@ -9,7 +9,7 @@ end
|
|||||||
function romfs.read(read, seek, close)
|
function romfs.read(read, seek, close)
|
||||||
local sig = read(7)
|
local sig = read(7)
|
||||||
assert(sig, "Read error!")
|
assert(sig, "Read error!")
|
||||||
if sig ~= "romfs\1\0" then error(string.format("Invalid romfs (%.14x != %.14x)", string.unpack("i7", sig), string.unpack("i7", "romfs\1\0"))) end
|
if sig ~= "romfs\1\0" then error(string.format("Invalid romfs (%.14x != %.14x)", sunpack("i7", sig), sunpack("i7", "romfs\1\0"))) end
|
||||||
local tbl = {}
|
local tbl = {}
|
||||||
local lname
|
local lname
|
||||||
while lname ~= "TRAILER!!!" do
|
while lname ~= "TRAILER!!!" do
|
||||||
|
@ -7,13 +7,14 @@ local function get_end(e)
|
|||||||
end
|
end
|
||||||
local function read_header(dat)
|
local function read_header(dat)
|
||||||
local e = get_end(en)
|
local e = get_end(en)
|
||||||
local m = string.unpack(e.."I2", dat)
|
local m = sunpack(e.."I2", dat)
|
||||||
if m ~= magic and m ~= magic_rev then return nil, string.format("bad magic (%.4x)", m) end
|
if m ~= magic and m ~= magic_rev then return nil, string.format("bad magic (%.4x)", m) end
|
||||||
if m ~= magic then
|
if m ~= magic then
|
||||||
e = get_end(not en)
|
e = get_end(not en)
|
||||||
end
|
end
|
||||||
local ent = {}
|
local ent = {}
|
||||||
ent.magic, ent.namesize, ent.mode, ent.uid, ent.gid, ent.filesize, ent.mtime = string.unpack(e..header_fmt, dat)
|
ent.magic, ent.namesize, ent.mode, ent.uid, ent.gid, ent.filesize, ent.mtime = sunpack(e..header_fmt, dat)
|
||||||
|
ent.mtime = ent.mtime/1000
|
||||||
return ent
|
return ent
|
||||||
end
|
end
|
||||||
|
|
||||||
|
57
src/zy-neo/neoinit.lua
Normal file
57
src/zy-neo/neoinit.lua
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
-- I am an idiot.
|
||||||
|
local decompress = ...
|
||||||
|
local krq = krequire
|
||||||
|
local sunpack = string.unpack
|
||||||
|
local ct, cr = component, computer
|
||||||
|
|
||||||
|
-- I now must debug every fucking thing.
|
||||||
|
@[[if svar.get("DEBUG") then]]
|
||||||
|
do
|
||||||
|
local cinvoke, clist, cproxy = ct.invoke, ct.list, ct.proxy
|
||||||
|
function component.invoke(addr, meth, ...)
|
||||||
|
cinvoke(clist("ocemu")(), "log", addr, meth, ..., debug.getinfo(2).source, debug.getinfo(2).linedefined)
|
||||||
|
return cinvoke(addr, meth, ...)
|
||||||
|
end
|
||||||
|
|
||||||
|
function component.proxy(addr)
|
||||||
|
local proxy = cproxy(addr)
|
||||||
|
return setmetatable({}, {__index=function(_, i)
|
||||||
|
if proxy[i] then
|
||||||
|
return function(...)
|
||||||
|
cinvoke(clist("ocemu")(), "log", addr, i, ..., debug.getinfo(3).source, debug.getinfo(3).linedefined)
|
||||||
|
return proxy[i](...)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
@[[end]]
|
||||||
|
local cinvoke, clist, cproxy = ct.invoke, ct.list, ct.proxy
|
||||||
|
|
||||||
|
local function readfile(f,h)
|
||||||
|
local b=""
|
||||||
|
local d,r=cinvoke(f,"read",h,math.huge)
|
||||||
|
if not d and r then error(r)end
|
||||||
|
b=d
|
||||||
|
while d do
|
||||||
|
local d,r=cinvoke(f,"read",h,math.huge)
|
||||||
|
b=b..(d or "")
|
||||||
|
if(not d)then break end
|
||||||
|
end
|
||||||
|
cinvoke(f,"close",h)
|
||||||
|
return b
|
||||||
|
end
|
||||||
|
|
||||||
|
--#include "src/zy-neo/builtins/util_tsar.lua"
|
||||||
|
@[[if not svar.get("ZY_PLATFORM") then]]
|
||||||
|
--#define "ZY_PLATFORM" "managed"
|
||||||
|
@[[end]]
|
||||||
|
--#include @[{"src/zy-neo/builtins/init_"..svar.get("ZY_PLATFORM").."/init.lua"}]
|
||||||
|
--component.invoke(component.list("sandbox")(), "log", "test")
|
||||||
|
if not bfs.exists("bootstrap.bin") then
|
||||||
|
error("No bootstrap.bin!")
|
||||||
|
end
|
||||||
|
local raw = bfs.getfile("bootstrap.bin")
|
||||||
|
local code = decompress(raw)
|
||||||
|
--component.invoke(component.list("sandbox")(), "log", code or "<null>")
|
||||||
|
assert(load(code, "=bootstrap.bin"))(decompress, tsar, bfs, readfile)
|
@ -1,8 +1,12 @@
|
|||||||
local utils = {}
|
local utils = {}
|
||||||
|
@[[if svar.get("DEBUG") then]]
|
||||||
function utils.debug_log(...)
|
function utils.debug_log(...)
|
||||||
local sb = clist("sandbox")() or clist("ocemu")()
|
local sb = clist("sandbox")() or clist("ocemu")()
|
||||||
if (sb) then cinvoke(sb, "log", ...) end
|
if (sb) then cinvoke(sb, "log", ...) end
|
||||||
end
|
end
|
||||||
|
@[[else]]
|
||||||
|
function utils.debug_log()end
|
||||||
|
@[[end]]
|
||||||
|
|
||||||
--[[function utils.baddr(address)
|
--[[function utils.baddr(address)
|
||||||
local address = address:gsub("-", "", true)
|
local address = address:gsub("-", "", true)
|
||||||
@ -13,19 +17,7 @@ end
|
|||||||
return b
|
return b
|
||||||
end]]
|
end]]
|
||||||
|
|
||||||
function utils.readfile(f,h)
|
utils.readfile = readfile
|
||||||
local b=""
|
|
||||||
local d,r=cinvoke(f,"read",h,math.huge)
|
|
||||||
if not d and r then error(r)end
|
|
||||||
b=d
|
|
||||||
while d do
|
|
||||||
local d,r=cinvoke(f,"read",h,math.huge)
|
|
||||||
b=b..(d or "")
|
|
||||||
if(not d)then break end
|
|
||||||
end
|
|
||||||
cinvoke(f,"close",h)
|
|
||||||
return b
|
|
||||||
end
|
|
||||||
|
|
||||||
utils.load_lua = load_lua
|
utils.load_lua = load_lua
|
||||||
|
|
||||||
@ -39,10 +31,10 @@ function utils.deepcopy(src, dest)
|
|||||||
local cout = {dest}
|
local cout = {dest}
|
||||||
while #cin > 0 do
|
while #cin > 0 do
|
||||||
for k, v in pairs(cin[1]) do
|
for k, v in pairs(cin[1]) do
|
||||||
if (type(v) ~= "table") then
|
if type(v) ~= "table" then
|
||||||
cout[1][k] = v
|
cout[1][k] = v
|
||||||
else
|
else
|
||||||
if (coppied[v]) then
|
if coppied[v] then
|
||||||
cout[1][k] = coppied[v]
|
cout[1][k] = coppied[v]
|
||||||
else
|
else
|
||||||
local t = {}
|
local t = {}
|
||||||
@ -62,29 +54,29 @@ end
|
|||||||
local velx_header = "<c5BBBBc4I3I3I3I4"
|
local velx_header = "<c5BBBBc4I3I3I3I4"
|
||||||
function utils.load_velx(read, seek, close, name)
|
function utils.load_velx(read, seek, close, name)
|
||||||
-- Load a VELX format library.
|
-- Load a VELX format library.
|
||||||
local magic, fver, compression, lver, osid, arctype, psize, lsize, ssize, rsize = string.unpack(velx_header, read(string.packsize(velx_header)))
|
local magic, fver, compression, lver, osid, arctype, psize, lsize, ssize, rsize = sunpack(velx_header, read(string.packsize(velx_header)))
|
||||||
if (magic ~= "\27VelX") then
|
if magic ~= "\27VelX" then
|
||||||
return nil, "bad magic ("..magic..")"
|
return nil, "bad magic ("..magic..")"
|
||||||
end
|
end
|
||||||
if (osid & 0x7F ~= 0x5A) then
|
if osid & 0x7F ~= 0x5A then
|
||||||
return nil, string.format("wrong os (%x ~= 0x5A)", osid & 0x7F)
|
return nil, string.format("wrong os (%x ~= 0x5A)", osid & 0x7F)
|
||||||
end
|
end
|
||||||
if (compression > 1) then
|
if compression > 1 then
|
||||||
return nil, "bad compression"
|
return nil, "bad compression"
|
||||||
end
|
end
|
||||||
if ((arctype ~= "\0\0\0\0" and arctype ~= "tsar")) then
|
if arctype ~= "\0\0\0\0" and arctype ~= "tsar" then
|
||||||
return nil, "bad arctype ("..arctype..")"
|
return nil, "bad arctype ("..arctype..")"
|
||||||
end
|
end
|
||||||
if (fver ~= 1) then
|
if (fver ~= 1) then
|
||||||
return nil, "wrong version"
|
return nil, "wrong version"
|
||||||
end
|
end
|
||||||
local prog = read(psize)
|
local prog = read(psize)
|
||||||
if (compression == 1) then
|
if compression == 1 then
|
||||||
prog = lzss_decompress(prog)
|
prog = lzss_decompress(prog)
|
||||||
end
|
end
|
||||||
seek(lsize+ssize)
|
seek(lsize+ssize)
|
||||||
local env = {}
|
local env = {}
|
||||||
if (arctype == "tsar") then
|
if arctype == "tsar" then
|
||||||
env._ARCHIVE = tsar.read(read, seek, close)
|
env._ARCHIVE = tsar.read(read, seek, close)
|
||||||
end
|
end
|
||||||
setmetatable(env, {__index=_G, __newindex=function(_, i, v) _G[i] = v end})
|
setmetatable(env, {__index=_G, __newindex=function(_, i, v) _G[i] = v end})
|
||||||
@ -103,15 +95,27 @@ function utils.make_env()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function utils.console_panic(er)
|
function utils.console_panic(er)
|
||||||
local con = krequire("zorya").loadmod("util_luaconsole")
|
local gaddr = clist("gpu")()
|
||||||
if (con) then
|
local con, gpu = krq("zorya").loadmod("util_luaconsole"), cproxy(gaddr)
|
||||||
local gpu = cproxy(clist("gpu")())
|
if not gpu.getScreen() or gpu.getScreen() == "" then
|
||||||
if not gpu.getScreen() or gpu.getScreen() == "" then
|
local saddr = clist("screen")()
|
||||||
gpu.bind(clist("screen")())
|
gpu.bind(saddr)
|
||||||
end
|
end
|
||||||
con(string.format("tty.setcolor(0x4) print([[%s]])", er))
|
if con then
|
||||||
|
con(string.format("tty.setcolor(0x4) print([[%s]])", er:gsub("\t", " ")))
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
--gs = gpu.set
|
||||||
|
gpu.set(1, 1, "Kernel panic!")
|
||||||
|
local y = 2
|
||||||
|
for m in er:gmatch("(.+)\n") do
|
||||||
|
gpu.set(1,y,m)
|
||||||
|
y = y + 1
|
||||||
|
end
|
||||||
|
gpu.set(1, y, "Press any key to shut down.")
|
||||||
|
while true do
|
||||||
|
if (cr.pullSignal() == "key_down") then cr.shutdown() end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
_RENV = utils.make_env()
|
_RENV = utils.make_env()
|
||||||
|
@ -1,24 +1,11 @@
|
|||||||
local lzss_decompress = ...
|
local lzss_decompress, tsar, bfs, readfile = ...
|
||||||
--Zorya NEO itself.
|
--Zorya NEO itself.
|
||||||
_BIOS = "Zorya NEO"
|
_BIOS, _ZVSTR, _ZVER, _ZPAT, _ZGIT = "Zorya NEO", "2.0-rc5", 2.0, 0, "$[[git rev-parse --short HEAD]]"
|
||||||
_ZVSTR = "2.0-rc5"
|
|
||||||
_ZVER = 2.0
|
|
||||||
_ZPAT = 0
|
|
||||||
_ZGIT = "$[[git rev-parse --short HEAD]]"
|
|
||||||
--#include "ksrc/kinit.lua"
|
--#include "ksrc/kinit.lua"
|
||||||
local thd = krequire("thd")
|
local krq = krequire
|
||||||
local sys = krequire("sys")
|
local sunpack = string.unpack
|
||||||
local component = component
|
local thd, sys, ct, cr = krq"thd", krq"sys", component, computer
|
||||||
local computer = computer
|
local cinvoke, clist, cproxy = ct.invoke, ct.list, ct.proxy
|
||||||
local cinvoke = component.invoke
|
|
||||||
local clist = component.list
|
|
||||||
local cproxy = component.proxy
|
|
||||||
local th_i = 0
|
|
||||||
local function th_a(func)
|
|
||||||
thd.add("zyneo$"..th_i, func)
|
|
||||||
th_i = th_i + 1
|
|
||||||
end
|
|
||||||
|
|
||||||
local function load_lua(src, ...)
|
local function load_lua(src, ...)
|
||||||
if (src:sub(1, 4) == "\27ZLS") then
|
if (src:sub(1, 4) == "\27ZLS") then
|
||||||
src = lzss_decompress(src:sub(5))
|
src = lzss_decompress(src:sub(5))
|
||||||
@ -26,7 +13,7 @@ local function load_lua(src, ...)
|
|||||||
return load(src, ...)
|
return load(src, ...)
|
||||||
end
|
end
|
||||||
|
|
||||||
--#include "src/zy-neo/builtins/util_tsar.lua"
|
---#include "src/zy-neo/builtins/util_tsar.lua"
|
||||||
|
|
||||||
local builtins = {}
|
local builtins = {}
|
||||||
--#include "src/zy-neo/utils.lua"
|
--#include "src/zy-neo/utils.lua"
|
||||||
@ -61,24 +48,16 @@ sys.add_lib("zorya", (function()
|
|||||||
mod_search[#mod_search+1] = func
|
mod_search[#mod_search+1] = func
|
||||||
log(#mod_search)
|
log(#mod_search)
|
||||||
end
|
end
|
||||||
|
|
||||||
function zy.lkthdn()
|
|
||||||
return #thd.get_threads()
|
|
||||||
end
|
|
||||||
|
|
||||||
function zy.lkthdi(i)
|
|
||||||
return thd.get_threads()[i]
|
|
||||||
end
|
|
||||||
return zy
|
return zy
|
||||||
end)())
|
end)())
|
||||||
|
|
||||||
--#include "src/zy-neo/init.lua"
|
---#include "src/zy-neo/init.lua"
|
||||||
|
|
||||||
-- Zorya's handler thread.
|
-- Zorya's handler thread.
|
||||||
th_a(function()
|
thd.add("zyneo", function()
|
||||||
local er
|
local er
|
||||||
xpcall(function()
|
xpcall(function()
|
||||||
local zy = krequire("zorya")
|
local zy = krq"zorya"
|
||||||
zy.add_mod_search(function(mod)
|
zy.add_mod_search(function(mod)
|
||||||
if (bfs.exists(".zy2/mods/"..mod..".velx")) then
|
if (bfs.exists(".zy2/mods/"..mod..".velx")) then
|
||||||
--utils.debug_log(mod, ".zy2m")
|
--utils.debug_log(mod, ".zy2m")
|
||||||
@ -109,17 +88,21 @@ th_a(function()
|
|||||||
|
|
||||||
local c, e = load(zycfg, "=zycfg", "t", env)
|
local c, e = load(zycfg, "=zycfg", "t", env)
|
||||||
if c then
|
if c then
|
||||||
return c()
|
xpcall(function()
|
||||||
|
return c()
|
||||||
|
end,
|
||||||
|
function(e)
|
||||||
|
er = debug.traceback(e)
|
||||||
|
utils.console_panic(er)
|
||||||
|
end)
|
||||||
else
|
else
|
||||||
utils.console_panic(e)
|
utils.console_panic(e)
|
||||||
end
|
end
|
||||||
end, function(e)
|
end, function(e)
|
||||||
er = e..": "..debug.traceback()
|
er = e..": "..debug.traceback()
|
||||||
if(not utils.console_panic(er)) then
|
utils.console_panic(er)
|
||||||
er = er .. "\n(Lua console failed to start)"
|
|
||||||
end
|
|
||||||
end)
|
end)
|
||||||
if er then error(er) end
|
if er then utils.console_panic(er) end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
sys.start()
|
sys.start()
|
8
util/OpenOS/initramfs.d/99_bootstrap.lua
Normal file
8
util/OpenOS/initramfs.d/99_bootstrap.lua
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
local arc = ...
|
||||||
|
local function readfile(path)
|
||||||
|
local f = io.open(path)
|
||||||
|
local dat = f:read("*a")
|
||||||
|
f:close()
|
||||||
|
return dat
|
||||||
|
end
|
||||||
|
arc.file("bootstrap.bin", "r-xr-xr-x", readfile("/etc/zorya-neo/bootstrap.bin"))
|
@ -36,13 +36,17 @@ local function create_node(attr)
|
|||||||
uid = attr.uid,
|
uid = attr.uid,
|
||||||
gid = attr.gid,
|
gid = attr.gid,
|
||||||
filesize = attr.filesize,
|
filesize = attr.filesize,
|
||||||
mtime = attr.mtime
|
mtime = (attr.mtime*1000)//1
|
||||||
}
|
}
|
||||||
if attr.mode ~= "file" then
|
|
||||||
ent.filesize = 0
|
|
||||||
end
|
|
||||||
f:write(string.pack("=I2I2I2I2I2I6I6", ent.magic, ent.namesize, ent.mode, ent.uid, ent.gid, ent.filesize, ent.mtime))
|
f:write(string.pack("=I2I2I2I2I2I6I6", ent.magic, ent.namesize, ent.mode, ent.uid, ent.gid, ent.filesize, ent.mtime))
|
||||||
|
f:write(attr.name or "")
|
||||||
|
if (ent.namesize & 1 > 0) then
|
||||||
|
f:write("\0")
|
||||||
|
end
|
||||||
f:write(attr.data or "")
|
f:write(attr.data or "")
|
||||||
|
if (ent.filesize & 1 > 0) then
|
||||||
|
f:write("\0")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
local arc = {}
|
local arc = {}
|
||||||
function arc.file(path, perm, data)
|
function arc.file(path, perm, data)
|
||||||
|
@ -138,5 +138,6 @@ for i=1, #lst do
|
|||||||
print(lst[i])
|
print(lst[i])
|
||||||
writefile("/etc/zorya-neo/lib/"..lst[i]:sub(9), arc:fetch(lst[i]))
|
writefile("/etc/zorya-neo/lib/"..lst[i]:sub(9), arc:fetch(lst[i]))
|
||||||
end
|
end
|
||||||
|
writefile("/etc/zorya-neo/bootstrap.bin", arc:fetch("bootstrap.bin"))
|
||||||
arc:close()
|
arc:close()
|
||||||
print("Installation complete.")
|
print("Installation complete.")
|
@ -176,7 +176,7 @@ function makeDirectory(path)
|
|||||||
uid = 0,
|
uid = 0,
|
||||||
gid = 0,
|
gid = 0,
|
||||||
filesize = 0,
|
filesize = 0,
|
||||||
mtime = os.time()
|
mtime = os.time()*1000
|
||||||
}
|
}
|
||||||
fs.write(romfs, string.pack("=I2I2I2I2I2I6I6", ent.magic, ent.namesize, ent.mode, ent.uid, ent.gid, ent.filesize, ent.mtime))
|
fs.write(romfs, string.pack("=I2I2I2I2I2I6I6", ent.magic, ent.namesize, ent.mode, ent.uid, ent.gid, ent.filesize, ent.mtime))
|
||||||
fs.write(romfs, path)
|
fs.write(romfs, path)
|
||||||
@ -208,11 +208,11 @@ function writeFile(path, data)
|
|||||||
name = path,
|
name = path,
|
||||||
namesize = #path,
|
namesize = #path,
|
||||||
magic = 0x5f7d,
|
magic = 0x5f7d,
|
||||||
mode = getperm("file", ((ext == "lua" or ext == "z2l" or ext == "z2y") and "r-xr-xr-x") or "rw-r--r--"),
|
mode = getperm("file", ((ext == "lua" or ext == "z2l" or ext == "z2y" or ext == "velx") and "r-xr-xr-x") or "rw-r--r--"),
|
||||||
uid = 0,
|
uid = 0,
|
||||||
gid = 0,
|
gid = 0,
|
||||||
filesize = #data,
|
filesize = #data,
|
||||||
mtime = os.time()
|
mtime = os.time()*1000
|
||||||
}
|
}
|
||||||
fs.write(romfs, string.pack("=I2I2I2I2I2I6I6", ent.magic, ent.namesize, ent.mode, ent.uid, ent.gid, ent.filesize, ent.mtime))
|
fs.write(romfs, string.pack("=I2I2I2I2I2I6I6", ent.magic, ent.namesize, ent.mode, ent.uid, ent.gid, ent.filesize, ent.mtime))
|
||||||
fs.write(romfs, path)
|
fs.write(romfs, path)
|
||||||
@ -242,28 +242,25 @@ for i=1, #pkg_files do
|
|||||||
writeFile(".zy2/"..pkg_files[i].path, getfile(pkg_files[i].path))
|
writeFile(".zy2/"..pkg_files[i].path, getfile(pkg_files[i].path))
|
||||||
end
|
end
|
||||||
|
|
||||||
writeFile("TRAILER!!!", [[{os="Zorya NEO",version="2.0"}]])
|
|
||||||
|
|
||||||
setStatus("Extracting EEPROM...")
|
setStatus("Extracting EEPROM...")
|
||||||
setBar(0)
|
setBar(0)
|
||||||
local bios = getfile(bios_files[1].path)
|
local bios = getfile(bios_files[1].path)
|
||||||
|
|
||||||
setStatus("Flashing EEPROM...")
|
setStatus("Flashing EEPROM...")
|
||||||
setBar(33)
|
setBar(25)
|
||||||
local eeprom = proxy(list("eeprom")())
|
local eeprom = proxy(list("eeprom")())
|
||||||
eeprom.set(bios)
|
eeprom.set(bios)
|
||||||
setStatus("Writing configuration data...")
|
setStatus("Writing configuration data...")
|
||||||
setBar(66)
|
setBar(50)
|
||||||
function hexid_to_binid(addr)
|
|
||||||
addr=addr:gsub("%-", "")
|
|
||||||
local baddr = ""
|
|
||||||
for i=1, #addr, 2 do
|
|
||||||
baddr = baddr .. string.char(tonumber(addr:sub(i, i+1), 16))
|
|
||||||
end
|
|
||||||
return baddr
|
|
||||||
end
|
|
||||||
eeprom.setData(fs.address)
|
eeprom.setData(fs.address)
|
||||||
eeprom.setLabel("Zorya NEO BIOS v2.0")
|
eeprom.setLabel("Zorya NEO BIOS v2.0")
|
||||||
|
|
||||||
|
setStatus("Writing bootstrapper...")
|
||||||
|
setBar(75)
|
||||||
|
writeFile("bootstrap.bin", getfile("bios/bootstrap.bin"))
|
||||||
|
|
||||||
|
writeFile("TRAILER!!!", [[{os="Zorya NEO",version="2.0"}]])
|
||||||
|
|
||||||
setBar(100)
|
setBar(100)
|
||||||
setStatus("Rebooting in 5 seconds...")
|
setStatus("Rebooting in 5 seconds...")
|
||||||
if not fs.exists(".zy2/cfg.lua") then
|
if not fs.exists(".zy2/cfg.lua") then
|
||||||
|
Loading…
Reference in New Issue
Block a user