Beispiel #1
0
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;
}
Beispiel #2
0
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));
}
Beispiel #3
0
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");
}