idt* idt_setup_default() { if (idt_default == NULL) idt_default = (idt*)malloc(sizeof(idt)); for (sysint i = 0; i < sizeof(idt); i ++) ((byte*)idt_get_default())[i] = 0; for (int i = 0; i < 256; i ++) idt_set_entry(idt_get_default(), i, &isr_handler, 8, 0x8E00); return idt_default; }
bool isrs_setup(void) { return idt_set_entry(0, (uint32_t)((void *)(isr0)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(1, (uint32_t)((void *)(isr1)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(2, (uint32_t)((void *)(isr2)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(3, (uint32_t)((void *)(isr3)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(4, (uint32_t)((void *)(isr4)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(5, (uint32_t)((void *)(isr5)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(6, (uint32_t)((void *)(isr6)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(7, (uint32_t)((void *)(isr7)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(8, (uint32_t)((void *)(isr8)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(9, (uint32_t)((void *)(isr9)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(10, (uint32_t)((void *)(isr10)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(11, (uint32_t)((void *)(isr11)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(12, (uint32_t)((void *)(isr12)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(13, (uint32_t)((void *)(isr13)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(14, (uint32_t)((void *)(isr14)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(15, (uint32_t)((void *)(isr15)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(16, (uint32_t)((void *)(isr16)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(17, (uint32_t)((void *)(isr17)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(18, (uint32_t)((void *)(isr18)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(19, (uint32_t)((void *)(isr19)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(20, (uint32_t)((void *)(isr20)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(21, (uint32_t)((void *)(isr21)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(22, (uint32_t)((void *)(isr22)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(23, (uint32_t)((void *)(isr23)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(24, (uint32_t)((void *)(isr24)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(25, (uint32_t)((void *)(isr25)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(26, (uint32_t)((void *)(isr26)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(27, (uint32_t)((void *)(isr27)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(28, (uint32_t)((void *)(isr28)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(29, (uint32_t)((void *)(isr29)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(30, (uint32_t)((void *)(isr30)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)) && idt_set_entry(31, (uint32_t)((void *)(isr31)), CODE_SEGMENT, MAKE_IDT_FLAG(SEGMENT_PRESENT, RING_OS)); }
void idt_init() { memset(idt_entries, 0, sizeof(idt_entries)); idt_ptr.base = (uint32_t)idt_entries; idt_ptr.limit = sizeof(idt_entries) - 1; pic_init(); idt_set_entry( 0, (uint32_t)exception0 , 0x08, 0x8E); idt_set_entry( 1, (uint32_t)exception1 , 0x08, 0x8E); idt_set_entry( 2, (uint32_t)exception2 , 0x08, 0x8E); idt_set_entry( 3, (uint32_t)exception3 , 0x08, 0x8E); idt_set_entry( 4, (uint32_t)exception4 , 0x08, 0x8E); idt_set_entry( 5, (uint32_t)exception5 , 0x08, 0x8E); idt_set_entry( 6, (uint32_t)exception6 , 0x08, 0x8E); idt_set_entry( 7, (uint32_t)exception7 , 0x08, 0x8E); idt_set_entry( 8, (uint32_t)exception8 , 0x08, 0x8E); idt_set_entry( 9, (uint32_t)exception9 , 0x08, 0x8E); idt_set_entry(10, (uint32_t)exception10, 0x08, 0x8E); idt_set_entry(11, (uint32_t)exception11, 0x08, 0x8E); idt_set_entry(12, (uint32_t)exception12, 0x08, 0x8E); idt_set_entry(13, (uint32_t)exception13, 0x08, 0x8E); idt_set_entry(14, (uint32_t)exception14, 0x08, 0x8E); idt_set_entry(15, (uint32_t)exception15, 0x08, 0x8E); idt_set_entry(16, (uint32_t)exception16, 0x08, 0x8E); idt_set_entry(17, (uint32_t)exception17, 0x08, 0x8E); idt_set_entry(18, (uint32_t)exception18, 0x08, 0x8E); idt_set_entry(19, (uint32_t)exception19, 0x08, 0x8E); idt_set_entry(20, (uint32_t)exception20, 0x08, 0x8E); idt_set_entry(21, (uint32_t)exception21, 0x08, 0x8E); idt_set_entry(22, (uint32_t)exception22, 0x08, 0x8E); idt_set_entry(23, (uint32_t)exception23, 0x08, 0x8E); idt_set_entry(24, (uint32_t)exception24, 0x08, 0x8E); idt_set_entry(25, (uint32_t)exception25, 0x08, 0x8E); idt_set_entry(26, (uint32_t)exception26, 0x08, 0x8E); idt_set_entry(27, (uint32_t)exception27, 0x08, 0x8E); idt_set_entry(28, (uint32_t)exception28, 0x08, 0x8E); idt_set_entry(29, (uint32_t)exception29, 0x08, 0x8E); idt_set_entry(30, (uint32_t)exception30, 0x08, 0x8E); idt_set_entry(31, (uint32_t)exception31, 0x08, 0x8E); idt_set_entry(32, (uint32_t)irq0, 0x08, 0x8E); idt_set_entry(33, (uint32_t)irq1, 0x08, 0x8E); idt_set_entry(34, (uint32_t)irq2, 0x08, 0x8E); idt_set_entry(35, (uint32_t)irq3, 0x08, 0x8E); idt_set_entry(36, (uint32_t)irq4, 0x08, 0x8E); idt_set_entry(37, (uint32_t)irq5, 0x08, 0x8E); idt_set_entry(38, (uint32_t)irq6, 0x08, 0x8E); idt_set_entry(39, (uint32_t)irq7, 0x08, 0x8E); idt_set_entry(40, (uint32_t)irq8, 0x08, 0x8E); idt_set_entry(41, (uint32_t)irq9, 0x08, 0x8E); idt_set_entry(42, (uint32_t)irq10, 0x08, 0x8E); idt_set_entry(43, (uint32_t)irq11, 0x08, 0x8E); idt_set_entry(44, (uint32_t)irq12, 0x08, 0x8E); idt_set_entry(45, (uint32_t)irq13, 0x08, 0x8E); idt_set_entry(46, (uint32_t)irq14, 0x08, 0x8E); idt_set_entry(47, (uint32_t)irq15, 0x08, 0x8E); idt_set_entry(128, (uint32_t)exception128, 0x08, 0x8E); idt_flush((uint32_t)&(idt_ptr)); asm volatile("sti"); }