#------------------------------------------------------------------------------ # $File: spectrum,v 1.10 2023/05/08 01:33:36 christos Exp $ # spectrum: file(1) magic for Spectrum emulator files. # # John Elliott # # Spectrum +3DOS header # 0 string PLUS3DOS\032 Spectrum +3 data >15 byte 0 - BASIC program >15 byte 1 - number array >15 byte 2 - character array >15 byte 3 - memory block >>16 belong 0x001B0040 (screen) >15 byte 4 - Tasword document >15 string TAPEFILE - ZXT tapefile # # Tape file. This assumes the .TAP starts with a Spectrum-format header, # which nearly all will. # # Update: Sanity-check string contents to be printable. # -Adam Buchbinder # Update: Joerg Jenderek 2023 May # URL: http://fileformats.archiveteam.org/wiki/TAP_(ZX_Spectrum) # Reference: http://web.archive.org/web/20110711141601/http://www.zxmodules.de/fileformats/tapformat.html # http://mark0.net/download/triddefs_xml.7z/defs/t/tap-zx.trid.xml # Note: called "ZX Spectrum Tape image" by TrID and "TAP (ZX Spectrum)" by DROID via PUID fmt/801 # verified by fuse-emulator-utils `tzxlist EXAMPLES.TAP` # # headers length 19=023 and flag byte 0 indicating a standard ROM loading header 0 string \023\000\000 >4 string >\0 # skip {85CEE8D6-0F90-4492-B484-98E38862B28D}.2.ver0x0000000000000004.db {DDF571F2-BE98-426D-8288-1A9A39C3FDA2}.2.ver0x0000000000000001.db # inside c:\ProgramData\Microsoft\Windows\Caches according to TrID and DROID >>23 ubyte =0xFF # skip DROID fmt-801-signature-id-1166.tap with invalid name \253\253\253\253\253\253\253\253\253\253 # which looks like: "TF COPY II" "screen " "\023\001TF" " 1943 " >>>4 string <\177 Spectrum .TAP data "%-10.10s" #!:mime application/octet-stream !:mime application/x-spectrum-tap !:ext tap >>>>3 byte 0 - BASIC program # autostart line; 0..9999 are valid; 32768 means "no auto-loading" >>>>>16 uleshort x \b, autostart line %u # program length; length of BASIC program >>>>>18 uleshort x \b, program length %u >>>>3 byte 1 - number array >>>>3 byte 2 - character array >>>>3 byte 3 - memory block # length of the following data 1B00h=6912 and start address 4000h=16384 in case of a SCREEN$ header >>>>>14 belong 0x001B0040 (screen) # unused 32768=8000h >>>>>18 uleshort !32768 \b, unused %u # zxlength; length of the following data after the header >>>>14 uleshort x \b, data length %u #>>14 uleshort x \b, data length %#x # checksum byte; simply all bytes (including flag byte) XORed #>>>>20 ubyte x \b, checksum %#x # The following three blocks are from pak21-spectrum@srcf.ucam.org # TZX tape images # Update: Joerg Jenderek 2023 May # URL: http://fileformats.archiveteam.org/wiki/TZX # Reference: https://worldofspectrum.net/TZXformat.html # http://mark0.net/download/triddefs_xml.7z/defs/t/tzx.trid.xml # Note: called "ZX Spectrum Tape image" by TrID and "TZX Format" by DROID via PUID fmt/1000 0 string ZXTape!\x1a Spectrum .TZX data #!:mime application/octet-stream !:mime application/x-spectrum-tzx # CDT is used for Amstrad tapes !:ext tzx/cdt >8 byte x version %d >9 byte x \b.%d # ID of first block >10 ubyte x \b; ID %#x # turbo speed data block >10 ubyte =0x11 (turbo) # length of PILOT tone (number of pulses) >>21 uleshort x \b, %u pilot pulses # length of PILOT pulse >>11 uleshort x with %u tstates # length of SYNC first pulse >>13 uleshort x \b, %u and # length of SYNC second pulse >>15 uleshort x %u sync tstates # length of ZERO bit pulse >>17 uleshort x \b, %u zero tstates # length of ONE bit pulse >>19 uleshort x \b, %u one tstates # used bits in the last byte >>23 ubyte x \b, use %u bit # plural s >>23 ubyte >1 \bs # pause after this block in milliseconds >>24 uleshort x \b, %u ms pause # BYTE[3]; length of data that follow >>26 ulelong&0x00FFffFF x \b, %u data bytes >10 ubyte =0x20 (pause) # pause duration in milliseconds >>11 uleshort x %u ms # text description >10 ubyte =0x30 (text) # length of the text description #>>11 ubyte x L=%u >>11 pstring x "%s" # archive text description in ASCII format >10 ubyte =0x32 (archive info) # length of archive text >>11 uleshort x \b, %#x bytes # number of text strings >>13 ubyte x with %u (type) text parts # text type identification byte: 0~title 1~publisher 2~author 3~year 4~language 5~type 6~price 7~protection 8~origin ff~comment >>14 byte <9 (%d) >>>14 byte >-2 # length of text string #>>>>15 ubyte x L=%u >>>>15 pstring x %s # 2nd possible text description >>>>>&0 byte <9 (%d) >>>>>>&-1 byte >-2 >>>>>>>&0 pstring x %s # 3rd possible text description >>>>>>>>&0 byte <9 (%d) >>>>>>>>>&-1 byte >-2 >>>>>>>>>>&0 pstring x %s # 4th possible text description >>>>>>>>>>>&0 byte <9 (%d) >>>>>>>>>>>>&-1 byte >-2 >>>>>>>>>>>>>&0 pstring x %s # 5th possible text description >>>>>>>>>>>>>>&0 byte <9 (%d) >>>>>>>>>>>>>>>&-1 byte >-2 >>>>>>>>>>>>>>>>&0 pstring x %s # 6th possible text description >>>>>>>>>>>>>>>>>&0 byte <9 (%d) >>>>>>>>>>>>>>>>>>&-1 byte >-2 >>>>>>>>>>>>>>>>>>>&0 pstring x %s # 7th possible text description >>>>>>>>>>>>>>>>>>>>&0 byte <9 (%d) >>>>>>>>>>>>>>>>>>>>>&-1 byte >-2 >>>>>>>>>>>>>>>>>>>>>>&0 pstring x %s # RZX input recording files 0 string RZX! Spectrum .RZX data >4 byte x version %d >5 byte x \b.%d # Floppy disk images 0 string MV\ -\ CPCEMU\ Disk-Fil Amstrad/Spectrum .DSK data 0 string MV\ -\ CPC\ format\ Dis Amstrad/Spectrum DU54 .DSK data 0 string EXTENDED\ CPC\ DSK\ Fil Amstrad/Spectrum Extended .DSK data 0 string SINCLAIR Spectrum .SCL Betadisk image # Hard disk images 0 string RS-IDE\x1a Spectrum .HDF hard disk image >7 byte x \b, version %#02x # SZX snapshots (fuse and spectaculator) # Martin M. S. Pedersen # http://www.spectaculator.com/docs/zx-state/header.shtml # 0 string ZXST zx-state snapshot >4 byte x version %d >5 byte x \b.%d >>6 byte 0 16k ZX Spectrum >>6 byte 1 48k ZX Spectrum/ZX Spectrum+ >>6 byte 2 ZX Spectrum 128 >>6 byte 3 ZX Spectrum +2 >>6 byte 4 ZX Spectrum +2A/+2B >>6 byte 5 ZX Spectrum +3 >>6 byte 6 ZX Spectrum +3e >>6 byte 7 Pentagon 128 >>6 byte 8 Timex Sinclair TC2048 >>6 byte 9 Timex Sinclair TC2068 >>6 byte 10 Scorpion ZS-256 >>6 byte 11 ZX Spectrum SE >>6 byte 12 Timex Sinclair TS2068 >>6 byte 13 Pentagon 512 >>6 byte 14 Pentagon 1024 >>6 byte 15 48k ZX Spectrum (NTSC) >>6 byte 16 ZX Spectrum 12Ke >>>7 byte 1 (alternate timings)