//! SPDX-License-Identifier: AGPL-3.0-or-later //! Copyright 2025 Ahmad Ali Parr / SnapKitty — https://github.com/SNAPKITTYWEST/phaser-ags //! โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• //! PHASER AGS โ€” Zig kernel entry point //! //! Boot sequence for the NAND-derived RV32I core on OMAP3530: //! 1. start.S: set stack, zero BSS, install trap vector //! 2. kernelMain: board init โ†’ page alloc โ†’ VM โ†’ timer โ†’ shell //! 3. Shell: interactive over UART, commands for debug/control //! //! Build: zig build-exe main.zig -target riscv64-freestanding-none //! -O ReleaseSmall -linker-script kernel.ld //! โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• const std = @import("std"); const driver = @import("driver.zig"); const trap = @import("trap.zig"); const memory = @import("memory.zig"); const timer = @import("timer.zig"); const process = @import("process.zig"); const shell = @import("shell.zig"); // โ”€โ”€โ”€ Kernel entry (called from start.S after BSS clear) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ export fn kernelMain() callconv(.C) void { // โ”€โ”€ Phase 1: Board bring-up โ”€โ”€ driver.Board.earlyInit(); driver.Board.consoleInit(); driver.Uart.puts("โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”\n"); driver.Uart.puts("โ”‚ Phaser AGS Universal Kernel โ”‚\n"); driver.Uart.puts("โ”‚ RV32I on NAND-derived Chisel core โ”‚\n"); driver.Uart.puts("โ”‚ Zig driver ยท Nim register macros โ”‚\n"); driver.Uart.puts("โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜\n"); // โ”€โ”€ Phase 2: Page allocator โ”€โ”€ memory.initPageAlloc(); // โ”€โ”€ Phase 3: Trap framework โ”€โ”€ trap.initDefaults(); driver.Uart.puts("Trap handlers installed\n"); // โ”€โ”€ Phase 4: Process table โ”€โ”€ process.init(); // โ”€โ”€ Phase 5: Timer (10ms tick at assumed 10 MHz CLINT) โ”€โ”€ timer.init(10_000_000, 10); timer.setCallback(process.schedTick); driver.Uart.puts("Timer: 10 ms ticks, scheduler callback\n"); // โ”€โ”€ Phase 6: Enable interrupts โ”€โ”€ driver.csrSet(driver.CSR.MIE, 1 << 7); // MTIE driver.csrSet(driver.CSR.MSTATUS, 0x08); // MIE driver.Uart.puts("Interrupts enabled\n"); // โ”€โ”€ Phase 7: Kernel shell โ”€โ”€ driver.Uart.puts("All subsystems up โ€” entering shell\n\n"); shell.run(); }