POKE

Aus C64-Wiki
Zur Navigation springenZur Suche springen
POKE
Syntax: POKE <Speicheradresse>,<Zahlenwert>
Parameter
<Speicheradresse>: numerischer Ausdruck im Wertebereich von 0 bis 65535
<Zahlenwert>: numerischer Ausdruck im Wertebereich von 0 bis 255
Einordnung
Typ: Anweisung
Kontext: System
Aufgabe: Speicheradresse beschreiben
Abkürzung: pO
Token: $97 (151)
Verwandte Befehle
PEEK

Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl POKE unter BASIC V2 des Commodore 64.
Für die Bedeutung "Schummel-Poke" siehe Cheat.


Mit dem BASIC-Befehl POKE kann an einer beliebigen Speicheradresse im Adressraum des C64 (Adresse 0 bis 65535, siehe Speicherbelegungsplan) ein Zahlenwert von 0 bis 255 (ein Byte) hineingeschrieben werden. Nicht ganzzahlige Werte werden implizit analog zu INT in eine entsprechend vorzeichenlose Ganzzahl umgewandelt.

Liegen die Zahlen nicht in den oben angegebenen Bereichen, erscheint die BASIC-Fehlermeldung ?ILLEGAL QUANTITY ERROR.

Hinweise:

  • Dieser Befehl erlaubt den direkten Zugriff auf die Hardware des C64. Werden "falsche" Werte an "spezielle" Adressen geschrieben, kann der Commodore 64 abstürzen oder sonst ungewohnt reagieren. Erst ein Aus- und Einschalten oder ein Reset stellt dann die gewohnte Arbeitsweise des Commodore 64 wieder her. Beschädigungen können aber nicht auftreten.
  • Im Zusammenhang mit Spielen werden häufig sogenannte Trainer-Pokes, Schummel-Pokes oder Cheat-Pokes genannt, die sich u.U. aber gar nicht (einfach) per BASIC-Befehl POKE eingeben lassen; Details siehe Artikel Cheat.

Trivia: Hartnäckig hielt sich in der C64-Szene das Gerücht von einem sogenannten Killer Poke, der nach Eingabe zu einem Totalschaden des Computers führen soll.

Beispiele[Bearbeiten | Quelltext bearbeiten]

POKE 53280,1

Die Rahmenbildschirmfarbe wird geändert auf Weiß (Zugriff auf ein Register des VIC).

POKE 53281, PEEK (53280)

Die Hintergrundbildschirmfarbe erhält die gleiche Farbe wie die Rahmenfarbe des Bildschirms.

AD=646: ZF=7: POKE AD,ZF

Die Zeichenfarbe wird auf die Farbe gelb gesetzt. Dies geschieht über Variablenzuweisung mit der Speicheradresse in AD und der Zeichenfarbe in ZF.

POKE 1024,1

Der Buchstabe A wird an die erste Position des Bildschirmspeichers geschrieben. Die Bildschirmpositionen 1024 bis 2023 sind vor dem Komma möglich, dahinter ein Zeichencode im Bereich von 0 bis 255.

POKE 788,52

Deaktivieren von RUN/STOP  (Verstellen des Interrupt-Vektors, siehe Zeropage)

POKE 808,225

Deaktivieren von RUN/STOP +RESTORE 

POKE 775,119

LIST-Befehl blockieren (siehe Zeropage).

V=53265 : POKE V,PEEK(V) OR 32

Nur ein Bit (mit Wertigkeit 32) setzen, z.B. den Grafikmodus des VIC aktivieren (Bitmap-Bit, Bit 5 in Register 17).

V=53265 : POKE V,PEEK(V) AND (255-32)

Nur ein Bit (mit Wertigkeit 32) löschen, z.B. den Grafikmodus deaktivieren, siehe Beispiel davor.

10 C=25000  : REM COUNTER-WERT (16-BIT)
20 TA=56324 : REM CIA1 TIMER A LOW COUNTER LATCH
30 POKE TA, C AND 255 : REM LOW BYTE
40 POKE TA+1, C/256   : REM HIGH BYTE

Der Counter-Wert (in Variable C) wird im Timer A des CIA gesetzt (wobei wegen Low-Byte-Rechenweise mittels AND in C nur ein Wert bis 32767 enthalten sein darf). Das High-Byte muss nicht extra mit INT() ganzzahlig gemacht werden, da dies bereits implizit geschieht.

POKE 96,1: PRINT PEEK(96)

Gibt anders als zu erwarten "0" aus: BASIC benutzt intern die Speicherstellen 95/96 ($5F/$60) beim Umwandeln von Konstanten[1] oder auch bei der Variablensuche[2] und überschreibt somit Speicherstelle 96 beim Interpretieren des PEEKs. Das ist ggf. insbesondere beim Aufruf von Systemroutinen per SYS zu beachten.


Siehe auch die Beispiele der BASIC-Funktion PEEK.

Quellen[Bearbeiten | Quelltext bearbeiten]