Tastatur Treiber in C++
-
Hallo,
ich wollte nur kurz fragen wie man einen Zeiger auf den Port 60h oder 64h setzten kann um dann das Keyboard "auszulesen".LG MeldeMichGleichAn
-
In PrettyOS machen wir das aktuell so:
static void keyboard_handler(registers_t* r) { while (inportb(0x64)&1) { // Get scancode uint8_t scancode = getScancode(); bool make = false; // Find out key. Issue events. KEY_t key = scancodeToKey(scancode, &make);
static uint8_t getScancode(void) { volatile uint8_t scancode = 0; if (inportb(0x64)&1) scancode = inportb(0x60); // 0x60: get scan code from the keyboard // ACK: toggle bit 7 at port 0x61 uint8_t port_value = inportb(0x61); outportb(0x61, port_value | 0x80); // 0->1 outportb(0x61, port_value &~ 0x80); // 1->0 return (scancode); }
static inline uint8_t inportb(uint16_t port) { uint8_t ret_val; __asm__ volatile ("inb %1, %0" : "=a"(ret_val) : "d"(port)); return ret_val; } static inline void outportb(uint16_t port, uint8_t val) { __asm__ volatile ("outb %0, %1" :: "a"(val), "d"(port)); }
Siehe auch:
http://www.lowlevel.eu/wiki/Keyboard_Controller
http://www.brokenthorn.com/Resources/OSDev19.html
http://wiki.osdev.org/PS/2_Keyboard
-
Warum static?
-
Weil es aus einem Header herauskopiert wurde.
-
Und was bewirkt das in diesem Fall?
-
Fx schrieb:
Und was bewirkt das in diesem Fall?
Du meinst was static im Header bewirkt?
Siehe hier:
http://stackoverflow.com/questions/3956694/when-to-put-static-function-definitions-in-header-files-in-c