diff options
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | boot/mbr.asm | 4 | ||||
| -rw-r--r-- | kernel/console.c | 1 | ||||
| -rw-r--r-- | kernel/kernel.c | 24 |
4 files changed, 19 insertions, 12 deletions
@@ -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"); |
