git-svn-id: https://spexeah.com:8443/svn/Asuro@504 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c
This commit is contained in:
1 parent
c6ed6453e0
commit
3dc6a1d2b3
19 files changed
+55
-10
No files matched your search
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
BIN
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.
Binary file not shown.
Binary file not shown.
@@ -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.
|
||||
@@ -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);
|
||||
|
||||
+43
-9
@@ -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.
|
||||
+4
-1
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user