Files
kern/include/isrs.h
T

129 lines
3.3 KiB
C

#ifndef ISRS_H
#define ISRS_H
#include "idt.h"
#include "screen.h"
#include "system.h"
#include "string.h"
char* exceptionMessages[] = {
"Divide By Zero Error",
"Debug Exception",
"NMI Interrupt",
"Breakpoint",
"Overflow",
"BOUND Range Exceeded",
"Invalid Opcode",
"Device Not Available",
"Double Fault",
"Coprocessor Segment Overrun",
"Invalid TSS",
"Segment Not Present",
"Stack-Segment Fault",
"General Protection Fault",
"Page Fault",
"Reserved",
"x87 FPU Floating-Point Error",
"Alignment Check",
"Machine Check",
"Reserved",
"Reserved",
"Reserved",
"Reserved",
"Reserved",
"Reserved",
"Reserved",
"Reserved",
"Reserved",
"Reserved",
"Reserved",
"Reserved",
"Reserved",
};
// Repetative isr definitions
extern void isr0();
extern void isr1();
extern void isr2();
extern void isr3();
extern void isr4();
extern void isr5();
extern void isr6();
extern void isr7();
extern void isr8();
extern void isr9();
extern void isr10();
extern void isr11();
extern void isr12();
extern void isr13();
extern void isr14();
extern void isr15();
extern void isr16();
extern void isr17();
extern void isr18();
extern void isr19();
extern void isr20();
extern void isr21();
extern void isr22();
extern void isr23();
extern void isr24();
extern void isr25();
extern void isr26();
extern void isr27();
extern void isr28();
extern void isr29();
extern void isr30();
extern void isr31();
void setupIsrs() {
idtSetGate(0, (unsigned)isr0, 0x08, 0x8e);
idtSetGate(1, (unsigned)isr1, 0x08, 0x8e);
idtSetGate(2, (unsigned)isr2, 0x08, 0x8e);
idtSetGate(3, (unsigned)isr3, 0x08, 0x8e);
idtSetGate(4, (unsigned)isr4, 0x08, 0x8e);
idtSetGate(5, (unsigned)isr5, 0x08, 0x8e);
idtSetGate(6, (unsigned)isr6, 0x08, 0x8e);
idtSetGate(7, (unsigned)isr7, 0x08, 0x8e);
idtSetGate(8, (unsigned)isr8, 0x08, 0x8e);
idtSetGate(9, (unsigned)isr9, 0x08, 0x8e);
idtSetGate(10, (unsigned)isr10, 0x08, 0x8e);
idtSetGate(11, (unsigned)isr11, 0x08, 0x8e);
idtSetGate(12, (unsigned)isr12, 0x08, 0x8e);
idtSetGate(13, (unsigned)isr13, 0x08, 0x8e);
idtSetGate(14, (unsigned)isr14, 0x08, 0x8e);
idtSetGate(15, (unsigned)isr15, 0x08, 0x8e);
idtSetGate(16, (unsigned)isr16, 0x08, 0x8e);
idtSetGate(17, (unsigned)isr17, 0x08, 0x8e);
idtSetGate(18, (unsigned)isr18, 0x08, 0x8e);
idtSetGate(19, (unsigned)isr19, 0x08, 0x8e);
idtSetGate(20, (unsigned)isr20, 0x08, 0x8e);
idtSetGate(21, (unsigned)isr21, 0x08, 0x8e);
idtSetGate(22, (unsigned)isr22, 0x08, 0x8e);
idtSetGate(23, (unsigned)isr23, 0x08, 0x8e);
idtSetGate(24, (unsigned)isr24, 0x08, 0x8e);
idtSetGate(25, (unsigned)isr25, 0x08, 0x8e);
idtSetGate(26, (unsigned)isr26, 0x08, 0x8e);
idtSetGate(27, (unsigned)isr27, 0x08, 0x8e);
idtSetGate(28, (unsigned)isr28, 0x08, 0x8e);
idtSetGate(29, (unsigned)isr29, 0x08, 0x8e);
idtSetGate(30, (unsigned)isr30, 0x08, 0x8e);
idtSetGate(31, (unsigned)isr31, 0x08, 0x8e);
}
void faultHandler(struct regs* r) {
if (r->intNo < 32) {
print(exceptionMessages[r->intNo]);
if (r->errCode) {
print(": 0x");
print(itoa(r->errCode, 16));
}
cli();
hlt();
}
}
#endif