hachem.wtf
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bridge/bridge.zig7
-rw-r--r--kernel/console.rv11
-rw-r--r--kernel/input.rv3
-rw-r--r--kernel/shell.rv21
m---------revo0
5 files changed, 21 insertions, 21 deletions
diff --git a/bridge/bridge.zig b/bridge/bridge.zig
index 2deaded..8786f20 100644
--- a/bridge/bridge.zig
+++ b/bridge/bridge.zig
@@ -402,12 +402,7 @@ fn registerPrimitives(vm: *revo.VM) !void {
// the VM outlives boot() now, so we juts make this hoe static
var g_vm: ?*revo.VM = null;
-// revo freestanding bug (fork @ fd0ff06): the module's very first top-level
-// statement must not be a table literal, or module eval throws "want table, got
-// atom" while building it. a leading no-op statement sidesteps it. remove once
-// revo fixes the freestanding codegen upstream.
-const init_program = "const _revel_boot = 0\n" ++
- @embedFile("k_font") ++ "\n" ++
+const init_program = @embedFile("k_font") ++ "\n" ++
@embedFile("k_console") ++ "\n" ++
@embedFile("k_vmm") ++ "\n" ++
@embedFile("k_proc") ++ "\n" ++
diff --git a/kernel/console.rv b/kernel/console.rv
index a448ef9..a894141 100644
--- a/kernel/console.rv
+++ b/kernel/console.rv
@@ -30,7 +30,7 @@ end
fn con_newline() do
con.col = 0
- con.row = con.row + 1
+ con.row += 1
if con.row >= con_rows() do
fb_scroll(cell_h(), CON_BG)
con.row = con_rows() - 1
@@ -44,21 +44,26 @@ fn con_putc(ch) do
if code == 10 do con_newline() return :nil end # \n
if code == 13 do con.col = 0 return :nil end # \r
if code == 8 do # backspace: move left
- if con.col > 0 con.col = con.col - 1
+ if con.col > 0 con.col -= 1
return :nil
end
if code < 32 return :nil
draw_glyph(con.col, con.row, ch)
- con.col = con.col + 1
+ con.col += 1
if con.col >= con_cols() con_newline()
end
fn puts(s) serial_puts(s)
+const CUR = 0x50fa7b
+fn cursor_paint(color) fill_rect(con.col * cell_w(), con.row * cell_h(), cell_w(), cell_h(), color)
+
global flush_console = fn() do
+ cursor_paint(CON_BG)
let c = serial_next()
while c >= 0 do
con_putc(string.of_ascii(c))
c = serial_next()
end
+ cursor_paint(CUR)
end
diff --git a/kernel/input.rv b/kernel/input.rv
index 33cf65d..fde962d 100644
--- a/kernel/input.rv
+++ b/kernel/input.rv
@@ -42,6 +42,7 @@ global on_key = fn(code) do
if code < 2 return :nil
if code >= KBD:len() return :nil
const ch = if sh.shift KBD_SHIFT[code] else KBD[code]
- sh.line = sh.line ~ ch
+ if ch == " " and code != 0x39 return :nil
+ sh.line ~= ch
puts(ch)
end
diff --git a/kernel/shell.rv b/kernel/shell.rv
index 562f3c4..9d3d95d 100644
--- a/kernel/shell.rv
+++ b/kernel/shell.rv
@@ -38,18 +38,17 @@ end
fn cmd_time() puts("utc " ~ bcd(rtc(4)) ~ ":" ~ bcd(rtc(2)) ~ ":" ~ bcd(rtc(0)) ~ "\n")
fn run(line) do
+ if line:trim():len() == 0 do puts("> ") return :nil end
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
+ match cmd
+ | "help" => cmd_help()
+ | "clear" => cmd_clear()
+ | "bars" => cmd_bars()
+ | "time" => cmd_time()
+ | "run" => cmd_run()
+ | "zoom" => cmd_zoom(words)
+ | "echo" => if line:len() > 5 puts(line:sub(5, line:len() - 5) ~ "\n") else puts("\n")
+ | _ => puts("unknown command: " ~ cmd ~ "\n")
puts("> ")
end
diff --git a/revo b/revo
-Subproject fd0ff0643e8de54fec2c4c794e09a86f8e23706
+Subproject 8b0b88a34b4ae803e8b68bedd1574300d011891