diff --git a/Asuro.iso b/Asuro.iso index 8ecfd58a..ef715f42 100644 Binary files a/Asuro.iso and b/Asuro.iso differ diff --git a/bin/kernel.bin b/bin/kernel.bin index 7aac7a25..092ec00e 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 7aac7a25..092ec00e 100755 Binary files a/iso/boot/asuro.bin and b/iso/boot/asuro.bin differ diff --git a/lib/idt.ppu b/lib/idt.ppu index b10801da..b398cb01 100644 Binary files a/lib/idt.ppu and b/lib/idt.ppu differ diff --git a/lib/isr0.ppu b/lib/isr0.ppu index 3e777693..435da051 100644 Binary files a/lib/isr0.ppu and b/lib/isr0.ppu differ diff --git a/lib/kernel.o b/lib/kernel.o index 103c2b0f..8d778332 100644 Binary files a/lib/kernel.o and b/lib/kernel.o differ diff --git a/lib/kernel.ppu b/lib/kernel.ppu index 88f74236..f2ed9c8d 100644 Binary files a/lib/kernel.ppu and b/lib/kernel.ppu differ diff --git a/lib/libpkernel.a b/lib/libpkernel.a index 9632e6ad..47163047 100644 Binary files a/lib/libpkernel.a and b/lib/libpkernel.a differ diff --git a/src/drivers/isr0.pas b/src/drivers/isr0.pas index bde37ab3..d6c8cb58 100644 --- a/src/drivers/isr0.pas +++ b/src/drivers/isr0.pas @@ -41,6 +41,7 @@ end; procedure register(); begin + memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); IDT.set_gate(0, uint32(@Main), $08, ISR_RING_0); end; @@ -53,7 +54,10 @@ begin if uint32(Hooks[i]) = hook_method then exit; end; for i:=0 to MAX_HOOKS-1 do begin - if uint32(Hooks[i]) = 0 then Hooks[i]:= pp_hook_method(hook_method); + if uint32(Hooks[i]) = 0 then begin + Hooks[i]:= pp_hook_method(hook_method); + exit; + end; end; end; diff --git a/src/idt.pas b/src/idt.pas index 8cb21f20..207425ce 100644 --- a/src/idt.pas +++ b/src/idt.pas @@ -69,7 +69,7 @@ begin IDT_Pointer.limit:= (sizeof(TIDT_Entry) * 256) - 1; IDT_Pointer.base:= uint32(@IDT_Entries); console.writestringln('IDT: CLEAR.'); - util.memset(uint32(@IDT_Entries), 0, sizeof(TIDT_Entry) * 256); + util.memset(uint32(@IDT_Entries[0]), 0, sizeof(TIDT_Entry) * 256); console.writestringln('IDT: LOAD.'); load(uint32(@IDT_Pointer)); console.writestringln('IDT: INIT END.'); diff --git a/src/kernel.pas b/src/kernel.pas index c75776a1..1d02fbe0 100644 --- a/src/kernel.pas +++ b/src/kernel.pas @@ -9,6 +9,7 @@ uses idt, isr, irq, + isr0, console, bios_data_area, keyboard; @@ -17,6 +18,11 @@ procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall; implementation +procedure test(data : void); +begin + console.writestringln('It works.'); +end; + procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall; [public, alias: 'kmain']; var c : uint8; @@ -72,6 +78,10 @@ begin console.writeint(((mbinfo^.mem_upper + 1000) div 1024) +1); console.writestringln('MB'); console.setdefaultattribute(console.combinecolors(lYellow, Black)); + + isr0.hook(uint32(@test)); + asm INT 0 end; + util.halt_and_dont_catch_fire; end;