Author: hbelusca Date: Mon Feb 20 15:45:01 2017 New Revision: 73859
URL: http://svn.reactos.org/svn/reactos?rev=73859&view=rev Log: [FREELDR]: Update the FreeLdr's startup notes.
Modified: trunk/reactos/boot/freeldr/notes.txt
Modified: trunk/reactos/boot/freeldr/notes.txt URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/notes.txt?rev=... ============================================================================== --- trunk/reactos/boot/freeldr/notes.txt [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/notes.txt [iso-8859-1] Mon Feb 20 15:45:01 2017 @@ -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 @@
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 +-~-~-~-~-~-~-~-~-~-~-~-~-
-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().