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:
		
							
								
								
									
										
											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. | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 kieron
					kieron