diff --git a/kernel/Makefile b/kernel/Makefile index d703d9b..c20af53 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -17,7 +17,7 @@ LDFLAGS := $(LDFLAGS) -T $(LDSCRIPT) TARGET := kernel CFILES := $(shell find src -path src/arch -prune -o -type f -name '*.c' -print) -ARCHFILES := $(shell find src/arch/$(ARCH) -type f -name '*.c' -print) +ARCHFILES := $(ARCHFILES) $(shell find src/arch/$(ARCH) -type f -name '*.c' -print) HFILES := $(shell find src -type f -name '*.h') OBJ := $(patsubst src/%.c,obj/$(ARCH)/%.o,$(CFILES) $(ARCHFILES)) @@ -25,17 +25,14 @@ OBJ := $(patsubst src/%.c,obj/$(ARCH)/%.o,$(CFILES) $(ARCHFILES)) all: bin/$(TARGET)-$(ARCH) -bin/$(TARGET)-$(ARCH): $(OBJ) - mkdir -p bin +bin/$(TARGET)-$(ARCH): $(OBJ) dirs $(LD) $(LDFLAGS) $(OBJ) -o $@ -obj/$(ARCH)/%.o: src/%.c $(HFILES) - @mkdir -p obj/$(ARCH)/arch/$(ARCH) +obj/$(ARCH)/%.o: src/%.c $(HFILES) dirs $(CC) $(CFLAGS) -c $< -o $@ dirs: - mkdir -p bin obj - mkdir -p $(patsubst src/%,obj/%, $(shell find src -type d -print)) + mkdir -p bin $(patsubst src/%,obj/$(ARCH)/%, $(shell find src/* -type d -print)) clean: rm -rf bin obj zig-cache diff --git a/kernel/make/x86/make.config b/kernel/make/x86/make.config new file mode 100644 index 0000000..9804509 --- /dev/null +++ b/kernel/make/x86/make.config @@ -0,0 +1 @@ +ARCHFILES := $(shell find src/arch/x86 -type f -name '*.c' -print) diff --git a/kernel/make/x86_64/make.config b/kernel/make/x86_64/make.config index 0647c80..081923b 100644 --- a/kernel/make/x86_64/make.config +++ b/kernel/make/x86_64/make.config @@ -1 +1,4 @@ -ARCH_CFLAGS = -mcmodel=kernel +-include make/x86/make.config + +ARCH_CFLAGS := -mcmodel=kernel +ARCH_SRC := $(ARCH_SRC) $(shell find src/arch/x86_64 -type f -name '*.c' -print) \ No newline at end of file diff --git a/kernel/src/arch/i386/vga.c b/kernel/src/arch/x86/vga.c similarity index 100% rename from kernel/src/arch/i386/vga.c rename to kernel/src/arch/x86/vga.c diff --git a/kernel/src/arch/i386/vga.h b/kernel/src/arch/x86/vga.h similarity index 100% rename from kernel/src/arch/i386/vga.h rename to kernel/src/arch/x86/vga.h diff --git a/kernel/src/arch/x86_64/vga.c b/kernel/src/arch/x86_64/vga.c deleted file mode 100644 index 018cc19..0000000 --- a/kernel/src/arch/x86_64/vga.c +++ /dev/null @@ -1,53 +0,0 @@ -#include -#include - -#include "vga.h" - -static const size_t VGA_WIDTH = 80; -static const size_t VGA_HEIGHT = 25; - -static volatile size_t terminal_row; -static volatile size_t terminal_column; -static volatile uint8_t current_color = VGA_WHITE; -static uint16_t *terminal_buffer = (uint16_t*)0xb8000; - -void vga_putc(char c) { - size_t index = terminal_row*VGA_WIDTH + terminal_column; - if(c == '\t') { - vga_putc(' '); - while(terminal_column % 8 != 0) { - vga_putc(' '); - } - return; - } - if(c != '\n' && c != '\t') - terminal_buffer[index] = (uint16_t)c | (uint16_t)(current_color) << 8; - - if (c == '\n' || ++terminal_column == VGA_WIDTH) { - terminal_column = 0; - if (++terminal_row == VGA_HEIGHT) - terminal_row = 0; - } -} - -void vga_puts(char *c) { - char cur = *(c++); - while(cur != '\0') { - vga_putc(cur); - cur = *(c++); - } -} - -void vga_setcolor(uint8_t new_color) { - current_color = new_color; -} - -void vga_write_elsewhere(char *c, size_t y, size_t x) { - size_t old_row = terminal_row; - size_t old_column = terminal_column; - terminal_row = y; - terminal_column = x; - vga_puts(c); - terminal_row=old_row; - terminal_column=old_column; -} diff --git a/kernel/src/arch/x86_64/vga.h b/kernel/src/arch/x86_64/vga.h deleted file mode 100644 index 30db3e0..0000000 --- a/kernel/src/arch/x86_64/vga.h +++ /dev/null @@ -1,24 +0,0 @@ -#include -#include - -#define VGA_BLACK 0 -#define VGA_BLUE 1 -#define VGA_GREEN 2 -#define VGA_CYAN 3 -#define VGA_RED 4 -#define VGA_PURPLE 5 -#define VGA_BROWN 6 -#define VGA_GRAY 7 -#define VGA_DARK_GRAY 8 -#define VGA_LIGHT_BLUE 9 -#define VGA_LIGH_GREEN 10 -#define VGA_LIGHT_CYAN 11 -#define VGA_LIGHT_RED 12 -#define VGA_LIGHT_PURPLE 13 -#define VGA_YELLOW 14 -#define VGA_WHITE 15 - -void vga_putc(char c); -void vga_puts(char *c); -void vga_setcolor(uint8_t color); -void vga_write_elsewhere(char *c, size_t y, size_t x); diff --git a/kernel/src/main.c b/kernel/src/main.c index 3b29358..d1db8e2 100644 --- a/kernel/src/main.c +++ b/kernel/src/main.c @@ -1,4 +1,4 @@ -#include "arch/x86_64/vga.h" +#include "arch/x86/vga.h" #include "hal/ops.h" void kmain(int argc, char **argv) {