# MARKUS MAIWALD (ARCHITECT) | VOXIS FORGE (AI) # Rumpk Layer 1: The Logic Core (Autonomous Immune System) {.push stackTrace: off, lineTrace: off.} import fiber import ion import loader var ion_paused*: bool = false var pause_start*: uint64 = 0 var matrix_enabled*: bool = false # ========================================================= # Fiber Management (Forward Declared) # ========================================================= var fiber_ion: FiberObject var fiber_nexshell: FiberObject var fiber_ui: FiberObject var fiber_subject: FiberObject var fiber_watchdog: FiberObject var subject_loading_path: string = "bin/nipbox" proc subject_fiber_entry() {.cdecl.} = ## The Sovereign Container for Userland Consciousness. ## This loop persists across program reloads. while true: let entry = kload(subject_loading_path) if entry != 0: kprintln("[Subject] Consciousness Transferred.") rumpk_enter_userland(entry) kprintln("[Subject] Failed to load or returned. Pausing for Rebirth.") fiber_yield() # --- STACK ALLOCATIONS --- var stack_ion {.align: 16.}: array[4096, uint8] var stack_nexshell {.align: 16.}: array[4096, uint8] var stack_ui {.align: 16.}: array[32768, uint8] var stack_subject {.align: 16.}: array[32768, uint8] var stack_watchdog {.align: 16.}: array[4096, uint8] # Exports for Zig NPLs proc console_write(p: pointer, len: csize_t) {.importc, cdecl.} proc write*(fd: cint, p: pointer, len: csize_t): csize_t {.exportc, cdecl.} = console_write(p, len) return len # Utility for Logic Core proc kwrite*(p: pointer, len: csize_t) {.exportc, cdecl.} = if p != nil and len > 0: console_write(p, len) proc kprint*(s: cstring) {.exportc, cdecl.} = if s != nil: let length = len(s) if length > 0: kwrite(cast[pointer](s), csize_t(length)) proc kprint_hex*(n: uint64) {.exportc, cdecl.} = const hex_chars = "0123456789ABCDEF" var buf: array[18, char] buf[0] = '0' buf[1] = 'x' for i in 0..15: let nibble = (n shr (60 - (i * 4))) and 0xF buf[i+2] = hex_chars[nibble] console_write(addr buf[0], 18) proc kprintln*(s: cstring) {.exportc, cdecl.} = kprint(s); kprint("\n") import fs/tar # --- INITRD SYMBOLS --- var binary_initrd_tar_start {.importc: "_binary_initrd_tar_start".}: char var binary_initrd_tar_end {.importc: "_binary_initrd_tar_end".}: char # ========================================================= # Shared Infrastructure # ========================================================= const SYSTABLE_BASE = 0x83000000'u64 # Global Rings (The Pipes - L0 Physics) var guest_rx_hal: HAL_Ring[IonPacket] var guest_tx_hal: HAL_Ring[IonPacket] var guest_event_hal: HAL_Ring[IonPacket] var guest_cmd_hal: HAL_Ring[CmdPacket] # Shared Channels (The Valves - L1 Logic) # Shared Channels var chan_rx*: SovereignChannel[IonPacket] var chan_tx*: SovereignChannel[IonPacket] var chan_event*: SovereignChannel[IonPacket] var chan_cmd*: SovereignChannel[CmdPacket] # chan_input is now imported from ion.nim! proc ion_push_stdin*(p: pointer, len: csize_t) {.exportc, cdecl.} = ## Push raw console data into the Userland Input Ring # [FIX] Safety Guard if chan_input.ring == nil: return var pkt = ion_alloc() if pkt.data == nil: return let to_copy = min(int(len), 2048) copyMem(pkt.data, p, to_copy) pkt.len = uint16(to_copy) chan_input.send(pkt) proc get_ion_load(): int = ## Calculate load of the Command Ring (The Heartbeat of the NPLs) let head = guest_cmd_hal.head let tail = guest_cmd_hal.tail let mask = guest_cmd_hal.mask return int((head - tail) and mask) proc rumpk_yield_internal() {.cdecl, exportc.} # HAL Driver API proc hal_io_init() {.importc, cdecl.} proc virtio_net_poll() {.importc, cdecl.} proc virtio_net_send(data: pointer, len: csize_t) {.importc, cdecl.} proc ion_free_raw(id: uint16) {.importc, cdecl.} proc nexshell_main() {.importc, cdecl.} proc ui_fiber_entry() {.importc, cdecl.} proc get_now_ns(): uint64 = proc rumpk_timer_now_ns(): uint64 {.importc, cdecl.} return rumpk_timer_now_ns() proc fiber_yield*() {.exportc, cdecl.} = rumpk_yield_internal() proc fiber_sleep*(ms: int) {.exportc, cdecl.} = let now = get_now_ns() current_fiber.sleep_until = now + uint64(ms) * 1000000'u64 fiber_yield() proc rumpk_yield_internal() {.cdecl, exportc.} = let load = get_ion_load() let now = get_now_ns() # 🏛️ ADAPTIVE GOVERNOR (Phase 3: FLOOD CONTROL) if load > 200: if current_fiber != addr fiber_ion: switch(addr fiber_ion) return elif load > 0: if current_fiber == addr fiber_subject: switch(addr fiber_ion) return # Normal Round Robin logic with Sleep Check var next_fiber: Fiber = nil if current_fiber == addr fiber_ion: next_fiber = addr fiber_nexshell elif current_fiber == addr fiber_nexshell: next_fiber = addr fiber_ui elif current_fiber == addr fiber_ui: next_fiber = addr fiber_subject elif current_fiber == addr fiber_subject: next_fiber = addr fiber_watchdog else: next_fiber = addr fiber_ion # Skip sleeping fibers var found = false for _ in 0..5: # Max 5 check to avoid skip all if next_fiber != nil and now >= next_fiber.sleep_until: found = true break # Move to next in sequence if next_fiber == addr fiber_ion: next_fiber = addr fiber_nexshell elif next_fiber == addr fiber_nexshell: next_fiber = addr fiber_ui elif next_fiber == addr fiber_ui: next_fiber = addr fiber_subject elif next_fiber == addr fiber_subject: next_fiber = addr fiber_watchdog else: next_fiber = addr fiber_ion if found and next_fiber != current_fiber: switch(next_fiber) elif not found: asm "csrsi sstatus, 2" # ========================================================= # ION Loop # ========================================================= proc ion_fiber_entry() {.cdecl.} = kprintln("[ION] Fiber 1 Reporting for Duty.") while true: # 1. Drain Command Channel -> Push to HW var cmd: CmdPacket while chan_cmd.recv(cmd): kprintln("[ION DEBUG] Command received!") kprint("[ION DEBUG] cmd.kind = 0x") kprint_hex(uint64(cmd.kind)) kprintln("") # Dump Raw Packet (4 x 64-bit) let ptr64 = cast[ptr array[4, uint64]](addr cmd) kprint("[ION DEBUG] RAW64: ") kprint_hex(ptr64[0]); kprint(" ") kprint_hex(ptr64[1]); kprint(" ") kprint_hex(ptr64[2]); kprint(" ") kprint_hex(ptr64[3]); kprintln("") # Cortex Logic: Dispatch Commands case cmd.kind: of uint32(CmdType.CMD_GPU_MATRIX): let msg = if cmd.arg > 0: "ENGAGE" else: "DISENGAGE" kprintln("[Kernel] Matrix Protocol: ") kprintln(cstring(msg)) matrix_enabled = (cmd.arg > 0) of uint32(CmdType.CMD_SYS_EXIT): kprint("[Kernel] Subject Exited. Status: ") kprint_hex(cmd.arg) kprintln("") kprintln("[Kernel] Respawning Shell...") subject_loading_path = "bin/nipbox" init_fiber(addr fiber_subject, subject_fiber_entry, addr stack_subject[ 0], stack_subject.len) of uint32(CmdType.CMD_ION_STOP): ion_paused = true pause_start = get_now_ns() kprintln("[Kernel] ION PAUSED by Watchdog.") of uint32(CmdType.CMD_ION_START): ion_paused = false kprintln("[Kernel] ION RESUMED.") of uint32(CmdType.CMD_GET_GPU_STATUS): let msg = if matrix_enabled: "STATUS: Matrix is ONLINE" else: "STATUS: Matrix is OFFLINE" kprintln("[Kernel] GPU Request") kprintln(cstring(msg)) of uint32(CmdType.CMD_ION_FREE): # Userland is returning a packet ion_free_raw(uint16(cmd.arg)) of uint32(CmdType.CMD_SYS_EXEC): kprintln("[Kernel] CMD_SYS_EXEC received!") let path_ptr = cast[cstring](cmd.arg) let path_str = $path_ptr kprint("[Kernel] Summoning: ") kprintln(cstring(path_str)) subject_loading_path = path_str init_fiber(addr fiber_subject, subject_fiber_entry, addr stack_subject[ 0], stack_subject.len) else: discard # 2. Check HW -> Push to Logic Channel # (Virtio Net Poll is called from HAL via Interrupts normally, # but here we might poll in ION fiber if no interrupts) proc virtio_net_poll() {.importc, cdecl.} virtio_net_poll() fiber_yield() # ========================================================= # Kernel Infrastructure Entry # ========================================================= # ========================================================= # Kernel Infrastructure Entry # = ========================================================= # HAL/NPL Entry points proc rumpk_halt() {.importc, cdecl, noreturn.} # Hardware Ingress (Zig -> Nim) proc ion_get_virt(id: uint16): pointer {.importc, cdecl.} proc ion_ingress*(id: uint16, len: uint16) {.exportc, cdecl.} = ## Intercept raw hardware packet and push to Sovereign RX Channel let data = ion_get_virt(id) var pkt = IonPacket(data: cast[ptr UncheckedArray[byte]](data), len: len, id: id) chan_rx.send(pkt) # Panic Handler proc nimPanic(msg: cstring) {.exportc: "panic", cdecl, noreturn.} = kprintln("\n[PANIC] ") kprintln(msg) rumpk_halt() # Include Watchdog Logic include watchdog # ========================================================= # kmain: The Orchestrator # ========================================================= proc kmain() {.exportc, cdecl.} = kprintln("\n\n") kprintln("╔═══════════════════════════════════════╗") kprintln("║ NEXUS RUMK v1.1 - SOVEREIGN ║") kprintln("╚═══════════════════════════════════════╝") # 1. Hardware & Memory kprintln("[Kernel] Initializing Memory Substrate...") ion_pool_init() # [FIX] Input Channel Init BEFORE Drivers ion_init_input() hal_io_init() # 1.1 VFS (InitRD) vfs_init(addr binary_initrd_tar_start, addr binary_initrd_tar_end) # Wire VFS to SysTable (Hypercall Vector) let sys = cast[ptr SysTable](SYSTABLE_BASE) sys.fn_vfs_open = cast[pointer](ion_vfs_open) sys.fn_vfs_read = cast[pointer](ion_vfs_read) sys.fn_vfs_list = cast[pointer](ion_vfs_list) sys.fn_log = cast[pointer](kwrite) # 1.5 The Retina (VirtIO-GPU) proc virtio_gpu_init(base: uint64) {.importc, cdecl.} proc matrix_init() {.importc, cdecl.} # On QEMU virt machine, virtio-mmio devices are at 0x10001000-0x10008000 # GPU could be at any slot. kprintln("[Kernel] Scanning for VirtIO-GPU...") for i in 1..8: let base_addr = 0x10000000'u64 + (uint64(i) * 0x1000'u64) virtio_gpu_init(base_addr) # Initial Matrix greeting matrix_init() # 2. Channel Infrastructure kprintln("[Kernel] Mapping Sovereign Channels...") # Initialize Invariant Shield (Masking) for r in [addr guest_rx_hal, addr guest_tx_hal, addr guest_event_hal]: r.head = 0 r.tail = 0 r.mask = 255 guest_cmd_hal.head = 0 guest_cmd_hal.tail = 0 guest_cmd_hal.mask = 255 # Input HAL init removed - handled by ion_init_input chan_rx.ring = addr guest_rx_hal chan_tx.ring = addr guest_tx_hal chan_event.ring = addr guest_event_hal chan_cmd.ring = addr guest_cmd_hal # chan_input ring set in ion_init_input let sys_table = cast[ptr SysTable](SYSTABLE_BASE) sys_table.magic = 0x4E585553 sys_table.s_rx = addr guest_rx_hal sys_table.s_tx = addr guest_tx_hal sys_table.s_event = addr guest_event_hal sys_table.s_cmd = addr guest_cmd_hal sys_table.s_input = chan_input.ring # From global # 3. The Nerve (Yield Anchor) proc rumpk_yield_guard() {.importc, cdecl.} let yield_ptr_loc = cast[ptr pointer](0x83000FF0'u64) yield_ptr_loc[] = cast[pointer](rumpk_yield_guard) # 4. Deployment kprintln("[Kernel] Spawning System Fibers...") # 1. ION FIBER (The Valve) init_fiber(addr fiber_ion, ion_fiber_entry, addr stack_ion[0], sizeof(stack_ion)) # 2. NEXSHELL FIBER (The Brain) init_fiber(addr fiber_nexshell, nexshell_main, addr stack_nexshell[0], sizeof(stack_nexshell)) # 3. UI FIBER (The Face) init_fiber(addr fiber_ui, ui_fiber_entry, addr stack_ui[0], sizeof(stack_ui)) # 4. SUBJECT FIBER (The Payload) init_fiber(addr fiber_subject, subject_fiber_entry, addr stack_subject[0], sizeof(stack_subject)) # 5. WATCHDOG FIBER (The Immune System) init_fiber(addr fiber_watchdog, watchdog_loop, addr stack_watchdog[0], sizeof(stack_watchdog)) # [FIX] GLOBAL INTERRUPT ENABLE # Open the ear before we enter the loop. kprintln("[Kernel] Enabling Supervisor Interrupts (SIE)...") asm "csrsi sstatus, 2" kprintln("[Kernel] All Systems Go. Entering Autonomous Loop.") # Handover to Scheduler (The Heartbeat) switch(addr fiber_ion) {.pop.}