From f8eb00c05d07b953e1c646292e4d7ddd5a4c839a Mon Sep 17 00:00:00 2001 From: Speedy_Lex <78314533+speedy-lex@users.noreply.github.com> Date: Thu, 3 Jul 2025 10:23:01 +0200 Subject: [PATCH] fix gpu + update openos --- data/OpenOS/bin/flash.lua | 28 +++++++++++++++++++++++----- data/OpenOS/bin/sh.lua | 5 ----- data/OpenOS/boot/04_component.lua | 1 - data/OpenOS/init.lua | 5 +---- data/OpenOS/lib/core/boot.lua | 15 +++++++-------- data/OpenOS/lib/core/cursor.lua | 6 ------ data/OpenOS/lib/event.lua | 2 +- data/OpenOS/lib/tty.lua | 2 +- src/components/gpu.c | 4 ++++ 9 files changed, 37 insertions(+), 31 deletions(-) diff --git a/data/OpenOS/bin/flash.lua b/data/OpenOS/bin/flash.lua index f8ecf47..13e080e 100644 --- a/data/OpenOS/bin/flash.lua +++ b/data/OpenOS/bin/flash.lua @@ -15,6 +15,8 @@ end local function printRom() local eeprom = component.eeprom io.write(eeprom.get()) + + return nil end local function readRom() @@ -37,6 +39,8 @@ local function readRom() if not options.q then io.write("All done!\nThe label is '" .. eeprom.getLabel() .. "'.\n") end + + return nil end local function writeRom() @@ -60,7 +64,10 @@ local function writeRom() io.write("Please do NOT power down or restart your computer during this operation!\n") end - eeprom.set(bios) + local result, reason = eeprom.set(bios) + if reason then + return nil, reason + end local label = args[2] if not options.q and not label then @@ -68,7 +75,11 @@ local function writeRom() label = io.read() end if label and #label > 0 then - eeprom.setLabel(label) + local result, reason = eeprom.setLabel(label) + if reason then + return nil, reason + end + if not options.q then io.write("Set label to '" .. eeprom.getLabel() .. "'.\n") end @@ -77,12 +88,19 @@ local function writeRom() if not options.q then io.write("All done! You can remove the EEPROM and re-insert the previous one now.\n") end + + return nil end +local result, reason if options.l then - printRom() + result, reason = printRom() elseif options.r then - readRom() + result, reason = readRom() else - writeRom() + result, reason = writeRom() end +if reason then + io.stderr:write(reason..'\n') + return 1 +end \ No newline at end of file diff --git a/data/OpenOS/bin/sh.lua b/data/OpenOS/bin/sh.lua index 9f882e9..d4e4dd9 100644 --- a/data/OpenOS/bin/sh.lua +++ b/data/OpenOS/bin/sh.lua @@ -3,16 +3,11 @@ local tty = require("tty") local text = require("text") local sh = require("sh") -debugprint("a") - local args = shell.parse(...) shell.prime() -debugprint("b") - if #args == 0 then - debugprint("c") local has_profile local input_handler = {hint = sh.hintHandler} while true do diff --git a/data/OpenOS/boot/04_component.lua b/data/OpenOS/boot/04_component.lua index 177c39a..14da828 100644 --- a/data/OpenOS/boot/04_component.lua +++ b/data/OpenOS/boot/04_component.lua @@ -73,7 +73,6 @@ end function component.setPrimary(componentType, address) checkArg(1, componentType, "string") checkArg(2, address, "string", "nil") - debugprint("setPrimary", componentType, address) if address ~= nil then address = component.get(address, componentType) assert(address, "no such component") diff --git a/data/OpenOS/init.lua b/data/OpenOS/init.lua index 59a8973..ef35e5f 100644 --- a/data/OpenOS/init.lua +++ b/data/OpenOS/init.lua @@ -14,13 +14,10 @@ do end while true do - debugprint("grabbing shell") - local result, reason = xpcall(assert(require("shell").getShell()), function(msg) + local result, reason = xpcall(require("shell").getShell(), function(msg) return tostring(msg).."\n"..debug.traceback() end) - debugprint("resumed", result, reason) if not result then - debugprint((reason ~= nil and tostring(reason) or "unknown error") .. "\n") io.stderr:write((reason ~= nil and tostring(reason) or "unknown error") .. "\n") io.write("Press any key to continue.\n") os.sleep(0.5) diff --git a/data/OpenOS/lib/core/boot.lua b/data/OpenOS/lib/core/boot.lua index ec83d87..34c966c 100644 --- a/data/OpenOS/lib/core/boot.lua +++ b/data/OpenOS/lib/core/boot.lua @@ -1,7 +1,7 @@ -- called from /init.lua local raw_loadfile = ... -_G._OSVERSION = "OpenOS 1.8.8" +_G._OSVERSION = "OpenOS 1.8.9" -- luacheck: globals component computer unicode _OSVERSION local component = component @@ -73,7 +73,12 @@ local function dofile(file) status("> " .. file) local program, reason = raw_loadfile(file) if program then - return program() + local result = table.pack(pcall(program)) + if result[1] then + return table.unpack(result, 2, result.n) + else + error(result[2]) + end else error(reason) end @@ -139,12 +144,6 @@ end status("Initializing system...") -require("event").listen("component_added", debugprint) -require("event").listen("component_available", debugprint) -require("event").listen("term_available", debugprint) - computer.pushSignal("init") -- so libs know components are initialized. require("event").pull(1, "init") -- Allow init processing. - -require("tty").bind(component.gpu) _G.runlevel = 1 diff --git a/data/OpenOS/lib/core/cursor.lua b/data/OpenOS/lib/core/cursor.lua index 5f337d9..a8aff3a 100644 --- a/data/OpenOS/lib/core/cursor.lua +++ b/data/OpenOS/lib/core/cursor.lua @@ -1,14 +1,8 @@ -debugprint("loading cursor") local unicode = require("unicode") -debugprint("loaded unicode") local kb = require("keyboard") -debugprint("loaded keyboard") local tty = require("tty") -debugprint("loaded tty") local text = require("text") -debugprint("loaded text") local computer = require("computer") -debugprint("loaded computer") local keys = kb.keys local core_cursor = {} diff --git a/data/OpenOS/lib/event.lua b/data/OpenOS/lib/event.lua index 1ad8b46..7c7ab7e 100644 --- a/data/OpenOS/lib/event.lua +++ b/data/OpenOS/lib/event.lua @@ -143,7 +143,7 @@ function event.pullFiltered(...) local deadline = computer.uptime() + (seconds or math.huge) repeat local waitTime = deadline - computer.uptime() - if waitTime <= 0 then + if waitTime < 0 then break end local signal = table.pack(computer.pullSignal(waitTime)) diff --git a/data/OpenOS/lib/tty.lua b/data/OpenOS/lib/tty.lua index 8248e02..455307b 100644 --- a/data/OpenOS/lib/tty.lua +++ b/data/OpenOS/lib/tty.lua @@ -221,7 +221,7 @@ function tty.keyboard() -- changes to this design should avoid this on every key hit -- this is expensive (slow!) - window.keyboard = assert(component.invoke(screen, "getKeyboards"))[1] or system_keyboard + window.keyboard = component.invoke(screen, "getKeyboards")[1] or system_keyboard end return window.keyboard diff --git a/src/components/gpu.c b/src/components/gpu.c index c46aaf1..0e71d6e 100644 --- a/src/components/gpu.c +++ b/src/components/gpu.c @@ -413,6 +413,9 @@ void nni_gpu_getViewport(nni_gpu *gpu, void *_, nn_component *component, nn_comp nn_return(computer, nn_values_integer(w)); nn_return(computer, nn_values_integer(h)); } +void nni_gpu_getDepth(nni_gpu *gpu, void *_, nn_component *component, nn_computer *computer) { + nn_return(computer, nn_values_integer(8)); +} void nn_loadGraphicsCardTable(nn_universe *universe) { nn_componentTable *gpuTable = nn_newComponentTable(nn_getAllocator(universe), "gpu", NULL, NULL, (void *)nni_gpuDeinit); @@ -429,6 +432,7 @@ void nn_loadGraphicsCardTable(nn_universe *universe) { nn_defineMethod(gpuTable, "setForeground", true, (void *)nni_gpu_setForeground, NULL, "setForeground(color: integer, isPalette: boolean): integer, integer? - Sets the current foreground color. Returns the old one and palette index if applicable."); nn_defineMethod(gpuTable, "getBackground", true, (void *)nni_gpu_getBackground, NULL, "setBackground(color: integer, isPalette: boolean): integer, integer? - Sets the current background color. Returns the old one and palette index if applicable."); nn_defineMethod(gpuTable, "getForeground", true, (void *)nni_gpu_getForeground, NULL, "setForeground(color: integer, isPalette: boolean): integer, integer? - Sets the current foreground color. Returns the old one and palette index if applicable."); + nn_defineMethod(gpuTable, "getDepth", true, (void *)nni_gpu_getDepth, NULL, "getDepth(): number - The currently set color depth of the GPU/screen, in bits. Can be 1, 4 or 8."); nn_defineMethod(gpuTable, "fill", true, (void *)nni_gpu_fill, NULL, "fill(x: integer, y: integer, w: integer, h: integer, s: string)"); nn_defineMethod(gpuTable, "copy", true, (void *)nni_gpu_copy, NULL, "copy(x: integer, y: integer, w: integer, h: integer, tx: integer, ty: integer) - Copies stuff"); nn_defineMethod(gpuTable, "getViewport", true, (void *)nni_gpu_getViewport, NULL, "getViewport(): integer, integer - Gets the current viewport resolution");