Simple bootloader project

k4m1 902921c229 first commit 4 years ago
src 902921c229 first commit 4 years ago
test_kernel 902921c229 first commit 4 years ago
KERNEL_HEADER.txt 902921c229 first commit 4 years ago
LICENSE 902921c229 first commit 4 years ago
Makefile 902921c229 first commit 4 years ago
README.md 902921c229 first commit 4 years ago

README.md

Nyanix

Simple bootloader project. Aiming for clean code.

Usage:

Your kernel must  be 512-byte aligned in total size. 
Kernel header needs to be set withing first
5 kilobytes in image. This should still allow plenty enough space
for other headers such as ELF or PE.

Kernel image must be located immediately after bootloader on bootdisk.
Refer to KERNEL_HEADER.txt to see how to setup the header used by
the bootloader.

Bootloader initializes serial port 0x3F7 and A20 gate, and
enables 32-bit protected mode with fairly simple GDT.
Kernel is loaded to 0x100000 with CS 0x08, other segments 0x10.

Example kernel formating:

	; kernel.asm
	; assemble: nasm -felf32 -o kernel.o kernel.asm
	bits 	32
	db 	"nyan"
	dd 	((kernel_end - _start + 512) / 512)

	global  _start
	_start:
		mov 	eax, 0x0badc0de
		cli
		hlt
	kernel_end:
		times 	512 db 0x41
	/* linker.ld */
	ENTRY(_start)
	SECTIONS {
		. = 0x100000;
		.header BLOCK (1) : ALIGN (1) {
			*(.header)
		}
		.text BLOCK (1) : ALIGN (1) {
			*(.text)
		}
		/* Other sections */
	}
	# Build script
	nasm -felf32 -o kernel.o kernel.asm
	ld --script=linker.ld -o kernel.elf kernel.o
	dd if=kernel.elf bs=1 >> nyanix.bin

Contribution:

General code optimization would be welcome, code as is might be 
hopefully pretty to read but it has quite a few slow functions.
New features, drivers etc. is always welcome too.