ref: f801657f77f3923ec2388c25bdcb036c8019ba89
dir: /main.c/
#include <u.h> #include "mem.h" #include "dat.h" #include "fns.h" #include "libkern/kern.h" #include "debug.h" #include "prog/prog.h" Conf conf; Mach *m = (Mach*)MACHADDR; Proc *up = 0; int apsr_flags = 0; void main() { /* hardware bootstrap */ memset(m, 0, sizeof(Mach)); memset(edata, 0, end-edata); /* initialize system */ trapinit(); clockinit(); allocinit(); dmainit(); /* initialize peripherals and enable the DMA */ gpioinit(); afioinit(); uartinit(); dmaenable(); /* entrypoint */ gpio_toggle_n(3); print("\n /\\__/\\\n"); print(" ( ^ ^ )\n"); print(" `----`\n"); print("system booting kitzman unlimited © 2023\n"); for(int i = 0; i < 3; i++) { print("%d...", 3 - i); gpio_toggle_n(3); } print("\n"); print("boot: edata 0x%08x end 0x%08x\n", edata, end); /* operating system init */ DBGSTART print("boot: confinit...\n"); confinit(); DBGSTART print("boot: timersinit...\n"); timersinit(); DBGSTART print("boot: systick starting\n"); systickinit(); DBGSTART print("boot: procinit...\n"); procinit(); DBGSTART print("boot: userinit...\n"); userinit(); DBGSTART print("boot: scheduling\n"); schedinit(); while(1); } void idlehands() { } void halt() { print("system halted; you can now disconnect your devices\n"); while(1) gpio_toggle_n(6); } void reboot() { print("reboot function not yet implemented\n"); while(1) gpio_toggle_n(3); } void confinit() { conf.topofmem = DATAEADDR; conf.ialloc = BY2PG; conf.nproc = 8; conf.nmach = 1; active.machs = 1; active.exiting = 0; } void userinit() { Proc *p = prog_init0(); ready(p); }