| 			  GPT boot protocol | 
 |  | 
 | There are two ways to boot a GPT-formatted disk on a BIOS system. | 
 | Hybrid booting, and the new GPT-only booting protocol originally | 
 | proposed by the author, and later adopted by the T13 committee in | 
 | slightly modified form. | 
 |  | 
 |  | 
 | 	*** Hybrid booting *** | 
 |  | 
 | Hybrid booting uses a standard MBR, and has bootable ("active") | 
 | partitions present, as partitions, in the GPT PMBR sector.  This means | 
 | the PMBR, instead of containing only one "protective" partition (type | 
 | EE), may contain up to three partitions: a protective partition (EE) | 
 | *before* the active partition, the active partition, and a protective | 
 | partition (EE) *after* the active partition.  The active partition is | 
 | limited to the first 2^32 sectors (2 TB) of the disk. | 
 |  | 
 | All partitions, including the active partition, should have GPT | 
 | partition entries.  Thus, changing which partition is active does NOT | 
 | change the GPT partition table. | 
 |  | 
 | This is the only known way to boot Microsoft operating systems from a | 
 | GPT disk with BIOS firmware. | 
 |  | 
 |  | 
 | 	*** New protocol *** | 
 |  | 
 | This defines the T13-approved protocol for GPT partitions with BIOS | 
 | firmware.  It maintains backwards compatibility to the extent | 
 | possible.  It is implemented by the file mbr/gptmbr.bin. | 
 |  | 
 | The (P)MBR format is the normal PMBR specified in the UEFI | 
 | documentation, with the first 440 bytes used for the boot code.  The | 
 | partition to be booted is marked by setting bit 2 in the GPT Partition | 
 | Entry Attributes field (offset 48); this bit is reserved by the UEFI | 
 | Forum for "Legacy BIOS Bootable". | 
 |  | 
 |  | 
 |     -> The handover protocol | 
 |  | 
 | The PMBR boot code loads the first sector of the bootable partition, | 
 | and passes in DL=<disk number>, ES:DI=<pointer to $PnP>, sets EAX to | 
 | 0x54504721 ("!GPT") and points DS:SI to a structure of the following | 
 | form: | 
 |  | 
 | 	Offset	Size	Contents | 
 | 	--------------------------------------------------------- | 
 | 	  0	  1	0x80 (this is a bootable partition) | 
 | 	  1	  3	CHS of partition (using INT 13h geometry) | 
 | 	  4	  1	0xED (partition type: synthetic) | 
 | 	  5	  3	CHS of partition end | 
 | 	  8	  4	Partition start LBA | 
 | 	 12	  4	Partition length in sectors | 
 | 	 16	  4	Length of the GPT entry | 
 | 	 20	varies	GPT partition entry | 
 |  | 
 | The CHS information is optional; gptmbr.bin currently does *NOT* | 
 | calculate them, and just leaves them as zero. | 
 |  | 
 | Bytes 0-15 matches the standard MBR handover (DS:SI points to the | 
 | partition entry), except that the information is provided | 
 | synthetically.  The MBR-compatible fields are directly usable if they | 
 | are < 2 TB, otherwise these fields should contain 0xFFFFFFFF and the | 
 | OS will need to understand the GPT partition entry which follows the | 
 | MBR one.  The "!GPT" magic number in EAX and the 0xED partition type | 
 | also informs the OS that the GPT partition information is present. | 
 |  | 
 | Syslinux 4.00 and later fully implements this protocol. |