+++ /dev/null
-\r
-#include "core.h"\r
-\r
-uchar keytable0[0x80] = {\r
- 0 , 0 , '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '^',0x08,0x09,\r
- 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '@', '[',0x0a, 0 , 'A', 'S', \r
- 'D', 'F', 'G', 'H', 'J', 'K', 'L', ';', ':', 0 , 0 , ']', 'Z', 'X', 'C', 'V',\r
- 'B', 'N', 'M', ',', '.', '/', 0 , '*', 0 , ' ', 0 , 0 , 0 , 0 , 0 , 0 , \r
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , '7', '8', '9', '-', '4', '5', '6', '+', '1',\r
- '2', '3', '0', '.', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , \r
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , \r
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 \r
-};\r
-\r
-uchar keytable1[0x80] = {\r
- 0 , 0 , '!',0x22, '#', '$', '%', '&',0x27, '(', ')', '~', '=', '~',0x08,0x09,\r
- 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '`', '{',0x0a, 0 , 'A', 'S', \r
- 'D', 'F', 'G', 'H', 'J', 'K', 'L', '+', '*', 0 , 0 , '}', 'Z', 'X', 'C', 'V',\r
- 'B', 'N', 'M', '<', '>', '?', 0 , '*', 0 , ' ', 0 , 0 , 0 , 0 , 0 , 0 , \r
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , '7', '8', '9', '-', '4', '5', '6', '+', '1',\r
- '2', '3', '0', '.', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , \r
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , \r
- 0 , 0 , 0 , '_', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , '|', 0 , 0 \r
-};\r
-\r
-uint key_shift = 0, key_leds;\r
-uint offset_data_k;\r
-DATA_FIFO *sendto_k, *keycmd_k;\r
-int *keycmd_wait_k;\r
-\r
-void Initialise_Keyboard(DATA_FIFO *sendto, DATA_FIFO *keycmd, uint offset, uint leds, int *keycmd_wait)\r
-{\r
- sendto_k = sendto;\r
- keycmd_k = keycmd;\r
- offset_data_k = offset;\r
- keycmd_wait_k = keycmd_wait;\r
-Emergency_Out("KBD Initialise Start");\r
- Keyboard_Controller_Wait_SendReady();\r
- IO_Out8(PORT_KEYCMD, KEYCMD_WRITE_MODE);\r
- Keyboard_Controller_Wait_SendReady();\r
- IO_Out8(KEYB_DATA, KBC_MODE);\r
-Emergency_Out("KBD Set Mode");\r
- System_GateDescriptor_Set(0x21, (uint)asm_InterruptHandler21, 0x02, AR_INTGATE32);\r
- IO_Out8(PIC0_IMR, IO_In8(PIC0_IMR) & 0xfd);\r
-Emergency_Out("KBD Set INT");\r
- key_leds = (leds >> 4) & 7;\r
- FIFO32_Put(keycmd_k, KEYCMD_LED);\r
- FIFO32_Put(keycmd_k, key_leds);\r
-Emergency_Out("KBD Set LED");\r
-\r
- return;\r
-}\r
-\r
-void InterruptHandler21(int *esp)\r
-{\r
- int data;\r
-\r
- data = IO_In8(KEYB_DATA);\r
- FIFO32_Put(sendto_k, data + offset_data_k);\r
- IO_Out8(PIC0_OCW2, 0x61); /* IRQ-01\8eó\95t\8a®\97¹\82ðPIC\82É\92Ê\92m\81B0x60+\94Ô\8d\86\81B*/\r
- return;\r
-}\r
-\r
-void Keyboard_Decode(UI_KeyInfo *info, uint data)\r
-{\r
- if(data == 0xfa){\r
- *keycmd_wait_k = -1;\r
- } else if(data == 0xfe){\r
- Keyboard_Controller_Wait_SendReady();\r
- IO_Out8(KEYB_DATA, *keycmd_wait_k);\r
- }\r
-\r
- if(data >= 0x00 && data <= 0x7f){\r
- info->make = true;\r
- if(data == 0x2a) key_shift |= 1;/*LShift on*/\r
- else if(data == 0x36) key_shift |= 2;/*Rshift on*/\r
- else if(data == 0x3a) Keyboard_KeyLock(4);/*CapsLock*/\r
- else if(data == 0x45) Keyboard_KeyLock(2);/*NumLock*/\r
- else if(data == 0x46) Keyboard_KeyLock(1);/*ScrollLock*/\r
- } else if(data >= 0x80 && data <= 0xff){\r
- info->make = false;\r
- data -= 0x80;\r
- if(data == 0x2a) key_shift &= ~1;/*LShift off*/\r
- else if(data == 0x36) key_shift &= ~2;/*Rshift off*/\r
- }\r
-\r
- if(key_shift == 0){\r
- info->c = keytable0[data];\r
- } else{\r
- info->c = keytable1[data];\r
- }\r
-\r
- if('A' <= info->c && info->c <= 'Z'){\r
- if(((key_leds & 4) == 0 && key_shift == 0) || ((key_leds & 4) != 0 && key_shift != 0)) info->c += 0x20;\r
- info->alphabet = true;\r
- } else {\r
- info->alphabet = false;\r
- }\r
- info->keycode = data;\r
-\r
- return;\r
-}\r
-\r
-void Keyboard_KeyLock(uint led)\r
-{\r
- if(key_leds == (key_leds ^ led)) key_leds &= ~led;\r
- else key_leds ^= led;\r
- FIFO32_Put(keycmd_k, KEYCMD_LED);\r
- FIFO32_Put(keycmd_k, key_leds);\r
- return;\r
-}\r
-\r
-void Keyboard_Controller_Wait_SendReady(void)\r
-{\r
- /* \83L\81[\83{\81[\83h\83R\83\93\83g\83\8d\81[\83\89\82ª\83f\81[\83^\91\97\90M\89Â\94\\82É\82È\82é\82Ì\82ð\91Ò\82Â */\r
- for (;;) {\r
- if ((IO_In8(PORT_KEYSTA) & KEYSTA_SEND_NOTREADY) == 0) {\r
- break;\r
- }\r
- }\r
- return;\r
-}\r
-\r
-uint Keyboard_Get_KeyShift(void)\r
-{\r
- return key_shift;\r
-}\r