diff --git a/src/ps2.c b/src/ps2.c index 1ac51eb..cd2867c 100644 --- a/src/ps2.c +++ b/src/ps2.c @@ -79,114 +79,116 @@ const char KEY_DOWN = 0x72; char kbd_UK[256] = { - 0, 0, // 0x00 - 0, 0, // 0x01 - 0, 0, // 0x02 - 0, 0, // 0x03 - 0, 0, // 0x04 - 0, 0, // 0x05 - 0, 0, // 0x06 - 0, 0, // 0x07 - 0, 0, // 0x08 - 0, 0, // 0x09 - 0, 0, // 0x0a - 0, 0, // 0x0b - 0, 0, // 0x0c - 0, 0, // 0x0d - '¬', '`', // 0x0e - 0, 0, // 0x0f - 0, 0, // 0x10 - 0, 0, // 0x11 - 0, 0, // 0x12 - 0, 0, // 0x13 - 0, 0, // 0x14 - 'Q', 'q', // 0x15 - '!', '1', // 0x16 - 0, 0, // 0x17 - 0, 0, // 0x18 - 0, 0, // 0x19 - 'Z', 'z', // 0x1a - 'S', 's', // 0x1b - 'A', 'a', // 0x1c - 'W', 'w', // 0x1d - '"', '2', // 0x1e - 0, 0, // 0x1f - 0, 0, // 0x20 - 'C', 'c', // 0x21 - 'X', 'x', // 0x22 - 'D', 'd', // 0x23 - 'E', 'e', // 0x24 - '$', '4', // 0x25 - '£', '3', // 0x26 - 0, 0, // 0x27 - 0, 0, // 0x28 - ' ', ' ', // 0x29 - 'V', 'v', // 0x2a - 'F', 'f', // 0x2b - 'T', 't', // 0x2c - 'R', 'r', // 0x2d - '%', '5', // 0x2e - 0, 0, // 0x2f - 0, 0, // 0x30 - 'N', 'n', // 0x31 - 'B', 'b', // 0x32 - 'H', 'h', // 0x33 - 'G', 'g', // 0x34 - 'Y', 'y', // 0x35 - '^', '6', // 0x36 - 0, 0, // 0x37 - 0, 0, // 0x38 - 0, 0, // 0x39 - 'M', 'm', // 0x3a - 'J', 'j', // 0x3b - 'U', 'u', // 0x3c - '&', '7', // 0x3d - '*', '8', // 0x3e - 0, 0, // 0x3f - 0, 0, // 0x40 - '<', ',', // 0x41 - 'K', 'k', // 0x42 - 'I', 'i', // 0x43 - 'O', 'o', // 0x44 - ')', '0', // 0x45 - '(', '9', // 0x46 - 0, 0, // 0x47 - 0, 0, // 0x48 - '>', '.', // 0x49 - '?', '/', // 0x4a - 'L', 'l', // 0x4b - ':', ';', // 0x4c - 'P', 'p', // 0x4d - '_', '-', // 0x4e - 0, 0, // 0x4f - 0, 0, // 0x50 - 0, 0, // 0x51 - '@', '\'', // 0x52 - 0, 0, // 0x53 - '{', '[', // 0x54 - '+', '=', // 0x55 - 0, 0, // 0x56 - 0, 0, // 0x57 - '+', '=', // 0x58 - 0, 0, // 0x59 (RSHIFT) - '\n', '\n',// 0x5a (ENTER) - '}', ']', // 0x5b - 0, 0, // 0x5c - '|', '\\', // 0x5d - 0, 0, // 0x5e - 0, 0, // 0x5f - 0, 0, // 0x60 - 0, 0, // 0x61 - 0, 0, // 0x62 - 0, 0, // 0x63 - 0, 0, // 0x64 - 0, 0, // 0x65 - '\b', '\b',// 0x66 + 0, 0, // 0x00 + 0, 0, // 0x01 + 0, 0, // 0x02 + 0, 0, // 0x03 + 0, 0, // 0x04 + 0, 0, // 0x05 + 0, 0, // 0x06 + 0, 0, // 0x07 + 0, 0, // 0x08 + 0, 0, // 0x09 + 0, 0, // 0x0a + 0, 0, // 0x0b + 0, 0, // 0x0c + 0, 0, // 0x0d + '¬', '`', // 0x0e + 0, 0, // 0x0f + 0, 0, // 0x10 + 0, 0, // 0x11 + 0, 0, // 0x12 + 0, 0, // 0x13 + 0, 0, // 0x14 + 'Q', 'q', // 0x15 + '!', '1', // 0x16 + 0, 0, // 0x17 + 0, 0, // 0x18 + 0, 0, // 0x19 + 'Z', 'z', // 0x1a + 'S', 's', // 0x1b + 'A', 'a', // 0x1c + 'W', 'w', // 0x1d + '"', '2', // 0x1e + 0, 0, // 0x1f + 0, 0, // 0x20 + 'C', 'c', // 0x21 + 'X', 'x', // 0x22 + 'D', 'd', // 0x23 + 'E', 'e', // 0x24 + '$', '4', // 0x25 + '£', '3', // 0x26 + 0, 0, // 0x27 + 0, 0, // 0x28 + ' ', ' ', // 0x29 + 'V', 'v', // 0x2a + 'F', 'f', // 0x2b + 'T', 't', // 0x2c + 'R', 'r', // 0x2d + '%', '5', // 0x2e + 0, 0, // 0x2f + 0, 0, // 0x30 + 'N', 'n', // 0x31 + 'B', 'b', // 0x32 + 'H', 'h', // 0x33 + 'G', 'g', // 0x34 + 'Y', 'y', // 0x35 + '^', '6', // 0x36 + 0, 0, // 0x37 + 0, 0, // 0x38 + 0, 0, // 0x39 + 'M', 'm', // 0x3a + 'J', 'j', // 0x3b + 'U', 'u', // 0x3c + '&', '7', // 0x3d + '*', '8', // 0x3e + 0, 0, // 0x3f + 0, 0, // 0x40 + '<', ',', // 0x41 + 'K', 'k', // 0x42 + 'I', 'i', // 0x43 + 'O', 'o', // 0x44 + ')', '0', // 0x45 + '(', '9', // 0x46 + 0, 0, // 0x47 + 0, 0, // 0x48 + '>', '.', // 0x49 + '?', '/', // 0x4a + 'L', 'l', // 0x4b + ':', ';', // 0x4c + 'P', 'p', // 0x4d + '_', '-', // 0x4e + 0, 0, // 0x4f + 0, 0, // 0x50 + 0, 0, // 0x51 + '@', '\'', // 0x52 + 0, 0, // 0x53 + '{', '[', // 0x54 + '+', '=', // 0x55 + 0, 0, // 0x56 + 0, 0, // 0x57 + '+', '=', // 0x58 + 0, 0, // 0x59 (RSHIFT) + '\n', '\n', // 0x5a (ENTER) + '}', ']', // 0x5b + 0, 0, // 0x5c + '|', '\\', // 0x5d + 0, 0, // 0x5e + 0, 0, // 0x5f + 0, 0, // 0x60 + 0, 0, // 0x61 + 0, 0, // 0x62 + 0, 0, // 0x63 + 0, 0, // 0x64 + 0, 0, // 0x65 + '\b', '\b', // 0x66 0, 0}; char kbd_in[2]; char kbd_lastclock = 0; -char kbd_shift = 0; +char kbd_shift_left = 0; +char kbd_shift_right = 0; +char kbd_scan = 0; char kbd_pressed; char kbd_extend; char kbd_lastscan = 0; @@ -205,7 +207,7 @@ void get_ascii(char scan) { kbd_lastscan = scan; char p = (kbd_lastscan * 2); - if (!kbd_shift) + if (!(kbd_shift_left || kbd_shift_right)) { p++; } @@ -230,19 +232,27 @@ void handle_ps2() } kbd_extend = CHECK_BIT(kbd_in[1], 0); kbd_pressed = CHECK_BIT(kbd_in[1], 1); - char kbd_scan = kbd_in[0]; + kbd_scan = kbd_in[0]; if (kbd_pressed) { - if (kbd_scan == KEY_LEFTSHIFT || kbd_scan == KEY_RIGHTSHIFT) + if (kbd_scan == KEY_LEFTSHIFT) { - kbd_shift++; + kbd_shift_left = 1; + } + else if (kbd_scan == KEY_RIGHTSHIFT) + { + kbd_shift_right = 1; } } else { - if (kbd_scan == KEY_LEFTSHIFT || kbd_scan == KEY_RIGHTSHIFT) + if (kbd_scan == KEY_LEFTSHIFT) { - kbd_shift--; + kbd_shift_left = 0; + } + else if (kbd_scan == KEY_RIGHTSHIFT) + { + kbd_shift_right = 0; } else {