diff options
Diffstat (limited to 'src/int/idt.c')
| -rw-r--r-- | src/int/idt.c | 39 |
1 files changed, 0 insertions, 39 deletions
diff --git a/src/int/idt.c b/src/int/idt.c deleted file mode 100644 index e3e71e8..0000000 --- a/src/int/idt.c +++ /dev/null @@ -1,39 +0,0 @@ -#include "idt.h" - -struct IDT_REGISTER IDTR={ - 8*IDT_MAX_ENTRY, - 0x0 -}; - -// Interrupt functions (cf int.S) -extern u32 -INT_DEFAULT, -INT_PAGE_FAULT, -INT_CLOCK, -INT_KEYPRESS, -INT_SYSCALL; - - -void idt_init(){ - // Map first default 32 entries - for(int i=0;i<IDT_MAX_ENTRY;i++){ - idt_write_entry((IDT_ENTRY){0x08,(u32)&INT_DEFAULT,IDT_INT_GATE},i); - if(i==14) - idt_write_entry((IDT_ENTRY){0x08,(u32)&INT_PAGE_FAULT,IDT_INT_GATE},i); - if(i==32) - idt_write_entry((IDT_ENTRY){0x08,(u32)&INT_CLOCK,IDT_INT_GATE},i); - if(i==33) - idt_write_entry((IDT_ENTRY){0x08,(u32)&INT_KEYPRESS,IDT_INT_GATE},i); - if(i==48) - idt_write_entry((IDT_ENTRY){0x08,(u32)&INT_SYSCALL,IDT_TRAP_GATE},i); - } - - asm("lidtl (IDTR)"); -} - -void idt_write_entry(IDT_ENTRY entry, int id){ - int descriptor[2]; - descriptor[0]=entry.offset & 0xFFFF | entry.segment << 16; - descriptor[1]=entry.type & 0xFFFF | entry.offset & 0xFFFF0000; - memcpy((void*)descriptor, (void *)(IDTR.base+(id*8)),8); -}
\ No newline at end of file |
