From b7b97d32cbb6fbc928078ebe3a00714cbbebea86 Mon Sep 17 00:00:00 2001 From: EmulatedSeasons <89668582+EmulatedSeasons@users.noreply.github.com> Date: Fri, 29 Dec 2023 01:38:34 -0500 Subject: got grub memory map and added to kernel printf --- kernel/arch/i386/multiboot.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 kernel/arch/i386/multiboot.cpp (limited to 'kernel/arch/i386/multiboot.cpp') diff --git a/kernel/arch/i386/multiboot.cpp b/kernel/arch/i386/multiboot.cpp new file mode 100644 index 0000000..4ce94df --- /dev/null +++ b/kernel/arch/i386/multiboot.cpp @@ -0,0 +1,29 @@ +#include +#include +#include +#include "multiboot.h" +#include + +// gets the memory map and stuff +extern "C" void multiboot_main(multiboot_info_t* mbd, uint32_t magic) { + terminal_initialize(); + if (magic != MULTIBOOT_BOOTLOADER_MAGIC) { + printf("Invalid multiboot magic number\n"); + abort(); + } + + // checks bit 6 to see if there's a valid memory map + if (!(mbd->flags >> 6 & 0x1)) { + printf("Invalid GRUB memory map\n"); + abort(); + } + + // loop through memory map and display the values + for (int i = 0; i < mbd->mmap_length; i += sizeof(multiboot_memory_map_t)) { + multiboot_memory_map_t* mmmt = (multiboot_memory_map_t*)(mbd->mmap_addr + i); + + printf("Start Addr: 0x%lx | Length: 0x%lx | Size: 0x%x | Type: %d\n", + mmmt->addr, mmmt->len, mmmt->size, mmmt->type); + //printf("%lx,%x,%x,%d\n", mmmt->size, mmmt->size, mmmt->size, mmmt->size); + } +} \ No newline at end of file -- cgit v1.2.3-70-g09d2