diff --git a/Asuro.iso b/Asuro.iso index 24b52be3..e640ee20 100644 Binary files a/Asuro.iso and b/Asuro.iso differ diff --git a/bin/kernel.bin b/bin/kernel.bin index 4fffb19d..1b449702 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 4fffb19d..1b449702 100755 Binary files a/iso/boot/asuro.bin and b/iso/boot/asuro.bin differ diff --git a/lib/IDE.ppu b/lib/IDE.ppu index 33a2f50a..abd11e2a 100644 Binary files a/lib/IDE.ppu and b/lib/IDE.ppu differ diff --git a/lib/bios_data_area.ppu b/lib/bios_data_area.ppu index 5f2bf2e6..da45ae8e 100644 Binary files a/lib/bios_data_area.ppu and b/lib/bios_data_area.ppu differ diff --git a/lib/isr.ppu b/lib/isr.ppu index 750be8aa..03f721f8 100644 Binary files a/lib/isr.ppu and b/lib/isr.ppu differ diff --git a/lib/isr33.ppu b/lib/isr33.ppu index 520b15dc..c4324337 100644 Binary files a/lib/isr33.ppu and b/lib/isr33.ppu differ diff --git a/lib/isr40.ppu b/lib/isr40.ppu index fb1ebf22..c8d93bba 100644 Binary files a/lib/isr40.ppu and b/lib/isr40.ppu differ diff --git a/lib/isr44.ppu b/lib/isr44.ppu index 9d8f3d6d..0a32a5cf 100644 Binary files a/lib/isr44.ppu and b/lib/isr44.ppu differ diff --git a/lib/kernel.ppu b/lib/kernel.ppu index 10c2b4a7..b833dc68 100644 Binary files a/lib/kernel.ppu and b/lib/kernel.ppu differ diff --git a/lib/libpconsole.a b/lib/libpconsole.a index aa305b2b..3773a3d1 100644 Binary files a/lib/libpconsole.a and b/lib/libpconsole.a differ diff --git a/lib/libpmultiboot.a b/lib/libpmultiboot.a index e9d46f7b..e418024e 100644 Binary files a/lib/libpmultiboot.a and b/lib/libpmultiboot.a differ diff --git a/lib/libpsystem.a b/lib/libpsystem.a index f302c45e..fbcb8f29 100644 Binary files a/lib/libpsystem.a and b/lib/libpsystem.a differ diff --git a/lib/mouse.ppu b/lib/mouse.ppu index d31cb0ba..90bb3790 100644 Binary files a/lib/mouse.ppu and b/lib/mouse.ppu differ diff --git a/lib/storagemanagement.ppu b/lib/storagemanagement.ppu index 41578da2..0ab6c92b 100644 Binary files a/lib/storagemanagement.ppu and b/lib/storagemanagement.ppu differ diff --git a/src/driver/hid/mouse.pas b/src/driver/hid/mouse.pas index 92ecb341..d8c4b1be 100644 --- a/src/driver/hid/mouse.pas +++ b/src/driver/hid/mouse.pas @@ -12,6 +12,7 @@ unit mouse; interface uses + tracer, console, util, isr44, @@ -44,6 +45,7 @@ var r : pchar; begin + push_trace('mouse.callback'); packet:= PMousePacket(kalloc(sizeof(TMousePacket))); f:= (uint32(raw) AND $FF000000) SHR 24; x:= (uint32(raw) AND $00FF0000) SHR 16; @@ -102,13 +104,16 @@ begin kfree(void(packet)); //console.writestring('Mouse Packet: '); //console.writehexln(DWORD(raw)); + pop_trace; end; function load(ptr : void) : boolean; begin + push_trace('mouse.load'); isr44.hook(uint32(@callback)); console.outputln('PS/2 MOUSE', 'LOADED.'); load:= true; + pop_trace; end; procedure init(); @@ -116,6 +121,7 @@ var devid : TDeviceIdentifier; begin + push_trace('mouse.init'); console.outputln('PS/2 MOUSE', 'INIT BEGIN.'); devid.bus:= biUnknown; devid.id0:= 0; @@ -126,6 +132,7 @@ begin devid.ex:= nil; drivermanagement.register_driver_ex('PS/2 Mouse', @devid, @load, true); console.outputln('PS/2 MOUSE', 'INIT END.'); + pop_trace; end; end. \ No newline at end of file diff --git a/src/isr/isr33.pas b/src/isr/isr33.pas index 7e961d0c..70e2d099 100644 --- a/src/isr/isr33.pas +++ b/src/isr/isr33.pas @@ -49,6 +49,7 @@ procedure register(); begin memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); IDT.set_gate(33, uint32(@Main), $08, ISR_RING_0); + inb($60); end; procedure hook(hook_method : uint32); diff --git a/src/isr/isr44.pas b/src/isr/isr44.pas index 1a3451a3..616c2580 100644 --- a/src/isr/isr44.pas +++ b/src/isr/isr44.pas @@ -12,6 +12,7 @@ unit isr44; interface uses + tracer, util, console, isr_types, @@ -34,32 +35,38 @@ var timeout : uint32; begin + push_trace('isr44.mouse_wait'); timeout:= 100000; if (w_type = 0) then begin while (timeout > 0) do begin - if ((inb($64) AND $01) = $01) then exit; + if ((inb($64) AND $01) = $01) then break; timeout:= timeout-1; end; end else begin while (timeout > 0) do begin - if ((inb($64) AND 2) = 0) then exit; + if ((inb($64) AND 2) = 0) then break; timeout := timeout - 1; end; end; + pop_trace; end; procedure mouse_write(value : uint8); begin + push_trace('isr44.mouse_write'); mouse_wait(1); outb($64, $D4); mouse_wait(1); outb($60, value); + pop_trace; end; function mouse_read : uint8; begin + push_trace('isr44.mouse_read'); mouse_wait(0); mouse_read:= inb($60); + pop_trace; end; procedure Main(); interrupt; @@ -68,31 +75,45 @@ var b : byte; begin + {push_trace('isr44.main'); b:= mouse_read; + push_trace('isr44.main1'); if Cycle = 0 then begin + push_trace('isr44.main2'); if (b AND $08) = $08 then begin + push_trace('isr44.main3'); Mouse_Byte[Cycle]:= b; + push_trace('isr44.main4'); inc(Cycle); end; end else begin + push_trace('isr44.main5'); Mouse_Byte[Cycle]:= b; + push_trace('isr44.main6'); inc(Cycle); end; + push_trace('isr44.main7'); if Cycle > 2 then begin Cycle:= 0; + push_trace('isr44.main8'); // console.writestring('Packet[0]: '); // console.writeintln(Mouse_Byte[0]); // console.writestring('Packet[1]: '); // console.writeintln(Mouse_Byte[1]); // console.writestring('Packet[2]: '); // console.writeintln(Mouse_Byte[2]); + push_trace('isr44.main9'); Packet:= (Mouse_Byte[0] SHL 24) OR (Mouse_Byte[1] SHL 16) OR (Mouse_Byte[2] SHL 8) OR ($FF); + push_trace('isr44.main10'); for i:=0 to MAX_HOOKS-1 do begin if uint32(Hooks[i]) <> 0 then Hooks[i](void(Packet)); end; + push_trace('isr44.main11'); end; + push_trace('isr44.main12'); outb($20, $20); outb($A0, $20); + pop_trace;} end; procedure register(); @@ -102,6 +123,7 @@ var ak : uint8; begin + push_trace('isr44.register'); memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); mouse_wait(1); outb($64, $A8); @@ -118,32 +140,44 @@ begin mouse_write($F4); mouse_read(); IDT.set_gate(44, uint32(@Main), $08, ISR_RING_0); + pop_trace; end; procedure hook(hook_method : uint32); var i : uint32; + cont : boolean; begin + push_trace('isr44.hook'); + cont:= true; for i:=0 to MAX_HOOKS-1 do 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 begin - Hooks[i]:= pp_hook_method(hook_method); - exit; + if uint32(Hooks[i]) = hook_method then begin + cont:= false; + break; end; end; + if cont then begin + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = 0 then begin + Hooks[i]:= pp_hook_method(hook_method); + break; + end; + end; + end; + pop_trace; end; procedure unhook(hook_method : uint32); var i : uint32; begin + push_trace('isr44.unhook'); for i:=0 to MAX_HOOKS-1 do begin If uint32(Hooks[i]) = hook_method then Hooks[i]:= nil; - exit; + break; end; + pop_trace; end; end. \ No newline at end of file diff --git a/src/kernel.pas b/src/kernel.pas index 635b07e8..91f74b83 100644 --- a/src/kernel.pas +++ b/src/kernel.pas @@ -40,7 +40,8 @@ uses storagemanagement, lists, net, - fat32; + fat32, + isrmanager; procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall; @@ -140,6 +141,7 @@ begin { Memory/CPU Init } idt.init(); isr.init(); + //isrmanager.init(); irq.init(); pmemorymanager.init(); vmemorymanager.init(); @@ -194,6 +196,7 @@ begin console.setdefaultattribute(console.combinecolors(Green, Black)); console.writestringln('Asuro Booted Correctly!'); console.setdefaultattribute(console.combinecolors(White, Black)); + if INTE then console.writestringln('Interrupts are enabled.') else console.writestringln('Interrupts are disabled.'); console.writestringln(''); console.writestringln('Press any key to boot in to Asuro Terminal...'); tracer.pop_trace;