From 92e0db5eb43615d28bc4fa6f152b035023e7a830 Mon Sep 17 00:00:00 2001 From: aaron Date: Thu, 18 May 2017 13:41:54 +0000 Subject: [PATCH] git-svn-id: https://spexeah.com:8443/svn/Asuro@96 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c --- src/drivers/keyboard.pas | 67 ++++++++++++++++++++++++---------------- src/kernel.pas | 2 +- 2 files changed, 42 insertions(+), 27 deletions(-) diff --git a/src/drivers/keyboard.pas b/src/drivers/keyboard.pas index b2c1faee..41daa07f 100644 --- a/src/drivers/keyboard.pas +++ b/src/drivers/keyboard.pas @@ -34,13 +34,52 @@ procedure init(); procedure callback(scan_code : void); procedure buffer_push_sc(scan_code : uInt8); +procedure lang_UK(); +procedure lang_USA(); + implementation -procedure init(); +procedure init(pchar keyboard_layout); begin memset(uint32(@key_matrix[0]), 0, sizeof(TKeyInfo)*256); - memset(uint32(@key_buffer), 0, sizeof(TKeyInfo)); + memset(uint32(@key_buffer), 0, sizeof(TKeyInfo)*128); + case keyboard_layout of + 'USA' : lang_USA(); + 'UK' : lang_UK(); + end; + + isr33.hook(uint32(@callback)); + +end; + +procedure callback(scan_code : void); +begin + if key_matrix[uint8(scan_code)].key_code <> 0 then begin + buffer_push_sc(uint8(scan_code)); + console.writechar(char(key_buffer[0].key_code)); + end; +end; + +procedure buffer_push_sc(scan_code : uInt8); +var + i : uInt8; +begin + for i:=127 downto 1 do begin + key_buffer[i] := key_buffer[i - 1]; + end; + + key_buffer[0] := key_matrix[scan_code]; + +end; + +procedure lang_UK(); +begin +end; + + +procedure lang_USA(); +begin key_matrix[1].key_code := $1B; key_matrix[2].key_code := $31; key_matrix[3].key_code := $32; @@ -112,30 +151,6 @@ begin key_matrix[87].key_code := $85; key_matrix[88].key_code := $86; - - - isr33.hook(uint32(@callback)); - -end; - -procedure callback(scan_code : void); -begin - if key_matrix[uint8(scan_code)].key_code <> 0 then begin - buffer_push_sc(uint8(scan_code)); - end; - console.writechar(char(key_buffer[0].key_code)); -end; - -procedure buffer_push_sc(scan_code : uInt8); -var - i : uInt32; -begin - for i:=127 downto 2 do begin - key_buffer[i] = key_buffer[i - 1]; - end; - - key_buffer[0] = key_matrix[scan_code]; - end; end. \ No newline at end of file diff --git a/src/kernel.pas b/src/kernel.pas index 3e642c0b..f567a6cb 100644 --- a/src/kernel.pas +++ b/src/kernel.pas @@ -49,7 +49,7 @@ begin isr32.hook(uint32(@bios_data_area.tick_update)); //drivers - keyboard.init(); + keyboard.init('USA'); asm MOV dds, CS