Tips & Tricks für Einsteiger
Ein ausführlicher und leicht verständlicher Artikel wird alle Fragen klären, die Sie schon immer zum Thema »Reset« hatten. Des weiteren bringen wir ein paar Hinweise zum Umgang mit dem Diskettenlaufwerk.
Manchmal starrt man als stolzer Besitzer einer Floppy-Station auf den Bildschirm und die Fehlermeldung »FILE NOT FOUND«. Besonders schlimm ist dies, wenn der Fehler in einem Programm auftrat, man also nicht weiß, welches File denn nun nicht gefunden wurde. Kein Problem: Durch die Eingabe von »SYS 63123« (leicht zu merken) bringt der C 64 die Meldung »SAVING...« und den zuletzt verwendeten File-Namen auf den Bildschirm. Sie können das leicht testen: Tippen Sie »LOAD'XYZ'8& ein (plus <RETURN>-Taste) und anschließend »SYS 63128«.
(tr)Was ist ein Reset?
So mancher C 64-Benutzer wird früher oder später auf den Begriff »Reset« stoßen. Zum Beispiel im Zusammenhang mit einem »Reset-Schutz« oder einem »Reset-Taster«. Was ist nun so ein »Reset«? Das Wort kommt aus dem Englischen (wie sollte es auch anders sein) und bedeutet »zurücksetzen«. Der Computer wird also durch einen Reset in seinen Einschaltzustand zurückversetzt. Für den Computer ist das so, als ob wir ihn gerade erst eingeschaltet haben. Dies macht sich durch das Erscheinen der »Einschaltmeldung« auf dem Bildschirm bemerkbar v COMMODORE 64 BASIC V2.
Manchmal kann es durch einen ungeschickten POKE-Befehl, durcheinfehlerhaftes Programm oder einen falschen SYS-Aufruf zu einem »Systemabsturz« kommen. Wir bekommen das dadurch zu spüren, daß sich der Computer »tot stellt«, auf keinen Tastendruck mehr reagiert und auch durch die Tastenkombination <RUN/STOP+RESTORE> nicht mehr aufzuwecken ist (zum Ausprobieren können Sie zum Beispiel »POKE 1,0« eingeben).
Wir müssen ihm also extern (von draußen) einen Impuls geben. Die eine Möglichkeit wäre nun, den Computer aus- und wieder einzuschalten (manche nennen dies auch »masterreset«). Die andere Möglichkeit ist eben das Betätigen eines Reset-Tasters. Dieser schaltet am Prozessor des C 64 eine Leitung ein (Reset-Leitung), die über Umwege wiederum ein ganz bestimmtes Programm startet. Im Verlauf dieses Programms werden die Bildschirmfarben gesetzt, verschiedene POKEs ausgeführt und die Einschaltmeldung auf den Bildschirm gebracht.
Dieses Programm können Sie auch »per Hand«starten, also einen Reset auslösen: Tippen Sie »SYS 64738 ein und drücken Sie die <RETURN>-Taste. Dieser SYS-Befehl ist wahrscheinlich der am häufigsten verwendete auf dem C 64. Sie sollten sich ihn gut einprägen.
Was ist nun ein Reset-Taster? Wie gesagt, besitzt der Prozessor unseres C 64 eine Reset-Leitung. Wenn der Computer nun wieder einmal »abgestürzt« ist (logischerweise können wir dann auch den rettenden SYS-Befehl nicht mehr eingeben!), hilft außer Ausschalten noch ein Reset-Taster. Dieser schaltet die Reset-Leitung durch und bringt in den meisten (siehe »Reset-Schutz«) Fällen die Einschaltmeldung wieder zurück.
Wenn Sie im Umgang mit Lötkolben weniger geübt sind, sollten Sie sich im Elektronik-Bastelladen einen fertigen Reset-Taster (meist zum Einstecken in die serielle Buchse des C 64) besorgen. Ansonsten betrachten Sie sich einmal die Steckerbelegung der Anschlüsse Ihres Computers im Anhang des Commodore-Handbuchs. Um einen Reset auszulösen, müssen Sie eine entsprechend gekennzeichnete Leitung mit Masse (als GND bezeichnet) verbinden.
Achtung: Bei den neuesten Geräten des C 64 ist die Reset-Leitung am seriellen Port nicht angeschlossen. Verwenden Sie in diesem Fall zum Beispiel den Reset-Eingang am Kassetten-Port.
Aber seien Sie bitte äußerst vorsichtig: Wenn Sie sich beim Auszählen des richtigen Anschlusses vertun und aus Versehen irgendeine andere Leitung mit Masse verbinden, können wichtige Bausteine im Computer zerstört werden. Und das läuft dann natürlich nicht mehr unter Garantie!
So, nun zum Reset-Schutz: Beim alten VC 20-Computer (direkter Vorfahre des C 64) war esnochüblich, Spiele nicht auf Diskette oder Kassette zu liefern, sondern auf einem Modul. Dies ist ein Kästchen mit ein paar elektronischen Bausteinen, das hinten in den Erweiterungs-Port des Computers gesteckt wird. Einer der Bausteine enthält das Spiel. Um diese Spiele gegen Kopieren zu schützen, wurde der Computer mit einer Zusatzfunktion ausgestattet: Beim Einschalten überprüft das Reset-Programm als erstes, ob an einer bestimmten Stelle im Speicher (eben dort, wo sich das Modul befindet) eine bestimmte Zeichenfolge vorliegt (sie lautet »CBM804. Wenn dies der Fall ist, übergibt die Reset-Routine die weitere Steuerung an das Modul. Folge: Das Spiel wird sofort gestartet und der Benutzer hat keine Chance mehr, es abzubrechen und zu speichern.
Auch der C 64 enthält in seiner Reset-Routine noch diese CBM80-Abfrage, obwohl die Programm-Module längst am Aussterben sind. Ein Reset-Schutz macht nun nichts anderes, als an diese Stelle im Speicher die CBM80-Zeichenfolge zu schreiben. Wird nun ein Reset ausgelöst (egal, ob per SYS-Befehl oder Reset-Taster), wird automatisch ein Maschinenprogramm gestartet, das dann verschiedene »Gemeinheiten« ausführen kann (zum Beispiel Speicher komplett 1öschen, eine Meldung auf den Bildschirm bringen, oder einfach nur den Computer unwiederbringlich abstürzen lassen). Es soll an dieser Stelle nicht näher auf das genaue Aussehen eines solchen Programmes eingegangen werden, weil dazu fundierte Maschinensprache-Kenntnisse erforderlich sind. Nur sovielseinoch gesagt: Die Adresse des Maschinenprogramms steht in $8000/$88001 und die CBM80-Kennung dann ab Adresse $8004.
(tr)Ohne Cursor
Wenn man in einer INPUT-Anweisung den Cursor für überflüssig hält, kann man ihn durch »POKE 788, 123« ausschalten. Durch »POKE 788, 49 oder die Tastenkombination <RUN/ STOP+RESTORE> kann er jederzeit wieder eingeschaltet werden.
(Thomas Stephan/tr)Basic-Befehle als ID
Wer schon immer einmal Basic-Befehle in seinem Directory, besser gesagt an der Stelle, wo man sonst die ID vermutet, sehen möchte, kann dies in einer ganz einfachen Art und Weise erreichen: Man formatiert eine Diskette ganz normal, jedoch gibt man nicht zwei Ziffern als ID ein, sondern »geSHIFTete« Buchstaben (zwei Stück). Wenn man danach das Directory lädt und listet, erkennt man als ID zwei Basic-Befehle, die der jeweils angegebenen ID entsprechen. Ein Beispiel: Man nehme eine leere Diskette und gebe ein: OPEN 1,8,15,'N: Name, <Shift+Z2> <Shift+X>": CLOSE 1. Dann LOAD'$',8 und LIST. Im Directory stehen als ID jetzt die Befehle »RETURN« und »RESTORE«. Mit diesen und anderen geSHIFTeten Buchstaben und Zeichen lassen sich leicht abwechslungsreiche Directories gestalten.
(Ulrich Heitmann/tr)Sein oder Nichtsein?
Wie stellt man fest, ob eine Datei auf Diskette existiert oder nicht? Im Prinzip ganz einfach: Man versucht sie umzubenennen, und zwar mit dem Namen, den sie ohnehin schon besitzt. Dann kann es nur zwei Fehlermeldungen geben: »FILE EXISTS« oder »FILE NOT FOUND«. Im C 64-Basic sieht das so aus:
100 INPUT "PROGRAMMNAME" ; N$
110 OPEN 15,8,15,"R:"+N$+"="4N$: INPUT#15,FM:CLOSE15: IF FM=62 THEN PRINT" DATEI NICHT VORHANDEN" : GOTO 100 62 ist übrigens die Fehlernummer für »FILE NOT FOUND«.
(Ernst Kofler/tr)Groß-/Kleinschrift in einer PRINT-Anweisung umschalten
Das Commodore-Bedienungshandbuch sagt auf Seite 135, daß die Umschaltung auf Groß-/Kleinschreibung nicht in einem String zwischen Anführungszeichen eingeschlossen werden kann. Ich aber sage, es geht! Probieren Sie mal ?"<CTRL+N>"<RETURN> oder ?"<CTRL+SHIFT+N>" <RETURN>
Da Shift und Control nicht gleichzeitig registriert werden, muß man einen Umweg gehen. Zuerst müssen Sie ?" " schreiben, dann fahren Sie per Cursortasten auf das zweite Gänsefüßchen und schalten den Revers-Modus durch <CTRL+9> ein. Jetzt sollten Sie <SHIFT+N> drücken und alsbald alles mit <RETURN> abschließen. Im Klartext sähe das etwa so aus: ?" "{left,rvson}N <RETURN>
<CTRL+H> blockiert die Umschaltung durch <SHIFT+ CBM >, nicht aber die oben genannte Methode. <CTRL+I> hebt <CTRL+H> auf.
(Frank Stegherr/tr)Mit dem Einzeiler lassen sich Dezimalzahlen auf beliebig viele Stellen runden, auch solche in der Exponentialdarstellung. Man kann die Funktion jederzeit mit FNX(a) im Programm aufrufen (a ist dabei die zu rundende Zahl. K gibt an, auf wieviele Stellen nach dem Komma gerundet werden soll.) 10 DEF FNX (Z)=INT(Z*10↑K +0.5)/10↑K
Funktionsweise: Das Komma wird um K Stellen nach rechts verschoben, 0.5 dazugezählt (ist die Nachkommastelle größer oder gleich fünf, wird somit aufgerundet) und die Kommastellen abgeschnitten, dann wird das Komma wieder um K Stellen nach links verschoben. Die Zahl ist gerundet. Wenn man als Kommastelle eine negative Zahl nimmt, kann man auch vor dem Komma runden.
(Fabian Honegger/tr)Texte formatieren
Mit Hilfe des TAB-Befehls läßt sich das Problem der Formatierung von Texten elegant lösen:
rechtsbündig PRINT TAB(40-LEN(A$));A$ oder
zentriert PRINT TAB(20-LEN(A$)/2);A$
entsprechend PRINT TAB((40-LEN(A$))/2);A$ aber etwas übersichtlicher. Die Variable A$ muß dabei den zu formatierenden Text enthalten. Eine andere Möglichkeit, falls ein Drucker am Werk ist, der bei TAB seine Schwierigkeiten hat; man erzeugt zunächst eine Leerstring (nennen wir ihn L$) mit zum Beispiel 40 Blanks und dann A$:
— rechtsbündig: A$=RIGHT$(L$+A$,40)
— zentriert:
A$=LEFT$(L$,40-LEN(A$)/2)+A$:A$=LEFT$(A$+L$,40)
oder linksbündig: A$=LEFT$(A$+L$,40).
Das linksbündige Format ist dann von Interesse, wenn mehrere Strings innerhalb einer Zeile vorkommen, die alle untereinander ausgegeben werden sollen (über Drucker). Zahlen lassen sich übrigens durch Umwandlung in einen String ebenfalls rechtspündig formatieren.
(Mathias Ullmann/tr)