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:
parent
11e85d0edb
commit
a4ed035c93
BIN
bin/kernel.bin
BIN
bin/kernel.bin
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
lib/console.o
BIN
lib/console.o
Binary file not shown.
BIN
lib/console.ppu
BIN
lib/console.ppu
Binary file not shown.
BIN
lib/kernel.o
BIN
lib/kernel.o
Binary file not shown.
BIN
lib/kernel.ppu
BIN
lib/kernel.ppu
Binary file not shown.
BIN
lib/keyboard.ppu
Normal file
BIN
lib/keyboard.ppu
Normal file
Binary file not shown.
BIN
lib/util.ppu
BIN
lib/util.ppu
Binary file not shown.
@ -1,4 +1,4 @@
|
|||||||
unit BIOS_DATA_AREA;
|
unit bios_data_area;
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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
31
src/keyboard.pas
Normal 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.
|
42
src/util.pas
42
src/util.pas
@ -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.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user