Author:Lord Crass (guest: search)
Date: Sat, Apr 16th, 2011 @ 02:53 ( . )

Infiltrator has an interesting aspect to its protection.

The protection moves to track 16 and counts the number of bytes in the data block until the next detected sync, as well as checks the GCR byte before and after the data block sync. It does this for 16 sectors. These values are compared to make sure each sector is the same. The values are then used as part of a decryption key to decrypt the next sector loaded.

The interesting part is the byte counting routine has a specific timing that causes it to miss the header sync mark and count bytes into the header block, yet it detects the data block sync mark and stops counting. The reason is that the leading byte into the sync mark is different ($2B for header, $AF for data block) so sync will trigger earlier for the data block and the protection check should catch it and stop counting.

Vice sometimes catches this sync, but usually doesn't. So the table that gets built is wrong because the lengths of the data block wind up being 2 or 3 sectors long, and the loader crashes. Hoxs and CCS64 always load this game fine. Interestingly, Vice 2.2 will usually load it properly only if you put it in warp mode.

Anyone know if the original was a flakey loader on real 1541s?


REPLY: [With No Quote] --- [With Quoted Text]

--* Infiltrator
4/17/2011 @ 21:43--Lord Crass

--- 0 Users Online --- 0 Recent Unique Posters

Q27=1653258759 - Threads: / 1653258759