mirror of
https://github.com/fergalmoran/ferglos.git
synced 2026-01-18 14:46:46 +00:00
168 lines
4.2 KiB
C++
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;
|
|
} |