diff --git a/src/kernel/Makefile b/src/kernel/Makefile index b44c048..1e0a5cf 100644 --- a/src/kernel/Makefile +++ b/src/kernel/Makefile @@ -6,7 +6,7 @@ SRC := $(wildcard **/*.[cS]) OBJ := $(patsubst %, %.o, $(basename $(SRC))) CFLAGS ?= -Wall -Wextra -pedantic -CFLAGS += -ffreestanding +CFLAGS += -ffreestanding -mcmodel=large CFLAGS += -ggdb -O0 ASFLAGS += -ggdb CPPFLAGS += -I include diff --git a/src/kernel/boot/boot.S b/src/kernel/boot/boot.S index b056838..a3e2dc2 100644 --- a/src/kernel/boot/boot.S +++ b/src/kernel/boot/boot.S @@ -65,5 +65,6 @@ _start: mov rax, 0 movabs [BootP4], rax - //; Loop infinitely - jmp $ +.extern kmain + movabs rax, offset kmain + jmp rax diff --git a/src/kernel/boot/kmain.c b/src/kernel/boot/kmain.c new file mode 100644 index 0000000..e00461a --- /dev/null +++ b/src/kernel/boot/kmain.c @@ -0,0 +1,26 @@ +#include + +void clear_screen() +{ + unsigned char *vidmem = (void *)(0xB8000 + KERNEL_OFFSET); + for(int i=0; i < 80*24*2; i++) + *vidmem++ = 0; +} + +void print_string(char *str) +{ + unsigned char *vidmem = (void *)(0xB8000 + KERNEL_OFFSET); + while(*str) + { + *vidmem++ = *str++; + *vidmem++ = 0x7; + } +} + +void kmain() +{ + clear_screen(); + print_string("Hello from c, world!"); + for(;;); +} +