The ISO 9660 wiki page on OSDev describes the descriptor tables pretty well (
http://wiki.osdev.org/ISO_9660), but it only mentions the boot descriptor. (I'll update the wiki page when I get a second.) However, the boot descriptor just tells you what boot specification is used, and where the actual boot information is located.
Code:
ISO 9660 Boot Record Descriptor
char[32] BootSystemID // ASCII encoded. For El Torito, it should be "EL TORITO SPECIFICATION" followed by nine zeros.
byte[32] Reserved
int32 BootCatalogBlock // The physical block where the El Torito boot information is located.
byte[1973] Reserved
Using the BootCatalogBlock value to find the location of the El Torito boot information, you will find the following sequence of tables:
Code:
El Torito Validation Entry
byte Header ID
byte Platform ID
byte[2] Reserved
char[24] ID // ASCI Encoded
int16 Checksum
byte Key1
byte Key2
El Torito Default Entry
byte BootIndicator
byte BootMediaType
int16 LoadSegment
byte SystemType
byte Reserved
int16 SectorCount // The number of 2048 byte blocks to load
int32 FirstBlock // The starting block of the boot loader
byte[20] Reserved
El Torito Boot Section Header Entry (multiple)
byte HeaderIndicator // Zero for terminating entry
byte PlatformID
int16 SectionCount // The number of section entries following this header
char[30] SectionID // ASCII encoded
El Torito Boot Section Entry
byte BootIndicator
byte BootMediaType // Contains flag (bit 5) denoting that this entry is followed by one or more extension entries
int16 LoadSegment
byte SystemType
byte Reserved
int16 SectorCount
int32 FirstBlock
byte SectionCriteriaType
byte[5] Reserved
El Torito Boot Section Extension Entry
byte ExtensionIndicator
byte Flags // Contains flag (bit 5) denoting that this entry is followed by another extension entry
byte[30] SelectionCriteria
This should give you enough information to get you started creating a bootable ISO image (or reading one). I will update the Wiki to include this information shortly.