diff --git a/src/interrupts/x86/interrupts.cpp b/src/interrupts/x86/interrupts.cpp index 971e6a8..9e5c964 100644 --- a/src/interrupts/x86/interrupts.cpp +++ b/src/interrupts/x86/interrupts.cpp @@ -1,8 +1,12 @@ #include "../interrupts.hpp" #include "idt.hpp" +#include "inthandlers.hpp" kernel::Interrupts::Interrupts() { + idt[0] = InterruptDescriptor((void*) &divisionByZero, InterruptDescriptor::INT32, 0); + idt[8] = InterruptDescriptor((void*) &doubleFaultHandler, InterruptDescriptor::INT32, 0); + idt[0x80] = InterruptDescriptor((void*) &syscallHandler, InterruptDescriptor::INT32, 0); // Load interrupt handlers // Configure PIC _lidt(); diff --git a/src/interrupts/x86/inthandlers.cpp b/src/interrupts/x86/inthandlers.cpp index 59ce3ad..6519620 100644 --- a/src/interrupts/x86/inthandlers.cpp +++ b/src/interrupts/x86/inthandlers.cpp @@ -13,20 +13,27 @@ __attribute__ ((interrupt)) void gpFaultHandler(void* frame, unsigned int error) { *display = 'a'; - asm("hlt"); + display += 2; } __attribute__ ((interrupt)) void pageFaultHandler(void* frame, unsigned int error) { *display = '0'; - //asm("hlt"); + display += 2; } __attribute__ ((interrupt)) void doubleFaultHandler(void* frame, unsigned int error) { *display = '#'; - //asm("hlt"); + asm("hlt"); +} + +__attribute__ ((interrupt)) +void syscallHandler(void* frame) +{ + *display = 'z'; + display += 2; } diff --git a/src/interrupts/x86/inthandlers.hpp b/src/interrupts/x86/inthandlers.hpp index 10f085b..bf92c56 100644 --- a/src/interrupts/x86/inthandlers.hpp +++ b/src/interrupts/x86/inthandlers.hpp @@ -13,4 +13,7 @@ void pageFaultHandler(void* frame, unsigned int error); __attribute__ ((interrupt)) void doubleFaultHandler(void* frame, unsigned int error); +__attribute__ ((interrupt)) +void syscallHandler(void* frame); + #endif