Changes

AMSDOS Header

1,627 bytes added, 26 April
In [[AMSDOS]] it is possible to store files in two ways: headerless and with a header. Headerless files are often files which were created with [[OPENOUT]] and ''SAVE"filename",a''. Programs normally have a file header, which consist of 128 bytes and contain the following data:
Byte 00: {| class="wikitable"|-! Field !! Bytes !! Name !! Notes|-| rowspan="10" | System || 0 || User number (value from || 0 to -15 , or #E5 for deleted entries) Byte 01 to 08: filename (fill unused char |-| 1..8 || Filename || Unused characters are filled with spaces)space Byte 09 to |-| 9..11: || Extension (fill unused char || Unused characters are filled with spaces)space Byte |-| 12..15 || Zero || Contains all zeroes|-| 16: first block (tape || Block number || Tape only), set to 0 Byte |-| 17: first || Last block (tape || Tape only), set to 0 Byte |-| 18|| File type || As per cassette: file type Bit0 = Protection (0:basic 1:set if protected 2:binary) Byte 21 and 22: loading address LSB first Byte 23: first block (tape only?) Byte 24 and 25: file length LSB first Byte 26 and 27: execution address for machine code program LSB first Byte 64 and 66: 24 bits file length LSB first. Just a copy, not used! Byte 67 and 68: checksum for bytes 00-66 stored LSB first Byte 69 to 127: undefined content, free to use
To calculate the checksum just add Bits1..3 = File contents (0:BASIC, 1:Binary, 2:Screen image, 3:ASCII, 4..7 are unallocated) Bits4..7 = Version (ASCII files should be version 1, all other files should be version 0)|-| 19..20 || Data length || As per cassette: the number of data bytes in the data record|-| 21..22 || Data location || As per cassette: where the data was written from 00 up originally|-| 23 || First block || Set to and including byte #FF, only used for output files|-| rowspan="3" | User || 24..25 || Logical length || As per cassette: actual file length is here|-| 26..27 || Entry address || As per cassette: the execution address for machine code programs|-| 28..63 || Unused || As per cassette|-| rowspan="3" | AMSDOS || 64..66 together|| Real length || Length of the file in bytes, excluding the header record. 24 bit number, least significant byte first. Just a copy, not used!|-| 67..68 || Checksum || Unsigned sum of all bytes until this field|-| 69..127 || Unused || |}   These headers are detected by checksumming the first 67 bytes of the record. If the checksum is as expected then a header is present, if not then there is no header. When a file without a header is opened for input, a fake header is constructed in store as follows: {| class="wikitable"|-! Bytes !! Name !! Notes|-| 0 || User number || User number, #00..#FF|-| 1..8 || Filename || Unused characters are filled with space|-| 9..11 || Extension || Unused characters are filled with space|-| 18 || File type || #16, unprotected ASCII version 1|-| 19..20 || Data location || Address of 2K buffer|-| 23 || First block || Set to #FF|} All other fields are set to zero.
This is only a summary. All details are in [[Firmware Guide]] chapter 9, page 4.
 
=== Expansion of the AMSDOS Header ===
Some OS and DOS expanded the classic AMSDOS header:
 
1. [[FutureOS Header]]:
* Contains and icon or information text
* File length is 24 Bit
* Defined Loading and Autostart (expansion) RAM configuration
* Additional file types
[[Category:Disc Operating System]]
[[Category:Programming]]
13,173
edits