aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmulatedSeasons <89668582+EmulatedSeasons@users.noreply.github.com>2023-12-17 17:18:02 -0500
committerEmulatedSeasons <89668582+EmulatedSeasons@users.noreply.github.com>2023-12-17 17:18:02 -0500
commitd286be47997ecfc4038ded9442770d603ce53b30 (patch)
tree697a58914befc58adbe7a7f27dfed049c9a6c5d2
parenta78033acc941fc4bcf6188f1d48fd8e012673fff (diff)
forgot what i did this commit it's been so long
-rw-r--r--.gitignore5
-rw-r--r--grub.cfg6
-rw-r--r--kernel/arch/i386/isr_handler.cpp6
-rw-r--r--kernel/dev/ps2kbd.cpp15
-rw-r--r--kernel/include/dev/ps2kbd.h3
5 files changed, 31 insertions, 4 deletions
diff --git a/.gitignore b/.gitignore
index 44a413f..2c19c1b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,4 +11,7 @@ sysroot/
bx_enh_dbg.ini
# temporarily ignored cause i have no idea how to set up cmake with this and dont really have much else to use it for yet
-misc/ \ No newline at end of file
+misc/
+
+# not important
+make.png
diff --git a/grub.cfg b/grub.cfg
index 036cfbd..71b0917 100644
--- a/grub.cfg
+++ b/grub.cfg
@@ -1,3 +1,9 @@
+set timeout_style=menu
+if [ "${timeout}" = 0 ]; then
+ #set timeout=10 # comment this original
+ set timeout=0 # add this
+fi
+
menuentry "emuos" {
multiboot /boot/kernel.bin
} \ No newline at end of file
diff --git a/kernel/arch/i386/isr_handler.cpp b/kernel/arch/i386/isr_handler.cpp
index a2fc23a..ba825dd 100644
--- a/kernel/arch/i386/isr_handler.cpp
+++ b/kernel/arch/i386/isr_handler.cpp
@@ -3,6 +3,7 @@
#include <stddef.h>
#include <arch/i386/tmtty.h>
#include <arch/i386/ps2_controller.h>
+#include <dev/ps2kbd.h>
#include <arch/i386/pic.h>
#include <io.h>
@@ -12,10 +13,9 @@ extern "C" void exception_handler(int e) {
printf("Exception\n");
}
+#define PS2_DATA 0x60
extern "C" void ps2_handler() {
- printf("b");
- inb(0x60);
- printf("a");
+ keyboard_write(inb(PS2_DATA));
pic_send_eoi(1);
} \ No newline at end of file
diff --git a/kernel/dev/ps2kbd.cpp b/kernel/dev/ps2kbd.cpp
index a98ae51..ee282b6 100644
--- a/kernel/dev/ps2kbd.cpp
+++ b/kernel/dev/ps2kbd.cpp
@@ -3,8 +3,23 @@
#include <arch/i386/pic.h>
#include <io.h>
+// Keycodes are sorted from left to right, up to down starting with esc
+// 0x80 is reserved for nonexistant scancodes
+// used for scan code set 2
+constexpr uint8_t scancodes[] = {
+ 9, 0x80, 5, 3, 1, 2, 12, 0x80,
+ 10, 8, 6, 4, 27,
+};
+
void keyboard_init() {
irq_clear_mask(1);
outb(0x60, 0xF4);
inb(0x60);
+}
+
+void keyboard_write(uint8_t scancode) {
+ printf("a\n");
+ /*for (int i = 0; i < 7; i++) {
+ inputbuffer |= inb(PS2_DATA) << (i * 8); // lsb is the first scan code
+ }*/
} \ No newline at end of file
diff --git a/kernel/include/dev/ps2kbd.h b/kernel/include/dev/ps2kbd.h
index 2d1ecc2..0845351 100644
--- a/kernel/include/dev/ps2kbd.h
+++ b/kernel/include/dev/ps2kbd.h
@@ -1,6 +1,9 @@
#ifndef PS2_KBD_H
#define PS2_KBD_H
+#include <stdint.h>
+
void keyboard_init();
+void keyboard_write(uint8_t);
#endif \ No newline at end of file