From 2c429f6e1ac51ea27f203005eeef20d2b05c759e Mon Sep 17 00:00:00 2001 From: Jake Mannens Date: Sat, 23 Jun 2018 08:28:19 +1000 Subject: Re-wrote interrupt handling. Now, flush_idt only initializes IDT entries 32-255. A separate routine in the new file traps.s initializes the first 32 entries with addresses pointing to exception handlers within said file. Modified the register_isr function to now accept a descriptor privilege level which it will assign to the modified IDT entry. Added a task state segment and corresponding entry to the GDT. The TSS will store the kernel's stack pointer and stack segment when switching to userspace. NOTE: The stack pointer MUST be saved manually before switching to userspace! Added the framework for a system call interface at interrupt vector 0x80 (128). --- kernel/syscall.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 kernel/syscall.c (limited to 'kernel/syscall.c') diff --git a/kernel/syscall.c b/kernel/syscall.c new file mode 100644 index 0000000..8fa5da0 --- /dev/null +++ b/kernel/syscall.c @@ -0,0 +1,12 @@ +#include +#include +#include + +/* main syscall handler */ +void syscall(va_list ap) { + uint8_t call; + char *s; + + printf("Call Number: 0x%02x\n", va_arg(ap, uint8_t)); + printf(va_arg(ap, char*)); +} -- cgit v1.3