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

This commit is contained in:
kieron 2018-04-12 00:35:11 +00:00
parent c6ed6453e0
commit 3dc6a1d2b3
19 changed files with 55 additions and 10 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.

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

@ -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.

View File

@ -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);

View File

@ -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
end; cont:= false;
for i:=0 to MAX_HOOKS-1 do begin break;
if uint32(Hooks[i]) = 0 then begin
Hooks[i]:= pp_hook_method(hook_method);
exit;
end; end;
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; 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.

View File

@ -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;