diff --git a/src/Kernel.cc b/src/Kernel.cc index c7241fa..438783d 100644 --- a/src/Kernel.cc +++ b/src/Kernel.cc @@ -31,11 +31,28 @@ Kernel::systemKernel() * Public */ +Kernel::Kernel() + : mConsole() +{ } + + +void +Kernel::initialize() +{ + mConsole.clear(kernel::Console::Color::Blue); + mConsole.printString("Loading Polka...\n"); +} + + void Kernel::panic(const char* msg, ...) { - + mConsole.clear(Console::Color::Magenta); + mConsole.printString("PANIC! PANIC! PANIC! :-(\n"); + mConsole.printString(msg); + // TODO: Dump registers. + halt(); } /* diff --git a/src/Kernel.hh b/src/Kernel.hh index 38e1120..4925817 100644 --- a/src/Kernel.hh +++ b/src/Kernel.hh @@ -10,6 +10,7 @@ #define __KERNEL_HH__ #include "Attributes.hh" +#include "Console.hh" namespace kernel { @@ -18,9 +19,16 @@ struct Kernel { static Kernel& systemKernel(); + Kernel(); + + void initialize(); + void panic(const char* msg, ...); void halt() NORETURN; + +private: + Console mConsole; }; } /* namespace kernel */ diff --git a/src/Main.cc b/src/Main.cc index e269584..b73a87a 100644 --- a/src/Main.cc +++ b/src/Main.cc @@ -44,11 +44,7 @@ kmain(multiboot::Information *information) multiboot::Information::setInformation(information); auto info = multiboot::Information::information(); - // Reinitialize the system console now that we have global static objects. - auto& console = kernel::Console::systemConsole(); - console.clear(kernel::Console::Color::Blue); - - console.printString("Loading Polka ...\n"); + kernel::Kernel::systemKernel().initialize(); console.printFormat("Command line: \"%s\"\n", info->commandLine());