NEO r2p1 system changes

This commit is contained in:
20kdc 2018-05-29 23:47:20 +01:00
parent 7092b41f78
commit d5405685dd
9 changed files with 222 additions and 15 deletions

7
.gitignore vendored
View File

@ -20,6 +20,13 @@ repobuild/*/*
repobuild/*/*/ repobuild/*/*/
repobuild/*/*/* repobuild/*/*/*
laboratory/*/
laboratory/*/*
laboratory/*/*/
laboratory/*/*/*
laboratory/*/*/*/
laboratory/*/*/*/*
inst.lua inst.lua
# Available as the respective release # Available as the respective release
inst-gold.lua inst-gold.lua

View File

@ -269,7 +269,7 @@ local function moveSurface(surface, m, x, y, w, h, force)
monitorResetBF(monitors[m]) monitorResetBF(monitors[m])
end end
if cb then if cb then
cb.copy(ox, oy, w, h, x - ox, y - oy) pcall(cb.copy, ox, oy, w, h, x - ox, y - oy)
if surface == surfaces[1] then if surface == surfaces[1] then
local cacheControl = {} local cacheControl = {}
for i = 1, h do for i = 1, h do

View File

@ -34,18 +34,20 @@ nexus = {
neo.emergency("icecap nexus prereg issue") neo.emergency("icecap nexus prereg issue")
theEventHandler("k.registration", "x.neo.pub.window") theEventHandler("k.registration", "x.neo.pub.window")
end end
local dw = e(w, h, t) local dwo, dw = pcall(e, w, h, t)
if not dwo then
addOnReg("x.neo.pub.window", cb)
return
end
c(dw) c(dw)
everestWindows[dw.id] = function (...) everestWindows[dw.id] = function (...)
return c(dw, ...) return c(dw, ...)
end end
return true else
addOnReg("x.neo.pub.window", cb)
end end
end end
if not cb() then cb()
addOnReg("x.neo.pub.window", cb)
end
return dw
end, end,
windows = everestWindows, windows = everestWindows,
startDialog = function (tx, ti) startDialog = function (tx, ti)

View File

@ -3,7 +3,7 @@
return { return {
["neo"] = { ["neo"] = {
desc = "KittenOS NEO Kernel & Base Libs", desc = "KittenOS NEO Kernel & Base Libs",
v = 2, v = 3,
deps = { deps = {
}, },
dirs = { dirs = {
@ -54,7 +54,7 @@ return {
}, },
["neo-everest"] = { ["neo-everest"] = {
desc = "KittenOS NEO / Everest (windowing)", desc = "KittenOS NEO / Everest (windowing)",
v = 2, v = 3,
deps = { deps = {
"neo" "neo"
}, },
@ -67,7 +67,7 @@ return {
}, },
["neo-icecap"] = { ["neo-icecap"] = {
desc = "KittenOS NEO / Icecap", desc = "KittenOS NEO / Icecap",
v = 2, v = 3,
deps = { deps = {
"neo" "neo"
}, },

View File

@ -134,7 +134,7 @@ function wrapMeta(t)
end, end,
__pairs = function () __pairs = function ()
return function (x, key) return function (x, key)
local k, v = next(t, k) local k, v = next(t, key)
if k then return k, wrapMeta(v) end if k then return k, wrapMeta(v) end
end, 9, nil end, 9, nil
end, end,
@ -166,7 +166,7 @@ function ensureType(a, t)
end end
function ensurePathComponent(s) function ensurePathComponent(s)
if not string.match(s, "^[a-zA-Z0-9_%-%+%,%.%#%~%@%'%;%[%]%(%)%&%%%$%! %=%{%}%^]+$") then error("chars disallowed: " .. s) end if not string.match(s, "^[a-zA-Z0-9_%-%+%,%.%#%~%@%'%;%[%]%(%)%&%%%$%! %=%{%}%^\x80-\xFF]+$") then error("chars disallowed: " .. s) end
if s == "." then error("single dot disallowed") end if s == "." then error("single dot disallowed") end
if s == ".." then error("double dot disallowed") end if s == ".." then error("double dot disallowed") end
end end
@ -302,7 +302,6 @@ baseProcEnvCore = {
utf8 = wrapUtf8, utf8 = wrapUtf8,
require = loadLibraryInner, require = loadLibraryInner,
assert = assert, ipairs = ipairs, assert = assert, ipairs = ipairs,
load = load,
next = function (t, k) next = function (t, k)
local mt = getmetatable(t) local mt = getmetatable(t)
if mt == uniqueNEOProtectionObject then error("NEO-Protected Object") end if mt == uniqueNEOProtectionObject then error("NEO-Protected Object") end
@ -314,14 +313,15 @@ baseProcEnvCore = {
tonumber = tonumber, tostring = tostring, tonumber = tonumber, tostring = tostring,
setmetatable = setmetatable, getmetatable = function (n) setmetatable = setmetatable, getmetatable = function (n)
local mt = getmetatable(n) local mt = getmetatable(n)
if mt == uniqueNEOProtectionObject then return "NEO-Protected Object" end if rawequal(mt, uniqueNEOProtectionObject) then return "NEO-Protected Object" end
return mt return mt
end, end,
rawset = function (t, i, v) rawset = function (t, i, v)
local mt = getmetatable(t) local mt = getmetatable(t)
if mt == uniqueNEOProtectionObject then error("NEO-Protected Object") end if rawequal(mt, uniqueNEOProtectionObject) then error("NEO-Protected Object") end
return rawset(t, i, v) return rawset(t, i, v)
end, rawget = rawget, rawlen = rawlen, rawequal = rawequal, end, rawget = rawget, rawlen = rawlen, rawequal = rawequal,
checkArg = checkArg
} }
baseProcNeo = { baseProcNeo = {
emergency = emergencyFunction, emergency = emergencyFunction,
@ -357,6 +357,12 @@ baseProcNeoMT = {
function baseProcEnv() function baseProcEnv()
local pe = setmetatable({}, baseProcEnvMT) local pe = setmetatable({}, baseProcEnvMT)
pe.load = function (a, b, c, d, ...)
if rawequal(d, nil) then
d = pe
end
return load(a, b, c, d, ...)
end
pe.neo = setmetatable({}, baseProcNeoMT) pe.neo = setmetatable({}, baseProcNeoMT)
pe._G = pe pe._G = pe
return pe return pe
@ -490,6 +496,7 @@ end
function start(pkg, ppkg, ppid, ...) function start(pkg, ppkg, ppid, ...)
local proc = {} local proc = {}
local pid = lastPID local pid = lastPID
emergencyFunction("starting:", pkg)
lastPID = lastPID + 1 lastPID = lastPID + 1
local function startFromUser(ipkg, ...) local function startFromUser(ipkg, ...)

10
laboratory/launch.sh Executable file
View File

@ -0,0 +1,10 @@
#!/bin/sh
# This is released into the public domain.
# No warranty is provided, implied or otherwise.
XPWD=`pwd`
export XPWD
cd "$OCEMU/src"
./boot.lua "$XPWD"

140
laboratory/ocemu.cfg Normal file
View File

@ -0,0 +1,140 @@
--OCEmu configuration. Designed to mimic HOCON syntax, but is not exactly HOCON
--syntax.
ocemu {
--Client side settings, presentation and performance related stuff.
client {
--The sample rate used for generating beeps of computers' internal speakers.
--Use custom values at your own responsibility here; if it breaks OC you'll
--get no support. Some potentially reasonable lower values are 16000 or even
--8000 (which was the old default, but leads to artifacting on certain
--frequencies).
beepSampleRate=44100
--The base volume of beeps generated by computers. This may be in a range of
--[0, 127], where 0 means mute (the sound will not even be generated), and
--127 means maximum amplitude / volume.
beepVolume=32
--The color of monochrome text (i.e. displayed when in 1-bit color depth,
--e.g. tier one screens / GPUs, or higher tier set to 1-bit color depth).
--Defaults to white, feel free to make it some other color, tho!
monochromeColor="0xFFFFFF"
}
--Computer related settings, concerns server performance and security.
computer {
--The maximum size of the byte array that can be stored on EEPROMs as
--configuration data.
eepromDataSize=256
--The maximum size of the byte array that can be stored on EEPROMs as
--executable data..
eepromSize=4096
--Settings specific to the Lua architecture.
lua {
--Whether to allow loading precompiled bytecode via Lua's `load` function,
--or related functions (`loadfile`, `dofile`). Enable this only if you
--absolutely trust all users on your server and all Lua code you run. This
--can be a MASSIVE SECURITY RISK, since precompiled code can easily be
--used for exploits, running arbitrary code on the real server! I cannot
--stress this enough: only enable this is you know what you're doing.
allowBytecode=false
--Whether to allow user defined __gc callbacks, i.e. __gc callbacks
--defined *inside* the sandbox. Since garbage collection callbacks are not
--sandboxed (hooks are disabled while they run), this is not recommended.
allowGC=false
}
--The time in seconds a program may run without yielding before it is
--forcibly aborted. This is used to avoid stupidly written or malicious
--programs blocking other computers by locking down the executor threads.
--Note that changing this won't have any effect on computers that are
--already running - they'll have to be rebooted for this to take effect.
timeout=5
}
--Emulator related settings. Components, accuracy, and debugging.
emulator {
--Default components available to the computer.
components {
{"gpu", "c1-gpu-tier3", 0, 160, 50, 3},
{"gpu", "c1-gpu-tier1", 0, 50, 16, 1},
{"screen_sdl2", "c1-screen-tier3", -1, 160, 50, 3},
{"screen_sdl2", "c1-screen-tier1", -1, 50, 16, 1},
{"modem", "c1-modem", 1, false},
{"eeprom", "c1-eeprom", 9, "lua/bios.lua"},
{"filesystem", "c1-tmpfs", -1, "tmpfs", "tmpfs", false, 5},
{"filesystem", "c1-sda", 5, nil, "Workbench", false, 4},
{"filesystem", "c1-sdb", 5, nil, "Repository", false, 4},
{"filesystem", "openos", 0, "loot/openos", "openos", true, 1},
{"internet", "c1-internet", 2},
{"computer", "c1-computer", -1},
{"ocemu", "c1-ocemu", -1},
{"keyboard_sdl2", "c1-keyboard", -1}
}
--Whether to enable the emulator's extremely verbose logging.
debug=false
--Whether to choose performance over timing-accuracy.
fast=false
--Whether to return vague error messages like OpenComputers.
vague=false
}
filesystem {
--The maximum block size that can be read in one 'read' call on a file
--system. This is used to limit the amount of memory a call from a user
--program can cause to be allocated on the host side: when 'read' is, called
--a byte array with the specified size has to be allocated. So if this
--weren't limited, a Lua program could trigger massive memory allocations
--regardless of the amount of RAM installed in the computer it runs on. As a
--side effect this pretty much determines the read performance of file
--systems.
maxReadBuffer=2048
}
internet {
--Whether to allow HTTP requests via internet cards. When enabled, the
--`request` method on internet card components becomes available.
enableHttp=true
--Whether to allow TCP connections via internet cards. When enabled, the
--`connect` method on internet card components becomes available.
enableTcp=true
}
--Other settings that you might find useful to tweak.
misc {
--The maximum size of network packets to allow sending via network cards.
--This has *nothing to do* with real network traffic, it's just a limit for
--the network cards, mostly to reduce the chance of computer with a lot of
--RAM killing those with less by sending huge packets. This does not apply
--to HTTP traffic.
maxNetworkPacketSize=8192
--The maximum distance a wireless message can be sent. In other words, this
--is the maximum signal strength a wireless network card supports. This is
--used to limit the search range in which to check for modems, which may or
--may not lead to performance issues for ridiculous ranges - like, you know,
--more than the loaded area. See also: `wirelessCostPerRange`.
maxWirelessRange=400
}
--The configuration version this config was generated at. This is used to
--allow the emulator to reset/migrate parts of the config when their meaning
--has changed across versions.
version=3
}

View File

@ -0,0 +1,28 @@
ocemu {
emulator {
components {
{"gpu", "c1-gpu-tier3", 0, 160, 50, 3},
{"gpu", "c1-gpu-tier1", 0, 50, 16, 1},
{"screen_sdl2", "c1-screen-tier3", -1, 160, 50, 3},
{"screen_sdl2", "c1-screen-tier1", -1, 50, 16, 1},
{"modem", "c1-modem", 1, false},
{"eeprom", "c1-eeprom", 9, "lua/bios.lua"},
{"filesystem", "c1-tmpfs", -1, "tmpfs", "tmpfs", false, 5},
{"filesystem", "c1-sda", 5, nil, "Workbench", false, 4},
{"filesystem", "c1-sdb", 5, nil, "Repository", false, 4},
{"filesystem", "openos", 0,"loot/openos","openos",true,1},
{"internet", "c1-internet", 2},
{"computer", "c1-computer", -1},
{"ocemu", "c1-ocemu", -1},
{"keyboard_sdl2", "c1-keyboard", -1}
}
debug=false
fast=false
vague=false
}
internet {
enableHttp=true
enableTcp=true
}
version=3
}

13
laboratory/reset.sh Executable file
View File

@ -0,0 +1,13 @@
#!/bin/sh
# This is released into the public domain.
# No warranty is provided, implied or otherwise.
cp ocemu.cfg.default ocemu.cfg && rm -rf c1-sda c1-sdb tmpfs
mkdir c1-sda c1-sdb
echo -n c1-sda > c1-eeprom/data.bin
cd ..
cp -r code/* laboratory/c1-sdb/
cp -r repository/* laboratory/c1-sdb/
lua clawmerge.lua repository/data/app-claw/local.lua code/data/app-claw/local.lua > laboratory/c1-sdb/data/app-claw/local.lua
cp -r laboratory/c1-sdb/* laboratory/c1-sda/