aboutsummaryrefslogtreecommitdiff
path: root/src/kernel.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel.cc')
-rw-r--r--src/kernel.cc21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/kernel.cc b/src/kernel.cc
index 3110419..05e0daf 100644
--- a/src/kernel.cc
+++ b/src/kernel.cc
@@ -10,6 +10,7 @@
#include <stdlib.h>
#include <types.h>
+#include "allocator.h"
#include "cga.h"
#include "cpu/cpu.h"
#include "gdt.h"
@@ -23,12 +24,15 @@
vmm kvmm;
#include "hardware.h"
+char buffer[4096];
+
+uint32_t check_multiboot(uint32_t, uint32_t);
+
extern "C" {
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) {
-
+void kernel_main(uint32_t mb_magic, uint32_t mb_addr) {
#ifdef HAS_SERIAL0
if constexpr (serial0_console)
if (serial0.self_check()) Console::set(&serial0);
@@ -52,8 +56,16 @@ void kernel_main([[maybe_unused]] uint32_t mb_magic, [[maybe_unused]] uint32_t m
// dump_gdt();
//
- if (const auto mb_addr_r = kvmm.map(mb_addr, 0xc03fe000)) {
+ {
+ const auto mb_addr_r = kvmm.map(mb_addr, 0xc03fe000);
+ runtime_assert(mb_addr_r, "Failed to map mb_addr");
+
mb_addr = mb_addr_r.value();
+ const auto mb_size = check_multiboot(mb_magic, mb_addr);
+ runtime_assert((mb_size != 0), "Invalid multiboot header");
+
+ printk("Multiboot2 header at ", uhex{mb_addr}, " size: ", mb_size, '\n');
+
// dump_multiboot(mb_magic, mb_addr);
}
@@ -62,6 +74,9 @@ void kernel_main([[maybe_unused]] uint32_t mb_magic, [[maybe_unused]] uint32_t m
// Scheduler s{gdt.descriptor(GDT::kcode)};
Keyboard kb;
+ MemoryAllocator ma(reinterpret_cast<uint32_t>(buffer), sizeof(buffer));
+ printk("memory free: ", ma.free_space(), '\n');
+
idt.enable();
while (true) asm volatile("hlt");