33 case 0x1E:
return (shifted ^
caps_lock) ?
'A' :
'a';
34 case 0x30:
return (shifted ^
caps_lock) ?
'B' :
'b';
35 case 0x2E:
return (shifted ^
caps_lock) ?
'C' :
'c';
36 case 0x20:
return (shifted ^
caps_lock) ?
'D' :
'd';
37 case 0x12:
return (shifted ^
caps_lock) ?
'E' :
'e';
38 case 0x21:
return (shifted ^
caps_lock) ?
'F' :
'f';
39 case 0x22:
return (shifted ^
caps_lock) ?
'G' :
'g';
40 case 0x23:
return (shifted ^
caps_lock) ?
'H' :
'h';
41 case 0x17:
return (shifted ^
caps_lock) ?
'I' :
'i';
42 case 0x24:
return (shifted ^
caps_lock) ?
'J' :
'j';
43 case 0x25:
return (shifted ^
caps_lock) ?
'K' :
'k';
44 case 0x26:
return (shifted ^
caps_lock) ?
'L' :
'l';
45 case 0x32:
return (shifted ^
caps_lock) ?
'M' :
'm';
46 case 0x31:
return (shifted ^
caps_lock) ?
'N' :
'n';
47 case 0x18:
return (shifted ^
caps_lock) ?
'O' :
'o';
48 case 0x19:
return (shifted ^
caps_lock) ?
'P' :
'p';
49 case 0x10:
return (shifted ^
caps_lock) ?
'Q' :
'q';
50 case 0x13:
return (shifted ^
caps_lock) ?
'R' :
'r';
51 case 0x1F:
return (shifted ^
caps_lock) ?
'S' :
's';
52 case 0x14:
return (shifted ^
caps_lock) ?
'T' :
't';
53 case 0x16:
return (shifted ^
caps_lock) ?
'U' :
'u';
54 case 0x2F:
return (shifted ^
caps_lock) ?
'V' :
'v';
55 case 0x11:
return (shifted ^
caps_lock) ?
'W' :
'w';
56 case 0x2D:
return (shifted ^
caps_lock) ?
'X' :
'x';
57 case 0x15:
return (shifted ^
caps_lock) ?
'Y' :
'y';
58 case 0x2C:
return (shifted ^
caps_lock) ?
'Z' :
'z';
61 case 0x02:
return shifted ?
'!' :
'1';
62 case 0x03:
return shifted ?
'@' :
'2';
63 case 0x04:
return shifted ?
'#' :
'3';
64 case 0x05:
return shifted ?
'$' :
'4';
65 case 0x06:
return shifted ?
'%' :
'5';
66 case 0x07:
return shifted ?
'^' :
'6';
67 case 0x08:
return shifted ?
'&' :
'7';
68 case 0x09:
return shifted ?
'*' :
'8';
69 case 0x0A:
return shifted ?
'(' :
'9';
70 case 0x0B:
return shifted ?
')' :
'0';
73 case 0x0C:
return shifted ?
'_' :
'-';
74 case 0x0D:
return shifted ?
'+' :
'=';
75 case 0x1A:
return shifted ?
'{' :
'[';
76 case 0x1B:
return shifted ?
'}' :
']';
77 case 0x2B:
return shifted ?
'|' :
'\\';
78 case 0x27:
return shifted ?
':' :
';';
79 case 0x28:
return shifted ?
'"' :
'\'';
80 case 0x29:
return shifted ?
'~' :
'`';
81 case 0x33:
return shifted ?
'<' :
',';
82 case 0x34:
return shifted ?
'>' :
'.';
83 case 0x35:
return shifted ?
'?' :
'/';
84 case 0x39:
return ' ';
87 case 0x1C:
return '\n';
88 case 0x0E:
return '\b';
89 case 0x0F:
return '\t';
118 while (
inb(0x60) != ext + 0x80) {
125 if (inpt == 0x2A || inpt == 0x36) {
130 if (inpt == 0xAA || inpt == 0xB6) {
141 while (
inb(0x60) != 0xBA) {
157 while (
inb(0x60) != inpt + 0x80) {
uint8_t __scntasci(uint8_t inpt, uint8_t shifted)
scntasci converts a keyboard scancode to an ascii character
static uint8_t shift_pressed
void __kbstate(uint8_t *shift, uint8_t *caps)
kbstate exports the current keyboard modifier state
void __kbreset(void)
kbreset resets the keyboard modifier states
uint8_t __gtchr(void)
listens for a character outside of loops from ports