<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=POKE_und_PEEK</id>
	<title>POKE und PEEK - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=POKE_und_PEEK"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=POKE_und_PEEK&amp;action=history"/>
	<updated>2026-06-09T02:26:14Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=POKE_und_PEEK&amp;diff=291809&amp;oldid=prev</id>
		<title>imported&gt;Mielas: Linkfix</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=POKE_und_PEEK&amp;diff=291809&amp;oldid=prev"/>
		<updated>2026-02-27T12:34:12Z</updated>

		<summary type="html">&lt;p&gt;Linkfix&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Datei:Monitor Commodore CBM 3016 with BASIC program-0309.jpg|mini|Monitor eines [[CBM-3000-Serie|CBM 3016]] mit [[Commodore BASIC|Commodore-BASIC]]-Programm, das in Zeile 100 PEEK und POKE in einer [[For-Schleife|FOR-Schleife]] verwendet.]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;POKE&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;{{enS|to poke}}&amp;#039;&amp;#039; = stecken, stoßen) ist eine [[Anweisung (Programmierung)|Anweisung]] der [[Programmiersprache]] [[BASIC]], die dazu dient, einen als Zahl angegebenen Wert (bei [[8-Bit-Architektur]]en ein [[Oktett (Informatik)|Oktett]] bzw. [[Byte]]) in die angegebene [[Speicheradresse]] im [[Adressraum]] des [[Prozessor]]s (der CPU) zu speichern.&amp;lt;ref&amp;gt;{{Internetquelle | url = http://www.qbasicnews.com/qboho/qckpoke.shtml | titel = POKE | werk = Microsoft QuickBasic 4.5 Advisor | zugriff = 2014-02-27 | datum = 1990 | hrsg = Microsoft | sprache = englisch | archiv-url = https://web.archive.org/web/20110516170056/http://www.qbasicnews.com/qboho/qckpoke.shtml | archiv-datum = 2011-05-16 | offline = ja  }}&amp;lt;/ref&amp;gt; Sein Gegenpart ist die &amp;#039;&amp;#039;&amp;#039;PEEK&amp;#039;&amp;#039;&amp;#039;-Interpreterfunktion (&amp;#039;&amp;#039;{{enS|to peek}}&amp;#039;&amp;#039; = gucken, spähen, nachsehen), mit der von einer Adresse gelesen wird; der gelesene Wert wird dem BASIC-Programm als [[Return Code|Rückgabewert]] übergeben.&amp;lt;ref&amp;gt;{{Internetquelle | url = http://www.qbasicnews.com/qboho/qckpeek.shtml | titel = PEEK | werk = Microsoft QuickBasic 4.5 Advisor | zugriff = 2014-02-27 | datum = 1990 | hrsg = Microsoft | sprache = englisch | archiv-url = https://web.archive.org/web/20110516170043/http://www.qbasicnews.com/qboho/qckpeek.shtml | archiv-datum = 2011-05-16 | offline = ja  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit der POKE-Anweisung kann beispielsweise der Inhalt einer Speicherzelle des [[Arbeitsspeicher]]s des [[Computer|Rechners]] manipuliert werden. Daneben werden mit POKE und PEEK die [[Hardwaresteuerregister]] von [[Peripheriebaustein]]en des Computers für das BASIC-Programm zugänglich, sofern das Computersystem mit [[Memory Mapped I/O]] arbeitet.&lt;br /&gt;
&lt;br /&gt;
Die Befehle PEEK und POKE wurden von [[Bill Gates]] und [[Paul Allen]] 1975 in der Programmiersprache [[Altair BASIC]] eingeführt.&amp;lt;ref&amp;gt;N.Montfort, P.Baudoin, J.Bell, I.Bogot, J.Douglass u.&amp;amp;nbsp;a. &amp;#039;&amp;#039;10PRINT CHR$(205.5+RND(1)); : GOTO 10&amp;#039;&amp;#039; Cambridge, MIT Press (2013), ISBN 978-0-262-01846-3, S. 171 ({{Internetquelle |url=http://trope-tank.mit.edu/10_PRINT_121114.pdf |titel=Online |format=PDF 50&amp;amp;nbsp;MB |sprache=englisch |zugriff=2014-02-26 |archiv-url=https://web.archive.org/web/20130818163223/http://trope-tank.mit.edu/10_PRINT_121114.pdf |archiv-datum=2013-08-18 |offline=ja  }})&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Funktion ==&lt;br /&gt;
Der POKE-Befehl ruft eine [[Routine (Programmierung)|Routine]] des BASIC-[[Interpreter]]s auf, die einen Schreibzugriff mit den beiden Parametern für &amp;#039;&amp;#039;Adresse&amp;#039;&amp;#039; und &amp;#039;&amp;#039;Wert&amp;#039;&amp;#039; durchführt. Die PEEK-Funktion wertet ihren Parameter als Adresse aus, führt einen Lesezugriff auf ebendiese Adresse aus und übergibt das Resultat als Rückgabewert an das BASIC-Programm.&lt;br /&gt;
;Format&lt;br /&gt;
:&amp;lt;code&amp;gt;POKE &amp;#039;&amp;#039;Adresse, Wert&amp;#039;&amp;#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;#039;&amp;#039;Wert&amp;#039;&amp;#039; = PEEK(&amp;#039;&amp;#039;Adresse&amp;#039;&amp;#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der maximale Wert der Adresse ist abhängig von der Breite des [[Bus (Datenverarbeitung)#Adressbus|Adressbusses]]. Der maximale Wert ist abhängig von der Breite des [[Bus (Datenverarbeitung)#Datenbus|Datenbusses]]. Bei 8-Bit-Architekturen sind typische Werte 0 bis 65535 für eine 16-Bit-Adresse und 0 bis 255 für einen 8-Bit-Wert. Sollte das zugrundeliegende Computersystem in seiner [[Speicherbelegung]] Lücken aufweisen und auch keine [[Adressierungsfehler]]-[[Ausnahmebehandlung]] implementiert sein, so bewirkt eine POKE-Anweisung auf eine unbelegte Adresse nichts, während die entsprechende PEEK-Funktion einen undefinierten Rückgabewert liefert.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
;Beispiel:&amp;lt;code&amp;gt;POKE 55296, 2&amp;lt;/code&amp;gt;&lt;br /&gt;
Färbt auf dem [[Commodore 64]] das Zeichen an der ersten Bildschirmposition oben links rot.&amp;lt;ref&amp;gt;&amp;#039;&amp;#039;Alles über den Commodore 64 Programmierhandbuch&amp;#039;&amp;#039;, Frankfurt am Main: Commodore Büromaschinen GmbH (1984) ISBN 3-89133-000-6 S.375&amp;lt;/ref&amp;gt; Mit Adresse 55296 beginnt der Speicherbereich, mit dem der Prozessor auf die Register zugreifen kann, aus denen der [[Video Display Controller]] &amp;#039;&amp;#039;[[MOS Technology VIC II|VIC II]]&amp;#039;&amp;#039; die Farbinformationen ermittelt &amp;#039;&amp;#039;(Farb-RAM).&amp;#039;&amp;#039; 2 steht für die Farbe Rot.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Verwendung ==&lt;br /&gt;
In der Ära der [[Heimcomputer]] wurde der POKE-Befehl oft verwendet, da dies für BASIC-Programme auf vielen Systemen die einzige Möglichkeit ist, bestimmte [[Grafik]]- oder [[Soundkarte|Sound]]-Fähigkeiten des Rechners zu nutzen, die zwar von der benutzten Hardware, nicht aber durch im BASIC-Interpreter eingebaute Befehle unterstützt werden. Das BASIC-Programm erhält so Zugriff auf die Hardwaresteuerregister und steuert damit die Hardware direkt; eine Aufgabe, die nach zeitgenössischer Terminologie einem [[Gerätetreiber]] zufallen würde.&lt;br /&gt;
;Beispiel:&amp;lt;code&amp;gt;POKE 53265, PEEK(53265) OR 32&amp;lt;/code&amp;gt;&lt;br /&gt;
::Setzt durch Lesen mittels &amp;#039;&amp;#039;PEEK,&amp;#039;&amp;#039; Modifizieren mittels &amp;#039;&amp;#039;OR 32&amp;#039;&amp;#039; und Zurückschreiben mittels &amp;#039;&amp;#039;POKE&amp;#039;&amp;#039; Bit&amp;amp;nbsp;5 (das mit der Wertigkeit 2&amp;lt;sup&amp;gt;5&amp;lt;/sup&amp;gt;&amp;amp;nbsp;=&amp;amp;nbsp;32) im Register 17 des [[Peripheriebaustein]]s &amp;#039;&amp;#039;[[VIC&amp;amp;nbsp;II]]&amp;#039;&amp;#039; (des [[Video Display Controller]]s) in einem [[Commodore 64]]; dort hat der VIC&amp;amp;nbsp;II (durch [[Memory Mapped I/O]]) die Basisadresse D000&amp;lt;sub&amp;gt;16&amp;lt;/sub&amp;gt;&amp;amp;nbsp;=&amp;amp;nbsp;53248, Register 17 liegt demnach an Adresse 53248&amp;amp;nbsp;+&amp;amp;nbsp;17&amp;amp;nbsp;=&amp;amp;nbsp;53265. Das gesetzte Bit&amp;amp;nbsp;5 dieses Registers bewirkt, dass der Bitmap-Grafikmodus aktiviert wird.&amp;lt;ref&amp;gt;{{Internetquelle |url=http://www.c64-wiki.de/index.php/POKE |titel=POKE |werk=C64 Wiki |zugriff=2015-04-14}}&amp;lt;/ref&amp;gt; Die Verknüpfung mit &amp;#039;&amp;#039;OR&amp;#039;&amp;#039; bewirkt, dass alle gelesenen Bits unverändert zurückgeschrieben werden – bis auf das Bit 5, das zustandsunabhängig gesetzt wird. Analog hierzu kann Bit 5 mit &amp;lt;code&amp;gt;POKE 53265, NOT(PEEK(53265)) NOR 32&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;POKE 53265, PEEK(53265) AND NOT(32)&amp;lt;/code&amp;gt; zustandsunabhängig gelöscht und mit &amp;lt;code&amp;gt;POKE 53265, NOT(PEEK(53265)) XNOR 32&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;POKE 53265, PEEK(53265) XAND NOT(32)&amp;lt;/code&amp;gt; zustandsabhängig umgeschaltet (&amp;#039;&amp;#039;toggle&amp;#039;&amp;#039;) werden.&lt;br /&gt;
&lt;br /&gt;
Mit POKE-Anweisungen können gezielt bestimmte Daten des Betriebssystems geändert werden, um vom Anwender gewünschte Effekte zu erzielen – beispielsweise Ändern der [[Tastenwiederholung]]. Ein anderes Beispiel aus dieser Kategorie für die PEEK-Funktion ist, das bloße Drücken der Shift-Taste (ohne weitere Taste) zu erkennen, wenn das Betriebssystem dafür anderweitig keine Möglichkeit bietet.&lt;br /&gt;
;Beispiel:&amp;lt;code&amp;gt;POKE 650, 128&amp;lt;/code&amp;gt;&lt;br /&gt;
::Tastenwiederholung für alle Tasten eines Commodore 64 aktivieren. An Adresse 650 (eine normale Hauptspeicheradresse im Bereich der Betriebssystem-Verwaltungsdaten) schaut der Tastaturabfrage-Teil des Betriebssystems nach, wie die Tastenwiederholung arbeiten soll. Der Wert 128 bewirkt, dass alle Tasten wiederholt werden; Alternativen sind &amp;#039;&amp;#039;keine Taste wird wiederholt&amp;#039;&amp;#039; sowie &amp;#039;&amp;#039;nur Cursor- und Löschtasten und Leerschlag werden wiederholt.&amp;#039;&amp;#039;&lt;br /&gt;
;Beispiel:&amp;lt;code&amp;gt;IF PEEK(653) AND 1 THEN …&amp;lt;/code&amp;gt;&lt;br /&gt;
::Abfrage des Shift-Indikator-Bits (Bit 0 (mit der Wertigkeit 2&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;&amp;amp;nbsp;=&amp;amp;nbsp;1) des Bytes an Adresse 653) der Betriebssystem-Tastaturabfrage eines Commodore 64.&amp;lt;ref&amp;gt;{{Internetquelle |url=http://sta.c64.org/cbm64mem.html |titel=Commodore 64 memory map |zugriff=2015-04-16}}&amp;lt;/ref&amp;gt; Der Teil hinter THEN wird nur ausgeführt, wenn die Shift-Taste gerade gedrückt ist.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Anwendung ist ein BASIC-Programm, das für seine Aufgabe eine in [[Maschinensprache]] erstellte Unterroutine benutzt. Statt diese Unterroutine (mitunter nur wenige Bytes) als eigene [[Binärdatei]] vom [[Massenspeicher]] (in der Heimcomputer-Ära oft einfache [[Kassettenrekorder]] bzw. [[Datasette]]n) zu laden, wird das [[Dump|Speicherabbild]] der Unterroutine als Zahlenfolge im BASIC-Programm abgelegt. Während der Initialisierungsphase schreibt das BASIC-Programm dieses Speicherabbild in einer [[Schleife (Programmierung)|Schleife]] mittels POKE-Anweisungen an die gewünschten Ziel-Speicheradressen, so dass die Unterroutine anschließend dort aufgerufen werden kann. Bekannt ist auch das [[Patch (Software)|Patchen]] (Modifizieren) von Maschinenspracheprogrammen durch gezielte POKE-Anweisungen nach dem Laden vom Massenspeicher und vor Programmstart&amp;amp;nbsp;– insbesondere zum [[Cheat (Computerspiele)#Speichermanipulation|Cheaten]] von Computerspielen. In der einschlägigen Szene sind beispielsweise Cheats bekannt, mit denen die Spielerfigur unverwundbar ist oder ihr zumindest deutlich mehr „Leben“ zur Verfügung stehen. Die Kombination von Wert und Adresse ist für jedes Programm bzw. Spiel individuell (ermittelt beispielsweise mit Methoden des [[Reverse Engineering]]s) und wird bisweilen selbst als &amp;#039;&amp;#039;POKE&amp;#039;&amp;#039; bezeichnet (z.&amp;amp;nbsp;B. „POKE-Liste“ im Sinne von &amp;#039;&amp;#039;Auflistung von Cheats&amp;#039;&amp;#039;).&lt;br /&gt;
&lt;br /&gt;
Um als Programmierer zu wissen, welche Kombinationen von Adressen und Werten einen gewünschten Zweck erfüllen, hilft das Studium von Dokumentation (Bedienungsanleitungen und Datenblättern) sowie weiterer Literatur (auch Artikel in Fachzeitschriften) zu den Peripheriebausteinen, zum Betriebssystem etc.&lt;br /&gt;
&lt;br /&gt;
Die Benutzung von POKE-Anweisungen vermindert vielfach die Lesbarkeit und Nachvollziehbarkeit des Programm-Textes; zugleich ist sie die Ursache dafür, dass entsprechende Programme kaum [[Plattformunabhängigkeit|portabel]] zwischen verschiedenen Computermodellen und deren unterschiedlichen Chipsätzen sind&amp;amp;nbsp;– auch zwischen verschiedenen Modellen oder Baureihen des gleichen Herstellers sind POKE-Befehle oft nicht übertragbar. Die Beispiele oben zur Tastatursteuerung für den Commodore 64 lassen sich auf den [[Commodore VC 20]] übertragen, da sich die Betriebssysteme diesbezüglich sehr ähneln. Die Video Display Controller beider Rechner unterscheiden sich allerdings nicht nur in ihrer Position im Speicherbelegungsplan, sondern auch im inneren Aufbau –&amp;amp;nbsp;hier: es gibt beim VC&amp;amp;nbsp;20 keinen Bitmap-Grafikmodus&amp;amp;nbsp;–, sodass das Beispiel für das Aktivieren des Bitmap-Grafikmodus beim VC&amp;amp;nbsp;20 keine Entsprechung hat.&lt;br /&gt;
&lt;br /&gt;
Da mit dem POKE-Befehl auch Verwaltungsdaten des [[Betriebssystem]]s überschrieben werden können, kommt es bei unbedachtem Einsatz oft nicht zu einer ordentlichen [[Fehlermeldung]], sondern zu einem [[Absturz (Computer)|Computerabsturz]]&amp;amp;nbsp;– mit potentieller Zerstörung des Programms oder der Daten im Speicher. Auch können unerwünschte optische oder akustische Effekte auftreten, wenn Fehler bei der Programmierung der Hardwaresteuerregister auftreten. Im besten Falle geschieht einfach nichts. Die [[Debugger|Fehlersuche]] ist durch die erwähnten Effekte erheblich erschwert.&lt;br /&gt;
&lt;br /&gt;
== Heutige Bedeutung ==&lt;br /&gt;
Auf heutigen Systemen und unter Verwendung aktueller BASIC-Varianten ist die Verwendung von POKE obsolet. Heutige CPUs verwenden zu Adressbildung ausschließlich die [[Memory Management Unit|MMU]], welche die logische Adresse von der physikalischen abstrahiert und durch spezielle Schutzmechanismen die direkte Speichermanipulation unterbindet ([[Schutzverletzung|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önnten. Der Zugriff auf Hardware-Ressourcen erfolgt dann nicht über fixe Adressen, sondern über [[Gerätetreiber]], welche wiederum dafür vorgesehene Speicherbereiche auslesen und beschreiben.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{C64-Wiki|POKE|POKE}} (mit Anwendungsbeispielen)&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Normdaten|TYP=s|GND=4607469-7}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:BASIC]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Mielas</name></author>
	</entry>
</feed>