Source: a post by a user called KC in the GameBase 64 forum’s Acorn Atom thread (8 February 2013), read on 2026-11-15 through a summarising fetch tool (“our words”): “An .ATM file is a data file with a 22 bytes header in front” and “A .TAP file is nothing else than a sequential file with all .ATM files copied after each other”. It is a forum post, not a specification. The two real tape files on the machine that built this site (two commercial Atom games, read in place, not copied) agree with it: in both, every header leads exactly to the next and the last data ends at the last byte of the file. Two-byte values are low byte first.
ATM header
| Offset | Size | Field | Description |
|---|---|---|---|
0 | 16 | File name | Characters, ended by a zero byte and padded with zeros in the files seen. The post does not say how a short name is padded. |
16 | 2 | Load address | Where the data goes ($2900 and $2400 to $2B00 in the files seen). |
18 | 2 | Execute address | Where the program starts. $CE86 in both real files’ first (BASIC) program, an address in the Atom’s ROM area (what is there is not described here). |
20 | 2 | Length | The number of data bytes that follow. |
Files
The data of a file follows its header, as many bytes as the length says, and the next header follows the data, with nothing between: a file of n data bytes takes 22 + n bytes. A tape file holds one or more such records; the last one ends at the end of the file. The viewer opens each file as bytes and decodes the data as 6502 code at its load address.
The registry recognises the format by this chain: every record’s name is 1 to 16 printable characters ended by a zero byte or by the end of the 16 bytes, and the lengths lead exactly to the end of the file. A random file does the same by chance with a probability too small to measure: none of 60,000 random files of nine sizes, and none of 20,000 files of random printable text, was taken for an Atom tape.