예제 #1
0
파일: isr.c 프로젝트: yms20/os1
void isr_install()
{
	set_idt_gate(0 , (uint32)isr0 );
	set_idt_gate(1 , (uint32)isr1 );
	set_idt_gate(2 , (uint32)isr2 );
	set_idt_gate(3 , (uint32)isr3 );
	set_idt_gate(4 , (uint32)isr4 );
	set_idt_gate(5 , (uint32)isr5 );
	set_idt_gate(6 , (uint32)isr6 );
	set_idt_gate(7 , (uint32)isr7 );
	set_idt_gate(8 , (uint32)isr8 );
	set_idt_gate(9 , (uint32)isr9 );

	set_idt_gate(10 , (uint32)isr10 );
	set_idt_gate(11 , (uint32)isr11 );
	set_idt_gate(12 , (uint32)isr12 );
	set_idt_gate(13 , (uint32)isr13 );
	set_idt_gate(14 , (uint32)isr14 );
	set_idt_gate(15 , (uint32)isr15 );
	set_idt_gate(16 , (uint32)isr16 );
	set_idt_gate(17 , (uint32)isr17 );
	set_idt_gate(18 , (uint32)isr18 );
	set_idt_gate(19 , (uint32)isr19 );

	set_idt_gate(20 , (uint32)isr20 );
	set_idt_gate(21 , (uint32)isr21 );
	set_idt_gate(22 , (uint32)isr22 );
	set_idt_gate(23 , (uint32)isr23 );
	set_idt_gate(24 , (uint32)isr24 );
	set_idt_gate(25 , (uint32)isr25 );
	set_idt_gate(26 , (uint32)isr26 );
	set_idt_gate(27 , (uint32)isr27 );
	set_idt_gate(28 , (uint32)isr28 );
	set_idt_gate(29 , (uint32)isr29 );

	set_idt_gate(30 , (uint32)isr30 );
	set_idt_gate(31 , (uint32)isr31 );

	set_idt();
}
예제 #2
0
파일: idt.c 프로젝트: Tsumaranai/OSDIY
void set_sys_gate(int n, void* addr){

		set_idt_gate((idt_desc*)&idt[n], 15, 3, addr);
}
예제 #3
0
파일: idt.c 프로젝트: Tsumaranai/OSDIY
void set_intr_gate(int n, void* addr){
	
	set_idt_gate((idt_desc*)&idt[n], 14, 0, addr);
}
예제 #4
0
파일: idt.c 프로젝트: Tsumaranai/OSDIY
void set_trap_gate(int n, void* addr){

		set_idt_gate((idt_desc*)&idt[n], 15, 0, addr);
}
예제 #5
0
/* Can't do this with a loop because we need the address
 * of the function names */
void isr_install() {
    set_idt_gate(0, (uint32_t)isr0);
    set_idt_gate(1, (uint32_t)isr1);
    set_idt_gate(2, (uint32_t)isr2);
    set_idt_gate(3, (uint32_t)isr3);
    set_idt_gate(4, (uint32_t)isr4);
    set_idt_gate(5, (uint32_t)isr5);
    set_idt_gate(6, (uint32_t)isr6);
    set_idt_gate(7, (uint32_t)isr7);
    set_idt_gate(8, (uint32_t)isr8);
    set_idt_gate(9, (uint32_t)isr9);
    set_idt_gate(10, (uint32_t)isr10);
    set_idt_gate(11, (uint32_t)isr11);
    set_idt_gate(12, (uint32_t)isr12);
    set_idt_gate(13, (uint32_t)isr13);
    set_idt_gate(14, (uint32_t)isr14);
    set_idt_gate(15, (uint32_t)isr15);
    set_idt_gate(16, (uint32_t)isr16);
    set_idt_gate(17, (uint32_t)isr17);
    set_idt_gate(18, (uint32_t)isr18);
    set_idt_gate(19, (uint32_t)isr19);
    set_idt_gate(20, (uint32_t)isr20);
    set_idt_gate(21, (uint32_t)isr21);
    set_idt_gate(22, (uint32_t)isr22);
    set_idt_gate(23, (uint32_t)isr23);
    set_idt_gate(24, (uint32_t)isr24);
    set_idt_gate(25, (uint32_t)isr25);
    set_idt_gate(26, (uint32_t)isr26);
    set_idt_gate(27, (uint32_t)isr27);
    set_idt_gate(28, (uint32_t)isr28);
    set_idt_gate(29, (uint32_t)isr29);
    set_idt_gate(30, (uint32_t)isr30);
    set_idt_gate(31, (uint32_t)isr31);

    // Remap the PIC
    port_byte_out(0x20, 0x11);
    port_byte_out(0xA0, 0x11);
    port_byte_out(0x21, 0x20);
    port_byte_out(0xA1, 0x28);
    port_byte_out(0x21, 0x04);
    port_byte_out(0xA1, 0x02);
    port_byte_out(0x21, 0x01);
    port_byte_out(0xA1, 0x01);
    port_byte_out(0x21, 0x0);
    port_byte_out(0xA1, 0x0);

    // Install the IRQs
    set_idt_gate(32, (uint32_t)irq0);
    set_idt_gate(33, (uint32_t)irq1);
    set_idt_gate(34, (uint32_t)irq2);
    set_idt_gate(35, (uint32_t)irq3);
    set_idt_gate(36, (uint32_t)irq4);
    set_idt_gate(37, (uint32_t)irq5);
    set_idt_gate(38, (uint32_t)irq6);
    set_idt_gate(39, (uint32_t)irq7);
    set_idt_gate(40, (uint32_t)irq8);
    set_idt_gate(41, (uint32_t)irq9);
    set_idt_gate(42, (uint32_t)irq10);
    set_idt_gate(43, (uint32_t)irq11);
    set_idt_gate(44, (uint32_t)irq12);
    set_idt_gate(45, (uint32_t)irq13);
    set_idt_gate(46, (uint32_t)irq14);
    set_idt_gate(47, (uint32_t)irq15);

    set_idt(); // Load with ASM
}