aboutsummaryrefslogtreecommitdiff
path: root/src/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel')
-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
5 files changed, 59 insertions, 29 deletions
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 *));