...
This commit is contained in:
22
src/kernel.c
22
src/kernel.c
@@ -1,15 +1,26 @@
|
||||
#include "kernel.h"
|
||||
#include "interrupts.h"
|
||||
#include "keyboard.h"
|
||||
#include "string.h"
|
||||
#include "vga.h"
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
|
||||
void handle_keypress(const keyboard_event_t* event)
|
||||
{
|
||||
if (event->pressed && event->ascii)
|
||||
{
|
||||
kprintf("%c", event->ascii);
|
||||
}
|
||||
}
|
||||
|
||||
void kmain()
|
||||
{
|
||||
vga_clear();
|
||||
pic_remap();
|
||||
enable_interrupts();
|
||||
init_keyboard();
|
||||
register_keypress_handler(handle_keypress);
|
||||
|
||||
kprintf("Welcome to nub OS\n");
|
||||
khalt();
|
||||
@@ -18,6 +29,7 @@ void kmain()
|
||||
void kpanic()
|
||||
{
|
||||
kprintf("Kernel panic!\n");
|
||||
disable_interrupts();
|
||||
khalt();
|
||||
}
|
||||
|
||||
@@ -33,6 +45,7 @@ void kprintf(const char* fmt, ...)
|
||||
if (should_format)
|
||||
{
|
||||
should_format = false;
|
||||
|
||||
if (fmt[i] == '%')
|
||||
{
|
||||
vga_put_char('%', 0x0F);
|
||||
@@ -45,6 +58,11 @@ void kprintf(const char* fmt, ...)
|
||||
vga_put_char(str[j], 0x0F);
|
||||
}
|
||||
}
|
||||
else if (fmt[i] == 'c')
|
||||
{
|
||||
char character = (char)va_arg(args, int64_t);
|
||||
vga_put_char(character, 0x0F);
|
||||
}
|
||||
else if (fmt[i] == 'd')
|
||||
{
|
||||
int64_t val = va_arg(args, int64_t);
|
||||
@@ -65,6 +83,10 @@ void kprintf(const char* fmt, ...)
|
||||
vga_put_char(buf[j], 0x0F);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
vga_put_char(fmt[i], 0x0F);
|
||||
}
|
||||
}
|
||||
else if (fmt[i] == '%')
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user