<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://preservation64.de/index.php?action=history&amp;feed=atom&amp;title=Track_Skew_Protection</id>
	<title>Track Skew Protection - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://preservation64.de/index.php?action=history&amp;feed=atom&amp;title=Track_Skew_Protection"/>
	<link rel="alternate" type="text/html" href="https://preservation64.de/index.php?title=Track_Skew_Protection&amp;action=history"/>
	<updated>2026-10-12T18:56:40Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.34.0-alpha</generator>
	<entry>
		<id>https://preservation64.de/index.php?title=Track_Skew_Protection&amp;diff=76604&amp;oldid=prev</id>
		<title>Enigma at 09:28, 10 October 2026</title>
		<link rel="alternate" type="text/html" href="https://preservation64.de/index.php?title=Track_Skew_Protection&amp;diff=76604&amp;oldid=prev"/>
		<updated>2026-10-10T09:28:54Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 09:28, 10 October 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l7&quot; &gt;Line 7:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 7:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;arbitrary point of the rotation, so the copied data is correct but the&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;arbitrary point of the rotation, so the copied data is correct but the&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;tracks' positions relative to each other are random.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;tracks' positions relative to each other are random.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;The same drive routine, encrypted the same way (XOR &amp;lt;code&amp;gt;$37&amp;lt;/code&amp;gt;), was&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;found on releases by Ariolasoft, Rushware and others (see&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[#Releases|Releases]]). The description below follows&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Power-Pack]] (Rushware, 1987, sources 2, 3 and 6).&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Disk layout ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Disk layout ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l15&quot; &gt;Line 15:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 20:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* The loader contains a BASIC menu (&amp;quot;POWER-PACK DISK COMPILATION … WHICH GAME DO YOU REQUIRE ?&amp;quot;). Before the menu it loads &amp;lt;code&amp;gt;&amp;quot;POWER&amp;quot;,8,1&amp;lt;/code&amp;gt; and starts it with &amp;lt;code&amp;gt;SYS 7280&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;$1C70&amp;lt;/code&amp;gt;).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* The loader contains a BASIC menu (&amp;quot;POWER-PACK DISK COMPILATION … WHICH GAME DO YOU REQUIRE ?&amp;quot;). Before the menu it loads &amp;lt;code&amp;gt;&amp;quot;POWER&amp;quot;,8,1&amp;lt;/code&amp;gt; and starts it with &amp;lt;code&amp;gt;SYS 7280&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;$1C70&amp;lt;/code&amp;gt;).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;code&amp;gt;POWER&amp;lt;/code&amp;gt; (607 bytes) is identical on all four disk sides and contains the check.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;code&amp;gt;POWER&amp;lt;/code&amp;gt; (607 bytes) is identical on all four disk sides and contains the check.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* Other releases carry the routine in their own loader files, for example &amp;lt;code&amp;gt;FUGGER/XX&amp;lt;/code&amp;gt; on [[Die Fugger]].&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== The check ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== The check ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l102&quot; &gt;Line 102:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 108:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* On the original disk, this sector number rises by exactly one per track. The expected table for tracks 2–15 is &amp;lt;code&amp;gt;04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* On the original disk, this sector number rises by exactly one per track. The expected table for tracks 2–15 is &amp;lt;code&amp;gt;04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* After measuring, the drive code overwrites itself (&amp;lt;code&amp;gt;$0300&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;$036F&amp;lt;/code&amp;gt;) with a &amp;lt;code&amp;gt;ROR&amp;lt;/code&amp;gt; loop.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* After measuring, the drive code overwrites itself (&amp;lt;code&amp;gt;$0300&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;$036F&amp;lt;/code&amp;gt;) with a &amp;lt;code&amp;gt;ROR&amp;lt;/code&amp;gt; loop.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Notes:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* [[The Newsroom]]: the drive routine is present on disk 1 (track 33, sector 16, unencrypted), but no program on the disk uses it and no check was found. The Newsroom is therefore not listed as using this protection.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Copying and imaging ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Copying and imaging ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Enigma</name></author>
		
	</entry>
	<entry>
		<id>https://preservation64.de/index.php?title=Track_Skew_Protection&amp;diff=76563&amp;oldid=prev</id>
		<title>Enigma: Created page with &quot;= Track Skew Protection =  The protection does not use any extra track, bad sector or signature. It checks the '''track skew''': the angular position of each track relative to...&quot;</title>
		<link rel="alternate" type="text/html" href="https://preservation64.de/index.php?title=Track_Skew_Protection&amp;diff=76563&amp;oldid=prev"/>
		<updated>2026-10-10T05:42:04Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;= Track Skew Protection =  The protection does not use any extra track, bad sector or signature. It checks the &amp;#039;&amp;#039;&amp;#039;track skew&amp;#039;&amp;#039;&amp;#039;: the angular position of each track relative to...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Track Skew Protection =&lt;br /&gt;
&lt;br /&gt;
The protection does not use any extra track, bad sector or signature. It&lt;br /&gt;
checks the '''track skew''': the angular position of each track relative to&lt;br /&gt;
its neighbour. A duplicator writes all tracks in a fixed relation to each&lt;br /&gt;
other. A normal disk copier writes each track independently, starting at an&lt;br /&gt;
arbitrary point of the rotation, so the copied data is correct but the&lt;br /&gt;
tracks' positions relative to each other are random.&lt;br /&gt;
&lt;br /&gt;
== Disk layout ==&lt;br /&gt;
&lt;br /&gt;
* Tracks 1–35 use the ordinary CBM DOS layout. There is nothing beyond track 35.&lt;br /&gt;
* Disk ID and DOS type in the BAM are &amp;lt;code&amp;gt;$14 $14&amp;lt;/code&amp;gt; (control characters).&lt;br /&gt;
* The first directory entry is named &amp;lt;code&amp;gt;LOADER&amp;quot;,8,1&amp;lt;/code&amp;gt; and shown with 0 blocks. The file is actually about 1,800 bytes long and loads to &amp;lt;code&amp;gt;$0300&amp;lt;/code&amp;gt;. Its first bytes overwrite the BASIC vectors &amp;lt;code&amp;gt;IERROR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;IMAIN&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ICRNCH&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;$0340&amp;lt;/code&amp;gt;, so it starts itself after loading.&lt;br /&gt;
* The loader contains a BASIC menu (&amp;quot;POWER-PACK DISK COMPILATION … WHICH GAME DO YOU REQUIRE ?&amp;quot;). Before the menu it loads &amp;lt;code&amp;gt;&amp;quot;POWER&amp;quot;,8,1&amp;lt;/code&amp;gt; and starts it with &amp;lt;code&amp;gt;SYS 7280&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;$1C70&amp;lt;/code&amp;gt;).&lt;br /&gt;
* &amp;lt;code&amp;gt;POWER&amp;lt;/code&amp;gt; (607 bytes) is identical on all four disk sides and contains the check.&lt;br /&gt;
&lt;br /&gt;
== The check ==&lt;br /&gt;
&lt;br /&gt;
=== C64 side (&amp;lt;code&amp;gt;POWER&amp;lt;/code&amp;gt;) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;POWER&amp;lt;/code&amp;gt; decrypts itself in three stages: &amp;lt;code&amp;gt;$1C90&amp;lt;/code&amp;gt; with&lt;br /&gt;
EOR &amp;lt;code&amp;gt;$12&amp;lt;/code&amp;gt;, then &amp;lt;code&amp;gt;$1D2B&amp;lt;/code&amp;gt; with EOR &amp;lt;code&amp;gt;$20&amp;lt;/code&amp;gt;, then&lt;br /&gt;
&amp;lt;code&amp;gt;$1DDD&amp;lt;/code&amp;gt; with EOR &amp;lt;code&amp;gt;$37&amp;lt;/code&amp;gt;. After that it:&lt;br /&gt;
&lt;br /&gt;
# uploads 256 bytes of drive code with &amp;lt;code&amp;gt;M-W&amp;lt;/code&amp;gt; to drive &amp;lt;code&amp;gt;$0300&amp;lt;/code&amp;gt; (in 32-byte chunks);&lt;br /&gt;
# starts it with &amp;lt;code&amp;gt;M-E $0300&amp;lt;/code&amp;gt;;&lt;br /&gt;
# reads the result table back with &amp;lt;code&amp;gt;M-R&amp;lt;/code&amp;gt; from drive &amp;lt;code&amp;gt;$0381&amp;lt;/code&amp;gt; into C64 &amp;lt;code&amp;gt;$5000&amp;lt;/code&amp;gt;;&lt;br /&gt;
# compares 14 bytes of the table with a fixed table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$1CC2  A9 50       LDA #$50&lt;br /&gt;
$1CC4  8D F2 1C    STA $1CF2         ; patch the compare below: $E000 -&amp;gt; $5000&lt;br /&gt;
$1CC7  4C EE 1C    JMP $1CEE&lt;br /&gt;
...&lt;br /&gt;
$1CEE  A2 00       LDX #$00&lt;br /&gt;
$1CF0  BD 00 50    LDA $5000,X       ; table read from the drive&lt;br /&gt;
$1CF3  DD D0 1C    CMP $1CD0,X       ; expected: 04 05 06 ... 11&lt;br /&gt;
$1CF6  D0 08       BNE $1D00&lt;br /&gt;
$1CF8  E8          INX&lt;br /&gt;
$1CF9  E0 0E       CPX #$0E          ; 14 entries (tracks 2-15)&lt;br /&gt;
$1CFB  90 F3       BCC $1CF0&lt;br /&gt;
$1CFD  A9 00       LDA #$00          ; all equal: A = $00&lt;br /&gt;
$1CFF  2C A9 37    BIT $37A9         ; (hides &amp;quot;LDA #$37&amp;quot; at $1D00)&lt;br /&gt;
$1D02  85 02       STA $02&lt;br /&gt;
$1D04  C9 37       CMP #$37&lt;br /&gt;
$1D06  D0 04       BNE $1D0C&lt;br /&gt;
$1D08  A9 00       LDA #$00          ; mismatch: $01 = $00 -&amp;gt; all ROMs and&lt;br /&gt;
$1D0A  85 01       STA $01           ;   I/O switched off, the machine crashes&lt;br /&gt;
$1D0C  A9 00       LDA #$00&lt;br /&gt;
$1D0E  8D A6 02    STA $02A6&lt;br /&gt;
$1D11  60          RTS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On a mismatch the code writes &amp;lt;code&amp;gt;$00&amp;lt;/code&amp;gt; to the processor port&lt;br /&gt;
&amp;lt;code&amp;gt;$01&amp;lt;/code&amp;gt;. That switches off BASIC, KERNAL and I/O, and the program&lt;br /&gt;
crashes on return.&lt;br /&gt;
&lt;br /&gt;
=== Drive side (&amp;lt;code&amp;gt;$0300&amp;lt;/code&amp;gt;) ===&lt;br /&gt;
&lt;br /&gt;
The drive code measures, for each track from 16 down to 2, which sector&lt;br /&gt;
header the drive meets first after arriving on that track:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$0308  A9 10       LDA #$10&lt;br /&gt;
$030A  85 06       STA $06           ; job 0 track: 16 (counts down)&lt;br /&gt;
$030C  A9 0F       LDA #$0F&lt;br /&gt;
$030E  85 07       STA $07           ; index: 15 (counts down)&lt;br /&gt;
$0310  78          SEI&lt;br /&gt;
$0311  A9 20       LDA #$20&lt;br /&gt;
$0313  8D 07 1C    STA $1C07         ; fast stepper timing&lt;br /&gt;
$0316  8D 05 1C    STA $1C05&lt;br /&gt;
$0319  58          CLI&lt;br /&gt;
$031A  A9 B0       LDA #$B0&lt;br /&gt;
$031C  85 00       STA $00           ; SEEK job: head to track $06,&lt;br /&gt;
$031E  A5 00       LDA $00           ;   synchronized to a header there&lt;br /&gt;
$0320  30 FC       BMI $031E&lt;br /&gt;
...&lt;br /&gt;
$032D  A9 F0       LDA #$F0          ; further job $F0&lt;br /&gt;
$032F  85 00       STA $00&lt;br /&gt;
...&lt;br /&gt;
$033C  A9 FE       LDA #$FE&lt;br /&gt;
$033E  20 76 D6    JSR $D676         ; ROM: step the head one track&lt;br /&gt;
$0341  A9 00       LDA #$00          ;   (two half-steps) behind DOS's back&lt;br /&gt;
$0343  85 22       STA $22           ; DOS: &amp;quot;current track unknown&amp;quot;&lt;br /&gt;
$0345  A9 B0       LDA #$B0&lt;br /&gt;
$0347  85 00       STA $00           ; SEEK again: DOS must read the first&lt;br /&gt;
$0349  A5 00       LDA $00           ;   header that passes under the head&lt;br /&gt;
$034B  30 FC       BMI $0349&lt;br /&gt;
...&lt;br /&gt;
$0354  A5 19       LDA $19           ; sector number of that header&lt;br /&gt;
$0356  A6 07       LDX $07&lt;br /&gt;
$0358  9D 80 03    STA $0380,X       ; -&amp;gt; result table $0381-$038F&lt;br /&gt;
$035B  C6 06       DEC $06&lt;br /&gt;
$035D  C6 07       DEC $07&lt;br /&gt;
$035F  D0 B0       BNE $0311         ; next track&lt;br /&gt;
...&lt;br /&gt;
$0370  ...                           ; finally: wipe $0300-$036F (ROR)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The time from reading a header, through stepping the head, to arriving on the next track is always the same. So the first sector found on arrival depends only on the angular offset between the two neighbouring tracks.&lt;br /&gt;
* On the original disk, this sector number rises by exactly one per track. The expected table for tracks 2–15 is &amp;lt;code&amp;gt;04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11&amp;lt;/code&amp;gt;.&lt;br /&gt;
* After measuring, the drive code overwrites itself (&amp;lt;code&amp;gt;$0300&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;$036F&amp;lt;/code&amp;gt;) with a &amp;lt;code&amp;gt;ROR&amp;lt;/code&amp;gt; loop.&lt;br /&gt;
&lt;br /&gt;
== Copying and imaging ==&lt;br /&gt;
&lt;br /&gt;
* A copy made track by track with an ordinary copier has the correct data but random track positions. The table doesn't match, and the loader crashes.&lt;br /&gt;
* A G64 passes only if the conversion preserves each track's angular position relative to the index hole. A D64 image cannot pass.&lt;br /&gt;
* '''Verified:''' rotating only track 9 of a working image by a third of a revolution changes exactly the two table entries that involve track 9 (&amp;lt;code&amp;gt;… 0A 04 13 0D …&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;… 0A 0B 0C 0D …&amp;lt;/code&amp;gt;), and the check fails. The data on the track is unchanged.&lt;br /&gt;
&lt;br /&gt;
==== Pages that refer to this protection ====&lt;br /&gt;
&lt;br /&gt;
{{Special:Whatlinkshere/Track Skew Protection}}&lt;/div&gt;</summary>
		<author><name>Enigma</name></author>
		
	</entry>
</feed>