diff options
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 {}; +} |