Tips und Tricks für den Commodore 64
Die hier vorgestellten Tips und Tricks wurden von Volker Mücke gesammelt. Wenn Sie selbst einige unbekannte Peeks und Pokes gefunden haben, so sind wir gerne bereit, diese zu veröffentlichen.
Umgang mit Floppy/Drucker:
Der Drucker VC 1515 ist eigentlich nur für den VC 20 gedacht. Will man ihn für den C64 benutzen, so funktioniert dies nicht ohne weiteres. Dazu benötigt man zwei spezielle POKE-Befehle:
Vor dem Ansprechen des Druckers muß man POKE 53265,11 und nach Beendigung des Druckvorgangs POKE 53265,27 eingeben. Nachteilig ist allerdings, daß während des Druckens die Schrift auf dem Bildschirm verschwindet.
Das gleiche Problem ergibt sich beim Gebrauch der Floppy VC 1540 zusammen mit dem C 64. Auch hier braucht man die beiden POKE-Befehle. Allerdings müssen sie anders gehandhabt werden: Man gibt, wenn man laden will, folgendes im Direktmodus ein:
POKE 53265,11:POKE 53266,27:LOAD "NAME", 8 (bzw.8,1)
So, und nun lädt der C 64 auch von der Floppy VC1540.
Joystickabfrage:
Auch die Joystickabfrage ist beim C 64 nicht ganz einfach. Dabei hilft folgendes Hilfsprogramm:
10 POKE 56322,224 20 JO = PEEK(56320) 30 IF (JO AND 1)=0 THENPRINT"OBEN" 40 IF (JO AND 2)=0 THENPRINT"UNTEN" 50 IF (JO AND 4)=0 THENPRINT"LINKS" 60 IF (JO AND 8)=0 THENPRINT"RECHTS" 70 IF (JO AND 16)=0 THENPRINT "FEUER"
Dieses Programm gilt für eine Joystickabfrage am Controlport 2.
Die Funktion FRE(X):
Um bei der Abfrage PRINT FRE(X) die richtige Ausgabe zu erhalten, muß man folgendes noch hinzufügen:
PRINT FRE(X) + 65538.
Nun gibt der Computer die tatsächlichen freien Bytes aus.
Listschutz
Wenn man ein Programm hat, welches irgendeinen Listschutz hat, so will der Benutzer doch versuchen, dieses Programm zu »knacken«. Wenn zum Beispiel die Commodore-Taste ausgeschaltet wurde, so kann man beim C 64 – anders als beim VC 20 – die Control-Taste benutzen, zum Beispiel:
CTRL + "N" = Kleinschrift
CTRL + "M" = RETURN
CTRL + "S" = HOME
CTRL + ";" = Cursor rechts
CTRL + "=" = Cursor blinkt
CTRL + "Q" = Cursor unten
CTRL + "T" = Cursor links
Reset-Auslöser:
SYS 64738 bewirkt beim C 64 einen System-Reset.
Einige Peeks und Pokes
?ST oder ?PEEK(144):
Statusabfrage
POKE 207,X [1 <= X <= 255]:
Bestimmung der Schnelligkeit der Blinkphase des Cursors
PRINT PEEK(214):
gibt die Zeile an, in der der Cursor gerade ist.
PRINT PEEK(202):
gibt die Spalte an, in der der Cursor im Augenblick ist.
POKE 214,Х [1 <= X <= 23]:
versetzt den Cursor an die Zeile x
PRINT PEEK(647):
gibt die Farbe unter dem Cursor an.
POKE 647,X:
Farbenwechsel unter dem Cursor.
PRINT PEEK(215):
gibt die letzte gedrückte Taste im Characterwert aus
PRINT PEEK(213):
gibt die Länge der momentanen Zeile auf dem Bildschirm an.
Rund um den OUTPUT:
PRINT PEEK (183):
Ausgabe der Länge des Filenamens.
PRINT PEEK (184):
Ausgabe der laufenden Filenummer.
PRINT PEEK (185):
gibt die laufende Sekundäradresse an.
PRINT PEEK (186):
gibt die laufende Primäradresse an.
Weitere nützliche Peeks und Pokes
POKE 652, X [1 < = X < = 255]:
verzögert die Repeat-Funktion
SYS 65499:
Der Systembefehl bewirkt, daß TI$ auf 0 gesetzt wird.
PRINT PEEK (36870):
Ausgabe der Lichtgriffel Horizontal-Position.
PRINT PEEK (36871):
Ausgabe der Lichtgriffel Vertikal-Position.
0 POKE 199,1:PRINT"Volker Muecke":
Diese Zeile bewirkt, daß die PRINT-Anweisung den Text invers ausgibt.
0 POKE 199,0: PRINT"Volker Muecke":
dagegen gibt den Text wieder normal aus.
PRINTPEEK(10) oder PEEK (147):
Ist dieser Wert = 0, so wurde als letzter Device-Befehl ein LOAD eingegeben, wenn der Wert = 1 ist, wurde VERIFY eingegeben.
Zerstörungsbefehle
Code-Wörter sind – gegen Unbefugte – sehr nützlich. Allerdings muß auch bei Falsch-Eingabe die geeignete Reaktion vom Computer aus folgen.
Hier ein Beispiel:
10 INPUT "Code-Wort" ??"; A$ 20 IF A$="Volker Muecke"THENPRINT"Programm zugänglich !":END 30 POKE 776,1
Erklärung: In Zeile 10 wird der Anwender gebeten, das Code-Wort einzugeben. Ist die Überprüfung richtig, so kann er mit dem Programm arbeiten. Stimmt die Eingabe nicht mit dem Code-Wort überein, so wird das Programm in Zeile 30 zerstört.
Nun könnte man natürlich das Programm einfach auflisten und nachsehen, welches das richtige Code-Wort ist. Das heißt, man müßte versuchen, das Code-Wort und den Zerstörungsbefehl »unsichtbar« zu machen, so daß er beim Auflisten nicht mehr zu sehen ist. Dazu hilft folgendes Zusatzprogramm, welches in das bestehende Programm eingefügt wird:
60000 H=44:L=43:X=PEEK(H)*256+PEEK(L):INPUT"Zeilennummer:";Z 60020 Y=PEEK(X+1)*256+PEEK(X) 60030 IF PEEK (X+3)*256+PEEK(X+2)=Z THEN POKE X+4,0:PRINT "OK-OK":END 60040 IF PEEK (X+1)*256+PEEK(X)= 0 THEN PRINT"Zeile nicht gefunden !":END 60050 X=Y: GOTO 60020
Bevor man dieses Unterprogramm nun starten kann, muß man folgendes machen: Man setzt nach der Zeilennummer der Zeile, die verschwinden soll, fünf '+'-Zeichen.
In unserem Fall wäre das:
20 +++++IF A$="Volker Muecke"
....und so weiter und
30 +++++POKE 776,1
So, nun startet man das Unterprogramm mit RUN 60000. Dieses Programm macht alles nach den gewünschten Zeilennummer unsichtbar, so daß da steht:
20 30
obwohl das Programm noch korrekt läuft.
Hier noch einige Zerstörungsbefehle und ihre Auswirkungen:
POKE 776,1:
Dieser Befehl bewirkt, daß das ganze Programm mit undefinierbaren Zeichen vollgeschrieben wird.
POKE 777,1:
Hier wird kein Befehl mehr ausgeführt. Der Cursor springt jeweils in die Ecke links oben.
POKE 770,0:
Das ist auch ein sehr schöner Zerstörungsbefehl. Er bewirkt, daß eine READY-Ausgabe unendlich oft erfolgt. Will man nun das Programm laufen lassen, besteht keine weitere Möglichkeit mehr, als den Computer auszuschalten.
Hat man aber nach einiger Zeit sein eigenes Code-Wort vergessen, so besteht auch noch eine Möglichkeit, dieses Code-Wort zu finden, indem man die unsichtbaren Zeilen eben wieder sichtbar machen muß. Dies geschieht mit folgender Routine, die an das eigentliche Programm angehängt wird:
60000 AN=PEEK(43)+PEEK(44)*256 60010 P=PEEK(AN)+256*PEEK(AN+1) 60020 IF P=0 THEN PRINT "Fertig!":END 60030 IF PEEK (P+4) THEN 60050 60040 POKE P+4,32:POKE P+5,32:POKE P+6,32: POKE P+7,32:POKE P+8,32 60050 P=PEEK(P)+256*PEEK(P+1): GOTO 60020
Selbstverständlich soll man nach jeder »Operation« den Codierer beziehungsweise Decodierer aus dem Hauptprogramm nehmen, damit niemand dies dazu ausnutzen könnte, das Programm zu »knacken«. Viel Spaß beim Decodieren!
In der nächsten Ausgabe gibt es weitere PEEK und POKES.