summaryrefslogtreecommitdiff
path: root/src/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel')
-rw-r--r--src/kernel/main.c42
1 files changed, 30 insertions, 12 deletions
diff --git a/src/kernel/main.c b/src/kernel/main.c
index f8e6c6a..d7965e2 100644
--- a/src/kernel/main.c
+++ b/src/kernel/main.c
@@ -1,17 +1,35 @@
__asm__(".code16gcc\n");
-int func() {
- __asm__(
- "mov $0x10, %%cx \n"
- "mov $0x0A, %%ah \n"
- "mov $0x74, %%al \n"
- "int $0x10 \n"
- "mov $42, %%eax \n"
- "ret \n"
- : :
- );
+void vga_graphics_write_at_offset(char, short);
+void vga_graphics_write(char);
+void vga_graphics_write_str(char*);
+
+static short CURSOR_LOC = 0;
+
+void _start() {
+ vga_graphics_write('a');
+ vga_graphics_write('/');
+ vga_graphics_write('b');
+ char foo[] = "hello how are you";
+ vga_graphics_write_str(foo);
+ while(1) { }
+}
+
+void vga_graphics_write_str(char* str) {
+ while(*str) {
+ vga_graphics_write(*str++);
+ }
+}
+
+void vga_graphics_write(char value) {
+ vga_graphics_write_at_offset(value, CURSOR_LOC);
+ CURSOR_LOC += 2;
}
-int _start() {
- return 1;
+void vga_graphics_write_at_offset(char value, short offset) {
+ __asm__(
+ "mov %0, %%al \n"
+ "mov %1, %%di \n"
+ "mov %%al, %%gs:(%%di) \n"
+ : :"r"(value), "r"(offset) : "%ax", "%di");
}