149 lines
4.8 KiB
C
149 lines
4.8 KiB
C
#include <drivers/idt/isr.h>
|
|
#include <drivers/terminal/terminal.h>
|
|
|
|
__attribute__((interrupt)) static void isr0(struct interrupt_frame* frame) {
|
|
terminal_writeline("Division By Zero");
|
|
asm("hlt");
|
|
}
|
|
|
|
__attribute__((interrupt)) static void isr1(struct interrupt_frame* frame) {
|
|
terminal_writeline("Debug");
|
|
asm("hlt");
|
|
}
|
|
|
|
__attribute__((interrupt)) static void isr2(struct interrupt_frame* frame) {
|
|
terminal_writeline("Non Maskable Interrupt");
|
|
asm("hlt");
|
|
}
|
|
|
|
__attribute__((interrupt)) static void isr3(struct interrupt_frame* frame) {
|
|
terminal_writeline("Breakpoint");
|
|
asm("hlt");
|
|
}
|
|
|
|
__attribute__((interrupt)) static void isr4(struct interrupt_frame* frame) {
|
|
terminal_writeline("Into Detected Overflow");
|
|
asm("hlt");
|
|
}
|
|
|
|
__attribute__((interrupt)) static void isr5(struct interrupt_frame* frame) {
|
|
terminal_writeline("Out of Bounds");
|
|
asm("hlt");
|
|
}
|
|
|
|
__attribute__((interrupt)) static void isr6(struct interrupt_frame* frame) {
|
|
terminal_writeline("Invalid Opcode");
|
|
asm("hlt");
|
|
}
|
|
|
|
__attribute__((interrupt)) static void isr7(struct interrupt_frame* frame) {
|
|
terminal_writeline("No Coprocessor");
|
|
asm("hlt");
|
|
}
|
|
|
|
__attribute__((interrupt)) static void isr8(struct interrupt_frame* frame) {
|
|
terminal_writeline("Double Fault");
|
|
asm("hlt");
|
|
}
|
|
|
|
__attribute__((interrupt)) static void isr9(struct interrupt_frame* frame) {
|
|
terminal_writeline("Coprocessor Segment Overrun");
|
|
asm("hlt");
|
|
}
|
|
|
|
__attribute__((interrupt)) static void isr10(struct interrupt_frame* frame) {
|
|
terminal_writeline("Bad TSS");
|
|
asm("hlt");
|
|
}
|
|
|
|
__attribute__((interrupt)) static void isr11(struct interrupt_frame* frame) {
|
|
terminal_writeline("Segment Not Present");
|
|
asm("hlt");
|
|
}
|
|
|
|
__attribute__((interrupt)) static void isr12(struct interrupt_frame* frame) {
|
|
terminal_writeline("Stack Fault");
|
|
asm("hlt");
|
|
}
|
|
|
|
__attribute__((interrupt)) static void isr13(struct interrupt_frame* frame) {
|
|
terminal_writeline("General Protection Fault");
|
|
|
|
terminal_writeline("heres some info:");
|
|
|
|
terminal_writestring("ip: ");
|
|
terminal_writeline(itoa(frame->ip));
|
|
terminal_writestring("sp: ");
|
|
terminal_writeline(itoa(frame->sp));
|
|
terminal_writestring("cs: ");
|
|
terminal_writeline(itoa(frame->cs));
|
|
|
|
asm("hlt");
|
|
}
|
|
|
|
__attribute__((interrupt)) static void isr14(struct interrupt_frame* frame) {
|
|
terminal_writeline("Page Fault");
|
|
asm("hlt");
|
|
}
|
|
|
|
__attribute__((interrupt)) static void isr15(struct interrupt_frame* frame) {
|
|
terminal_writeline("Unknown Interrupt");
|
|
asm("hlt");
|
|
}
|
|
|
|
__attribute__((interrupt)) static void isr16(struct interrupt_frame* frame) {
|
|
terminal_writeline("Coprocessor Fault");
|
|
asm("hlt");
|
|
}
|
|
|
|
__attribute__((interrupt)) static void isr17(struct interrupt_frame* frame) {
|
|
terminal_writeline("Alignment Check");
|
|
asm("hlt");
|
|
}
|
|
|
|
__attribute__((interrupt)) static void isr18(struct interrupt_frame* frame) {
|
|
terminal_writeline("Machine Check");
|
|
asm("hlt");
|
|
}
|
|
|
|
__attribute__((interrupt)) static void isr_reserved(struct interrupt_frame* frame) {
|
|
terminal_writeline("Reserved");
|
|
asm("hlt");
|
|
}
|
|
|
|
void isr_install(void) {
|
|
idt_register_handler(0, (unsigned long)isr0);
|
|
idt_register_handler(1, (unsigned long)isr1);
|
|
idt_register_handler(2, (unsigned long)isr2);
|
|
idt_register_handler(3, (unsigned long)isr3);
|
|
idt_register_handler(4, (unsigned long)isr4);
|
|
idt_register_handler(5, (unsigned long)isr5);
|
|
idt_register_handler(6, (unsigned long)isr6);
|
|
idt_register_handler(7, (unsigned long)isr7);
|
|
idt_register_handler(8, (unsigned long)isr8);
|
|
idt_register_handler(9, (unsigned long)isr9);
|
|
idt_register_handler(10, (unsigned long)isr10);
|
|
idt_register_handler(11, (unsigned long)isr11);
|
|
idt_register_handler(12, (unsigned long)isr12);
|
|
idt_register_handler(13, (unsigned long)isr13);
|
|
idt_register_handler(14, (unsigned long)isr14);
|
|
idt_register_handler(15, (unsigned long)isr15);
|
|
idt_register_handler(16, (unsigned long)isr16);
|
|
idt_register_handler(17, (unsigned long)isr17);
|
|
idt_register_handler(18, (unsigned long)isr18);
|
|
idt_register_handler(19, (unsigned long)isr_reserved);
|
|
idt_register_handler(20, (unsigned long)isr_reserved);
|
|
idt_register_handler(21, (unsigned long)isr_reserved);
|
|
idt_register_handler(22, (unsigned long)isr_reserved);
|
|
idt_register_handler(23, (unsigned long)isr_reserved);
|
|
idt_register_handler(24, (unsigned long)isr_reserved);
|
|
idt_register_handler(25, (unsigned long)isr_reserved);
|
|
idt_register_handler(26, (unsigned long)isr_reserved);
|
|
idt_register_handler(27, (unsigned long)isr_reserved);
|
|
idt_register_handler(28, (unsigned long)isr_reserved);
|
|
idt_register_handler(29, (unsigned long)isr_reserved);
|
|
idt_register_handler(30, (unsigned long)isr_reserved);
|
|
idt_register_handler(31, (unsigned long)isr_reserved);
|
|
|
|
idt_init();
|
|
} |