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
+51
-6
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
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
|
tracer,
|
||||||
console,
|
console,
|
||||||
util,
|
util,
|
||||||
isr44,
|
isr44,
|
||||||
@@ -44,6 +45,7 @@ var
|
|||||||
r : pchar;
|
r : pchar;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
push_trace('mouse.callback');
|
||||||
packet:= PMousePacket(kalloc(sizeof(TMousePacket)));
|
packet:= PMousePacket(kalloc(sizeof(TMousePacket)));
|
||||||
f:= (uint32(raw) AND $FF000000) SHR 24;
|
f:= (uint32(raw) AND $FF000000) SHR 24;
|
||||||
x:= (uint32(raw) AND $00FF0000) SHR 16;
|
x:= (uint32(raw) AND $00FF0000) SHR 16;
|
||||||
@@ -102,13 +104,16 @@ begin
|
|||||||
kfree(void(packet));
|
kfree(void(packet));
|
||||||
//console.writestring('Mouse Packet: ');
|
//console.writestring('Mouse Packet: ');
|
||||||
//console.writehexln(DWORD(raw));
|
//console.writehexln(DWORD(raw));
|
||||||
|
pop_trace;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function load(ptr : void) : boolean;
|
function load(ptr : void) : boolean;
|
||||||
begin
|
begin
|
||||||
|
push_trace('mouse.load');
|
||||||
isr44.hook(uint32(@callback));
|
isr44.hook(uint32(@callback));
|
||||||
console.outputln('PS/2 MOUSE', 'LOADED.');
|
console.outputln('PS/2 MOUSE', 'LOADED.');
|
||||||
load:= true;
|
load:= true;
|
||||||
|
pop_trace;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure init();
|
procedure init();
|
||||||
@@ -116,6 +121,7 @@ var
|
|||||||
devid : TDeviceIdentifier;
|
devid : TDeviceIdentifier;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
push_trace('mouse.init');
|
||||||
console.outputln('PS/2 MOUSE', 'INIT BEGIN.');
|
console.outputln('PS/2 MOUSE', 'INIT BEGIN.');
|
||||||
devid.bus:= biUnknown;
|
devid.bus:= biUnknown;
|
||||||
devid.id0:= 0;
|
devid.id0:= 0;
|
||||||
@@ -126,6 +132,7 @@ begin
|
|||||||
devid.ex:= nil;
|
devid.ex:= nil;
|
||||||
drivermanagement.register_driver_ex('PS/2 Mouse', @devid, @load, true);
|
drivermanagement.register_driver_ex('PS/2 Mouse', @devid, @load, true);
|
||||||
console.outputln('PS/2 MOUSE', 'INIT END.');
|
console.outputln('PS/2 MOUSE', 'INIT END.');
|
||||||
|
pop_trace;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
@@ -49,6 +49,7 @@ procedure register();
|
|||||||
begin
|
begin
|
||||||
memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS);
|
memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS);
|
||||||
IDT.set_gate(33, uint32(@Main), $08, ISR_RING_0);
|
IDT.set_gate(33, uint32(@Main), $08, ISR_RING_0);
|
||||||
|
inb($60);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure hook(hook_method : uint32);
|
procedure hook(hook_method : uint32);
|
||||||
|
|||||||
+39
-5
@@ -12,6 +12,7 @@ unit isr44;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
|
tracer,
|
||||||
util,
|
util,
|
||||||
console,
|
console,
|
||||||
isr_types,
|
isr_types,
|
||||||
@@ -34,32 +35,38 @@ var
|
|||||||
timeout : uint32;
|
timeout : uint32;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
push_trace('isr44.mouse_wait');
|
||||||
timeout:= 100000;
|
timeout:= 100000;
|
||||||
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 exit;
|
if ((inb($64) AND $01) = $01) then break;
|
||||||
timeout:= timeout-1;
|
timeout:= timeout-1;
|
||||||
end;
|
end;
|
||||||
end else begin
|
end else begin
|
||||||
while (timeout > 0) do 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;
|
timeout := timeout - 1;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
pop_trace;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure mouse_write(value : uint8);
|
procedure mouse_write(value : uint8);
|
||||||
begin
|
begin
|
||||||
|
push_trace('isr44.mouse_write');
|
||||||
mouse_wait(1);
|
mouse_wait(1);
|
||||||
outb($64, $D4);
|
outb($64, $D4);
|
||||||
mouse_wait(1);
|
mouse_wait(1);
|
||||||
outb($60, value);
|
outb($60, value);
|
||||||
|
pop_trace;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function mouse_read : uint8;
|
function mouse_read : uint8;
|
||||||
begin
|
begin
|
||||||
|
push_trace('isr44.mouse_read');
|
||||||
mouse_wait(0);
|
mouse_wait(0);
|
||||||
mouse_read:= inb($60);
|
mouse_read:= inb($60);
|
||||||
|
pop_trace;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure Main(); interrupt;
|
procedure Main(); interrupt;
|
||||||
@@ -68,31 +75,45 @@ var
|
|||||||
b : byte;
|
b : byte;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
{push_trace('isr44.main');
|
||||||
b:= mouse_read;
|
b:= mouse_read;
|
||||||
|
push_trace('isr44.main1');
|
||||||
if Cycle = 0 then begin
|
if Cycle = 0 then begin
|
||||||
|
push_trace('isr44.main2');
|
||||||
if (b AND $08) = $08 then begin
|
if (b AND $08) = $08 then begin
|
||||||
|
push_trace('isr44.main3');
|
||||||
Mouse_Byte[Cycle]:= b;
|
Mouse_Byte[Cycle]:= b;
|
||||||
|
push_trace('isr44.main4');
|
||||||
inc(Cycle);
|
inc(Cycle);
|
||||||
end;
|
end;
|
||||||
end else begin
|
end else begin
|
||||||
|
push_trace('isr44.main5');
|
||||||
Mouse_Byte[Cycle]:= b;
|
Mouse_Byte[Cycle]:= b;
|
||||||
|
push_trace('isr44.main6');
|
||||||
inc(Cycle);
|
inc(Cycle);
|
||||||
end;
|
end;
|
||||||
|
push_trace('isr44.main7');
|
||||||
if Cycle > 2 then begin
|
if Cycle > 2 then begin
|
||||||
Cycle:= 0;
|
Cycle:= 0;
|
||||||
|
push_trace('isr44.main8');
|
||||||
// console.writestring('Packet[0]: ');
|
// console.writestring('Packet[0]: ');
|
||||||
// console.writeintln(Mouse_Byte[0]);
|
// console.writeintln(Mouse_Byte[0]);
|
||||||
// console.writestring('Packet[1]: ');
|
// console.writestring('Packet[1]: ');
|
||||||
// console.writeintln(Mouse_Byte[1]);
|
// console.writeintln(Mouse_Byte[1]);
|
||||||
// console.writestring('Packet[2]: ');
|
// console.writestring('Packet[2]: ');
|
||||||
// console.writeintln(Mouse_Byte[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);
|
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
|
for i:=0 to MAX_HOOKS-1 do begin
|
||||||
if uint32(Hooks[i]) <> 0 then Hooks[i](void(Packet));
|
if uint32(Hooks[i]) <> 0 then Hooks[i](void(Packet));
|
||||||
end;
|
end;
|
||||||
|
push_trace('isr44.main11');
|
||||||
end;
|
end;
|
||||||
|
push_trace('isr44.main12');
|
||||||
outb($20, $20);
|
outb($20, $20);
|
||||||
outb($A0, $20);
|
outb($A0, $20);
|
||||||
|
pop_trace;}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure register();
|
procedure register();
|
||||||
@@ -102,6 +123,7 @@ var
|
|||||||
ak : uint8;
|
ak : uint8;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
push_trace('isr44.register');
|
||||||
memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS);
|
memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS);
|
||||||
mouse_wait(1);
|
mouse_wait(1);
|
||||||
outb($64, $A8);
|
outb($64, $A8);
|
||||||
@@ -118,32 +140,44 @@ begin
|
|||||||
mouse_write($F4);
|
mouse_write($F4);
|
||||||
mouse_read();
|
mouse_read();
|
||||||
IDT.set_gate(44, uint32(@Main), $08, ISR_RING_0);
|
IDT.set_gate(44, uint32(@Main), $08, ISR_RING_0);
|
||||||
|
pop_trace;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure hook(hook_method : uint32);
|
procedure hook(hook_method : uint32);
|
||||||
var
|
var
|
||||||
i : uint32;
|
i : uint32;
|
||||||
|
cont : boolean;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
push_trace('isr44.hook');
|
||||||
|
cont:= true;
|
||||||
for i:=0 to MAX_HOOKS-1 do begin
|
for i:=0 to MAX_HOOKS-1 do begin
|
||||||
if uint32(Hooks[i]) = hook_method then exit;
|
if uint32(Hooks[i]) = hook_method then begin
|
||||||
|
cont:= false;
|
||||||
|
break;
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
|
if cont then begin
|
||||||
for i:=0 to MAX_HOOKS-1 do begin
|
for i:=0 to MAX_HOOKS-1 do begin
|
||||||
if uint32(Hooks[i]) = 0 then begin
|
if uint32(Hooks[i]) = 0 then begin
|
||||||
Hooks[i]:= pp_hook_method(hook_method);
|
Hooks[i]:= pp_hook_method(hook_method);
|
||||||
exit;
|
break;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
pop_trace;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure unhook(hook_method : uint32);
|
procedure unhook(hook_method : uint32);
|
||||||
var
|
var
|
||||||
i : uint32;
|
i : uint32;
|
||||||
begin
|
begin
|
||||||
|
push_trace('isr44.unhook');
|
||||||
for i:=0 to MAX_HOOKS-1 do begin
|
for i:=0 to MAX_HOOKS-1 do begin
|
||||||
If uint32(Hooks[i]) = hook_method then Hooks[i]:= nil;
|
If uint32(Hooks[i]) = hook_method then Hooks[i]:= nil;
|
||||||
exit;
|
break;
|
||||||
end;
|
end;
|
||||||
|
pop_trace;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
+4
-1
@@ -40,7 +40,8 @@ uses
|
|||||||
storagemanagement,
|
storagemanagement,
|
||||||
lists,
|
lists,
|
||||||
net,
|
net,
|
||||||
fat32;
|
fat32,
|
||||||
|
isrmanager;
|
||||||
|
|
||||||
procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall;
|
procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall;
|
||||||
|
|
||||||
@@ -140,6 +141,7 @@ begin
|
|||||||
{ Memory/CPU Init }
|
{ Memory/CPU Init }
|
||||||
idt.init();
|
idt.init();
|
||||||
isr.init();
|
isr.init();
|
||||||
|
//isrmanager.init();
|
||||||
irq.init();
|
irq.init();
|
||||||
pmemorymanager.init();
|
pmemorymanager.init();
|
||||||
vmemorymanager.init();
|
vmemorymanager.init();
|
||||||
@@ -194,6 +196,7 @@ begin
|
|||||||
console.setdefaultattribute(console.combinecolors(Green, Black));
|
console.setdefaultattribute(console.combinecolors(Green, Black));
|
||||||
console.writestringln('Asuro Booted Correctly!');
|
console.writestringln('Asuro Booted Correctly!');
|
||||||
console.setdefaultattribute(console.combinecolors(White, Black));
|
console.setdefaultattribute(console.combinecolors(White, Black));
|
||||||
|
if INTE then console.writestringln('Interrupts are enabled.') else console.writestringln('Interrupts are disabled.');
|
||||||
console.writestringln('');
|
console.writestringln('');
|
||||||
console.writestringln('Press any key to boot in to Asuro Terminal...');
|
console.writestringln('Press any key to boot in to Asuro Terminal...');
|
||||||
tracer.pop_trace;
|
tracer.pop_trace;
|
||||||
|
|||||||
Reference in new issue
Block a user