HDI / FDI File Format

File format documentation

The FDI/HDI file format is used in the Anex86 emulator. It consists of a relatively simple (but often large) header, followed by the data in C/H/S format

FDI/HDI are interchangeable and the same format, although FDI files are expected not to have HD geometry (> 2 heads) and vice versa.

The header starts at the beginning of the file (Offset 0):

Offs Size
____ _____ 
0x00 DWORD Reserved  			Must be set to zero
0x04 DWORD FDDType identifier 		(see below, also called the PDA)
0x08 DWORD HeaderSize 			Size of the entire header in bytes, default for Anex86 "New Disk" is 4096
0x0C DWORD DataSize 			Size of the C/H/S data segment in bytes.  DataSize + HeaderSize = File Size on Disk
0x10 DWORD Bytes per Sector 		Uniform for all sectors
0x14 DWORD Sectors  			Uniform for all tracks
0x18 DWORD Heads 			Uniform for all tracks
0x1C DWORD Cylinders 			Uniform for all tracks

A comment space may or may not follow this header. To allocate comment space, HeaderSize should equal the comment size desired - 32. A HeaderSize of 32 is the smallest valid value, and represents no comment section.

An example without a comment is shown below, as it appears in a hex editor, with a minimum header:


Or the much larger default header (0x1000 bytes, 4096) from Anex86:


The data segment then follows the header, in standard ordering. Because only a single value is provided for each aspect of drive geometry, varying size sectors and missing sectors are not supported by this format.

FDDType

This part is only understood from observations of 3rd parties about Anex86's reaction to various entries:

Floppy Disks (FDI)
__________________
0x90 when FD is 1.2M
0x30 when FD is 1.44M
0x10 when 640K or 720K (Used as a default)

Hard Disk (HDI)
_______________
It's not clear this is used for HDIs.  Generally, it is set to the disk capacity in MB.

Anex86 will have problems loading disks if the FDD type is set incorrectly. As such, converted FDIs of some unusual formats may not function properly in Anex86

Back to the main page