aboutsummaryrefslogtreecommitdiff
path: root/src/kernel.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel.cc')
-rw-r--r--src/kernel.cc18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/kernel.cc b/src/kernel.cc
index 0915365..0d8874c 100644
--- a/src/kernel.cc
+++ b/src/kernel.cc
@@ -18,6 +18,8 @@
#include "serial.h"
#include "vmm.h"
+/* hardware */
+vmm kvmm;
#include "hardware.h"
extern "C" {
@@ -25,13 +27,17 @@ void dump_multiboot(uint32_t mb_magic, uint32_t mb_addr);
void dump_gdt();
void kernel_main([[maybe_unused]] uint32_t mb_magic, [[maybe_unused]] uint32_t mb_addr) {
+
#ifdef HAS_SERIAL0
if constexpr (serial0_console)
if (serial0.self_check()) Console::set(&serial0);
#endif
#ifdef HAS_VIDEO0
- if constexpr (video0_console) Console::set(&video0);
+ if (const auto cga_buffer_r = kvmm.map(0xb8000, 0xc03f3000)) {
+ video0.set_buffer(cga_buffer_r.value());
+ if constexpr (video0_console) Console::set(&video0);
+ }
#endif
printk("Hello, kernel World!\n");
@@ -40,12 +46,10 @@ void kernel_main([[maybe_unused]] uint32_t mb_magic, [[maybe_unused]] uint32_t m
// dump_gdt();
//
- vmm kvmm;
- mb_addr = kvmm.map(mb_addr, 0xc03fe000);
-
- dump_multiboot(mb_magic, mb_addr);
- //
- //
+ if (const auto mb_addr_r = kvmm.map(mb_addr, 0xc03fe000)) {
+ mb_addr = mb_addr_r.value();
+ // dump_multiboot(mb_magic, mb_addr);
+ }
GDT gdt;
IDT idt{gdt.descriptor(GDT::kcode)};