User's Guide
Version 2.33 (August 1st 2003)
Latest manual revision: 01/08/2003



SUMMARY:

  1. Introduction
  2. System requirements
  3. Features list
  4. Soundcard DirectMode (realtime)
  5. Command line parameters
  6. Understanding MakeTZX's messages
  7. How to identify a custom loader
  8. The CSW file format
  9. How to use OUT files
  10. How to convert
  11. The digital filter
  12. Graphic interface: MakeTZX WinGUI
  13. FAQs (Frequently Asked Questions)
  14. Revision history
  15. Known limits and bugs
  16. Future enhancements
  17. Credits and contact info

1. Introduction

MakeTZX is a TZX creation utility that will help you to recover your old Spectrum tapes and preserve them from the damages of time. If you don't know what TZX files are, read this first.

It works with the most common sample file formats, or directly from the soundcard's input in true realtime (see DirectMode later).

MakeTZX is based on a powerful decoding engine, easy to use and extremely accurate at the same time. This tool was developed with efficiency in mind, that is we wanted something that worked for real, without having to make tenths of retries before getting a successful conversion. Today MakeTZX converts the 97% of sample files at the first attempt, thanks to an intelligent decoder which can figure out lots of fine-tuning internal settings and is able to correct many signal distortions and errors automatically.

Besides, MakeTZX now has an amazing feature that guarantees 100% failure-proof conversions even in the most difficult cases, simply the best result that you may ask to a TZX decoder! Read the OUT files section to learn more.

We strongly recommend you to read this manual carefully. It contains lots of explanations and suggestions that are essential to discover all MakeTZX's capabilities and to get the most from it. Don't forget the command line description where some important details are explained.

If you are experiencing problems with MakeTZX, please be sure you have read the FAQ, Known limits and bugs and the How to convert sections, first!


2. System requirements

To run MakeTZX you will need at least:

Windows version:

MSDOS version:

Linux version:

Amiga version:

All versions:


3. Features list


4. Soundcard DirectMode (realtime)

MakeTZX is able to read samples directly from your soundcard without having to use a sampler program first to produce VOC or WAV files and so letting you save some extra time. Note that it doesn't simply record a sample file and then converts it, but it works in true realtime, that is it decodes while sampling and everything is showed on the screen in the exact moment when it happens!
The I/O engine uses DMA to guarantee the maximum performance and quality. Even on slow computers, MakeTZX won't miss a single sample and will not be affected by noise and nasty clicks which might interfere with decoding. So, realtime conversion offers exactly the same reliability as the standard vocfile mode and guarantees the same high conversion rates. Use it freely, it won't make you lose time! If you want, you can save the samples in a WAV file with option "-rk" and reuse them later if something goes wrong or you want to reprocess the file later. You can also activate the built-in digital filter to reduce noise and disturbs on the tape (see the filter section in this manual).

The Windows and Linux versions of MakeTZX work with any soundcard installed. The MSDOS version, instead, supports SoundBlaster/Pro/16/AWE/32/64 and Windows Sound System (CS4231 / AD1848 families) compatible cards (including Ensoniq Soundscape). Most ISA-bus soundcards support at least one of these standards, so check the specifications of the board carefully. Usually, WSS soundcards are also SoundBlaster compatible and you may choose in which mode they operate under DOS. In this case, it is preferrable to configure the device for Windows Sound System mode because the SB emulation usually doesn't work correctly when sampling.
Note that the Windows Sound System codec is detected and used before Soundblaster; if you want to skip WSS detection, you must specify switch "-rb" which will detect Soundblasters only.

Notes for the MSDOS version

MakeTZX requires an environment string reporting the I/O address, IRQ and DMA channel information.

MakeTZX will not use a soundcard if its environment string is not defined.

Notes for the Linux version

MakeTZX uses the Open Sound System standard (OSS) and accesses the soundcard through the /dev/dsp device. Please make sure that sound support is enabled and working in your Linux box, either compiled into the kernel or loaded at startup as a kernel module. You must use your favourite mixer program to adjust the input level settings and to select the sound source for recording (e.g. LINE-IN, MakeTZX's default); if you play the tape but the vu-meters remain stuck at zero, you need to check the mixer settings. The pause key is not yet implemented. Follow the DOS DirectMode instructions.

Notes for the Windows version

DirectMode under Windows is straight-forward. Since MakeTZX uses the standard Windows sound drivers, there are no compatibility issues whatsoever. Any soundcard with installed drivers will work just fine. By default, MakeTZX will use the default device for sampling (as defined in the Multimedia applet of the Control Panel), but if you have more than one soundcard installed you can specify any other device with the switch "-rd". For instance, if you want to use device #2 then add "-rd2" to the command line. If you specify an invalid device number, MakeTZX will print the full list of devices available in your system and then exit.

Enabling DirectMode

To start MakeTZX in DirectMode, you need to specify the -r switch optionally followed by the shifted switch 's' and the desired sample rate (the default value is 32258 Hz). See the command line chapter for all the possible switches regarding DirectMode. Due to MakeTZX internal engine requirements (basically for Advanced Error Correction), the samples are written to disk anyway and so the maximum recording time is limited by the available disk space on the local unit. If you are getting out of space, try reducing the sample rate to produce a smaller tempfile. To set the maximum recording time you should use the shifted switch 't' followed by the number of seconds or minutes and seconds in the form 'm:s'.

Setting up the tape player

Before the conversion starts, two level meters appear at the top of the screen to allow volume adjustments and other tunings. The first bar (green) is a vu-meter which shows the signal amplitude; the second bar (red) measures the amount of sample clipping, that is how much the signal is distorted by excessive volume. The best condition is when you get the green bar as big as possible while keeping the red bar as small as possible. To find the optimal level, follow this procedure: starting from zero, increase the volume of your tape recorder gradually and you will see the green bar growing accordingly while the red bar remains stuck at zero. At a certain point the red bar starts to grow too and this means that you reached the optimal level. You may safely keep the red bar at around 10% or 20% without affecting the signal quality significantly.
When you are happy with level adjustments, press any key to start the conversion and watch the loading info appearing on the screen in perfect timing with the tape signal!

Control keys

To pause the recording, press 'p' at any time followed by any other key to resume. During pause, the vu-meters are shown again. The recording can be stopped in manual or automatic mode. To halt the conversion manually, simply press any key (but 'p') at any time. For automatic mode, instead, set a preprogrammed recording specifying the exact duration of the process with shifted switch 't' as said above; for example, to record for 5 minutes and 30 seconds enter "-rt5:30" and after that amount of time has elapsed MakeTZX will automatically stop. Of course you can still halt operation manually at any time also during a preprogrammed recording.

MSDOS DirectMode TROUBLESHOOTING (compatibility notes - MSDOS version only)

Note: Besides the following paragraph, don't forget to read also the Frequently Asked Questions for further troubleshooting about DirectMode.

The SoundBlaster driver has been developed and tested on original Creative SBPro2, SB16 and SB32 (DSP 4.13). It requires 100% SB compatible ISA chipsets because most clones don't implement the DSP sampling commands in the correct way (if not at all), while playing usually works. All modern soundcards use the PCI bus, and they rely on software drivers for compatibility with the old classic models. In general, you may encounter two kind of problems with MakeTZX: garbage samples (the vu-meters go mid-scale even without signal) and - oops - system hang. The first case has been reported with PCI cards (SB PCI64/128, SB Live) and the Vibra VX SB16 chipset (which uses the same DMA channel both for 8 bit and 16 bit samples) ; we haven't got any of these cards so it is a bit difficult to guess how to fix the code. The second case can be solved with compatibility mode sometimes (see below).

For Soundblaster cards, the realtime engine requires to access the soundcard in autoinit DMA mode, which is officially available only on SB2 or above. Soundcards reporting DSP versions 2.00 or 2.01 might actually be old v1.5 (especially for compatibles) and so autoinit DMA could not be available or work improperly. We allow these DSP's anyway because some true SB2 might work as well. Having a DSP greater or equal than v2.02 should be always ok.
Please note that DSP v3.xx or above can sample up to 45454 Hz, DSP 2.02+ up to 22727 Hz and DSP 2.00 and 2.01 up to 22222 Hz. MakeTZX automatically checks for the valid ranges. However, fake SB2's (actually SB1.5's) might be able to sample only up to 16 KHz, but we cannot check this from our code because we cannot distinguish true SB2's from the others. Besides, these rules apply to Creative models for sure, but we are not sure about ALL compatibles. For example, I seem to recall that my friend's Mediavision Thunderboard reports DSP v2.01 but can sample up to 16 KHz only. Other models cannot sample over 12 KHz.
Another issue is about the soundcard mixer. We let you do all the settings before sampling, such as input level, source selection, bass/treble and so on. Make sure you enable output if you want to hear the signal from the speakers while sampling. There are many (uncompatible) mixer chips out there, especially on SB clones; some of them require speaker disabled while sampling, others the opposite, so it's not easy to guess the initialization... please report any problems!

If you are experiencing problems that cannot be solved reading carefully this manual, it's important that you take note of everything MakeTZX prints and send it to us with a detailed description of your system: exact soundcard model, IRQ and DMA channels, operating system, command line used to start MakeTZX and so on.

Soundblaster Compatibility Mode

Some Soundblaster clones require to be accessed in the same way both for low and high sampling rates, while original SB's need two different command sets. If your soundcard hangs or MakeTZX reports an "IRQ LOCK" error, try with option "-rc". See the FAQs too.

Soundcard IRQ lock

When DirectMode is enabled, MakeTZX performs a preliminar I/O check to ensure that the soundcard communicates with the DMA controller correctly. If there's something wrong, after two seconds MakeTZX exits automatically and reports a message like "FATAL ERROR: IRQ #N LOCKED", which means that a timeout has occurred because the soundcard didn't send any data.
Possible reasons for this event are:


5. Command line parameters.

This section explains the various options of MakeTZX. It is essential that you read it carefully in order to understand how MakeTZX works and what it can do, so that you can make full use of all its powerful features.

The syntax couldn't be simpler :

MAKETZX samplefile[.EXT] [tzxfile[.TZX]] [switches] (see examples later)

where EXT is one of the supported extension types and can be omitted (items in square brackets are optional).

Actually, switches and filenames can be specified in any order you prefer. If you don't specify the output file, a TZX with the same name of input file (but extension .TZX) will be created.

The program will attempt to open a file named 'samplefile'. In case it will fail and the extension wasn't specified, it will then attempt to open the same file with VOC, WAV, CSW, IFF and OUT extensions in that order. If you specify two filenames when using DirectMode (realtime), the first filename will be ignored.

You don't need anymore to specify the loading scheme in the command line if it is Alkatraz, Speedlock 1/2/7, Bleepload, Paul Owens, Softlock, PowerLoad, Multiload, Injectaload, Excelerator or Zetaload, since now MakeTZX can automatically detect them. All you have to do is enable the autodetect mode with "-a" (see the table).

If you want to override autodetect, you can specify a loading standard manually by using a particular "-l" switch; if none is specified then the program will operate in RAW mode. RAW mode can decode any turbo loading system including Alkatraz and Softlock (it will automatically try to detect the loading speed) but not Speedlock and Bleepload. If you specify both "-a" and "-l", the manual setting will override autodetect mode.

Here's the complete list of all available switches (also displayed with "MAKETZX -?"):
 

-a     Enable loader type autodetect. You don't need to enter any -l switch, MakeTZX will automatically identify the loading scheme for you. At the moment, the following schemes are recognised: Alkatraz, Speedlock 1/2/7, Bleepload, MultiLoad, Paul Owens, Softlock, PowerLoad, Zetaload, Injectaload, Excelerator and Biturbo. If autodetect should fail to identify the correct type, please retry using the manual setting (switch "-l"). Autodetect mode will work in RAW mode until a specific loader is found.
-l n   Tells the program to operate in NORMAL mode only, i.e. with the timings of the ROM loader. Recommended when all the blocks are standard ones.
  Enable "fast pilots" detection for normal blocks with short pilots (e.g. LERM).
 a    This is used when converting programs protected by the Alkatraz protection system (games like Ghouls'n'ghosts, Ghostbusters II, 10th frame, Forgotten worlds and many others).
f   Enables the Softlock decoding algorithm (games like Cylu and Chimera).
b   Use BleepLoad scheme (used on most Firebird games like Bubble Bobble).
 s<N>    Use SpeedLock type N scheme, with N ranging from 1 to 7. Click on the link above to learn how to identify the different SpeedLock variants.
z   Use the Ramsoft ZetaLoad scheme (if you have any program from us).
o   Use the Paul Owens protection system (games like Batman the Movie, Operation Thunderbolt, The Untouchables, Chase HQ, Rainbow Islands, Red Heat)
m   Use the MultiLoad protection system (former Activision, games like Pacland, Timescanner, Ninja Spirit, Dynamite Dux)
p   Use the PowerLoad protection system (games like Arena, Deathwake, Dynamite Dan)
i,ie   Use the Injectaload (-li) or Excelerator (-lie) protection system (games like Loads of Midnight, Book of the Dead, Jack the Ripper)
g[N]   Use the Biturbo scheme by GB Max, found on all the Special Program and Special Playgames italian tape magazines. You may optionally specify the loader subtype N (1-3) or let MakeTZX autodetect it for you leaving -g only.
-k<N>     Tells the program to override the default number of blocks to skip before considering encoded data blocks. For example, if you have a BASIC program followed by a Speedlock 5 game, use "-k2 -ls5"
-x     Displays file informations in hex form (except for block numbers and pauses).
-h     Disables hi-fi decoding tones reproduction (for Speedlock loaders). By default, MakeTZX generates Speedlock tones with an algorithm which emulates faithfully the bubbling sounds. This options turns off the algorithm.
-r     Enable soundcard DirectMode (default rate: 32258 Hz). Realtime conversion from the soundcard (on supported platforms). Click on the link above for all the details.
s<N>   Set sampling rate to N Hz (min. 5000 Hz, max. 45454 or 48000 Hz). Check that your soundcard can record at the desired frequency. Under MSDOS, only WSS soundcards can sample up to 48 KHz. Most modern PCI cards can do 48KHz. Under Windows/Linux, we recommend using "fair" sampling rates (e.g. 22050, 32000, 44100 or 48000).
t<s>
 t<m:s> 
  Set preprogrammed recording time, e.g. -t 5:30 (no spaces) or directly in seconds: -t 330.
k   Save the sample generated by DirectMode in WAV format. Use this if you think you may need to reprocess the file later (so you don't have to take another sample of the tape). Generally recommended for safety.
c   Enable SoundBlaster compatibility mode. You may try this if standard DirectMode doesn't work with your soundcard (see also other DirectMode compatibility issues). Has no effect on WSS cards. (MSDOS only)
b   Skip Windows Sound System cards detection. This forces detection of SoundBlaster cards only. (MSDOS only)
f   Enable digital filter. This switch is obsoleted by the new -f group. Please read the related manual section to learn how to get the most from it.
i<N>   Select input source line for Windows Sound System soundcards. Use this switch when you can't do it from the soundcard's mixer program. The number N can be:
0= LINE-IN
1= AUX-IN
2= MIC
If N is omitted (leaving -i only), then 0 (line-in) is assumed. This setting is ignored for SoundBlaster cards. (MSDOS only)
d<N>   Select the sampling device under Windows. Use this switch if you have more than one soundcard in your system and you want to use one in particular. The number N ranges from 0 to the number of devices available minus 1. To get the full list of devices for your system, specify an invalid number (e.g. -rd100). (Windows only)
-f     Enable digital filter, a powerful and effective signal processing tool which efficiently eliminates noise and disturbs. Please read the manual section to learn how to use it and for some important information. Best used in DirectMode.
t<N>   Set filter type where N is:
3= Low pass
4= Band pass (default)
5= High pass.
l<N>   Set the lower cut-off frequency for band-pass and high-pass filter types.
h<N>   Set the upper cut-off frequency for band-pass and low-pass filter types.
o<N>   Set filter order. Specifies how strong is the filter. The default value is 4. Using excessive values may be counterproductive.
p<N>   Set filter prototype where N can be:
1= Butterworth (default)
2= Chebyshev
r<N>   Set ripple for Chebyshev filters. The default value is 1.00. This setting is ignored for the Butterworth model.
3   Disable 3DNow! optimizations. This prevents the use of the optimized code also when a compatible processor is found. (x86 platforms only)
-b     Enable TZX beautifier. This function improves the overall quality of the TZX file by adjusting the pauses after the various data blocks to round values, for better looking (and playing) tapes. Apart from the cosmetic purpose, it is also useful to make such intervals more regular and homogeneus (e.g. between game levels).

Now, note that the list above basically condenses into three switches only: the loader type (group -l), the realtime options (group -r) and the filter options (group -f). Besides, the autodetect feature eliminates the need for -l switches in most cases, so only two groups remain and they are not essential for conversion!

To make it clear, we give some examples of commands for the most common cases. Sometimes, two or more alternatives are given to do the same job.

COMMAND LINE EXAMPLES

What you want to doHow to do it
Convert a generic turbo or normal speed program recorded in "game0.voc" > maketzx game0
(will produce game0.tzx)
Convert a Speedlock 7 game recorded in "game1.voc" > maketzx -a game1 (using autodetect) or
> maketzx -ls7 game1
(will produce game1.tzx)
Convert a generic turbo game in realtime (DirectMode) with the default settings > maketzx -r game2
(will produce game2.tzx)
Convert a game in realtime (DirectMode) using autodetect mode and the digital filter with the default settings > maketzx -a -r -f game2
(will produce game2.tzx)
Convert an Alkatraz game in realtime sampling at 44.1 KHz and save the samples > maketzx -a -rs44100 -rk game3 (autodet.) or
> maketzx -la game3 -rs44100 -rk
(will produce game3.tzx and game3.wav)
Convert a program at normal speed using DirectMode with autostop after 7 minutes and 30 seconds, on a soundblaster clone > maketzx -rt7:30 -rc -ln game4
> maketzx -rt450 -rc -ln game4 (less evident)
(7 min. and 30 sec. = 450 seconds)
Convert a game of an autodetected loader type in "game5.wav", processing it through a 1st order lowpass filter with cut-off frequency of 8 KHz > maketzx game5 -a -fo1 -ft3 -fh8000
Convert a Softlock game which comes after a BASIC program (file "game6.voc") > maketzx game6 -k2 -lf

If you have problems entering MSDOS commands, use one of the graphic interfaces available for MakeTZX (both for MSDOS and for Windows)!

NOTE: you can specify only one decoding algorithm (otherwise an error message is given). Manual loader type specification disables autodetect mode (if enabled).

WARNING: to use more than one shifted switch you have to retype the main switch (example: -rs22050 -rt15:20)


6. Understanding MakeTZX's messages.

While decoding, MakeTZX produces several messages on the screen to inform you about what's going on. They are very important because everything about the conversion process is reported there: data blocks found, start addresses, ram pages, decoding status, warnings, error messages and so on.

In SoundBlaster DirectMode all the messages are shown on the screen in realtime, so you will see them in the very exact moment when the events happen! It's like on the real Spectrum! We recommend you to try it (for example with a Speedlock, it's amazing), fun is guaranteed!

Basically, you will presented with two kinds of information:

System status

Usually, the last printed line of the screen shows what MakeTZX is doing in that moment. You will read any of the following:

Data block information

For each decoded block, MakeTZX prints everything it can desume about it. The shown info depends on the operation mode (e.g. Normal, Alkatraz, Speedlock, etc.), since for each custom loader MakeTZX knows the programming details of the machine code.

In each line, the block length and the pause (i.e. the time between the end of that block and the beginning of the following one) will be always shown.

Important: after the filename (if available), MakeTZX prints a status character, with the following meaning:
 
SymbolMeaning
- The block has been successfully decoded without any problems.
? The data integrity cannot be assured because the checksum is not available.
R Data corrupted but successfully restored by Advanced Error Correction.
! Data corrupted under exponential complexity, but it could work anyway.
F Data corrupted and AEC failed recovery (unsupported fault class).
X Bad checksum, but no errors detected.


7. How to identify a custom loader.

This is a brief guide to help you recognize the various custom loaders explicitly supported by MakeTZX. Remember that most of the following schemes are autodetected, so you only need to turn on autodetect mode (switch -a) and MakeTZX will identify the correct loader type for you. See the command line section for a list of the autodetected types.

Alkatraz

A very fast and popular scheme, used in all US Gold games. It's very easy to recognize: Some examples of Alkatraz games are LED Storm, Ghouls'n'Ghosts, Indiana Jones and the Last Crusade, Street Fighter, HKM, The Goonies, and many many more.

Speedlock

Speedlock is one of the most common commercial turbo loaders. It can be found in hundreds of games, many of which from Ocean. Although there are several versions around, you can recognize it because in all variants the loading screen appears suddenly, there are no coloured stripes in the border when the screen has appeared and there is often a countdown timer showing the remaining time expressed minutes, seconds and tenths of a second.

There are seven different versions of Speedlock loaders, plus a hybrid one (see the notes).
Speedlock types 1, 2, 7 and the hybrid 1/2 can be autodetected (switch "-a"), so you may want to let MakeTZX try to recognize them for you.
Please read the notes.

Type 1

Examples : Highway encounter, JetSet Willy, Daley Thompson's Decathlon Day 1 and 2.

Type 2

Examples : Enduro racer, Knight rider.

Type 3

Examples : Leviathan 48 and 128k

Type 4

Examples : Athena 48 and 128k, Catch 23

Type 5

Examples: Out run, Ping Pong, Winter games 1 and 2, Madballs.

Type 6

Examples: Vixen, Super hang-on.

Type 7

Examples: Turrican, Myth, Operation Wolf 48 and 128k, Firefly, Arkanoid II, Tusker, The last ninja II, and many others!!!

NOTE: type 2 is very similar to type 1, type 4 is similar to type 3 and type 6 is similar to type 5. If you don't succeed in correct conversions please try even with more than one type.

NOTE: The hybrid Speedlock 1/2 (e.g. Highlander) must be decoded as type 2.

Paul Owens

It was used in all the latest games from Ocean. Examples of Paul Owens games are Batman the Movie, Rainbow Islands, Chase HQ, Red Heat, Cabal, The Untouchables and others.

Bleepload

It was used in many Firebird games. Examples of Bleepload games are Bubble Bobble, Starglider and others.

Activision/Multiload

As the name suggests, this loader was used for some Activision games. Examples of Activision games are Pacland, Timescanner, Ninja Spirit, Dynamite Dux and others.

Softlock

It can be a normal or turbo speed loader, used in a few games Examples of Softlock games are Impossible Mission 2, Cylu, Rasputin, Elite.

PowerLoad

It is a quite fast turbo loader, used in a few games Examples of PowerLoad games are Arena, Dynamite Dan, Deathwake.Examples of Injectaload games are

Injectaload and Excelerator

These two loaders are almost the same one, and they were used by CRL. Examples of Injectaload games are Ninja Hamster, Book of the Dead, 3D Game Maker. Some Excelerator titles are Jack the Ripper, Loads of Midnight, The Last Mohican.

Biturbo

This scheme has been used in all the italian tape magazines of the series Special Program, Special Playgames, Program and Playgames; they were very popular in Italy in the 80's and early 90's. There are three subtypes:

Biturbo 1

Biturbo 2

Biturbo 2.5 and 3

Biturbo 1 appeared in the earlies issues of the magazines, while Biturbo 3 was used in the latest. Many issues were recorded with type 2; only a few issues have type 2.5.

Zetaload

Zetaload is a very fast custom turbo loader created by us (Ramsoft). We have used it for some special releases in the past.


8. The CSW file format.

CSW files are a way of storing sample data in a compact form, typically taking 1/10th of an ordinary VOC. It is used internally by MakeTZX, but it is also very useful to keep down the disk space taken by your VOC/WAV files. The CSW utility can handle CSW conversion in both ways (see below); you can download it separately at our web site. Of course, MakeTZX itself accepts CSW files for input.
When converting to the CSW format, the sample file is processed through MakeTZX's internal digital filter which reduces noise and signal distortions very efficiently. Make a backup copy of the original file if you will need the original samples later, but remeber that in most cases the CSW will be a lot better than the original file.
Note that CSWs are intended for use with square waves only (such as computer tapes)!
The compression ratio depends on many factors; in general, the higher the sample rate, the higher the ratio. A clean and regular signal helps too. The ratio for a 44 KHz file will usually be twice the value for a 22 KHz one. The typical gain for a 44 KHz turbo tape is about 93%, which means a 12:1 compression factor! Normal speed tapes should compress even better.
Finally, CSW files are highly compressable with the standard PC archivers such as RAR and ZIP. The packed CSW files are usually smaller than the zipped original VOCs. You will be able to RAR a 40 MB sample file down to a few hundreds KB.

Download CSW utility (with fully-detailed manual)


9. How to use OUT files.

OUT files are trace files produced by emulators such as Z80. They are used by MakeTZX to achieve the ideal integration between an emulator and a TZX decoder, a revolutionary approach which allows MakeTZX to reach the mathematical 100% successful conversion rate! OUT files are processed by MakeTZX exactly like the other sample files (VOC, WAV, etc.), so the same rules and considerations apply but with the big difference that the conversion just can't fail! Due to its intrinsic nature, this technique can be applied to the vast majority of custom loaders around, but with a very few types it doesn't work yet. This topic is discussed later in this chapter.
Anyway, in all the supported cases, any program which loads and runs into the emulator will be perfectly converted by MakeTZX without any error. This is an amazing result, which definitely puts an end to the TZX conversion problem in most situations.

How to produce OUT files.

We refer to the Z80 emulator because at the time of writing it's the only one supporting the OUT format. You can possibily do the same with other emulators.
  1. Start the emulator and tell it to log ANY out instructions to port 0xFE (254 decimal). In Z80 this can be done by launching the emulator with switch -xg (very important) and then pressing F10, X and O in sequence; then press N and enter the filename for the OUT file that will be produced. OUT logging is now automatically enabled in Z80.
  2. Make sure that port 0xFE (254 decimal) is included into the list of the I/O ports logged by the emulator; in Z80 it's included by default. If not, add it by pressing A and then typing FE. You can also log other ports such as AY-38912 (128K music); they will not interfere with MakeTZX.
  3. Select the VOC file to play and then load the program to convert normally (i.e. with LOAD "" or using the Tape Loader of 128K Spectrums). Of course you can also use real tape support (from LPT or Soundblaster) if you prefer.
When loading is complete, exit the emulator. You can now process the OUT file produced with MakeTZX as usual like a common sample file.

Applicability

The primary purpose of this technique is to solve those cases when a VOC file works in the emulator but MakeTZX fails to convert it successfully in other ways and you have already tried all the possible remedies such as tweaking with the digital filter. However, this approach has proved to work so well that you may want to use it often because it guarantees 100% success without any troubles.
We will now discuss the main points of this technique, showing advantages and disadvantages. VERY IMPORTANT: Please note that, while every VOC (or whatever else format) that runs in the emulator will be surely converted by MakeTZX, the converse is generally not true, that is MakeTZX will successfully convert many VOC files that won't load into the emulator! In other words, MakeTZX is a much better loader than the emulator and it is necessary to use OUT files only in the rare cases when MakeTZX fails to decode a tape which instead works in the emulator.


10. How to convert.

As we said, MakeTZX was designed to do its job without requiring the user to set tons of parameters, so you will not have to retry a conversion many times, each time trying to guess the right combination of settings. The engine is intelligent enough to calculate the appropriate values for you, or at least it tries to. We have found that in 99% of cases (actually, 56 out of 57 in our test set) MakeTZX is successful, a percentage that we have not been able to achieve with any other similar tools, even tweaking with the settings.
However, sometimes it may happen that you are not able to produce a working TZX, especially if you have not a great experience with TZX decoding and you are at your first attempts. Before we go on with some useful suggestions to help you, we wish to emphasize some special features of MakeTZX that it is worth paying attention to:

Sampling

Sampling is probably the most delicate phase of the whole process, so it is worth spending most of the time and the attention. A good quality sample is essential.
First of all, squared or non-squared doesn't make much difference for MakeTZX, since it has an internal digital filter which squares the signal and reduces noise and spikes. Do not confuse this "filter" with the digital filter (switch group "-f"), it has nothing to do with it. Use READSB if you are used to it, but it is not strictly necessary. Instead, we recommend you to use DirectMode as much as possible: it's reliable and will let you save a lot of time. If you think that the tape is in critical conditions or you don't know exactly what kind of loader type you are in front of, use switch "-rk" to save the sample file so that you can experiment with it later without having to resample the tape again! If a conversion in DirectMode has failed, then it would have failed even if you had recorded the samples into a VOC with your favourite sampler. Besides, consider that a digitally filtered VOC is not always better than a normal one, because the digital filter itself may introduce nasty errors such as a 1-bit which becomes two 0-bits -- and try to get rid of this (although MakeTZX can)!
For a good signal quality, we recommend the following:

Make sure that at least the leader is correctly detected.
Sometimes, trying with volume set to half way or full may help.
There are tapes that the real Spectrum reads successfully but MakeTZX doesn't convert. This happens when there are deep spikes somewhere in the signal, but the Spectrum isn't reading from the tape when they occur. In some cases, MakeTZX can correct the problem by itself because it can guess what to expect there; in the other cases, if you are skilled enough you can try to locate the exact point where this happens (you can read it in the logfile as soon as we put it back in v2.xx, or use MakeTZX v1.02) and use a sample editor to correct the problem.

Choosing the right mode

If the loader type of the program is one of those recognised by MakeTZX autodetect mode, then use switch "-a" and it will do everything for you; this is the most recommended way. In the other cases (and if autodetect should fail to identify the right mode), you should know what kind of loader you are in front of, since none of SpeedLocks, Alkatraz and the other commercial turbo loaders will convert in RAW mode. If you are not sure, then using DirectMode with switch "-rk" is a very good idea, since you may have to try some times before guessing the right subversion (unless it is an autodetected type or you can tell it clearly reading section 7).
For normal speed tapes you should always try normal mode first (switch "-ln"), since it is more precise than raw mode. However, some tapes may not convert in normal mode and work fine in raw mode; a typical case is when the tape runs at altered speed (too fast or too slow), so that the signal frequencies get somehow "shifted" and may fall out of the valid range assumed by normal mode. Again, ensure that the leader is detected. Note that the converse may happen too: if a normal speed tape does not convert in raw mode, try normal mode (perhaps this is more likely the case).


11. The digital filter.

MakeTZX offers a powerful tool against noise disturbs that are frequently encountered in old tapes. It implements a very good quality, fully featured Digital Signal Processor (DSP) engine which offers great performance and results. It uses highly optimized assembler routines and takes full advantage of 3DNow! processors for extra speed. It has been especially thought for realtime conversion in DirectMode, but it can be enabled for any supported input file too (except CSW files who don't need any filtering).
Before we go on describing the filter and ho to use it, you may want to know something about signals and filters, so that you can understand the description better.
Of course, we do not present a formally correct exposition of Signal Theory here, but we try to explain in trivial words some basic concepts. If you are an expert already, you can skeep the next two or three subsections.

Signal spectrum and noise

Simply speaking, every signal can be considered as an infinite sum of oscillations at different frequencies and amplitudes; imagine these oscillations as "pure" frequency tones and focus over sine and cosine waveforms. The Fourier's theorem gives a formal proof for this fact and provides a method to compute the amplitudes of each sine (more exactly, they are complex exponentials but in practice we may think of them as sine and cosine functions). Spectrum analysers are just a way to compute this coefficients and show the results in a graph where the X-axis is frequency and Y-axis is the amplitude of the associated oscillation. If the amplitude associated to a certain frequency (say, 8000 Hz) is very low (if not zero), then we say that the considered frequency is not significant for (or not contained into) the signal that we are examining. Instead, the frequency with the highest amplitude in the plot is dominant and somehow characterizes the whole signal. For example, in the spectrum plot of an A-5 note played by a flute we will see that the 880 Hz component is dominant (has the highest amplitude); 880 Hz corresponds to the A-5 note. We will also notice that the peak is repeated several times every 880 Hz with globally decreasing amplitudes (at 1760, 2640, 3520 Hz and so on); all these scaled repetitions are called harmonics (multiples of the fundamental frequency) and they are very important too; their shapes contribute to make the difference between the sound of violin and a piano both playing the A-5 note. A "pure tone" (like a perfect sine function or the sound produced by a diapason) consists in the fundamental frequency only: there is only the first harmonic - at least in theory, in practice nothing is so perfect.
Higher frequencies are associated with high-pitched sounds, while lower freqs correspond to bass sounds.
Every kind of signal has a different spectrum, containing an unique mix of bass and treble tones and different harmonics. It's a sort of finger-print, for example voice recognition programs learn the "image" of your voice to recognize your words. The difference between a violin and a flute is reflected into two different shapes of their spectrums, with a different number of peaks at different frequencies and at different distances amongst them.
What is the highest frequency possibly contained into a signal? Well, theorically infinite. A simple signal like a square wave contains infinite harmonics (multiples of the fundamental frequency) with non-zero amplitudes (although they become closer to zero as the frequency grows). An important theorem (by Shannon) states that if you sample a time-continuous signal (for example with your soundcard) at a certain samplerate (say F Hertz), the sampled signal contains the original frequencies only up to F/2 Hertz. So, if you want to hear the highest harmonics of an orchestra at 22 KHz then you must sample at 44 KHz at least.
Unfortunately, real life signals always contain undesired frequency contributions that are not part of the "original" signal. They come from the outside world or are introduced by devices such as amplifiers, transmitters, converters and so on. We call noise every undesired external contribution which is not part of the original information carried by the signal; with this definition, also a ringing cellular phone at the theatre can be considered as noise! The bad bit about noise is that is cannot be competely eliminated from a signal in any way; it's not that we are not able to do this job, but it's rather a fundamental component of the real world. Noise and information are superimposed and there is no way to properly separate them, because noise is somewhat "unpredictable" and it cannot be subtracted.
Once we have identified the noise into a signal, we can only hope to attenuate it enough without affecting the signal itself beyond a certain limit. Sometimes, like in certain old tapes, the noise can be so loud that the intensity of its frequency contributions is comparable with those of the original signal, making it hardly interpretable. In this cases, it is absolutely necessary to use some tool to reduce such noise and make it a lot weaker than the actual signal.

Filters

Filters are "devices" (real or just mathematical) that operate over spectrums and transform them. Filters themselves are associated with a frequency response, that is they attenuate or amplify each frequency of the input signal in a way that depends from the frequency itself. To clarify, a certain filter could leave unmodified (that is with an amplification of 1.0) the amplitudes of all frequencies from 0 to 8000 Hz and then force to zero all the rest. A similar entity is called a low-pass filter because it allows only the lower frequencies to be present into the output signal; it will cut the beautiful crystal sound of a violin (frequencies over 10 KHz), but if it could amplify rather than just pass the low freqs, than it would enhance your favourite disco music with lots of percussions and bass. The frequency where the filter changes its behaviour is called cut-off frequency.
Similarly, a high-pass filter will cut the the lower frequencies and pass the highest ones, while a band pass filter will act like a lowpass and a highpass together: it will pass only the frequencies falling within a certain range (say 600 to 4100 Hz).
A band-pass filter consists in a low-pass and a high-pass combined together, so it allows the frequencies falling within a certain range.
An ideal filter has sharp square edges in correspondence of the cut-off frequencies. For example, the frequency response diagram of the perfect band-pass filter is a rectangle with the vertical edges located at the two cut-off frequencies; between these frequencies the amplification is 1.0 (does not modify the input), while it is 0.0 outside. The problem is that a similar thing is not physically realizable. Real life filters have "smooth" and continuous transitions between the various zones of different amplifications, without gaps. Of course, when we are interested in leaving only a certain range of frequencies and cutting out all the rest, we want the slopes of the transitions to be as steep as possible, in order to reach the best approximation of the ideal behaviour. This steepness is somewhat related to the order of the filter (the number of poles of the transfer function); we cannot explain further in this direction without facing complex mathematical arguments, so believe that the higher the order, the steeper (better) the slopes. A high order filter will be more selective than a low order one. For example, a first-order lowpass with a cut-off frequency of 1000Hz will show an asinthotic diagram that will start to decrease after 1000Hz with a slope of -20dB per decade (attenuation will be -20dB at 1000 * 10 = 10,000 Hz and -40dB at 10,000 * 10 = 100,000 Hz if it started from 0dB); for a second-order filter the slope is the double (-40dB) and so on. In the real world, it is not possible to have perfect square-edged filters.
It is important to note that the slope at the edges of a band-pass of order N is half the slope of a low-pass or a high-pass of the same order, so if you want a band-pass with the same filtering strenght of a low-pass of order 3 you must use a band-pass of order 6; to understand why this happens, imagine to split the order 6 as 3+3 and that a 3 goes for the embedded low-pass and the remaining 3 is for the high-pass.

Spectrum of the Spectrum

Now let's see what the spectrum of a ZX Spectrum tape looks like. Our computer produces only square waves at different frequencies and at different times, so the shape of the spectrum will be the generally the same, more or less shifted and scaled depending on the base frequency of the oscillation. However, for physical reasons the real signal recorded on the tape cannot be a perfect square wave, but it is rather a "smooth" sine, more or less squared. Now, if you recall what we said above about ideal filters, we could say that Nature doesn't really like square edges! Good electronic components produce sharper edges, so you can evaluate the goodness of your Spectrum plus your tape recorder combined together by examining the waveform of a recorded tape with a sample editor (assuming that you have an ideal soundcard, otherwise it will contribute to shape the signal too!). The sharper the edges, the better the quality. Incidentally, these considerations also affect the signal quality of a video card (sharp edges = finer details), the maximum clock speed for an integrated circuit (high clock speeds need high currents and so high power consumption) and a variety of other situations.
Ok, now that we don't expect real square waves from our computer, let's see what are the typical frequencies involved in ZX Spectrum recorded signals. At the moment we are interested into the fundamental frequencies only, disregarding of the harmonics. We will take into account the first three or four significative harmonics later.
The lowest frequency is the pilot tone, a "square" wave of about 808 Hz. The bit-0 of the standard ROM loader is at 2044 Hz (bit-1 is 1022 Hz) and the sync pulse is a short pulse at nearly 2450 Hz. Examining the spectrum of the pilot tone, we see that the louder frequency contribution is obviousely at 808 Hz (the fundamental) and that the successive 4 harmonics (at 1616, 2424, 3232 and 4048 Hz respectively) are quite evident too; however, the fourth harmonic is about 40dB weaker than the fundamental, so it is not really determinant but we will try to keep at least the second harmonic.
The highest frequencies are shown by the fastest turbo loaders. Alkatraz and Zetaload are good examples; they run at 3100 Hz for the bit-0 waves, and this is nearly the maximum limit for a tape recording. Considering the third harmonic, a reasonable higher cut-off frequency is 3100 * 3 = 9300 Hz which we will round to 10 KHz. Remembering the Shannon theorem, for a good sample quality of a turbo tape we must sample at least at 20 KHz if we accept to keep the very first harmonics only, otherwise we have to increase the samplerate to 44 KHz to include also the 7th harmonic. Now you see why a decent samplerate is so important!

Tape noise

An old tape frequently presents two kinds of problems. The most important is hiss, the high-pitched background noise that you clearly hear instead of silence. It is characterized by high-frequency contributions in the far right of the spectrum, so it can be attenuated with a lowpass filter. The second disturb comes from your electric wiring where the 50 Hz AC that powers your Spectrum and your tape recorder comes. The DC used by electronic devices is produced from the common alternate current by electric circuits which cannot be perfect, so you should not be surprised to find a modest 50 Hz component into the Spectrum signal, together with its first three or four harmonics (and more if you have an economic tape recorder). Although not so harmful as hiss, 50 Hz is an undesired presence too, so why not try to eliminate it?
Another frequently encountered problem is the DC-offset, i.e. a translation of the signal. Normally, the signal is centered around the zero of the scale (mid-scale) and it looks symmetrical respect to it; this means that the mean value is zero and that the duration of positive and negative semipulses is the same. Sometimes, instead, the signal appears traslated upward or downward by a certain quantity: it's not centered at middle-scale anymore and its mean value becomes sensibly different from zero. The amount of this translation is the DC-offset and it can measured with some sound editor like Cooledit. The DC-offset disturb may come from the electronics of your tape recorder or, more frequently, it is recorded onto the tape itself (factory-originated). The DC-offset can be considered as a 0 Hz oscillation (DC) and so it can be eliminated with a band-pass or high-pass filter.
As we said earlier, we would like to keep only those frequency components actively involved into the computer signal and discard all the others. We can think about a bandpass filter and choose the highest and the lowest Spectrum frequencies discussed above as cut-off frequencies; remember to take into account the harmonics.
Note that the filter modifies not only the noise components, but it affects also some harmonics of the original signal too, because they are superimposed. So, an aggressive approach to noise suppression can distort the signal excessively and make the situation even worse. For this reason, it's not a good idea to specify big orders for the filter; usually, a value of four or six can be considered the top limit before fatal signal distortion.

MakeTZX's filter

MakeTZX has an integrated DSP engine which can realize lowpass, highpass and bandpass filters of any order up to a maximum of 16. The order of a bandpass filter is automatically forced to be an even number. The user can select all the parameters including the cut-off frequencies. The default settings define a bandpass filter of the 2nd order with cut-off frequencies of 600 and 4100 Hz, so it is like a 1st order low-pass at 4100 Hz and a 1st order high pass at 600 Hz combined together. Besides, the user can choose between two prototypes of the filter. The former is the Butterworth model (assumed by default) which offers a good frequency diagram with a flat response over the allowed band and steep edges. The latter is the Chebyshev model which has steeper edges than Butterworth but the central region of the diagram is not flat and presents a certain ripple, so it distorts the signal a bit. The amount of the ripple can be adjusted, but the lower the ripple (for a flat diagram), the less steep the edges. There is plenty of parameters to play with if you believe you need a special filtering process different from the default one. We think that it is flexible enough to allow very efficient noise removal for most situations, so take some time to experiment with it and the best results are guaranteed!
Once you know the basic working of filters, feel free to experiment with the settings of MakeTZX's filter. The default settings should work in many cases, but sometimes the best results can only be found with repeated experiments. You have a powerful tool to play with, and it is certainly able to solve the most difficult cases if used correctly.
On the performance side, the DSP engine has been totally written in pure assembler and heavily optimized by hand both for the standard x87 FPU and for 3DNow! technology. MakeTZX automatically detects a 3DNow! compatible processor and uses the accelerated version of the routines; the 3DNow! code is about 4 times faster than the optimized FPU version and beats also a Pentium II at the same clock frequency. The ANSI-C version (used for non-x86 platforms) is 9 times slower than 3DNow! and 2 times slower than the current asm x87 FPU code.
Important note: the 3DNow! instructions work with single precision floating point numbers (floats, 32 bit), but the FPU version has been implemented to work in double precision (doubles, 64 bit). Floats are only accurate up to the 7th decimal digit and for complex mathematical considerations their use for high order filters leads to numeric instability (the filter becomes unstable because the coefficients cannot be represented with a sufficient precision); in these cases, 3DNow! acceleration is automatically disabled. For the same reason, the maximum order of a filter is limited to 16; beyond this value, also double precision numbers are not accurate enough.

Some hints

Finally, here are some general tips to keep in mind:


12. Graphic interface: MakeTZX WinGUI.

WinGUI is a graphical user interface for MakeTZX running under Windows 95/98. It provides intuitive access to all MakeTZX functions simply with mouse operations, hiding the native DOS command line interface completely.
With WinGUI installed, you don't need anymore to start MakeTZX from the command line, although you can still do so if you prefer. MakeTZX remains a console program, but WinGUI adds new features to it.

Installation

To run WinGUI you need Windows 95 or 98 and MakeTZX v2.30 or above. It can be used with earlier versions of MakeTZX too (v2.00 minimum), but some of the newer options could not be supported by the old executables, causing a syntax error.
To install WinGUI, download the WinGUI package from MakeTZX's homepage and unpack it into the same directory where MakeTZX resides. You can also put it into another directory, but then you will need to configure the file locations from the Options/Configure paths menu. WinGUI may create a small configuration file (INI) in the same directory; do not edit it manually.

How to use it

When you launch WinGUI, you are presented with a control panel containing all the controls of MakeTZX. If you are already familiar with MakeTZX, you should immediately understand the meaning of the controls since they reflect the various command line switches of MakeTZX very closely.
First of all, adjust the settings to match your requirements; for example, select the loader type, configure the DirectMode and digital filter options if desired and specify the input and/or the output files (as required). The Browse button near the input filename field will bring you a handy file selector to choose the file to convert.
Once you are ready with the settings, you may press the Start button and MakeTZX will be launched. This will open a console box automatically, where MakeTZX will produce the usual messages. When the conversion has terminated and you have examined the results, press any key on the console box to close it automatically. Note that while a conversion is in progress, you may still operate with the control panel of WinGUI and launch other conversions; in this way you can run several instances of MakeTZX in parallel, provided that only one realtime DirectMode conversion at a time may exist.

Define your own custom loader types

If you wish, you can now define your own set of custom schemes to extend MakeTZX's built-in loader types. The new loaders created by you are included as additional items into MakeTZX's supported types list, so you can use them just like any other predefined type. The user-defined loaders editor is accessible from the main menu with the Options/Configure loaders button and allows easy insert/modify/delete of your schemes (profiles). To create a new loader type, enter its name into the "Profile name" field and then fill in the various parameters (sync pulses and bit lengths, all expressed in T-states); the "Skip" field is the number of normal-speed blocks to skip before the first turbo block (e.g. skip=2 if there's a only a BASIC loader, skip=4 for one BASIC + one CODE, etc. -- this value is automatically added to the Skip parameter specified into the "Decoder Options" frame from the main control panel). Finally, press "Add" to append the newly defined type to the existing list. To remove a loader, just highlight it and then press "Delete". If you wish to edit an existing scheme, select it and change the parameters, then press "Apply" to make them permanent. When you have finished, press "Done" to close the editor and save the preferences. The loaders database is stored into WinGUI initialization file, so it is preserved amongst the various runs.

TZX Viewer

The GUI has a little TZX viewer which can be used to examine the contents of a TZX file. To show it, just press the corresponding button in the main screen. It is not intended as a fully featured TZX manager, so it has very limited capabilites. You can use it to check any TZX file, for example those produced by MakeTZX itself. Its usage is very simple, just load the TZX in using the "Open..." button. There are 5 columns showing some info about the various blocks; the details presented should be self-explanatory. The CRC column shows "OK" if the block has a valid ROM-CRC; if the block has errors, it prints the current CRC value and, in brackets, the expected value. Note that for some protection schemes (for example, Alkatraz and Speedlock sub-blocks) the CRC column is not significant and must be ignored (because they use different ways to compute checksums). The viewer can be used simultaneously with the rest of the GUI and the various MakeTZX instances.

Uninstall

To completely remove MakeTZX WinGUI from your system, simply delete the MTZXWGUI.EXE executable; if present, delete the MTZXWGUI.INI configuration file which resides in the same directory where the executable is.


13. FAQ (Frequently Asked Questions).

Here are some common questions that we have been directly or indirectly asked up to now. If you cannot find the answer to your question here, don't hesitate to write to us.

1. Why did you invent CSW?
Well, CSW was created because we needed it. Each time that MakeTZX is modified, we test it with 57 sample files of different kinds (and, at the moment, it hits 56 of them, by the way). Imagine that our hard disks are full of rubbish and that 57 VOCs take *a lot* of megabytes. That's how CSW was born: we needed to store the samples in a compact form, preventing them to fill up the hard disk. At first, we used it only for internal purposes, but later we thought that it might have been useful for someone else too... and this is why we made the mistake to release it to the public! :-)
Anyway, if you don't like CSW, or you don't think it may be useful to you, simply don't use it! We didn't want to impose a new format to anyone! :-)

2. Zipped CSWs are smaller than zipped VOCs?
A packed CSW is always smaller than the corresponding packed VOC, unless the VOC is a binary VOC, that is produced with READSB and digitally filtered; in this case the compression ratios are similar.

3. When I convert my CSWs back to VOC, some of them don't load anymore. Why?
The original VOC file is processed through MakeTZX's internal digital filter to produce the CSW and it means that when you convert back to VOC you will not get the very same samples; this may happen even if the original VOC was produced by READSB. Note that this is not a crime, but it is often an improvement, instead. Sometimes, however, the signal is recorded under critical conditions and while the Spectrum may not be affected by a certain error (because it is not INning in that moment, for example), MakeTZX's filter (included in CSW.EXE) cannot avoid it. When this happens, the new VOC produced from the "faulty" CSW will contain the error in much greater evidence than in the original one, thus causing a tape loading error. Note that it is possible, however, that MakeTZX converts the "faulty" CSW successfully.
In general, you should consider such weird cases as warnings about the bad quality of the original VOC.

4. When I start DirectMode (MSDOS), MakeTZX pauses for about two seconds and then exits saying "FATAL ERROR: IRQ #n LOCKED!" or something like that.
This question is fully covered here.

5. When I start MakeTZX in DirectMode, it prints "Press any key when done with volume meters" but the system hangs.
This is a problem with the soundcard autoinit DMA mode. You may try to use switch "-rc" (compatibily mode)which can make things work when you have a SB compatible soundcard. On Windows Sound System cards, "-rc" have effect only if you specify also "-rb" and the soundcard is capable of simultaneous Soundblaster emulation. Please read the DirectMode section carefully, which contains some info about soundcard compatibility issues.

6. During realtime conversion in DirectMode, sometimes MakeTZX says "DMA overrun".
This happens when MakeTZX processes the soundcard data too slowly. Probably, accessing your hard disk requires too much time because it's busy (under a multitasking environment) or you are not using a disk caching software. If you are running MakeTZX under plain MSDOS, please always load SMARTDRV.EXE or a similar program because it strongly reduces the disk latency. Under Windows 9x you don't need anything (there's the integraded VDISK).
If you are using the digital filter on a very slow machine, try to disable it.
A very remote possibility is that your CPU is too slow and MakeTZX gets very busy with Advanced Error Correction, but it's almost impossible...

7. When I try to use DirectMode, MakeTZX hangs. Why?
Probably, autoinit DMA isn't working properly with your soundcard. Read the compatibility issues described in section 4. If MakeTZX reports a DSP version greater or equal than v2.02, typically v3.01, probably you have a SB compatible which emulates the SBPro playback functions but cannot record. Many ESS chipsets do so, including the brand new Soundblaster PCI128 which has an Ensoniq chipset.
You may try with Soundblaster compatibility mode (switch -rc); in the other cases, check that the BLASTER or WSSCFG environment string reports the correct values for IRQ and DMA. Use a diagnostic program if necessary.

8. In DirectMode, I play the tape but I don't hear the noise from the speakers.
First of all, ensure that MakeTZX hears the signal and does the conversion. Look for "Loading pilot" and similar messages. If this does not happen, check the soundcard mixer (using the configuration utility which comes with the soundcard) and be sure that the proper input source is enabled, otherwise read section 4 about the compatibility issues. If MakeTZX converts, instead, check the mixer to enable the output. On Windows Sound System cards, use the configuration utility which comes with the soundcard to adjust the volume settings and select the proper input source (typically LINE). If nothing happens, tell us the model and DSP version of your soundcard.

9. Is the source code of MakeTZX available?
We are not yet going to release the sources of version 2.xx, but the old v1.02.1 code is freely available for download at our site. Please read carefully the enclosed documentation.

10. MakeTZX says that all is OK, but the resulting TZX doesn't work.
Most probably this is due to a bad sync pulse which is the most difficult thing to detect in a Spectrum tape sample file. If a sync pulse hasn't been correctly detected, MakeTZX would report a checksum error on 95% of times; the remaining 5% is when MakeTZX detects a wrong sync pulse but the checksum is still good, so MakeTZX saves this block without processing it twice, since it has been "loaded ok". If you look at the resulting TZX with a proper utility (or a simple hex editor if you dare :-) ), you'll find that the block that causes the loading error has the flag byte value divided or multiplied by 2 modulus 256: this is because the bad detection subtracts a bit to the flag.

11. MakeTZX prints "done." but it doesn't produce any block.
First of all, ensure that the sample file to convert contains valid ZX Spectrum sounds, of course. Check if MakeTZX detects at least a pilot tone ("loading pilot" should appear at some moments). If not, try to repeat the conversion enabling the digital filter (it could be due to DC-offset, see the Filter section of this manual). If you still have no success, try to specify a particular loader type such ROM timings or some commercial turbo. Check with a sound editor (like CoolEdit) if the waveform presents serious problems (excessive distortion, volume, etc). If you can, please send us a piece or the entire sample file; if you want to send all the file, you can compress it with CSW.EXE and the send us the zipped CSW file obtained. Contact us and describe exactly the problem, reporting the command line used and the operations done.

12. What are TZX files?
The TZX is a digital tape format that allows a faithful representation of the original tape. Unlike the famous TAP, TZX files describe the physical signal structure of the cassette, meaning that the loading process will be reproduced exactly preserving the behaviour of turbo loaders and custom loading schemes. This includes the fancy loaders found in commercial games and many demos. You won't notice the difference between the real tape and its TZX version. You can find the tecnical specification of the TZX format in our tech page or at the official site WOS.
 

13. What are OUT files?
OUT files are the final solution to conversion problems. They are log files produced by emulators such as Z80. Click here for a description and instructions on how to use them.
 

14. My VOC loads and runs into the emulator, but MakeTZX doesn't convert it in any way (filter, etc).
This isn't a problem anymore. MakeTZX is able to convert anything which loads in the emulator using the OUT files technique, which is described in this manual.
 


14. Revision history.

The latest version has been released on August 1st 2003.

New in version 2.33:

New in version 2.31:

New in version 2.30:

New in version 2.21:

New in version 2.20:

New in version 2.11:

New in version 2.10: New in version 2.01: New in version 2.00:

New in version 1.02:

New in version 1.01:


15. Known limits and bugs.

Please don't hesitate to contact us for any problem not covered in this manual. If you can, send also the file(s) that MakeTZX fails to convert (even in CSW format, which compresses well).

16. Future enhancements.

The next-generation MakeTZX engine version 3 is now embedded into RealX, our brand new emulator which is the successor of RealSpectrum. The new MakeTZX works along the emulated Spectrum and it is capable of converting every tape which loads into the emulator. It is also associated with a fully featured tape editor.

Beside that, these are some enhancements we wish to include soon in MakeTZX (in no particular order).

17. Credits and contact info.

MakeTZX is a program © 1998-2003 RAMSOFT. It comes with ABSOLUTELY NO WARRANTY of any kind; the authors are not liable for any damage or information loss caused directly or indirectly by the use of this program.
MakeTZX can be freely distributed at the conditions that no money is required and the original archive and its contents are not modified. If you want to include MakeTZX into any software collection distributed on CDROM or any other electronic media, you are allowed to do it at the above conditions, but please inform us.
The latest versions of MakeTZX and related stuff (such as this document) are always available at our official web site World Wide Ramsoft

For comments/questions, write to:

Please check the contacts page of our site for the latest email addresses. 
MakeTZX and this manual are © 1998-2003 RAMSOFT - ZX Spectrum demogroup