## Overview Currently we boot from BIOS on a GPT-partitioned disk. `boot0.s` is the first-stage bootloader. It lives in the MBR bootstrap field, and must therefore fit into 440 bytes. Its tasks are: - [x] Set up a stack etc. - [x] Get the boot drive geometry - [x] Load and parse the GPT - [x] Find the partition of the second stage - [x] Load and jump to the first sector of the second stage `boot1.s` is the second-stage bootloader. Its tasks are: - [x] Load its own sectors not loaded by the first stage - [x] Enable A20 - [ ] Detect available memory - [ ] Enter unreal mode - [ ] Read the kernel ELF from disk (don't have to parse the ELF just yet) - [ ] Get all the useful information we can from the BIOS before we leave unreal mode - [ ] Enter long mode (possibly via protected mode?) - [ ] Load the kernel ELF - [ ] Initialise stack etc. for the kernel - [ ] Jump to kernel