3 changed files with 298 additions and 140 deletions
@ -1,146 +1,301 @@
|
||||
#include "keyboard.h" |
||||
#include "vga.h" |
||||
#include "io.h" |
||||
#include "vga.h" |
||||
|
||||
const char *scancode [128] = { |
||||
/* 0 */ 0, |
||||
/* 1 */ "\e", |
||||
/* 2 */ "&", |
||||
/* 3 */ "é", |
||||
/* 4 */ "\"", |
||||
/* 5 */ "'", |
||||
/* 6 */ "(", |
||||
/* 7 */ "-", |
||||
/* 8 */ "è", |
||||
/* 9 */ "_", |
||||
/* 10 */ "ç", |
||||
/* 11 */ "à", |
||||
/* 12 */ ")", |
||||
/* 13 */ "=", |
||||
/* 14 */ "\b", /* Backspace */ |
||||
/* 15 */ "\t", /* Tab */ |
||||
/* 16 */ "a", |
||||
/* 17 */ "z", |
||||
/* 18 */ "e", |
||||
/* 19 */ "r", |
||||
/* 20 */ "t", |
||||
/* 21 */ "y", |
||||
/* 22 */ "u", |
||||
/* 23 */ "i", |
||||
/* 24 */ "o", |
||||
/* 25 */ "p", |
||||
/* 26 */ "^", |
||||
/* 27 */ "$", |
||||
/* 28 */ "\n", |
||||
/* 29 */ 0, /* left control */ |
||||
/* 30 */ "q", |
||||
/* 31 */ "s", |
||||
/* 32 */ "d", |
||||
/* 33 */ "f", |
||||
/* 34 */ "g", |
||||
/* 35 */ "h", |
||||
/* 36 */ "j", |
||||
/* 37 */ "k", |
||||
/* 38 */ "l", |
||||
/* 39 */ "m", |
||||
/* 40 */ "ù", |
||||
/* 41 */ 0, |
||||
/* 42 */ 0, /* left shift */ |
||||
/* 43 */ "*", |
||||
/* 44 */ "w", |
||||
/* 45 */ "x", |
||||
/* 46 */ "c", |
||||
/* 47 */ "v", |
||||
/* 48 */ "b", |
||||
/* 49 */ "n", |
||||
/* 50 */ ",", |
||||
/* 51 */ ";", |
||||
/* 52 */ ":", |
||||
/* 53 */ "!", |
||||
/* 54 */ 0, |
||||
/* 55 */ 0, |
||||
/* 56 */ 0, |
||||
/* 57 */ " ", |
||||
/* 58 */ 0, |
||||
/* 59 */ "\eOP", /* F1 */ |
||||
/* 60 */ "\eOQ", /* F2 */ |
||||
/* 61 */ "\eOR", /* F3 */ |
||||
/* 62 */ "\eOS", /* F4 */ |
||||
/* 63 */ "\e[15~", /* F5 */ |
||||
/* 64 */ "\e[17~", /* F6 */ |
||||
/* 65 */ "\e[18~", /* F7 */ |
||||
/* 66 */ "\e[19~", /* F8 */ |
||||
/* 67 */ "\e[20~", /* F9 */ |
||||
/* 68 */ "\e[21~", /* F10 */ |
||||
/* 69 */ 0, |
||||
/* 70 */ 0, |
||||
/* 71 */ 0, |
||||
/* 72 */ 0, |
||||
/* 73 */ 0, |
||||
/* 74 */ 0, |
||||
/* 75 */ 0, |
||||
/* 76 */ 0, |
||||
/* 77 */ 0, |
||||
/* 78 */ 0, |
||||
/* 79 */ 0, |
||||
/* 80 */ 0, |
||||
/* 81 */ 0, |
||||
/* 82 */ 0, |
||||
/* 83 */ 0, |
||||
/* 84 */ 0, |
||||
/* 85 */ 0, |
||||
/* 86 */ "<", |
||||
/* 87 */ "\e[23~", /* F11 */ |
||||
/* 88 */ "\e[24~", /* F12 */ |
||||
/* 89 */ 0, |
||||
/* 90 */ 0, |
||||
/* 91 */ 0, |
||||
/* 92 */ 0, |
||||
/* 93 */ 0, |
||||
/* 94 */ 0, |
||||
/* 95 */ 0, |
||||
/* 96 */ 0, |
||||
/* 97 */ 0, |
||||
/* 98 */ 0, |
||||
/* 99 */ 0, |
||||
/* 100 */ 0, |
||||
/* 101 */ 0, |
||||
/* 102 */ 0, |
||||
/* 103 */ 0, |
||||
/* 104 */ 0, |
||||
/* 105 */ 0, |
||||
/* 106 */ 0, |
||||
/* 107 */ 0, |
||||
/* 108 */ 0, |
||||
/* 109 */ 0, |
||||
/* 110 */ 0, |
||||
/* 111 */ 0, |
||||
/* 112 */ 0, |
||||
/* 113 */ 0, |
||||
/* 114 */ 0, |
||||
/* 115 */ 0, |
||||
/* 116 */ 0, |
||||
/* 117 */ 0, |
||||
/* 118 */ 0, |
||||
/* 119 */ 0, |
||||
/* 120 */ 0, |
||||
/* 121 */ 0, |
||||
/* 122 */ 0, |
||||
/* 123 */ 0, |
||||
/* 124 */ 0, |
||||
/* 125 */ 0, |
||||
/* 126 */ 0, |
||||
/* 127 */ 0 |
||||
}; |
||||
const char *scancode[128] = { |
||||
/* 0 */ 0, |
||||
/* 1 */ "\e", /* escape */ |
||||
/* 2 */ "&", |
||||
/* 3 */ "é", |
||||
/* 4 */ "\"", |
||||
/* 5 */ "'", |
||||
/* 6 */ "(", |
||||
/* 7 */ "-", |
||||
/* 8 */ "è", |
||||
/* 9 */ "_", |
||||
/* 10 */ "ç", |
||||
/* 11 */ "à", |
||||
/* 12 */ ")", |
||||
/* 13 */ "=", |
||||
/* 14 */ "\b", /* Backspace */ |
||||
/* 15 */ "\t", /* Tab */ |
||||
/* 16 */ "a", |
||||
/* 17 */ "z", |
||||
/* 18 */ "e", |
||||
/* 19 */ "r", |
||||
/* 20 */ "t", |
||||
/* 21 */ "y", |
||||
/* 22 */ "u", |
||||
/* 23 */ "i", |
||||
/* 24 */ "o", |
||||
/* 25 */ "p", |
||||
/* 26 */ "^", |
||||
/* 27 */ "$", |
||||
/* 28 */ "\n", |
||||
/* 29 */ 0, /* left control */ |
||||
/* 30 */ "q", |
||||
/* 31 */ "s", |
||||
/* 32 */ "d", |
||||
/* 33 */ "f", |
||||
/* 34 */ "g", |
||||
/* 35 */ "h", |
||||
/* 36 */ "j", |
||||
/* 37 */ "k", |
||||
/* 38 */ "l", |
||||
/* 39 */ "m", |
||||
/* 40 */ "ù", |
||||
/* 41 */ 0, /*²*/ |
||||
/* 42 */ 0, /* left shift */ |
||||
/* 43 */ "*", |
||||
/* 44 */ "w", |
||||
/* 45 */ "x", |
||||
/* 46 */ "c", |
||||
/* 47 */ "v", |
||||
/* 48 */ "b", |
||||
/* 49 */ "n", |
||||
/* 50 */ ",", |
||||
/* 51 */ ";", |
||||
/* 52 */ ":", |
||||
/* 53 */ "!", |
||||
/* 54 */ 0, /* right shift*/ |
||||
/* 55 */ 0, |
||||
/* 56 */ 0, /* left alt*/ |
||||
/* 57 */ " ", |
||||
/* 58 */ 0, |
||||
/* 59 */ "\eOP", /* F1 */ |
||||
/* 60 */ "\eOQ", /* F2 */ |
||||
/* 61 */ "\eOR", /* F3 */ |
||||
/* 62 */ "\eOS", /* F4 */ |
||||
/* 63 */ "\e[15~", /* F5 */ |
||||
/* 64 */ "\e[17~", /* F6 */ |
||||
/* 65 */ "\e[18~", /* F7 */ |
||||
/* 66 */ "\e[19~", /* F8 */ |
||||
/* 67 */ "\e[20~", /* F9 */ |
||||
/* 68 */ "\e[21~", /* F10 */ |
||||
/* 69 */ 0, |
||||
/* 70 */ 0, |
||||
/* 71 */ 0, |
||||
/* 72 */ 0, |
||||
/* 73 */ 0, |
||||
/* 74 */ 0, |
||||
/* 75 */ 0, |
||||
/* 76 */ 0, |
||||
/* 77 */ 0, |
||||
/* 78 */ 0, |
||||
/* 79 */ 0, |
||||
/* 80 */ 0, |
||||
/* 81 */ 0, |
||||
/* 82 */ 0, |
||||
/* 83 */ 0, |
||||
/* 84 */ 0, |
||||
/* 85 */ 0, |
||||
/* 86 */ "<", |
||||
/* 87 */ "\e[23~", /* F11 */ |
||||
/* 88 */ "\e[24~", /* F12 */ |
||||
/* 89 */ 0, |
||||
/* 90 */ 0, |
||||
/* 91 */ 0, |
||||
/* 92 */ 0, |
||||
/* 93 */ 0, |
||||
/* 94 */ 0, |
||||
/* 95 */ 0, |
||||
/* 96 */ 0, |
||||
/* 97 */ 0, |
||||
/* 98 */ 0, |
||||
/* 99 */ 0, |
||||
/* 100 */ 0, |
||||
/* 101 */ 0, |
||||
/* 102 */ 0, |
||||
/* 103 */ 0, |
||||
/* 104 */ 0, |
||||
/* 105 */ 0, |
||||
/* 106 */ 0, |
||||
/* 107 */ 0, |
||||
/* 108 */ 0, |
||||
/* 109 */ 0, |
||||
/* 110 */ 0, |
||||
/* 111 */ 0, |
||||
/* 112 */ 0, |
||||
/* 113 */ 0, |
||||
/* 114 */ 0, |
||||
/* 115 */ 0, |
||||
/* 116 */ 0, |
||||
/* 117 */ 0, |
||||
/* 118 */ 0, |
||||
/* 119 */ 0, |
||||
/* 120 */ 0, |
||||
/* 121 */ 0, |
||||
/* 122 */ 0, |
||||
/* 123 */ 0, |
||||
/* 124 */ 0, |
||||
/* 125 */ 0, |
||||
/* 126 */ 0, |
||||
/* 127 */ 0}; |
||||
|
||||
const char *scancode_shift[128] = { |
||||
/* 0 */ 0, |
||||
/* 1 */ "\e", |
||||
/* 2 */ "1", |
||||
/* 3 */ "2", |
||||
/* 4 */ "3", |
||||
/* 5 */ "4", |
||||
/* 6 */ "5", |
||||
/* 7 */ "6", |
||||
/* 8 */ "7", |
||||
/* 9 */ "8", |
||||
/* 10 */ "9", |
||||
/* 11 */ "0", |
||||
/* 12 */ "°", |
||||
/* 13 */ "+", |
||||
/* 14 */ "\b", /* Shift-Backspace */ |
||||
/* 15 */ "\e[Z", /* Shift-Tab */ |
||||
/* 16 */ "A", |
||||
/* 17 */ "Z", |
||||
/* 18 */ "E", |
||||
/* 19 */ "R", |
||||
/* 20 */ "T", |
||||
/* 21 */ "Y", |
||||
/* 22 */ "U", |
||||
/* 23 */ "I", |
||||
/* 24 */ "O", |
||||
/* 25 */ "P", |
||||
/* 26 */ "\"", |
||||
/* 27 */ "£", |
||||
/* 28 */ "\n", |
||||
/* 29 */ 0, /* left control */ |
||||
/* 30 */ "Q", |
||||
/* 31 */ "S", |
||||
/* 32 */ "D", |
||||
/* 33 */ "F", |
||||
/* 34 */ "G", |
||||
/* 35 */ "H", |
||||
/* 36 */ "J", |
||||
/* 37 */ "K", |
||||
/* 38 */ "L", |
||||
/* 39 */ "M", |
||||
/* 40 */ "%", |
||||
/* 41 */ 0, |
||||
/* 42 */ 0, |
||||
/* 43 */ "µ", |
||||
/* 44 */ "W", |
||||
/* 45 */ "X", |
||||
/* 46 */ "C", |
||||
/* 47 */ "V", |
||||
/* 48 */ "B", |
||||
/* 49 */ "N", |
||||
/* 50 */ "?", |
||||
/* 51 */ ".", |
||||
/* 52 */ "/", |
||||
/* 53 */ "§", |
||||
/* 54 */ 0, |
||||
/* 55 */ 0, |
||||
/* 56 */ 0, |
||||
/* 57 */ 0, |
||||
/* 58 */ 0, |
||||
/* 59 */ "\eOP", /* Shift-F1 */ |
||||
/* 60 */ "\eOQ", /* Shift-F2 */ |
||||
/* 61 */ "\eOR", /* Shift-F3 */ |
||||
/* 62 */ "\eOS", /* Shift-F4 */ |
||||
/* 63 */ "\e[15;2~", /* Shift-F5 */ |
||||
/* 64 */ "\e[17;2~", /* Shift-F6 */ |
||||
/* 65 */ "\e[18;2~", /* Shift-F7 */ |
||||
/* 66 */ "\e[19;2~", /* Shift-F8 */ |
||||
/* 67 */ "\e[20:2~", /* Shift-F9 */ |
||||
/* 68 */ "\e[21:2~", /* Shift-F10 */ |
||||
/* 69 */ 0, |
||||
/* 70 */ 0, |
||||
/* 71 */ 0, |
||||
/* 72 */ 0, |
||||
/* 73 */ 0, |
||||
/* 74 */ 0, |
||||
/* 75 */ 0, |
||||
/* 76 */ 0, |
||||
/* 77 */ 0, |
||||
/* 78 */ 0, |
||||
/* 79 */ 0, |
||||
/* 80 */ 0, |
||||
/* 81 */ 0, |
||||
/* 82 */ 0, |
||||
/* 83 */ 0, |
||||
/* 84 */ 0, |
||||
/* 85 */ 0, |
||||
/* 86 */ ">", |
||||
/* 87 */ "\e[23;2~", /* Shift-F11 */ |
||||
/* 88 */ "\e[24;2~", /* Shift-F12 */ |
||||
/* 89 */ 0, |
||||
/* 90 */ 0, |
||||
/* 91 */ 0, |
||||
/* 92 */ 0, |
||||
/* 93 */ 0, |
||||
/* 94 */ 0, |
||||
/* 95 */ 0, |
||||
/* 96 */ 0, |
||||
/* 97 */ 0, |
||||
/* 98 */ 0, |
||||
/* 99 */ 0, |
||||
/* 100 */ 0, |
||||
/* 101 */ 0, |
||||
/* 102 */ 0, |
||||
/* 103 */ 0, |
||||
/* 104 */ 0, |
||||
/* 105 */ 0, |
||||
/* 106 */ 0, |
||||
/* 107 */ 0, |
||||
/* 108 */ 0, |
||||
/* 109 */ 0, |
||||
/* 110 */ 0, |
||||
/* 111 */ 0, |
||||
/* 112 */ 0, |
||||
/* 113 */ 0, |
||||
/* 114 */ 0, |
||||
/* 115 */ 0, |
||||
/* 116 */ 0, |
||||
/* 117 */ 0, |
||||
/* 118 */ 0, |
||||
/* 119 */ 0, |
||||
/* 120 */ 0, |
||||
/* 121 */ 0, |
||||
/* 122 */ 0, |
||||
/* 123 */ 0, |
||||
/* 124 */ 0, |
||||
/* 125 */ 0, |
||||
/* 126 */ 0, |
||||
/* 127 */ 0}; |
||||
|
||||
void keyboard_do_irq(){ |
||||
char c = 0; |
||||
if (inb(0x60) != c) { |
||||
c = inb(0x60); |
||||
if (c > 0) { |
||||
printString(scancode[(int)c]); |
||||
} |
||||
} |
||||
void keyboard_do_irq() |
||||
{ |
||||
static int lshift = 0; |
||||
static int rshift = 0; |
||||
unsigned char c = 0; |
||||
if (inb(0x60) != c) { |
||||
c = inb(0x60); |
||||
if (c > 0) { |
||||
if (c < BREAK_CODE) { |
||||
switch (c) { |
||||
case 42: |
||||
lshift = 1; |
||||
break; |
||||
case 54: |
||||
rshift = 1; |
||||
break; |
||||
default: |
||||
if (lshift || rshift) |
||||
printString(scancode_shift[(int)c]); |
||||
else |
||||
printString(scancode[(int)c]); |
||||
} |
||||
}else { |
||||
c = c - BREAK_CODE; |
||||
switch (c) { |
||||
case 42: |
||||
lshift = 0; |
||||
break; |
||||
case 54: |
||||
rshift = 0; |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
|
@ -1,3 +1,6 @@
|
||||
#pragma once |
||||
|
||||
// Pushing generate MAKE_CODE (<0x80)
|
||||
// Releasing generate BREAK_CODE (break_code = make_code + 0x80)
|
||||
#define BREAK_CODE 0x80 |
||||
void keyboard_do_irq(); |
||||
|
Loading…
Reference in new issue