diff --git a/Asuro.iso b/Asuro.iso index 34915308..e6151774 100644 Binary files a/Asuro.iso and b/Asuro.iso differ diff --git a/bin/kernel.bin b/bin/kernel.bin index 5ef1ed72..1a3884cb 100755 Binary files a/bin/kernel.bin and b/bin/kernel.bin differ diff --git a/iso/boot/asuro.bin b/iso/boot/asuro.bin index 5ef1ed72..1a3884cb 100755 Binary files a/iso/boot/asuro.bin and b/iso/boot/asuro.bin differ diff --git a/lib/console.ppu b/lib/console.ppu index c021f714..d0db2364 100644 Binary files a/lib/console.ppu and b/lib/console.ppu differ diff --git a/lib/kernel.o b/lib/kernel.o index a17644af..c2c47388 100644 Binary files a/lib/kernel.o and b/lib/kernel.o differ diff --git a/lib/kernel.ppu b/lib/kernel.ppu index 65cc7dfd..ceacee34 100644 Binary files a/lib/kernel.ppu and b/lib/kernel.ppu differ diff --git a/lib/keyboard.ppu b/lib/keyboard.ppu index a7eceb26..4cf2fc96 100644 Binary files a/lib/keyboard.ppu and b/lib/keyboard.ppu differ diff --git a/lib/libpconsole.a b/lib/libpconsole.a index dac40347..63e7012e 100644 Binary files a/lib/libpconsole.a and b/lib/libpconsole.a differ diff --git a/lib/libpkernel.a b/lib/libpkernel.a index 3a2efe07..3fa89028 100644 Binary files a/lib/libpkernel.a and b/lib/libpkernel.a differ diff --git a/lib/util.ppu b/lib/util.ppu index 3620e51c..05687614 100644 Binary files a/lib/util.ppu and b/lib/util.ppu differ diff --git a/src/idt.pas b/src/idt.pas index 7321141d..b25e83cc 100644 --- a/src/idt.pas +++ b/src/idt.pas @@ -3,8 +3,8 @@ unit idt; interface uses - system, - types; + types, + util; type TIDT_Entry = bitpacked record @@ -23,9 +23,34 @@ type PIDT_Pointer = ^TIDT_Pointer; var - IDT : Array [0..255] of TIDT_Entry; + IDT_Entries : Array [0..255] of TIDT_Entry; IDT_Pointer : TIDT_Pointer; +procedure init(); + implementation +procedure set_gate(Number : uint8; Base : uint32; Selector : uint16; Flags : uint8); +begin + IDT_Entries[Number].base_high:= (Base and $FFFF0000) SHR 16; + IDT_Entries[Number].base_low:= (Base and $0000FFFF); + IDT_Entries[Number].selector:= Selector; + IDT_Entries[Number].flags:= Flags; + IDT_Entries[Number].always_0:= $00; +end; + +procedure load(idt_pointer : uint32); assembler; nostackframe; +asm + MOV EAX, idt_pointer + LIDT [EAX] +end; + +procedure init(); +begin + IDT_Pointer.limit:= (sizeof(TIDT_Entry) * 256) - 1; + IDT_Pointer.base:= uint32(@IDT_Entries); + util.memset(uint32(@IDT_Entries), 0, sizeof(TIDT_Entry) * 256); + load(uint32(@IDT_Pointer)); +end; + end. \ No newline at end of file diff --git a/src/kernel.pas b/src/kernel.pas index 80412792..7f36ca2f 100644 --- a/src/kernel.pas +++ b/src/kernel.pas @@ -7,6 +7,7 @@ uses multiboot, util, gdt, + idt, console, bios_data_area, keyboard; @@ -26,6 +27,7 @@ begin mbi:= mbinfo; mbm:= mbmagic; gdt.init(); + idt.init(); console.init(); console.writestringln('Booting Asuro...'); if (mbm <> MULTIBOOT_BOOTLOADER_MAGIC) then begin diff --git a/src/util.pas b/src/util.pas index 43c1827d..07551b2b 100644 --- a/src/util.pas +++ b/src/util.pas @@ -17,6 +17,7 @@ procedure halt_and_catch_fire(); function inb(port : uint16) : uint8; function inw(port : uint16) : uint16; function inl(port : uint16) : uint32; +procedure memset(location : uint32; value : uint8; size : uint32); implementation @@ -121,4 +122,16 @@ begin end; end; +procedure memset(location : uint32; value : uint8; size : uint32); +var + loc : puint8; + i : uint32; + +begin + for i:=0 to size do begin + loc:= puint8(location + i); + loc^:= value; + end; +end; + end.