45 static int atkbd_scan();
47 static unsigned int keyMap = 0x0;
48 static unsigned int ledStatus = 0x0;
49 static char stdinBuffer[512];
51 static uInt32 controlKeys = 0x0;
55 static unsigned int keyboardMap[255][8] = {
57 { 0, 0, 0, 0, 0, 0, 0, 0 },
58 { 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B },
59 { 0x31, 0x21, 0, 0, 0x31, 0x31, 0x21, 0x21 },
60 { 0x32, 0x40, 0, 0, 0x32, 0x32, 0x40, 0x40 },
61 { 0x33, 0x23, 0, 0, 0x33, 0x33, 0x23, 0x23 },
62 { 0x34, 0x24, 0, 0, 0x34, 0x34, 0x24, 0x24 },
63 { 0x35, 0x25, 0, 0, 0x35, 0x35, 0x25, 0x25 },
64 { 0x36, 0x5E, 0, 0, 0x36, 0x36, 0x5E, 0x5E },
65 { 0x37, 0x26, 0, 0, 0x37, 0x37, 0x26, 0x26 },
66 { 0x38, 0x2A, 0, 0, 0x38, 0x38, 0x2A, 0x2A },
67 { 0x39, 0x28, 0, 0, 0x39, 0x39, 0x28, 0x28 },
68 { 0x30, 0x29, 0, 0, 0x30, 0x30, 0x29, 0x29 },
69 { 0x2D, 0x5F, 0, 0, 0x2D, 0x2D, 0x5F, 0x5F },
70 { 0x3D, 0x2B, 0, 0, 0x3D, 0x3D, 0x2B, 0x2B },
71 { 0x08, 0x08, 0x8, 0x8, 0x08, 0x08, 0x08, 0x08 },
72 { 0x09, 0, 0, 0, 0, 0, 0, 0 },
73 { 0x71, 0x51, 0, 0, 0, 0, 0, 0 },
74 { 0x77, 0x57, 0, 0, 0, 0, 0, 0 },
75 { 0x65, 0x45, 0x05, 0, 0, 0, 0, 0 },
76 { 0x72, 0x52, 0, 0, 0, 0, 0, 0 },
77 { 0x74, 0x54, 0, 0, 0, 0, 0, 0 },
78 { 0x79, 0x59, 0, 0, 0, 0, 0, 0 },
79 { 0x75, 0x55, 0, 0, 0, 0, 0, 0 },
80 { 0x69, 0x49, 0, 0, 0, 0, 0, 0 },
81 { 0x6F, 0x4F, 0, 0, 0, 0, 0, 0 },
82 { 0x70, 0x50, 0, 0, 0, 0, 0, 0 },
83 { 0x5B, 0x7B, 0, 0, 0, 0, 0, 0 },
84 { 0x5D, 0x7D, 0, 0, 0, 0, 0, 0 },
85 { 0x0A, 0, 0, 0, 0, 0, 0, 0 },
86 { 0, 0, 0, 0, 0, 0, 0, 0 },
87 { 0x61, 0x41, 0x01, 0, 0, 0, 0, 0 },
88 { 0x73, 0x53, 0, 0, 0, 0, 0, 0 },
89 { 0x64, 0x44, 0x04, 0, 0, 0, 0, 0 },
90 { 0x66, 0x46, 0x06, 0, 0, 0, 0, 0 },
91 { 0x67, 0x47, 0x07, 0, 0, 0, 0, 0 },
92 { 0x68, 0x48, 0x08, 0, 0, 0, 0, 0 },
93 { 0x6A, 0x4A, 0, 0, 0, 0, 0, 0 },
94 { 0x6B, 0x4B, 0, 0, 0, 0, 0, 0 },
95 { 0x6C, 0x4C, 0, 0, 0, 0, 0, 0 },
96 { 0x3B, 0x3A, 0, 0, 0, 0, 0, 0 },
97 { 0x27, 0x22, 0, 0, 0, 0, 0, 0 },
98 { 0x60, 0x7E, 0, 0, 0, 0, 0, 0 },
99 { 0x2A, 0x0, 0, 0, 0, 0, 0, 0 },
100 { 0x5C, 0x3C, 0, 0, 0, 0, 0, 0 },
101 { 0x7A, 0x5A, 0, 0, 0, 0, 0, 0 },
102 { 0x78, 0x58, 0x18, 0, 0, 0, 0, 0 },
103 { 0x63, 0x43, 0x03, 0x9, 0, 0, 0, 0 },
104 { 0x76, 0x56, 0, 0, 0, 0, 0, 0 },
105 { 0x62, 0x42, 0x02, 0, 0, 0, 0, 0 },
106 { 0x6E, 0x4E, 0, 0, 0, 0, 0, 0 },
107 { 0x6D, 0x4D, 0, 0, 0, 0, 0, 0 },
108 { 0x2C, 0x3C, 0, 0, 0, 0, 0, 0 },
109 { 0x2E, 0x3E, 0, 0, 0, 0, 0, 0 },
110 { 0x2F, 0x3F, 0, 0, 0, 0, 0, 0 },
111 { 0, 0, 0, 0, 0, 0, 0, 0 },
112 { 0, 0, 0, 0, 0, 0, 0, 0 },
113 { 0, 0, 0, 0, 0, 0, 0, 0 },
114 { 0x20, 0, 0, 0, 0, 0, 0, 0 },
115 { 0, 0, 0, 0, 0, 0, 0, 0 },
116 { 0x3000, 0, 0, 0x3000, 0, 0, 0, 0 },
117 { 0x3001, 0, 0, 0x3001, 0, 0, 0, 0 },
118 { 0x3002, 0, 0, 0x3002, 0, 0, 0, 0 },
119 { 0x3003, 0, 0, 0x3003, 0, 0, 0, 0 },
120 { 0x3004, 0, 0, 0x3004, 0, 0, 0, 0 },
121 { 0x4000, 0, 0, 0, 0, 0, 0, 0 },
122 { 0x4100, 0, 0, 0, 0, 0, 0, 0 },
123 { 0x4200, 0, 0, 0, 0, 0, 0, 0 },
124 { 0x4300, 0, 0, 0, 0, 0, 0, 0 },
125 { 0x4400, 0, 0, 0, 0, 0, 0, 0 },
126 { 0, 0, 0, 0, 0, 0, 0, 0 },
127 { 0, 0, 0, 0, 0, 0, 0, 0 },
128 { 0x4700, 0, 0, 0, 0, 0, 0, 0 },
129 { 0x4800, 0, 0, 0, 0, 0, 0, 0 },
130 { 0x4900, 0, 0, 0, 0, 0, 0, 0 },
131 { 0x2D, 0, 0, 0, 0, 0, 0, 0 },
132 { 0x4B00, 0, 0, 0, 0, 0, 0, 0 },
133 { 0x4C00, 0, 0, 0, 0, 0, 0, 0 },
134 { 0x4D00, 0, 0, 0, 0, 0, 0, 0 },
135 { 0x2B, 0, 0, 0, 0, 0, 0, 0 },
136 { 0x4F00, 0, 0, 0, 0, 0, 0, 0 },
137 { 0x5000, 0, 0, 0, 0, 0, 0, 0 },
138 { 0x5100, 0, 0, 0, 0, 0, 0, 0 },
139 { 0x5200, 0, 0, 0, 0, 0, 0, 0 },
140 { 0x5300, 0, 0, 0, 0, 0, 0, 0 },
141 { 0, 0, 0, 0, 0, 0, 0, 0 },
142 { 0, 0, 0, 0, 0, 0, 0, 0 } };
170 kprintf(
"atkbd0 - Address: [0x%X], Keyboard Buffer: [0x%X], Buffer Size [%i]\n", &
atkbd_isr, &stdinBuffer, 512);
181 ".globl atkbd_isr \n"
191 " call keyboardHandler \n"
205 static int atkbd_scan() {
230 if (key == 0x1D && !(controlKeys &
controlKey)) {
233 if (key == 0x80 + 0x1D) {
237 if (key == 0x38 && !(controlKeys &
altKey)) {
240 if (key == 0x80 + 0x38) {
241 controlKeys &= (0xFF -
altKey);
244 if ((key == 0x2A || key == 0x36) && !(controlKeys &
shiftKey)) {
247 if ((key == 0x80 + 0x2A) || (key == 0x80 + 0x36)) {
266 if (controlKeys == 0) {
269 else if (controlKeys == 1) {
272 else if (controlKeys == 2) {
275 else if (controlKeys == 4) {
279 if (((
uInt) (keyboardMap[key][keyMap]) > 0) && ((
uInt32) (keyboardMap[key][keyMap]) < 0xFF)) {
280 switch ((
uInt32) keyboardMap[key][keyMap]) {
284 stdinBuffer[stdinSize] = keyboardMap[key][keyMap];
308 stdinBuffer[stdinSize] = keyboardMap[key][keyMap];
319 switch ((keyboardMap[key][keyMap] >> 8)) {
364 if (stdinSize == 0x0) {
369 retKey = stdinBuffer[0];
372 for (i = 0x0; i < stdinSize; i++) {
373 stdinBuffer[i] = stdinBuffer[i + 0x1];