re-worked ndis to do device detection from a win2k-style registry enum database,...
[reactos.git] / freeldr / notes.txt
index 8dcc68e..01486b3 100644 (file)
@@ -1,18 +1,48 @@
 FreeLoader notes
 
 To build FreeLoader you will need DJGPP because Mingw32 doesn't support 16-bit code
-FreeLoader does not currently work with extended partitions.
-Linux booting support needs to be added.
-ext2 filesystem support needs to be added.
 
-Current memory layout:
+Memory layout:
 
 0000:0000 - 0000:0FFF: Interrupt vector table & BIOS data
 0000:1000 - 0000:6FFF: Real mode stack area
-0000:7000 - xxxx:xxxx: FreeLoader program & data area
-xxxx:xxxx - 6000:0000: Protected mode stack area & heap
-6000:0000 - 6000:C000: Filesystem data buffer
-6000:C000 - 7000:0000: FREELDR.INI loaded here
-7000:0000 - 7000:FFFF: scratch area for any function's use (ie sector buffer for biosdisk()) - can be overwritten by any function
-8000:0000 - 9000:FFFF: fat table entry buffer
+0000:7000 - 0000:7FFF: Unused
+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 I386 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.
+
+
+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().
\ No newline at end of file