sylveos

Toy Operating System
Log | Files | Refs

commit 1be28b565b3da52c64f87f313806d554d1f39afe
parent 09706d2cb7559581198b024d80e25c83fec32ee2
Author: Sylvia Ivory <git@sivory.net>
Date:   Tue, 20 Jan 2026 18:30:06 -0800

Add more proper panic handler

Diffstat:
Msrc/devices/mini-uart.zig | 10+++++++---
Msrc/main.zig | 4+++-
Msrc/root.zig | 12+++++++++++-
3 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/src/devices/mini-uart.zig b/src/devices/mini-uart.zig @@ -34,10 +34,10 @@ const RxPin = enum(u8) { Gpio37 = 37, }; -// var is_initialized = false; +var initialized = false; pub fn initialize(baud: u32, tx_pin: TxPin, rx_pin: RxPin) Error!void { - // if (is_initialized) return Error.AlreadyInitialized; + if (initialized) return Error.AlreadyInitialized; // Set GPIO pins first (as specified by manual) // Page 102 specifies which alt mode @@ -100,7 +100,11 @@ pub fn initialize(baud: u32, tx_pin: TxPin, rx_pin: RxPin) Error!void { mem.put_u32(@ptrFromInt(AUX_MU_CNTL_REG), 0x3); // mem.put_u32(@ptrFromInt(AUX_MU_CNTL_REG), 2); - // is_initialized = true; + initialized = true; +} + +pub fn is_initialized() bool { + return initialized; } fn can_write() bool { diff --git a/src/main.zig b/src/main.zig @@ -2,5 +2,7 @@ const uart = @import("devices/mini-uart.zig"); pub fn main() !void { try uart.initialize(115200, .Gpio14, .Gpio15); - uart.write_slice("Hello, World!"); + uart.write_slice("Hello, World!\n"); + + @panic("oops"); } diff --git a/src/root.zig b/src/root.zig @@ -1,4 +1,6 @@ const std = @import("std"); + +const uart = @import("devices/mini-uart.zig"); const fake_main = @import("main.zig").main; export fn abort() noreturn { @@ -11,8 +13,16 @@ pub export fn kmain() void { } fn panic_handler(msg: []const u8, trace_addr: ?usize) noreturn { - _ = msg; + @branchHint(.cold); _ = trace_addr; + + if (uart.is_initialized()) { + uart.write_slice("Panic: "); + uart.write_slice(msg); + uart.write_byte('\n'); + } + + // TODO; proper abort abort(); }