diff --git a/OVMFbin/OVMF_VARS-pure-efi.fd b/OVMFbin/OVMF_VARS-pure-efi.fd index 2f064e1..bd3a30a 100644 Binary files a/OVMFbin/OVMF_VARS-pure-efi.fd and b/OVMFbin/OVMF_VARS-pure-efi.fd differ diff --git a/kernel/Makefile b/kernel/Makefile index 63d9893..aade3a8 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -59,4 +59,4 @@ buildimg: mcopy -i $(BUILDDIR)/$(OSNAME).img $(BUILDDIR)/zap-light18.psf :: run: - qemu-system-x86_64 -drive file=$(BUILDDIR)/$(OSNAME).img -m 256M -cpu qemu64 -drive if=pflash,format=raw,unit=0,file="$(OVMFDIR)/OVMF_CODE-pure-efi.fd",readonly=on -drive if=pflash,format=raw,unit=1,file="$(OVMFDIR)/OVMF_VARS-pure-efi.fd" -net none + qemu-system-x86_64 -drive file=$(BUILDDIR)/$(OSNAME).img -m 64M -cpu qemu64 -drive if=pflash,format=raw,unit=0,file="$(OVMFDIR)/OVMF_CODE-pure-efi.fd",readonly=on -drive if=pflash,format=raw,unit=1,file="$(OVMFDIR)/OVMF_VARS-pure-efi.fd" -net none diff --git a/kernel/bin/CustomOS.img b/kernel/bin/CustomOS.img index 79e7e65..08576d5 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 2d78f51..7a0b321 100755 Binary files a/kernel/bin/kernel.elf and b/kernel/bin/kernel.elf differ diff --git a/kernel/lib/PageFrameAllocator.o b/kernel/lib/PageFrameAllocator.o index e5571e5..c0e72b0 100644 Binary files a/kernel/lib/PageFrameAllocator.o and b/kernel/lib/PageFrameAllocator.o differ diff --git a/kernel/lib/kernel.o b/kernel/lib/kernel.o index cd7fadc..4958209 100644 Binary files a/kernel/lib/kernel.o and b/kernel/lib/kernel.o differ diff --git a/kernel/src/PageFrameAllocator.cpp b/kernel/src/PageFrameAllocator.cpp index b30ee5f..03c8d44 100644 --- a/kernel/src/PageFrameAllocator.cpp +++ b/kernel/src/PageFrameAllocator.cpp @@ -115,6 +115,16 @@ void PageFrameAllocator::ReservePages(void* address, uint64_t pageCount) { } } +void* PageFrameAllocator::RequestPage() { + for (uint64_t index = 0; index < PageBitmap.Size * 8; index++) { + if (PageBitmap[index] == true) continue; + + LockPage((void*)(index * 4096)); + return (void*)(index * 4096); + } + + return NULL; // page frame swap to file +} uint64_t PageFrameAllocator::GetFreeRAM() { return freeMemory; diff --git a/kernel/src/PageFrameAllocator.h b/kernel/src/PageFrameAllocator.h index 67f3da2..41fe2b0 100644 --- a/kernel/src/PageFrameAllocator.h +++ b/kernel/src/PageFrameAllocator.h @@ -13,6 +13,7 @@ class PageFrameAllocator { void FreePages(void* address, uint64_t pageCount); void LockPage(void* address); void LockPages(void* address, uint64_t pageCount); + void* RequestPage(); uint64_t GetFreeRAM(); uint64_t GetUsedRAM(); uint64_t GetReservedRAM(); diff --git a/kernel/src/kernel.cpp b/kernel/src/kernel.cpp index 6d417de..e276aa8 100644 --- a/kernel/src/kernel.cpp +++ b/kernel/src/kernel.cpp @@ -44,6 +44,13 @@ 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)));