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 | |
| parent | switch to using mmio helpers in gpio (diff) | |
| download | zosimos-52273f14a91af4656beb35bd3fa1c9a66c7f07b1.tar.gz | |
formatted printing
| -rw-r--r-- | build.zig | 7 | ||||
| -rw-r--r-- | src/main.zig | 4 | ||||
| -rw-r--r-- | src/mini_uart.zig | 31 |
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 {}; +} |