diff --git a/src/keyboard.c b/src/keyboard.c new file mode 100644 index 0000000000000000000000000000000000000000..09120daa9aee5213bb21717538546479313ceb89 --- /dev/null +++ b/src/keyboard.c @@ -0,0 +1,50 @@ +#include "keyboard.h" + +void init_keymapping() +{ + int i; + for (int i = 0; i < NB_KEYS; i++) + KEY_MAPPING[i] = (key_t){0, 0}; + + shift_pressed = FALSE; + + KEY_MAPPING[0x1E] = (key_t){'a', 'A'}; + KEY_MAPPING[0x30] = (key_t){'b', 'B'}; + KEY_MAPPING[0x2E] = (key_t){'c', 'C'}; + KEY_MAPPING[0x20] = (key_t){'d', 'D'}; + KEY_MAPPING[0x12] = (key_t){'e', 'E'}; + KEY_MAPPING[0x21] = (key_t){'f', 'F'}; + KEY_MAPPING[0x22] = (key_t){'g', 'G'}; + KEY_MAPPING[0x23] = (key_t){'h', 'H'}; + KEY_MAPPING[0x17] = (key_t){'i', 'I'}; + KEY_MAPPING[0x24] = (key_t){'j', 'J'}; + KEY_MAPPING[0x25] = (key_t){'k', 'K'}; + KEY_MAPPING[0x26] = (key_t){'l', 'L'}; + KEY_MAPPING[0x32] = (key_t){'m', 'M'}; + KEY_MAPPING[0x31] = (key_t){'n', 'N'}; + KEY_MAPPING[0x18] = (key_t){'o', 'O'}; + KEY_MAPPING[0x19] = (key_t){'p', 'P'}; + KEY_MAPPING[0x10] = (key_t){'q', 'Q'}; + KEY_MAPPING[0x13] = (key_t){'r', 'R'}; + KEY_MAPPING[0x1F] = (key_t){'s', 'S'}; + KEY_MAPPING[0x14] = (key_t){'t', 'T'}; + KEY_MAPPING[0x16] = (key_t){'u', 'U'}; + KEY_MAPPING[0x2F] = (key_t){'v', 'V'}; + KEY_MAPPING[0x11] = (key_t){'w', 'W'}; + KEY_MAPPING[0x2D] = (key_t){'x', 'X'}; + KEY_MAPPING[0x15] = (key_t){'y', 'Y'}; + KEY_MAPPING[0x2C] = (key_t){'z', 'Z'}; + KEY_MAPPING[0x39] = (key_t){' ', ' '}; +} + +char keyboard_map(unsigned char code) +{ + if (code == SHIFT_UP) + shift_pressed = TRUE; + else if (code == SHIFT_DOWN) + shift_pressed = FALSE; + + if (shift_pressed) + return KEY_MAPPING[code].top; + return KEY_MAPPING[code].bottom; +} \ No newline at end of file diff --git a/src/main.c b/src/main.c index 32adbe229c45f792b3ea51937df201dbf8b0243c..bbe2e7e106fffe7802750d6e2b5ab7b129255984 100644 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,7 @@ #include "ioport.h" #include "gdt.h" #include "idt.h" +#include "keyboard.h" void clear_screen(); /* clear screen */ void putc(char aChar); /* print a single char on screen */ @@ -36,9 +37,21 @@ void main(unsigned int *mboot_info) puts("Hello world\n\n"); - for (;;) + init_keymapping(); + while (1) { - putc(_inb(0x60)); + // puthex(_inb(0x64)); + + if (_inb(0x64) == (0x1D)) + { + _outb(0x64, 0x1C); + char c = keyboard_map(_inb(0x60)); + if (c) + putc(c); + // puthex(_inb(0x60)); + } + + // puthex(_inb(0x60)); } for (;;)