Peeks & Pokes

Die PEEK-, POKE- und SYS-Kiste

Das Betriebssystem bietet einige Kniffe, die sich erst durch spezielle POKEs richtig ausnutzen lassen. Auch andere spezielle und nützliche Routinen benötigen mindestens einen SYS-Aufruf, um arbeiten zu können. Lernen Sie hiermit die Tricks des C 64 kennen.

Durch geschicktes POKEn in bestimmte Speicheradressen lassen sich verblüffende Effekte erzielen. So kann man etwa Programme gegen LISTen schützen, auf daß sie sich bei einem versuchten LIST-Befehl selbst zerstören. Dies kann recht hilfreich sein, wenn man sein eigenes Programm vor fremden Augen verbergen will. Aber lesen Sie selbst, welche Möglichkeiten sich noch bieten und lernen Sie dadurch Ihren C 64 besser kennen.

POKE 1,53 – Das Basic und Kernel sind ausgeschaltet (die vollen 64 KByte RAM wären vorhanden – wenn aber das Betriebssystem nicht vorher vom ROM in das RAM kopiert wurde, stürzt der Computer ab, da er auf keine Befehle mehr zurückgreifen kann). Diese Konfiguration ist nur von Maschinensprache aus nutzbar.

POKE 1,54 – Hierbei ist das Basic ausgeschaltet. Diese Ebene ist ebenfalls nur unter Maschinensprache zu nutzen.

POKE 1,55 – Der normale Zustand. Der Interpreter und das Betriebssystem sind aktiv.

PRINT PEEK(10) – Ist der Wert = 0, so war die letzte Operation LOAD. VERIFY ergibt den WERT = 1.

PRINT PEEK(17) – Abfrage auf die letzte zugewiesene Variable. Bei dem Wert = 0 wurde die letzte Variable mittels INPUT geholt oder es fand noch keine Operation statt. Die Zuweisung mit GET ergibt den Wert = 64 und READ den Wert = 152.

POKE 19,64 – Beim nächsten INPUT-Befehl wird kein Fragezeichen mehr ausgegeben. Allerdings kann man nachher durch Drücken der RETURN-Taste nicht mehr in die nächste Zeile gelangen.

POKE 19,0 – Läßt die Ausgabe des Fragezeichens wieder zu.

POKE 24,0 – Nach Eingabe dieses POKEs auf einen FORMULA TOO COMPLEX-ERROR verhält sich der Computer wieder normal.

PRINT PEEK(43)+PEEK(44)*256 – Mit dieser Befehlszeile erfährt man die aktuelle Startadresse des Basic-Programms. Soll die Startadresse verändert werden, so muß in die Speicherzellen 43 und 44 ein anderer Wert geschrieben werden.

PRINT PEEK(45)+PEEK(46)*256 – Gleichlautend dazu erfährt man hiermit die aktuelle Endadresse des Basic-Programmes.

PRINT PEEK(55)+PEEK(56)*256 – Ergibt das derzeitige Ende des Basic-Bereiches. Durch Herabsetzen dieses Zeigers ist es möglich, den RAM-Bereich zu verkleinern, um etwa im oberen Bereich liegende Maschinenprogramme gegen Überschreiben zu schützen.

PRINT PEEK(57)+PEEK(58)*256 – Ergibt die Zeilennummer, bei der nach einer Programmunterbrechung gestoppt wurde.

PRINT PEEK(61)+PEEK(62)*256 – Dies ist der Zeiger auf CONT. Normalerweise ist nach einem anschließenden CLR das Programm nicht mehr fortzusetzen. Merkt man sich jedoch die Inhalte der beiden Speicherzellen noch vor dem CLR, so kann man anschließend an den Befehl die gemerkten Werte wieder hineinPOKEn und das Programm mit CONT wieder starten.

PRINT PEEK(63)+PEEK(64)*256 – So erhält man die Nummer der DATA-Zeile, aus der das zuletzt gelesene Datum geholt wurde. (Gut zum Finden von Fehlern in DATA-Zeilen geeignet.)

PEEK(69)/PEEK(70) – Name der zuletzt zugewiesenen Variablen. Bei normalen Fließkommavariablen ermittelt man den Wert mit PRINT CHR$(PEEK(69))+CHR$(PEEK(70)) aus.
Der Name von Integervariablen (zum Beispiel X%) ergibt sich durch PRINT CHR$(PEEK(69)-128)+CHR$(PEEK(70)-128).
Strings (zum Beispiel A$) erhält man durch PRINT CHR$(PEEK(69))+CHR$(PEEK(70)-128).

POKE 120,2 – Der C 64 nimmt keinerlei Befehle mehr an.

POKE 147,X – Springt man die LOAD-Routine im Betriebssystem an, so entscheidet der Wert dieser Speicherstelle darüber, ob ein LOAD (X = 0) oder VERIFY (X = 4) durchgeführt wird.

PRINT PEEK(152) – Gibt die Anzahl der geöffneten Dateien bekannt.

PRINT PEEK(153) – Nummer des aktuellen Eingabegerätes. Hierbei gilt:

0 = Tastatur
1 = Datasette
2 = RS232-Port
3 = Bildschirm
8-11 = Floppy

PRINT PEEK(154) – Man erfährt hier die Nummer des aktuellen Ausgabegerätes.

0 = Tastatur
1 = Datasette
2 = RS232-Port
3 = Bildschirm
4,5 = Drucker
6 = Plotter
8-11 = Floppy

POKE 157,128 – Meldungen wie LOADING... oder SEARCHING... auch im Programmodus.

POKE 157,192 – Läßt alle Meldungen des Betriebssystems zu.

PRINT PEEK(182) – Dieser Befehl gibt die Anzahl der Zeichenlesefehler aus.

PRINT PEEK(183) – Länge des derzeitigen Filenamens.

PRINT PEEK(184) – Hiermit kann die laufende Filenummer abgerufen werden (OPEN...).

PRINT PEEK(185) – Analog hierzu läßt sich die derzeitige Sekundäradresse herausfinden.

PRINT PEEK(186) – ergibt die Gerätenummer des zuletzt angesprochenen Gerätes.

PRINT PEEK(197) – Derzeit gedrückte Taste

POKE 198,0 : WAIT 198,1 – Der Computer wartet auf einen Tastendruck.

POKE 199,1 – Umschaltung in den Revers-Modus. Das Rücksetzen in die Normalausgabe erfolgt mit POKE 199,0.

PRINT PEEK(200) – Gibt an, wieviele Zeichen die zuletzt eingegebene Zeile hatte.

PRINT PEEK(201) – Gibt die Zeile der aktuellen Cursorposition an.

PRINT PEEK(202) – So erhält man die Spalte der aktuellen Cursorposition.

PRINT PEEK(203) – Gibt an, welche Taste gedrückt wurde, und zwar im Charaktermodus (siehe Tabelle im C 64-Handbuch), wobei 64 bedeutet, daß keine Taste gedrückt wurde.

POKE 204,0 – Der Cursor bleibt auch bei GET an.

POKE 204,1:POKE 207,0 – Dieses normalisiert den oberen Zustand wieder.

POKE 212,0 – Flag für Gänsefüßchenmodus

PRINT PEEK(215) – Hiermit läßt sich das zuletzt eingegebene Zeichen im ASCII-Code auslesen.

POKE 646,X – setzt die aktuelle Cursorfarbe (Wert für X von 0 bis 15).

POKE 647,X – Über die X-Werte von 0 bis 15 läßt sich die jeweilige Farbe unter dem Cursor ändern.

POKE 648,X – Beginn Bildschirmspeicher

POKE 649,0 – Sperren von Tastatureingaben.

POKE 649,10 – Rücksetzung auf den Normalzustand.

POKE 650,255 – Ab jetzt haben alle Tasten REPEAT-Funktion, das heißt Dauerfunktion.

POKE 650,0 – Rücksetzung in den Normalzustand.

POKE 650,127 – Dauerfunktion der Cursortasten ausschalten.

POKE 650,64 – Dauerfunktion für alle Tasten aus.

PRINT PEEK(653) – Abfrage auf SHIFT (Bit 0)-, COMMODORE (Bit 1)- und CONTROL (Bit 2)-Taste.

POKE 657,128 – Dieser Befehl macht die Umschaltung von der Tastatur her auf Groß- und Kleinschreibung unmöglich.

POKE 768,145 – Fehlermeldungen abschalten

POKE 768,139 – normal

POKE 768,143 – Reset nach Programmende

POKE 770,X – Durch EinPOKEn eines beliebigen Wertes erfolgt die READY-Meldung unendlich oft. Nur noch Ausschalten hilft.

POKE 774,226:POKE 775,252 – Wird nun der LIST-Befehl angewandt, so erfolgt ein Reset des Computers.

POKE 775,200 – So kann man einen kleinen Listschutz aktivieren, der sich mit POKE 775,167 wieder desaktivieren läßt.

POKE 776,1 – Dieser Befehl zerstört das im Speicher befindliche Basic-Programm.

POKE 777,1 – Ab jetzt wird kein Befehl mehr ausgeführt. Der Cursor steht in der linken oberen Ecke.

Stelle 781/782 – Startadresse, ab der ein Programm geladen wird. Durch entsprechende Werte kann ein Programm in einen anderen Speicherbereich geladen werden. (Siehe SYS 65493)

POKE 788,52 – Dieser Befehl hebt die Wirkung der STOP-Taste auf.

POKE 788,49 – STOP-Taste wieder einschalten

POKE 788,62 – Cursor blinkt schneller

Stelle 788/789 – IRQ-Vektor. Das Betriebssystem springt ständig in diese Routine. Durch Ändern des Inhalts können eigene, »interruptgesteuerte« Maschinenroutinen ständig neben dem Hauptprogramm laufen.

POKE 792,226:POKE 793,252 – wirkt wie ein RESET beim Drücken der Restore-Taste.

POKE 801,0:POKE 802,0:POKE 818,165 – Nach diesen drei POKE-Befehlen kann ein im Speicher befindliches Programm weder auf Kassette noch auf Diskette gespeichert werden.

POKE 808,225 – Hebt die Tastenkombination RUN/STOP und RESTORE auf. Ein Programm läßt sich nicht mehr unterbrechen.

POKE 808,237 – RUN/STOP und RESTORE werden wieder aktiviert.

POKE 813,2 – Nach der Eingabe dieses Befehles ist ein Basic-Programm nicht mehr zu ändern.

POKE 818,226:POKE 819,252 – Wird der Befehl SAVE eingegeben, so löst der Computer einen Reset aus.

POKE 53270,X – Durch verschiedene X-Werte kann ein horizontales Soft-Scrolling erreicht werden. X = 1: Scrollen nach rechts. X = 0: Scrollen nach links.

POKE 53280,X – Ein Ändern des Wertes X im Bereich von 0 bis 15 setzt eine andere Rahmenfarbe des Bildschirms.

POKE 53281,X – Gleichlautend zum oberen Befehl wird die Hintergrundfarbe geändert.

Stelle 53260 – Joystick Port 2:

WAIT 56320,16,16 wartet auf Druck des Feuerknopfes.

WAIT 56320,4,4 – Warten auf Linksbewegung des Joysticks.

WAIT 56320,1,1 – Warten auf Joystick nach oben.

WAIT 56320,2,2 – Warten auf Joystick nach unten.

WAIT 56320,8,8 – Warten auf Rechtsbewegung des Joysticks.

Stelle 56321 – Analog zu Speicherstelle 56320, nur Port 1.

POKE 56325,5 – Der Cursor wird rasend schnell.

POKE 56325,49 – Normalisierung der Cursor-Geschwindigkeit.

POKE 56325,255 – Der Cursor bewegt sich sehr langsam.

PRINT PEEK(56576) – Abfrage der Pins am Userport. Nähere Informationen darüber im Artikel »Die Ports des C 64« in diesem Heft.

POKE 56576,X – Setzen der Ausgaben auf dem Userport. Nähere Informationen finden Sie ebenfalls im oben genannten Artikel.

POKE 56578,X – Datenrichtungsregister Userport. Hiermit wird entschieden, ob die Pins des Userports auf Ein- oder Ausgabeoperationen arbeiten. Informationen darüber im oben erwähnten Artikel.

SYS 42039 – Ausgabe von Fehlermeldungen. Dabei muß in 781 die Fehlernummer gePOKEd werden.

SYS 43121 – Entspricht dem Befehl RUN 0

SYS 45499 – Mittels dieses Befehls wird die interne Uhr auf Null gesetzt.

POKE 214,(Zeile):POKE 211,(Spalte):SYS 58640 – So läßt sich der Cursor ohne umständliche PRINT-Anweisungen auf jede Stelle des Bildschirms positionieren.

SYS 63123 – Dieser Befehl kann eine große Hilfe sein. Angenommen, ein Programm will ein anderes von der Diskette nachladen, findet es aber nicht. Das Programm steigt in diesem Fall mit der Fehlermeldung FILE NOT FOUND aus und die rote LED an der Floppy beginnt zu blinken. Durch diesen SYS können Sie nun feststellen, wie das File heißt, das gesucht wurde.

SYS 64738 – Hiermit wird der Computer in seinen Einschaltzustand versetzt. Das bedeutet: Programme werden gelöscht, Vektoren und Register zurückgesetzt.

SYS 64763 – Führt das gleiche wie SYS 64738 aus bis auf den Vektor für den IRQ, der auf seinem Wert belassen wird.

SYS 65409 – Setzt den Video-Chip wieder in den Ursprungszustand zurück.

SYS 65511 – Dieser Befehl schließt alle zu diesem Zeitpunkt offenen Files. So erspart man sich das lästige Eintippen von CLOSE 1:CLOSE 2:CLOSE 3:... Dabei sollte aber beachtet werden, daß so nur die Kanäle geschlossen werden, aber keine Dateien auf Diskette.

SYS 65493 – LOAD-Routine des Betriebssystems. Mit folgender kleiner Routine kann man Unterprogramme nachladen, ohne irgendwelche Basic-Pointer (zum Beispiel die Zeiger auf die Endadresse, 45 und 46) zu verändern:

POKE 186,1:POKE 780,0:POKE 781,0:POKE 782,96: POKE 183,0:SYS 65493

Erklärung: 186,1 = Geräteadresse für Datasette
781 und 782 geben die Startadresse an, ab der das Programm nachgeladen werden soll.
183,0 = kein Programmname
SYS 65493 = LOAD-Routine

(dm)
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →