wires

summary refs log tree commit diff
diff options
context:
space:
mode:
authorwires <wires@noreply.wires.systems>2025-10-08 07:12:34 -0400
committerwires <wires@noreply.wires.systems>2025-10-08 07:12:34 -0400
commit52273f14a91af4656beb35bd3fa1c9a66c7f07b1 (patch)
tree8b66cd3c520e7af4928b88e16615a8a661c0db7b
parentswitch to using mmio helpers in gpio (diff)
downloadzosimos-52273f14a91af4656beb35bd3fa1c9a66c7f07b1.tar.gz
formatted printing
-rw-r--r--build.zig7
-rw-r--r--src/main.zig4
-rw-r--r--src/mini_uart.zig31
3 files changed, 39 insertions, 3 deletions
diff --git a/build.zig b/build.zig
index fd55a4b..e3a4aec 100644
--- a/build.zig
+++ b/build.zig
@@ -1,9 +1,16 @@
 const std = @import("std");
+const Target = std.Target;
 
 pub fn build(b: *std.Build) void {
     const target = b.resolveTargetQuery(.{
         .cpu_arch = .aarch64,
         .os_tag = .freestanding,
+        .cpu_features_add = Target.aarch64.featureSet(&.{
+            .strict_align,
+        }),
+        .cpu_model = .{
+            .explicit = &Target.aarch64.cpu.cortex_a72,
+        },
     });
 
     const optimize = b.standardOptimizeOption(.{});
diff --git a/src/main.zig b/src/main.zig
index 3ef9cad..89130f5 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -1,8 +1,8 @@
 const mini_uart = @import("mini_uart.zig");
 
-export fn main() void {
+export fn main(dt_addr: u32) void {
     mini_uart.enable();
-    mini_uart.writeString(" hello, world!\n");
+    mini_uart.print("meow\n0x{x}\n", .{dt_addr});
 
     while (true) {}
 }
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 {};
+}