POKE

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

POKE (engl. to poke = stupsen, stochern) ist ein Software-Kommando der Programmiersprache BASIC, das dazu dient, direkt in eine Zelle des Arbeitsspeichers eines Rechners zu schreiben.[1] Sein Gegenpart ist der PEEK-Befehl, um Speicherzellen direkt zu lesen.[2]

Funktion[Bearbeiten]

Der POKE-Befehl ruft eine Routine des BASIC-Interpreters auf, die eine dezimale Zahl in eine duale wandelt, und in eine Speicheradresse schreibt. Der PEEK Befehl gibt den Inhalt einer Speicheradresse als Dezimalzahl zurück.[3]

Format
POKE Adresse, Wert

Der maximale Wert der Adresse ist abhängig von der Breite des Adressbus und dem tatsächlich verbauten Arbeitsspeicher. Der maximale Wert ist abhängig von der Breite des Datenbus.

Beispiel
POKE 55296, 2

Färbt auf dem Commodore 64 das Zeichen an der ersten Bildschirmposition oben links rot.[4] Hier ist 55296 die erste Speicheradresse an der, der Video Display Controller die Farbinformationen liest und 2 der einzutragende Wert für die Farbe Rot.

Verwendung[Bearbeiten]

Die Befehle PEEK und POKE wurden von Bill Gates und Paul Allen 1975 in der Programmiersprache Altair BASIC eingeführt.[5]

In der Ära der Heimcomputer wurde der POKE-Befehl oft verwendet, da dies für BASIC-Programme oft die einzige Möglichkeit war, über Hardware-Register bestimmte Grafik- oder Sound-Fähigkeiten des Rechners zu nutzen. Dies verminderte stark die Lesbarkeit und Verständlichkeit der Programme und sorgte zugleich dafür, dass solche Programme in keiner Weise portabel zwischen verschiedenen Computermodellen und deren unterschiedlichen Chipsätzen waren – sogar zwischen verschiedenen Modellen oder Baureihen des gleichen Herstellers waren POKE-Befehle oft nicht übertragbar.

Da mit dem POKE-Befehl auch Zeiger und Daten des Betriebssystems überschrieben werden konnten, kam es oft nicht zu einer ordentlichen Fehlermeldung, sondern zu einem Computerabsturz, der Zerstörung des Programms oder der Daten im Speicher bzw. unerwünschte optische oder akustische Effekten. Im besten Falle geschah auch einfach überhaupt nichts, die Fehlersuche war oft erheblich erschwert.

In den Zeiten der 8-Bit-Computer mit geringem Speicherplatz und niedriger Prozessorgeschwindigkeit wurden Peripheriegeräte oft direkt vom Betriebssystem unter Verzicht auf eine Treiberarchitektur angesteuert. Spezielle Funktionen konnten teilweise nur mittels Zeichenfolgen genutzt werden. Diese wurden mit POKE-Befehlen eingegeben.[6]

Heutige Bedeutung[Bearbeiten]

Auf heutigen Systemen und unter Verwendung aktueller BASIC-Varianten ist die Verwendung von POKE obsolet. Für andere Programmiersprachen (Compilersprachen) die nativen Code erzeugen, wird POKE grundsätzlich nicht benötigt. Heutige CPUs verwenden zu Adressbildung ausschließlich die MMU, welche die logische Adresse von der physikalischen abstrahiert und durch spezielle Schutzmechanismen die direkte Speichermanipulation unterbindet (Speicherschutzverletzung). Hinzu kommt, dass moderne Betriebssysteme mit wenigen Ausnahmen nicht mehr über einen statischen Speicherbelegungsplan verfügen, bei dem bestimmte Inhalte stets an denselben Adressen vorgefunden werden können. Der Zugriff auf Hardware-Ressourcen erfolgt dann nicht über fixe Adressen, sondern über Gerätetreiber, welche wiederum dafür vorgesehene Speicherbereiche auslesen und beschreiben.

Weblinks[Bearbeiten]

POKE im C64-Wiki (mit Anwendungsbeispielen)

Einzelnachweise[Bearbeiten]

  1. POKE. In: Microsoft QuickBasic 4.5 Advisor. Microsoft, 1990, abgerufen am 27. Februar 2014 (englisch).
  2. PEEK. In: Microsoft QuickBasic 4.5 Advisor. Microsoft, 1990, abgerufen am 27. Februar 2014 (englisch).
  3. Karl Heinz Koch, PEEKS & POKES zu Atari 600XL/800XL, Düsseldorf: Data Becker (1985) ISBN 3-89011-082-7
  4. Alles über den Commodore 64 Programmierhandbuch, Frankfurt am Main: Commodore Büromaschinen GmbH (1984) ISBN 3-89133-000-6 S.375
  5. N.Montfort, P.Baudoin, J.Bell, I.Bogot, J.Douglass u.a. 10PRINT CHR$(205.5+RND(1)); : GOTO 10 Cambridge, MIT Press (2013) ISBN 978-0-262-01846-3 S.171 (Online. Abgerufen am 26. Februar 2014 (PDF 50 MB, englisch).)
  6. Beispielsweise das Löschen einer Datei von Diskette, oder die Wahl besonderer Schriftarten von Druckern. Vgl. Alles über den Commodore 64. Programmierhandbuch, S.329-361