]>
Commit | Line | Data |
---|---|---|
6093edb5 JW |
1 | #include <io.h> |
2 | #include "keyhelp.h" | |
3 | #include "../net/net.h" | |
4 | #include <output.h> | |
5 | ||
6 | /* Takes over the i8042... oh well. If we ever fully emulate the i8042, | |
7 | * then we'll patch into that. | |
8 | */ | |
9 | ||
10 | #define KEYBOARD_PORT 0x60 | |
11 | #define KEYB_STATUS_PORT 0x64 | |
12 | #define KEYB_OBF 0x1 | |
13 | ||
14 | int getchar() | |
15 | { | |
16 | kh_type key; | |
17 | unsigned char scancode; | |
18 | ||
19 | /* Ignore accesses -- XXX hack */ | |
20 | outl(0x840, 0x0); | |
21 | outl(0x848, 0x0); | |
22 | ||
23 | do | |
24 | { | |
25 | while (!(inb(KEYB_STATUS_PORT) & KEYB_OBF)) | |
26 | eth_poll(); | |
27 | ||
28 | scancode = inb(KEYBOARD_PORT); | |
29 | outputf("scancode: %02x", scancode); | |
30 | key = process_scancode(scancode); | |
31 | } while (!KH_HASDATA(key) || !KH_ISMAKE(key)); | |
32 | ||
33 | /* XXX */ | |
34 | outl(0x840, 0x0); | |
35 | outl(0x844, 0x1000); | |
36 | outl(0x848, 0x1000); | |
37 | ||
38 | return KH_GETCHAR(key); | |
39 | } |