summaryrefslogtreecommitdiff
path: root/src/kernel/core/sys.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/core/sys.c')
-rw-r--r--src/kernel/core/sys.c21
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() {