Difference between revisions of "AMSDOS Header"

From CPCWiki - THE Amstrad CPC encyclopedia!
Jump to: navigation, search
m
Line 3: Line 3:
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Offset !! Size !! Name !! Notes
+
! Bytes !! Name !! Notes
 
|-
 
|-
| 0 || BYTE || User number || 0-15, or #E5 for deleted entries
+
| 0 || User number || 0-15, or #E5 for deleted entries
 
|-
 
|-
| 1 || 8 BYTES || Filename || Unused characters are filled with space
+
| 1..8 || Filename || Unused characters are filled with space
 
|-
 
|-
| 9 || 3 BYTES || Extension || Unused characters are filled with space
+
| 9..11 || Extension || Unused characters are filled with space
 
|-
 
|-
| C || DWORD || Zero || Contains all zeroes
+
| 12..15 || Zero || Contains all zeroes
 
|-
 
|-
| 10 || BYTE || Block number || Tape only
+
| 16 || Block number || Tape only
 
|-
 
|-
| 11 || BYTE || Last block || Tape only
+
| 17 || Last block || Tape only
 
|-
 
|-
| 12 || BYTE || 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")
 
|-
 
|-
| 13 || WORD || Data location || Address of the 2KB buffer
+
| 19..20 || Data location || Address of the 2KB buffer
 
|-
 
|-
| 15 || WORD ||Load address ||  
+
| 21..22 ||Load address ||  
 
|-
 
|-
| 17 || BYTE || First block || Set to #FF, only used for output files
+
| 23 || First block || Set to #FF, only used for output files
 
|-
 
|-
| 18 || WORD ||style="white-space: nowrap;"|  Logical length || Actual file length is here
+
| 24..25 ||style="white-space: nowrap;"|  Logical length || Actual file length is here
 
|-
 
|-
| 1A || WORD || Entry address ||  
+
| 26..27 || Entry address ||  
 
|-
 
|-
| 1C || 36 BYTES || Unused ||  
+
| 28..63 || Unused ||  
 
|-
 
|-
| 40 || 3 BYTES || Real length || 24-bit number. 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!
 
|-
 
|-
| 43 || WORD || Checksum || Unsigned sum of all bytes until this field
+
| 67..68 || Checksum || Unsigned sum of all bytes until this field
 
|-
 
|-
| 45 || 59 BYTES || Unused || Free to use
+
| 69..127 || Unused || Free to use
 
|}
 
|}
 +
 +
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.
 
To calculate the checksum just add all bytes from 00 up to and including byte 66 together.

Revision as of 11:24, 11 July 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
17 Last block Tape only
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 location Address of the 2KB buffer
21..22 Load address
23 First block Set to #FF, only used for output files
24..25 Logical length Actual file length is here
26..27 Entry address
28..63 Unused
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 Free to use

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.