wrote a basic bootloader
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
# BIOS Boot Process and Disk Layout
|
||||
|
||||
## Disk Layout
|
||||
|
||||
```
|
||||
Sector 0 (MBR):
|
||||
+-----------------------------------+ 0x000
|
||||
| |
|
||||
| Bootstrap Code |
|
||||
| (Stage 1 Bootloader) |
|
||||
| |
|
||||
| |
|
||||
+-----------------------------------+ 0x1BE (446)
|
||||
| Partition Entry 1 (16 bytes) |
|
||||
+-----------------------------------+ 0x1CE (462)
|
||||
| Partition Entry 2 (16 bytes) |
|
||||
+-----------------------------------+ 0x1DE (478)
|
||||
| Partition Entry 3 (16 bytes) |
|
||||
+-----------------------------------+ 0x1EE (494)
|
||||
| Partition Entry 4 (16 bytes) |
|
||||
+-----------------------------------+ 0x1FE (510)
|
||||
| Boot Signature (0x55AA) |
|
||||
+-----------------------------------+ 0x200 (512)
|
||||
|
||||
Sectors 1-2047:
|
||||
+-----------------------------------+ 0x200
|
||||
| |
|
||||
| Stage 2 Bootloader |
|
||||
| (Up to 1023.5 KB) |
|
||||
| |
|
||||
+-----------------------------------+ 0x100000 (Sector 2048)
|
||||
|
||||
Sector 2048 onwards:
|
||||
+-----------------------------------+ 0x100000
|
||||
| |
|
||||
| FAT32 Partition |
|
||||
| (Rest of disk) |
|
||||
| |
|
||||
+-----------------------------------+
|
||||
```
|
||||
|
||||
## Partition Entry Format (16 bytes)
|
||||
```
|
||||
Offset Size Description
|
||||
0x00 1 Boot flag (0x80 = bootable, 0x00 = non-bootable)
|
||||
0x01 3 Starting CHS address
|
||||
0x04 1 Partition type
|
||||
0x05 3 Ending CHS address
|
||||
0x08 4 Starting sector (LBA)
|
||||
0x0C 4 Number of sectors
|
||||
```
|
||||
|
||||
## Boot Process
|
||||
|
||||
1. **BIOS Power-On**
|
||||
- BIOS performs POST (Power-On Self Test)
|
||||
- Looks for bootable devices
|
||||
|
||||
2. **MBR Load**
|
||||
- BIOS loads Sector 0 (MBR) into memory at 0x7C00
|
||||
- Verifies 0x55AA signature
|
||||
- Executes Stage 1 Bootloader
|
||||
|
||||
3. **Stage 1 Bootloader**
|
||||
- Runs in 16-bit real mode
|
||||
- Limited to 446 bytes
|
||||
- Main task: Load Stage 2 Bootloader
|
||||
- Typically contains minimal disk I/O code
|
||||
|
||||
4. **Stage 2 Bootloader**
|
||||
- Located in sectors 1-2047
|
||||
- Has more space for complex operations
|
||||
- Tasks:
|
||||
- Switch to 32-bit protected mode
|
||||
- Set up basic memory management
|
||||
- Parse FAT32 filesystem
|
||||
- Switch to long mode
|
||||
- Load and execute kernel
|
||||
|
||||
5. **Kernel Load**
|
||||
- Stage 2 loads kernel from FAT32 partition
|
||||
- Sets up necessary environment
|
||||
- Transfers control to kernel
|
||||
|
||||
## Memory Layout During Boot
|
||||
```
|
||||
0x00000000 - 0x000003FF: Interrupt Vector Table
|
||||
0x00000400 - 0x000004FF: BIOS Data Area
|
||||
0x00000500 - 0x00007BFF: Free Memory
|
||||
0x00007C00 - 0x00007DFF: Stage 1 Bootloader (MBR)
|
||||
0x00007E00 - 0x0007FFFF: Free Memory (Stage 2 can be loaded here)
|
||||
0x00080000 - 0x0009FFFF: Extended BIOS Data Area
|
||||
0x000A0000 - 0x000FFFFF: BIOS ROM, Video Memory, etc.
|
||||
0x00100000 onwards: Free Memory (Kernel typically loaded here)
|
||||
```
|
||||
Reference in New Issue
Block a user