The table is a series of 16-byte entries with the following structure.
struct hdtype {
short cylinders;
char heads; /* XT: 1-8, AT: 1-16, ESDI: 1-32 */
short reduced_write_current_starting_cyl; /* XT only */
short pre_compensation_starting_cyl;
char max_ECC_data_burst_length; /* XT only */
char control; /* AT and later */
/* bit 7: 1 - do not retry on access error
bit 6: 1 - do not retry on ECC error
bit 5: 1 - there is a bad block map past the last cylinder
bit 4: 0
bit 3: 1 - more than 8 heads on the drive
bit 2: 0 - no reset
bit 1: 0 - disable IRQ
bit 0: 0 */
char normal_timeout; /* XT only */
char formatting_timeout; /* XT only */
char drive_check_timeout; /* XT only */
short landing_zone; /* AT and later */
char sectors_per_track; /* AT and later */
char unused;
};
Unused fields are zero.
The pointer to the parameters for drive 0 is found at the location for interrupt 0x41, at 0x0104. The pointer to the parameters for drive 1 is found at the location for interrupt 0x46, at 0x0118.
SCSI and ESDI drives do not use this table, and have drive type 0.