Sie haben ein hyper-super-duper-megamäßiges, überschlaues Primzahlenprogramm (“42 ist eine Primzahl”) im unheimlich angesagten ST-BASIC geschrieben und wollen es jetzt geldbeutelfüllenderweise unter die Leute bringen? Sie suchen dazu noch einen möglichst fiesen Kopierschutz? Dann habe ich was für Sie: Diskmaster ST, eine bunte Mischung aus Trackmonitor und softer Formatiermaschine, stößt in einen bisher dünn besiedelten Markt vor: Formatierprogramme gibt es zwar mittlerweile mehr als genug, auch Diskmonitore sind keine Mangelware; allerdings beherrschen sie meistens nur ziemlich stinknormale Sektor-Operationen. Wer den Lesekopf seiner Floppy bei der Arbeit bespitzeln will, hat da schon weniger Auswahl.
Diskmaster ST tritt einem hilfreich zur Seite, wenn man/frau/hacker Diskettenformate und Kopierschutztricks entwerfen und auf die magnetbeschichteten Plastikschlaffis bannen will. Nebenher fördert das Programm den Durchblick durch grundlegende Funktionen eines Trackmonitors.
Diskmaster ST ist ziemlich neu und andererseits auch wieder nicht. Stefan Wächter, der Autor, hat sich schon einmal - auf den guten alten 8-Bit-ATARIs -an einem ähnlichen Programm versucht. Die Erfahrung daraus (immerhin stecken im ST und in den Diskettenlaufwerken für die 8-Bit-ATARI-Serie fast identische Floppycontroller) konnte er jetzt gut verwerten, um den Diskmaster auf den ST zu portieren. Daß der gute Wächter von den 8-Bittern kommt, merkt man seinem Programm allerorten an - durchaus nicht immer nachteilig.
Den Intro-Bildschirm sehen Sie in Bild 1 (erinnert Sie das nicht auch an die 8-Bitter?). Was Sie nicht sehen können, ist der blitzschnelle Bildschirmaufbau: Diskmaster ST verwendet selbstprogrammierte Ausgaberoutinen. Beim Scrolling im integrierten Editor ist es wahrscheinlich sogar noch einen Hauch schneller als das legendäre TEMPUS. Allerdings zahlt man beim Diskmaster ST dafür auch einen Preis - die GEM-Einbindung ist dabei flöten gegangen. Stattdessen hat der Autor das Programm in selbstgestrickte Menügewänder ein gekleidet, die sich nach einer Weile aber auch fast so heimelig anfühlen wie die Dropdowns (huch, es angelsächselt!) im DESKTOP. Diskmaster läuft übrigens nur im Monochrom-Modus, dafür aber auf allen Rechnern mit mindestens 512 KB Speicher und allen TOS-Versionen. Daß Diskmaster ST nicht nur beim Bildschirmaufbau unverschämt fix ist, hat seinen Grund: Die 65 KB des Programms sind in purem Assembler geschrieben -das ist allein schon eine starke Leistung. Ich schätze, der Quelltext ist mehr als ein halbes Megabyte groß - und das in Assembler. Ich ziehe meinen nicht vorhandenen Hut.
Den Teil des Disketten-Maestros, der sich mit Sektor-Operationen beschäftigt, kann man getrost vernachlässigen. Zwar kann man Sektoren (auch solche mit Nicht-Standardgrößen) einlesen und schreiben; wer aber erwartet, damit einen Standard-Sektormonitor ersetzen zu können, liegt falsch. Das will Diskmaster ja auch gar nicht sein. Immerhin kann man die Sektoren edieren (der Editor ist schnell, funktionsarm und griffig) und auch Teile ausdrucken.
Interessanter ist da schon, ganze Spuren einzulesen und anzuschauen (Bild 2). Auf diese Weise lernt man, wie eine Spur auf der Diskette aussieht - wenn auch die vielen Controllerfehler das Ergebnis (wie auch in Bild 2) stark verzerren. Das Verständnis wird etwas dadurch erleichtert, daß das Handbuch auf das Grundwissen zum Spuraufbau eingeht. Ein gutes Buch wird man sich trotzdem besorgen müssen, wenn man wirklich alles verstehen will, was im Reich des Lesekopfes vor sich geht (zur Not täte es ja auch ein Kurs wie die ‘Floppyspielereien’ in der ST-Computer).
Zwar könnte man jetzt natürlich Byte für Byte in der Spur ändern, um so ein Format aufzubauen - mühsam. Drum spart sich Diskmaster auch die Möglichkeit, eine Spur direkt zu schreiben; es gibt weniger steinige Wege nach Rom.
Hat man eine tückische Diskette vor sich, kann man sie mit dem Diskmaster analysieren. Die Analyse geht nicht so flott vor sich wie fast alles andere in diesem Programm, aber wer sich schon einmal mit dem Floppycontroller WD1772 des ST beschäftigt hat, kann das gut verstehen: Um herauszufinden, was auf einer Spur steht, reicht es eben nicht, einfach die Spur einzulesen. Gesegnet seien die Jünger vom Stamme Western Digital...
Vor der Analyse souffliert man Diskmaster, auf welche Kriterien ganz besonders geachtet werden soll (Bild 3); danach kann man die Analyse starten. Das Ergebnis betrachtet man sich Spur für Spur auf dem Schirm (Bild 4) oder im Gesamtüberblick auf dem Drucker. Nicht immer ist sich Diskmaster bei der Analyse ganz sicher; es meldet sich dann mit der Bemerkung “velo”, was wohl “verify and look” bedeuten soll.
Der zentrale Gag des Diskmasters ist aber: In einer eigenen einfachen Programmiersprache bastelt man sich mit Hilfe eines integrierten Editors Beschreibungen von Diskettenformaten, die man übersetzen und ausführen (also auf die Diskette bringen) kann. Ein Beispiel sagt mehr als 1000 Worte (Listing 1):
Im Listing 1 wird ein Format definiert, das 30 Sektoren mit jeweils 128 Bytes auf eine Diskettenspur bringt. Wie Sie sehen, bietet die Format-Sprache Konstrukte wie eine einfache Schleife (LOOP x -ENDLOOP), außerdem Funktionen zur Verwaltung von Tabellen (für repetitive Aufgaben). Man kann beliebige Zahlen oder auch Strings in den Format-Puffer übernehmen (ZAHL, ASCII, FILL, TABFILL), auch Zufallszahlen (ZUFALL) oder aktuelle (vordefinierte) Laufvariablen, die Diskmaster selbst verwaltet (SPUR, SEITE). Wer sich vor Programmiersprachen gar zu gerne drückt, kann Formate auch in Form einer Tabelle definieren (Bild 5).
Leider bietet der Diskmaster in dieser Maske nur Platz für 28 Sektoren. Wer mehr braucht, muß sich dann doch zum Programmieren bequemen.
Die Format-Definition ist elegant und einfach. So kann man sich ohne großes Aufhebens seinen eigenen Kopierschutz ausdenken und austesten. Ein paar (grundlegende) Anregungen dafür finden sich im Handbuch. Darüberhinaus werden Assemblerroutinen mitgeliefert, die ausreichen, um die im Handbuch beschriebenen Kopierschutztricks abzufragen. (Was hülfe auch ein Schutz ohne Abfrage?). Die ganz kniefiesligen, relativ neuen Tricks beherrscht der Diskmaster ST ohnehin nicht (nein, ich werde mich jetzt nicht darüber auslassen). Aber es reicht, um einem durchschnittlichen Cracker eine Weile die Zeit zu vertreiben. Die Abfrageroutinen kann man leicht in eigene Programme einbinden; Beispiele in Megamax C, ST Pascal, GST-Assembler, GFA-BASIC und Omikron-Basic finden sich auf der Programmdiskette.
Nun hat man also einige Spurformate mit mehr oder weniger trickreichem Unsinn darin entworfen; damit möchte man eine Diskette vollkleistern. Auch dafür bietet Diskmaster eine Lösung (Bild 6): Die einzelnen Spurformate können beliebig über eine Diskette verteilt werden.
Das ist aber immer noch nicht alles! Auf die Funktionen des gesamten Programms ist eine weitere Programmiersprache mit 27 Befehlen aufgesetzt, von der aus man fast alle Teile des Programms steuern kann. Von einer Quelldiskette Sektoren lesen, sie in einem Puffer Zwischenspeichern, sodann eine Zieldiskette formatieren (eventuell mit allerlei Kopierschutztricks) und die Informationen der Quelldiskette darauf abspeichern - kein Problem. Sehr praktisch; Die Sprache ist mächtig genug, um auch zufällige oder vorbestimmte, aber eindeutige Seriennummern auf die Disketten zu schreiben. Es ist also endlich auch für Otto Normalhacker kein Problem mehr, eine kleine Serienproduktion von Programmdisketten anzufertigen.
Listing 2 ist ein Beispiel für einen solchen Produktionstext.
Die Produktionssprache versteht leider wie auch die Format-Definitionssprache keine arithmetischen Ausdrücke und kennt weder Variablen noch Schleifen, nur einen Sprungbefehl, der als Ziel eine Marke im Programmtext hat (man kann nur eine Marke setzen). Obwohl das recht restriktiv klingt, reicht es meistens aus, um auch vertrackte Programmdisketten zu produzieren. So kann man etwa alle vordefinierten Spur- und Diskettenformate “ausführen” (also formatieren), bestimmte Kopierschutzmethoden automatisch anwenden (doppelte Sektoren, gezielt zerstörte Sektoren, 18-Sektor-Format), einen Bootsektor ausführbar machen und mit Puffern jonglieren, die man für allerlei Transferzwecke gebrauchen kann.
Für die Produktion von Disketten empfiehlt sich ein zweites Laufwerk und mindestens 1 Megabyte Speicher; es läuft alles auch ohne diese Zutaten, doch läuft man dann Gefahr, sich einen Diskettenwechsel-Arm zu holen.
Unter diese Kategorie fallen viele Details; Drehzahlmessung für Laufwerk A und B, ein kleines mitgeliefertes Extra-Programm, das die berüchtigten CRC-Prüfsummen berechnet, Hilfstexte, die man sich in den meisten Situationen per HELP-Taste aufrufen kann, die Unterscheidung zwischen logischem Laufwerk (dort werden allerlei Puffer und die Programmtexte abgelegt) und physikalischem Laufwerk (dort wird tatsächlich Arbeit verrichtet)...
Man muß sich schon daran gewöhnen, wie Diskmaster ST seine Spurformate, Diskettenformate und Produktionstexte auf der Diskette verwaltet; vor allem hat man im Programm selbst keine richtige Verzeichnisfunktion, bloß eine selektive, die nur die vom Diskmaster erzeugten Dateien anzeigt. Das wiegt umso schwerer, als man wegen des Verzichts auf GEM-Einbindung keine Accessories aufrufen kann, um sich zu behelfen. Wenn man dann aus dem Diskmaster heraus schnell nachsehen will, ob die eingelegte Diskette die Systemdiskette oder eine Leerdiskette ist (wer beschriftet seine schlaffen Scheiben denn heutzutage noch?), bleibt einem nur der Umweg über die eher kärglichen Sektor-Lese-Funktionen des Diskmaster.
Der GEM-Verzicht verlangt einem auch ein bißchen Flexibilität bei der Bedienung ab; man merkt aber Diskmaster positiv an, daß sich der Autor bei der Bedienung einiges gedacht hat.
Beim Laden und Speichern von Puffern treten ab und an etwas eigenwillige Fehler auf, die laut Handbuch verschwinden, wenn man zwischendurch die Diskette im betreffenden Laufwerk wechselt (ein bißchen knifflig bei einer RAM-Disk, würde ich sagen). Nicht lebensgefährlich, zumal die Fehlermeldungen im (knappen) Klartext ausgegeben werden, aber äußerst unschön.
Die Programmiersprachen für Spurformate und komplette Produktionen sind noch etwas eingeschränkt; vor allem fehlt die Behandlung von einfachen arithmetischen Ausdrücken, die ich mir ab und an beim Programmieren gewünscht hätte. Besonders bei der Produktionssprache vermisse ich bedingte Verzweigungen. Sicher, man kommt in den allermeisten Fällen auch ohne diesen “Luxus” aus; bisweilen muß man dann aber doch eine Diskette nach der Produktion nachbehandeln, womit sich der Nutzen des Programms erheblich relativieren kann.
Das Handbuch ist ausreichend, dabei knapp und meistens präzise. Nicht jeder aber hat wie ich schon eine ganze Weile mit Disketten herumgespielt; dem Anfänger in Sachen Floppy wäre mit einem kleinen Beispiel bei jedem Befehl der aufgesetzten Programmiersprachen sehr gedient. Einige Ungenauigkeiten im Handbuch sind mir auch aufgefallen. So behauptet der Autor von bestimmten vorgestellten Kopierschutzmethoden, daß sie mit diesem oder jenen Kopierprogramm nicht zu knacken seien - was ich in mindestens zwei Fällen widerlegen konnte. 11-Sektor-Formate sind auch nicht - wie angegeben - generell um die Hälfte langsamer (siehe ‘Floppyspielereien I’, ST-Computer 6/87) und auch nicht unbedingt gefährlicher - es kommt eben aufs Laufwerk an.
Diskmaster ST ist eine Möglichkeit für den Einsteiger, sich mit Disketten zu befassen. Dabei helfen die Trackmonitor-Funktionen und die wirklich gute Idee, ein Format durch eine Sprache zu beschreiben. Die wirkliche Zielgruppe aber, das sind wohl diejenigen Zeitgenossen, die Programme selbst vermarkten wollen. Es soll aber keiner denken, ohne zusätzliche Dokumentation und Anregung könnte man nun am Fließband wirklich hinterlistige Schutzmethoden austüfteln - das Handbuch reicht dazu nicht aus (wäre vielleicht auch ein bißchen viel verlangt); dazu braucht man immer noch einen Schuß Phantasie und gehörige Sachkenntnis.
Ja, und dann habe ich da noch so ein Problem: Ich kann Kopierschutz nicht ausstehen. Und Diskmaster ST trägt ja die Werkzeuge dazu in jedes Hackerzimmer. Ich kann mich nur damit trösten, daß so auch die “Gegenseite” informiert wird, so daß der eine oder andere Schutz wohl bald wertlos sein wird. Wohlgemerkt: Ich rede hier nicht der Raubkopie das Wort. Ich glaube eben nur, daß letzten Endes ein gutes Handbuch, ein reibungsloser Update-Service und eine Seriennummer den besten Kopierschutz darstellen. Alle anderen Tricks behindern nur die ehrlichen Anwender - wie auch beim Diskmaster ST: Wenn man das Programm von RAM-Disk oder Platte startet und die Original-Diskette nicht in Laufwerk A liegt, kommentiert das der Diskmaster trocken mit “Ihr Rechner hat nicht genug Speicher” - und das bei einem MegaST2.
Trotzdem, das Programm an sich ist so durchdacht, sauber aufgebaut, schnell und praktisch, daß ich es auf jeden Fall weiterempfehlen muß. Zumindest denjenigen, die kleine bis mittlere Mengen von Programmdisketten produzieren müssen und sich einen Haufen Arbeit und Zeit sparen wollen.
CB
Diskmaster ST kostet 79 DM und ist zu haben bei:
Stefan Wächter Haslacher Weg 45 7900 Ulm
1: * Spezialformat mit 30 Sektoren mit jeweils
2: * 128 Bytes
3:
4: deftab 8 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
5: 19 20 21 22 23 24 25 26 27 28 29 30
6: * Tabelle mit Sektornummern
7:
8: fill 40 $4e * Spuruorspann (40 * $4E)
9:
10: loop 30 * 30mal durch die Schleife
11:
12: fill 10 $4e * Sektorvorspann (10 x $4E)
13:
14: zahl $f5 $f5 $f5 $fe * Syncmarke für Adreßfeld
15: spur
16: seite * Spur und Seite einfügen
17: tab 0 * nächste Sektornummer aus
18: * Tabelle 0 holen
19: zahl 0 * Sektorlänge 0 (128 Bytes)
20: zahl $f7 * Prüfsumme schreiben
21:
22: fill 22 $4e * Post Address Mark Gap
23: fill 12 0 * (22X$4e, 12X0)
24: zahl $f5 $f5 $f5 $fb * Syncmarke Datenfeld
25: fill 128 $e5 * Sektorinhalt (128X$E5)
26: zahl $f7 * Prüfsumme schreiben
27:
28: fill 10 $4e * Sektornachspann (10X$4E)
29:
30: endloop * nächster Sektor
31:
32: fill 200 $cb * kleiner Spurnachspann (200X$CB)
33:
Listing 1: Ein Format im Eigenbau
1: * Beispiel für einen einfachen Produktionstext
2:
3: lade_s_format 'killer.byt' * vordefinierte Spurformate
4: lade_s_format 'short30' * vom logischen
5: lade_s_format 'headers' * Laufwerk
6: lade_s_format 'Standard' * lesen
7:
8: taufe_puffer 'secbuf' * Puffer anlegen
9: print '### Start-Seriennummer eingeben:'
10: input_s_nummer * Start-Seriennummer
11: * einlesen
12:
13: marke * Sprungmarke setzen
14:
15: setze_laufwerk A * Ab jetzt alles auf
16: * Laufwerk A
17:
18: format 0-1 0-70 Standard textformat'
19: format_18 0-1 71
20: format 0-1 72 '30x128'
21: format 0-1 73 'headers'
22: format 0-1 74 'killer.byt'
23: format 0-1 75-79 'Standard textformat'
24: * Diskette ist jetzt formatiert, der Schutz ist
25: * auf den Spuren 71-74
26:
27: setze_laufwerk B * von Laufwerk B
28: lese_daten 0-1 0-70 1-9 * Programmdaten lesen
29:
30: setze_laufwerk A * auf Laufwerk A
31: schreibe_daten 0-1 0-70 * PRG-Daten schreiben
32:
33: lese_puffer 001 'secbuf' * Bootsektor einiesen
34: fülle_puffer 8-10 257 'secbuf' * zufällige TOS-
35: poke_s_nummer 500 'secbuf' * Seriennr. und
36: * Produktions-Serien-
37: * nummer einfügen
38: erhöhe_s_nummer * Seriennummer + 1
39:
40: bootbar 1 'secbuf' * Bootsektor ausführbar
41: schreibe_puffer 001 secbuf' * machen und schreiben
42:
43: lese_puffer 0 79 2 'secbuf' * Sektor 2 auf Spur 79
44: kill_sektor 0 79 2 $20 'secbuf' * (Seite 0) zerstören
45:
46: print '*** Ich bin völlig am Ende...'
47: taste
48:
49: springe * zur Marke springen
50:
51: =======================================================
Listing 2: Diskettenproduktion im Akkord