123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- #pragma once
- #include "../../common/glib.h"
- #define PS2_KEYBOARD_INTR_VECTOR 0x21
- #define ps2_keyboard_buffer_size 100
- struct ps2_keyboard_input_buffer
- {
- unsigned char *ptr_head;
- unsigned char *ptr_tail;
- int count;
- unsigned char buffer[ps2_keyboard_buffer_size];
- };
- #define PORT_PS2_KEYBOARD_DATA 0x60
- #define PORT_PS2_KEYBOARD_STATUS 0x64
- #define PORT_PS2_KEYBOARD_CONTROL 0x64
- #define PS2_KEYBOARD_COMMAND_WRITE 0x60
- #define PS2_KEYBOARD_COMMAND_READ 0x20
- #define PS2_KEYBOARD_PARAM_INIT 0x47
- #define PS2_KEYBOARD_FLAG_OUTBUF_FULL 0x01
- #define PS2_KEYBOARD_FLAG_INBUF_FULL 0x02
- #define wait_ps2_keyboard_write() while (io_in8(PORT_PS2_KEYBOARD_STATUS) & PS2_KEYBOARD_FLAG_INBUF_FULL)
- #define wait_ps2_keyboard_read() while (io_in8(PORT_PS2_KEYBOARD_STATUS) & PS2_KEYBOARD_FLAG_OUTBUF_FULL)
- #define NUM_SCAN_CODES 0x80
- #define MAP_COLS 2
- #define PAUSE_BREAK 1
- #define PRINT_SCREEN 2
- #define OTHER_KEY 4
- #define FLAG_BREAK 0X80
- unsigned char pause_break_scan_code[] = {0xe1, 0x1d, 0x45, 0xe1, 0x9d, 0xc5};
- uint keycode_map_normal[NUM_SCAN_CODES*MAP_COLS] =
- {
- 0, 0,
- 0, 0,
- '1', '!',
- '2', '@',
- '3', '#',
- '4', '$',
- '5', '%',
- '6', '^',
- '7', '&',
- '8', '*',
- '9', '(',
- '0', ')',
- '-', '_',
- '=', '+',
- '\b', '\b',
- '\t', '\t',
- 'q', 'Q',
- 'w', 'W',
- 'e', 'E',
- 'r', 'R',
- 't', 'T',
- 'y', 'Y',
- 'u', 'U',
- 'i', 'I',
- 'o', 'O',
- 'p', 'P',
- '[', '{',
- ']', '}',
- '\n', '\n',
- 0x1d, 0x1d,
- 'a', 'A',
- 's', 'S',
- 'd', 'D',
- 'f', 'F',
- 'g', 'G',
- 'h', 'H',
- 'j', 'J',
- 'k', 'K',
- 'l', 'L',
- ';', ':',
- '\'', '"',
- '`', '~',
- 0x2a, 0x2a,
- '\\', '|',
- 'z', 'Z',
- 'x', 'X',
- 'c', 'C',
- 'v', 'V',
- 'b', 'B',
- 'n', 'N',
- 'm', 'M',
- ',', '<',
- '.', '>',
- '/', '?',
- 0x36, 0x36,
- '*', '*',
- 0x38, 0x38,
- ' ', ' ',
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- '7', 0,
- '8', 0,
- '9', 0,
- '-', 0,
- '4', 0,
- '5', 0,
- '6', 0,
- '+', 0,
- '1', 0,
- '2', 0,
- '3', 0,
- '0', 0,
- '.', 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- 0, 0,
- };
- void ps2_keyboard_init();
- void ps2_keyboard_exit();
- void ps2_keyboard_analyze_keycode();
- int ps2_keyboard_get_scancode();
|