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 --- Makefile | 2 +- boot/mbr.asm | 4 +--- kernel/console.c | 1 + kernel/kernel.c | 24 ++++++++++++++++-------- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index 872c4e3..3977d62 100644 --- a/Makefile +++ b/Makefile @@ -29,7 +29,7 @@ console.o: kernel/console.c kernel/console.h gcc -ffreestanding -m32 -o $@ -c $< -fno-asynchronous-unwind-tables -O0 kernel.bin: kernel_entry.o kernel.o console.o - ld -o $@ -Ttext 0x1000 --oformat binary -melf_i386 $^ -O0 + ld -o $@ -Ttext 0x18f8 --oformat binary -melf_i386 $^ -O0 dump: vboxmanage debugvm FoolOs dumpguestcore --filename dump.elf diff --git a/boot/mbr.asm b/boot/mbr.asm index 41568c4..93126b1 100644 --- a/boot/mbr.asm +++ b/boot/mbr.asm @@ -232,9 +232,7 @@ idt_descriptor: ;;;; DEBUGGING STUFF times 8 db '@' -dw interrupt -db '@' -dw interrupt2 +times 8 db '@' ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 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