maintenance

This commit is contained in:
nub31
2025-08-29 15:51:05 +02:00
parent 827d27e3e3
commit 3e510a3e1b
6 changed files with 33 additions and 20 deletions

View File

@@ -195,8 +195,8 @@ long_mode_start:
mov fs, ax mov fs, ax
mov gs, ax mov gs, ax
extern kmain extern kernel_main
call kmain call kernel_main
cli cli
.hang: .hang:

View File

@@ -8,12 +8,11 @@ void keyboard_handler(const keyboard_event_t* event)
{ {
if (event->pressed) if (event->pressed)
{ {
vga_print_int(event->scan_code); vga_print_char(event->ascii);
vga_print("\n");
} }
} }
void kmain(void) void kernel_main(void)
{ {
vga_clear(); vga_clear();
vga_print_success(); vga_print_success();
@@ -36,7 +35,7 @@ void kmain(void)
} }
} }
void kpanic() void kernel_panic()
{ {
vga_print("Kernel panic!\n"); vga_print("Kernel panic!\n");
__asm__ volatile("cli; hlt"); __asm__ volatile("cli; hlt");

View File

@@ -1,3 +1,3 @@
#pragma once #pragma once
void kpanic(); void kernel_panic();

View File

@@ -11,6 +11,14 @@
#define KEYBOARD_HANDLERS_LENGTH 32 #define KEYBOARD_HANDLERS_LENGTH 32
unsigned const char us_keymap[128] = {
0, 27, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', '\b', '\t', 'q', 'w',
'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\n', 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, 0,
0, 0, '-', 0, 0, 0, '+', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
bool shift = false; bool shift = false;
bool caps_lock = false; bool caps_lock = false;
@@ -47,6 +55,7 @@ void handle_keyboard(const isr_frame_t* frame)
.pressed = pressed, .pressed = pressed,
.caps_lock = caps_lock, .caps_lock = caps_lock,
.shift = shift, .shift = shift,
.ascii = us_keymap[scan_code],
}; };
for (int i = 0; i < handler_index; i++) for (int i = 0; i < handler_index; i++)
@@ -65,7 +74,7 @@ void register_keypress_handler(const keyboard_handler_t handler)
{ {
vga_print_error(); vga_print_error();
vga_print(" Maximum keyboard handlers reached\n"); vga_print(" Maximum keyboard handlers reached\n");
kpanic(); kernel_panic();
} }
keyboard_handlers[handler_index] = handler; keyboard_handlers[handler_index] = handler;

View File

@@ -69,6 +69,12 @@ void vga_print_char_colored(char character, vga_color_t color)
cursor_col = 0; cursor_col = 0;
break; break;
} }
case '\t':
{
uint8_t remainter = cursor_col % 4;
cursor_col += remainter == 0 ? 4 : remainter;
break;
}
default: default:
{ {
vga_char c = { vga_char c = {
@@ -110,11 +116,6 @@ void vga_print_char_colored(char character, vga_color_t color)
} }
} }
void vga_print_char(char character)
{
vga_print_char_colored(character, vga_default_color());
}
void vga_print_colored(const char* string, vga_color_t color) void vga_print_colored(const char* string, vga_color_t color)
{ {
for (uint8_t i = 0; string[i] != '\0'; i++) for (uint8_t i = 0; string[i] != '\0'; i++)
@@ -123,11 +124,6 @@ void vga_print_colored(const char* string, vga_color_t color)
} }
} }
void vga_print(const char* string)
{
vga_print_colored(string, vga_default_color());
}
void vga_print_success(void) void vga_print_success(void)
{ {
vga_print("[ "); vga_print("[ ");

View File

@@ -24,9 +24,8 @@ typedef uint8_t vga_color_t;
void vga_clear(void); void vga_clear(void);
void vga_set_cursor_position(uint8_t row, uint8_t col); void vga_set_cursor_position(uint8_t row, uint8_t col);
void vga_print_char(char character); void vga_print_char_colored(char character, vga_color_t color);
void vga_print_colored(const char* string, vga_color_t color); void vga_print_colored(const char* string, vga_color_t color);
void vga_print(const char* string);
void vga_print_success(void); void vga_print_success(void);
void vga_print_error(void); void vga_print_error(void);
@@ -42,4 +41,14 @@ static inline vga_color_t vga_color(vga_color_t fg_color, vga_color_t bg_color)
static inline vga_color_t vga_default_color() static inline vga_color_t vga_default_color()
{ {
return vga_color(VGA_LIGHT_GRAY, VGA_BLACK); return vga_color(VGA_LIGHT_GRAY, VGA_BLACK);
}
static inline void vga_print_char(char character)
{
vga_print_char_colored(character, vga_default_color());
}
static inline void vga_print(const char* string)
{
vga_print_colored(string, vga_default_color());
} }