aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorJames Barnett <noreply@jamesbarnett.xyz>2018-08-28 16:21:37 +0100
committerJames Barnett <noreply@jamesbarnett.xyz>2018-08-28 16:21:37 +0100
commitd5cf6a9696f6f86bec5652f94ba7485aae4ca1bc (patch)
treef49de1a27255090ac38c222dede7b9c6fda06eef /kernel
parente88de0162cff8bbad80972c1b92355b9d2db0213 (diff)
downloadtinyOS-d5cf6a9696f6f86bec5652f94ba7485aae4ca1bc.tar.xz
tinyOS-d5cf6a9696f6f86bec5652f94ba7485aae4ca1bc.zip
Add print_ln function
Diffstat (limited to 'kernel')
-rw-r--r--kernel/io/text_mode_diplay.h3
-rw-r--r--kernel/io/text_mode_display.c34
-rw-r--r--kernel/kernel-bootstrap.asm22
-rw-r--r--kernel/kernel.c15
4 files changed, 74 insertions, 0 deletions
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/io/text_mode_display.c b/kernel/io/text_mode_display.c
new file mode 100644
index 0000000..514ba9f
--- /dev/null
+++ b/kernel/io/text_mode_display.c
@@ -0,0 +1,34 @@
+#define COLS 80
+#define ROWS 25
+#define FRAME_SIZE (ROWS * COLS * 2) // 2 bytes per char
+
+char *video_ram = (char *)0xB8000;
+int cursor_pos = 0;
+
+void clear_screen()
+{
+ for (int i = 0; i < FRAME_SIZE; i = i + 2)
+ {
+ video_ram[i] = ' ';
+ video_ram[i + 1] = 0x07;
+ };
+ cursor_pos = 0;
+}
+
+void print(char *msg)
+{
+ int j = 0;
+ while (msg[j] != '\0')
+ {
+ video_ram[cursor_pos++] = msg[j];
+ video_ram[cursor_pos++] = 0x07;
+ ++j;
+ }
+}
+
+void print_ln(char *msg)
+{
+ print(msg);
+ int current_line = cursor_pos / COLS;
+ cursor_pos = (current_line + 1) * (COLS*2);
+}
diff --git a/kernel/kernel-bootstrap.asm b/kernel/kernel-bootstrap.asm
new file mode 100644
index 0000000..9e3b10e
--- /dev/null
+++ b/kernel/kernel-bootstrap.asm
@@ -0,0 +1,22 @@
+bits 32 ; nasm 32-bit mode
+section .text
+
+ ; multiboot header
+align 4
+dd 0x1BADB002
+dd 0x00
+dd - (0x1BADB002 + 0x00) ; checksum
+
+global start
+extern kernel_entrypoint
+
+ ; call kernel and halt
+start:
+ cli ; disable interrups
+ mov esp, stack_space
+ call kernel_entrypoint
+ hlt
+
+section .bss
+resb 8192
+stack_space: \ No newline at end of file
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();
+}