make a directory to store x86-generic stuff
This commit is contained in:
parent
8b4fde6686
commit
e3d032e84e
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
ARCHFILES := $(shell find src/arch/x86 -type f -name '*.c' -print)
|
||||
|
|
@ -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)
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue