summaryrefslogtreecommitdiff
path: root/magic/Magdir/spectrum
blob: cf14551b4d6b5502f35868839a57268b8b5662ed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184

#------------------------------------------------------------------------------
# $File: spectrum,v 1.10 2023/05/08 01:33:36 christos Exp $
# spectrum:  file(1) magic for Spectrum emulator files.
#
# John Elliott <jce@seasip.demon.co.uk>

#
# 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 <adam.buchbinder@gmail.com>
# 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 <martin@linux.com>
# 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)