diff options
author | Himbeer <himbeer@disroot.org> | 2024-07-27 19:28:38 +0200 |
---|---|---|
committer | Himbeer <himbeer@disroot.org> | 2024-07-27 19:28:38 +0200 |
commit | 4149f06f9c1cb1e2086217986c72f15a9d89e2db (patch) | |
tree | 4474743a19aef3a82060fc85dde3e5459acdc0d9 /src/lib/syscall.zig | |
parent | a5c85dc3b3160df29def93ef44c0b5bedde3a407 (diff) |
syscall: Turn uprint() into proper console write
Diffstat (limited to 'src/lib/syscall.zig')
-rw-r--r-- | src/lib/syscall.zig | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/lib/syscall.zig b/src/lib/syscall.zig index d15810b..dcf246a 100644 --- a/src/lib/syscall.zig +++ b/src/lib/syscall.zig @@ -4,6 +4,7 @@ const std = @import("std"); +const Console = @import("Console.zig"); const instructions = @import("instructions.zig"); const mem = @import("mem.zig"); const paging = @import("paging.zig"); @@ -59,9 +60,10 @@ fn errorName(trap_frame: *const trap.Frame) !usize { return n; } -// uprint(str_addr: usize, len: usize) void -fn uprint(trap_frame: *const trap.Frame) void { +// uprint(bytes_addr: usize, len: usize) !usize +fn uprint(trap_frame: *const trap.Frame) !usize { const vaddr = trap_frame.general_purpose_registers[10]; + const len = trap_frame.general_purpose_registers[11]; const procmem: *paging.Table = @ptrFromInt(instructions.satp.read().ppn << 12); const paddr = procmem.translate(vaddr) orelse { @@ -70,11 +72,11 @@ fn uprint(trap_frame: *const trap.Frame) void { unreachable; }; - const str_ptr: [*]const u8 = @ptrFromInt(paddr); - const str = str_ptr[0..trap_frame.general_purpose_registers[11]]; + const bytes_ptr: [*]const u8 = @ptrFromInt(paddr); + const bytes = bytes_ptr[0..len]; - const w = @import("Console.zig").autoChoose().?.writer(); - w.print("User message: {s}\r\n", .{str}) catch unreachable; + const w = Console.autoChoose().?.writer(); + return w.write(bytes); } // launch(bytes: [*]align(@alignOf(std.elf.Elf64_Ehdr)) const u8, len: usize) !usize |