summaryrefslogtreecommitdiff
path: root/kernel/kernel.c
diff options
context:
space:
mode:
authorMichal Idziorek <m.i@gmx.at>2014-07-08 12:14:15 +0200
committerMichal Idziorek <m.i@gmx.at>2014-07-08 12:14:15 +0200
commit24c2a30b304ac1285db71375e31f46f85b50b1bc (patch)
treeea59569e9c9abf221e191516a7a4fd78331ff51b /kernel/kernel.c
parent264e6ebaa0816d0d2070090ebd7a75d7767929cb (diff)
Refactoring and movint Interrupt Vector Setup to C
Diffstat (limited to 'kernel/kernel.c')
-rw-r--r--kernel/kernel.c24
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");