The Transcopy v5 image format ----------------------------- by NewRisingSun, as of 2017-05-31. All information subject to change as I discover errors in my description or encounter a disk image that violates this description. 0x00 byte[2] Magic number: 0x5A 0xA5 0x02 char[32] First comment line, zero-terminated 0x22 char[32] Second comment line, zero-terminated 0x42 Unused, filled with random memory data : 0x100 byte Disk type 0xFF Unknown 0x02 MFM High Density 0x03 MFM Double Density in 360 rpm drive 0x04 Apple II GCR 0x05 FM Single Density 0x06 Commodore GCR 0x07 MFM Double Density 0x08 Commodore Amiga 0x0C Atari FM 0x101 byte Starting cylinder number 0x102 byte Ending cylinder number 0x103 byte Number of sides 0x104 byte Cylinder increment between tracks 0x105 word[] Track skew, one little-endian entry for each track, cylinder*2 entries; 0x1111 for empty entries. Single-sided disks have empty entries for the unused side. "Track skew" means how many clocks after the index signal the track data starts. The values are normalized such that a value of 40,000 represents one rotation of the disk. 0x305 word[] Start of track data SHR 8 in the file, one big-endian entry for each track, cylinder*side entries, otherwise 0x0000. The "SHR 8" part implies that a track always starts on a 256 byte boundary. 0x505 word[] Size of track data in bytes, one little-endian entry for each track, cylinder*2 entries; 0x3333 for empty entries. Single-sided disks have empty entries for the unused side. The bytes between the end of the track data, as specified in this field, and the 256-byte-aligned start of the next track data are filled with the data from the beginning of a second rotation of the disk. This applies only to files generated by original Central Point Software; the PCE utilities (PFI/PRI/PSI) just pad with 0x00 bytes, which may prevent "Keep Track Length" from working correctly when writing back these images with TC.EXE. 0x705 word[] Track flags, one little-endian entry for each track, cylinder*2 entries, otherwise 0x4444. The values for the very first track are the values displayed by TC.EXE for the entire disk. Bit 0 (value 0x01): 1=Keep Track Length. Bit 1 (value 0x02): 1=Copy Across Index. As I understand it, when not set, the "track skew" field is ignored when writing back the image to disk. Bit 2 (value 0x04): 1=Copy Weak Bits Bit 3 (value 0x08): 1=Verify Write Bit 4 (value 0x10): ? (never seen it set) Bit 5 (value 0x20): 1=??? Seems to be set whenever a sector crosses the index signal. If set, the "length tolerance" is changed from the default "8" to just "1". Bit 6 (value 0x40): 1=??? If set, value 0x20 is automatically cleared. Bit 7 (value 0x80): 1=No address marks encountered Bit 8-14: Track type, same as Disk type (see description at offset 0x100) Bit 15 (value 0x8000) 1=??? Usually set if bit 7 is set. I am not sure what exact behavior the various bits other than "copy weak bits" elicit in TC.EXE. The Option Board manual states that enabling "Copy Weak Bits" will turn off "Verify Write". 0x905 word[] Address mark timing. Needed for copy protection schemes that measure the time between Read ID commands results. Same value range as Track skew. The first entry is the time from the index until the first address mark and INCLUDES the track skew (from offset 0x105). This is followed by entries specifying the time from address mark to address mark. The last entry contains the remaining time so that the sum of all entries MINUS the track skew results in a value around 40,000. Sixteen little-endian entries for each track for Double Density disks. If a track has more address marks than that (for example, because of copy protection), only the first sixteen are used. If a track has fewer than 15 address marks, the remaining words are set to zero. Since I have never seen a .TC image made from a 3.5 HD disk, I don't know whether that means that only 15 of the 18 sectors have timing info, or if the number of entries is increased from 16 to 32 for HD disks. "Address marks" include Index Address Marks ("IAM", C2 C2 C2 FC) and Sector ID Address Marks ("IDAM", A1 A1 A1 FE), but NOT Data Address Marks ("DAM", A1 A1 A1 FB). 0x2904 Unused, filled with random memory data : 0x4000 Start of first track data. Raw MFM bit cell data, with bit order 0x80 0x40 0x20... byte-for-byte.