wires

summary refs log tree commit diff
path: root/src/mini_uart.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/mini_uart.zig')
-rw-r--r--src/mini_uart.zig31
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 {};
+}