diff options
Diffstat (limited to 'src/kernel.cc')
-rw-r--r-- | src/kernel.cc | 18 |
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)}; |