From d4349352a57eb00ce411b4c0542d3207357aecbe Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Wed, 3 Aug 2022 21:28:15 +0200 Subject: drawing lines to fb --- kernel/main.c | 100 ++++++---------------------------------------------------- 1 file changed, 9 insertions(+), 91 deletions(-) (limited to 'kernel/main.c') diff --git a/kernel/main.c b/kernel/main.c index 79039e6..d868b42 100644 --- a/kernel/main.c +++ b/kernel/main.c @@ -1,102 +1,20 @@ #include - -struct mb2_tag_header { - uint32_t type; - uint32_t size; -} __attribute__((packed, aligned(8))); -typedef struct mb2_tag_header mb2_tag_header; - -struct mb2_tag_fb { - uint32_t type; - uint32_t size; - uint64_t framebuffer_addr; - uint32_t framebuffer_pitch; - uint32_t framebuffer_width; - uint32_t framebuffer_height; - uint8_t framebuffer_bpp; - uint8_t framebuffer_type; -} __attribute__((packed, aligned(8))); -typedef struct mb2_tag_fb mb2_tag_fb; - -// multiboot2 magic check -#define MB2_MAGIC 0x36D76289 - -// multiboot2 tag -#define MB2_TAG_END 0 -#define MB2_TAG_CMDLINE 1 -#define MB2_TAG_BOOTLOADER 2 -#define MB2_TAG_MODULES 3 -#define MB2_TAG_MEM 4 -#define MB2_TAG_BIOS 5 -#define MB2_TAG_MMAP 6 -#define MB2_TAG_VBE 7 -#define MB2_TAG_FB 8 - -void breakpoint(void) -{ - __asm__ volatile ("xchgw %bx, %bx;"); -} - -void put_in_r8(uint64_t value) -{ - __asm__ volatile ("movq %0, %%r8;" : : "r"(value) : "%r8"); -} - -void put_in_r9(uint64_t value) -{ - __asm__ volatile ("movq %0, %%r9;" : : "r"(value) : "%r9"); -} - -void put_in_r10(uint64_t value) -{ - __asm__ volatile ("movq %0, %%r10;" : : "r"(value) : "%r10"); -} +#include +#include +#include int kernel_main(mb2_tag_header* multiboot_bootinfo, uint32_t multiboot_magic) { - if (multiboot_magic != MB2_MAGIC) { - // not loaded by multiboot2 bootloader - __asm__ volatile ("hlt;"); - } - - // we will store framebuffer information here - static mb2_tag_fb* tag_fb; + init_fb(multiboot_bootinfo, multiboot_magic); - // skip first 8 bytes (total_size + reserved) - mb2_tag_header* tag_header = multiboot_bootinfo + 1; - - while (tag_header->type != MB2_TAG_END) { - // process tag_type - switch(tag_header->type) { - case MB2_TAG_FB: - tag_fb = (mb2_tag_fb*)tag_header; - break; - default: - break; + static uint32_t color = BLACK; + for (uint32_t x = 0 ; x < fb.width; x++) { + for (uint32_t y = 0; y < fb.height; y++) { + fb_draw_pixel(fb, x, y, color); } - - // next mb2_tag - tag_header += tag_header->size / 8 + ((tag_header->size % 8) > 0); } - uint64_t* framebuffer_addr = (uint64_t*)tag_fb->framebuffer_addr; - uint32_t framebuffer_width = tag_fb->framebuffer_width; - uint32_t framebuffer_height = tag_fb->framebuffer_height; - //uint8_t framebuffer_bpp = tag_fb->framebuffer_bpp; - uint32_t framebuffer_pitch = tag_fb->framebuffer_pitch; - - put_in_r8(framebuffer_width); - put_in_r9(framebuffer_height); - put_in_r10(framebuffer_pitch); - breakpoint(); - - uint32_t value = 0x0000; - for (uint32_t x = 0 ; x < framebuffer_width; x++) { - for (uint32_t y = 0; y < framebuffer_height; y++) { - framebuffer_addr[y*framebuffer_width + x] = value; - value += 0x250; - } - } + fb_draw_line(fb, 0, 0, 100, 1200, WHITE); return 0; } -- cgit v1.2.3