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

This commit is contained in:
kieron committed 2018-04-12 14:38:50 +00:00
1 parent 866362b5b0
commit 3124582151
110 files changed
+2499 -1450

No files matched your search

+86
View File
@@ -0,0 +1,86 @@
{ ************************************************
* Asuro
* Unit: Drivers/isr33
* Description: Keyboard interrupt
************************************************
* Author: Aaron Hance
* Contributors: K Morris
************************************************ }
unit PS2_KEYBOARD_ISR;
interface
uses
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;
Registered : Boolean = false;
procedure Main();
var
i : integer;
b : dword;
begin
//writechar('!'); // Bug traces all the way back to here - when the keyboard randomly doesn't work, this inturrupt isn't even called...
// This needs further investigation... Is there something that can go wrong when setting up the PIC?
CLI;
b:= inb($60);
//console.writehexln(b);
for i:=0 to MAX_HOOKS-1 do begin
if uint32(Hooks[i]) <> 0 then begin
Hooks[i](void(b));
end;
end;
end;
procedure register();
begin
if not Registered then begin
Registered:= true;
memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS);
//IDT.set_gate(33, uint32(@Main), $08, ISR_RING_0);
isrmanager.registerISR(33, @Main);
inb($60);
end;
end;
procedure hook(hook_method : uint32);
var
i : uint32;
begin
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;
end;
end;
end;
procedure unhook(hook_method : uint32);
var
i : uint32;
begin
for i:=0 to MAX_HOOKS-1 do begin
If uint32(Hooks[i]) = hook_method then Hooks[i]:= nil;
exit;
end;
end;
end.
File diff suppressed because it is too large. Load diff
+3 -2
View File
@@ -14,7 +14,7 @@ interface
uses
console,
util,
isr33;
PS2_KEYBOARD_ISR;
type
@@ -61,7 +61,8 @@ end;
function load(ptr : void) : boolean;
begin
isr33.hook(uint32(@callback));
PS2_KEYBOARD_ISR.register();
PS2_KEYBOARD_ISR.hook(uint32(@callback));
console.outputln('PS/2 KEYBOARD', 'LOADED.');
load:= true;
end;
+3 -2
View File
@@ -15,7 +15,7 @@ uses
tracer,
console,
util,
isr44,
PS2_MOUSE_ISR,
lmemorymanager,
strings,
drivermanagement;
@@ -110,7 +110,8 @@ end;
function load(ptr : void) : boolean;
begin
push_trace('mouse.load');
isr44.hook(uint32(@callback));
PS2_MOUSE_ISR.register();
PS2_MOUSE_ISR.hook(uint32(@callback));
console.outputln('PS/2 MOUSE', 'LOADED.');
load:= true;
pop_trace;