diff options
Diffstat (limited to 'src/core/idt.cc')
| -rw-r--r-- | src/core/idt.cc | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/src/core/idt.cc b/src/core/idt.cc index a73d92c..25264b6 100644 --- a/src/core/idt.cc +++ b/src/core/idt.cc @@ -1,14 +1,16 @@ #include "idt.hpp" +#include "core/paging.hpp" #include "libs/string.hpp" -IDT_REGISTER IDTR = { - IDT_GATE_SIZE*IDT_MAX_ENTRIES, - IDT_ADDR -}; +u32 idt[IDT_MAX_ENTRIES][4] __attribute__((aligned(4096)));; +IDT_REGISTER IDTR; extern u64 INT_DEFAULT,INT_0,INT_14,INT_KBD; void idt_enable_interrupt(void){ + IDTR.base=((u64)idt); + IDTR.limit=sizeof(idt); + IDT_DESCRIPTOR d; d.ign=0; d.ist=0; @@ -25,7 +27,7 @@ void idt_enable_interrupt(void){ d.offset=(u64)&INT_14; idt_write_descriptor(d, i); } - else if(i==60){ // Page fault + else if(i==60){ // Keyboard d.offset=(u64)&INT_KBD; idt_write_descriptor(d, i); } @@ -34,12 +36,11 @@ void idt_enable_interrupt(void){ idt_write_descriptor(d, i); } } - + // Enable interrupts asm( - "lidt (IDTR) \n\t" - "sti \n\t" - ); + "lidt (IDTR) \n\t" + "sti \n\t "); } void idt_write_descriptor(IDT_DESCRIPTOR desc, u16 index){ @@ -47,9 +48,8 @@ void idt_write_descriptor(IDT_DESCRIPTOR desc, u16 index){ u32 desc32_63=desc.ist | desc.options | (desc.offset&0xFFFF0000); u32 desc64_95=desc.offset>>32; u32 desc96_127=desc.ign; - u32* dst=(u32*)(IDTR.base+index*IDT_GATE_SIZE); - *dst=desc0_31; - *(dst+1)=desc32_63; - *(dst+2)=desc64_95; - *(dst+3)=desc96_127; + idt[index][0]=desc0_31; + idt[index][1]=desc32_63; + idt[index][2]=desc64_95; + idt[index][3]=desc96_127; }
\ No newline at end of file |
