Initial release.

This commit is contained in:
Felix Queißner 2016-04-30 15:10:28 +02:00
commit cd5d85f99c
5 changed files with 86 additions and 0 deletions

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
*.o
*.ker

27
prototypes/base/Makefile Normal file
View file

@ -0,0 +1,27 @@
AS=clang
CC=clang
CXX=clang++
LD=ld
FLAGS = -ffreestanding -m32
ASFLAGS = $(FLAGS)
CFLAGS = $(FLAGS)
CXXFLAGS = $(FLAGS)
SRCS = $(shell find -name '*.[cS]')
OBJS = $(addsuffix .o, $(notdir $(basename $(SRCS))))
all: kernel-base.ker
kernel-base.ker: $(OBJS)
$(LD) -melf_i386 -Ttext=0x1000000 -o kernel-base.ker $(addprefix obj/, $^)
%.o: %.c
$(CC) $(ASFLAGS) -c -o obj/$@ $<
%.o: %.S
$(AS) $(CFLAGS) -c -o obj/$@ $<
%.o: %.cpp
$(CPP) $(CXXFLAGS) -c -o obj/$@ $<

View file

@ -0,0 +1,30 @@
.section .text
// Init ist eine Funktion aus init.c
.extern init
// _start muss global sein, damit der Linker es findet und als Einsprungspunkt
// benutzen kann (alle Labels, die nicht global sind, sind nur in dieser Datei
// sichtbar)
.global _start
_start:
// Stack initialisieren
mov $kernel_stack, %esp
// C-Code aufrufen
call init
// Falls wir jemals aus init zurueckkommen sollten, sperren wir die Interrupts und
// halten einfach den Prozessor an. (man braucht ihn ja nicht unnötig heißlaufen lassen.)
_stop:
cli
hlt
// Sollte es doch weitergehen, probieren wir erneut die CPU schlafen zu lassen
jmp _stop
// 8 kB Stack fuer den Kernel. Das Label steht hinter dem freien Speicher,
// weil der Stack nach unten waechst
.section .bss
.space 8192
kernel_stack:

16
prototypes/base/init.c Normal file
View file

@ -0,0 +1,16 @@
void init(void)
{
const char hw[] = "Hello World!";
int i;
char* video = (char*) 0xb8000;
// C-Strings haben ein Nullbyte als Abschluss
for (i = 0; hw[i] != '\0'; i++) {
// Zeichen i in den Videospeicher kopieren
video[i * 2] = hw[i];
// 0x07 = Hellgrau auf Schwarz
video[i * 2 + 1] = 0x07;
}
}

View file

@ -0,0 +1,11 @@
.section .text
#define MB_MAGIC 0x1badb002
#define MB_FLAGS 0x0
#define MB_CHECKSUM -(MB_MAGIC + MB_FLAGS)
// Der Multiboot-Header
.align 4
.int MB_MAGIC
.int MB_FLAGS
.int MB_CHECKSUM