Map files start with a MapFileHeader structure which contains signature and version information to identify the file format and the positions of the other two other main components of the file format.
One of the other main components is the actual map data - latitudes and longitudes, text, etc. The start offset into the file and the length of this data is stored in the file header.
The other main component is the map descriptor information. This acts as an index into the map data and consists of a sequence of descriptors. Again, the offset into the file and the length is stored in the file header.
The structures in the map file format are defined using Microsoft C++ (MSVC1.0) class declarations. All integers are stored in Intel byte order (low order byte first). ints are twos complement signed 16 bit (2 byte) integers and longs are twos complement signed 32 bit (4 byte) integers. All characters are in a subset of the IBM "OEM" character set (such as code pages 437 or 850).
Within the defined structures, ints and longs are aligned on even byte boundaries so there may be single pad bytes in some locations. Similarly, structures are padded to be an even number of bytes in length.
Latitudes are expressed in milliminutes (thousandths of a sixtieth of a degree) north from the South Pole. They therefore range from zero to 10,800,000 (180 × 60 × 1000). Longitudes are expressed in milliminutes east from the 180°W line and range from zero to 21,600,000 (360 × 60 × 1000).