MushOS  0.1
A UNIX-like OS prototype, written from scratch
Loading...
Searching...
No Matches
keyboard.c
1#include "keyboard.h"
2
3#include "../kernel/interruption_tables.h"
4#include "../kernel/interruptions.h"
5
6#include "ports_io.h"
7
8
9static u_byte RECOGNIZED_CODES [] = {0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
10 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
11 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1e, 0x1f,
12 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29,
13 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34,
14 0x35, 0x39};
15static u_byte RECOGNIZED_CHARS [] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-',
16 '+', '\b', '\t', 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I',
17 'O', 'P', '[', ']', '\n', 'A', 'S', 'D', 'F', 'G', 'H',
18 'J', 'K', 'L', ';', '\'', '`', '\\', 'Z', 'X', 'C', 'V',
19 'B', 'N', 'M', ',', '.', '/', ' '};
20
21static void print_letter(u_byte scancode) {
22 for (int i = 0; i < 51; ++i) {
23 //if (scancode == RECOGNIZED_CODES[i]) print_char(RECOGNIZED_CHARS[i]);
24 }
25 if (scancode <= 0x7f); // Unknown key up.
26 else; // Unknown key down.
27}
28
29static void keyboard_callback(registers* regs) {
30 /* The PIC leaves us the scancode in port 0x60 */
31 u_byte scancode = port_byte_in(0x60);
32 //print("Keyboard input: ");
33 print_letter(scancode);
34 //print_char('\n');
35}
36
37void init_keyboard() {
38 set_interrupt_handler(IRQ1, keyboard_callback);
39}