Sources: the loader code of the chips emulator library (systems/kc85.h) and the Homecomputer DDR wiki page Kassettenformate, both read on 2026-11-15 through summarising fetch tools (“our words”), and six real KC-TAP files on the machine that built this site (five KC 85 tapes and one Z 9001 tape, read in place, not copied): the file sizes, the block numbers and the names below were checked on them. The values are bytes; two-byte values are low byte first.
Tape file: signature and blocks
| Offset | Size | Field | Description |
|---|---|---|---|
0 | 16 | Signature | C3 4B 43 2D 54 41 50 45 20 62 79 20 41 46 2E 20: the byte $C3 and the text “KC-TAPE by AF. ”. |
16 | 129 | Header block | A lead byte and the 128-byte header (see below). |
145 | 129 each | Data blocks | A lead byte and 128 bytes of the program; the number of blocks is the program length divided by 128, rounded up, and the last block is padded. |
Several tape files may follow one another, each with its own signature (the wiki: only a few emulators read these). The file sizes of the real files equal 16 + 129 × (1 + ⌈(end − load) / 128⌉) exactly.
Header block
The lead byte is the block number: 1 in the five KC 85 files seen, 0 in the Z 9001 file seen. The 128 bytes after it are the header of a KCC file:
| Offset in the header | Size | Field | Description |
|---|---|---|---|
$00 | 8 | Name | Characters, padded with zero bytes or spaces. |
$08 | 3 | Extension | The file type name: COM in the Z 9001 file seen, BAS in one KC 85 file. The chips source treats the 16 bytes as one name; the real files read as 8 + 3. |
$0B | 5 | Rest of the name field | Zero in some real files, other values in others (a 1 in one, characters in one, a $90 in the Z 9001 file). Their meaning is not in the sources read. |
$10 | 1 | Number of addresses | 0 to 3: how many of the following addresses are given. The loader rejects a file above 3. 3 in the KC 85 files seen, 2 in the Z 9001 file (no start address). |
$11 | 2 | Load address | Where the first byte goes. |
$13 | 2 | End address | The address after the last byte. The loader rejects a file whose end address is not above the load address. |
$15 | 2 | Start address | Where the program starts; meaningful when the number of addresses is 3 (the loader then also requires it to lie inside the program). |
$17 | 105 | Padding | Pads the header to 128 bytes. |
Data blocks
Each block is a lead byte and 128 data bytes. In the real files the lead bytes count up from the number after the header block’s (2 after a header numbered 1; 1 after a header numbered 0) and the last block carries 255. The tape file has no checksums: the real cassette’s lead tone and block checksums are not stored. The loader copies the 128 bytes of each block to memory from the load address until the end address is reached.