banan-os/kernel/kernel/kernel.cpp

76 lines
1.3 KiB
C++
Raw Normal View History

#include <kernel/GDT.h>
2022-11-16 19:49:09 +02:00
#include <kernel/IDT.h>
#include <kernel/IO.h>
#include <kernel/Keyboard.h>
#include <kernel/kmalloc.h>
#include <kernel/kprint.h>
2022-11-15 21:42:14 +02:00
#include <kernel/multiboot.h>
#include <kernel/panic.h>
2022-12-07 02:41:18 +02:00
#include <kernel/PIC.h>
#include <kernel/PIT.h>
#include <kernel/Serial.h>
#include <kernel/tty.h>
#include <string.h>
#include <stdlib.h>
#define DISABLE_INTERRUPTS() asm volatile("cli")
#define ENABLE_INTERRUPTS() asm volatile("sti")
2022-11-15 21:42:14 +02:00
multiboot_info_t* s_multiboot_info;
2022-11-14 00:27:11 +02:00
void on_key_press(Keyboard::Key key, uint8_t modifiers, bool pressed)
{
if (pressed)
{
if (key == Keyboard::Key::Escape)
{
kprint("time since boot: {} ms\n", PIT::ms_since_boot());
return;
}
2022-12-10 03:53:44 +02:00
else if (key == Keyboard::Key::Backspace)
{
kprint("\b \b");
}
else
{
char ascii = Keyboard::key_to_ascii(key, modifiers);
if (ascii)
kprint("{}", ascii);
}
}
}
extern "C"
void kernel_main(multiboot_info_t* mbi, uint32_t magic)
{
DISABLE_INTERRUPTS();
2022-11-14 00:27:11 +02:00
2022-11-15 21:42:14 +02:00
s_multiboot_info = mbi;
2022-12-07 02:41:18 +02:00
if (magic != 0x2BADB002)
return;
2022-12-07 02:41:18 +02:00
TTY::initialize();
Serial::initialize();
2022-11-16 19:49:09 +02:00
kmalloc_initialize();
2022-11-15 21:42:14 +02:00
2022-12-07 02:41:18 +02:00
PIC::initialize();
2022-11-16 19:49:09 +02:00
gdt_initialize();
2022-12-07 02:41:18 +02:00
IDT::initialize();
PIT::initialize();
Keyboard::initialize(on_key_press);
2022-11-15 21:42:14 +02:00
kprintln("Hello from the kernel!");
2022-12-10 03:53:44 +02:00
kprint("HHHHHHHHHHHHHHHHHHHHHHHHHHHHH\e[20D.\e[3K");
2022-12-10 03:53:44 +02:00
ENABLE_INTERRUPTS();
2022-12-07 02:41:18 +02:00
for (;;)
{
asm("hlt");
}
}