POKE mal wieder
Viele C 64-Benutzer haben sich sicher schon mit dem Basic des C 64 herumgeärgert: Egal, was man machen will, fast alles läuft über PEEK und POKE. Doch gerade diese POKEs helfen manchmal erheblich, wenn es um Probleme geht, die mit einfachen Basic-Befehlen nicht zu lösen sind.
Hier nun eine Liste von wichtigen PEEKs, POKEs und SYS-Befehlen.
1 | Inhalt 55 = normal Inhalt 54 = Basic ausgeschaltet (auf RAM umgestellt) Inhalt 53 = Basic und Kernal auf RAM umgestellt. (Es empfiehlt sich dabei, das Basic und das Kernal vorher ins RAM zu POKEn, damit der Computer bei der Umschaltung nicht aussteigt.) |
17 | Mit diesem PEEK läßt sich abfragen, wie die letzte Variable zugewiesen wurde. Ist PEEK(17) = 00, dann war die letzte Variablenzuweisung ein INPUT, oder es hat noch keine Zuweisung stattgefunden. Ist PEEK(17) = 64, dann wurde die letzte Variable durch GET geholt. Bei PEEK(17) = 152 erfolgte die letzte Variablenübergabe durch einen READ-Befehl. |
19 | Durch POKE 19,64 wird beim nächsten INPUT-Befehl kein Fragezeichen mehr ausgegeben. Allerdings kann man nachher durch Drücken der RETURN-Taste nicht mehr in die nächste Zeile gelangen. Es empfiehlt sich daher, nach dem INPUT-Befehl diesen Befehl wieder mit POKE 19,0 rückgängig zu machen. |
43/44 | Der Anfang des zur Zeit im Speicher befindlichen Basic-Programms errechnet sich durch PEEK(43) + PEEK(44)*256. |
45/46 | Das Ende des Basic-Programms erhält man durch ?PEEK(45) + PEEK(46)*256. |
61/62 | Zeiger auf Basic-Statement für CONT: Durch PEEK(61)+PEEK(62)*256 erhält man die Speicherstelle, die nach dem zuletzt ausgeführten Basic-Befehl liegt, das heißt die Speicherstelle, von der sich der Basic-Interpreter bei CONT den nächsten Befehl holt. Tip: Bei CONT kommt öfter CAN’T CONTINUE ERROR vor, wenn man nach dem Stoppen ein CLR eingegeben oder in irgendeiner Programmzeile etwas geändert hat. Liest man die Werte mit PEEK(61) und PEEK(62) nach der Unterbrechung aus, dann macht ein CLR oder ähnliches nichts aus, wenn man vor CONT die zuvor ausgelesenen Werte wieder in die Speicherstellen POKEt. |
63/64 | Nummer der aktuellen DATA-Zeile: Mit ?PEEK(63) + PEEK(64) * 256 erhält man die Nummer der DATA-Zeile, aus der gerade das letzte Datum geholt wurde. (Gut zum Finden von Fehlern in DATA-Zeilen geeignet.) |
69/70 | Name der zuletzt zugewiesenen Variable: Bei normalen Fließkommavariablen liest man den Wert mit PRINT CHR$(PEEK(69)) + CHR$(PEEK(70)) aus. Bei Integervariablen (zum Beispiel XY%) erhält man den Namen durch ?CHR$(PEEK(69)-128)+CHR$(PEEK(70)-128). Strings (zum Beispiel VX$) erhält man durch ?CHR$(PEEK(69))+CHR$(PEEK)70)-128). |
120 | Nach Ausführung dieses POKEs nimmt der C 64 keinerlei Befehle mehr an: POKE 120,2 |
147 | Wenn man die LOAD-Routine im Betriebssystem anspringt, holt es sich aus der Speicherstelle 147 die Information, ob LOAD oder VERIFY durchgeführt wird. Inhalt 0 = LOAD Inhalt 4 = VERIFY |
157 | Ausgabe-Kontrolle: Inhalt 000 = Programm-Modus Inhalt 128 = Direktmodus Damit bei LOAD-Befehlen vom Programm aus die Mitteilungen SEARCHING, LOADING oder VERIFYING auf dem Bildschirm erscheinen, setzt man vor dem LOAD-VERIFY- oder SAVE- Befehl ein POKE157,128. |
197 | Derzeitiger Tastendruck: PEEK(197) |
200 | Zeiger auf Zeilenende. PEEK(200) gibt an, wieviel Zeichen die zuletzt eingegebene Zeile hatte. |
204 | Nach POKE 204,0 bleibt der Cursor an, auch bei GET-Befehlen. Mit POKE 207,0:POKE 204,1 kommt man dann wieder auf den Normalzustand zurück. |
641-644 | Start- und Endadresse des Basic-RAMs: Durch Ändern dieser Werte kann man die Größe des Basic-RAMs verändern, zum Beispiel: POKE 643,0 : POKE 644,128 : SYS 64764 setzt das Ende des Basic-RAMs um 8 KByte nach unten. Anderes Beispiel: POKE 641,0 : POKE 642,16 : SYS 64764 setzt das Basic-RAM um 2 KByte nach oben. |
646 | POKE 646,Farbwert setzt die Cursorfarbe. |
653 | PEEK für Shift-, Commodore- und für CTRL-Taste: Bit 0 = Shift-Taste, Bit 1 = Commodore-Taste und Bit 2 = Control-Taste. |
788/789 | IRQ, Hardware-Interrupt: Das Betriebssystem springt ständig in diese Routine, durch Ändern des Inhalts kann man eigene, »interruptgesteuerte« Maschinenroutinen ständig laufen lassen. |
792/793 | Restore-Vektor: PEEK(792) + PEEK(793)*256 ergibt die Speicherstelle, an die bei Restore-Tastendruck gesprungen wird. Beispiel: Bei POKE 792,226 : POKE 793,252 wird bei Drücken der Restore-Taste ein Reset ausgelöst. |
828-1019 | Kassettenpuffer: Nach Laden oder Verify stehen im Kassettenpuffer folgende Informationen: 828: 1 = normales File, 3 = wurde mit SAVE”Name”,1,1 abgespeichert. Solche Programme werden bei LOAD automatisch ab der Adresse geladen, von der sie abgespeichert wurden. 829/830: Hier ist die Startadresse des Programms abgelegt (829 ist das Low-Byte, 830 das High-Byte). 831/832: Endadresse des Programms. 833-1019: 186 Zeichen langer Programmname (auf dem Bildschirm werden nur 16 angezeigt, aber es lassen sich bis 186 Stellen lange Programmnamen abspeichern). Der Kassettenpuffer ist auch gut zum Ablegen eigener Maschinenprogramme geeignet, sofern mit der Floppy gearbeitet wird. |
42291 | Koppeladressen angleichen: Falls Programme mit NEW gelöscht wurden, kann man mit diesem SYS-Befehl die Bytes 2049 und 2050 wieder in Ordnung bringen, wenn vorher etwas anderes als 0 in diese Speicherzellen gePOKEt wird. |
56320 | Joystick Port 2: WAIT 56320,16,16 wartet auf Feuerknopf WAIT 56320,4,4 wartet auf Linksbewegung des Joysticks WAIT 56320,1,1 wartet auf Joystick nach oben WAIT 56320,2,2 wartet auf Joystick nach unten WAIT 56320,8,8 wartet auf Joystick nach rechts |
56321 | Wie 56320, aber Joystick in Port 1. |
56576 | Mit PEEK(56576) kann man die Pins PB0-PB7 vom User-Port (auf der Unterseite des Ports, siehe Handbuch) auslesen. Mit POKE in diese Speicherstelle kann man auch Ausgaben über den User-Port laufen lassen. |
56578 | Datenrichtungsregister für User-Port: Jedes der Bits gibt die Datenrichtung für die Pins PB0-PB7 des User-Ports an. Ist das entsprechende Bit gesetzt, so fungiert der dem Bit zugeordnete Pin als Ausgang, bei nicht gesetztem Bit als Eingang. |
65409 | SYS 65409 setzt den Video-Chip des C 64 auf den Ursprungszustand zurück. |
65493 | LOAD-Routine des Betriebssystems. Mit folgender kleiner Routine kann man Unterprogramme nachladen, ohne irgendwelche Basic-Pointer (wie 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 Recorder 781 und 782 gibt die Startadresse an, ab der das Programm geladen werden soll. 183,0 = kein Programmname. SYS 65493 = LOAD-Routine. |
65511 | Durch SYS 65511 lassen sich alle Files schließen. So erspart man sich das lästige Eintippen von CLOSE1:CLOSE2:CLOSE3... Dabei sollte aber beachtet werden, daß so nur der Kanal geschlossen wird, aber keine Dateien auf einer Disk. |
Auf PEEKs und POKEs für Grafik und Sprites wurde hier verzichtet, da die Grafik und die Sprites im Grafikkurs von H. Ponnath schon sehr ausführlich beschrieben sind.
(M. Kohlen/gk)