diff options
Diffstat (limited to 'kernel/kernel.c')
| -rw-r--r-- | kernel/kernel.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/kernel/kernel.c b/kernel/kernel.c index c8b21cf..6719cdc 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -18,6 +18,8 @@ static struct int_desc } idt[INT_MAX]; +static struct int_desc *idt_old=0x1000; + // interrupt descriptor table descriptor static struct idt_desc { @@ -68,11 +70,15 @@ void int_install_ir(int irq, uint16_t flags, uint16_t sel, void *addr) uint64_t base=(uint64_t)&(*addr); // uint32_t base=addr; - idt[irq].addrLo = base & 0xffff; - idt[irq].addrHi = (base >> 16) & 0xffff; - idt[irq].zeros=0; - idt[irq].flags=flags; - idt[irq].sel=sel; + idt_old[irq].addrLo = base & 0xffff; + idt_old[irq].addrHi = (base >> 16) & 0xffff; + + idt_old[irq].addrLo = 0x087c; + idt_old[irq].addrHi = 0x0; + + idt_old[irq].zeros=0; + idt_old[irq].flags=flags; + idt_old[irq].sel=sel; } @@ -97,9 +103,11 @@ void kernel_main() { char str[]="ABC"; - int_init(0x08); // offset in GDT (CODE_SEG) - int_install(); - int_enable(); + // int_init(0x08); // offset in GDT (CODE_SEG) + int_install_ir(33,0b1000110,0x8,&int_def_handler); + int_install_ir(33,0b1000110,0x8,0x087c); + // int_install(); + // int_enable(); print_str(0,0,"Interrupts Enabled"); |
