Keyboard Driver Started/Hex output added

- Added writehexex/writehexlnex/writehexln/writehex
- Started work on the keyboard driver, polling PS2 line for keystate.

git-svn-id: https://spexeah.com:8443/svn/Asuro@16 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c
This commit is contained in:
kieron 2017-02-13 16:35:36 +00:00
parent 11e85d0edb
commit a4ed035c93
15 changed files with 150 additions and 3 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.

BIN
lib/keyboard.ppu Normal file

Binary file not shown.

Binary file not shown.

View File

@ -1,4 +1,4 @@
unit BIOS_DATA_AREA; unit bios_data_area;
interface interface

View File

@ -4,7 +4,7 @@ interface
uses uses
util, util,
BIOS_DATA_AREA; bios_data_area;
type type
TColor = ( Black = $0, TColor = ( Black = $0,
@ -32,21 +32,25 @@ procedure writechar(character : char);
procedure writestring(str: PChar); procedure writestring(str: PChar);
procedure writeint(i: Integer); procedure writeint(i: Integer);
procedure writeword(i: DWORD); procedure writeword(i: DWORD);
procedure writehex(i: DWORD);
procedure writecharln(character : char); procedure writecharln(character : char);
procedure writestringln(str: PChar); procedure writestringln(str: PChar);
procedure writeintln(i: Integer); procedure writeintln(i: Integer);
procedure writewordln(i: DWORD); procedure writewordln(i: DWORD);
procedure writehexln(i: DWORD);
procedure writecharex(character : char; attributes : char); procedure writecharex(character : char; attributes : char);
procedure writestringex(str: PChar; attributes : char); procedure writestringex(str: PChar; attributes : char);
procedure writeintex(i: Integer; attributes : char); procedure writeintex(i: Integer; attributes : char);
procedure writewordex(i: DWORD; attributes : char); procedure writewordex(i: DWORD; attributes : char);
procedure writehexex(i : DWORD; attributes : char);
procedure writecharlnex(character : char; attributes : char); procedure writecharlnex(character : char; attributes : char);
procedure writestringlnex(str: PChar; attributes : char); procedure writestringlnex(str: PChar; attributes : char);
procedure writeintlnex(i: Integer; attributes : char); procedure writeintlnex(i: Integer; attributes : char);
procedure writewordlnex(i: DWORD; attributes : char); procedure writewordlnex(i: DWORD; attributes : char);
procedure writehexlnex(i: DWORD; attributes : char);
function combinecolors(Foreground, Background : TColor) : char; function combinecolors(Foreground, Background : TColor) : char;
@ -159,6 +163,68 @@ begin
console._safeincrement_x(); console._safeincrement_x();
end; end;
procedure writehexex(i : dword; attributes: char); [public, alias: 'console_writehexex'];
var
Hex : Array[0..7] of Byte;
Res : DWORD;
Rem : DWORD;
c : Integer;
begin
for c:=0 to 7 do begin
Hex[c]:= 255;
end;
c:=0;
Res:= i;
Rem:= Res mod 16;
while Res > 0 do begin
Hex[c]:= Rem;
Res:= Res div 16;
Rem:= Res mod 16;
c:=c+1;
end;
writestringex('0x', attributes);
for c:=7 downto 0 do begin
if Hex[c] <> 255 then begin
case Hex[c] of
0:writecharex('0', attributes);
1:writecharex('1', attributes);
2:writecharex('2', attributes);
3:writecharex('3', attributes);
4:writecharex('4', attributes);
5:writecharex('5', attributes);
6:writecharex('6', attributes);
7:writecharex('7', attributes);
8:writecharex('8', attributes);
9:writecharex('9', attributes);
10:writecharex('A', attributes);
11:writecharex('B', attributes);
12:writecharex('C', attributes);
13:writecharex('D', attributes);
14:writecharex('E', attributes);
15:writecharex('F', attributes);
else writecharex('?', attributes);
end;
end;
end;
end;
procedure writehex(i : dword); [public, alias: 'console_writehex'];
begin
console.writehexex(i, Console_Properties.Default_Attribute);
end;
procedure writehexlnex(i : dword; attributes : char);
begin
console.writehexex(i, attributes);
console._safeincrement_y();
end;
procedure writehexln(i : dword);
begin
writehexlnex(i, Console_Properties.Default_Attribute);
end;
procedure writestringex(str: PChar; attributes: char); [public, alias: 'console_writestringex']; procedure writestringex(str: PChar; attributes: char); [public, alias: 'console_writestringex'];
var var
i : integer; i : integer;

View File

@ -6,13 +6,17 @@ uses
multiboot, multiboot,
util, util,
console, console,
BIOS_DATA_AREA; bios_data_area,
keyboard;
procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: DWORD); stdcall; procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: DWORD); stdcall;
implementation implementation
procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: DWORD); stdcall; [public, alias: 'kmain']; procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: DWORD); stdcall; [public, alias: 'kmain'];
var
c : byte;
begin begin
console.init(); console.init();
console.writestringln('Booting Asuro...'); console.writestringln('Booting Asuro...');
@ -37,6 +41,10 @@ begin
console.writeint(((mbinfo^.mem_upper + 1000) div 1024) +1); console.writeint(((mbinfo^.mem_upper + 1000) div 1024) +1);
console.writestringln('MB'); console.writestringln('MB');
console.setdefaultattribute(console.combinecolors(lYellow, Black)); console.setdefaultattribute(console.combinecolors(lYellow, Black));
while true do begin
c:= keyboard.get_scancode;
console.writehexln(c);
end;
util.halt_and_catch_fire; util.halt_and_catch_fire;
end; end;

31
src/keyboard.pas Normal file
View File

@ -0,0 +1,31 @@
unit keyboard;
{$ASMMODE intel}
interface
uses
util;
function get_scancode() : byte;
implementation
function get_scancode() : byte; [public, alias: 'get_scancode'];
var
c : byte;
begin
c:= 0;
while true do begin
if inb($60) <> c then begin
c:= inb($60);
if c > 0 then begin
get_scancode:= c;
exit;
end;
end;
end;
end;
end.

View File

@ -11,6 +11,9 @@ procedure outb(port : word; val : byte);
procedure outw(port : word; val : word); procedure outw(port : word; val : word);
procedure outl(port : word; val : longword); procedure outl(port : word; val : longword);
procedure halt_and_catch_fire(); procedure halt_and_catch_fire();
function inb(port : word) : byte;
function inw(port : word) : word;
function inl(port : word) : dword;
implementation implementation
@ -76,4 +79,43 @@ begin
end; end;
end; end;
function inl(port : word) : dword; [public, alias: 'inl'];
begin
asm
PUSH EAX
PUSH EDX
MOV DX, port
IN EAX, DX
MOV inl, EAX
POP EDX
POP EAX
end;
end;
function inw(port : word) : word; [public, alias: 'inw'];
begin
asm
PUSH EAX
PUSH EDX
MOV DX, port
IN AX, DX
MOV inw, AX
POP EDX
POP EAX
end;
end;
function inb(port : word) : byte; [public, alias: 'inb'];
begin
asm
PUSH EAX
PUSH EDX
MOV DX, port
IN AL, DX
MOV inb, AL
POP EDX
POP EAX
end;
end;
end. end.