diff --git a/OVMFbin/OVMF_VARS-pure-efi.fd b/OVMFbin/OVMF_VARS-pure-efi.fd index bd3a30a..21c2b99 100644 Binary files a/OVMFbin/OVMF_VARS-pure-efi.fd and b/OVMFbin/OVMF_VARS-pure-efi.fd differ diff --git a/kernel/bin/CustomOS.img b/kernel/bin/CustomOS.img index 08576d5..cf75e47 100644 Binary files a/kernel/bin/CustomOS.img and b/kernel/bin/CustomOS.img differ diff --git a/kernel/bin/kernel.elf b/kernel/bin/kernel.elf index 7a0b321..4c57006 100755 Binary files a/kernel/bin/kernel.elf and b/kernel/bin/kernel.elf differ diff --git a/kernel/kernel.ld b/kernel/kernel.ld index 3b95efa..ab646ab 100644 --- a/kernel/kernel.ld +++ b/kernel/kernel.ld @@ -3,6 +3,7 @@ ENTRY(_start) SECTIONS { + _KernelStart = .; .text : ALIGN(0x1000) { *(.text) @@ -20,4 +21,5 @@ SECTIONS *(COMMON) *(.bss) } + _KernelEnd = .; } \ No newline at end of file diff --git a/kernel/lib/kernel.o b/kernel/lib/kernel.o index 4958209..cafe99c 100644 Binary files a/kernel/lib/kernel.o and b/kernel/lib/kernel.o differ diff --git a/kernel/src/kernel.cpp b/kernel/src/kernel.cpp index e276aa8..2bc3832 100644 --- a/kernel/src/kernel.cpp +++ b/kernel/src/kernel.cpp @@ -20,7 +20,10 @@ struct BootInfo { extern "C" void __stack_chk_fail(void) { return; } -uint8_t testBuffer[20]; + +extern uint64_t _KernelStart; +extern uint64_t _KernelEnd; + extern "C" void _start(BootInfo* bootInfo) { BasicRenderer newRenderer = BasicRenderer(bootInfo->framebuffer, bootInfo->psf1_Font); @@ -31,6 +34,13 @@ extern "C" void _start(BootInfo* bootInfo) { PageFrameAllocator newAllocator; newAllocator.ReadEFIMemoryMap(bootInfo->mMap, bootInfo->mMapSize, bootInfo->mMapDescriptorSize); + // ensure we don't absolutely fuck shit up + uint64_t kernelSize = (uint64_t)&_KernelEnd - (uint64_t)&_KernelStart; + uint64_t kernelPages = (uint64_t)kernelSize / 4096 + 1; + + newAllocator.LockPages(&_KernelStart, kernelPages); + + // print out ram info newRenderer.Print(0xFFFFFFFF, "Free RAM: "); newRenderer.Print(0xFF00FFFF, to_string(newAllocator.GetFreeRAM() / 1024)); newRenderer.Print(0xFF00FFFF, " KB"); @@ -44,24 +54,5 @@ extern "C" void _start(BootInfo* bootInfo) { newRenderer.Print(0xFF00FFFF, " KB"); newRenderer.cursorPosition = {0, newRenderer.cursorPosition.y + 18}; - for (int t = 0; t < 20; t++) { - void* address = newAllocator.RequestPage(); - newRenderer.Print(0xFFFFFFFF, "0x"); - newRenderer.Print(0xFFFFFFFF, to_hstring((uint64_t)address)); - newRenderer.cursorPosition = {0, newRenderer.cursorPosition.y + 18}; - } - - //newRenderer.Print(0xFFFFFFFF, to_string(GetMemorySize(bootInfo->mMap, mMapEntries, bootInfo ->mMapDescriptorSize))); - - - // for (int i = 0; i < mMapEntries; i++) { - // EFI_MEMORY_DESCRIPTOR* desc = (EFI_MEMORY_DESCRIPTOR*)((uint64_t)bootInfo ->mMap (i * bootinfo->mMapDescriptorSize)); - // newRenderer.Print(0xFFFFFFFF, EFI_MEMORY_TYPE_STRINGS[desc->type]); - // newRenderer.Print(0xFFFFFFFF, " "); - // newRenderer.Print(0xFFFF00FF, to_string(desc->numPages * 4096 / 1024)); - // newRenderer.Print(0xFFFF00FF, " KB"); - // newRenderer.cursorPosition = {0, newRenderer.cursorPosition.y + 18}; - // } - return; } \ No newline at end of file