-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathio.c
43 lines (34 loc) · 829 Bytes
/
io.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include "io.h"
#include "isr.h"
#include "monitor.h"
#include "scancodes.h"
#include "system.h"
#include "types.h"
#define KB_DATA_PORT 0x60
static void kb_isr(registers_t);
static uint8_t kb_read_scancode(void);
static char kb_translate_scancode(uint8_t);
void kb_init(void)
{
monitor_write("Initialising keyboard... ");
interrupt_register(IRQ1, &kb_isr);
monitor_color_set(MONCOLOR_GREEN, MONCOLOR_BLACK);
monitor_writeline("OK");
monitor_color_reset();
}
static void kb_isr(registers_t registers)
{
UNUSED_VAR(registers);
uint8_t sc = kb_read_scancode();
char c = kb_translate_scancode(sc);
monitor_put(c);
}
static uint8_t kb_read_scancode(void)
{
return inb(KB_DATA_PORT);
}
static char kb_translate_scancode(uint8_t sc)
{
// TODO: translate to Unicode (UTF-7) character
return scancodes_down[sc];
}