diff options
| author | Michal Idziorek <m.i@gmx.at> | 2014-07-08 12:14:15 +0200 |
|---|---|---|
| committer | Michal Idziorek <m.i@gmx.at> | 2014-07-08 12:14:15 +0200 |
| commit | 24c2a30b304ac1285db71375e31f46f85b50b1bc (patch) | |
| tree | ea59569e9c9abf221e191516a7a4fd78331ff51b /kernel | |
| parent | 264e6ebaa0816d0d2070090ebd7a75d7767929cb (diff) | |
Refactoring and movint Interrupt Vector Setup to C
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/console.c | 1 | ||||
| -rw-r--r-- | kernel/kernel.c | 24 |
2 files changed, 17 insertions, 8 deletions
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"); |
