#include "src/idt.h" #include "src/keyboard.h" #include "src/memory.h" #include "src/pic.h" #include "src/terminal.h" #include "src/util.h" #include "src/vga.h" __attribute__((interrupt)) void isr_divide_by_zero(struct interrupt_frame *frame) { vga_set_string(VGA_HEIGHT - 1, 0, "EXCEPTION: divide by zero", 0x4F); while (1) ; } __attribute__((interrupt)) void isr_page_fault(struct interrupt_frame *frame) { vga_set_string(VGA_HEIGHT - 1, 0, "EXCEPTION: page fault", 0x4F); while (1) ; } __attribute__((interrupt)) void isr_general_violation(struct interrupt_frame *frame) { vga_set_string(VGA_HEIGHT - 1, 0, "EXCEPTION: general violation", 0x4F); while (1) ; } __attribute__((interrupt)) void isr_ata_primary(struct interrupt_frame *frame) { outb(0x20, 0x20); outb(0xA0, 0x20); } void kernel_main() { pic_init(); idt_init(); outb(0x21, inb(0x21) | 0x01); // mask out timer interrupt idt_set_entry(0, isr_divide_by_zero, 0x8E); idt_set_entry(0x0E, isr_page_fault, 0x8E); idt_set_entry(0x0D, isr_general_violation, 0x8E); idt_set_entry(46, isr_ata_primary, 0x8E); __asm__ volatile("sti"); memory_init(); keyboard_init(); terminal_init(); while (1) ; }