Cucumber/Kernel/src/Tier0_32/kbd_layout.c

128 lines
1.9 KiB
C

#include "Tier0/kbd_layout.h"
#include "Tier0/ps2.h"
u8 g_kbd_layout_default[] = {
// 0x00
0xFF, 0xFF,
0xFF, 0xFF,
'1', '!',
'2', '@',
'3', '#',
'4', '$',
'5', '%',
'6', '^',
'7', '&',
'8', '*',
'9', '(',
'0', ')',
'-', '_',
'=', '+',
0xFF, 0xFF,
' ', ' ',
// 0x10
'q', 'Q',
'w', 'W',
'e', 'E',
'r', 'R',
't', 'T',
'y', 'Y',
'u', 'U',
'i', 'I',
'o', 'O',
'p', 'P',
'[', '{',
']', '}',
'\n', '\n',
0xFF, 0xFF,
'a', 'A',
's', 'S',
// 0x20
'd', 'D',
'f', 'F',
'g', 'G',
'h', 'H',
'j', 'J',
'k', 'K',
'l', 'L',
';', ':',
'\'', '"',
'`', '~',
0xFF, 0xFF,
'\\', '|',
'z', 'Z',
'x', 'X',
'c', 'C',
'v', 'V',
// 0x30
'b', 'B',
'n', 'N',
'm', 'M',
',', '<',
'.', '>',
'/', '?',
0xFF, 0xFF,
'*', '*',
0xFF, 0xFF,
' ', ' ',
0xFF, 0xFF,
0xFF, 0xFF,
0xFF, 0xFF,
0xFF, 0xFF,
0xFF, 0xFF,
0xFF, 0xFF,
// 0x40
0xFF, 0xFF,
0xFF, 0xFF,
0xFF, 0xFF,
0xFF, 0xFF,
0xFF, 0xFF,
0xFF, 0xFF,
0xFF, 0xFF,
'7', '7',
'8', '8',
'9', '9',
'-', '-',
'4', '4',
'5', '5',
'6', '6',
'+', '+',
'1', '1',
// 0x50
'2', '2',
'3', '3',
'0', '0',
'.', '.',
0xFF, 0xFF
};
T_KBD_LAYOUT g_kbd_layout_current;
u8 g_kbd_layout_current_length;
void kbd_layout_set(T_KBD_LAYOUT Layout, u8 Length)
{
g_kbd_layout_current = Layout;
g_kbd_layout_current_length = Length;
}
void kbd_layout_set_default(void)
{
kbd_layout_set(g_kbd_layout_default, 0x54 * 2);
}
s8 kbd_layout_translate(u8 Key, u8 Special)
{
if (Key > g_kbd_layout_current_length)
return 0x00;
u8 Shift = (Special & PS2_SPECIAL_SHIFT) > 0;
s8 Mapped = g_kbd_layout_current[Key * 2 + Shift];
return (Mapped == 0xFF ? 0x00 : Mapped);
}