Difference between revisions of "AMSDOS Header"
Line 46: | Line 46: | ||
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. | 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" | ||
+ | |- | ||
+ | ! Field !! Bytes !! Name !! Notes | ||
+ | |- | ||
+ | | rowspan="10" | System || 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 | ||
+ | |- | ||
+ | | 12..15 || Zero || Contains all zeroes | ||
+ | |- | ||
+ | | 18 || File type || #16, unprotected ASCCI 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. | This is only a summary. All details are in [[Firmware Guide]] chapter 9, page 4. |
Revision as of 04:37, 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:
Field | Bytes | Name | Notes |
---|---|---|---|
System | 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 | As per cassette: 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 (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 originally | |
23 | First block | Set to #FF, only used for output files | |
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 | |
AMSDOS | 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.
When a file without a header is opened for input a fake header is constructed in store as follows:
Field | Bytes | Name | Notes |
---|---|---|---|
System | 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 | |
12..15 | Zero | Contains all zeroes | |
18 | File type | #16, unprotected ASCCI 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.