Difference between revisions of "AMSDOS Header"

From CPCWiki - THE Amstrad CPC encyclopedia!
Jump to: navigation, search
Line 17: Line 17:
 
| 17 || Last block || Tape only, set to 0
 
| 17 || Last block || Tape only, set to 0
 
|-
 
|-
| 18 || File type || 0=BASIC, 1=Binary, 2=Screen image, 3=ASCII, 4..7 are unallocated
+
| 18 || File type || Bit0 = Protection (set if protected) ; Bits1..3 = File contents (0:BASIC, 1:Binary, 2:Screen image, 3:ASCII, 4..7 are unallocated) ; Bits4..7 = Version
 
|-
 
|-
 
| 19..20 || Data length || The number of data bytes in the data record. As per cassette
 
| 19..20 || Data length || The number of data bytes in the data record. As per cassette

Revision as of 05:07, 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 Bit0 = Protection (set if protected) ; Bits1..3 = File contents (0:BASIC, 1:Binary, 2:Screen image, 3:ASCII, 4..7 are unallocated) ; Bits4..7 = Version
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.