Ein BASIC-Programm mit PEEK und POKE auf einer CBM 3016 (Foto: © Raimond Spekking / CC BY-SA 4.0 via Wikimedia Commons)

Verlorenes Wissen (6): Von Peeks & Pokes und was man damit macht

Bei jedem C64-Veteranen stellen sich die Ohren auf, wenn er die Wörter „Peek“ und „Poke“ hört. Und wer damals in den frühen Achtzigern seinen Brotkasten selbst programmierte, kriegt nostalgische Gefühle. Unter den interessierten und/oder engagierten C64-Usern galten die Burschen, die ihr Maschinchen mit Peek- und Poke-Befehlen steuerten, als Helden. Denn die waren schon im C64-BASIC enthalten – man musste nur wissen, wo in der Memory-Map die richtigen Adressen lagen, die man sinnvoll peeken und poken konnte. Dieser direkte Zugriff auf die Hardware erlaubte es, dem Commodore bestimmte Grafik- und Soundeffekte abzuringen und generell das Input-Output-Verhalten zu beeinflussen.

Händische Vorbereitung für ein POKE (Screenshot: Video von The Retro Programmer)
Händische Vorbereitung für ein POKE (Screenshot: Video von The Retro Programmer)
Der vielleicht berühmteste Poke lautet „POKE 650, 128“ und bewirkt die Tastenwiederholung, dass also so lange ein Zeichen auf den Monitor geworfen wird, bis man den Finger von der Taste lässt. Wie und warum das funktioniert, erklärt das Peek-und-Poke-Spiel ziemlich gut: Wann immer eine Taste gedrückt wird, schaut das C64-Betriebssystem an der Adresse 650 im Hauptspeicher nach. Findet es dort den Wert 128, wird eine Schleife initiiert, der das zugehörige Zeichen sendet und die Tastaturabfrage erneut auf die Reise schickt. Steht an 650 dagegen eine 0, passiert gar nichts mehr. Mit dem Peek-Befehl kann man dagegen Speicheradressen auslesen – man tut das vor allem, um IF-Abfragen einzusetzen, die je nach dem gefundenen Wert einen anderen Programmteil aufruft.

Teilbereich der C64.Memory-Map - unerlässlich fürs Peeken und Poken (Screenshot: pagetable.com)
Teilbereich der C64.Memory-Map – unerlässlich fürs Peeken und Poken (Screenshot: pagetable.com)
Die Vorstellung aber, PEEK und POKE seien von Commodore für den C64 „erfunden“ worden, ist grundfalsch. Speicheradressen direkt auszulesen oder zu beschreiben ist eine Technik, die schon so lange existiert, wie es programmierbare Computer gibt. Es waren (ja, da staunt selbst der Fachmann…) Bill Gates und Paul Allen, die dem ersten von ihnen verzapften BASIC-Interpreter die Peek- und Poke-Befehle beibogen – beim BASIC für den legendären Eigenbau-Computer Altair. Dort bot sich das Verfahren besonders an, weil das Betriebssystem der Maschine komplett im Hauptspeicher lag und die Liste der Adressen, die sogenannte „Memory-Map“ bekannt war; denn einem Altair hätte man ohne Memory-Map und dem direkten Adressieren des Hauptspeicher schlicht gar nichts hätte entlocken können.

Der ominöse CIA 6526, einer der Chips, die direkt per POKE gesteuert werden konnte (Foto: c64-wiki.de)
Der ominöse CIA 6526, einer der Chips, die direkt per POKE gesteuert werden konnte (Foto: c64-wiki.de)
Ebenfalls nicht weiträumig bekannt ist, dass etliche der Menschen, die für verschiedene Betriebssysteme und Computer BASIC-Interpreter schrieben, sich am Altair-BASIC orientierten. Unter anderem die Programmierer bei Commodore, die PEEK und POKE schon bei den BASICs für die Vorläufersystemen des C64 integrierten. Schon das (übrigens recht fehlerbehaftete) BASIC des PET 2001 kannte die Methode und die Befehle. Bekanntlich war es aber der Commodore 64, der den Homecomputer zu den Massen brachte und vor allem den Freaks, die Bock aufs Programmieren hatten, die Möglichkeit bot, eigene Programme zu kreieren.

Legendär: PEEK+POKE, das C64-Adressbuch von 1984 im Vogel-Verlag
Legendär: PEEK+POKE, das C64-Adressbuch von 1984 im Vogel-Verlag
Aus heutiger Sicht kann man sagen, dass die scheinbar unscheinbaren Befehle PEEK und POKE – auf jeden Fall im deutschsprachigen Raum – dem Markt der Computerbücher und -zeitschriften um 1984 herum einen kräftigen Schub gaben. Denn ohne das veröffentlichte Wissen der Experten tappte Otto Normalprogrammierer im Dunkeln. Die Mit-Digisaurier Christian Spanik und Hannes Rügheimer begründeten zum Beispiel mit dem Band „PEEK+POKE – Das Commodore64 Adressbuch„, erschienen im Vogel-Verlag, ihre Karrieren als Fachjournalisten und -autoren. Ohne den grandiosen Erfolg von „Peeks & Pokes zum Commodore 64“ wäre der Data-Becker-Verlag vielleicht nie so groß geworden. Die Auflagen erreichten schwindelerregende Höhen, und BASIC-Listings mit Peeks und Pokes in den Zeitschriften wurden zehntausendfach abgetippt.

Gab es ihn doch, den Killer-Poke? (Screenshot: c64-wiki.de)
Gab es ihn doch, den Killer-Poke? (Screenshot: c64-wiki.de)
Und doch rankten sich schon damals allerlei Mythen und urbane Legende rund um das Poken eines C64. Immer wieder hörte und las man vom Killer-Poke; würde man einen bestimmten Wert in eine bestimmte Speicheradresse schreiben, so die Legende, würde der 64er-Hardware ein irreparabler Schaden zugefügt – die Kiste wäre hin. Stimmt nicht. Witzige Zeitgenossen brachten mit Peeks und Pokes gespickte Listings unter die Leute, die … NICHTS bewirkten. Und bald entdeckten die Spielwütigen unter den Freaks, dass man die Anzahl der Leben in den Games mit einem POKE jederzeit wieder von Null auf X bringen und den Highscore nach Belieben manipulieren konnte. Und das alles mit BASIC…

Darüber konnte die High Society der C64-Programmierer nur müde grinsen. Die programmierten komplexeste Anwendungen in Maschinensprache, bestenfalls unterstützt vom passenden Assembler; die brauchten keinen PEEK-Befehl, um Adressen auszulesen, und keinen POKE-Befehl um etwas in eine Speicheradresse zu speichern, die nutzten dafür direkte Anweisungen. Für den Rest von uns blieb das ewige C64-BASIC. Übrigens: Auch am Apple II konnte man peeken und poken, am Commodore Amiga und Atari ST selbstverständlich ebenfalls. Aber nie war dieses Verfahren so populär wie beim 64er.

[Bildnachweis – Titel: © Raimond Spekking via Wikimedia Commons unter der Lizenz CC BY-SA 4.0;]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert