From 1bd17dce9a8297f86f3bb34b3f440490b601eca6 Mon Sep 17 00:00:00 2001 From: EmulatedSeasons <89668582+EmulatedSeasons@users.noreply.github.com> Date: Fri, 31 May 2024 21:08:22 -0400 Subject: started working on pmm and fixed printf doing weird things to the numbers --- kernel/arch/x86_64/limine.cpp | 45 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 6 deletions(-) (limited to 'kernel/arch/x86_64/limine.cpp') diff --git a/kernel/arch/x86_64/limine.cpp b/kernel/arch/x86_64/limine.cpp index 6d7984e..b592592 100644 --- a/kernel/arch/x86_64/limine.cpp +++ b/kernel/arch/x86_64/limine.cpp @@ -2,10 +2,11 @@ #include #include #include -#include "limine.h" +#include #include "gdt.h" #include "idt.h" #include +#include namespace { __attribute__((used, section(".requests"))) @@ -21,6 +22,24 @@ volatile limine_framebuffer_request framebuffer_request = { }; } +namespace { +__attribute__((used, section(".requests"))) +volatile limine_memmap_request memmap_request = { + .id = LIMINE_MEMMAP_REQUEST, + .revision = 0, + .response = nullptr +}; +} + +namespace { +__attribute__((used, section(".requests"))) +volatile limine_hhdm_request hhdm_request = { + .id = LIMINE_HHDM_REQUEST, + .revision = 0, + .response = nullptr +}; +} + namespace { __attribute__((used, section(".requests_start_marker"))) volatile LIMINE_REQUESTS_START_MARKER; @@ -30,7 +49,7 @@ volatile LIMINE_REQUESTS_END_MARKER; } namespace { -void hcf() { +[[noreturn]] void hcf() { asm("cli"); for (;;) { asm("hlt"); @@ -41,7 +60,7 @@ void hcf() { extern void (*__init_array[])(); extern void (*__init_array_end[])(); -extern "C" void kernel_main(); +void kernel_main(); extern "C" void _start() { asm("cli"); @@ -75,8 +94,12 @@ extern "C" void _start() { hcf(); } + if (memmap_request.response == nullptr) { + hcf(); + } + // Fetch the first framebuffer. - limine_framebuffer *framebuffer = framebuffer_request.response->framebuffers[0]; + limine_framebuffer* framebuffer = framebuffer_request.response->framebuffers[0]; // Note: we assume the framebuffer model is RGB with 32-bit pixels. // for (size_t i = 0; i < 100; i++) { @@ -84,11 +107,10 @@ extern "C" void _start() { // fb_ptr[i * (framebuffer->pitch / 4) + i] = 0xffffff; // } - asm("xchgw %bx, %bx"); fb_init((uint32_t*)framebuffer->address, framebuffer->width, framebuffer->height); draw_pixel(727, 727, 0x9528fd); draw_pixel(0, 0, 0xff0000); - draw_pixel(1919, 1079, 0x00ff00); + draw_pixel(framebuffer->width - 1, framebuffer->height - 1, 0x00ff00); // for (size_t i = 0; i < framebuffer->mode_count; i++) { // printf("Mode %d\n", i); // printf("Pitch %d\nWidth %d\nHeight %d\nbpp %d\nmem_model %d\n", @@ -100,6 +122,17 @@ extern "C" void _start() { printf("Pitch %d\nWidth %d\nHeight %d\nbpp %d\nmem_model %d\n", framebuffer->pitch, framebuffer->width, framebuffer->height, framebuffer->bpp, framebuffer->memory_model); + + limine_memmap_response* memmap = memmap_request.response; + for (int i = 0; i < memmap->entry_count; i++) { + printf("base: %lx\nlength: %lx\ntype: %d\n\n", + memmap->entries[i]->base, memmap->entries[i]->length, memmap->entries[i]->type); + } + + // broken printf mirroring 64 bit values for some reason + //uint64_t tester = 0xFFFE0000000000AE + 1; + //printf("aaaa: %lx\n", tester); + pmm_init(memmap_request.response, hhdm_request.response->offset); kernel_main(); -- cgit v1.2.3-70-g09d2