diff options
| author | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2025-06-08 15:03:33 -0400 |
|---|---|---|
| committer | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2025-06-08 15:03:33 -0400 |
| commit | a4eef728064cfc3f14396d0ad91f105f12ef32ea (patch) | |
| tree | fc4a4d2f6525705fc4e8ff3c262abcbde0ae6d19 /source/main.c | |
Initial Commit
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(); +} + |
