From e8dfcfc62dc98c42c636bc8106bd0d681b1b3f91 Mon Sep 17 00:00:00 2001 From: em-dash <33614480+em-dash@users.noreply.github.com> Date: Sat, 18 Jul 2026 11:25:56 +1000 Subject: [PATCH 1/2] update to 0.16.0 --- build.zig | 2 +- src/kernel.zig | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.zig b/build.zig index 9f932a3..de72322 100644 --- a/build.zig +++ b/build.zig @@ -20,7 +20,7 @@ pub fn build(b: *std.Build) anyerror!void { kernel.setLinkerScript(b.path("src/linker.lds")); - kernel.addCSourceFiles(.{ + kernel.root_module.addCSourceFiles(.{ .files = &.{"src/boot.S"}, .flags = &.{ "-x", "assembler-with-cpp" }, }); diff --git a/src/kernel.zig b/src/kernel.zig index f52f1ed..203f7cd 100644 --- a/src/kernel.zig +++ b/src/kernel.zig @@ -3,7 +3,7 @@ const uart = @import("uart.zig"); // Here we set up a printf-like writer from the standard library by providing // a way to output via the UART. -pub fn drainUart(w: *std.io.Writer, data: []const []const u8, splat: usize) !usize { +pub fn drainUart(w: *std.Io.Writer, data: []const []const u8, splat: usize) !usize { _ = try uartPutStr(w.buffer); w.end = 0; var bytes_written: usize = 0; @@ -18,7 +18,7 @@ pub fn drainUart(w: *std.io.Writer, data: []const []const u8, splat: usize) !usi return bytes_written; } -var uart_writer = std.io.Writer{ +var uart_writer = std.Io.Writer{ .buffer = &[_]u8{} ** 1024, .end = 0, .vtable = &.{ .drain = drainUart }, From 59cfb7d0b1bc6519eb2baa2fe0460ac8a9ebd178 Mon Sep 17 00:00:00 2001 From: em-dash <33614480+em-dash@users.noreply.github.com> Date: Sat, 18 Jul 2026 11:32:27 +1000 Subject: [PATCH 2/2] fix writer drain function and buffer --- src/kernel.zig | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/kernel.zig b/src/kernel.zig index 203f7cd..0da1f08 100644 --- a/src/kernel.zig +++ b/src/kernel.zig @@ -4,22 +4,21 @@ const uart = @import("uart.zig"); // Here we set up a printf-like writer from the standard library by providing // a way to output via the UART. pub fn drainUart(w: *std.Io.Writer, data: []const []const u8, splat: usize) !usize { - _ = try uartPutStr(w.buffer); + _ = try uartPutStr(w.buffer[0..w.end]); w.end = 0; var bytes_written: usize = 0; for (data[0 .. data.len - 1]) |slice| { bytes_written += try uartPutStr(slice); } - if (splat == 0 or data.len < 1) return bytes_written; - const last_data = data[data.len - 1]; for (0..splat) |_| { - bytes_written += try uartPutStr(last_data); + bytes_written += try uartPutStr(data[data.len - 1]); } return bytes_written; } +var uart_writer_buffer: [1024]u8 = undefined; var uart_writer = std.Io.Writer{ - .buffer = &[_]u8{} ** 1024, + .buffer = &uart_writer_buffer, .end = 0, .vtable = &.{ .drain = drainUart }, }; @@ -33,6 +32,7 @@ fn uartPutStr(str: []const u8) !usize { pub fn println(comptime fmt: []const u8, args: anytype) void { uart_writer.print(fmt ++ "\n", args) catch {}; + uart_writer.flush() catch {}; } // This the trap/exception entrypoint, this will be invoked any time