diff options
Diffstat (limited to 'source/main.c')
| -rw-r--r-- | source/main.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/source/main.c b/source/main.c new file mode 100644 index 0000000..316274f --- /dev/null +++ b/source/main.c @@ -0,0 +1,51 @@ +#include <stddef.h> +#include <limine.h> +#include "LimineRequests.h" +#include "memory.h" + +static void HaltForever(void) { + while (true) { + asm("hlt"); + } +} + +void KernelMain(void) { + if (!VerifyBaseRevision()) { + HaltForever(); + } + + if (!VerifyStackSizeRequest()) { + HaltForever(); + } + + if (!VerifyFramebufferRequest()) { + HaltForever(); + } + + const uint64_t framebufferCount = + framebufferRequest.response->framebuffer_count; + + struct limine_framebuffer **framebuffers = + framebufferRequest.response->framebuffers; + + struct limine_framebuffer *framebuffer = nullptr; + + const uint32_t colors[] = {0xFF0000, 0x00FF00, 0x0000FF}; + uint8_t count = 0; + uint8_t color = 0; + + for (uint64_t i = 0; i < framebufferCount; i++) { + framebuffer = framebuffers[i]; + volatile uint32_t *fb_ptr = (volatile uint32_t *)framebuffer->address; + for (uint64_t j = 0; j < framebuffer->height && j < framebuffer->width; + j++) { + fb_ptr[j * (framebuffer->pitch / 4) + j] = colors[color]; + if ((count = (count + 1) % 16) == 0) { + color = (color + 1) % 3; + } + } + } + + HaltForever(); +} + |
