From ce6d6ca9691f53fb6d2dd6dd22141dbe7e1bdc8c Mon Sep 17 00:00:00 2001 From: starnakin Date: Sat, 7 Sep 2024 01:44:40 +0200 Subject: [PATCH] use libbozo --- Makefile | 11 ++++--- libbozo | 2 +- src/kernel.c | 86 +++------------------------------------------------- 3 files changed, 12 insertions(+), 87 deletions(-) diff --git a/Makefile b/Makefile index 15ecd26..4989f01 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,10 @@ AS := i386-elf-as ASFLAGS := CC := i386-elf-gcc -CCFLAGS := -std=gnu99 -ffreestanding -O2 -Wall -Wextra +CCFLAGS := -std=gnu99 -ffreestanding -O2 -Wall -Wextra -iquotelibbozo/headers LD := $(CC) LDFLAGS := -T boot/linker.ld -ffreestanding -O2 -nostdlib -LIBS := -lgcc +LIBS := ./libbozo/build/libbozo.a -lgcc SSRC := $(wildcard src/*.s) CSRC := $(wildcard src/*.c) @@ -16,14 +16,15 @@ NAME := bozOS all: $(NAME) obj/%.o: src/%.s - mkdir -p obj/ + mkdir -p $(dir $@) $(AS) $(ASFLAGS) $< -o $@ obj/%.o: src/%.c - mkdir -p obj/ + mkdir -p $(dir $@) $(CC) $(CCFLAGS) -c $< -o $@ $(NAME): $(OBJ) + make -C libbozo mkdir -p build/ $(LD) $(LDFLAGS) -o build/$(NAME).bin $(OBJ) $(LIBS) @@ -31,9 +32,11 @@ run: $(NAME) qemu-system-i386 -kernel build/$(NAME).bin clean: + make -C libbozo clean rm -rf obj/ fclean: clean + make -C libbozo fclean rm -rf build/ re: fclean all diff --git a/libbozo b/libbozo index a495e0d..6fe18b3 160000 --- a/libbozo +++ b/libbozo @@ -1 +1 @@ -Subproject commit a495e0dc2cfa01d89c257b1aabfc8f9e31aea843 +Subproject commit 6fe18b35722c0cf2cfd7bbaf7233b5ae66d3babf diff --git a/src/kernel.c b/src/kernel.c index 133b20c..31a7ca7 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -1,3 +1,6 @@ +#include "terminal.h" +#include "kprintf.h" + #include #include #include @@ -13,91 +16,10 @@ #error "This tutorial needs to be compiled with a ix86-elf compiler" #endif -/* Hardware text mode color constants. */ -enum vga_color { - VGA_COLOR_BLACK = 0, - VGA_COLOR_BLUE = 1, - VGA_COLOR_GREEN = 2, - VGA_COLOR_CYAN = 3, - VGA_COLOR_RED = 4, - VGA_COLOR_MAGENTA = 5, - VGA_COLOR_BROWN = 6, - VGA_COLOR_LIGHT_GREY = 7, - VGA_COLOR_DARK_GREY = 8, - VGA_COLOR_LIGHT_BLUE = 9, - VGA_COLOR_LIGHT_GREEN = 10, - VGA_COLOR_LIGHT_CYAN = 11, - VGA_COLOR_LIGHT_RED = 12, - VGA_COLOR_LIGHT_MAGENTA = 13, - VGA_COLOR_LIGHT_BROWN = 14, - VGA_COLOR_WHITE = 15, -}; - -static inline uint8_t vga_entry_color(enum vga_color fg, enum vga_color bg) { - return fg | bg << 4; -} - -static inline uint16_t vga_entry(unsigned char uc, uint8_t color) { - return (uint16_t)uc | (uint16_t)color << 8; -} - -size_t strlen(const char *str) { - size_t len = 0; - while (str[len]) - len++; - return len; -} - -static const size_t VGA_WIDTH = 80; -static const size_t VGA_HEIGHT = 25; - -size_t terminal_row; -size_t terminal_column; -uint8_t terminal_color; -uint16_t *terminal_buffer; - -void terminal_initialize(void) { - terminal_row = 0; - terminal_column = 0; - terminal_color = vga_entry_color(VGA_COLOR_LIGHT_GREY, VGA_COLOR_BLACK); - terminal_buffer = (uint16_t *)0xB8000; - for (size_t y = 0; y < VGA_HEIGHT; y++) { - for (size_t x = 0; x < VGA_WIDTH; x++) { - const size_t index = y * VGA_WIDTH + x; - terminal_buffer[index] = vga_entry(' ', terminal_color); - } - } -} - -void terminal_setcolor(uint8_t color) { terminal_color = color; } - -void terminal_putentryat(char c, uint8_t color, size_t x, size_t y) { - const size_t index = y * VGA_WIDTH + x; - terminal_buffer[index] = vga_entry(c, color); -} - -void terminal_putchar(char c) { - terminal_putentryat(c, terminal_color, terminal_column, terminal_row); - if (++terminal_column == VGA_WIDTH) { - terminal_column = 0; - if (++terminal_row == VGA_HEIGHT) - terminal_row = 0; - } -} - -void terminal_write(const char *data, size_t size) { - for (size_t i = 0; i < size; i++) - terminal_putchar(data[i]); -} - -void terminal_writestring(const char *data) { - terminal_write(data, strlen(data)); -} - void kernel_main(void) { /* Initialize terminal interface */ terminal_initialize(); /* Newline support is left as an exercise. */ - terminal_writestring("Hello, kernel World!\n"); + kprintf(0, "test%c", 'c'); }