After Pawel contributed his tape backups of Vengaence, I decided to look at my notes about the CRL tape loader and attempt the implementation of a scanner for TAPClean.
Needless to say that processing the bulk of CRL turbo files is quite straighforward. The real challenge comes from two “edge” issues:
- as part of the initial synchronization mechanism some wide pulses are used, which often fall around the TAP value 0xFD but sometimes exceed 0xFF thus requiring a TAP v1 “long pulse” to encode: this is bad as TAPClean pretty much assumes long pulses to be silences;
- the last pulse of a turbo data block is almost always missing: this is bad because a data reconstruction is required, which involves some guess work.
The second point is not always terribly concerning as turbo blocks are loaded in page multiples and sometimes don’t use the whole last page, which therefore contains “padding data”: that’s very likely memory contents at the time the block was mastered to tape, which were not zeroed upfront. There might also be a pragmatic way to reconstruct the last bit of a data block, e.g. a missing pulse before silence always corresponds to bit 0 and the presence of an overstretched pulse corresponds to bit 1, but I shall go through a whole lot more tapes before I can find out whether that’s the case.
Another point is that details of CRL turbo files are not set within a corresponding header at the beginning of each turbo file, which is missing completely: they are part of a “load orchestrator” stored within the first turbo file. This is not so much an issue on its own, but it means that when multiple CRL titles are on the same tape side, e.g. Frankenstein, a strategy similar to the one I recently implemented for Visiload is required: the discovery of each title’s file chain has to occur.
After work today I wrote an initial implementation of the CRL scanner in TAPClean 0.35. It is by no means complete and it only supports one CRL title on a given tape side for the time being, but it is a good first step to get familiar with the peculiarities of the loader and the results of the mastering process, which IMHO are rather poor due to the format design and implementation.
Thanks also go to Rob (Peepo) for dumping his CRL titles, which I had used to take my notes about the format. The two titles I used for my analysis are Dracula and Frankenstein by CRL.