Difference between revisions of "AMSDOS Header"
From CPCWiki - THE Amstrad CPC encyclopedia!
| Line 19: | Line 19: | ||
| 18 || File type || 0:BASIC 1:Protected 2:Binary (ASCII files don't have headers but a fake header is built in memory with the file type #16, "Unprotected ASCII v1") | | 18 || File type || 0:BASIC 1:Protected 2:Binary (ASCII files don't have headers but a fake header is built in memory with the file type #16, "Unprotected ASCII v1") | ||
|- | |- | ||
| − | | 19..20 || Data length || The number of data bytes in the data record | + | | 19..20 || Data length || The number of data bytes in the data record. As per cassette |
|- | |- | ||
| − | | 21..22 || Data location || Where the data was written from originally | + | | 21..22 || Data location || Where the data was written from originally. As per cassette |
|- | |- | ||
| 23 || First block || Set to #FF, only used for output files | | 23 || First block || Set to #FF, only used for output files | ||
|- | |- | ||
| − | | 24..25 || Logical length || Actual file length is here | + | | 24..25 || Logical length || Actual file length is here. As per cassette |
|- | |- | ||
| − | | 26..27 || Entry address || The execution address for machine code programs | + | | 26..27 || Entry address || The execution address for machine code programs. As per cassette |
|- | |- | ||
| − | | 28..63 || Unused || | + | | 28..63 || Unused || As per cassette |
|- | |- | ||
| 64..66 || Real length || Length of the file in bytes, excluding the header record. 24 bit number, least significant byte first. Just a copy, not used! | | 64..66 || Real length || Length of the file in bytes, excluding the header record. 24 bit number, least significant byte first. Just a copy, not used! | ||
Revision as of 05:02, 15 October 2024
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:
| Bytes | Name | Notes |
|---|---|---|
| 0 | User number | 0-15, or #E5 for deleted entries |
| 1..8 | Filename | Unused characters are filled with space |
| 9..11 | Extension | Unused characters are filled with space |
| 12..15 | Zero | Contains all zeroes |
| 16 | Block number | Tape only, set to 0 |
| 17 | Last block | Tape only, set to 0 |
| 18 | File type | 0:BASIC 1:Protected 2:Binary (ASCII files don't have headers but a fake header is built in memory with the file type #16, "Unprotected ASCII v1") |
| 19..20 | Data length | The number of data bytes in the data record. As per cassette |
| 21..22 | Data location | Where the data was written from originally. As per cassette |
| 23 | First block | Set to #FF, only used for output files |
| 24..25 | Logical length | Actual file length is here. As per cassette |
| 26..27 | Entry address | The execution address for machine code programs. As per cassette |
| 28..63 | Unused | As per cassette |
| 64..66 | 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.
To calculate the checksum, just add all bytes from 00 up to and including byte 66 together.
This is only a summary. All details are in Firmware Guide chapter 9, page 4.