From 6b7cbc2842354eabb7c3345390c5891a6f881f0c Mon Sep 17 00:00:00 2001 From: dzwdz Date: Wed, 30 Mar 2022 14:14:11 +0200 Subject: kernel: remove the keyboard driver, add a `/ps2` device --- src/kernel/arch/i386/tty/keyboard.c | 30 ------------------------------ src/kernel/arch/i386/tty/keyboard.h | 6 ------ src/kernel/arch/i386/tty/ps2_keymap.h | 23 ----------------------- src/kernel/arch/i386/tty/tty.c | 5 ++--- 4 files changed, 2 insertions(+), 62 deletions(-) delete mode 100644 src/kernel/arch/i386/tty/keyboard.c delete mode 100644 src/kernel/arch/i386/tty/keyboard.h delete mode 100644 src/kernel/arch/i386/tty/ps2_keymap.h (limited to 'src/kernel/arch/i386/tty') diff --git a/src/kernel/arch/i386/tty/keyboard.c b/src/kernel/arch/i386/tty/keyboard.c deleted file mode 100644 index a321aab..0000000 --- a/src/kernel/arch/i386/tty/keyboard.c +++ /dev/null @@ -1,30 +0,0 @@ -#include -#include - -static volatile bool keyboard_pressed = false; -static volatile char keyboard_char; - -static bool keys[0x80] = {0}; - -void keyboard_recv(uint8_t s) { - bool shift = keys[0x2A] || keys[0x36]; - bool down = !(s & 0x80); - s &= 0x7f; - keys[s] = down; - - char c = shift ? keymap_upper[s] : keymap_lower[s]; - - if (down && c) { - keyboard_char = c; - keyboard_pressed = true; - } -} - -bool keyboard_poll_read(char *c) { - if (!keyboard_pressed) return false; - keyboard_pressed = false; - *c = keyboard_char; - return true; -} - - diff --git a/src/kernel/arch/i386/tty/keyboard.h b/src/kernel/arch/i386/tty/keyboard.h deleted file mode 100644 index c3a8232..0000000 --- a/src/kernel/arch/i386/tty/keyboard.h +++ /dev/null @@ -1,6 +0,0 @@ -#pragma once -#include -#include - -bool keyboard_poll_read(char *c); -void keyboard_recv(uint8_t scancode); diff --git a/src/kernel/arch/i386/tty/ps2_keymap.h b/src/kernel/arch/i386/tty/ps2_keymap.h deleted file mode 100644 index 891b9d7..0000000 --- a/src/kernel/arch/i386/tty/ps2_keymap.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -static const char keymap_lower[] = { - '\0', '\0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', '\b', '\t', - 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\r', '\0', 'a', 's', - 'd', 'f', 'g', 'h', 'j', 'k', 'l', '\0', '\'', '`', '\0', '\\', 'z', 'x', 'c', 'v', - 'b', 'n', 'm', ',', '.', '/', '\0', '*', '\0', ' ', '\0', '\0', '\0', '\0', '\0', '\0', - '\0', '\0', '\0', '\0', '\0', '\0', '\0', '7', '8', '9', '-', '4', '5', '6', '+', '1', - '2', '3', '0', '.', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', - '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', - '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', -}; - -static const char keymap_upper[] = { - '\0', '\0', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '\b', '\t', - 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '{', '}', '\r', '\0', 'A', 'S', - 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', '"', '~', '\0', '|', 'Z', 'X', 'C', 'V', - 'B', 'N', 'M', '<', '>', '?', '\0', '*', '\0', ' ', '\0', '\0', '\0', '\0', '\0', '\0', - '\0', '\0', '\0', '\0', '\0', '\0', '\0', '7', '8', '9', '-', '4', '5', '6', '+', '1', - '2', '3', '0', '.', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', - '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', - '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', -}; diff --git a/src/kernel/arch/i386/tty/tty.c b/src/kernel/arch/i386/tty/tty.c index a63c16a..ebe0fd3 100644 --- a/src/kernel/arch/i386/tty/tty.c +++ b/src/kernel/arch/i386/tty/tty.c @@ -1,5 +1,4 @@ #include -#include #include #include #include @@ -17,11 +16,11 @@ void tty_read(char *buf, size_t len) { irq_interrupt_flag(true); for (size_t i = 0; i < len; i++) { for (;;) { - if (serial_poll_read(&buf[i])) break; - if (keyboard_poll_read(&buf[i])) break; + if (serial_poll_read(&buf[i])) break; asm("hlt" ::: "memory"); } } + irq_interrupt_flag(false); } void tty_write(const char *buf, size_t len) { -- cgit v1.2.3