mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
ad979612af
svn path=/trunk/; revision=2654
43 lines
No EOL
2.3 KiB
Text
43 lines
No EOL
2.3 KiB
Text
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.
|
|
The MessageBox() function needs to not allocate memory. Because it gets called when memory allocation fails.
|
|
|
|
Old 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
|
|
A000:0000 - FFFF:FFFF: reserved
|
|
|
|
|
|
New memory layout:
|
|
|
|
0000:0000 - 0000:0FFF: Interrupt vector table & BIOS data
|
|
0000:1000 - 0000:6FFF: Real mode stack area
|
|
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
|
|
|
|
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.
|
|
|
|
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(). |