...
This commit is contained in:
58
src/kernel.c
58
src/kernel.c
@@ -1,21 +1,67 @@
|
||||
#include "kernel.h"
|
||||
#include "interrupts.h"
|
||||
#include "string.h"
|
||||
#include "vga.h"
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
|
||||
void kernel_main()
|
||||
void kmain()
|
||||
{
|
||||
vga_clear();
|
||||
|
||||
pic_remap();
|
||||
enable_interrupts();
|
||||
|
||||
vga_print("\nWelcome to nub OS\n");
|
||||
kprintf("\nWelcome to nub OS\n");
|
||||
|
||||
kernel_halt();
|
||||
khalt();
|
||||
}
|
||||
|
||||
void kernel_panic()
|
||||
void kpanic()
|
||||
{
|
||||
vga_print("Kernel panic!\n");
|
||||
kernel_halt();
|
||||
kprintf("Kernel panic!\n");
|
||||
khalt();
|
||||
}
|
||||
|
||||
void kprintf(const char* fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
|
||||
for (size_t i = 0; fmt[i] != '\0'; i++)
|
||||
{
|
||||
if (fmt[i] == '%')
|
||||
{
|
||||
i++;
|
||||
if (fmt[i] == 's')
|
||||
{
|
||||
const char* str = va_arg(args, const char*);
|
||||
for (size_t j = 0; str[j] != '\0'; j++)
|
||||
{
|
||||
vga_put_char(str[j], 0x0F);
|
||||
}
|
||||
}
|
||||
else if (fmt[i] == 'd')
|
||||
{
|
||||
int val = va_arg(args, int);
|
||||
char buf[12];
|
||||
itoa(val, buf);
|
||||
for (size_t j = 0; buf[j] != '\0'; j++)
|
||||
{
|
||||
vga_put_char(buf[j], 0x0F);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
vga_put_char('%', 0x0F);
|
||||
vga_put_char(fmt[i], 0x0F);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
vga_put_char(fmt[i], 0x0F);
|
||||
}
|
||||
}
|
||||
|
||||
va_end(args);
|
||||
}
|
||||
Reference in New Issue
Block a user