diff --git a/src/kernel/dri/keyboard.c b/src/kernel/dri/keyboard.c index dd56724..04931e4 100644 --- a/src/kernel/dri/keyboard.c +++ b/src/kernel/dri/keyboard.c @@ -1,6 +1,6 @@ /*----------------*\ |Nanite OS | -|Copyright (C) 2024| +|Copyright (C) 2025| |Tyler McGurrin | \*----------------*/ #include "keyboard.h" @@ -9,365 +9,345 @@ #include #include -#define PS2_KEYBOARD_PORT 0x60 - -char* Keyboard_Scanner() -{ - int scancode; - char* key = ""; - scancode = i686_inb(PS2_KEYBOARD_PORT); - // Debug Message, unneeded - // printf("Keycode = %d Port = %d\n", keycode, PS2_KEYBOARD_PORT); - -switch (scancode) { - - case KEYSCAN_1: - key = "1"; - break; - - case KEYSCAN_2: - key = "2"; - break; - - case KEYSCAN_3: - key = "3"; - break; - - case KEYSCAN_4: - key = "4"; - break; - - case KEYSCAN_5: - key = "5"; - break; - - case KEYSCAN_6: - key = "6"; - break; - - case KEYSCAN_7: - key = "7"; - break; - - case KEYSCAN_8: - key = "8"; - break; - - case KEYSCAN_9: - key = "9"; - break; - - case KEYSCAN_0: - key = "0"; - break; - - case KEYSCAN_Minus: - key = "-"; - break; - - case KEYSCAN_Equals: - key = "="; - break; - - case KEYSCAN_Q: - key = "q"; - break; - - case KEYSCAN_W: - key = "w"; - break; - - case KEYSCAN_E: - key = "e"; - break; - - case KEYSCAN_R: - key = "r"; - break; - - case KEYSCAN_T: - key = "t"; - break; - - case KEYSCAN_Y: - key = "y"; - break; - - case KEYSCAN_U: - key = "u"; - break; - - case KEYSCAN_I: - key = "i"; - break; - - case KEYSCAN_O: - key = "o"; - break; - - case KEYSCAN_P: - key = "p"; - break; - - case KEYSCAN_LeftBracket: - key = "["; - break; - - case KEYSCAN_RightBracket: - key = "]"; - break; +void Print_Key(int scancode) { + char* key; + switch (scancode) { + + case KEYSCAN_1: + key = "1"; + break; + + case KEYSCAN_2: + key = "2"; + break; + + case KEYSCAN_3: + key = "3"; + break; + + case KEYSCAN_4: + key = "4"; + break; + + case KEYSCAN_5: + key = "5"; + break; + + case KEYSCAN_6: + key = "6"; + break; + + case KEYSCAN_7: + key = "7"; + break; + + case KEYSCAN_8: + key = "8"; + break; + + case KEYSCAN_9: + key = "9"; + break; + + case KEYSCAN_0: + key = "0"; + break; + + case KEYSCAN_Minus: + key = "-"; + break; + + case KEYSCAN_Equals: + key = "="; + break; + + case KEYSCAN_Q: + key = "q"; + break; + + case KEYSCAN_W: + key = "w"; + break; + + case KEYSCAN_E: + key = "e"; + break; + + case KEYSCAN_R: + key = "r"; + break; + + case KEYSCAN_T: + key = "t"; + break; + + case KEYSCAN_Y: + key = "y"; + break; + + case KEYSCAN_U: + key = "u"; + break; + + case KEYSCAN_I: + key = "i"; + break; + + case KEYSCAN_O: + key = "o"; + break; + + case KEYSCAN_P: + key = "p"; + break; + + case KEYSCAN_LeftBracket: + key = "["; + break; + + case KEYSCAN_RightBracket: + key = "]"; + break; + + case KEYSCAN_A: + key = "a"; + break; - case KEYSCAN_A: - key = "a"; - break; + case KEYSCAN_S: + key = "s"; + break; - case KEYSCAN_S: - key = "s"; - break; + case KEYSCAN_D: + key = "d"; + break; - case KEYSCAN_D: - key = "d"; - break; + case KEYSCAN_F: + key = "f"; + break; - case KEYSCAN_F: - key = "f"; - break; + case KEYSCAN_G: + key = "g"; + break; - case KEYSCAN_G: - key = "g"; - break; + case KEYSCAN_H: + key = "h"; + break; - case KEYSCAN_H: - key = "h"; - break; + case KEYSCAN_J: + key = "j"; + break; - case KEYSCAN_J: - key = "j"; - break; + case KEYSCAN_K: + key = "k"; + break; - case KEYSCAN_K: - key = "k"; - break; + case KEYSCAN_L: + key = "l"; + break; - case KEYSCAN_L: - key = "l"; - break; + case KEYSCAN_Semicolon: + key = ";"; + break; - case KEYSCAN_Semicolon: - key = ";"; - break; + case KEYSCAN_Apostrophe: + key = "'"; + break; - case KEYSCAN_Apostrophe: - key = "'"; - break; + case KEYSCAN_Grave: + key = "`"; + break; - case KEYSCAN_Grave: - key = "`"; - break; + case KEYSCAN_Backslash: + key = "\\"; + break; - case KEYSCAN_Backslash: - key = "\\"; - break; + case KEYSCAN_Z: + key = "z"; + break; - case KEYSCAN_Z: - key = "z"; - break; + case KEYSCAN_X: + key = "x"; + break; - case KEYSCAN_X: - key = "x"; - break; + case KEYSCAN_C: + key = "c"; + break; - case KEYSCAN_C: - key = "c"; - break; + case KEYSCAN_V: + key = "v"; + break; - case KEYSCAN_V: - key = "v"; - break; + case KEYSCAN_B: + key = "b"; + break; - case KEYSCAN_B: - key = "b"; - break; + case KEYSCAN_N: + key = "n"; + break; - case KEYSCAN_N: - key = "n"; - break; + case KEYSCAN_M: + key = "m"; + break; - case KEYSCAN_M: - key = "m"; - break; + case KEYSCAN_Comma: + key = ","; + break; - case KEYSCAN_Comma: - key = ","; - break; + case KEYSCAN_Period: + key = "."; + break; - case KEYSCAN_Period: - key = "."; - break; + case KEYSCAN_Forwardslash: + key = "/"; + break; - case KEYSCAN_Forwardslash: - key = "/"; - break; + case KEYSCAN_Space: + key = " "; + break; - case KEYSCAN_Space: - key = " "; - break; + case KEYSCAN_Enter: + key = "\n"; + break; - case KEYSCAN_Enter: - key = "\n"; - break; + case KEYSCAN_BackSpace: + key = "\b \b"; + break; - case KEYSCAN_BackSpace: - key = "\b \b"; - break; + case KEYSCAN_Tab: + key = "\t"; + break; - case KEYSCAN_Tab: - key = "\t"; - break; + case KEYSCAN_CTRL: + key = ""; + break; - case KEYSCAN_CTRL: - key = ""; - break; + case KEYSCAN_LShift: + key = ""; + break; - case KEYSCAN_LShift: - key = ""; - break; + case KEYSCAN_RShift: + key = ""; + break; - case KEYSCAN_RShift: - key = ""; - break; + case KEYSCAN_PrtSc: + key = ""; + break; - case KEYSCAN_PrtSc: - key = ""; - break; + case KEYSCAN_Alt: + key = ""; + break; - case KEYSCAN_Alt: - key = ""; - break; + case KEYSCAN_Caps: + key = ""; + break; - case KEYSCAN_Caps: - key = ""; - break; + case KEYSCAN_F1: + key = ""; + break; - case KEYSCAN_F1: - key = ""; - break; + case KEYSCAN_F2: + key = ""; + break; - case KEYSCAN_F2: - key = ""; - break; + case KEYSCAN_F3: + key = ""; + break; - case KEYSCAN_F3: - key = ""; - break; + case KEYSCAN_F4: + key = ""; + break; - case KEYSCAN_F4: - key = ""; - break; - - case KEYSCAN_F5: - key = ""; - break; - - case KEYSCAN_F6: - key = ""; - break; - - case KEYSCAN_F7: - key = ""; - break; - - case KEYSCAN_F8: - key = ""; - break; - - case KEYSCAN_F9: - key = ""; - break; - - case KEYSCAN_F10: - key = ""; - break; - - case KEYSCAN_Num: - key = ""; - break; - - case KEYSCAN_Scroll: - key = ""; - break; - - case KEYSCAN_Home: - key = ""; - break; - - case KEYSCAN_Up: - key = ""; - break; - - case KEYSCAN_PgUp: - key = ""; - break; - - case KEYSCAN_Minus2: - key = ""; - break; - - case KEYSCAN_Left: - key = ""; - break; - - case KEYSCAN_Center: - key = ""; - break; - - case KEYSCAN_Right: - key = ""; - break; - - case KEYSCAN_Plus: - key = ""; - break; - - case KEYSCAN_End: - key = ""; - break; - - case KEYSCAN_Down: - key = ""; - break; - - case KEYSCAN_PgDn: - key = ""; - break; - - case KEYSCAN_Ins: - key = ""; - break; - - case KEYSCAN_Delete: - key = ""; - break; - - case KEYSCAN_ESC: - key = ""; - break; - - default: - break; - -} - return key; -} - -void Keyboard_Handler() -{ - char* key = Keyboard_Scanner(); - printf("%s", key); - return; -} - -void Keyboard_Init() -{ - i686_IRQ_RegisterHandler(1, Keyboard_Handler); + case KEYSCAN_F5: + key = ""; + break; + + case KEYSCAN_F6: + key = ""; + break; + + case KEYSCAN_F7: + key = ""; + break; + + case KEYSCAN_F8: + key = ""; + break; + + case KEYSCAN_F9: + key = ""; + break; + + case KEYSCAN_F10: + key = ""; + break; + + case KEYSCAN_Num: + key = ""; + break; + + case KEYSCAN_Scroll: + key = ""; + break; + + case KEYSCAN_Home: + key = ""; + break; + + case KEYSCAN_Up: + key = ""; + break; + + case KEYSCAN_PgUp: + key = ""; + break; + + case KEYSCAN_Minus2: + key = ""; + break; + + case KEYSCAN_Left: + key = ""; + break; + + case KEYSCAN_Center: + key = ""; + break; + + case KEYSCAN_Right: + key = ""; + break; + + case KEYSCAN_Plus: + key = ""; + break; + + case KEYSCAN_End: + key = ""; + break; + + case KEYSCAN_Down: + key = ""; + break; + + case KEYSCAN_PgDn: + key = ""; + break; + + case KEYSCAN_Ins: + key = ""; + break; + + case KEYSCAN_Delete: + key = ""; + break; + + case KEYSCAN_ESC: + key = ""; + break; + + default: + break; + + } + printf("%s", key); } \ No newline at end of file diff --git a/src/kernel/dri/keyboard.h b/src/kernel/dri/keyboard.h index 5af59d2..0a8849d 100644 --- a/src/kernel/dri/keyboard.h +++ b/src/kernel/dri/keyboard.h @@ -1,13 +1,13 @@ /*----------------*\ |Nanite OS | -|Copyright (C) 2024| +|Copyright (C) 2025| |Tyler McGurrin | \*----------------*/ #pragma once -void Keyboard_Init(); +void Print_Key(int scancode); -typedef enum { +typedef enum { // ill do it LATER! KEYSCAN_ESC = 1 , KEYSCAN_1 = 2 , KEYSCAN_2 = 3 , @@ -17,78 +17,78 @@ typedef enum { KEYSCAN_6 = 7 , KEYSCAN_7 = 8 , KEYSCAN_8 = 9 , - KEYSCAN_9 = 10, - KEYSCAN_0 = 11, - KEYSCAN_Minus = 12, - KEYSCAN_Equals = 13, - KEYSCAN_BackSpace = 14, - KEYSCAN_Tab = 15, - KEYSCAN_Q = 16, - KEYSCAN_W = 17, - KEYSCAN_E = 18, - KEYSCAN_R = 19, - KEYSCAN_T = 20, - KEYSCAN_Y = 21, - KEYSCAN_U = 22, - KEYSCAN_I = 23, - KEYSCAN_O = 24, - KEYSCAN_P = 25, - KEYSCAN_LeftBracket = 26, - KEYSCAN_RightBracket = 27, - KEYSCAN_Enter = 28, - KEYSCAN_CTRL = 29, - KEYSCAN_A = 30, - KEYSCAN_S = 31, - KEYSCAN_D = 32, - KEYSCAN_F = 33, - KEYSCAN_G = 34, - KEYSCAN_H = 35, - KEYSCAN_J = 36, - KEYSCAN_K = 37, - KEYSCAN_L = 38, - KEYSCAN_Semicolon = 39, - KEYSCAN_Apostrophe = 40, - KEYSCAN_Grave = 41, - KEYSCAN_LShift = 42, - KEYSCAN_Backslash = 43, - KEYSCAN_Z = 44, - KEYSCAN_X = 45, - KEYSCAN_C = 46, - KEYSCAN_V = 47, - KEYSCAN_B = 48, - KEYSCAN_N = 49, - KEYSCAN_M = 50, - KEYSCAN_Comma = 51, - KEYSCAN_Period = 52, - KEYSCAN_Forwardslash = 53, - KEYSCAN_RShift = 54, - KEYSCAN_PrtSc = 55, - KEYSCAN_Alt = 56, - KEYSCAN_Space = 57, - KEYSCAN_Caps = 58, - KEYSCAN_F1 = 59, - KEYSCAN_F2 = 60, - KEYSCAN_F3 = 61, - KEYSCAN_F4 = 62, - KEYSCAN_F5 = 63, - KEYSCAN_F6 = 64, - KEYSCAN_F7 = 65, - KEYSCAN_F8 = 66, - KEYSCAN_F9 = 67, - KEYSCAN_F10 = 68, - KEYSCAN_Num = 69, - KEYSCAN_Scroll = 70, - KEYSCAN_Home = 71, - KEYSCAN_Up = 72, - KEYSCAN_PgUp = 73, - KEYSCAN_Minus2 = 74, - KEYSCAN_Left = 75, - KEYSCAN_Center = 76, - KEYSCAN_Right = 77, - KEYSCAN_Plus = 78, - KEYSCAN_End = 79, - KEYSCAN_Down = 80, - KEYSCAN_PgDn = 81, - KEYSCAN_Ins = 82, - KEYSCAN_Delete = 83 + KEYSCAN_9 = 10, + KEYSCAN_0 = 11, + KEYSCAN_Minus = 12, + KEYSCAN_Equals = 13, + KEYSCAN_BackSpace = 14, + KEYSCAN_Tab = 15, + KEYSCAN_Q = 16, + KEYSCAN_W = 17, + KEYSCAN_E = 18, + KEYSCAN_R = 19, + KEYSCAN_T = 20, + KEYSCAN_Y = 21, + KEYSCAN_U = 22, + KEYSCAN_I = 23, + KEYSCAN_O = 24, + KEYSCAN_P = 25, + KEYSCAN_LeftBracket = 26, + KEYSCAN_RightBracket = 27, + KEYSCAN_Enter = 28, + KEYSCAN_CTRL = 29, + KEYSCAN_A = 30, + KEYSCAN_S = 31, + KEYSCAN_D = 32, + KEYSCAN_F = 33, + KEYSCAN_G = 34, + KEYSCAN_H = 35, + KEYSCAN_J = 36, + KEYSCAN_K = 37, + KEYSCAN_L = 38, + KEYSCAN_Semicolon = 39, + KEYSCAN_Apostrophe = 40, + KEYSCAN_Grave = 41, + KEYSCAN_LShift = 42, + KEYSCAN_Backslash = 43, + KEYSCAN_Z = 44, + KEYSCAN_X = 45, + KEYSCAN_C = 46, + KEYSCAN_V = 47, + KEYSCAN_B = 48, + KEYSCAN_N = 49, + KEYSCAN_M = 50, + KEYSCAN_Comma = 51, + KEYSCAN_Period = 52, + KEYSCAN_Forwardslash = 53, + KEYSCAN_RShift = 54, + KEYSCAN_PrtSc = 55, + KEYSCAN_Alt = 56, + KEYSCAN_Space = 57, + KEYSCAN_Caps = 58, + KEYSCAN_F1 = 59, + KEYSCAN_F2 = 60, + KEYSCAN_F3 = 61, + KEYSCAN_F4 = 62, + KEYSCAN_F5 = 63, + KEYSCAN_F6 = 64, + KEYSCAN_F7 = 65, + KEYSCAN_F8 = 66, + KEYSCAN_F9 = 67, + KEYSCAN_F10 = 68, + KEYSCAN_Num = 69, + KEYSCAN_Scroll = 70, + KEYSCAN_Home = 71, + KEYSCAN_Up = 72, + KEYSCAN_PgUp = 73, + KEYSCAN_Minus2 = 74, + KEYSCAN_Left = 75, + KEYSCAN_Center = 76, + KEYSCAN_Right = 77, + KEYSCAN_Plus = 78, + KEYSCAN_End = 79, + KEYSCAN_Down = 80, + KEYSCAN_PgDn = 81, + KEYSCAN_Ins = 82, + KEYSCAN_Delete = 83 } Scancodes; \ No newline at end of file diff --git a/src/kernel/main.c b/src/kernel/main.c index 2ca6891..ed4b8f7 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -15,15 +15,25 @@ #include "../libs/version.h" #include "../libs/boot/bootparams.h" +#define PS2_KEYBOARD_PORT 0x60 + extern uint8_t __bss_start; extern uint8_t __end; +int uptime; void timer(Registers* regs) { - int uptime; uptime++; } +int keyboard_scancode; +void keyboard() +{ + keyboard_scancode = i686_inb(PS2_KEYBOARD_PORT); + // Debug Message, need to make a serial output thingy :) + // printf("Keycode = %d Port = %d\n", keycode, PS2_KEYBOARD_PORT); +} + void __attribute__((section(".entry"))) start(BootParams* bootParams) { // print logo @@ -40,10 +50,12 @@ void __attribute__((section(".entry"))) start(BootParams* bootParams) { i686_IRQ_RegisterHandler(0, timer); printf("Load Keyboard Driver..."); - Keyboard_Init(); + i686_IRQ_RegisterHandler(1, keyboard); printf("Done!\n"); + printf("%d", uptime); - // Debug Info for Memory :3 + + // Debug Info for Memory :3 i REALLY need to make a like serial debug output thingy // printf("Boot Device: %x\n", bootParams->BootDevice); // printf("Memory Region Count: %x\n", bootParams->Memory.RegionCount); // for (int i = 0; i < bootParams->Memory.RegionCount; i++) { diff --git a/src/kernel/util/util.c b/src/kernel/util/util.c new file mode 100644 index 0000000..774db72 --- /dev/null +++ b/src/kernel/util/util.c @@ -0,0 +1,21 @@ +/*----------------*\ +|Nanite OS | +|Copyright (C) 2024| +|Tyler McGurrin | +\*----------------*/ + +#include "util.h" + +int string_length(char s[]) { + int i = 0; + while (s[i] != '\0') { + ++i; + } + return i; +} + +void append(char s[], char n) { + int len = string_length(s); + s[len] = n; + s[len + 1] = '\0'; +} diff --git a/src/kernel/util/util.h b/src/kernel/util/util.h new file mode 100644 index 0000000..041689f --- /dev/null +++ b/src/kernel/util/util.h @@ -0,0 +1,7 @@ +/*----------------*\ +|Nanite OS | +|Copyright (C) 2025| +|Tyler McGurrin | +\*----------------*/ +int string_length(char s[]); +void append(char s[], char n); \ No newline at end of file