Für den Anwender sind die berüchtigten Kopierschutz-Module eher lästig als nützlich und hilfreiche Key-Expander häufig unangemessen teuer. Unser Projekt schafft hier Abhilfe und sorgt für vier Key-hungrige Slots. Im ersten Teil geht es um die Funktionsweise der Schaltung.
Wohl kaum ein Thema bringt Computer-Anwender so in Rage wie die leidige »Kopierschutz« Diskussion. Seit es Computer für den Heimbereich gibt, versuchen Softwarefirmen immer wieder, durch mehr oder minder ausgeklügelte Verfahren, die illegale Verbreitung ihrer Programme zu unterbinden.
Einen überdurchschnittlich guten Schutz gegen Cracker und Raubkopierer bieten die sogenannten Keys, die Sie beim Atari ST meistens in den ROM-Port, seltener in den Drucker- oder Joystick-Port stecken müssen. Diese Keys oder »Dongles« enthalten Logikbausteine (ALU's, PAL's oder auch GAL's), die das Programm in regelmäßigen Abständen anspricht. Durch das Anlegen zweier Datenworte berechnet so ein Logikbaustein zum Beispiel wichtige Sprungadressen oder andere für den Programmablauf wesentliche Daten. Die meisten Keys beherrschen mehrere komplexe Rechenoperationen, so daß es für neugierige Außenstehende sehr schwierig ist, den genauen Programmablauf zu verfolgen. Gemeinerweise verfügen einige Keys zudem über ein »Time Out«. Wird die notwendige Befehlsfolge nicht in einer gewissen Zeit (nur wenige Millisekunden) durchgeführt, liefert der Chip kein oder ein falsches Ergebnis zurück. So ist es unmöglich, die Funktionsweise des Keys durch »Traten« (schrittweises Abarbeiten) des reassemblierten Programmcodes nachzuvollziehen. Das »Cracken« eines Key-geschützten Programms gelingt so nur mit viel Geduld und Arbeitsaufwand. Die Flut nur mangelhaft »entschlüsseltem Software läßt ahnen, wie kompliziert sich der Eingriff in solche Programme gestaltet. Zwar zieht der ehrliche Anwender selten direkten Nutzen aus solchen Kopiersperren, der unbestreitbare Vorteil der Keys liegt aber darin, daß die Installation Key-geschützter Software auf einer Festplatte keinerlei Probleme bereitet. Im Gegensatz dazu steht der Disketten-Kopierschutz, bei dem die Abfrage des Schutzes meistens länger dauert als der Ladevorgang selbst. Der Nachteil der Keys: Besitzt man mehrere derart gesicherte Programme, ist man gezwungen, ständig die Stecker zu wechseln. Der Betrieb solcher Programme im Multitasking-Verbund - bei MIDI-Anwendungen inzwischen sehr weit verbreitet - wird unmöglich. Abhilfe schafft nur ein entsprechender ROM-Port-Expander. Stecker- und Nerven-schonend wirkt da unser Hardware-Projekt, der Key-Expander, der Ihnen nach geglücktem Schaltungsaufbau vier über einen Taster anwählbare »Slots« zur Verfügung stellt. Die Platinenlayouts und eine genaue Schaltungsbeschreibung finden Sie in der nächsten Ausgabe, heute bleiben wir noch ein wenig bei den theoretischen Grundlagen. Wie der Name bereits andeutet, war der Sinn des ROM-Ports ursprünglich nicht der eines Kopierschutzes. Im Adressbereich $FA0000 $FB0000 kann man hier nämlich 128 KByte Software in ROM- oder EPROM-Chips unterbringen und von Programmen aus ansprechen. Zur korrekten Abwicklung des Datenaustauschs zwischen dem Atari und einer solchen ROM-Cartridge stehen am Port folgende Signale zur Verfügung: zunächst die 16 Datenleitungen DO-D15 sowie die unteren 15 Adreßleitungen A1-A15, auf deren Pufferung die Entwickler in bester Atari-Manier verzichtet haben - also Vorsicht. Zum Umschalten zwischen den beiden 64 KByte Blöcken ($FA0000 - $FAFFFF sowie $FB0000 - $FBFFFF) dienen die ROM3-Select- (verantwortlich für den $FBxxxx-Bereich), bzw. ROM4-Select-Leitungen (°FAxxxx), die »active-low« schalten, sobald ein Zugriff auf eine Adresse ihres Bereichs erfolgt. Die Decodierung, und damit die Entscheidung ob Einzelbyte- oder Wort-Zugriff erfolgen soll, übernimmt schließlich das LDS/UDS (Lower/Upper Data Strobe)-Signal. Ferner liegen am Port noch 5 Volt Versorgungsspannung sowie der obligate Masseanschluß an. Wichtig ist, daß in diesem Bereich nur ein Lesezugriff erfolgen darf (Read Only Memory), daher auch das Fehlen einer entsprechenden Read/Write-Leitung. Versucht man trotzdem, Daten in den ROM-Port zu schreiben, gibt der GLUE-Chip einen bombigen Bus-Error aus.
Diese Einschränkung des ROM-Ports wirft eine interessante Frage auf: Wie übermittelt man trotz des strengen Schreibverbots Daten an dort installierte Hardware? Wie bei allen genialen Dingen ist auch die Lösung dieses Problems verblüffend einfach. Wer sagt denn, daß alle am Port vorliegenden Signale so zu nutzen sind, wie vom Entwickler vorgesehen? So läßt sich doch ganz einfach durch Setzen des ROM3-Select- oder ROM4-Select-Signals der ROM-Port-Hardware mitteilen, daß alles, was ab jetzt auf den Adreß- und Datenleitungen (die ja direkt am Port anliegen) vor sich geht, für sie bestimmt ist. Nun ist es ein Leichtes, durch Aktivieren der unteren 15 Adreßleitungen Befehle und Daten an die ROM-Port-Erweiterungzusenden. Wie diese Erweiterung die Adreßleitungen intern verarbeitet, ist ja völlig freigestellt. Sie finden, das klingt alles schrecklich kompliziert und können sich die programmtechnische Realisation nicht vorstellen? Dann sollen nur zwei Assemblerbefehle und wenige Zeilen »C« Licht ins Dunkel der Theorie bringen.
move .1$FA1234, a0 move .1 (a0) , d0
Diese beiden Befehle lösen alle eben genannten Arbeitsschritte mit einem Schlag: Durch Auslesen einer Adresse im Bereich $FAxxxx wird ROM4-Select active low und initialisiert so unsere imaginäre ROM-Port-Hardware. Derart auf Lauschposten gebracht, interpretiert unsere Hardware die Leitungen A1-A5 als Befehl und die oberen Adreßsignale als Datenwort. Die nach »°FA« folgende »1234« ist also eine Kombination aus Befehl und Datum. Das wars - ganz einfach, nicht? In C sieht die gleiche Prozedur folgendermaßen aus.
static void rom-port_out (void) \ long *rom-port; rom-port {$xFA1234L; ... }
Selbstverständlich wäre es auch noch möglich, zusätzlich die LDS/ UDS Signale zur Hardware-Steuerung zu verwenden. Der Fantasie sind hier keine Grenzen gesetzt. Wer nun freudig meint, aufgrund der eben gewonnenen Einblicke in die Geheimnisse der ROM-Port Programmierung bestens für die »Aufschlüsselung« seiner Software gerüstet zu sein, sei gewarnt: die Funktionsweise der meisten Keys ist erheblich komplexer als hier geschildert, und die Zeit, die Sie ratlos vor Ihrem Maschinensprache-Monitor sitzen, läßt sich - mal ganz abgesehen von bohrenden Gewissensbissen - sinnvoller gestalten. In der nächsten Ausgabe kommt die Schaltung für den ROM-Port-Expander.
(wk)
In der Hardware-Bastelei » Wo freie Bits sinnvoll walten (Teil 1)« (TOS 8/90) hat leider der Fehlerteufel mehrfach zugeschlagen: IC 1 und 2 sind vom Typ 74LS273 (nicht 74LS237), IC 3 und 4 sind ULN 2803A-Typen (nicht 74LS244) und IC 5 und 6 entsprechend vom Typ 74LS244 (nicht ULN 2803A). Der Widerstand an Pin 17 von IC 5 (4,7 KOhm) fehlt in der Bauteileliste. Im Verdrahtungsplan ist die Verbindung von IC 2/Pin 1 nach IC 1 /Pin 1 nicht eingezeichnet. Wir bitten die Fehler zu entschuldigen.