From 12067b8e1a98e3ce09bfb4a830ab665a122bb905 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Wed, 13 Apr 2022 17:12:16 -0400 Subject: [PATCH] Remove src-old --- src-old/boot.S | 18 --- src-old/fb.c | 116 --------------- src-old/fb.h | 16 --- src-old/fb_text.c | 11 -- src-old/fb_text.h | 8 -- src-old/gdt.S | 16 --- src-old/gdt.c | 20 --- src-old/gdt.h | 34 ----- src-old/hos_main.c | 25 ---- src-old/hos_printf.c | 281 ------------------------------------- src-old/hos_printf.h | 10 -- src-old/klog.c | 103 -------------- src-old/klog.h | 7 - src-old/link.ld | 41 ------ src-old/mbinfo.c | 100 ------------- src-old/mbinfo.h | 10 -- src-old/mem.h | 49 ------- src-old/mm.c | 91 ------------ src-old/mm.h | 25 ---- src-old/multiboot2.h | 127 ----------------- src-old/multiboot_header.c | 12 -- src-old/stream.h | 12 -- src-old/string.h | 26 ---- 23 files changed, 1158 deletions(-) delete mode 100644 src-old/boot.S delete mode 100644 src-old/fb.c delete mode 100644 src-old/fb.h delete mode 100644 src-old/fb_text.c delete mode 100644 src-old/fb_text.h delete mode 100644 src-old/gdt.S delete mode 100644 src-old/gdt.c delete mode 100644 src-old/gdt.h delete mode 100644 src-old/hos_main.c delete mode 100644 src-old/hos_printf.c delete mode 100644 src-old/hos_printf.h delete mode 100644 src-old/klog.c delete mode 100644 src-old/klog.h delete mode 100644 src-old/link.ld delete mode 100644 src-old/mbinfo.c delete mode 100644 src-old/mbinfo.h delete mode 100644 src-old/mem.h delete mode 100644 src-old/mm.c delete mode 100644 src-old/mm.h delete mode 100644 src-old/multiboot2.h delete mode 100644 src-old/multiboot_header.c delete mode 100644 src-old/stream.h delete mode 100644 src-old/string.h diff --git a/src-old/boot.S b/src-old/boot.S deleted file mode 100644 index 6e6228c..0000000 --- a/src-old/boot.S +++ /dev/null @@ -1,18 +0,0 @@ -.global hos_start -.type hos_start, @function -hos_start: - /* Set stack pointer. */ - mov $_stack_end, %esp - - /* Jump to C. */ - push $0 - push $0 - push $0 - push %ebx - call hos_main - - cli -1: hlt - jmp 1b - -.size hos_start, . - hos_start diff --git a/src-old/fb.c b/src-old/fb.c deleted file mode 100644 index a8d089d..0000000 --- a/src-old/fb.c +++ /dev/null @@ -1,116 +0,0 @@ -#include "fb.h" -#include -#include "mem.h" - -static struct { - uint32_t * addr; - uint32_t width; - uint32_t height; - uint32_t pitch; -} fb; - -static inline uint32_t build_pixel(uint8_t r, uint8_t g, uint8_t b) -{ - return (r << 16u) | (g << 8u) | b; -} - -static inline void fb_set_pixel(int x, int y, uint8_t r, uint8_t g, uint8_t b) -{ - fb.addr[fb.pitch * y + x] = build_pixel(r, g, b); -} - -void fb_clear(void) -{ - memset32(fb.addr, 0u, fb.pitch * fb.height); -} - -void fb_init(uint32_t * addr, uint32_t width, uint32_t height, uint32_t pitch) -{ - fb.addr = addr; - fb.width = width; - fb.height = height; - fb.pitch = pitch / 4u; - fb_clear(); -} - -uint32_t * fb_addr(void) -{ - return fb.addr; -} - -bool fb_ready(void) -{ - return fb.addr != NULL; -} - -uint32_t fb_width(void) -{ - return fb.width; -} - -uint32_t fb_height(void) -{ - return fb.height; -} - -void fb_blend_alpha8(const uint8_t * bitmap, int width, int height, int pitch, int x, int y, uint8_t r, uint8_t g, uint8_t b) -{ - if (((x + width) <= 0) || (x >= (int)fb.width) || ((y + height) <= 0) || (y >= (int)fb.height)) - { - return; - } - if (x < 0) - { - width += x; - bitmap += (-x); - x = 0; - } - if (y < 0) - { - height += y; - bitmap += ((-y) * pitch); - y = 0; - } - if ((x + width) > (int)fb.width) - { - width = (int)fb.width - x; - } - if ((y + height) > (int)fb.height) - { - height = (int)fb.height - y; - } - uint32_t * target = &fb.addr[fb.pitch * y + x]; - for (int row = 0; row < height; row++) - { - for (int col = 0; col < width; col++) - { - uint32_t alpha = bitmap[col]; - uint32_t current_pixel = target[col]; - uint8_t cr = (current_pixel >> 16u) & 0xFFu; - uint8_t cg = (current_pixel >> 8u) & 0xFFu; - uint8_t cb = current_pixel & 0xFFu; - uint8_t pr = alpha * r / 255u; - uint8_t pg = alpha * g / 255u; - uint8_t pb = alpha * b / 255u; - uint32_t current_alpha = 255u - alpha; - uint32_t pixel = build_pixel( - pr + current_alpha * cr / 255u, - pg + current_alpha * cg / 255u, - pb + current_alpha * cb / 255u); - target[col] = pixel; - } - bitmap += pitch; - target += fb.pitch; - } -} - -void fb_fill(int x, int y, int width, int height, uint8_t r, uint8_t g, uint8_t b) -{ - uint32_t * target = &fb.addr[fb.pitch * y + x]; - uint32_t pixel = build_pixel(r, g, b); - for (int row = 0; row < height; row++) - { - memset32(target, pixel, width); - target += fb.pitch; - } -} diff --git a/src-old/fb.h b/src-old/fb.h deleted file mode 100644 index fe83875..0000000 --- a/src-old/fb.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef FB_H -#define FB_H - -#include -#include - -void fb_init(uint32_t * addr, uint32_t width, uint32_t height, uint32_t pitch); -bool fb_ready(void); -uint32_t * fb_addr(void); -uint32_t fb_width(void); -uint32_t fb_height(void); -void fb_blend_alpha8(const uint8_t * bitmap, int width, int height, int pitch, int x, int y, uint8_t r, uint8_t g, uint8_t b); -void fb_fill(int x, int y, int width, int height, uint8_t r, uint8_t g, uint8_t b); -void fb_clear(void); - -#endif diff --git a/src-old/fb_text.c b/src-old/fb_text.c deleted file mode 100644 index ea6c697..0000000 --- a/src-old/fb_text.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "fb_text.h" -#include "kfont.h" -#include "fb.h" - -void fb_text_render_char(int c, int x, int y, uint8_t r, uint8_t g, uint8_t b) -{ - const fontgen_char_info_t * char_info = kfont.char_infos[c]; - y += kfont.line_height - kfont.baseline_offset - char_info->top; - x += char_info->left; - fb_blend_alpha8(char_info->bitmap, char_info->width, char_info->height, char_info->width, x, y, r, g, b); -} diff --git a/src-old/fb_text.h b/src-old/fb_text.h deleted file mode 100644 index 42dcc85..0000000 --- a/src-old/fb_text.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef FB_TEXT_H -#define FB_TEXT_H - -#include - -void fb_text_render_char(int c, int x, int y, uint8_t r, uint8_t g, uint8_t b); - -#endif diff --git a/src-old/gdt.S b/src-old/gdt.S deleted file mode 100644 index b0dcfb9..0000000 --- a/src-old/gdt.S +++ /dev/null @@ -1,16 +0,0 @@ -.global gdt_set -.extern gdtr -.type gdt_set, @function -gdt_set: - lgdt gdtr - jmp $0x8, $gdt_set_reload -gdt_set_reload: - mov $0x10, %ax - mov %ax, %ds - mov %ax, %es - mov %ax, %fs - mov %ax, %gs - mov %ax, %ss - ret - -.size gdt_set, . - gdt_set diff --git a/src-old/gdt.c b/src-old/gdt.c deleted file mode 100644 index 0bba535..0000000 --- a/src-old/gdt.c +++ /dev/null @@ -1,20 +0,0 @@ -#include "gdt.h" - -static const gdt_entry_t gdt_entries[] = { - /* Null descriptor */ - 0u, - /* Code segment for kernel */ - gdt_build_entry(0u, 0xFFFFFu, 1u, 0u, 1u, 1u, 0u, 1u, 0u, 1u, 1u, 0u), - /* Data segment for kernel */ - gdt_build_entry(0u, 0xFFFFFu, 1u, 0u, 1u, 0u, 0u, 1u, 0u, 1u, 1u, 0u), -}; - -gdtr_t gdtr; - -void gdt_init(void) -{ - gdtr.size = sizeof(gdt_entries); - gdtr.offset_lower = (uintptr_t)gdt_entries & 0xFFFFu; - gdtr.offset_upper = (uintptr_t)gdt_entries >> 16u; - gdt_set(); -} diff --git a/src-old/gdt.h b/src-old/gdt.h deleted file mode 100644 index ef3bcc8..0000000 --- a/src-old/gdt.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef GDT_H -#define GDT_H - -#include - -typedef struct { - uint16_t size; - uint16_t offset_lower; - uint16_t offset_upper; - uint16_t _reserved; -} gdtr_t; - -typedef uint64_t gdt_entry_t; -#define gdt_build_entry(base, limit, pr, privl, s, ex, dc, rw, ac, gr, sz, l) \ - (gdt_entry_t)( \ - (((gdt_entry_t)base << 32) & 0xFF00000000000000ull) | /* Base 0:15 */ \ - (((gdt_entry_t)gr & 0x1u) << 55) | /* Granularity (0 = bytes, 1 = blocks) */ \ - (((gdt_entry_t)sz & 0x1u) << 54) | /* Size (0 = 16-bit, 1 = 32-bit) */ \ - (((gdt_entry_t)l & 0x1u) << 53) | /* L flag (x86_64 code) */ \ - (((gdt_entry_t)limit << 32) & 0x000F000000000000ull) | /* Limit 16:19 */ \ - (((gdt_entry_t)pr & 0x1u) << 47) | /* Present flag */ \ - (((gdt_entry_t)privl & 0x3u) << 45) | /* Privilege (ring level) */ \ - (((gdt_entry_t)s & 0x1u) << 44) | /* Type (0 = system, 1 = code/data) */ \ - (((gdt_entry_t)ex & 0x1u) << 43) | /* Executable flag */ \ - (((gdt_entry_t)dc & 0x1u) << 42) | /* Direction/Conforming */ \ - (((gdt_entry_t)rw & 0x1u) << 41) | /* Readable/Writable */ \ - (((gdt_entry_t)ac & 0x1u) << 40) | /* Accessed flag */ \ - (((gdt_entry_t)base << 16) & 0x000000FFFFFF0000ull) | /* Base 0:23 */ \ - ((gdt_entry_t)limit & 0x000000000000FFFFull)) /* Limit 0:15 */ - -void gdt_init(void); -void gdt_set(void); - -#endif diff --git a/src-old/hos_main.c b/src-old/hos_main.c deleted file mode 100644 index 208eec0..0000000 --- a/src-old/hos_main.c +++ /dev/null @@ -1,25 +0,0 @@ -#include -#include "fb.h" -#include "mbinfo.h" -#include "klog.h" -#include "gdt.h" -#include "mm.h" - -void hos_main(uint32_t mbinfo_addr) -{ - gdt_init(); - if (!mbinfo_init(mbinfo_addr)) - { - return; - } - if (!fb_ready()) - { - return; - } - klog_init(); - klog_printf("Welcome to HOS!\n"); - mm_init(); - mbinfo_load(); - klog_printf("Found %dKB of usable RAM\n", mm_get_total_ram() / 1024u); - klog_printf("Kernel is %dKB at 0x%x\n", mm_get_kernel_size() / 1024u, mm_get_kernel_address()); -} diff --git a/src-old/hos_printf.c b/src-old/hos_printf.c deleted file mode 100644 index aa1f899..0000000 --- a/src-old/hos_printf.c +++ /dev/null @@ -1,281 +0,0 @@ -#include "hos_printf.h" -#include -#include -#include "string.h" - -static size_t format_dec(char * buffer, int32_t v) -{ - size_t sz = 0u; - bool printing = false; - if (v < 0) - { - buffer[sz++] = '-'; - v = -v; - } - for (int32_t div = 1000000000; div >= 1; div /= 10) - { - int32_t digit = v / div; - v %= div; - if ((digit != 0) || (div == 1)) - { - printing = true; - } - if (printing) - { - buffer[sz++] = digit + '0'; - } - } - return sz; -} - -static size_t format_dec64(char * buffer, int64_t v) -{ - size_t sz = 0u; - bool printing = false; - if (v < 0) - { - buffer[sz++] = '-'; - v = -v; - } - for (int64_t div = 1000000000000000000; div >= 1; div /= 10) - { - int64_t digit = v / div; - v %= div; - if ((digit != 0) || (div == 1)) - { - printing = true; - } - if (printing) - { - buffer[sz++] = digit + '0'; - } - } - return sz; -} - -static size_t format_udec(char * buffer, int32_t v) -{ - size_t sz = 0u; - for (int32_t div = 1000000000u; div >= 1u; div /= 10u) - { - int32_t digit = v / div; - v %= div; - if ((digit != 0) || (sz > 0u) || (div == 1)) - { - buffer[sz++] = digit + '0'; - } - } - return sz; -} - -static size_t format_udec64(char * buffer, uint64_t v) -{ - size_t sz = 0u; - for (uint64_t div = 10000000000000000000u; div >= 1u; div /= 10u) - { - uint64_t digit = v / div; - v %= div; - if ((digit != 0) || (sz > 0u) || (div == 1)) - { - buffer[sz++] = digit + '0'; - } - } - return sz; -} - -static size_t format_hex(char * buffer, uint32_t v, bool upper) -{ - const char upper_hex[] = "0123456789ABCDEF"; - const char lower_hex[] = "0123456789abcdef"; - size_t sz = 0u; - for (int i = 28; i >= 0; i -= 4) - { - uint8_t n = (v >> i) & 0xFu; - if ((sz > 0u) || (n != 0u) || (i == 0)) - { - buffer[sz] = upper ? upper_hex[n] : lower_hex[n]; - sz++; - } - } - return sz; -} - -static size_t format_hex64(char * buffer, uint64_t v, bool upper) -{ - const char upper_hex[] = "0123456789ABCDEF"; - const char lower_hex[] = "0123456789abcdef"; - size_t sz = 0u; - for (int i = 60; i >= 0; i -= 4) - { - uint8_t n = (v >> i) & 0xFu; - if ((sz > 0u) || (n != 0u) || (i == 0)) - { - buffer[sz] = upper ? upper_hex[n] : lower_hex[n]; - sz++; - } - } - return sz; -} - -static void pad_write(const stream_t * stream, const char * data, size_t length, bool leading_zero, bool left_just, size_t width) -{ - if (left_just) - { - stream->write(data, length); - while (length < width) - { - stream->write1(' '); - length++; - } - } - else - { - char fill = leading_zero ? '0' : ' '; - size_t l = length; - while (l < width) - { - stream->write1(fill); - l++; - } - stream->write(data, length); - } -} - -void hos_vprintf(const stream_t * stream, const char * fmt, va_list va) -{ - bool in_conv = false; - char c; - char buffer[22]; - size_t width; - bool leading_zero; - bool left_just; - bool long_flag; - size_t length; - while ((c = *fmt)) - { - if (in_conv) - { - switch (c) - { - case '%': - stream->write1('%'); - break; - case 'X': - { - if (long_flag) - { - uint64_t v = va_arg(va, uint64_t); - length = format_hex(buffer, v, true); - } - else - { - uint32_t v = va_arg(va, uint32_t); - length = format_hex(buffer, v, true); - } - pad_write(stream, buffer, length, leading_zero, left_just, width); - } - break; - case 'c': - { - char ch = va_arg(va, int); - pad_write(stream, &ch, 1u, leading_zero, left_just, width); - } - break; - case 'd': - { - if (long_flag) - { - int64_t v = va_arg(va, int64_t); - length = format_dec64(buffer, v); - } - else - { - int32_t v = va_arg(va, int32_t); - length = format_dec(buffer, v); - } - pad_write(stream, buffer, length, leading_zero, left_just, width); - } - break; - case 's': - { - const char * s = va_arg(va, const char *); - pad_write(stream, s, strlen(s), leading_zero, left_just, width); - } - break; - case 'u': - { - if (long_flag) - { - uint64_t v = va_arg(va, uint64_t); - length = format_udec64(buffer, v); - } - else - { - uint32_t v = va_arg(va, uint32_t); - length = format_udec(buffer, v); - } - pad_write(stream, buffer, length, leading_zero, left_just, width); - } - break; - case 'x': - { - if (long_flag) - { - uint64_t v = va_arg(va, uint64_t); - length = format_hex64(buffer, v, false); - } - else - { - uint32_t v = va_arg(va, uint32_t); - length = format_hex(buffer, v, false); - } - pad_write(stream, buffer, length, leading_zero, left_just, width); - } - break; - } - in_conv = false; - } - else if (c == '%') - { - in_conv = true; - width = 0u; - leading_zero = false; - left_just = false; - long_flag = false; - if (fmt[1] == '-') - { - left_just = true; - fmt++; - } - if (fmt[1] == '0') - { - leading_zero = true; - fmt++; - } - while (('0' <= fmt[1]) && (fmt[1] <= '9')) - { - width *= 10u; - width += (fmt[1] - '0'); - fmt++; - } - if (fmt[1] == 'l') - { - long_flag = true; - fmt++; - } - } - else - { - stream->write1(c); - } - fmt++; - } -} - -void hos_printf(const stream_t * stream, const char * fmt, ...) -{ - va_list va; - va_start(va, fmt); - hos_vprintf(stream, fmt, va); - va_end(va); -} diff --git a/src-old/hos_printf.h b/src-old/hos_printf.h deleted file mode 100644 index 64442cd..0000000 --- a/src-old/hos_printf.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef HOS_PRINTF_H -#define HOS_PRINTF_H - -#include "stream.h" -#include - -void hos_vprintf(const stream_t * stream, const char * fmt, va_list va); -void hos_printf(const stream_t * stream, const char * fmt, ...); - -#endif diff --git a/src-old/klog.c b/src-old/klog.c deleted file mode 100644 index 8b31302..0000000 --- a/src-old/klog.c +++ /dev/null @@ -1,103 +0,0 @@ -#include -#include -#include -#include -#include "klog.h" -#include "kfont.h" -#include "fb.h" -#include "fb_text.h" -#include "stream.h" -#include "hos_printf.h" -#include "mem.h" - -static struct { - size_t console_width; - size_t console_height; - size_t x; - size_t y; - bool need_shift; -} klog; - -static void shift_line(void) -{ - uint32_t * fb = fb_addr(); - uint32_t w = fb_width(); - size_t console_fb_line_words = w * kfont.line_height; - for (size_t row = 0u; row < klog.console_height; row++) - { - memcpy32(fb, fb + console_fb_line_words, console_fb_line_words); - fb += console_fb_line_words; - } - fb_fill(0, kfont.line_height * (klog.console_height - 1u), w, kfont.line_height, 0u, 0x2Cu, 0x55u); -} - -static void klog_fb_write1(char c) -{ - if (klog.need_shift) - { - shift_line(); - klog.need_shift = false; - } - if (c == '\n') - { - if (klog.y == (klog.console_height - 1u)) - { - klog.need_shift = true; - } - else - { - klog.y++; - } - klog.x = 0u; - } - else - { - int px = klog.x * kfont.advance; - int py = klog.y * kfont.line_height; - fb_text_render_char(c, px, py, 0xFFu, 0x80u, 0u); - klog.x++; - if (klog.x == klog.console_width) - { - if (klog.y == (klog.console_height - 1u)) - { - klog.need_shift = true; - } - else - { - klog.y++; - } - klog.x = 0u; - } - } -} - -static void klog_fb_write(const char * src, size_t length) -{ - for (size_t i = 0u; i < length; i++) - { - klog_fb_write1(src[i]); - } -} - -static const stream_t klog_fb_stream = { - klog_fb_write, - klog_fb_write1, -}; - -void klog_init(void) -{ - klog.console_width = fb_width() / kfont.advance; - klog.console_height = fb_height() / kfont.line_height; - klog.x = 0u; - klog.y = 0u; - klog.need_shift = false; - fb_fill(0, 0, fb_width(), fb_height(), 0u, 0x2Cu, 0x55u); -} - -void klog_printf(const char * fmt, ...) -{ - va_list va; - va_start(va, fmt); - hos_vprintf(&klog_fb_stream, fmt, va); - va_end(va); -} diff --git a/src-old/klog.h b/src-old/klog.h deleted file mode 100644 index 57a0a2a..0000000 --- a/src-old/klog.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef KLOG_H -#define KLOG_H - -void klog_init(void); -void klog_printf(const char * fmt, ...); - -#endif diff --git a/src-old/link.ld b/src-old/link.ld deleted file mode 100644 index cc94e12..0000000 --- a/src-old/link.ld +++ /dev/null @@ -1,41 +0,0 @@ -ENTRY(hos_start) - -SECTIONS -{ - . = 1M; - _hos_mem_start = .; - - .text BLOCK(4K) : ALIGN(4K) - { - *(.multiboot) - *(.text) - } - - .rodata BLOCK(4K) : ALIGN(4K) - { - *(.rodata) - } - - .data BLOCK(4K) : ALIGN(4K) - { - *(.data) - } - - _stack_size = 16K; - .stack (NOLOAD) : ALIGN(4K) - { - _stack_start = .; - . = . + _stack_size; - _stack_end = .; - } - - .bss BLOCK(4K) : ALIGN(4K) - { - *(COMMON) - *(.bss) - } - - . = ALIGN(4K); - - _hos_mem_end = .; -} diff --git a/src-old/mbinfo.c b/src-old/mbinfo.c deleted file mode 100644 index 9133410..0000000 --- a/src-old/mbinfo.c +++ /dev/null @@ -1,100 +0,0 @@ -#include "multiboot2.h" -#include "fb.h" -#include "mem.h" -#include -#include "klog.h" -#include "mm.h" - -static uint32_t mbinfo[2048]; - -static void mbinfo_process_tag(const multiboot2_info_tag_t * tag) -{ - switch (tag->type) - { - case MULTIBOOT2_INFO_BOOT_COMMAND_LINE: - { - multiboot2_info_boot_command_line_t * cl = - (multiboot2_info_boot_command_line_t *)tag; - klog_printf("Kernel boot command line: '%s'\n", cl->string); - } - break; - - case MULTIBOOT2_INFO_BOOT_LOADER_NAME: - { - multiboot2_info_boot_loader_name_t * bln = - (multiboot2_info_boot_loader_name_t *)tag; - klog_printf("Boot loader: '%s'\n", bln->string); - } - break; - - case MULTIBOOT2_INFO_MEMORY_MAP: - { - multiboot2_info_memory_map_t * mmap_info = - (multiboot2_info_memory_map_t *)tag; - size_t sz = sizeof(mmap_info->header) + - sizeof(mmap_info->entry_size) + - sizeof(mmap_info->entry_version); - multiboot2_info_memory_map_entry_t * entry = &mmap_info->entries[0]; - for (;;) - { - sz += mmap_info->entry_size; - if (sz > mmap_info->header.size) - { - break; - } - if (entry->type == MULTIBOOT2_MEMORY_MAP_TYPE_RAM) - { - klog_printf("Memory region %16lx : %16lx\n", - entry->base_addr, - entry->length); - mm_register_ram_region(entry->base_addr, entry->length); - } - entry = (multiboot2_info_memory_map_entry_t *)((uintptr_t)entry + mmap_info->entry_size); - } - } - break; - - case MULTIBOOT2_INFO_FRAMEBUFFER_INFO: - { - multiboot2_info_framebuffer_info_t * fbinfo = - (multiboot2_info_framebuffer_info_t *)tag; - fb_init((uint32_t *)(uintptr_t)fbinfo->framebuffer_addr, - fbinfo->framebuffer_width, - fbinfo->framebuffer_height, - fbinfo->framebuffer_pitch); - } - break; - } -} - -static void process_tags(const multiboot2_info_tag_t * tag, bool init) -{ - while (tag->type != 0u) - { - if ((init && (tag->type == MULTIBOOT2_INFO_FRAMEBUFFER_INFO)) || - (!init && (tag->type != MULTIBOOT2_INFO_FRAMEBUFFER_INFO))) - { - mbinfo_process_tag(tag); - } - tag = multiboot2_info_next_tag(tag); - } -} - -bool mbinfo_init(uint32_t mbinfo_addr) -{ - multiboot2_info_header_t * mbinfo_header = (multiboot2_info_header_t *)mbinfo_addr; - if (mbinfo_header->total_size <= sizeof(mbinfo)) - { - memcpy32(mbinfo, mbinfo_header, mbinfo_header->total_size / 4u); - multiboot2_info_tag_t * tag = (multiboot2_info_tag_t *)(mbinfo + sizeof(multiboot2_info_header_t) / 4u); - process_tags(tag, true); - return true; - } - return false; -} - -void mbinfo_load(void) -{ - multiboot2_info_tag_t * tag = (multiboot2_info_tag_t *)(mbinfo + sizeof(multiboot2_info_header_t) / 4u); - process_tags(tag, false); -} diff --git a/src-old/mbinfo.h b/src-old/mbinfo.h deleted file mode 100644 index bd95bdf..0000000 --- a/src-old/mbinfo.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef MBINFO_H -#define MBINFO_H - -#include -#include - -bool mbinfo_init(uint32_t mbinfo_addr); -void mbinfo_load(void); - -#endif diff --git a/src-old/mem.h b/src-old/mem.h deleted file mode 100644 index fd843a2..0000000 --- a/src-old/mem.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef MEM_H -#define MEM_H - -#include - -static inline void memcpy(void * dest, const void * src, size_t n) -{ - uint32_t r0, r1, r2; - __asm__ __volatile__ ( - "cld\n\t" - "rep movsb" - : "=&c" (r0), "=&S" (r1), "=&D" (r2) - : "2" (dest), "1" (src), "0" (n) - : "memory"); -} - -static inline void memcpy32(void * dest, const void * src, size_t count) -{ - uint32_t r0, r1, r2; - __asm__ __volatile__ ( - "cld\n\t" - "rep movsd" - : "=&c" (r0), "=&S" (r1), "=&D" (r2) - : "2" (dest), "1" (src), "0" (count) - : "memory"); -} - -static inline void * memmove(void * dest, const void * src, size_t count) -{ - return __builtin_memmove(dest, src, count); -} - -static inline void * memset(void * dest, int val, size_t count) -{ - return __builtin_memset(dest, val, count); -} - -static inline void memset32(void * dest, uint32_t val, size_t count) -{ - uint32_t r0, r1; - __asm__ __volatile__ ( - "cld\n\t" - "rep stosl" - : "=&c" (r0), "=&D" (r1) - : "a" (val), "1" (dest), "0" (count) - : "memory"); -} - -#endif diff --git a/src-old/mm.c b/src-old/mm.c deleted file mode 100644 index d33be73..0000000 --- a/src-old/mm.c +++ /dev/null @@ -1,91 +0,0 @@ -#include "mm.h" - -typedef struct mm_page_entry_s { - size_t count; - struct mm_page_entry_s * next; -} mm_region_entry_t; - -static mm_region_entry_t * mm_next_free_region; -static size_t mm_free_pages; -static size_t mm_total_ram; -static size_t kernel_start_address; -static size_t kernel_size; - -extern uint8_t _hos_mem_start; -extern uint8_t _hos_mem_end; - -static void mm_add_ram_region(size_t base, size_t size) -{ - mm_region_entry_t * region = (mm_region_entry_t *)base; - size_t pages = size / PAGE_SIZE; - region->count = pages; - region->next = mm_next_free_region; - mm_next_free_region = region; - mm_total_ram += size; - mm_free_pages = pages; -} - -void mm_register_ram_region(uint64_t base, size_t size) -{ - /* Ignore any RAM region above 4GB. */ - if (base >= 0x100000000ull) - { - return; - } - if ((base + size) > 0x100000000ull) - { - size = (size_t)(0x100000000ull - base); - } - size_t end_address = mm_page_floor((size_t)base + size); - size_t start_address = mm_page_ceil(base); - size = end_address - start_address; - if (size < PAGE_SIZE) - { - return; - } - size_t kernel_end_address = kernel_start_address + kernel_size; - /* Add regions before and after kernel RAM. */ - if (start_address < kernel_start_address) - { - /* RAM region begins before kernel RAM. */ - size_t this_sz = size; - if ((start_address + this_sz) > kernel_start_address) - { - this_sz = kernel_start_address - start_address; - } - mm_add_ram_region(start_address, this_sz); - } - if ((start_address + size) > kernel_end_address) - { - /* RAM region ends after kernel RAM. */ - size_t this_sz = size; - if (start_address < kernel_end_address) - { - this_sz = (start_address + size) - kernel_end_address; - start_address = kernel_end_address; - } - mm_add_ram_region(start_address, this_sz); - } -} - -void mm_init(void) -{ - kernel_start_address = mm_page_floor((size_t)&_hos_mem_start); - kernel_size = mm_page_ceil((size_t)&_hos_mem_end - kernel_start_address); - mm_total_ram = kernel_size; -} - -size_t mm_get_total_ram(void) -{ - return mm_total_ram; -} - -size_t mm_get_kernel_address(void) -{ - return kernel_start_address; -} - -size_t mm_get_kernel_size(void) -{ - return kernel_size; -} diff --git a/src-old/mm.h b/src-old/mm.h deleted file mode 100644 index f195412..0000000 --- a/src-old/mm.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef MM_H -#define MM_H - -#include -#include - -#define PAGE_SIZE 4096u - -static inline size_t mm_page_floor(size_t bytes) -{ - return bytes & ~(PAGE_SIZE - 1u); -} - -static inline size_t mm_page_ceil(size_t bytes) -{ - return (bytes + PAGE_SIZE - 1u) & ~(PAGE_SIZE - 1u); -} - -void mm_init(void); -void mm_register_ram_region(uint64_t base, size_t size); -size_t mm_get_total_ram(void); -size_t mm_get_kernel_address(void); -size_t mm_get_kernel_size(void); - -#endif diff --git a/src-old/multiboot2.h b/src-old/multiboot2.h deleted file mode 100644 index f39f8a5..0000000 --- a/src-old/multiboot2.h +++ /dev/null @@ -1,127 +0,0 @@ -#ifndef MULTIBOOT2_H -#define MULTIBOOT2_H - -#include - -#define MULTIBOOT2_MAGIC 0xE85250D6u -#define MULTIBOOT2_ARCHITECTURE_I386 0u - -typedef struct { - uint32_t magic; - uint32_t architecture; - uint32_t header_length; - uint32_t checksum; -} multiboot2_header_t; -#define multiboot2_header(magic, architecture, header_length) \ - {(magic), (architecture), (header_length), (uint32_t)(0x100000000u - (magic) - (architecture) - (header_length))} -#define multiboot2_header_default() \ - multiboot2_header(MULTIBOOT2_MAGIC, MULTIBOOT2_ARCHITECTURE_I386, sizeof(multiboot2_header_t)) - -typedef struct { - uint16_t type; - uint16_t flags; - uint32_t size; -} multiboot2_tag_t; -#define multiboot2_end_tag() {0u, 0u, 8u} - -typedef struct { - multiboot2_tag_t header; - uint32_t width; - uint32_t height; - uint32_t depth; - uint32_t _padding; -} multiboot2_framebuffer_tag_t; -#define multiboot2_framebuffer_tag(width, height, depth) \ - {{5u, 0u, 20u}, width, height, depth} - -#define MULTIBOOT2_INFO_TAG_ALIGNMENT 8u -#define MULTIBOOT2_INFO_BOOT_COMMAND_LINE 1u -#define MULTIBOOT2_INFO_BOOT_LOADER_NAME 2u -#define MULTIBOOT2_INFO_MODULES 3u -#define MULTIBOOT2_INFO_BASIC_MEMORY_INFO 4u -#define MULTIBOOT2_INFO_BIOS_BOOT_DEVICE 5u -#define MULTIBOOT2_INFO_MEMORY_MAP 6u -#define MULTIBOOT2_INFO_VBE_INFO 7u -#define MULTIBOOT2_INFO_FRAMEBUFFER_INFO 8u -#define MULTIBOOT2_INFO_ELF_SYMBOLS 9u -#define MULTIBOOT2_INFO_APM_TABLE 10u -#define MULTIBOOT2_INFO_EFI_32BIT_SYSTEM_TABLE_POINTER 11u -#define MULTIBOOT2_INFO_EFI_64BIT_SYSTEM_TABLE_POINTER 12u -#define MULTIBOOT2_INFO_SMBIOS_TABLES 13u -#define MULTIBOOT2_INFO_ACPI_OLD_RSDP 14u -#define MULTIBOOT2_INFO_NETWORKING_INFO 16u -#define MULTIBOOT2_INFO_EFI_MEMORY_MAP 17u -#define MULTIBOOT2_INFO_EFI_BOOT_SERVICES_NOT_TERMINATED 18u -#define MULTIBOOT2_INFO_EFI_32BIT_IMAGE_HANDLE_POINTER 19u -#define MULTIBOOT2_INFO_EFI_64BIT_IMAGE_HANDLE_POINTER 20u -#define MULTIBOOT2_INFO_IMAGE_LOAD_BASE_PHYSICAL_ADDRESS 21u - -typedef struct { - uint32_t total_size; - uint32_t _reserved; -} multiboot2_info_header_t; - -typedef struct { - uint32_t type; - uint32_t size; -} multiboot2_info_tag_t; -#define multiboot2_info_next_tag(current_tag) \ - (multiboot2_info_tag_t *)(((uintptr_t)current_tag + current_tag->size + MULTIBOOT2_INFO_TAG_ALIGNMENT - 1u) & ~(MULTIBOOT2_INFO_TAG_ALIGNMENT - 1u)) - -typedef struct { - multiboot2_info_tag_t header; - char string[]; -} multiboot2_info_boot_command_line_t; - -typedef struct { - multiboot2_info_tag_t header; - char string[]; -} multiboot2_info_boot_loader_name_t; - -typedef struct { - multiboot2_info_tag_t header; - uint32_t mem_lower; - uint32_t mem_upper; -} multiboot2_info_basic_memory_info_t; - -#define MULTIBOOT2_MEMORY_MAP_TYPE_RAM 1u -#define MULTIBOOT2_MEMORY_MAP_TYPE_ACPI 3u -#define MULTIBOOT2_MEMORY_MAP_TYPE_PRESERVE 4u -#define MULTIBOOT2_MEMORY_MAP_TYPE_DEFECTIVE 5u - -typedef struct { - uint64_t base_addr; - uint64_t length; - uint32_t type; - uint32_t _reserved; -} multiboot2_info_memory_map_entry_t; - -typedef struct { - multiboot2_info_tag_t header; - uint32_t entry_size; - uint32_t entry_version; - multiboot2_info_memory_map_entry_t entries[]; -} multiboot2_info_memory_map_t; - -typedef struct { - multiboot2_info_tag_t header; - uint16_t vbe_mode; - uint16_t vbe_interface_set; - uint16_t vbe_interface_off; - uint16_t vbe_interface_len; - uint8_t vbe_control_info[512]; - uint8_t vbe_mode_info[256]; -} multiboot2_info_vbe_info_t; - -typedef struct { - multiboot2_info_tag_t header; - uint64_t framebuffer_addr; - uint32_t framebuffer_pitch; - uint32_t framebuffer_width; - uint32_t framebuffer_height; - uint8_t framebuffer_bpp; - uint8_t framebuffer_type; - uint8_t _reserved; -} multiboot2_info_framebuffer_info_t; - -#endif diff --git a/src-old/multiboot_header.c b/src-old/multiboot_header.c deleted file mode 100644 index c5352fd..0000000 --- a/src-old/multiboot_header.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "multiboot2.h" - -/* Multiboot2 Header. */ -struct { - multiboot2_header_t header; - multiboot2_framebuffer_tag_t framebuffer_tag; - multiboot2_tag_t end_tag; -} multiboot_header __attribute__((section(".multiboot"))) = { - multiboot2_header_default(), - multiboot2_framebuffer_tag(1600u, 900u, 32u), - multiboot2_end_tag(), -}; diff --git a/src-old/stream.h b/src-old/stream.h deleted file mode 100644 index 8f3d7f9..0000000 --- a/src-old/stream.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef STREAM_H -#define STREAM_H - -#include -#include - -typedef struct { - void (*write)(const char * src, size_t length); - void (*write1)(char c); -} stream_t; - -#endif diff --git a/src-old/string.h b/src-old/string.h deleted file mode 100644 index abf500b..0000000 --- a/src-old/string.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef STRING_H -#define STRING_H - -#include - -static inline size_t strlen(const char * s) -{ - size_t r = 0u; - while (*s++ != (char)0) - { - r++; - } - return r; -} - -static inline char * strcpy(char * dest, const char * src) -{ - return __builtin_strcpy(dest, src); -} - -static inline char * strncpy(char * dest, const char * src, size_t n) -{ - return __builtin_strncpy(dest, src, n); -} - -#endif