#pragma once #include #include [[__maybe_unused__]] static const char *keymap[128] = { [2] = "1!", [3] = "2@", [4] = "3#", [5] = "4$", [6] = "5%", [7] = "6^", [8] = "7&", [9] = "8*", [10] = "9(", [11] = "0)", [12] = "-_", [13] = "=+", [14] = NULL, [15] = NULL, [16] = "qQ", [17] = "wW", [18] = "eE", [19] = "rR", [20] = "tT", [21] = "yY", [22] = "uU", [23] = "iI", [24] = "oO", [25] = "pP", [26] = "[{", [27] = "]}", [28] = "\n\n", [30] = "aA", [31] = "sS", [32] = "dD", [33] = "fF", [34] = "gG", [35] = "hH", [36] = "jJ", [37] = "kK", [38] = "lL", [39] = ";:", [40] = "'\"", [41] = NULL, [42] = NULL, [43] = "\\|", [44] = "zZ", [45] = "xX", [46] = "cC", [47] = "vV", [48] = "bB", [49] = "nN", [50] = "mM", [51] = ",<", [52] = ".>", [53] = "/?", [54] = NULL, [55] = NULL, [56] = NULL, [57] = " ", [58] = NULL, [59] = NULL, [60] = NULL, [61] = NULL, [62] = NULL, [63] = NULL, [64] = NULL, [65] = NULL, [66] = NULL, [67] = NULL, [68] = NULL, [69] = NULL, [70] = NULL, [71] = NULL, [72] = NULL, [73] = NULL, [74] = NULL, [75] = NULL, [76] = NULL, [77] = NULL, [78] = NULL, [79] = NULL, [80] = NULL, [81] = NULL, [82] = NULL, [83] = NULL, [84] = NULL, [85] = NULL, [86] = NULL, [87] = NULL, [88] = NULL, [89] = NULL, [90] = NULL, [91] = NULL, [92] = NULL, [93] = NULL, [94] = NULL, [95] = NULL, [96] = NULL, [97] = NULL, [98] = NULL, [99] = NULL, [100] = NULL, [101] = NULL, [102] = NULL, [103] = NULL, [104] = NULL, [105] = NULL, [106] = NULL, [107] = NULL, [108] = NULL, [109] = NULL, [110] = NULL, [111] = NULL, [112] = NULL, [113] = NULL, [114] = NULL, [115] = NULL, [116] = NULL, [117] = NULL, [118] = NULL, [119] = NULL, [120] = NULL, [121] = NULL, [122] = NULL, [123] = NULL, [124] = NULL, [125] = NULL, [126] = NULL, [127] = NULL, }; #define KEYBOARD_PORT 0x60 #define KEY_1 0x02 #define KEY_2 0x03 #define KEY_3 0x04 #define KEY_4 0x05 #define KEY_5 0x06 #define KEY_6 0x07 #define KEY_7 0x08 #define KEY_8 0x09 #define KEY_9 0x0A #define KEY_0 0x0B #define KEY_MINUS 0x0C #define KEY_EQUAL 0x0D #define KEY_BACKSPACE 0x0E #define KEY_TAB 0x0F #define KEY_SQUARE_OPEN_BRACKET 0x1A #define KEY_SQUARE_CLOSE_BRACKET 0x1B #define KEY_ENTER 0x1C #define KEY_A 0x1E #define KEY_B 0x30 #define KEY_C 0x2E #define KEY_D 0x20 #define KEY_E 0x12 #define KEY_F 0x21 #define KEY_G 0x22 #define KEY_H 0x23 #define KEY_I 0x17 #define KEY_J 0x24 #define KEY_K 0x25 #define KEY_L 0x26 #define KEY_M 0x32 #define KEY_N 0x31 #define KEY_O 0x18 #define KEY_P 0x19 #define KEY_Q 0x10 #define KEY_R 0x13 #define KEY_S 0x1F #define KEY_T 0x14 #define KEY_U 0x16 #define KEY_V 0x2F #define KEY_W 0x11 #define KEY_X 0x2D #define KEY_Y 0x15 #define KEY_Z 0x2C #define KEY_SEMICOLON 0x27 #define KEY_BACKSLASH 0x2B #define KEY_COMMA 0x33 #define KEY_DOT 0x34 #define KEY_FORESLASH 0x35 #define KEY_F1 0x3B #define KEY_F2 0x3C #define KEY_F3 0x3D #define KEY_F4 0x3E #define KEY_F5 0x3F #define KEY_F6 0x40 #define KEY_F7 0x41 #define KEY_F8 0x42 #define KEY_F9 0x43 #define KEY_F10 0x44 #define KEY_F11 0x85 #define KEY_F12 0x86 #define KEY_DELETE 0x53 #define KEY_DOWN 0x50 #define KEY_END 0x4F #define KEY_ESC 0x01 #define KEY_HOME 0x47 #define KEY_INSERT 0x52 #define KEY_KEYPAD_5 0x4C #define KEY_KEYPAD_MUL 0x37 #define KEY_KEYPAD_Minus 0x4A #define KEY_KEYPAD_PLUS 0x4E #define KEY_KEYPAD_DIV 0x35 #define KEY_LEFT 0x4B #define KEY_PAGE_DOWN 0x51 #define KEY_PAGE_UP 0x49 #define KEY_PRINT_SCREEN 0x37 #define KEY_RIGHT 0x4D #define KEY_SPACE 0x39 #define KEY_UP 0x48 #define KEY_LEFT_SHIFT 0x2A #define KEY_RIGHT_SHIFT 0x36 #define KEY_CAPSLOCK 0x3A struct key_event { uint8_t c; uint8_t scan_code; }; struct key_event get_key(void);