FreeLoader notes Memory layout: 0000:0000 - 0000:0FFF: Interrupt vector table & BIOS data 0000:1000 - 0000:6FFF: Real mode stack area 0000:7000 - 0000:7FFF: Cmdline (multiboot) 0000:8000 - xxxx:xxxx: FreeLoader program & data area xxxx:xxxx - 7000:7FFF: Random memory allocation heap 7000:8000 - 7000:FFFF: Protected mode stack area 8000:0000 - 8000:FFFF: File system read buffer 9000:0000 - 9000:FFFF: Disk read buffer for BIOS Int 13h A000:0000 - FFFF:FFFF: reserved FreeLoader Boot Process FAT 12/16/32 Boot Sector The BIOS loads the boot sector at 0000:7C00. The FAT32 boot sector relocates itself higher in memory at 9000:0000 and loads it's extra sector at 9000:0200 and then looks for freeldr.sys on the file system. Once found it loads freeldr.sys to 0000:7E00 and then jumps to it's entry point at 0000:8000. The FAT12/16 boot sector does no relocation, it just searches for the freeldr.sys and loads the first 512 bytes to 0000:7E00. This extra code enables it to fully navigate the file allocation table. Then it loads freeldr.sys to 0000:7E00 and jumps to it's entry point at 0000:8000. Before FreeLoader gets control the boot sector saves the screen contents to a buffer at 9000:8000 and the cursor x & y position to bytes at 9000:8FA0 & 9000:8FA1 respectively. ISO-9660 (CD-ROM) Boot Sector The BIOS loads the boot sector (2048 bytes) at 0000:7C00. First, the boot sector relocates itself to 0000:7000 (up to 0000:7800). Then it looks for the LOADER directory and makes it the current directory. Next it looks for FREELDR.SYS and loads it at 0000:8000. Finally it restores the boot drive number in the DL register and jumps to FreeLoader's entry point at 0000:8000. Multiboot Freeldr contains a multiboot signature and can itself be loaded by a multiboot-compliant loader (like Grub). The multiboot header instructs the primary loader to load freeldr.sys at 0x200000 (needs to be above 1MB). Control is then transferred to the multiboot entry point. Since freeldr.sys expects to be loaded at a base address 0000:8000 it will start by relocating itself there and then jumping to the relocated copy. FreeLoader Initialization When FreeLoader gets control it saves the boot drive, passed to it in the DL register, and sets up the stack, enables protected mode, and calls BootMain().