Nikolaus Heusler Archiv

Erschienen in 64'er Magazin, Ausgabe 03/1994 · Originaldatei: N_H_LINK.TXT

Hinweis: Dies ist das an die Redaktion eingereichte Manuskript, nicht der gedruckte Endtext. Layout, Bildunterschriften, Korrekturen und Kürzungen der Redaktion können in der veröffentlichten Fassung abweichen.

Immer richtig verbunden!
Der N-H-Linker

Hier ist etwas absolut Neuartiges für den C 64: Ein Linker, der fertige Basicprogramme mit beliebig vielen Maschinenprogrammen oder Datenfiles und auf Wunsch einem Zeichensatz verbindet. Dabei entsteht eine einzige Datei, die normal geladen und mit RUN gestartet werden kann. Sagen auch Sie dem nervtötenden Nachladen den Kampf an!

Nikolaus M. Heusler

Kennen Sie das? Das große Spiel, das Anwendungsprogramm in Basic ist endlich fertig. Zur besseren Optik ist natürlich ein neuer Zeichensatz vorhanden, der nach dem Start ebenso wie einige Assemblerprogramme und Dateien (Grafiken, Sprites) erst von Diskette nachgeladen werden muß. Dadurch wird das Programm nicht nur langsam, sondern auch störanfälliger. Außerdem kann man solche Programme, die aus sehr vielen kleinen Einzeldateien bestehen, nicht ohne weiteres kopieren. Abhilfe schafft ein »Linker«.
Grundsätzlich ist das nichts Neues auf dem C 64. Bisherige Linker hatten allerdings immer den Nachteil, daß man keine Basicprogramm verarbeiten konnte. Auch war es nicht möglich, einen eingebauten Zeichensatz noch vor dem Start des Basicprogramms vom gelinkten File aus einzuschalten. Nicht jeder Basic-Freak weiß schließlich, wie das geht.
Hier hilft der »N-H-Linker« (NHL) weiter. Das nur neun Blocks kurze Hilfsprogramm verbindet fertige Basicprogramme mit beliebig vielen Maschinenprogrammen oder Datenfiles und auf Wunsch einem Zeichensatz. Dabei entsteht eine einzige Datei, die normal geladen und mit RUN gestartet werden kann. Da diese Datei auf den ersten Blick (bei LIST) nur noch aus einem SYS-Befehl besteht, eignet sich NHL auch hervorragend zum Programmschutz.
Obwohl NHL aus Gründen und der Geschwindigkeit vollständig in Maschinensprache geschrieben ist, benötigen Sie zur Anwendung keine Assemblerkenntnisse. Geben Sie zum Laden einfach ein

LOAD "NHL",8
RUN

Auf dem Bildschirm erscheint die Frage nach dem Basic-Programmnamen. Geben Sie ein, unter welchem Namen das Basicprogramm auf Diskette gespeichert ist, welches mit NHL behandelt werden soll. Es können die üblichen Abkürzungen »*« und »?« verwendet werden. Nach RETURN lädt der Computer das Programm. NHL verwendet übrigens immer das Laufwerk, mit dem Sie zuletzt gearbeitet haben. Findet NHL kein Laufwerk, wird automatisch mit Floppy Nr. 8 gearbeitet. Sämtliche Floppy-Fehlermeldungen werden erkannt und sofort angezeigt. Ein sofortiger Programmabbruch ist die Folge, wenn Sie auf eine Frage einen leeren Dateinamen eingeben.
Das Programm zeigt die ursprüngliche Ladeadresse des Basicprogramms an. Gewöhnlich ist das der Wert $0801. Im fertigen NHL-Linkfile liegt das Basicprogramm dann ab $094b. Darum brauchen Sie sich aber als Anwender keine Gedanken zu machen.
Als nächstes wird der Name des Zeichensatzes eingegeben, der später vor dem Start des Basicprogramms aktiviert werden soll. Hier geben Sie den Namen der normalerweise 9 Blocks langen Datei auf Diskette ein, die den Font enthält. Die Startadresse des Zeichensatzes auf Diskette (z.B. 8192) spielt dabei keine Rolle. Soll kein Zeichensatz aktiviert werden, geben Sie als Namen nur ein Sternchen »*« ein bzw. übernehmen die Vorgabe durch bloßen Druck auf die RETURN-Taste. Sonst lädt der Computer den Zeichensatz. Dadurch wird das Linkfile um etwa 8 Blocks länger. Im gelinkten Basicprogramm liegt der Zeichensatz später immer in Bank 3 ab $E000 unter dem ROM. Beachten Sie ggf., daß dadurch der Bildschirmspeicher von 1024 nach 52224 wandert! Wird kein Zeichensatz gewählt, arbeitet das Basicprogramm später automatisch mit dem normalen System-Zeichensatz (Groß/Grafik) des C 64.
Falls das Basicprogramm in der Originalform Maschinenprogramme oder sonstige Datenfiles nachgeladen hätte, können wir diese ebenfalls gleich in das Linkfile hineinpacken, und zwar auf Wunch codiert. Die Codierung hat den Vorteil, daß ein Freak mit Disk-Monitor auf diese Weise keinen Einblick in Ihre Daten erlangen kann - sehr praktisch beispielsweise für die Wortschatzdatei eines Adventures. Beantworten Sie die Frage, ob codiert werden soll, mit J oder N. Diese Entscheidung hat keine Konsequenzen auf die Bedienung des NHL oder des Linkfiles, sondern wirkt nur intern. Die (De)codierung erfolgt bei Bedarf natürlich vollautomatisch.
Jetzt werden nacheinander die Namen der Dateien eingegeben, die in das Linkfile gepackt werden sollen. NHL zeigt jeweils die Ladeadresse und die Länge in Bytes an. Diese Dateien werden im Linkfile direkt hinter das Basicprogramm und ggf. den Zeichensatz geschrieben, von dort kopiert sie der Entpacker dann nach dem Start des Linkfiles an die vorgesehenen Speicherpositionen.
Dabei gibt es einige Punkte zu beachten. Erstens dürfen aus technischen Gründen nur Dateien mit einer Ladeadresse zwischen $A00 und $DFFF aufgenommen werden. Andere Files weist NHL zurück. Zweitens beachten Sie bitte, daß falls ein neuer Zeichensatz aktiviert ist der Bildschirmspeicher ab 52224 ($CC00 bis $CFFF) liegt. Maschinenprogramme und andere Daten sind in diesem Fall in diesem Bereich also tabu. Drittens sollten Sie darauf achten, daß sich keine Überschneidungen ergeben. Falls also beispielsweise das Linkfile bestehend aus Basicprogramm, Zeichensatz, Entpacker und Nachlade-Dateien bis nach $3000 reicht, dürfen keine Nachlade-Dateien im Bereich $0801 bis $3000 vorgesehen werde, da diese beim Kopieren sich selbst überschreiben könnten. Und viertens eine Selbstverständlichkeit: Im Basicprogramm müssen Sie vor dem Bearbeiten mit NHL alle Nachladebefehle der Art

LOAD "NAME",8,1

entfernen. Diese dienten ursprünglich ja dazu, Dateien von Diskette nachzuladen. Dank NHL liegen diese nach dem Start des Basicprogramm jedoch schon fertig im Speicher vor. Entfernen Sie also alle LOAD-Befehle.
Wenn Sie alle Dateien, die eingelesen werden sollen, spezifiziert haben, geben Sie wiederum als Dateinamen nur ein Sternchen ein oder übernehmen die Vorgabe. Sie brauchen natürlich gar keine Files nachladen zu lassen, sollte dies nicht erwünscht sein, beantworten Sie einfach gleich die erste entsprechende Frage mit einem Stern.
Das Linkfile wird jetzt im Speicher komplett aufgebaut und kann anschließend gespeichert werden. Geben Sie einen beliebigen Namen ein. Achten Sie auf ausreichend Speicherplatz auf Diskette und darauf, daß es noch kein File dieses Namens gibt. Nach dem Speichern ist die Arbeit des NHL beendet.
Sie können das eine File, das hier angelegt wurde (das »Linkfile«), nun wie ein normales Basicprogramm mit

LOAD "NAME",8

laden und mit RUN starten. Dadurch wird, falls gewünscht, der neue Zeichensatz nach $E000 kopiert und automatisch eingeschaltet. Anschließend kopiert der Entpacker selbständig ggf. alle »Nachlade-Files« an ihre gewünschten Positionen im Speicher und startet erst dann das Basicprogramm. Falls Sie übrigens aus diesem mit RUN STOP/RESTORE aussteigen, scheint der Computer abgestürzt. Geben Sie dann »blind« den Befehl

POKE 648,4

ein.
Das Linkfile (nicht jedoch das darin enthaltene Basicprogramm) kann nach dem Laden nur einmal gespeichert werden. Ein zweiter Start löst aus sicherheitstechnischen Gründen einen Reset aus. Grund: Die Variablen, die das Basicprogramm inzwischen angelegt haben könnte, hätten Teile der Entpacker-Datei überschrieben, wodurch es zu Störungen gekommen wäre.
Änderungen an dem Basicprogramm sind auch nach dem Start des Linkfiles jederzeit möglich - allerdings dürfen Sie dieses Basicprogramm so nicht mehr auf Diskette speichern. Ihr C 64 würde dabei weder den Zeichensatz noch die Nachlade-Files mitspeichern. Behandeln Sie aus diesem Grund nur fertige und getestete Basicprogramm mit dem NHL.
Abschließend noch eine Bemerkung: Geben Sie im NHL sowohl auf die Frage nach dem Zeichensatz wie auch gleich auf die erste Frage nach den Nachlade-Files ein Sternchen ein, wird weder der Schriftsatz geändert, noch werden Dateien nachgeladen. Das Programm legt dann nur ein Linkfile mit dem Basicprogramm an, das allerdings unsichtbar bleibt. Setzen Sie NHL auf diese Weise als komfortablen Programmschutz-Generator ein!
Sie werden sehr schnell feststellen, welche Power hinter dem vielseitigen NHL steckt und diesen Linker sicherlich sehr gern und häufig einsetzen. Er hilft, Ihre fertigen Programm sicherer und anwenderfreundlicher zu machen. Viel Vergnügen damit!
(Nikolaus Heusler)

Hier ist die Speicherbelegung eines Linkfiles (hexadezimal):
0801-0856 Entpacker-Uplink
0857-086c Entpacker: System Init
086d-08b2 Entpacker: Zeichensatz aktivieren
08b3-08fc Entpacker: Nachlade-Files in Speicher kopieren
08fd-0949 Entpacker: Basicprogramm einschalten und starten
ab 094a: Basicprogramm
dahinter: evtl. Zeichensatz
dahinter: evtl. Nachlade-Files