I guess it barely prints a thing

This commit is contained in:
Jarkko Toivanen 2023-06-12 11:46:47 +03:00
commit f30433dd27
Signed by: jt
GPG key ID: 9151B109B73ECAD5
5 changed files with 79 additions and 0 deletions

2
.gitignore vendored Normal file
View file

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

13
Makefile Normal file
View file

@ -0,0 +1,13 @@
all: kernel-i386.elf
clean:
rm *.o *.elf
start32.o: start32.asm
fasm start32.asm
kernel.o: kernel.c
../tinycc/tcc -m32 -c kernel.c
kernel-i386.elf: kernel.o start32.o
../tinycc/tcc -m32 -nostdlib -Wl,-Ttext,0x100000 start32.o kernel.o -o kernel-i386.elf
qemu: kernel-i386.elf
qemu-system-i386 -kernel kernel-i386.elf

9
README.md Normal file
View file

@ -0,0 +1,9 @@
# KoalemOS
Multiboot compatible stupid useless OS-like project.
## Compatibility
32bit x86 legacy BIOS system
## Building
FASM and TinyCCompiler are used.
TCC might need manual compilation for 32bit crosscompilation
on 64bit systems.
Just download the source and `make cross` or something.

12
kernel.c Normal file
View file

@ -0,0 +1,12 @@
void kmain (void) {
*((unsigned char *) 0xB8000) = 'H';
*((unsigned char *) 0xB8001) = 0x1F;
*((unsigned char *) 0xB8002) = 'E';
*((unsigned char *) 0xB8003) = 0x1F;
*((unsigned char *) 0xB8004) = 'L';
*((unsigned char *) 0xB8005) = 0x1F;
*((unsigned char *) 0xB8006) = 'L';
*((unsigned char *) 0xB8007) = 0x1F;
*((unsigned char *) 0xB8008) = 'O';
*((unsigned char *) 0xB8009) = 0x1F;
}

43
start32.asm Normal file
View file

@ -0,0 +1,43 @@
; Tutorial: A small kernel with Fasm & TCC
; By Tommy.
format elf
use32
;
; Equates
;
MULTIBOOT_PAGE_ALIGN equ (1 shl 0)
MULTIBOOT_MEMORY_INFO equ (1 shl 1)
MULTIBOOT_AOUT_KLUDGE equ (1 shl 16)
MULTIBOOT_HEADER_MAGIC equ 0x1BADB002
MULTIBOOT_HEADER_FLAGS equ MULTIBOOT_PAGE_ALIGN or MULTIBOOT_MEMORY_INFO
MULTIBOOT_CHECKSUM equ -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
;
; Multiboot header
;
.multiboot: align 4
dd MULTIBOOT_HEADER_MAGIC
dd MULTIBOOT_HEADER_FLAGS
dd MULTIBOOT_CHECKSUM
section '.bss' writable align 16
stack_bottom:
rb 16384
stack_top:
section '.text' executable
;
; Kernel entry point.
;
public _start
extrn kmain
_start:
; Call the main kernel function.
call kmain
@@:
jmp @b