tabs/docs/bootloader.md

1.2 KiB

RoBootloader

Low Memory

start end use
0x00000 0x004ff BIOS stuff, don't touch
0x00500 0x06bff free space
0x06c00 0x07bff Bootloader stack
0x07c00 0x07dff Bootloader
0x07e00 0x07fff free space
0x08000 0x0ffff ELF file (64 sectors)
0x10000 0x7ffff kernel space
0x80000 0x9ffff EDBA, partially usable
0xa0000 0xfffff unusable

Drive layout

The first 512 bytes are the bootloader, right after that the 32-bit kernel ELF-file, this kernel can be 32KiB big. In the future, this "kernel" can be replaced by a second stage of the bootloader.

Known issues

USB Boot

It doesn't boot the kernel from USB, as BIOS does not recognize USB as valid hard drive for int 13, only hard drives and floppies. Thus it loads sectors 2-65 from the hard drive. If this is written on a hard drive, it could work if DRIVE_ID is set correctly.

Stack setup

As I don't quite get how segments work in real mode, there are most likely errors in the way I set up my stack. I'm going on a it works on my qemu approach currently.