Fix Linux Build
[reactos.git] / boot / freeldr / notes.txt
index 01d1ccd..64c004f 100644 (file)
@@ -1,6 +1,8 @@
-FreeLoader notes
+FreeLoader notes (for x86 PC architecture only!)
+================================================
 
-Memory layout:
+Memory layout (WARNING: may be out-of-date)
+-~-~-~-~-~-~-
 
 0000:0000 - 0000:0FFF: Interrupt vector table & BIOS data
 0000:1000 - 0000:6FFF: Real mode stack area
@@ -14,44 +16,45 @@ 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.
+    The BIOS loads the boot sector at 0000:7C00. The FAT12/16 boot sector just
+searches for FREELDR.SYS and loads its first 512 bytes to 0000:F800. This extra
+helper code enables it to fully navigate the file allocation table. The boot
+sector then jumps to FREELDR.SYS entry point at 0000:F803 and the helper code
+takes the relay. It finishes loading the FREELDR.SYS image and finally jumps to
+its final entry point at 0000:FA00.
+    The FAT32 boot sector loads its extra sector at 0000:7E00 and looks for
+FREELDR.SYS on the file system. Once found it loads FREELDR.SYS to 0000:F800
+and jumps to its entry point at the same address. This allows it to jump over
+the FAT12/16 extra helper code situated at this address, and go to the final
+entry point at 0000:FA00.
 
 
 ISO-9660 (CD-ROM) Boot Sector
 
-       The BIOS loads the boot sector (2048 bytes) at 0000:7C00. First, the
+    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.
+for the LOADER directory and makes it the current directory. Next it looks
+for FREELDR.SYS and loads it at 0000:F800. Finally it restores the boot drive
+number in the DL register and jumps to FreeLoader's entry point at 0000:F800.
 
 
 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
+    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:F800 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().
+    When FreeLoader gets control it saves the boot drive and partition, passed
+to it respectively in the DL and DH registers, and sets up the stack, enables
+protected mode, and calls BootMain().