make a directory to store x86-generic stuff

This commit is contained in:
Quinten Kock 2020-12-04 02:34:05 +01:00
parent 8b4fde6686
commit e3d032e84e
8 changed files with 10 additions and 86 deletions

View File

@ -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

View File

@ -0,0 +1 @@
ARCHFILES := $(shell find src/arch/x86 -type f -name '*.c' -print)

View File

@ -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)

View File

@ -1,53 +0,0 @@
#include <stdint.h>
#include <stddef.h>
#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;
}

View File

@ -1,24 +0,0 @@
#include <stddef.h>
#include <stdint.h>
#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);

View File

@ -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) {