Top 10k strings from TZXformat.html.orig in <root> / doc / technical / specifications /

Back to the directory listing

 126 <td align="center">-</td>
 114 <tr bgcolor="#c0f0ff">
  53 <tr bgcolor="#ffdf90">
  50 <td align="center">BYTE</td>
  50 </tbody></table>
  49 <td align="center">WORD</td>
  46 <table align="center" bgcolor="#000000" border="0" cellpadding="2" cellspacing="1" width="70%">
  41 <td align="center">0x00</td>
  40 <td align="center"><strong>Description</strong></td>
  38 <tr bgcolor="#c0ffc0">
  38 <td align="center" width="8%"><strong>Offset</strong></td>
  37 <td align="center" width="8%"><strong>Value</strong></td>
  37 <td align="center" width="15%"><strong>Type</strong></td>
  37 <tbody><tr bgcolor="#80a0ff">
  30 <tr bgcolor="#fff000">
  25 <p align="right"><a href="#ID_LIST">Return to ID list</a> - <a href="#INDEX">Return to index</a></p>
  21 <tr bgcolor="#f7f7ff">
  15 <td align="center">N</td>
  15 <td align="center">DWORD</td>
  13 <td align="center">0x04</td>
  13 <td align="center">0x02</td>
  12 <td align="center">0x01</td>
  12 00100000 - 0x20<br>
  11 <td align="center">L</td>
  11 <td align="center">0x10</td>
  11 </td></tr>
   8 <td align="center">CHAR[L]</td>
   8 <td align="center">BYTE[3]</td>
   8 00000000 - 0x00<br>
   7 <td>Length of data that follow</td>
   7 <td align="center">BYTE[N]</td>
   7 <td align="center">0x14</td>
   7 <td align="center">0x0A</td>
   7 <td align="center">0x06</td>
   7 <td align="center" bgcolor="#ff7848" width="10%"><font color="white" size="+2"><b>
   7 <p><table bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="12" width="100%"><tbody><tr>
   7 </font></td></tr></tbody></table>
   7 </b></font></td><td><font size="+2">
   6 <td align="center">CHAR[10]</td>
   6 <td align="center">2</td>
   6 <td align="center">0x0C</td>
   6 <td align="center">
   5 <tr bgcolor="#ffc0c0">
   5 <tr bgcolor="#b0e0f0">
   5 <td>Data as in .TAP files</td>
   5 <td align="center">0x15</td>
   5 <td align="center">0x12</td>
   5 <td align="center">0x08</td>
   5 <td align="center">0x03</td>
   5 <tbody><tr bgcolor="#ffc0c0">
   5 <p align="right"><a href="#DEPRECATED">Return to deprecated ID list</a> - <a href="#INDEX">Return to index</a></p>
   5 <br><br><br>
   4 <tr bgcolor="#ffff90">
   4 <td align="center">0x11</td>
   4 <td align="center">0x0B</td>
   4 <td align="center">0</td>
   4 <br><p align="right"><font size="+2"><a href="#INDEX">Return to index</a></font></p>
   4 </ul></li>
   4 01010000 - 0x50<br>
   3 <td>Pause after this block in milliseconds (ms.)</td>
   3 <td>Pause after this block (ms.)</td>
   3 <td>Block length (without these four bytes)</td>
   3 <td colspan="4" align="center"><strong><font color="#606060" size="-2">length: </font><font color="#ff6060" size="-2">02</font></strong></td>
   3 <td colspan="4" align="center"><strong><font color="#606060" size="-2">length: </font><font color="#ff6060" size="-2">00</font></strong></td>
   3 <td align="center">BYTE[L]</td>
   3 <td align="center">0x15+L</td>
   3 <td align="center">0x0E</td>
   3 <td align="center">0x09</td>
   3 <td align="center">0x05</td>
   3 <table border="0" width="100%"><tbody><tr><td width="10%"></td>
   3 </td></tr></tbody></table>
   2 <td>Total block length</td>
   2 <td>Pause after this block (ms.) {1000}</td>
   2 <td>Number of symbols in pilot/sync alphabet</td>
   2 <td>Number of symbols in data alphabet</td>
   2 <td>Number of pulses</td>
   2 <td>Max pulses per symbol</td>
   2 <td>Max pulses per data symbol</td>
   2 <td>Length of the whole block (without these two bytes)</td>
   2 <td>Length of the WHOLE block including the data (extension rule)</td>
   2 <td>Length of following data</td>
   2 <td>Description of the document in ASCII format</td>
   2 <td><br><br>
   2 <td colspan="4" align="center"><strong><font color="#606060" size="-2">length: </font><font color="#ff6060" size="-2">[00]+01</font></strong></td>
   2 <td colspan="4" align="center"><strong><font color="#606060" size="-2">length: </font><font color="#ff6060" size="-2">[00,01,02,03]</font></strong></td>
   2 <td colspan="4" align="center"><strong><font color="#606060" size="-2">length: </font><font color="#ff6060" size="-2">[00,01,02,03]+04</font></strong></td>
   2 <td colspan="4" align="center"><strong><font color="#606060" size="-2">length: </font><font color="#ff6060" size="-2">04</font></strong></td>
   2 <td align="center">WORD[N]</td>
   2 <td align="center">CHAR[N]</td>
   2 <td align="center">Bit 0</td>
   2 <td align="center">BYTE[]</td>
   2 <td align="center">?</td>
   2 <td align="center">2800</td>
   2 <td align="center">1</td>
   2 <td align="center">152 (0x98)</td>
   2 <td align="center">1280</td>
   2 <td align="center">1000 (0x03E8)</td>
   2 <td align="center">0x22</td>
   2 <td align="center">0x16</td>
   2 <td align="center">0x15+L+1</td>
   2 <td align="center">0x0D</td>
   2 <td align="center">0x07</td>
   2 <td align="center">(2)</td>
   2 <tbody><tr bgcolor="#c0a0ff">
   2 <table border="0" width="100%"><tbody><tr><td width="10%"> </td>
   2 <p align="right"><a href="#INDEX">Return to index</a></p>
   2 <font size="1">This field is present only if TOTP&gt;0</font>
   2 11000001 - 0xC1
   2 10000000 - 0x80<br>
   2 01010011 - 0x53<br>
   2 01001010 - 0x4A<br>
   2 01000000 - 0x40<br>
   2 00011011 - 0x1B<br>
   2 00000011 - 0x03<br>
   2 (e.g. if this is 6, then the bits used (x) in the last byte are: xxxxxx00, where MSb is the leftmost bit, LSb is the rightmost bit)</td>
   1 zero-length pulse in the sequence.<br>
   1 you would only include the entry that says that the game uses the
   1 you might have to the TZX maintainers so that they can be included. <br><br>
   1 you can include a list of sequences to be called. The 'nesting' of call
   1 written in 3.5MHz clock. Also, there might be some junk bits (usually 7
   1 write their own viewers (yeah, right ;) ). For inlay cards and other
   1 would have an alphabet of four symbols, each associated to a specific
   1 works on AND uses the hardware of a 128K Spectrum AND the game DOESN'T
   1 work on a 48K Spectrum.<br>
   1 word) after the ID (this length does not include these 4 length bytes).
   1 won't work on any Spectrum or Spectrum variant, so there's no need to
   1 with turbo or custom loading routines. Even though some of the newer
   1 will be used.
   1 while browsing the tape or changing the tape pointer.<br>
   1 where each sequence (wave) can contain a different number of pulses
   1 whatever) must be able to handle files of at least its major version
   1 way to determine it is to calculate it from the timings you get when
   1 view the raw data in the TZX file then you will have to mirror each
   1 version 1.10 will have the length of the block in first 4 bytes (long
   1 variable is given as 'W', the 'H' value is 'W/2'. Of course the best
   1 used by their respective ROM loading routines (some of them are not
   1 used by the C64. Most of the commercial software uses this type of
   1 use the CALL blocks in the LOOP sequences and vice versa. The value is
   1 use the 'User inserts the POKE value' feature. You can specify the
   1 use it for something else than 'Instructions' - you can use it for
   1 use extension .ZED. Also the description is added, in case you want to
   1 use a single CR character (13 dec, 0D hex) to separate lines; also
   1 us what the text means) and then the ASCII text. To make it possible to
   1 tools and emulators to maintain full backward compatibility with old
   1 to use this block is to spawn an external viewer, or the authors can
   1 to as a 'pulse'.</li>
   1 timings will change accordingly. In the above table the value of this
   1 time is 0 then the emulator should wait for the user to press a key.<br><br>
   1 through the game). Normally you would enter these pokes with the help
   1 those blocks. However if this system variable is changed then the
   1 this case. This also applies to 'Data' blocks that have some pause
   1 this block was not used. All you have to do if you encounter this block
   1 they are represented using a very simple RLE encoding structure which
   1 there is the PILOT tone, then the two SYNC pulses (one wave) and after
   1 the tape.<br>
   1 the tape should be used on an Amstrad CPC with 4MHz clock then you
   1 the same. </td></tr></tbody></table>
   1 the game, author, publisher, year of publication, price (including the
   1 the emulators will support this block directly, in which case you could
   1 the emulators don't have to bother with finding out the timings and
   1 the code itself, this isn't possible if you want to save the file to
   1 the byte XOR-ed with the value in this field as the start value.</li>
   1 the brackets. Other values are normal numbers. Example: [02,03]+0A
   1 the block will be at most 1/8 the size of the equivalent VOC.<br>
   1 the actual Tape loading is taking place (which doesn't do much sense).
   1 the Sync value another, different, Data byte is sent to signal the
   1 that uses two or four pulses (which are the same in pairs) per bit can
   1 that the turbo loader block cannot be used. This is not like a VOC
   1 that the actual DATA (which can include a FLAG byte at the beginning
   1 that load one level at a time in 48K mode, but load the entire tape at
   1 that is in Spectrum Video format (that's why the Description is there
   1 that could be represented with this file format then let us know.<br>
   1 that block. </li><li>Just in case:<br>
   1 that are used in the 'Hardware info' block. Please send any additions
   1 tape, or to a real Spectrum. And with all this information in the file,
   1 sync tones used by some protection schemes.<br>
   1 stores the symbol and the number of times it must be repeated.<br>
   1 starts, where to rewind to when the game ends, etc. This description is
   1 starting to play a TZX file, either from the start or from a certain
   1 start of the data. The Data Bits are made from ONE wave only and there
   1 standard sampling frequencies of 22050 or 44100 Hz. This will ensure
   1 standard ROM and similar tape blocks. It is made so basically anything
   1 square brackets [] mean that the value must be read from the offset in
   1 speed, and therefore the 'Standard Speed Data' block can be used for
   1 specified number of times.<br>
   1 sound chip (AY) of the 128K Spectrum and none of its extra memory then
   1 skip this block, if needed, the length of the whole block is at the
   1 since this is a very important part for emulators.<br>
   1 simple pictures (drawing, maps, etc.) use the GIF format. <br><br>
   1 should multiply ALL timings with 4/3.5 when you use that tape (this
   1 should jump back to the start of the loop if it hasn't been run for the
   1 should follow immediately; not even so much as one T state between them.</li>
   1 should be trivial). Similarly goes for SAM Coupe, that uses a 6MHz
   1 sequence of pulses (wave).<br><br>
   1 separately-loadable parts. With this block, you are able to select one
   1 separately because the original is either encrypted (like with the
   1 sampling the Pilot tone. The values in the table could be by a fraction
   1 same tape encoding is used as for the standard speed data block. If a
   1 same mechanism is used to replay data for all machines then there will
   1 revision 1.13, and then passed to Martijn v.d. Heide.
   1 required by a particular emulator, or even poke data.
   1 represented with 4 pulses and bit 1 with 8 pulses.<br>
   1 represented by one bit only (0 for low, 1 for high) which means that
   1 relative for the obvious reasons - so that you can add some blocks in the
   1 recommended way of doing this is to include a Pause after each sequence
   1 purpose of storing the instructions to the program or game that is in
   1 pulses. The number of columns (i.e. pulses) of the table is the length
   1 pulse should go to 'low'. At the end of a 'Pause' block the 'current
   1 pulse level' is well-defined in every sequence of blocks where this is
   1 pulse level' is low (note that the first pulse will therefore not
   1 preferable to use a utility to join the two files and ensure that they
   1 position. The writer of a TZX file should ensure that the 'current
   1 point at which to insert the POKEs in the 'General description' field.<br>
   1 please use only up to 80 characters per line.
   1 played will be the block after the last CALL block (or the next Call,
   1 pictures that have zillions of colours use the JPEG format, for more
   1 other things.<br>
   1 other formats support. Please inform me of any additions/corrections
   1 original value of the address (if you want to restore it some way
   1 original loading screen then you can supply it separately within this
   1 origin (Original, Budget re-release, ...), etc. This block is built in
   1 or when it is a multiload. Of course, to make some use of it the
   1 or emulator requests it.<br>
   1 or 8) AFTER the checksum (XOR) byte at the end of the block, but they
   1 only up to 30 characters per line and separate the lines by one CR (13
   1 once if in 128K mode.<br>
   1 official). If you know of any other machines that have similar encoding
   1 of the real ones, but it should not matter. Note: All timings are
   1 of the parts and the utility/emulator will start loading from that
   1 of the longest sequence amongst all (MAXP=NPP or NPD, for pilot/sync or
   1 of text strings. Each text has its identification number (which tells
   1 of some freezer-type tool like Multiface, but hopefully in the future
   1 of protection schemes) then use the next three blocks to describe it. <br>
   1 of blocks.</li>
   1 of blocks, each identified by an ID byte.<br>
   1 number. If your program can handle (say) version 1.05 and you encounter
   1 not guaranteed to be shown while the tape is playing, but can be read
   1 necessary to avoid any ambiguities, e.g. with custom loaders which are level-sensitive.<br>
   1 milliseconds. If the value is 0 then the emulator or utility should (in
   1 means: get number (a word) from offset 02 and add 0A. All numbers are
   1 machine/hardware combination then do not include it in the list.<br>
   1 lots of subblocks like Bleepload (which may well have over 160 custom loading
   1 look at 'Jump To Block' for reference on the values.<br>
   1 loading, so the bit 1 pulse must be read from the pilot tone and bit 0
   1 list this information.<br>
   1 levels respectively. The 'current pulse level' after playing a Direct
   1 just set the description length field to 0 when you use it for that.
   1 it, even if it cannot handle all the data in the file.<br>
   1 it might contain some information written by a utility, extra settings
   1 is the opposite of the last pulse level played, so that a subsequent pulse will produce an edge. </li>
   1 is not important, as long as it is done consistently.</li>
   1 is made for the ZX Spectrum and complies with the following:
   1 is implemented as ear=1 and ear=0 respectively or the other way around
   1 is here so that you can easily copy the files together and use them. Of
   1 is an 48K Spectrum. This block is to be used for multiloading games
   1 is NO XOR checksum either! Trailing byte is played AFTER the DATA has
   1 info (like the 'Bleepload' loader). Of course not only loading screens
   1 include only machines and hardware for which you are 100% sure that it
   1 in the ID 10, ID 11 blocks. You can define how long the pulse is and
   1 in hex.</li>
   1 important, i.e. in any sequence that includes a 'Direct recording'
   1 immediately produce an edge). A 'Pause' block of zero duration is
   1 if the Call block had multiple calls).<br>
   1 how many pulses are in the tone.
   1 have to change in the future; for RISC OS, the current TAP file type
   1 have now been deprecated and they should not appear in TZX files v1.20
   1 hardware of the 128K Spectrum, then you would just include the 128K
   1 from the others. In this way we can have a situation where bit 0 is
   1 from the ZX Spectrum files, otherwise the inner structure is totally
   1 frequency type encoding. Each bit is represented by one 'wave' of
   1 frequencies.<br><br>
   1 for), but because the Loading Screen will be the most common you can
   1 for custom loading routines that use the same timings as ROM ones do.<br>
   1 file. The value is a signed short word (usually 'signed short' in C);
   1 file, since the information is much more compact. Each sample value is
   1 file too. So cover pictures, maps, etc. can now be included in full
   1 extensions.<br>
   1 executes a sequence of blocks that are somewhere else and then goes
   1 ended.<br>
   1 encounters such a block. All offsets are relative signed words.<br>
   1 encoding, i.e. the Pilot tone is not made from one type of Wave only,
   1 emulators. For now it contains info on everything I could find that
   1 emulator/utility has to show a menu with the selections when it
   1 either runs (or doesn't run) on or with, or you know it uses (or
   1 effect) STOP THE TAPE, i.e. should not continue loading until the user
   1 duration included in them.</li>
   1 down to about 30 so the programs can show it in one line (where this is
   1 doesn't use) the hardware or special features of that machine.<br>
   1 distinct waves; for example, imagine a loader which writes two bits at
   1 different duration for bit 0 and bit 1. Normally bit 1 is twice as big
   1 differences between these machines and a table which displays timings
   1 defined for other machines too, e.g. the Amstrad CPC and C64, but they
   1 decimal (0D hex).</li>
   1 data) is associated to a specific sequence of pulses,
   1 data to be MSb first. This might lead to some confusion, but if the
   1 data blocks respectively); shorter waves are terminated by a
   1 currency), type of software (arcade adventure, puzzle, word processor,
   1 course, this means that resulting file would be 10 bytes longer than if
   1 correct playback when using PC's soundcards.</li>
   1 containing the major and minor version numbers.<br>
   1 computers only. Specialized versions of the TZX format have been
   1 computers do. It stores the LSb first, but the data blocks require the
   1 compression format, see the <a href="http://www.ramsoft.bbk.org/csw.html">CSW documentation</a>.<br>
   1 completely ignored, so the 'current pulse level' will NOT change in
   1 colour (or whatever the formats supports). The best way for utilities
   1 clock and Jupiter ACE that uses 3.2448 MHz and Enterprise that uses 4
   1 can vary from 1000 to 2000 baud.<br>
   1 can just be ignored.<br>
   1 can have several lines, which should be separated by ASCII code 13
   1 can be stored here... you can use it to store maps or any other picture
   1 can be read from the sync pulses, and is always half the size of bit 1.
   1 byte to get the correct values.<br>
   1 but it is made from actual Data byte which is repeated many times. As
   1 blocks. Header blocks have 8063 and data blocks have 3223 pilot pulses.<br>
   1 blocks, you can use this block to tell how many times they should be
   1 blocks). You can also give the group a name (example 'Bleepload Block 1').<br>
   1 blocks is also not allowed for the simplicity reasons. You can, of course,
   1 block. This is also very handy when you want the loading screen stored
   1 block. For example you can use it when the game has a separate Trainer
   1 block, or that depends on edges generated by 'Pause' blocks. The
   1 block should use some non-standard sync or pilot tones (i.e. all sorts
   1 block (ID 40). These block IDs are now reserved.
   1 beginning of the file without disturbing the call values. Please take a
   1 beginning of it.<br>
   1 be written with it.<br><br>
   1 be no problem. Just store the data as MSb first, but if you want to
   1 be at least 1 ms. pause of the opposite level and only after that the
   1 back to the next block. Because more than one call can be normally used
   1 b0-b1: starting symbol polarity<br>
   1 attributes), different type faces, colours, etc. Normally these files
   1 as one single (composite) block. This is very handy for tapes that use
   1 as bit 0. In the blocks, the timings are presented with Z80 T-states
   1 as a consequence, it appears that almost no existing TZX files contain them.
   1 are now available as distinct file formats with other filename
   1 are both of the higher version number.<br>
   1 appropriate).<br>
   1 and then continue with the next block.<br>
   1 and above.
   1 and a CHECKSUM byte at the end).<br><br>
   1 and Jupiter ACE use different tape encoding than the others.
   1 and 'smarter' emulators can find most of the info about the loader from
   1 all the tape blocks (level data, etc.) in the same file. Only .Z80 and
   1 additional info on the timings and other important differences. The
   1 accurate information then we would be glad to include it here.
   1 according to a 3.5MHz clock (the standard Spectrum 16/48K clock), so if
   1 a way that allows easy future expansion. The block consists of a series
   1 a time by encoding them with four distinct pulse lengths: this loader
   1 a file with version number 1.06, your program must be able to handle
   1 ZX-Spectrum and its documents can contain text, graphics (with Spectrum
   1 ZX-Editor. This utility gives documents the look and feel of
   1 ZX-81 Jupiter ACE and Enterprise. Only ZX-81 (or the old Timex 1000)
   1 When this block is encountered, the tape will stop ONLY if the machine
   1 Use this block at the beginning of the tape to identify the title of
   1 To ensure that the last edge produced is properly finished there should
   1 To ensure consistency with all other ASCII texts in this format please
   1 To be able to use a TZX file, your program (emulator, utility, or
   1 Thus the length of the whole data stream in bits is NB*TOTD, or in bytes DS=ceil(NB*TOTD/8).
   1 Those bits that are not used by the emulator that stored the info, should be left at their DEFAULT values.<br>
   1 This would enable one to snapshot the game at the start and still have
   1 This will produce a tone which is basically the same as the pilot tone
   1 This will make a silence (low amplitude level (0)) for a given time in
   1 This will enable the emulators to display a message for a given time.
   1 This should not stop the tape and it should not make silence. If the
   1 This should enable programs that can only handle older versions to skip
   1 This is the same as in the turbo loading data block, except that it has no pilot or sync pulses.<br>
   1 This is the same as BASIC's NEXT statement. It means that the utility
   1 This is the list of all hardware types and hardware identification ID's
   1 This is meant to identify parts of the tape, so you know where level 1
   1 This is a special block that would normally be generated only by
   1 This indicates the end of a group. This block has no body.<br>
   1 This file format is explicitly targeted to the ZX Spectrum compatible
   1 This document has passed W3C HTML 4.0 Validation.
   1 This blocks contains information about the hardware that the programs on this tape use. Please
   1 This block will enable you to jump from one block to another within the
   1 This block sets the current signal level to the specified value (high or low). It should be used whenever it is
   1 This block must be replayed with the standard Spectrum ROM timing values - see the values in curly brackets in block ID 11.
   1 This block marks the start of a group of blocks which are to be treated
   1 This block is very similar to the normal TAP block but with some
   1 This block is useful when the tape consists of two or more
   1 This block is used for tapes which have some parts in a format such
   1 This block is the same as the FOR statement in BASIC.<br>
   1 This block is made to support another type of encoding that is commonly
   1 This block is generated when you merge two ZX Tape files together. It
   1 This block is an analogue of the CALL Subroutine statement. It basically
   1 This block indicates the end of the Called Sequence. The next block
   1 This block has no body.<br>
   1 This block has no body of its own, but follows the extension rule.<br>
   1 This block has been specifically developed to represent an extremely wide range of data encoding techniques.<br>
   1 This block contains a sequence of raw pulses encoded in CSW format v2
   1 This block can hold files created with the new utility called
   1 This block can be used to save any information you want. For example,
   1 These were only some examples of the usage of this block. 
   1 These values are in decimal.</li>
   1 Their structure is documented here for completeness, to allow general
   1 The very same data information encoded to work with the ZX81 would look like this:<br>
   1 The text message should:
   1 The standard value is 112, which is VERY close to ZX Spectrum loading
   1 The replay procedure looks like this:
   1 The purpose of this custom block is to hold any amount of different trainers for the game.
   1 The preferred sampling frequencies are 22050 or 44100 Hz (158 or 79
   1 The pilot tone consists in 8063 pulses if the first data byte (flag byte) is &lt; 128,
   1 The numbers in brackets [] represent the values for C64 ROM loader.<br>
   1 The list of hardware types and IDs is somewhat large, and may be found at the end of the format description.<br>
   1 The information about what hardware the tape uses is in the 'Hardware Type' block, so no need for it here.<br>
   1 The format was first started off by Tomaz Kac who was maintainer until
   1 The following blocks, which were in the format until revision 1.13 (inclusive),
   1 The file is identified with the first 8 bytes being 'ZXTape!' plus the
   1 The emulator should take care of that the snapshot is not taken while
   1 The description can be up to 255 characters long but please keep it
   1 The default format file extension is "TZX" and hopefully this won't
   1 The checksum is also different than the other two machines. The speed
   1 The basic idea is that each loading component (pilot tone, sync pulses,
   1 The alphabet is stored using a table where each symbol is a row of
   1 TZX is a file format designed to preserve all (hopefully) of the tapes
   1 TZX files.
   1 TZX files v1.20 and above: C64 blocks (ID 16 and ID 17), Emulation Info (ID 34), Snapshot
   1 TZX file format
   1 T-states/sample). Please, if you can, don't use other sampling
   1 Spectrum in the list (because by default it has to work on 48K too).<br>
   1 Some of the most common uses of the Custom info block (ID 35) have become standardized in the past revisions, although now they are deprecated:<br>
   1 Some explanation:
   1 Some examples: <ul>
   1 SYMDEF[1]:<br>
   1 SYMDEF[1]: ( 0, 667, 735)
   1 SYMDEF[1]: ( 0, 1710, 1710)
   1 SYMDEF[0]:<br>
   1 SYMDEF[0]: ( 0, 855, 855 )<br>
   1 SYMDEF[0]: ( 0, 2168, 0 )<br>
   1 Rules and definitions
   1 Revision history
   1 Recording block of CSW recording block is the last level played.</li>
   1 ROM load/save routine for each of these machines. If you have more
   1 Please use this block only if you cannot use any other block.<br>
   1 Please use 'Archive Info' block for title, authors, publisher, etc.<br>
   1 PRLE[1]: ( 1, 1)
   1 PRLE[0]: ( 0, 8063 )<br>
   1 NOTE: All ASCII Descriptions can use more than one line. Please use
   1 Most commonly, pilot and sync are repetitions of the same pulse, thus
   1 Machine specific information
   1 MSb = most significant bit<br>
   1 MSB = most significant byte<br>
   1 MAPs, etc.<br><br>
   1 LSb = least significant bit<br>
   1 LSB = least significant byte<br>
   1 Just skip these 9 bytes and you will end up on the next ID.</td>
   1 Introduction
   1 If, for example, game works on BOTH ZX 48K and 128K, and uses the
   1 If you're looking for TZX files, you can find an extensive collection at Martijn van der Heide's '<a href="http://www.worldofspectrum.org/">World of Spectrum</a>'.<br>
   1 If you have any questions about the format, visit the forums at <a href="http://www.worldofspectrum.org/">World of Spectrum</a> and ask.<br>
   1 If you have a sequence of identical blocks, or of identical groups of
   1 If you do not obey these rules, emulators may display your message in any way they like.<br>
   1 If you can avoid using this block for this purpose, then do so; it is
   1 If you are not sure or you haven't tested a tape on some particular
   1 If the tape runs only on the ZX81 (and TS1000, etc.) then it clearly
   1 If the game works on both 48K and 128K Spectrum, but it only uses the
   1 If the game is 128K ONLY then you would include two entries: The game
   1 If all texts on the tape are in English language then you don't have to supply the 'Language' field<br>
   1 ID is to skip next 9 bytes.<br>
   1 However note that these blocks have not proven to be useful and,
   1 Here is a table showing the pulse timings for each part of the standard
   1 Hardware information reference
   1 For simplicity reasons don't nest loop blocks!<br>
   1 For each group start block, there must be a group end block. Nesting of groups is not allowed.<br>
   1 For each POKE entry you can supply the memory page number and/or the
   1 Finally you can include any picture (in supported formats) in the TZX
   1 Enterprise has two loading speeds so timings for both are included.
   1 Each trainer can have its own description and any number of POKEs.<br>
   1 Each symbol in the data stream is represented by a string of NB bits of the block data, where NB = ceiling(Log2(ASD)).
   1 Deprecated blocks
   1 Currently supported machines are: ZX Spectrum, Amstrad CPC, SAM Coupe,
   1 By default you don't have to write any of the information if the game
   1 At the end of this document you can find a description of encoding
   1 Any number of data symbols is allowed, so we can have more than two
   1 And when an emulator encounters the snapshot block it should load it
   1 Amstrad CPC files should use the extension "CDT" to distinguish them
   1 Also the border colour can be specified. <br><br>
   1 Also added the following field:
   1 All blocks are included in the block count!<br>
   1 All Custom info (ID 35) types standardized up to Revision 1.13 are now deprecated.</li>
   1 Again, this block has no body.<br>
   1 After that, Ramsoft were the maintainers for a brief period during which the v1.20 revision was put together.
   1 A typical Spectrum's standard loading header can be represented like this:<br>
   1 <tr bgcolor="#8080d0">
   1 <td>ZERO bit pulse</td>
   1 <td>ZERO bit 2nd wave pulse length [896]</td>
   1 <td>ZERO bit 1st wave pulse length [616]</td>
   1 <td>XOR Checksum bit for each Data byte: [1] <br>
   1 <td>Value: { "XTape!",0x1A,MajR,MinR } <br>
   1 <td>Used bits in the last byte (other bits should be 0) {8}<br>
   1 <td>Used bits in last byte (other bits should be 0)<br>(e.g. if this is 6, then the bits used (x) in last byte are: xxxxxx00)</td>
   1 <td>Used bits in last byte (other bits should be 0)<br>
   1 <td>Used bits in last byte (other bits should be 0) [8]<br>(e.g. if this is 6, then the bits used (x) in last byte are: xxxxxx00)</td>
   1 <td>Used bits (samples) in last byte of data (1-8)<br>(e.g. if this is 2, only first two samples of the last byte will be played)
   1 <td>Trainer description length</td>
   1 <td>Trainer description in ASCII format</td>
   1 <td>Trainer definitions</td>
   1 <td>Trailing byte</td>
   1 <td>Total number of symbols in pilot/sync block</td>
   1 <td>Total number of symbols in pilot/sync block (can be 0)</td>
   1 <td>Total number of symbols in data stream (can be 0)</td>
   1 <td>Total number of symbols (bits, in this case) in data stream</td>
   1 <td>Total number of records in pilot/sync block</td>
   1 <td>Total number of records in data stream</td>
   1 <td>Time (in seconds) for which the message should be displayed</td>
   1 <td>The picture itself</td>
   1 <td>The ZX-Editor document (.ZED file)</td>
   1 <td>Text string in ASCII format</td>
   1 <td>Text identification byte:<br>
   1 <td>Text description in ASCII format</td>
   1 <td>TZX signature</td>
   1 <td>TZX minor revision number</td>
   1 <td>TZX major revision number</td>
   1 <td>TRAILING TONE pulse length [616]</td>
   1 <td>Symbol to be represented</td>
   1 <td>Symbol flags<br>
   1 <td>Snapshot type:<br>
   1 <td>Snapshot length</td>
   1 <td>Snapshot itself</td>
   1 <td>Signal level (0=low, 1=high)</td>
   1 <td>Screen refresh delay : 1 - 255 (interrupts between refreshes) [1]<br>(used when screen refresh mode is ON)
   1 <td>Screen in standard Spectrum video format</td>
   1 <td>Sampling rate</td>
   1 <td>Samples data. Each bit represents a state on the EAR port (i.e. one sample).<br>MSb is played first.</td>
   1 <td>SYNC first wave pulse length [1176]</td>
   1 <td>SYNC 2nd wave pulse length [896]</td>
   1 <td>Reserved for future expansion</td>
   1 <td>Relative jump value</td>
   1 <td>Relative Offset</td>
   1 <td>Pulses' lengths</td>
   1 <td>Pilot/sync symbol definitions</td>
   1 <td>Pilot/sync data block</td>
   1 <td>Pilot and sync symbols definition table<br>
   1 <td>Pilot and sync data stream<br>
   1 <td>Picture format:<br>
   1 <td>Pause duration (ms.)</td>
   1 <td>Pause after this block (ms)</td>
   1 <td>Pause after this block (in ms).</td>
   1 <td>POKEs definitions</td>
   1 <td>POKE value (leave 0 if 'user inserts' bit set)</td>
   1 <td>POKE type:<br>
   1 <td>POKE original value (leave 0 if 'unknown' bit set)</td>
   1 <td>POKE address</td>
   1 <td>PILOT TONE pulse length [616]</td>
   1 <td>ONE bit pulse</td>
   1 <td>ONE bit 2nd wave pulse length [616]</td>
   1 <td>ONE bit 1st wave pulse length [896]</td>
   1 <td>Number of waves in TRAILING TONE</td>
   1 <td>Number of waves in PILOT TONE</td>
   1 <td>Number of trainers</td>
   1 <td>Number of trailing bytes</td>
   1 <td>Number of text strings</td>
   1 <td>Number of stored pulses (after decompression, for validation purposes)
   1 <td>Number of selections</td>
   1 <td>Number of repetitions</td>
   1 <td>Number of repetitions (greater than 1)</td>
   1 <td>Number of pokes in this trainer</td>
   1 <td>Number of pilot/sync symbols in the alphabet table (0=256)<br>
   1 <td>Number of machines and hardware types for which info is supplied</td>
   1 <td>Number of lead-in bytes</td>
   1 <td>Number of data symbols in the alphabet table (0=256)<br>
   1 <td>Number of calls to be made</td>
   1 <td>Number of T-states per sample (bit of data)</td>
   1 <td>Message that should be displayed in ASCII format</td>
   1 <td>Maximum number of pulses per pilot/sync symbol<br>
   1 <td>Maximum number of pulses per data symbol<br>
   1 <td>List of text strings</td>
   1 <td>List of selections</td>
   1 <td>List of machines and hardware</td>
   1 <td>Length of the text message</td>
   1 <td>Length of the group name string</td>
   1 <td>Length of the following data</td>
   1 <td>Length of the custom info</td>
   1 <td>Length of the block without these four bytes (0)</td>
   1 <td>Length of text string</td>
   1 <td>Length of samples' data</td>
   1 <td>Length of one pulse in T-states</td>
   1 <td>Length of description text</td>
   1 <td>Length of ZERO bit pulse</td>
   1 <td>Length of ZERO bit pulse {855}</td>
   1 <td>Length of SYNC second pulse {735}</td>
   1 <td>Length of SYNC first pulse {667}</td>
   1 <td>Length of PILOT tone (number of pulses) {8063 header (flag&lt;128), 3223 data (flag&gt;=128)}</td>
   1 <td>Length of PILOT pulse {2168}</td>
   1 <td>Length of ONE bit pulse</td>
   1 <td>Length of ONE bit pulse {1710}</td>
   1 <td>Lead-in byte</td>
   1 <td>Interrupt Frequency  : 0 - 999 Hz</td>
   1 <td>Instructions text in ASCII format</td>
   1 <td>Identification string (in ASCII)</td>
   1 <td>Hardware type</td>
   1 <td>Hardware information:<br>
   1 <td>Hardware ID</td>
   1 <td>Group name in ASCII format (please keep it under 30 characters long)</td>
   1 <td>General purpose (bit-mapped) [0]<br>
   1 <td>General emulation flags:<br>
   1 <td>General description length</td>
   1 <td>General description in ASCII format</td>
   1 <td>General Purpose, bit-mapped: [1]<br>
   1 <td>FINISH DATA 2nd wave pulse length [616]</td>
   1 <td>FINISH DATA 1st wave pulse length [1176]</td>
   1 <td>FINISH BYTE 2nd wave pulse length [896]</td>
   1 <td>FINISH BYTE 1st wave pulse length [1176]</td>
   1 <td>End of text file marker</td>
   1 <td>Description text (please use single line and max. 30 chars)</td>
   1 <td>Description of the picture in ASCII format</td>
   1 <td>Description length (if this is 0 then handle it as 'Loading Screen')</td>
   1 <td>Description length (if this is 0 then handle it as 'Instructions')</td>
   1 <td>Description length (if this is 0 then handle it as 'Inlay Card')</td>
   1 <td>Data symbols definition table<br>
   1 <td>Data symbol definitions<br>
   1 <td>Data symbol definitions</td>
   1 <td>Data stream<br>
   1 <td>Data stream</td>
   1 <td>Data stream:<br>
   1 <td>Custom info</td>
   1 <td>Compression type<br>
   1 <td>CSW data, encoded according to the CSW file format specification.</td>
   1 <td>BORDER Colour in Spectrum colour format (0=black, 1=blue, ...)</td>
   1 <td>Array of pulse lengths.</td>
   1 <td>Array of call block numbers (relative-signed offsets)</td>
   1 <td>Additional bits in bytes (bit-mapped)<br>
   1 <td>10 - Graphics</td>
   1 <td>0F - EPROM programmers</td>
   1 <td>0E - AD/DA converters
   1 <td>0D - Keyboards &amp; keypads</td>
   1 <td>0C - Network adapters</td>
   1 <td>0B - Digitizers</td>
   1 <td>0A - Modems</td>
   1 <td>09 - Printers</td>
   1 <td>08 - Parallel ports</td>
   1 <td>07 - Serial ports</td>
   1 <td>06 - Other controllers</td>
   1 <td>05 - Mice</td>
   1 <td>04 - Joysticks</td>
   1 <td>03 - Sound devices</td>
   1 <td>02 - ROM/RAM type add-ons</td>
   1 <td>01 - External storage</td>
   1 <td>00 - Computers</td>
   1 <td>"ZX-Edit document" (custom block ID)</td>
   1 <td>"Spectrum Screen" + 1 spaces (custom block ID)</td>
   1 <td>"Picture" + 9 spaces (custom block ID)</td>
   1 <td>"POKEs" + 11 spaces (custom block ID)</td>
   1 <td>"Instructions" + 4 spaces (custom block ID)</td>
   1 <td> Length of the text description</td>
   1 <td colspan="4"><strong><font color="#ffffff" size="+2">TRAINER structure format</font></strong></td>
   1 <td colspan="4"><strong><font color="#ffffff" size="+2">TEXT structure format</font></strong></td>
   1 <td colspan="4"><strong><font color="#ffffff" size="+2">POKE structure format</font></strong></td>
   1 <td colspan="4"><strong><font color="#ffffff" size="+2">HWINFO structure format</font></strong></td>
   1 <td colspan="4"><font color="#ffffff" size="+2"><strong>SYMDEF structure format</strong></font></td>
   1 <td colspan="4"><font color="#ffffff" size="+2"><strong>SELECT structure format</strong></font></td>
   1 <td colspan="4"><font color="#ffffff" size="+2"><strong>PRLE structure format</strong></font></td>
   1 <td colspan="4" align="center"><strong><font color="#ffffff" size="+2">TZX Header</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#ffffff" size="+2">ID 5A - "Glue" block</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#ffffff" size="+2">ID 40 - Snapshot block</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#ffffff" size="+2">ID 35 - Custom info block</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#ffffff" size="+2">ID 34 - Emulation info</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#ffffff" size="+2">ID 33 - Hardware type</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#ffffff" size="+2">ID 32 - Archive info</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#ffffff" size="+2">ID 31 - Message block</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#ffffff" size="+2">ID 30 - Text description</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#ffffff" size="+2">ID 2B - Set signal level</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#ffffff" size="+2">ID 22 - Group end</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#ffffff" size="+2">ID 21 - Group start</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#ffffff" size="+2">ID 20 - Pause (silence) or 'Stop the Tape' command</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#ffffff" size="+2">ID 19 - Generalized Data Block</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#ffffff" size="+2">ID 18 - CSW Recording</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#ffffff" size="+2">ID 17 - C64 Turbo Tape Data Block</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#ffffff" size="+2">ID 16 - C64 ROM Type Data Block</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#ffffff" size="+2">ID 15 - Direct Recording</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#ffffff" size="+2">ID 14 - Pure Data Block</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#ffffff" size="+2">ID 13 - Pulse sequence</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#ffffff" size="+2">ID 12 - Pure Tone</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#ffffff" size="+2">ID 11 - Turbo Speed Data Block</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#ffffff" size="+2">ID 10 - Standard Speed Data Block</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#606060" size="-2">length: </font><font color="#ff6060" size="-2">[10,11,12,13]+14</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#606060" size="-2">length: </font><font color="#ff6060" size="-2">[0F,10,11]+12</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#606060" size="-2">length: </font><font color="#ff6060" size="-2">[07,08,09]+0A</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#606060" size="-2">length: </font><font color="#ff6060" size="-2">[05,06,07]+08</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#606060" size="-2">length: </font><font color="#ff6060" size="-2">[02,03]+04</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#606060" size="-2">length: </font><font color="#ff6060" size="-2">[01]+02</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#606060" size="-2">length: </font><font color="#ff6060" size="-2">[01,02,03]+04</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#606060" size="-2">length: </font><font color="#ff6060" size="-2">[00]*03+01</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#606060" size="-2">length: </font><font color="#ff6060" size="-2">[00]*02+01</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#606060" size="-2">length: </font><font color="#ff6060" size="-2">[00,01]+02</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#606060" size="-2">length: </font><font color="#ff6060" size="-2">[00,01]*02+02</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#606060" size="-2">length: </font><font color="#ff6060" size="-2">10 bytes</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#606060" size="-2">length: </font><font color="#ff6060" size="-2">09</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#606060" size="-2">length: </font><font color="#ff6060" size="-2">08</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#606060" size="-2">length: </font><font color="#ff6060" size="-2">05</font></strong></td>
   1 <td colspan="4" align="center"><strong><font color="#606060" size="-2">length: </font><font color="#ff6060" size="-2"> [00,01]+02</font></strong></td>
   1 <td colspan="4" align="center"><font color="#ffffff" size="+2"><strong>ID 2A - Stop the tape if in 48K mode</strong></font></td>
   1 <td colspan="4" align="center"><font color="#ffffff" size="+2"><strong>ID 28 - Select block</strong></font></td>
   1 <td colspan="4" align="center"><font color="#ffffff" size="+2"><strong>ID 27 - Return from sequence</strong></font></td>
   1 <td colspan="4" align="center"><font color="#ffffff" size="+2"><strong>ID 26 - Call sequence</strong></font></td>
   1 <td colspan="4" align="center"><font color="#ffffff" size="+2"><strong>ID 25 - Loop end</strong></font></td>
   1 <td colspan="4" align="center"><font color="#ffffff" size="+2"><strong>ID 24 - Loop start</strong></font></td>
   1 <td colspan="4" align="center"><font color="#ffffff" size="+2"><strong>ID 23 - Jump to block</strong></font></td>
   1 <td align="center">ZX Spectrum</td>
   1 <td align="center">WORD[MAXP]</td>
   1 <td align="center">TRAINER[N]</td>
   1 <td align="center">TOTP</td>
   1 <td align="center">TOTD</td>
   1 <td align="center">TEXT[N]</td>
   1 <td align="center">SYMDEF[ASP]</td>
   1 <td align="center">SYMDEF[ASD]</td>
   1 <td align="center">SELECT[N]</td>
   1 <td align="center">SAM Coupe'</td>
   1 <td align="center">PRLE[TOTP]</td>
   1 <td align="center">POKE[N]</td>
   1 <td align="center">NPP</td>
   1 <td align="center">NPD</td>
   1 <td align="center">HWINFO[N]</td>
   1 <td align="center">Enterprise (slow)</td>
   1 <td align="center">Enterprise (fast)</td>
   1 <td align="center">Bit 1</td>
   1 <td align="center">BYTE[DS]</td>
   1 <td align="center">BYTE[9]</td>
   1 <td align="center">BYTE[6912]</td>
   1 <td align="center">Amstrad CPC</td>
   1 <td align="center">ASP</td>
   1 <td align="center">ASD</td>
   1 <td align="center">ASCII[7]</td>
   1 <td align="center"><strong>Value</strong></td>
   1 <td align="center"><strong>Type</strong></td>
   1 <td align="center"><strong>Offset</strong></td>
   1 <td align="center"><font color="#ffffff"><strong>Sync2</strong></font></td>
   1 <td align="center"><font color="#ffffff"><strong>Sync1</strong></font></td>
   1 <td align="center"><font color="#ffffff"><strong>Pilot pulse</strong></font></td>
   1 <td align="center"><font color="#ffffff"><strong>Machine</strong></font></td>
   1 <td align="center"><font color="#ffffff"><strong>Length</strong></font></td>
   1 <td align="center"><font color="#ffffff"><strong>Hardware type</strong></font></td>
   1 <td align="center"><font color="#ffffff"><strong>Hardware ID</strong></font></td>
   1 <td align="center"><font color="#ffffff"><strong>Description</strong></font></td>
   1 <td align="center"><font color="#ffffff"><strong>Bit 1</strong></font></td>
   1 <td align="center"><font color="#ffffff"><strong>Bit 0</strong></font></td>
   1 <td align="center">882</td>
   1 <td align="center">855</td>
   1 <td align="center">742</td>
   1 <td align="center">735</td>
   1 <td align="center">667</td>
   1 <td align="center">602 (**)</td>
   1 <td align="center">6000</td>
   1 <td align="center">59 (0x3B)</td>
   1 <td align="center">58+9*W</td>
   1 <td align="center">58+19*W</td>
   1 <td align="center">42+15*W (*)</td>
   1 <td align="center">4096</td>
   1 <td align="center">2168</td>
   1 <td align="center">20</td>
   1 <td align="center">1982</td>
   1 <td align="center">18 (0x12)</td>
   1 <td align="center">1750</td>
   1 <td align="center">1710</td>
   1 <td align="center">1400 (**)</td>
   1 <td align="center">113+9*W</td>
   1 <td align="center">107 (0x6B)</td>
   1 <td align="center">10+N</td>
   1 <td align="center">10+8*W</td>
   1 <td align="center">0x5C</td>
   1 <td align="center">0x2C</td>
   1 <td align="center">0x28</td>
   1 <td align="center">0x25</td>
   1 <td align="center">0x23</td>
   1 <td align="center">0x21</td>
   1 <td align="center">0x1F</td>
   1 <td align="center">0x1D</td>
   1 <td align="center">0x1C</td>
   1 <td align="center">0x1B</td>
   1 <td align="center">0x1A</td>
   1 <td align="center">0x19</td>
   1 <td align="center">0x17</td>
   1 <td align="center">0x16+L</td>
   1 <td align="center">0x13</td>
   1 <td align="center">0x12+<br>(TOTP>0)*((2*NPP+1)*ASP)+<br>TOTP*3</td>
   1 <td align="center">0x12+<br>(TOTP>0)*((2*NPP+1)*ASP)+<br>TOTP*3+<br>(2*NPD+1)*ASD</td>
   1 <td align="center">0x12+<br>(2*NPP+1)*ASP</td>
   1 <td align="center">0x0F</td>
   1 <td align="center">0x01+L</td>
   1 <td align="center">0x01+L+1</td>
   1 <td align="center">(1)</td>
   1 <td align="center">"ZXTape!"</td>
   1 <td align="center" width="8%"><font color="#ffffff"><strong>Value</strong></font></td>
   1 <td align="center" width="8%"><font color="#ffffff"><strong>Offset</strong></font></td>
   1 <td align="center" width="42%"><strong>Value</strong></td>
   1 <td align="center" width="30%"><strong>Value</strong></td>
   1 <td align="center" width="15%"><font color="#ffffff"><strong>Type</strong></font></td>
   1 <td align="center" width="10%"><strong>Offset</strong></td>
   1 <tbody><tr><td width="10%"></td>
   1 <tbody><tr><td align="left">
   1 <tbody><tr><td align="center"><font color="#ffff40" size="+4"><strong>TZX FORMAT</strong></font></td></tr>
   1 <tbody><tr bgcolor="#8080df">
   1 <tbody><tr bgcolor="#8080d0">
   1 <table width="40%">
   1 <table border="0" width="100%"><tbody><tr><td width="10%"> </td><td>
   1 <table border="0" width="100%">
   1 <table bgcolor="#0040ff" border="0" width="50%">
   1 <strong>TZX block ID list:</strong>
   1 <strong>Revision 1.20</strong>
   1 <strong>Revision 1.13</strong>
   1 <strong>Revision 1.12</strong>
   1 <strong>Revision 1.10</strong>
   1 <strong>Revision 1.02</strong>
   1 <strong>Revision 1.01</strong>
   1 <strong>Notes:</strong>
   1 <strong>IMPORTANT:</strong> The ZXTape format has ALL timings written
   1 <strong>Example</strong><br><br>
   1 <strike>1C - Commodore 64<br>
   1 <meta name="keywords" content="TZX,ZX Spectrum,Speccy,Sinclair,tech,tape,format,specification">
   1 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>TZX technical specifications</title></head>
   1 <li>use single 0x0D (13 decimal) to separate lines;</li>
   1 <li>stick to a maximum of 8 lines.</li>
   1 <li>stick to a maximum of 30 chars per line;</li>
   1 <li>runs on, but doesn't use any of the special hardware of ZX Spectrum 128K</li>
   1 <li>runs on ZX Spectrum 48K</li>
   1 <li>doesn't run on ZX Spectrum 16K</li>
   1 <li>Zeros and ones in 'Direct recording' blocks mean low and high pulse
   1 <li>You might interpret 'full-period' as ----____ or ____----, and
   1 <li>When creating a 'Direct recording' block please stick to the
   1 <li>When all the Data has finished there is an optional Trailer Tone, which is standard for the Repeated Blocks in C64 ROM Loader.</li>
   1 <li>Trailing Tone</li>
   1 <li>This document refers to 'high' and 'low' pulse levels. Whether this
   1 <li>The wave MUST always start with the LOW amplitude, since the C64 can only detect the transition HIGH -&gt; LOW.</li>
   1 <li>The values in curly brackets {} are the default values that are used in the Spectrum ROM saving routines.
   1 <li>The timings are given in Z80 clock ticks (T states) unless otherwise stated. <b>1 T state = (1/3500000)s</b></li>
   1 <li>The length of a block is given in the following format: numbers in
   1 <li>The following new blocks have been introduced: ID 24, ID 25, ID 26, ID 27, ID 28, ID 40</li>
   1 <li>The following new blocks have been introduced: ID 18, ID 19, ID 2B. Newly added blocks follow the general extension rule.</li>
   1 <li>The following new blocks have been introduced: ID 16, ID 17</li>
   1 <li>The following blocks have been deprecated and should not appear in
   1 <li>The block IDs are given in hex.</li>
   1 <li>The XOR checksum (if it is set to 0 or 1) is a XOR of all bits in
   1 <li>The Length of ASCII ID in 'Custom Info' block (ID 35) should be 16 and not 15 bytes
   1 <li>The 'current pulse level' after playing the blocks ID 10,11,12,13,14 or 19
   1 <li>Sync waves</li>
   1 <li>Pilot Tone</li>
   1 <li>Jump 2 = 'Skip one block'</li>
   1 <li>Jump 1 = 'Go to the next block' - it is like NOP in assembler ;)</li>
   1 <li>Jump 0 = 'Loop Forever' - this should never happen</li>
   1 <li>Jump -1 = 'Go to the previous block'</li>
   1 <li>If there is no pause between two data blocks then the second one
   1 <li>If some pulse length is 0 then the whole wave must not be present. This applies to DATA too.</li>
   1 <li>General Extension Rule: ALL custom blocks that will be added after
   1 <li>First three types of 'Custom info' (ID 35) block standardized:
   1 <li>Finish Data waves should be ONLY played after last byte of data.</li>
   1 <li>Finish Data pulses</li>
   1 <li>Finish Byte waves should be played after each byte EXCEPT last one.</li>
   1 <li>Data Bytes (with XOR and/or Finish Byte waves)</li>
   1 <li>Any value requiring more than one byte is stored in little endian format (i.e. LSB first).</li>
   1 <li>An emulator should put the 'current pulse level' to 'low' when
   1 <li>Allowed multiple lines in the 'Archive info' (ID 32) block.
   1 <li>All unused bits should be set to zero.</li>
   1 <li>All ASCII texts use the ISO 8859-1 (Latin 1) encoding; some of them
   1 <li>Added two new types of 'Custom info' (ID 35) block:
   1 <li>Added the following fields to the 'Archive info' (ID 32) block:
   1 <li>Added new entries to the hardware ID list: 00/1E-2D, 01/12-17, 02/06-0A, 03/06-0C, 06/03, 0B/03, 10/00-03</li>
   1 <li>Added new entries to the hardware ID list: 00/1C,1D</li>
   1 <li>Added new entries to the hardware ID list: 00/1A,1B</li>
   1 <li>Added new entries to the hardware ID list: 00/15-19</li>
   1 <li>A wave consists of TWO pulses. The structure contains the length of ONE pulse.</li> 
   1 <li>A 'Pause' block consists of a 'low' pulse level of some duration.
   1 <li><strong>ZX-Edit document block</strong>
   1 <li><strong>ZX Spectrum, Amstrad CPC, SAM Coupe &amp; Enterprise tape encoding</strong>
   1 <li><strong>Spectrum screen block</strong>
   1 <li><strong>Picture block</strong>
   1 <li><strong>POKEs block</strong>
   1 <li><strong>Jupiter ACE encoding</strong> - see <a href="http://www.jupiter-ace.co.uk/doc_AceTapeFormat.html">a dedicated site</a>.</li>
   1 <li><strong>Instructions block</strong>
   1 <li><b><a href="#TZXFORMAT">TZX file format</a></b></li>
   1 <li><b><a href="#RULES">Rules and definitions</a></b></li>
   1 <li><b><a href="#MACHINFO">Machine specific information</a></b></li>
   1 <li><b><a href="#INTRODUCTION">Introduction</a></b></li>
   1 <li><b><a href="#HWINFOREF">Hardware information reference</a></b></li>
   1 <li><b><a href="#HISTORY">Revision history</a></b></li>
   1 <li><b><a href="#DEPRECATED">Deprecated blocks</a></b></li>
   1 <li><a href="#TURBOSPEED">ID 11 - Turbo speed data block</a></li>
   1 <li><a href="#TEXTDESCR">ID 30 - Text description</a></li>
   1 <li><a href="#STOP48K">ID 2A - Stop the tape if in 48K mode</a></li>
   1 <li><a href="#STDSPEED">ID 10 - Standard speed data block</a></li>
   1 <li><a href="#SNAPSHOT">ID 40 - Snapshot block</a></li>
   1 <li><a href="#SETLEVEL">ID 2B - Set signal level</a></li>
   1 <li><a href="#SELBLOCK">ID 28 - Select block</a></li>
   1 <li><a href="#RETURNSEQ">ID 27 - Return from sequence</a></li>
   1 <li><a href="#PURETONE">ID 12 - Pure tone</a></li>
   1 <li><a href="#PUREDATA">ID 14 - Pure data block</a></li>
   1 <li><a href="#PULSESEQ">ID 13 - Sequence of pulses of various lengths</a></li>
   1 <li><a href="#PAUSEBLOCK">ID 20 - Pause (silence) or 'Stop the tape' command</a></li>
   1 <li><a href="#MSGBLOCK">ID 31 - Message block</a></li>
   1 <li><a href="#LOOPSTART">ID 24 - Loop start</a></li>
   1 <li><a href="#LOOPEND">ID 25 - Loop end</a></li>
   1 <li><a href="#JUMPBLOCK">ID 23 - Jump to block</a></li>
   1 <li><a href="#HARDTYPE">ID 33 - Hardware type</a></li>
   1 <li><a href="#GRPSTART">ID 21 - Group start</a></li>
   1 <li><a href="#GRPEND">ID 22 - Group end</a></li>
   1 <li><a href="#GLUEBLOCK">ID 5A - "Glue" block (90 dec, ASCII Letter 'Z')</a></li>
   1 <li><a href="#GENDATA">ID 19 - Generalized data block</a></li>
   1 <li><a href="#EMUINFO">ID 34 - Emulation info</a></li>
   1 <li><a href="#DIRECTREC">ID 15 - Direct recording block</a></li>
   1 <li><a href="#CUSTOMBLOCK">ID 35 - Custom info block</a></li>
   1 <li><a href="#CUSTINFODPR">ID 35 - Custom info deprecated types</a></li>
   1 <li><a href="#CSWBLOCK">ID 18 - CSW recording block</a></li>
   1 <li><a href="#CALLSEQ">ID 26 - Call sequence</a></li>
   1 <li><a href="#C64TURBO">ID 17 - C64 turbo tape data block</a></li>
   1 <li><a href="#C64ROM">ID 16 - C64 ROM type data block</a></li>
   1 <li><a href="#ARCHINFO">ID 32 - Archive info</a></li>
   1 <li>08 - Origin</li>
   1 <li>07 - Protection Scheme / Loader</li>
   1 <li>06 - Price</li>
   1 <li>05 - Game/Utility Type</li>
   1 <li>04 - Language</li>
   1 <li>'ZX-Edit document' - for .ZED files generated by the great ZX-Editor!</li>
   1 <li>'Screen'</li>
   1 <li>'Picture ' - for .GIF and .JPEG (.JPG) pictures</li>
   1 <li>'POKEs'</li>
   1 <li>'Instructions'</li>
   1 <html><head>
   1 <font size="1">This field is present only if TOTD&gt;0</font></td>
   1 <font size="1">This field is present only if TOTD&gt;0</font>
   1 <font size="1">0x01: RLE<br>
   1 <font size="1">(referred to 3.5MHz clock frequency)</font></td>
   1 <font size="1">
   1 <font size="+2"><strong>Format revision: v1.20
   1 <div align="center">
   1 <center id="INDEX">
   1 <br><br>Well, this block was created to support the Commodore 64
   1 <br><br>This will produce N pulses, each having its own timing. Up to
   1 <br><br>This block can hold any general .TXT file, with the main
   1 <br><br>These computers share the same tape encoding, which is normal
   1 <br><br>The standard data blocks have always the same structure: first
   1 <br><br>If the game on the tape is not an original and lacks the
   1 <br> Then the main body of the file follows. It consists of a mixture
   1 <body alink="#ff0000" bgcolor="#ffffff" link="#0000ff" text="#000000" vlink="#800080">
   1 <basefont face="Verdana" size="0">
   1 <a name="TZXFORMAT"></a>
   1 <a name="TURBOSPEED"></a>
   1 <a name="TEXTDESCR"></a>
   1 <a name="STOP48K"></a>
   1 <a name="STDSPEED"></a>
   1 <a name="SNAPSHOT"></a>
   1 <a name="SETLEVEL"></a>
   1 <a name="SELBLOCK"></a>
   1 <a name="RULES"></a>
   1 <a name="RETURNSEQ"></a>
   1 <a name="PURETONE"></a>
   1 <a name="PUREDATA"></a>
   1 <a name="PULSESEQ"></a>
   1 <a name="PAUSEBLOCK"></a>
   1 <a name="MSGBLOCK"></a>
   1 <a name="MACHINFO"></a>
   1 <a name="LOOPSTART"></a>
   1 <a name="LOOPEND"></a>
   1 <a name="JUMPBLOCK"></a>
   1 <a name="INTRODUCTION"></a>
   1 <a name="ID_LIST"></a>
   1 <a name="HWINFOREF"></a>
   1 <a name="HISTORY"></a>
   1 <a name="HARDTYPE"></a>
   1 <a name="GRPSTART"></a>
   1 <a name="GRPEND"></a>
   1 <a name="GLUEBLOCK"></a>
   1 <a name="GENDATA"></a>
   1 <a name="EMUINFO"></a>
   1 <a name="DIRECTREC"></a>
   1 <a name="DEPRECATED"></a>
   1 <a name="CUSTOMBLOCK"></a>
   1 <a name="CUSTINFODPR"></a>
   1 <a name="CSWBLOCK"></a>
   1 <a name="CALLSEQ"></a>
   1 <a name="C64TURBO"></a>
   1 <a name="C64ROM"></a>
   1 <a name="ARCHINFO"></a>
   1 <a href="http://validator.w3.org/check?uri=referer"><img src="http://www.w3.org/Icons/valid-html40" border="0" alt="Valid HTML 4.0 Transitional" height="31" width="88"></a>
   1 </tr><tr bgcolor="#ffdf90">
   1 </tr><tr bgcolor="#c0ffc0">
   1 </strong></font>
   1 </ol></td></tr></tbody></table>
   1 </li></ul>
   1 </font></td>
   1 </body></html>
   1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
   1 3223 otherwise. This block can be used for the ROM loading routines AND
   1 2D - ZX-97
   1 2C - TK-65<br>
   1 2B - Lambda<br>
   1 2A - TS-1500<br>
   1 29 - ZX Badaloc<br>
   1 28 - Chrome<br>
   1 27 - MicroART ATM Turbo 2<br>
   1 26 - MicroART ATM<br>
   1 255 pulses can be stored in this block; this is useful for non-standard
   1 25 - Quorum 128<br>
   1 24 - Amaterske RADIO Mistrum<br>
   1 23 - Ice Felix HC 2000<br>
   1 22 - Ice Felix HC 91<br>
   1 21 - Kay 1024<br>
   1 20 - GrandRomMax<br>
   1 1F - Profi<br>
   1 1E - Inves Spectrum+<br>
   1 1D - Commodore 128</strike><br>
   1 1B - Enterprise<br>
   1 1A - Jupiter ACE<br>
   1 19 Dec 2006
   1 19 - Amstrad CPC 6128+<br>
   1 18 - Amstrad CPC 464+<br>
   1 17 - Amstrad CPC 6128<br>
   1 16 - DivIDE<br>
   1 16 - Amstrad CPC 664<br>
   1 15 - ZXATASP<br>
   1 15 - Amstrad CPC 464<br>
   1 14 - ZX Spectrum +3e hard disk<br>
   1 14 - ZS Scorpion 256<br>
   1 13 - Sandy<br>
   1 13 - Elwro 800-3 <br>
   1 12 - Kempston disk interface<br>
   1 12 - Byte<br>
   1 11 - Microdigital TK 95<br>
   1 11 - Larken<br>
   1 10 - Ramex Millenia<br>
   1 10 - Microdigital TK 90-X<br>
   1 0x02: Z-RLE</font>
   1 0F - Zebra disk drive<br>
   1 0F - ZX Spectrum, Arabic version<br>
   1 0E - ZX Spectrum 128k, Spanish version<br>
   1 0E - Timex FDD3000<br>
   1 0D - ZX-81<br>
   1 0D - JLO (Oliger) disk interface<br>
   1 0C - ZX-80<br>
   1 0C - ZX Spectrum +3 disk drive<br>
   1 0C - Jupiter ACE
   1 0B - QuickSilva AY<br>
   1 0B - Didaktik Gama<br>
   1 0B - BS-DOS (MB-02)<br>
   1 0A - Zon-X AY<br>
   1 0A - Standard 8255 chip with ports 31,63,95
   1 0A - Memory in 8-16k used
   1 0A - Didaktik disk drives<br>
   1 0A - Didaktik M<br>
   1 09 - Sam Coupe<br>
   1 09 - Radofin<br>
   1 09 - Opus Discovery<br>
   1 09 - Intec Electronics Digital Interface B8001<br>
   1 09 - 48k<br>
   1 08 - Pentagon 128<br>
   1 08 - MultiPrint<br>
   1 08 - General Sound<br>
   1 08 - FIZ<br>
   1 08 - 16k<br>
   1 07 - ZX LPrint Interface 3<br>
   1 07 - Watsford<br>
   1 07 - Timex Sinclair TS-2068<br>
   1 07 - Covox<br>
   1 07 - 1k<br>
   1 06 - Timex Sinclair TC-2048<br>
   1 06 - SoftROM<br>
   1 06 - RAM Music Machine<br>
   1 06 - INES Printerface<br>
   1 06 - Byte Drive<br>
   1 05 - ZX Spectrum 128k +2A, +3<br>
   1 05 - TR-DOS (BetaDisk)<br>
   1 05 - MB-02 ROM/RAM expansion<br>
   1 05 - Hilderbay<br>
   1 05 - AY ABC stereo (A+B=left, B+C=right)<br>
   1 04 - ZX Spectrum 128k +2 (grey case)<br>
   1 04 - Rotronics Wafadrive<br>
   1 04 - MultiPrint<br>
   1 04 - Fuller
   1 04 - DK'Tronics<br>
   1 04 - AY ACB stereo (A+C=left, B+C=right); Melodik<br>
   1 03 - ZX Spectrum 128k +(Sinclair)<br>
   1 03 - Tasman<br>
   1 03 - SpecDrum<br>
   1 03 - Sinclair 1 Right (67890)<br>
   1 03 - Romantic Robot Videoface</td>
   1 03 - Multiface +3<br>
   1 03 - MGT Plus-D<br>
   1 03 - Lambda Colour
   1 03 - Defender Light Gun
   1 02 - Zebra Graphics Tablet<br>
   1 02 - ZX Spectrum 48k ISSUE 1<br>
   1 02 - ZX Spectrum +3<br>
   1 02 - Sinclair 2 Left  (12345)<br>
   1 02 - Multiface 128k<br>
   1 02 - Memotech<br>
   1 02 - MGT Disciple<br>
   1 02 - EPSON compatible
   1 02 - Currah microSpeech<br>
   1 02 - British MicroGraph Pad<br>
   1 01 - ZX Spectrum 48k, Plus<br>
   1 01 - ZX Spectrum 128k
   1 01 - ZX Light Gun<br>
   1 01 - T/S 2050 or Westridge 2050
   1 01 - Opus Discovery<br>
   1 01 - Multiface ONE<br>
   1 01 - Kempston mouse<br>
   1 01 - Kempston E<br>
   1 01 - Generic printer<br>
   1 01 - G007<br>
   1 01 - Fuller Box AY sound hardware<br>
   1 01 - DK'Tronics Light Pen<br>
   1 01 - Cursor, Protek, AGF<br>
   1 01 - Blackboard Electronics
   1 00 - ZX Spectrum 16k<br>
   1 00 - ZX Printer, Alphacom 32 &amp; compatibles<br>
   1 00 - ZX Microdrive<br>
   1 00 - ZX Interface 1<br>
   1 00 - ZX Interface 1
   1 00 - WRX Hi-Res<br>
   1 00 - Trickstick<br>
   1 00 - Sam Ram<br>
   1 00 - RD Digital Tracer<br>
   1 00 - Prism VTX 5000<br>
   1 00 - Orme Electronics
   1 00 - Keypad for ZX Spectrum 128k
   1 00 - Kempston<br>
   1 00 - Kempston S<br>
   1 00 - Harley Systems ADC 8.2<br>
   1 00 - Classic AY hardware (compatible with 128k ZXs)<br>
   1 00 - AMX mouse<br>
   1 .SNA snapshots are supported for compatibility reasons!<br>
   1 ...), protection scheme it uses (Speedlock 1, Alkatraz, ...) and its
   1 (cycles) per pulse. One wave is made from two pulses.
   1 (Compressed Square Wave). For a complete description of the CSW
   1 (2) Amstrad CPC ROM load/save routine can use variable speed for
   1 (1) The Spectrum uses different pilot lengths for header and data
   1 (**) The Enterprise stores data in a different way than all other
   1 (*) The SAM Coupe' timings can be user selected by a system variable.
   1 ( 3, 530, 520, 530, 520, 530, 520, 530, 520, 530, 520, 530, 520, 530, 520, 530, 520, 530, 4689 )
   1 ( 3, 530, 520, 530, 520, 530, 520, 530, 4689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 )<br>
   1 'half-period' as ---- or ____. One 'half-period' will also be referred
   1 'end of file' byte 26 (1A hex). This is followed by two bytes
   1 'Speedlock' or 'Alkatraz' loaders) or it is corrupted by some on-screen
   1 'Classic AY hardware (Spectrum 128 sompatible sound device)'.<br>
   1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and WAIT when it encounters first DATA block<br>
   1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If this is 0 then the emulator should only load the info blocks<br>
   1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; such as extra memory or a sound chip.<br>
   1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; or special features of the machine.<br>
   1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; but may or may not use the hardware or special features of the machine.<br>
   1 &nbsp;&nbsp;&nbsp;&nbsp; 11: force high level<br>
   1 &nbsp;&nbsp;&nbsp;&nbsp; 10: force low level<br>
   1 &nbsp;&nbsp;&nbsp;&nbsp; 01: same as the current level (no edge - prolongs the previous pulse)<br>
   1 &nbsp;&nbsp;&nbsp;&nbsp; 00: opposite to the current level (make an edge, as usual) - default<br>
   1 &nbsp;&nbsp;&nbsp; bits 0-1: number of bits (0-3)<br>
   1 &nbsp;&nbsp;&nbsp; bit 9 : auto type LOAD"" or press ENTER when in 128k mode [0]
   1 &nbsp;&nbsp;&nbsp; bit 8 : start playing the tape immediately [0]<br>
   1 &nbsp;&nbsp;&nbsp; bit 7 : screen refresh mode (1: ON, 0: OFF) [1]<br>
   1 &nbsp;&nbsp;&nbsp; bit 6 : border emulation [1]<br>
   1 &nbsp;&nbsp;&nbsp; bit 5 : unknown original value
   1 &nbsp;&nbsp;&nbsp; bit 5 : fast loading when ROM load routine is used [1]<br>
   1 &nbsp;&nbsp;&nbsp; bit 4 : user inserts the POKE value<br>
   1 &nbsp;&nbsp;&nbsp; bit 3: value of additional bit(s)</td>
   1 &nbsp;&nbsp;&nbsp; bit 3,4 : video synchronisation : 1=high, 3=low, 0,2=normal [0]<br>
   1 &nbsp;&nbsp;&nbsp; bit 3 : ignore memory page number<br>
   1 &nbsp;&nbsp;&nbsp; bit 2: play additional bit(s) BEFORE (0) or AFTER (1) the byte<br>
   1 &nbsp;&nbsp;&nbsp; bit 2 : high resolution colour emulation with true interrupt freq. [1]<br>
   1 &nbsp;&nbsp;&nbsp; bit 1 : LDIR emulation [1]<br>
   1 &nbsp;&nbsp;&nbsp; bit 0: little (0) or big (1) endian format
   1 &nbsp;&nbsp;&nbsp; bit 0-2 : memory page number<br>
   1 &nbsp;&nbsp;&nbsp; bit 0 : R-register emulation [1]<br>
   1 &nbsp;&nbsp;&nbsp; bit 0 - Data Endianess: 0=LSb first, 1=MSb first</td>
   1 &nbsp;&nbsp;&nbsp; FF - No checksum bit</td>
   1 &nbsp;&nbsp;&nbsp; FF - Comment(s)<br>
   1 &nbsp;&nbsp;&nbsp; C1: checksum<br>
   1 &nbsp;&nbsp;&nbsp; 8000: autostart (no meaning here)<br>
   1 &nbsp;&nbsp;&nbsp; 4A,50,53,50,20,20,20,20,20,20: file name ("JPSP")<br>
   1 &nbsp;&nbsp;&nbsp; 4000: start address<br>
   1 &nbsp;&nbsp;&nbsp; 1B00: data length<br>
   1 &nbsp;&nbsp;&nbsp; 08 - Origin<br>
   1 &nbsp;&nbsp;&nbsp; 07 - Protection scheme/loader<br>
   1 &nbsp;&nbsp;&nbsp; 06 - Price<br>
   1 &nbsp;&nbsp;&nbsp; 05 - Game/utility type<br>
   1 &nbsp;&nbsp;&nbsp; 04 - Language<br>
   1 &nbsp;&nbsp;&nbsp; 03: data type (0x03 = "Bytes:")<br>
   1 &nbsp;&nbsp;&nbsp; 03 - Year of publication<br>
   1 &nbsp;&nbsp;&nbsp; 03 - The tape DOESN'T RUN on this machine or with this hardware.<br>
   1 &nbsp;&nbsp;&nbsp; 02 - The tape RUNS but it DOESN'T use the hardware<br>
   1 &nbsp;&nbsp;&nbsp; 02 - Author(s)<br>
   1 &nbsp;&nbsp;&nbsp; 01: .SNA format<br>
   1 &nbsp;&nbsp;&nbsp; 01 - The tape USES the hardware or special features of the machine,<br>
   1 &nbsp;&nbsp;&nbsp; 01 - Start XOR checksum with value 1<br>
   1 &nbsp;&nbsp;&nbsp; 01 - Software house/publisher<br>
   1 &nbsp;&nbsp;&nbsp; 01 - JPEG</td>
   1 &nbsp;&nbsp;&nbsp; 00: loading flag (0x00 = header)<br>
   1 &nbsp;&nbsp;&nbsp; 00: .Z80 format<br>
   1 &nbsp;&nbsp;&nbsp; 00 - The tape RUNS on this machine or with this hardware,<br>
   1 &nbsp;&nbsp;&nbsp; 00 - Start XOR checksum with value 0<br>
   1 &nbsp;&nbsp;&nbsp; 00 - GIF<br>
   1 &nbsp;&nbsp;&nbsp; 00 - Full title<br>
   1  - even Tomaz Kac doesn't remember if it concerns only  documentation or also the implementation;
   1    to be sure consider the block ID 35 as newly added in revision 1.01