summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/console.c1
-rw-r--r--kernel/kernel.c24
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");