5 GATE_DESCRIPTOR idt[ NUM_IDT ];
6 SEGMENT_DESCRIPTOR gdt[ NUM_GDT ];
9 void setupInterruptGate( int int_num, void *interrupt_handler )
11 setupGateDescriptor( int_num,
12 ( int )interrupt_handler,
14 DEF_IDT_FLAGS_PRESENT | DEF_IDT_FLAGS_INTGATE_32BIT );
17 void setupGateDescriptor( int int_num,int base,unsigned short selector,unsigned char flags )
19 idt[ int_num ].baseLo = ( unsigned short )( base & 0x0000FFFF );
20 idt[ int_num ].selector = selector;
21 idt[ int_num ].reserved = 0x00;
22 idt[ int_num ].flags = flags;
23 idt[ int_num ].baseHi = ( unsigned short )( ( base & 0xFFFF0000 ) >> 16 );
28 __asm__ __volatile__ ( "lgdt gdtr" );
29 __asm__ __volatile__ ( "mov %ax, 0x10" );
30 __asm__ __volatile__ ( "mov %ds, %ax" );
31 __asm__ __volatile__ ( "mov %es, %ax" );
32 __asm__ __volatile__ ( "mov %fs, %ax" );
33 __asm__ __volatile__ ( "mov %gs, %ax" );
34 __asm__ __volatile__ ( "mov %ss, %ax" );
41 __asm__ __volatile__ ("lidt idtr");