#include "ps2_ctrl.h" #include #include #include const uint8_t comm_port = 0x64; // r status register // w command register const uint8_t comm_enable_first_ps2 = 0xae; const uint8_t comm_read_ctrl_config = 0x20; const uint8_t comm_write_ctrl_config = 0x60; const uint8_t data_port = 0x60; // rw const uint8_t data_enable_scanning = 0xf4; void ps2_ctrl_init() { // eat all previous keystrikes while (inb(comm_port) & 0x1) inb(data_port); outb(0x64, 0xaa); printf("8042: self test 0xaa: %x\n", inb(0x60)); outb(0x64, 0xab); printf("8042: port1 test 0xab: %x\n", inb(0x60)); outb(0x64, 0xa9); printf("8042: port2 test 0xa9: %x\n", inb(0x60)); // printf("8042: init keyboard\n"); outb(comm_port, comm_enable_first_ps2); outb(comm_port, comm_read_ctrl_config); const uint8_t conf = (inb(data_port) | 1) & ~0x10; outb(comm_port, comm_write_ctrl_config); outb(data_port, conf); outb(data_port, data_enable_scanning); } unsigned char ps2_ctrl_read() { return inb(0x60); }