2.1 KiB
2.1 KiB
FAT32 Volume Boot Record Format
Windows 10 checks for the following (16022c5937/filesys/fastfat/fsctrl.c (L2546)
):
- [offset=0x000, length=3] First byte must be: 0xE9, 0xEB, 0x49
- [offset=0x00B, length=2] BytesPerSector must be: 128, 256, 512, 1024, 2048, or 4096
- [offset=0x00D, length=1] SectorsPerCluster must be: 1, 2, 4, 8, 16, 32, 64, or 128
- [offset=0x00E, length=2] ReservedSectors must be > 0
- [offset=0x010, length=1] NumberOfFATs must be > 0
- Either [offset=0x013, length=2] Sectors or [offset=0x020, length=4] LargeSectors must be > 0
- [offset=0x016, length=2] SectorsPerFat > 0 or ([offset=0x024, length=4] LargeSectorsPerFAT > 0 and [offset=0x02A, length=2] FsVersion = 0)
- [offset=0x015, length=1] MediaType must be: 0xF0, 0xF8, 0xF9, 0xFB, 0xFD, 0xFE, 0xFF
- Either [offset=0x016, length=2] SectorPerFAT = 0 or RootEntries > 0
- Either [offset=0x016, length=2] SectorPerFAT > 0 or MirrorDisabled
Important Fields:
- 0x000 - 0x002 : Boot jump code {0xEB 0xFE 0x00}
- 0x003 - 0x00A : OEM Name
- 0x00B - 0x05A : BPB and Extended BPB
- 0x05B : CPU #
- 0x05C - 0x05D : Adjustment spot for checksum (?)
- 0x05E - 0x05F : Unused
- 0x060 - 0x1FC : Boot sector code area
- 0x1FD : Physical drive number (?)
- 0x1FE - 0x1FF : Signature: 0x55 0xAA
For Foenix/MCP: 16-bit big-endian checksum of entire sector must equal 0x2560
Checksum: sum = ((sum & 1) << 15) + (sum >> 1) + *w++;
Boot Process from Floppy and SDC
- Load VBR into memory at 0x00000400
- Compute checksum and verify it comes to 0x2560
- Check that 0x05B has the right CPU ID
- Call to 0x00000460 as a subroutine
Master Boot Record Format
- 0x000 - 0x1BD : Boot code area (approximate end point)
- 0x1BE - 0x1FD : Partition data
- 0x1FE - 0x1FF : Signature: 0x55 0xAA
For Foenix/MCP: 16-bit big-endian checksum of entire sector must equal 0x2560
Boot Process for PATA drive
- Load MBR into memory at 0x00000400
- Compute checksum and verify it comes to 0x2560
- Check that 0x05B has the right CPU ID
- Call to 0x00000400 as a subroutine