git-svn-id: https://spexeah.com:8443/svn/Asuro@532 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c

This commit is contained in:
kieron 2018-04-17 00:18:56 +00:00
parent 1e78c537aa
commit 2ee011ea3c
11 changed files with 7 additions and 197 deletions

BIN
Asuro.iso

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,189 +0,0 @@
{ ************************************************
* Asuro
* Unit: Drivers/ISR45
* Description: Mouse ISR (IRQ12)
************************************************
* Author: K Morris
* Contributors:
************************************************ }
unit PS2_MOUSE_ISR;
interface
uses
tracer,
util,
console,
isr_types,
isrmanager,
IDT;
procedure register();
procedure hook(hook_method : uint32);
procedure unhook(hook_method : uint32);
implementation
var
Hooks : Array[1..MAX_HOOKS] of pp_hook_method;
Cycle : uint32 = 0;
Mouse_Byte : Array[0..2] of uint8;
Packet : uint32;
Registered : Boolean = false;
procedure mouse_wait(w_type : uint8);
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 break;
timeout:= timeout-1;
end;
end else begin
while (timeout > 0) do begin
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();
var
i : integer;
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();
var
status : uint8;
bm : PBitMask;
ak : uint8;
begin
push_trace('isr44.register');
if not Registered then begin
Registered:= true;
memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS);
mouse_wait(1);
outb($64, $A8);
mouse_wait(1);
outb($64, $20);
mouse_wait(0);
status:= inb($60) OR $02;
mouse_wait(1);
outb($64, $60);
mouse_wait(1);
outb($60, status);
mouse_write($F6);
mouse_read();
mouse_write($F4);
mouse_read();
isrmanager.registerISR(44, @Main);
//IDT.set_gate(44, uint32(@Main), $08, ISR_RING_0);
end;
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 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;
break;
end;
pop_trace;
end;
end.

View File

@ -152,22 +152,23 @@ begin
if Packet.y_sign then y32:= y32 OR $FFFFFF00; if Packet.y_sign then y32:= y32 OR $FFFFFF00;
if x32 <> 0 then begin if x32 <> 0 then begin
if x32 > 0 then begin if x32 > 0 then begin
inc(Current.x); inc(Current.x, (Packet.x_movement div 4));
end else begin end else begin
Dec(Current.x); Dec(Current.x, (Packet.x_movement div 4));
end; end;
end; end;
if y32 <> 0 then begin if y32 <> 0 then begin
if y32 > 0 then begin if y32 < 0 then begin
inc(Current.y); inc(Current.y, (Packet.y_movement div 4));
end else begin end else begin
dec(Current.y) dec(Current.y, (Packet.y_movement div 4))
end; end;
end; end;
if Current.x < 0 then Current.x:= 0; if Current.x < 0 then Current.x:= 0;
if Current.y < 0 then Current.y:= 0; if Current.y < 0 then Current.y:= 0;
if Current.x > 1279 then Current.x:= 1279; if Current.x > 1279 then Current.x:= 1279;
if Current.y > 1023 then Current.y:= 1023; if Current.y > 1023 then Current.y:= 1023;
DrawCursor;
end; end;
{console.writestring('Packet[0]: '); {console.writestring('Packet[0]: ');
console.writeintln(Mouse_Byte[0]); console.writeintln(Mouse_Byte[0]);
@ -176,8 +177,6 @@ begin
console.writestring('Packet[2]: '); console.writestring('Packet[2]: ');
console.writeintln(Mouse_Byte[2]);} console.writeintln(Mouse_Byte[2]);}
Cycle:= 0; Cycle:= 0;
DrawCursor;
end; end;
pop_trace; pop_trace;
end; end;

View File

@ -246,7 +246,7 @@ begin
tracer.push_trace('kmain.DEVDRV'); tracer.push_trace('kmain.DEVDRV');
console.outputln('KERNEL', 'DEVICE DRIVERS: INIT BEGIN.'); console.outputln('KERNEL', 'DEVICE DRIVERS: INIT BEGIN.');
keyboard.init(keyboard_layout); keyboard.init(keyboard_layout);
mouse.init(); //mouse.init();
testdriver.init(); testdriver.init();
E1000.init(); E1000.init();
IDE.init(); IDE.init();