Files
ferglos/include/keyboard.cpp
2020-06-08 20:09:49 +01:00

168 lines
4.2 KiB
C++

#include "../include/keyboard.h"
#include "../include/stdio.h"
KeyboardDriver::KeyboardDriver(InterruptManager* manager) : InterruptHandler(0x21, manager),
_dataport(0x60),
_commandport(0x64) {
while (_commandport.Read() & 0x01) {
_dataport.Read();
}
_commandport.Write(0xAE);
_commandport.Write(0x20);
uint8_t status = (_dataport.Read() | 1) & ~0x10;
_commandport.Write(0x60);
_dataport.Write(status);
_dataport.Write(0xF4);
}
KeyboardDriver::~KeyboardDriver() {}
uint32_t KeyboardDriver::HandleInterrupt(uint32_t esp) {
uint8_t key = _dataport.Read();
if (key < 0x80) { //ignore key up events
switch (key) {
case 0xFA:
case 0x45:
case 0xC5:
break;
case 0x02:
printf("1");
break;
case 0x03:
printf("2");
break;
case 0x04:
printf("3");
break;
case 0x05:
printf("4");
break;
case 0x06:
printf("5");
break;
case 0x07:
printf("6");
break;
case 0x08:
printf("7");
break;
case 0x09:
printf("8");
break;
case 0x0A:
printf("9");
break;
case 0x0B:
printf("0");
break;
case 0x10:
printf("q");
break;
case 0x11:
printf("w");
break;
case 0x12:
printf("e");
break;
case 0x13:
printf("r");
break;
case 0x14:
printf("t");
break;
case 0x15:
printf("y");
break;
case 0x16:
printf("u");
break;
case 0x17:
printf("i");
break;
case 0x18:
printf("o");
break;
case 0x19:
printf("p");
break;
case 0x1E:
printf("a");
break;
case 0x1F:
printf("s");
break;
case 0x20:
printf("d");
break;
case 0x21:
printf("f");
break;
case 0x22:
printf("g");
break;
case 0x23:
printf("h");
break;
case 0x24:
printf("j");
break;
case 0x25:
printf("k");
break;
case 0x26:
printf("l");
break;
case 0x2C:
printf("z");
break;
case 0x2D:
printf("x");
break;
case 0x2E:
printf("c");
break;
case 0x2F:
printf("v");
break;
case 0x30:
printf("b");
break;
case 0x31:
printf("n");
break;
case 0x32:
printf("m");
break;
case 0x33:
printf(",");
break;
case 0x34:
printf(".");
break;
case 0x35:
printf("-");
break;
case 0x1C:
printf("\n");
break;
case 0x39:
printf(" ");
break;
default:
char* foo = "KEYBOARD 0x00";
char* hex = "0123456789ABCDEF";
foo[11] = hex[(key >> 4) & 0x0F];
foo[12] = hex[key & 0x0F];
printf(foo);
printf("\n");
break;
}
}
return esp;
}