summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--boot/mbr.asm4
-rw-r--r--kernel/console.c1
-rw-r--r--kernel/kernel.c24
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");