The tape was published by a local recording studio, in my home town of Tulcea, Romania, during my teenage years, in the early 1990's. I was fascinated by it, since it contains about 20 games, modified to load with turbo speed. Games are also compressed using RLE method (run-length encoding). The message shown when each game loads is "Compressed form in RAM by Grig". Kudos to Grig, he did a nice job producing this compilation at the time.
I was able to recover 4 games from this tape, with the purpose of understanding how they were modified and to create a PC tool that produces the same kind of compressed, turbo-loading games, for ZX Spectrums and clones, that can only load games from tape, providing a loading time that's the shortest possible.
A tape player. It is known that the worst quality the player has, the better the tape recovering results are, since more modern players have more sound processing, that interferes with the encoded data. I used a tape player manufactured by ICE Felix, designed for loading data with HC computers.
A ZX Spectrum or clone. I used an ICE Felix HC-2000.
A PC with Windows/Linux and audio in and out jacks. I used a laptop with 3.5 audio jack that also has the mic input connection on the audio jack.
A cable connecting the tape player to the ZX Spectrum/HC. I used a DIN5 to DIN5 cable, since HC has DIN5 tape input/output. DIN5 is the round male connector with 5 pins.
A cable connecting the ZX Spectrum/HC in/out to the laptop audio in/out. I used a cable I made, with DIN5 connector for HC and 2 male jacks of 3.5 mm. For the laptop I also used a splitter, from the 4 pole 3.5 male jack to 2 female 3.5 jacks, so that I can use the laptop's mic pin for recording.
A cable for current drain between Spectrum/HC computer and the laptop. I used a serial cable I had, connecting the HC to the laptop. You can also use a cable between the audio jack from the laptop and the HC grounding from one of the connectors. Without this kind of cable, you can fry the laptop and/or the HC! Without it, you can notice that the HC computer will reset when connecting it to the laptop audio jack. Thanks to Bogdan M. for clarifying this.
Used between the tape player and the HC computer
Used between HC computer and PC or between the tape player and PC; The black splitter is usefull for laptops with one audio jack with stereo output and mono microphone input
It has DIN5 connector audio input/output
Audacity - used for recording the audio signal from the tape recorder or from the Spectrum/HC computer on the PC, producing a WAV file. https://www.audacityteam.org/download/
MakeTZX by Ramsoft - used to convert the WAV file into TZX. Audio2tape can also be used. https://tzxvault.org/tools.htm
Audio2tape from the fuse-utils package - used to convert the WAV file into TZX. Sometimes this one has better results than MakeTZX, sometimes it's the other way around. https://sourceforge.net/projects/fuse-emulator/files/fuse-utils/1.4.3/fuse-utils-1.4.3-win32.zip/download
Turbo Copy - very useful program running on Spectrum/HC, since it allows loading at variable speeds, supporting speeds from 1400 to 7500 baud, helping with loading problematic tapes or with the tape speed being too fast/slow and most important, supports turbo loaders. I think I found this one included in the Warajevo emulator tape files. When using it on HC, it must be loaded from tape, not from disk, as it doesn't support the HC IF1 features and produces bad copies (found this out the hard way). https://drive.google.com/file/d/1i33nGNjPbziG1efd7dCMTZqi8U2dqL6Q/view?usp=drive_link
Tapir - very nice program for editing and playing TZX files. https://www.alessandrogrussu.it/tapir/
A ZX Spectrum emulator like Spectaculator https://www.spectaculator.com/downloads/ or Fuse https://sourceforge.net/projects/fuse-emulator/
Tapir with turbo blocks updated
Turbo Copy utility
Audio signal recorded in Audacity
This is the simple way of converting data from a tape, but in only works with very good tapes. For most tapes I have, that were recorded at home 25-30 years ago, it doesn't work.
Connect the tape player output to the PC's microphone input.
Record the audio signal from the tape player into Audacity.
Use command "audio2tape -r recording.wav recording.tzx". The flag "-r" will correct the timings to be the ideal timings for the singnal and will create standard TZX blocks instead of custom ones. Program MakeTZX can also be used: "maketzx recording.wav recording.tzx -ln". The flag "-ln" has the same effect as flag "-r" for audio2tape.
Test the resulting recording.tzx in an emulator or play it to the Spectrum/HC to be loaded.
For the turbo loading games I had on my tape, the method above didn't work. Better results are found when the HC/Spectrum computer does the digitization of the signal. The procedure will load turbo blocks at 3050 baud, but save them to PC at regular speed of 1500 baud, so that the PC tools can decode the signal. So the sequence is tape->Turbo Copy load at 1500/3050 baud -> Turbo Copy save to PC at 1500 baud -> record WAV with Audacity -> decode WAV with MakeTZX or audio2tape.
Connect the PC audio jack to the HC/Spectrum computer and transfer program "Turbo Copy".
Connect the tape player to the HC/Spectrum computer and load the program blocks from tape. I used speed 1500 for the normal loading blocks and 3050 for the turbo loading blocks. Several retries might be needed for the turbo blocks. I stopped trying after 3-4 failed attempts for each game.
Connect the HC/Spectrum output to the PC microphone input and record the program saved by Turbo Copy using Audacity on PC. Use speed 1500 for all blocks, since faster speed won't be recognized later by the PC tools.
Convert the WAV file to TZX using audio2tape (works better for me) or MakeTZX.
Open the TZX in Tapir and update the turbo blocks to use the turbo timings. Only the lenght of the 0 and 1 bits are to be changed. The other parameters are same as standard for the turbo blocks, for this tape I have. Bit 0 pulse is changed from 855 to 592. Bit 1 pulse is changed from 1710 to 1180. Bit 1 length is usually twice of the bit 0 length.
The BASIC loader has a machine code block in line 10, at address 23760.
The first call in the BASIC loader is to the machine code routine at 23760, which replaces the font table with a custom one, generated at runtime based on the default font table. Then it prints the text "Compressed form in RAM by Grig" using embedded color codes, using the custom font.
The BASIC loader loads a standard speed block of 247 bytes, at address range $FF09 - $FFFF, which is the custom turbo tape loader plus code that calls that tape loader, which loads the compressed SCREEN$ and executes it for unpacking, and also loads the compressed main block.
The BASIC loader then calls routine at 23813/$5D05 which does decompression using RLE method for the main game block, starting at the end of the compressed block $E1D4, going in reverse. The RLE unpacker is interesting, as it uses the control byte with value 0 to signal a literal sequence, with length of sequence in the next 2 following bytes, and if it's > 0, it's used as the repeated length, with the repeated value as the next following byte. So it's either "<0><2 bytes literal sequence length>" or "<N><1 byte value, repeated N times>".
The tape loader routine looks like this. Only 2 parameters matter: P_COMPARE=$DC=$80+92 instead of $CB in ROM and P_DELAY=$0D instead of $0F in ROM. Resulting designed baud rate is around 2000.
The SCREEN$ unpacking routine at $6EBE. Seems to do column based screen display. The logic could be simplified.
I included in HCDisk a new feature that generates TZX files with turbo blocks. Inspired from Z802TZX tool from https://worldofspectrum.net/utilities/, I added conversion for some of the compressed games from here https://github.com/0sAND1s/SpectrumGameCompressor to load from turbo TZX files, making the loading time less than 1 minute for most games!