diff options
| author | Franklin Wei <frankhwei536@gmail.com> | 2015-02-20 21:59:07 -0500 |
|---|---|---|
| committer | Franklin Wei <frankhwei536@gmail.com> | 2015-02-20 21:59:07 -0500 |
| commit | d4a70e316e0991d788fb922e3e4eafae97fe950e (patch) | |
| tree | 850f39e49c5bbd389a0b401e3837528b216b4afd /drivers/ps2kbd.c | |
| parent | 0c128aab93656974bbf77132a487cff002c51d35 (diff) | |
| download | kappa-d4a70e316e0991d788fb922e3e4eafae97fe950e.zip kappa-d4a70e316e0991d788fb922e3e4eafae97fe950e.tar.gz kappa-d4a70e316e0991d788fb922e3e4eafae97fe950e.tar.bz2 kappa-d4a70e316e0991d788fb922e3e4eafae97fe950e.tar.xz | |
keyboard driver WIP
Diffstat (limited to 'drivers/ps2kbd.c')
| -rw-r--r-- | drivers/ps2kbd.c | 62 |
1 files changed, 10 insertions, 52 deletions
diff --git a/drivers/ps2kbd.c b/drivers/ps2kbd.c index 30fe762..73b75d1 100644 --- a/drivers/ps2kbd.c +++ b/drivers/ps2kbd.c @@ -61,59 +61,17 @@ static void key_handler(struct regs_t *regs) { (void) regs; uint8_t scancode = inb(0x60); - switch(scancode) + if(scancode == 0xE0) + /* extended, forget it! */ + return; + /* AND by 0x7F to get in the range of [0,128) */ + int type = ps2_scancodes_set1[scancode & 0x7F]; + int release = (scancode & 0x80) >> 7; + switch(type) { - case 0x2A: - ps2_shift = 1; - break; - case 0xAA: - ps2_shift = 0; - break; - case 0x1D: - ps2_ctrl = 1; - break; - case 0x9D: - ps2_ctrl = 0; - break; - case 0x38: - ps2_alt = 1; - break; - case 0xB8: - ps2_alt = 0; - break; - case 0xE0: - { - uint8_t spec = inb(0x60); - switch(spec) - { - case 0x48: - ps2_arrowkeys[IDX_UP] = 1; - break; - case 0x4B: - ps2_arrowkeys[IDX_LEFT] = 1; - break; - case 0x50: - ps2_arrowkeys[IDX_DOWN] = 1; - break; - case 0x4D: - ps2_arrowkeys[IDX_RIGHT] = 1; - break; - case 0xC8: - ps2_arrowkeys[IDX_UP] = 0; - break; - case 0xCB: - ps2_arrowkeys[IDX_LEFT] = 0; - break; - case 0xD0: - ps2_arrowkeys[IDX_DOWN] = 0; - break; - case 0xCD: - ps2_arrowkeys[IDX_RIGHT] = 0; - break; - } - break; - } - default: + case PRINTING_KEY: + if(!release) + putchar(ps2_set1_ascii[scancode]); break; } } |