From a915ac15a1519c47e75cf407bbf0d7124f2aa7e5 Mon Sep 17 00:00:00 2001 From: xamidev <121681048+xamidev@users.noreply.github.com> Date: Sat, 24 Aug 2024 16:40:23 +0200 Subject: [PATCH] Clean: kmain --- src/kernel/kmain.c | 93 +++++++++++++--------------------------------- src/kernel/kmain.h | 36 ++++++++++++++++++ 2 files changed, 62 insertions(+), 67 deletions(-) create mode 100644 src/kernel/kmain.h diff --git a/src/kernel/kmain.c b/src/kernel/kmain.c index 135eef7..11405d5 100644 --- a/src/kernel/kmain.c +++ b/src/kernel/kmain.c @@ -1,3 +1,8 @@ +// Kernel entry point +// Author: xamidev +// Licensed under the Unlicense. See the repo below. +// https//github.com/xamidev/blankos + #include "../libc/stdio.h" #include "../drivers/serial.h" #include "gdt.h" @@ -7,41 +12,13 @@ #include "../drivers/ata.h" #include #include "../drivers/framebuffer.h" - -typedef struct { - 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; - uint16_t reserved; -} multiboot2_tag_framebuffer; - -typedef struct { - uint32_t total_size; - uint32_t reserved; - uint8_t tags[0]; -} multiboot2_info; - -unsigned int g_multiboot_info_address; - -uint32_t* framebuffer; -int scanline; - -// in characters, not pixels -uint32_t VGA_WIDTH; -uint32_t VGA_HEIGHT; - +#include "kmain.h" void kmain(multiboot2_info *mb_info) { - multiboot2_tag_framebuffer *fb_info = NULL; -uint8_t *tags = mb_info->tags; + uint8_t *tags = mb_info->tags; while (1) { uint32_t tag_type = *((uint32_t*) tags); uint32_t tag_size = *((uint32_t*) (tags + 4)); @@ -54,61 +31,43 @@ uint8_t *tags = mb_info->tags; tags += ((tag_size + 7) & ~7); } - serial_printf(3, "Framebuffer Address: 0x%x\r", fb_info->framebuffer_addr); + serial_printf(3, "Framebuffer Address: 0x%x\r", fb_info->framebuffer_addr); serial_printf(3, "Framebuffer Width: %u\r\n", fb_info->framebuffer_width); serial_printf(3, "Framebuffer Height: %u\r\n", fb_info->framebuffer_height); serial_printf(3, "Framebuffer Pitch: %u\r\n", fb_info->framebuffer_pitch); serial_printf(3, "Framebuffer BPP: %u\r\n", fb_info->framebuffer_bpp); - if (fb_info) { framebuffer = (uint32_t *)(uintptr_t) fb_info->framebuffer_addr; uint32_t width = fb_info->framebuffer_width; uint32_t height = fb_info->framebuffer_height; - //uint32_t pitch = fb_info->framebuffer_pitch; uint32_t bpp = fb_info->framebuffer_bpp; - - //8x16 font, not padded - VGA_WIDTH = width/8; - VGA_HEIGHT = height/16; - - scanline = width * (bpp/8); - - - /* TEST print charset - int y_offset = 2; - for (int i=0; i<512; i++) - { - if (i%(width/9)==0) y_offset++; - draw_char(0+i, 0+i, y_offset, white, black); - } - */ + //8x16 font, not padded + VGA_WIDTH = width/8; + VGA_HEIGHT = height/16; + scanline = width * (bpp/8); } printf("[kernel] multiboot2 info at 0x%x, size=%u\n", mb_info, mb_info->total_size); printf("[kernel] framebuffer discovered at 0x%x\n", fb_info->framebuffer_addr); printf("[kernel] fb0: width=%u, height=%u, pitch=%u, bpp=%u\n", fb_info->framebuffer_width, fb_info->framebuffer_height, fb_info->framebuffer_pitch, fb_info->framebuffer_bpp); - - init_serial(); - gdt_install(); - idt_install(); - isr_install(); - irq_install(); - __asm__ __volatile__("sti"); + init_serial(); + gdt_install(); + idt_install(); + isr_install(); + irq_install(); + __asm__ __volatile__("sti"); - //init_paging(); + //init_paging(); + //test_read_sector(); + //uint32_t *ptr = (uint32_t*)0xA0000000; + //uint32_t do_page_fault = *ptr; - //test_read_sector(); - - //uint32_t *ptr = (uint32_t*)0xA0000000; - //uint32_t do_page_fault = *ptr; - - timer_install(); - keyboard_install(); - printf("[kernel] spawning shell...\n"); - shell_install(); - + timer_install(); + keyboard_install(); + printf("[kernel] spawning shell...\n"); + shell_install(); } diff --git a/src/kernel/kmain.h b/src/kernel/kmain.h new file mode 100644 index 0000000..4d15515 --- /dev/null +++ b/src/kernel/kmain.h @@ -0,0 +1,36 @@ +// Kernel entry point header +// Author: xamidev +// Licensed under the Unlicense. See the repo below. +// https//github.com/xamidev/blankos + +#ifndef KMAIN_H +#define KMAIN_H + +typedef struct { + 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; + uint16_t reserved; +} multiboot2_tag_framebuffer; + +typedef struct { + uint32_t total_size; + uint32_t reserved; + uint8_t tags[0]; +} multiboot2_info; + +unsigned int g_multiboot_info_address; + +uint32_t* framebuffer; +int scanline; + +// in characters, not pixels +uint32_t VGA_WIDTH; +uint32_t VGA_HEIGHT; + +#endif \ No newline at end of file