From ed285c9fc665e262ed21c7bf5734acb2b7a532db Mon Sep 17 00:00:00 2001 From: hachem Date: Fri, 25 Sep 2026 11:31:59 +0200 Subject: feat: load + run native ELF binaries --- kernel/shell.rv | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 kernel/shell.rv (limited to 'kernel/shell.rv') diff --git a/kernel/shell.rv b/kernel/shell.rv new file mode 100644 index 0000000..562f3c4 --- /dev/null +++ b/kernel/shell.rv @@ -0,0 +1,55 @@ +# this is just a simple prompt to test that shit is working +fn cmd_help() puts("commands: help, clear, bars, echo , time, run, zoom in|out\n") + +fn zoom_by(d) do + let s = con.scale + d + if s < 1 do s = 1 end + if s > 6 do s = 6 end + con.scale = s + cmd_clear() + puts("zoom " ~ s ~ "x\n") +end + +fn cmd_zoom(words) do + const dir = if words:len() > 1 words[1] else "" + if dir == "in" do zoom_by(1) end + else if dir == "out" do zoom_by(-1) end + else do puts("usage: zoom in | zoom out\n") end +end + +fn cmd_clear() do + fill_rect(0, 0, fb_width(), fb_height(), CON_BG) + con.col = 0 + con.row = 0 +end + +fn cmd_bars() do + const bars = { 0xff5555, 0xffaa00, 0xffff55, 0x55ff55, 0x55ffff, 0x5599ff, 0xaa55ff, 0xffffff } + const bw = fb_width() / 8 + for i in 0..8 do fill_rect(i * bw, 0, bw, 40, bars[i]) end + puts("painted 8 bars from revo\n") +end + +fn bcd(b) (b shr 4) * 10 + (b band 15) +fn rtc(reg) do + outb(0x70, reg) + inb(0x71) +end +fn cmd_time() puts("utc " ~ bcd(rtc(4)) ~ ":" ~ bcd(rtc(2)) ~ ":" ~ bcd(rtc(0)) ~ "\n") + +fn run(line) do + const words = line:split(" ") + const cmd = words[0] + if cmd == "help" do cmd_help() end + else if cmd == "clear" do cmd_clear() end + else if cmd == "bars" do cmd_bars() end + else if cmd == "time" do cmd_time() end + else if cmd == "run" do cmd_run() end + else if cmd == "zoom" do cmd_zoom(words) end + else if cmd == "echo" do + if line:len() > 5 puts(line:sub(5, line:len() - 5) ~ "\n") else puts("\n") + end + else if line:len() == 0 do :nil end + else do puts("unknown command: " ~ cmd ~ "\n") end + puts("> ") +end -- cgit v1.3