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

This commit is contained in:
kieron 2018-04-26 13:29:58 +00:00
parent e6f2a06dbc
commit 74fa368989
10 changed files with 61 additions and 61 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.

@ -40,6 +40,7 @@ type
end; end;
procedure init(); procedure init();
procedure DrawCursor;
implementation implementation
@ -51,12 +52,18 @@ var
Mouse_Byte : Array[0..2] of uint8; Mouse_Byte : Array[0..2] of uint8;
Packet : uint32; Packet : uint32;
Registered : Boolean = false; Registered : Boolean = false;
NeedsRedraw : Boolean = false;
procedure DrawCursor; procedure DrawCursor;
var var
x, y : uint32; x, y : uint32;
nx, ny : uint32;
begin begin
nx:= Current.x;
ny:= Current.y;
if not NeedsRedraw then exit;
NeedsRedraw:= false;
if not FirstDraw then begin if not FirstDraw then begin
for y:=0 to 1 do begin for y:=0 to 1 do begin
for x:=0 to 1 do begin for x:=0 to 1 do begin
@ -64,23 +71,23 @@ begin
end; end;
end; end;
end; end;
Last.x:= Current.x; Last.x:= nx;
Last.y:= Current.y; Last.y:= ny;
for y:=0 to 1 do begin for y:=0 to 1 do begin
for x:=0 to 1 do begin for x:=0 to 1 do begin
BackPixels[x][y]:= GetPixel(Current.x + x, Current.y + y); BackPixels[x][y]:= GetPixel(nx + x, ny + y);
DrawPixel(Current.x + x, Current.y + y, $FFFF); DrawPixel(nx + x, ny + y, $FFFF);
end; end;
end; end;
FirstDraw:= false; FirstDraw:= false;
end; end;
procedure mouse_wait(w_type : uint8); function mouse_wait(w_type : uint8) : boolean;
var var
timeout : uint32; timeout : uint32;
begin begin
timeout:= 100000; timeout:= 100;
if (w_type = 0) then begin if (w_type = 0) then begin
while (timeout > 0) do begin while (timeout > 0) do begin
if ((inb($64) AND $01) = $01) then break; if ((inb($64) AND $01) = $01) then break;
@ -92,6 +99,7 @@ begin
timeout := timeout - 1; timeout := timeout - 1;
end; end;
end; end;
mouse_wait:= timeout > 0;
end; end;
procedure mouse_write(value : uint8); procedure mouse_write(value : uint8);
@ -118,7 +126,8 @@ var
r : pchar; r : pchar;
begin begin
push_trace('mouse.main'); //push_trace('mouse.main');
while mouse_wait(0) do begin
b:= mouse_read; b:= mouse_read;
if Cycle = 0 then begin if Cycle = 0 then begin
if (b AND $08) = $08 then begin if (b AND $08) = $08 then begin
@ -126,59 +135,45 @@ begin
Inc(Cycle); Inc(Cycle);
end; end;
end else begin end else begin
If Cycle = 1 then begin
Mouse_Byte[Cycle]:= b; Mouse_Byte[Cycle]:= b;
Inc(Cycle); Inc(Cycle);
end else begin
Mouse_Byte[Cycle]:= b;
Inc(Cycle);
end;
end; end;
if Cycle = 3 then begin if Cycle = 3 then begin
//Process //Process
f:= Mouse_Byte[0]; f:= Mouse_Byte[0];
Packet.x_movement:= Mouse_Byte[1]; Packet.x_movement:= Mouse_Byte[1];
Packet.y_movement:= Mouse_Byte[2]; Packet.y_movement:= Mouse_Byte[2];
Packet.x_sign:= (f AND $10) = $10; Packet.x_sign:= (f AND %00010000) = %00010000;
Packet.y_sign:= (f AND $20) = $20; Packet.y_sign:= (f AND %00100000) = %00100000;
Packet.x_overflow:= (f AND $40) = $40; Packet.x_overflow:= (f AND $40) = $40;
Packet.y_overflow:= (f AND $80) = $80; Packet.y_overflow:= (f AND $80) = $80;
if not(Packet.x_overflow) and not(Packet.y_overflow) then begin if not(Packet.x_overflow) and not(Packet.y_overflow) then begin
//if Packet.x_sign then Current.x:= Current.x - Packet.x_movement else Current.x:= Current.x + Packet.x_movement; If (Packet.x_sign) and (Packet.x_movement > 0) then begin
//if Packet.y_sign then Current.y:= Current.y - Packet.y_movement else Current.y:= Current.y + Packet.y_movement; dec(Current.x);
x32:= Packet.x_movement;
if Packet.x_sign then x32:= x32 OR $FFFFFF00;
y32:= Packet.y_movement;
if Packet.y_sign then y32:= y32 OR $FFFFFF00;
if x32 <> 0 then begin
if x32 > 0 then begin
inc(Current.x, (Packet.x_movement div 4));
end else begin
Dec(Current.x, (Packet.x_movement div 4));
end; end;
If not(Packet.x_sign) and (Packet.x_movement > 0) then begin
inc(Current.x);
end; end;
if y32 <> 0 then begin If not(Packet.y_sign) and (Packet.y_movement > 0) then begin
if y32 < 0 then begin dec(Current.y);
inc(Current.y, (Packet.y_movement div 4));
end else begin
dec(Current.y, (Packet.y_movement div 4))
end; end;
If (Packet.y_sign) and (Packet.y_movement > 0) then begin
inc(Current.y);
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; //console.writestring('Mouse X: ');
//console.writeintln(current.x);
//console.writestring('Mouse Y: ');
//console.writeintln(current.y);
//DrawCursor;
end; end;
{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]);}
Cycle:= 0; Cycle:= 0;
NeedsRedraw:= true;
end;
end; end;
pop_trace;
end; end;
function load(ptr : void) : boolean; function load(ptr : void) : boolean;

@ -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();
@ -286,7 +286,12 @@ begin
tracer.pop_trace; tracer.pop_trace;
tracer.push_trace('kmain.END'); tracer.push_trace('kmain.END');
util.halt_and_dont_catch_fire;
while true do begin
mouse.DrawCursor();
end;
//util.halt_and_dont_catch_fire;
end; end;
end. end.