On-disk copy protection on earlier Microprose releases.



Some people mistakenly think that earlier Microprose releases, such as F-15 Strike Eagle, have no on-disk copy protection; and that the only protection is codes from the manual. But this is not correct as weíll explain in this article.


Why they think so? They do so because in many cases (described below), a copy made with a standard sector copier works flawlessly.



However, the normal procedure that the typical user at that time would use, doesnít work. If you copy the disk (or write back an ATR image) with a sector copier on an 810 or 1050; and then you attempt to run the disk again in a stock drive, it will fail.



The Protection


The reason of this very strange behavior is the type of the copy protection used, and how it is tested. The protection is usually known as skew-align. It consists on measuring the radial distance of sectors across different tracks. This was a rather popular protection on some 8-bit computers like the Atari, because they used drives without an index-hole sensor.


These Microprose disks have the tracks almost perfectly (skew) aligned one with the other. This is easily done on drives that use the index-hole for formatting. Disks formatted on older stock Atari drives however, and because they cannot align with the index hole, always have a considerable skew misalignment across tracks.


There are at two basic ways for the protection to detect the skew alignment at run-time. The method employed here is to compare the time that takes to read corresponding sectors on different tracks. If the disk is skew aligned, the time will be more or less the same.


So letís say that the software reads sector 1, then sector 19, then sector 37, then sector 55 (the first sector of tracks 0 to 3), etc. On the original disk, it will take about the same time between all these reading. If they differ above some threshold, it is assumed to be a copy and the program fails.



The reasons copies work


Now letís see how a simple copy of the disk still run under all the cases mentioned above: