From 24c2a30b304ac1285db71375e31f46f85b50b1bc Mon Sep 17 00:00:00 2001 From: Michal Idziorek Date: Tue, 8 Jul 2014 12:14:15 +0200 Subject: Refactoring and movint Interrupt Vector Setup to C --- kernel/console.c | 1 + kernel/kernel.c | 24 ++++++++++++++++-------- 2 files changed, 17 insertions(+), 8 deletions(-) (limited to 'kernel') diff --git a/kernel/console.c b/kernel/console.c index 9381eed..48e5ee7 100644 --- a/kernel/console.c +++ b/kernel/console.c @@ -31,6 +31,7 @@ void print_hex(uint16_t val) } + void print_single_hex(int i) { if(i<10)print_char_col(posx,posy,'0'+i,SCR_GREEN); 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"); -- cgit v1.2.3