Keyboard Stuff

This commit is contained in:
Tyler McGurrin 2025-05-29 06:42:24 -04:00
parent 7fa557d685
commit a1c05dc279
5 changed files with 425 additions and 405 deletions

View File

@ -1,6 +1,6 @@
/*----------------*\ /*----------------*\
|Nanite OS | |Nanite OS |
|Copyright (C) 2024| |Copyright (C) 2025|
|Tyler McGurrin | |Tyler McGurrin |
\*----------------*/ \*----------------*/
#include "keyboard.h" #include "keyboard.h"
@ -9,365 +9,345 @@
#include <arch/i686/io.h> #include <arch/i686/io.h>
#include <stdio.h> #include <stdio.h>
#define PS2_KEYBOARD_PORT 0x60 void Print_Key(int scancode) {
char* key;
char* Keyboard_Scanner() switch (scancode) {
{
int scancode; case KEYSCAN_1:
char* key = ""; key = "1";
scancode = i686_inb(PS2_KEYBOARD_PORT); break;
// Debug Message, unneeded
// printf("Keycode = %d Port = %d\n", keycode, PS2_KEYBOARD_PORT); case KEYSCAN_2:
key = "2";
switch (scancode) { break;
case KEYSCAN_1: case KEYSCAN_3:
key = "1"; key = "3";
break; break;
case KEYSCAN_2: case KEYSCAN_4:
key = "2"; key = "4";
break; break;
case KEYSCAN_3: case KEYSCAN_5:
key = "3"; key = "5";
break; break;
case KEYSCAN_4: case KEYSCAN_6:
key = "4"; key = "6";
break; break;
case KEYSCAN_5: case KEYSCAN_7:
key = "5"; key = "7";
break; break;
case KEYSCAN_6: case KEYSCAN_8:
key = "6"; key = "8";
break; break;
case KEYSCAN_7: case KEYSCAN_9:
key = "7"; key = "9";
break; break;
case KEYSCAN_8: case KEYSCAN_0:
key = "8"; key = "0";
break; break;
case KEYSCAN_9: case KEYSCAN_Minus:
key = "9"; key = "-";
break; break;
case KEYSCAN_0: case KEYSCAN_Equals:
key = "0"; key = "=";
break; break;
case KEYSCAN_Minus: case KEYSCAN_Q:
key = "-"; key = "q";
break; break;
case KEYSCAN_Equals: case KEYSCAN_W:
key = "="; key = "w";
break; break;
case KEYSCAN_Q: case KEYSCAN_E:
key = "q"; key = "e";
break; break;
case KEYSCAN_W: case KEYSCAN_R:
key = "w"; key = "r";
break; break;
case KEYSCAN_E: case KEYSCAN_T:
key = "e"; key = "t";
break; break;
case KEYSCAN_R: case KEYSCAN_Y:
key = "r"; key = "y";
break; break;
case KEYSCAN_T: case KEYSCAN_U:
key = "t"; key = "u";
break; break;
case KEYSCAN_Y: case KEYSCAN_I:
key = "y"; key = "i";
break; break;
case KEYSCAN_U: case KEYSCAN_O:
key = "u"; key = "o";
break; break;
case KEYSCAN_I: case KEYSCAN_P:
key = "i"; key = "p";
break; break;
case KEYSCAN_O: case KEYSCAN_LeftBracket:
key = "o"; key = "[";
break; break;
case KEYSCAN_P: case KEYSCAN_RightBracket:
key = "p"; key = "]";
break; break;
case KEYSCAN_LeftBracket: case KEYSCAN_A:
key = "["; key = "a";
break; break;
case KEYSCAN_RightBracket:
key = "]";
break;
case KEYSCAN_A: case KEYSCAN_S:
key = "a"; key = "s";
break; break;
case KEYSCAN_S: case KEYSCAN_D:
key = "s"; key = "d";
break; break;
case KEYSCAN_D: case KEYSCAN_F:
key = "d"; key = "f";
break; break;
case KEYSCAN_F: case KEYSCAN_G:
key = "f"; key = "g";
break; break;
case KEYSCAN_G: case KEYSCAN_H:
key = "g"; key = "h";
break; break;
case KEYSCAN_H: case KEYSCAN_J:
key = "h"; key = "j";
break; break;
case KEYSCAN_J: case KEYSCAN_K:
key = "j"; key = "k";
break; break;
case KEYSCAN_K: case KEYSCAN_L:
key = "k"; key = "l";
break; break;
case KEYSCAN_L: case KEYSCAN_Semicolon:
key = "l"; key = ";";
break; break;
case KEYSCAN_Semicolon: case KEYSCAN_Apostrophe:
key = ";"; key = "'";
break; break;
case KEYSCAN_Apostrophe: case KEYSCAN_Grave:
key = "'"; key = "`";
break; break;
case KEYSCAN_Grave: case KEYSCAN_Backslash:
key = "`"; key = "\\";
break; break;
case KEYSCAN_Backslash: case KEYSCAN_Z:
key = "\\"; key = "z";
break; break;
case KEYSCAN_Z: case KEYSCAN_X:
key = "z"; key = "x";
break; break;
case KEYSCAN_X: case KEYSCAN_C:
key = "x"; key = "c";
break; break;
case KEYSCAN_C: case KEYSCAN_V:
key = "c"; key = "v";
break; break;
case KEYSCAN_V: case KEYSCAN_B:
key = "v"; key = "b";
break; break;
case KEYSCAN_B: case KEYSCAN_N:
key = "b"; key = "n";
break; break;
case KEYSCAN_N: case KEYSCAN_M:
key = "n"; key = "m";
break; break;
case KEYSCAN_M: case KEYSCAN_Comma:
key = "m"; key = ",";
break; break;
case KEYSCAN_Comma: case KEYSCAN_Period:
key = ","; key = ".";
break; break;
case KEYSCAN_Period: case KEYSCAN_Forwardslash:
key = "."; key = "/";
break; break;
case KEYSCAN_Forwardslash: case KEYSCAN_Space:
key = "/"; key = " ";
break; break;
case KEYSCAN_Space: case KEYSCAN_Enter:
key = " "; key = "\n";
break; break;
case KEYSCAN_Enter: case KEYSCAN_BackSpace:
key = "\n"; key = "\b \b";
break; break;
case KEYSCAN_BackSpace: case KEYSCAN_Tab:
key = "\b \b"; key = "\t";
break; break;
case KEYSCAN_Tab: case KEYSCAN_CTRL:
key = "\t"; key = "";
break; break;
case KEYSCAN_CTRL: case KEYSCAN_LShift:
key = ""; key = "";
break; break;
case KEYSCAN_LShift: case KEYSCAN_RShift:
key = ""; key = "";
break; break;
case KEYSCAN_RShift: case KEYSCAN_PrtSc:
key = ""; key = "";
break; break;
case KEYSCAN_PrtSc: case KEYSCAN_Alt:
key = ""; key = "";
break; break;
case KEYSCAN_Alt: case KEYSCAN_Caps:
key = ""; key = "";
break; break;
case KEYSCAN_Caps: case KEYSCAN_F1:
key = ""; key = "";
break; break;
case KEYSCAN_F1: case KEYSCAN_F2:
key = ""; key = "";
break; break;
case KEYSCAN_F2: case KEYSCAN_F3:
key = ""; key = "";
break; break;
case KEYSCAN_F3: case KEYSCAN_F4:
key = ""; key = "";
break; break;
case KEYSCAN_F4: case KEYSCAN_F5:
key = ""; key = "";
break; break;
case KEYSCAN_F5: case KEYSCAN_F6:
key = ""; key = "";
break; break;
case KEYSCAN_F6: case KEYSCAN_F7:
key = ""; key = "";
break; break;
case KEYSCAN_F7: case KEYSCAN_F8:
key = ""; key = "";
break; break;
case KEYSCAN_F8: case KEYSCAN_F9:
key = ""; key = "";
break; break;
case KEYSCAN_F9: case KEYSCAN_F10:
key = ""; key = "";
break; break;
case KEYSCAN_F10: case KEYSCAN_Num:
key = ""; key = "";
break; break;
case KEYSCAN_Num: case KEYSCAN_Scroll:
key = ""; key = "";
break; break;
case KEYSCAN_Scroll: case KEYSCAN_Home:
key = ""; key = "";
break; break;
case KEYSCAN_Home: case KEYSCAN_Up:
key = ""; key = "";
break; break;
case KEYSCAN_Up: case KEYSCAN_PgUp:
key = ""; key = "";
break; break;
case KEYSCAN_PgUp: case KEYSCAN_Minus2:
key = ""; key = "";
break; break;
case KEYSCAN_Minus2: case KEYSCAN_Left:
key = ""; key = "";
break; break;
case KEYSCAN_Left: case KEYSCAN_Center:
key = ""; key = "";
break; break;
case KEYSCAN_Center: case KEYSCAN_Right:
key = ""; key = "";
break; break;
case KEYSCAN_Right: case KEYSCAN_Plus:
key = ""; key = "";
break; break;
case KEYSCAN_Plus: case KEYSCAN_End:
key = ""; key = "";
break; break;
case KEYSCAN_End: case KEYSCAN_Down:
key = ""; key = "";
break; break;
case KEYSCAN_Down: case KEYSCAN_PgDn:
key = ""; key = "";
break; break;
case KEYSCAN_PgDn: case KEYSCAN_Ins:
key = ""; key = "";
break; break;
case KEYSCAN_Ins: case KEYSCAN_Delete:
key = ""; key = "";
break; break;
case KEYSCAN_Delete: case KEYSCAN_ESC:
key = ""; key = "";
break; break;
case KEYSCAN_ESC: default:
key = ""; break;
break;
}
default: printf("%s", key);
break;
}
return key;
}
void Keyboard_Handler()
{
char* key = Keyboard_Scanner();
printf("%s", key);
return;
}
void Keyboard_Init()
{
i686_IRQ_RegisterHandler(1, Keyboard_Handler);
} }

View File

@ -1,13 +1,13 @@
/*----------------*\ /*----------------*\
|Nanite OS | |Nanite OS |
|Copyright (C) 2024| |Copyright (C) 2025|
|Tyler McGurrin | |Tyler McGurrin |
\*----------------*/ \*----------------*/
#pragma once #pragma once
void Keyboard_Init(); void Print_Key(int scancode);
typedef enum { typedef enum { // ill do it LATER!
KEYSCAN_ESC = 1 , KEYSCAN_ESC = 1 ,
KEYSCAN_1 = 2 , KEYSCAN_1 = 2 ,
KEYSCAN_2 = 3 , KEYSCAN_2 = 3 ,
@ -17,78 +17,78 @@ typedef enum {
KEYSCAN_6 = 7 , KEYSCAN_6 = 7 ,
KEYSCAN_7 = 8 , KEYSCAN_7 = 8 ,
KEYSCAN_8 = 9 , KEYSCAN_8 = 9 ,
KEYSCAN_9 = 10, KEYSCAN_9 = 10,
KEYSCAN_0 = 11, KEYSCAN_0 = 11,
KEYSCAN_Minus = 12, KEYSCAN_Minus = 12,
KEYSCAN_Equals = 13, KEYSCAN_Equals = 13,
KEYSCAN_BackSpace = 14, KEYSCAN_BackSpace = 14,
KEYSCAN_Tab = 15, KEYSCAN_Tab = 15,
KEYSCAN_Q = 16, KEYSCAN_Q = 16,
KEYSCAN_W = 17, KEYSCAN_W = 17,
KEYSCAN_E = 18, KEYSCAN_E = 18,
KEYSCAN_R = 19, KEYSCAN_R = 19,
KEYSCAN_T = 20, KEYSCAN_T = 20,
KEYSCAN_Y = 21, KEYSCAN_Y = 21,
KEYSCAN_U = 22, KEYSCAN_U = 22,
KEYSCAN_I = 23, KEYSCAN_I = 23,
KEYSCAN_O = 24, KEYSCAN_O = 24,
KEYSCAN_P = 25, KEYSCAN_P = 25,
KEYSCAN_LeftBracket = 26, KEYSCAN_LeftBracket = 26,
KEYSCAN_RightBracket = 27, KEYSCAN_RightBracket = 27,
KEYSCAN_Enter = 28, KEYSCAN_Enter = 28,
KEYSCAN_CTRL = 29, KEYSCAN_CTRL = 29,
KEYSCAN_A = 30, KEYSCAN_A = 30,
KEYSCAN_S = 31, KEYSCAN_S = 31,
KEYSCAN_D = 32, KEYSCAN_D = 32,
KEYSCAN_F = 33, KEYSCAN_F = 33,
KEYSCAN_G = 34, KEYSCAN_G = 34,
KEYSCAN_H = 35, KEYSCAN_H = 35,
KEYSCAN_J = 36, KEYSCAN_J = 36,
KEYSCAN_K = 37, KEYSCAN_K = 37,
KEYSCAN_L = 38, KEYSCAN_L = 38,
KEYSCAN_Semicolon = 39, KEYSCAN_Semicolon = 39,
KEYSCAN_Apostrophe = 40, KEYSCAN_Apostrophe = 40,
KEYSCAN_Grave = 41, KEYSCAN_Grave = 41,
KEYSCAN_LShift = 42, KEYSCAN_LShift = 42,
KEYSCAN_Backslash = 43, KEYSCAN_Backslash = 43,
KEYSCAN_Z = 44, KEYSCAN_Z = 44,
KEYSCAN_X = 45, KEYSCAN_X = 45,
KEYSCAN_C = 46, KEYSCAN_C = 46,
KEYSCAN_V = 47, KEYSCAN_V = 47,
KEYSCAN_B = 48, KEYSCAN_B = 48,
KEYSCAN_N = 49, KEYSCAN_N = 49,
KEYSCAN_M = 50, KEYSCAN_M = 50,
KEYSCAN_Comma = 51, KEYSCAN_Comma = 51,
KEYSCAN_Period = 52, KEYSCAN_Period = 52,
KEYSCAN_Forwardslash = 53, KEYSCAN_Forwardslash = 53,
KEYSCAN_RShift = 54, KEYSCAN_RShift = 54,
KEYSCAN_PrtSc = 55, KEYSCAN_PrtSc = 55,
KEYSCAN_Alt = 56, KEYSCAN_Alt = 56,
KEYSCAN_Space = 57, KEYSCAN_Space = 57,
KEYSCAN_Caps = 58, KEYSCAN_Caps = 58,
KEYSCAN_F1 = 59, KEYSCAN_F1 = 59,
KEYSCAN_F2 = 60, KEYSCAN_F2 = 60,
KEYSCAN_F3 = 61, KEYSCAN_F3 = 61,
KEYSCAN_F4 = 62, KEYSCAN_F4 = 62,
KEYSCAN_F5 = 63, KEYSCAN_F5 = 63,
KEYSCAN_F6 = 64, KEYSCAN_F6 = 64,
KEYSCAN_F7 = 65, KEYSCAN_F7 = 65,
KEYSCAN_F8 = 66, KEYSCAN_F8 = 66,
KEYSCAN_F9 = 67, KEYSCAN_F9 = 67,
KEYSCAN_F10 = 68, KEYSCAN_F10 = 68,
KEYSCAN_Num = 69, KEYSCAN_Num = 69,
KEYSCAN_Scroll = 70, KEYSCAN_Scroll = 70,
KEYSCAN_Home = 71, KEYSCAN_Home = 71,
KEYSCAN_Up = 72, KEYSCAN_Up = 72,
KEYSCAN_PgUp = 73, KEYSCAN_PgUp = 73,
KEYSCAN_Minus2 = 74, KEYSCAN_Minus2 = 74,
KEYSCAN_Left = 75, KEYSCAN_Left = 75,
KEYSCAN_Center = 76, KEYSCAN_Center = 76,
KEYSCAN_Right = 77, KEYSCAN_Right = 77,
KEYSCAN_Plus = 78, KEYSCAN_Plus = 78,
KEYSCAN_End = 79, KEYSCAN_End = 79,
KEYSCAN_Down = 80, KEYSCAN_Down = 80,
KEYSCAN_PgDn = 81, KEYSCAN_PgDn = 81,
KEYSCAN_Ins = 82, KEYSCAN_Ins = 82,
KEYSCAN_Delete = 83 KEYSCAN_Delete = 83
} Scancodes; } Scancodes;

View File

@ -15,15 +15,25 @@
#include "../libs/version.h" #include "../libs/version.h"
#include "../libs/boot/bootparams.h" #include "../libs/boot/bootparams.h"
#define PS2_KEYBOARD_PORT 0x60
extern uint8_t __bss_start; extern uint8_t __bss_start;
extern uint8_t __end; extern uint8_t __end;
int uptime;
void timer(Registers* regs) void timer(Registers* regs)
{ {
int uptime;
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) { void __attribute__((section(".entry"))) start(BootParams* bootParams) {
// print logo // print logo
@ -40,10 +50,12 @@ void __attribute__((section(".entry"))) start(BootParams* bootParams) {
i686_IRQ_RegisterHandler(0, timer); i686_IRQ_RegisterHandler(0, timer);
printf("Load Keyboard Driver..."); printf("Load Keyboard Driver...");
Keyboard_Init(); i686_IRQ_RegisterHandler(1, keyboard);
printf("Done!\n"); 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("Boot Device: %x\n", bootParams->BootDevice);
// printf("Memory Region Count: %x\n", bootParams->Memory.RegionCount); // printf("Memory Region Count: %x\n", bootParams->Memory.RegionCount);
// for (int i = 0; i < bootParams->Memory.RegionCount; i++) { // for (int i = 0; i < bootParams->Memory.RegionCount; i++) {

21
src/kernel/util/util.c Normal file
View File

@ -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';
}

7
src/kernel/util/util.h Normal file
View File

@ -0,0 +1,7 @@
/*----------------*\
|Nanite OS |
|Copyright (C) 2025|
|Tyler McGurrin |
\*----------------*/
int string_length(char s[]);
void append(char s[], char n);