From 3c37cdb7036cb40a51599ddfcbeabd9983b33edc Mon Sep 17 00:00:00 2001 From: Himbeer Date: Sat, 22 Jun 2024 12:27:52 +0200 Subject: syscall: Add naive uprint syscall --- src/lib/syscall.zig | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src') diff --git a/src/lib/syscall.zig b/src/lib/syscall.zig index 8f30972..642d0c4 100644 --- a/src/lib/syscall.zig +++ b/src/lib/syscall.zig @@ -2,6 +2,8 @@ // // SPDX-License-Identifier: AGPL-3.0-or-later +const instructions = @import("instructions.zig"); +const paging = @import("paging.zig"); const trap = @import("trap.zig"); pub const Error = error{ @@ -10,6 +12,19 @@ pub const Error = error{ pub fn handle(trap_frame: *const trap.Frame) !void { switch (trap_frame.general_purpose_registers[17]) { + 100000 => uprint(trap_frame), else => return Error.UnknownSyscall, } } + +fn uprint(trap_frame: *const trap.Frame) void { + const procmem: *paging.Table = @ptrFromInt(instructions.satp.read().ppn << 12); + + const paddr = procmem.translate(trap_frame.general_purpose_registers[10]).?; + + const str_ptr: [*]const u8 = @ptrFromInt(paddr); + const str = str_ptr[0..trap_frame.general_purpose_registers[11]]; + + const w = @import("Console.zig").autoChoose().?.writer(); + w.print("User message: {s}\r\n", .{str}) catch unreachable; +} -- cgit v1.2.3