Skip to content
Snippets Groups Projects
Commit ac7086fa authored by Thierno souleymane Bah's avatar Thierno souleymane Bah
Browse files

feat(keyboard mapping implementation done, only alphabetics letters and space for now)

parent dd4a882b
No related branches found
No related tags found
No related merge requests found
#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
#include "ioport.h" #include "ioport.h"
#include "gdt.h" #include "gdt.h"
#include "idt.h" #include "idt.h"
#include "keyboard.h"
void clear_screen(); /* clear screen */ void clear_screen(); /* clear screen */
void putc(char aChar); /* print a single char on screen */ void putc(char aChar); /* print a single char on screen */
...@@ -36,9 +37,21 @@ void main(unsigned int *mboot_info) ...@@ -36,9 +37,21 @@ void main(unsigned int *mboot_info)
puts("Hello world\n\n"); puts("Hello world\n\n");
for (;;) init_keymapping();
while (1)
{
// puthex(_inb(0x64));
if (_inb(0x64) == (0x1D))
{ {
putc(_inb(0x60)); _outb(0x64, 0x1C);
char c = keyboard_map(_inb(0x60));
if (c)
putc(c);
// puthex(_inb(0x60));
}
// puthex(_inb(0x60));
} }
for (;;) for (;;)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment