POKE

Aus C64-Wiki
Wechseln zu: Navigation, Suche
POKE
Format: 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
Verwandte Befehle
PEEK

Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl POKE unter BASIC V2 des Commodore 64.


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

Hinweis: 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 Ein- und Ausschalten oder ein Reset stellt dann die gewohnte Arbeitsweise des Commodore 64 wieder her. Beschädigungen können aber nicht auftreten.

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


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]

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.
Generell sollte hier keine Ganzzahlvariable (z.B. AD%) verwendet werden, da eine solche keine Adressen größer 32767 aufnehmen kann und auch sonst keine Laufzeit- oder Platzvorteile bietet.

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 die Zeichencodes 0-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.


Siehe auch die Beispiele der BASIC-Funktion PEEK.