aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rwxr-xr-xbuild.sh15
-rw-r--r--kernel/io/text_mode_diplay.h3
-rw-r--r--kernel/io/text_mode_display.c (renamed from kernel.c)24
-rw-r--r--kernel/kernel-bootstrap.asm (renamed from kernel-bootstrap.asm)0
-rw-r--r--kernel/kernel.c15
6 files changed, 39 insertions, 21 deletions
diff --git a/.gitignore b/.gitignore
index 8bacbce..6c30d7c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -51,4 +51,5 @@ Module.symvers
Mkfile.old
dkms.conf
-bin/ \ No newline at end of file
+bin/
+.vscode/ \ No newline at end of file
diff --git a/build.sh b/build.sh
index febb1eb..9b67fcb 100755
--- a/build.sh
+++ b/build.sh
@@ -1,6 +1,11 @@
#!/bin/bash
-mkdir -p bin
-rm -f bin/*
-nasm -f elf32 kernel-bootstrap.asm -o bin/kernel-bootstrap.o
-gcc -m32 -std=c99 -c kernel.c -o bin/kernelc.o
-ld -m elf_i386 -T link.ld -o bin/kernel bin/kernel-bootstrap.o bin/kernelc.o
+
+# TODO - proper makefile
+
+rm -rf bin/kernel/*
+mkdir -p bin/kernel/io
+nasm -f elf32 kernel/kernel-bootstrap.asm -o bin/kernel-bootstrap.o
+gcc -m32 -std=c99 -c kernel/kernel.c -o bin/kernel/kernel.o
+gcc -m32 -std=c99 -c kernel/io/text_mode_display.c -o bin/kernel/io/text_mode_display.o
+ld -m elf_i386 -T link.ld -o bin/kern bin/kernel-bootstrap.o bin/kernel/kernel.o bin/kernel/io/text_mode_display.o
+#ld -m elf_i386 -T link.ld -o bin/kern bin/kernel-bootstrap.o bin/**/*.o \ No newline at end of file
diff --git a/kernel/io/text_mode_diplay.h b/kernel/io/text_mode_diplay.h
new file mode 100644
index 0000000..d2d1180
--- /dev/null
+++ b/kernel/io/text_mode_diplay.h
@@ -0,0 +1,3 @@
+void clear_screen();
+void print(char *msg);
+void print_ln(char *msg); \ No newline at end of file
diff --git a/kernel.c b/kernel/io/text_mode_display.c
index 1c3a97c..514ba9f 100644
--- a/kernel.c
+++ b/kernel/io/text_mode_display.c
@@ -1,7 +1,8 @@
+#define COLS 80
+#define ROWS 25
+#define FRAME_SIZE (ROWS * COLS * 2) // 2 bytes per char
-#define FRAME_SIZE (80 * 25 * 2) // 80 cols, 25 rows, 2 bytes per char
-
-char *video_ram = (char *) 0xB8000;
+char *video_ram = (char *)0xB8000;
int cursor_pos = 0;
void clear_screen()
@@ -14,7 +15,7 @@ void clear_screen()
cursor_pos = 0;
}
-void print(char *msg)
+void print(char *msg)
{
int j = 0;
while (msg[j] != '\0')
@@ -25,16 +26,9 @@ void print(char *msg)
}
}
-
-void run_kern()
-{
- clear_screen();
-
- print("I am a kernel!");
- print(" another message");
-}
-
-void kernel_entrypoint()
+void print_ln(char *msg)
{
- run_kern();
+ print(msg);
+ int current_line = cursor_pos / COLS;
+ cursor_pos = (current_line + 1) * (COLS*2);
}
diff --git a/kernel-bootstrap.asm b/kernel/kernel-bootstrap.asm
index 9e3b10e..9e3b10e 100644
--- a/kernel-bootstrap.asm
+++ b/kernel/kernel-bootstrap.asm
diff --git a/kernel/kernel.c b/kernel/kernel.c
new file mode 100644
index 0000000..e872fa5
--- /dev/null
+++ b/kernel/kernel.c
@@ -0,0 +1,15 @@
+#include "./io/text_mode_diplay.h"
+
+void run_kern()
+{
+ clear_screen();
+
+ print_ln("I am a kernel!");
+ print("I am on a new line");
+ print(" - I am not");
+}
+
+void kernel_entrypoint()
+{
+ run_kern();
+}