aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNic Gaffney <gaffney_nic@protonmail.com>2023-12-17 13:21:21 -0600
committerNic Gaffney <gaffney_nic@protonmail.com>2023-12-17 13:21:21 -0600
commit9dbc5231dd738d97eea13f8ecf9005e5b78ea0d3 (patch)
tree86f69ed6156254fd2df2dede5cea0c4397de2ac4
parent5d5535adeeb71a5e5de78925ddd296d776ccaba5 (diff)
downloadgftos-9dbc5231dd738d97eea13f8ecf9005e5b78ea0d3.tar.gz
Restructured
-rw-r--r--Makefile5
-rw-r--r--src/boot/boot.s (renamed from src/header/boot.s)0
-rw-r--r--src/boot/crti.s (renamed from src/header/crti.s)0
-rw-r--r--src/boot/crtn.s (renamed from src/header/crtn.s)0
-rw-r--r--src/include/str.h2
-rw-r--r--src/kernel/gdt/compile_flags.txt1
-rw-r--r--src/kernel/gdt/gdt.c (renamed from src/kernel/gdt.c)17
-rw-r--r--src/kernel/gen_gdt.c19
-rw-r--r--src/kernel/kernel.c49
-rw-r--r--src/kernel/print.c2
-rw-r--r--src/utils/str.c6
11 files changed, 66 insertions, 35 deletions
diff --git a/Makefile b/Makefile
index 2d16e10..f855c41 100644
--- a/Makefile
+++ b/Makefile
@@ -27,8 +27,8 @@ ASM_OBJS := $(ASM:$(SRC)/%.s=$(BUILD)/%.o)
CRTBEGIN_OBJ := $(shell $(CC) $(CFLAGS) -print-file-name=crtbegin.o)
CRTEND_OBJ := $(shell $(CC) $(CFLAGS) -print-file-name=crtend.o)
-CRTI_OBJ = $(BUILD)/header/crti.o
-CRTN_OBJ = $(BUILD)/header/crtn.o
+CRTI_OBJ = $(BUILD)/boot/crti.o
+CRTN_OBJ = $(BUILD)/boot/crtn.o
OBJS += $(CRTI_OBJ) $(CRTBEGIN_OBJ)
OBJS += $(C_OBJS) $(ASM_OBJS)
@@ -65,3 +65,4 @@ clean:
rm -rf $(INTERNAL_OBJS)
rm -rf $(OUT_DIR)/$(ISO).iso
rm -rf $(OUT_DIR)/isodir/boot/$(ISO).bin
+ rm -rf $(BUILD)
diff --git a/src/header/boot.s b/src/boot/boot.s
index aba32ff..aba32ff 100644
--- a/src/header/boot.s
+++ b/src/boot/boot.s
diff --git a/src/header/crti.s b/src/boot/crti.s
index 26d677a..26d677a 100644
--- a/src/header/crti.s
+++ b/src/boot/crti.s
diff --git a/src/header/crtn.s b/src/boot/crtn.s
index 46f8de6..46f8de6 100644
--- a/src/header/crtn.s
+++ b/src/boot/crtn.s
diff --git a/src/include/str.h b/src/include/str.h
index 11b8408..4e84e9c 100644
--- a/src/include/str.h
+++ b/src/include/str.h
@@ -1,5 +1,5 @@
#pragma once
#include <stddef.h>
-char *itoa(int, char *);
+char *itoa(int, char *, int);
size_t strlen(const char *);
char *str_reverse(char *);
diff --git a/src/kernel/gdt/compile_flags.txt b/src/kernel/gdt/compile_flags.txt
new file mode 100644
index 0000000..2af49c7
--- /dev/null
+++ b/src/kernel/gdt/compile_flags.txt
@@ -0,0 +1 @@
+-I../../include/
diff --git a/src/kernel/gdt.c b/src/kernel/gdt/gdt.c
index 96ddf67..4886dc3 100644
--- a/src/kernel/gdt.c
+++ b/src/kernel/gdt/gdt.c
@@ -1,6 +1,23 @@
#include "gdt.h"
#include <stdint.h>
+GDT_t *table = 0x0;
+extern GDTR_t gdtr;
+void get_gdtr() {
+ uint32_t base = 0x0000;
+
+ *table = (GDT_t){
+ // NULL
+ make_descriptor(0, 0, 0),
+ // Code segment, read
+ make_descriptor(base, 0x8FFFF, make_code(0, 0, 1)),
+ // Data segment, read write
+ make_descriptor(base, 0x8FFFF, make_data(0, 0, 1)),
+ };
+ gdtr.size = sizeof(Segment_Descriptor_t) * 3 - 1;
+ gdtr.offset = base;
+}
+
uint16_t make_code(uint8_t priv, uint8_t dc, uint8_t rw) {
uint16_t access = 0;
access |= (1 << 7);
diff --git a/src/kernel/gen_gdt.c b/src/kernel/gen_gdt.c
deleted file mode 100644
index ccfb461..0000000
--- a/src/kernel/gen_gdt.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include "gdt.h"
-#include <stdint.h>
-
-GDT_t *table = 0x0;
-extern GDTR_t gdtr;
-void get_gdtr() {
- uint32_t base = 0x0000;
-
- *table = (GDT_t){
- // NULL
- make_descriptor(0, 0, 0),
- // Code segment, read
- make_descriptor(base, 0x8FFFF, make_code(0, 0, 1)),
- // Data segment, read write
- make_descriptor(base, 0x8FFFF, make_data(0, 0, 1)),
- };
- gdtr.size = sizeof(Segment_Descriptor_t) * 3 - 1;
- gdtr.offset = base;
-}
diff --git a/src/kernel/kernel.c b/src/kernel/kernel.c
index 5f6f5ae..1fca95b 100644
--- a/src/kernel/kernel.c
+++ b/src/kernel/kernel.c
@@ -1,6 +1,5 @@
#include "print.h"
-// Check if the compiler thinks we are targeting the wrong OS
#if defined(__linux__)
#error "Not using cross compiler!"
#endif
@@ -10,16 +9,48 @@
#error "Must use ix86-elf compiler"
#endif
+void motd() {
+ char *empty_row = " "
+ " \n";
+ empty_row[0] = (char)186;
+ empty_row[79] = (char)186;
+
+ printf("%c", 201);
+ for (int i = 0; i < 78; i++)
+ printf("%c", 205);
+ printf("%c\n", 187);
+
+ printf(empty_row);
+
+ printf("%c", 186);
+ for (int i = 0; i < 78 / 2 - 17 / 2; i++)
+ printf(" ");
+ printf("Welcome to gftos!");
+ for (int i = 0; i < 78 / 2 - 17 / 2 - 1; i++)
+ printf(" ");
+ printf("%c\n", 186);
+
+ for (int i = 0; i < 21; i++) {
+ printf(empty_row);
+ }
+
+ printf("%c", 200);
+ for (int i = 0; i < 78; i++)
+ printf("%c", 205);
+ printf("%c", 188);
+}
+
void kernel_main(void) {
print_clear();
- for (int r = 0; r < 24; r++) {
- for (int c = 0; c < 80; c += 3) {
- int color = (r + c) % 15 + 1;
- print_set_color(color, PRINT_COLOR_BLACK);
- printf(":3 ");
- }
- printf("%n");
- }
+ motd();
+ // for (int r = 0; r < 24; r++) {
+ // for (int c = 0; c < 80; c += 3) {
+ // int color = (r + c) % 15 + 1;
+ // print_set_color(color, PRINT_COLOR_BLACK);
+ // printf(":3");
+ // }
+ // printf("%n");
+ // }
// print_set_color(PRINT_COLOR_YELLOW, PRINT_COLOR_BLACK);
// printf("printf\n\tint: %d\n\tstring: %s\n\tchar: %c\n\tpercent: "
// "%%\n\tnothing: %n",
diff --git a/src/kernel/print.c b/src/kernel/print.c
index d2857bc..d5e8790 100644
--- a/src/kernel/print.c
+++ b/src/kernel/print.c
@@ -112,7 +112,7 @@ void printf(const char *str, ...) {
switch (str[++i]) {
case 'i':
case 'd':
- print_str(itoa(va_arg(args, int), temp_str));
+ print_str(itoa(va_arg(args, int), temp_str, 10));
break;
case 's':
print_str(va_arg(args, char *));
diff --git a/src/utils/str.c b/src/utils/str.c
index 22daa30..9a7acb0 100644
--- a/src/utils/str.c
+++ b/src/utils/str.c
@@ -22,11 +22,11 @@ char *str_reverse(char *str) {
return str;
}
-char *itoa(int num, char *str) {
+char *itoa(int num, char *str, int base) {
char *str_ptr = str;
for (; num;) {
- *str_ptr++ = num % 10 + 48;
- num /= 10;
+ *str_ptr++ = num % base + 48;
+ num /= base;
}
str_reverse(str);
return str;