diff options
| author | wires <wires@noreply.wires.systems> | 2025-10-08 07:12:34 -0400 |
|---|---|---|
| committer | wires <wires@noreply.wires.systems> | 2025-10-08 07:12:34 -0400 |
| commit | 52273f14a91af4656beb35bd3fa1c9a66c7f07b1 (patch) | |
| tree | 8b66cd3c520e7af4928b88e16615a8a661c0db7b /src/mini_uart.zig | |
| parent | switch to using mmio helpers in gpio (diff) | |
| download | zosimos-52273f14a91af4656beb35bd3fa1c9a66c7f07b1.tar.gz | |
formatted printing
Diffstat (limited to 'src/mini_uart.zig')
| -rw-r--r-- | src/mini_uart.zig | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/src/mini_uart.zig b/src/mini_uart.zig index 6f15031..be364b2 100644 --- a/src/mini_uart.zig +++ b/src/mini_uart.zig @@ -45,7 +45,7 @@ fn writeByte(b: u8) void { mmio.write(IO, b); } -pub fn writeString(str: []const u8) void { +fn writeString(str: []const u8) void { for (str) |b| { if (b == '\n') { writeByte('\r'); @@ -53,3 +53,32 @@ pub fn writeString(str: []const u8) void { writeByte(b); } } + +const Writer = std.Io.Writer; + +fn drain( + w: *Writer, + data: []const []const u8, + _: usize, +) Writer.Error!usize { + var written: usize = 0; + writeString(w.buffer[0..w.end]); + written += w.end; + w.end = 0; + for (data) |slice| { + writeString(slice); + written += slice.len; + } + return written; +} + +var buf: [1024]u8 = undefined; +var writer: Writer = .{ + .vtable = &.{ .drain = drain }, + .buffer = &buf, +}; + +pub fn print(comptime fmt: []const u8, args: anytype) void { + writer.print(fmt, args) catch {}; + writer.flush() catch {}; +} |