diff options
Diffstat (limited to 'src/kernel/core/sys.c')
-rw-r--r-- | src/kernel/core/sys.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/kernel/core/sys.c b/src/kernel/core/sys.c index 1e07f7c..96d4908 100644 --- a/src/kernel/core/sys.c +++ b/src/kernel/core/sys.c @@ -1,6 +1,9 @@ #include "sys.h" #include "monitor.h" +/* These four functions are wrappers around ASM operations. + These functions are used when comunicating with the system hardware. */ + void outb(uint16_t port, uint8_t value) { asm volatile("outb %1, %0" : : "dN"(port), "a"(value)); } @@ -21,14 +24,24 @@ uint16_t inw(uint16_t port) { return ret; } +/* These two functions stop the system, reporting an error message, because something bad happenned. */ + void panic(char* message, char* file, int line) { - monitor_write("\n>> PANIC: >>"); - monitor_write(message); monitor_write("<< at "); monitor_write(file); - monitor_write(":"); monitor_writeDec(line); - monitor_write("\nSystem halted -_-'"); + monitor_write("\n\nPANIC:\t\t"); monitor_write(message); + monitor_write("\n File:\t\t"); monitor_write(file); monitor_put(':'); monitor_writeDec(line); + monitor_write("\n\t\tSystem halted -_-'\n"); + asm volatile("cli; hlt"); +} + +void panic_assert(char* assertion, char* file, int line) { + monitor_write("\n\nASSERT FAILED:\t"); monitor_write(assertion); + monitor_write("\n File:\t\t"); monitor_write(file); monitor_put(':'); monitor_writeDec(line); + monitor_write("\n\t\tSystem halted -_-'\n"); asm volatile("cli; hlt"); } +/* Global system mutex. See comments in sys.h. */ + static uint32_t if_locks = 1; void cli() { |