Kernel: Add new generic Printer class

kprint is now just a #define to Printer::print<terminal_putc>.

This allows us to use same print formatting for serial output :)
This commit is contained in:
2022-12-10 00:33:03 +02:00
parent ac2ba8bc56
commit 3d3f12bd30
9 changed files with 480 additions and 174 deletions

View File

@@ -1,14 +1,15 @@
#include <kernel/GDT.h>
#include <kernel/IDT.h>
#include <kernel/IO.h>
#include <kernel/Keyboard.h>
#include <kernel/kmalloc.h>
#include <kernel/kprint.h>
#include <kernel/multiboot.h>
#include <kernel/panic.h>
#include <kernel/PIC.h>
#include <kernel/PIT.h>
#include <kernel/Serial.h>
#include <kernel/tty.h>
#include <kernel/kprint.h>
#include <kernel/IO.h>
#include <string.h>
#include <stdlib.h>
@@ -22,6 +23,12 @@ 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;
}
char ascii = Keyboard::key_to_ascii(key, modifiers);
if (ascii)
kprint("{}", ascii);
@@ -36,9 +43,13 @@ void kernel_main(multiboot_info_t* mbi, uint32_t magic)
s_multiboot_info = mbi;
if (magic != 0x2BADB002)
goto halt;
return;
terminal_initialize();
if (mbi->framebuffer.type != 2)
return;
TTY::initialize();
Serial::initialize();
kmalloc_initialize();
@@ -49,11 +60,18 @@ void kernel_main(multiboot_info_t* mbi, uint32_t magic)
PIT::initialize();
Keyboard::initialize(on_key_press);
kprint("Hello from the kernel!\n");
ENABLE_INTERRUPTS();
kprintln("Hello from the kernel!");
dprintln("Hello emulator from kernel!");
int** lol = new int*[10];
for (int i = 0; i < 10; i++)
lol[i] = new int;
kprint("{.2}\n", -12.123f);
kprint("0x{.H}", 0xcafebabe);
halt:
for (;;)
{
asm("hlt");