Erschienen in 64'er Magazin, Ausgabe unbekannt · Originaldatei: POKEFIND.TXT
Hinweis: Dies ist das an die Redaktion eingereichte Manuskript, nicht der gedruckte Endtext. Layout, Bildunterschriften, Korrekturen und Kürzungen der Redaktion können in der veröffentlichten Fassung abweichen.
Spielen ohne Ende! - Der Pokefinder
Wäre es nicht eine schöne Sache, für jedes beliebige Spiel auf dem C 64 einen Trainerpoke zu haben? Zu vielen Spielen gibt es diese Mogeltricks tabellarisch zum Beispiel in 64'er-Sonderheften. Und wenn Ihr Lieblingsspiel nicht dabei ist? Der Pokefinder ist ein kurzes Programm, das in Maschinensprache geschriebene Spiele gezielt nach Speicherzellen absucht, die sich für einen Trainerpoke eignen. Ggf. wird konkret der richtige POKE-Befehl angezeigt. Stürmen auch Sie die Highscorelisten, machen Sie die höheren Level unsicher!
Nikolaus M. Heusler
Obwohl der Pokefinder aus Geschwindigkeitsgründen vollständig in optimierter Maschinensprache geschrieben ist, ist die Anwendung ganz einfach. Laden Sie wie gewohnt Ihr Lieblingsspiel. Für den Fall, daß es nicht entpackt (zu erkennen daran, daß es unmittelbar nach der Eingabe des Startbefehles losgeht) und beim Laden nicht automatisch startet, laden Sie danach ohne das Spiel zu starten den Pokefinder. Listen Sie erst noch das geladene Spiel und schreiben sich den angezeigten Befehl (meist ein SYS-Befehl) auf, der das Spiel startet. Sodann wird der Befehl
LOAD "POKEFINDER 52959",8,1
mit RETURN eingegeben. Nach dem Laden muß NEW eingegeben werden. Starten Sie jetzt den Pokefinder mit dem Befehl
SYS 52959
Auf dem Bildschirm erscheint die Frage »HOW MANY LIVES NOW?« mit der Vorgabe 3 und einem blinkenden Cursor. Geben Sie hier ein, wie viele Leben die Spielfigur nach dem Start des Spieles hat. Diese Eingabe wird dringend benötigt, damit das Programm nach diesem Wert suchen kann. Die Eingabe wird mit der RETURN-Taste bestätigt. Die Meldung »SEARCHING« leitet den Suchvorgang, der wenige Sekunden dauert, ein. Jetzt erscheinen ggf. die POKE-Befehle, mit denen Sie der Spielfigur Unsterblichkeit verleihen können. Hinter dem Wort POKE erscheinen dezimal durch ein Komma getrennt die Speicherzelle und der zu pokende Inhalt. Hinter dem eigentlichen POKE-Befehl, der später genau so eingegeben werden kann, erscheinen durch ein Dollarzeichen markiert die Angaben noch einmal hexadezimal für die Anwender eines Speicher-Monitors. Diese Daten einschließlich des Dollarzeichens werden nicht eingegeben! Notieren Sie sich den/die POKE-Befehl(e), schalten Sie den Computer kurz aus und wieder ein und laden dann das Spiel erneut ganz normal. Geben Sie jetzt nacheinander alle angezeigten POKE-Befehle ein. Erst danach wird das Spiel ganz normal, zum Beispiel mit RUN oder dem vorher notierten SYS-Befehl gestartet. Haben Sie jetzt unendlich viele Leben, müssen Sie nur noch durch Probieren herausfinden, welche(r) der angezeigten POKEs (falls mehr als einer) denn nun wirklich notwendig ist/sind. Führt das POKEn jedoch nicht zum Erfolg, fahren Sie wie folgt beschrieben fort.
Hat der Pokefinder keine POKE-Befehle gefunden, probieren Sie es noch einmal mit SYS 52959, geben diesmal jedoch die um eins erniedrigte Zahl der Leben ein. Schreiben Sie sich wieder angezeigte POKEs auf und verfahren damit wie oben beschrieben. Da manche Programm-Routinen bei Null mit der Zählung beginnen, kann dieser Weg zum Erfolg führen. Gelingt auch das nicht, geben Sie im dritten Versuch die um eins erhöhte Zahl der Leben ein. Funktioniert auch das nicht wie gewünscht, fahren Sie wie folgt beschrieben fort.
Probleme können bei Spielen auftreten, die nach dem Start mit RUN erst einige Sekunden brauchen, um sich zu »entpacken«. In diesem Fall oder wenn die bisher beschriebenen Methoden nicht zum Erfolg geführt haben, starten Sie das Spiel nach dem Laden wie gewohnt. Warten Sie, bis das Spielfeld auf dem Bildschirm erscheint. Jetzt soll das Spiel unterbrochen werden, beispielsweise mit RUN STOP/RESTORE oder, wenn das nicht klappt, mit der Reset-Taste, ggf. unter Zuhilfenahme eines geeigneten Moduls zur Umgehung des Reset-Schutzes. Listen Sie, wenn Sie wieder im Basic-Direktmodus sind, ggf. nach Ausführung eines Renew, den Basic-Speicher. Erscheinen sinnvolle Befehle, notieren Sie sich diese, um später das Spiel wieder starten zu können.
Jetzt erst wird der Pokefinder geladen und gestartet:
LOAD "POKEFINDER 52959",8,1
NEW
SYS 52959
Geben Sie die Anzahl der Leben ein, die der Computer zum Zeitpunkt des Abbruchs auf dem Bildschirm angezeigt hat. Erscheinen POKE-Befehle, sollten diese notiert werden. Wenn nicht, probieren Sie es erst nocheinmal mit der um eins verminderten Anzahl an Leben, dann mit der um eins erhöhten.
Noch ein Tip: Manche Spiele verwenden direkt den Bildschirmspeicher zur Speicherung der Anzahl der Leben. Hatten Sie bisher kein Erfolgserlebnis, probieren Sie einmal, die angezeigte (!) Anzahl der Leben plus 48 einzugeben. Immer noch nicht? Dann geben Sie als letzten Versuch die Anzahl der Leben plus 176 (reverse Darstellung) ein.
Haben Sie POKEs gefunden und notiert, schalten Sie den Computer kurz aus und wieder ein, laden das Spiel, starten aber nicht. Jetzt werden alle gefundenen POKEs eingegeben, danach erst wird gestartet. Glück haben Sie, wenn die Spielfigur jetzt unsterblich ist. Dann müssen Sie nur noch den/die richtigen POKE(s) herausfinden.
Wahrscheinlicher ist es jedoch, daß dieser Versuch mißlingt. Dann unterbrechen Sie das Spiel wieder wie oben beschrieben und geben im Direktmodus die POKEs ein. Das Problem ist jetzt oft, das Spiel wieder zu starten. Geben Sie dazu im einfachsten Fall ggf. nach Anwendung einer Renew-Routine RUN ein, oder den notierten SYS-Befehl.
Hilft das nicht, kann ein fortgeschrittener Anwender mit Hilfe eines Speichermonitors versuchen, im Speicher Maschinenprogramme zu finden und diese zu starten. Oft erwischt man dabei gerade an »typischen« Adressen wie 4096, 10000, 12288, 16384, 24576, 32768, 49152 zufällig den Anfang des Spieleprogramms.
Intern arbeitet der Pokefinder nach einem ebenso einfachen wie effektiven Verfahren. In Maschinensprache (und praktisch alle modernen Spiele sind in Maschinensprache verfaßt) kann man mit dem Befehl
DEC xxxx
den Inhalt der Speicherzelle xxxx um den Wert eins erniedrigen. Das entspricht in Basic
POKE xxxx, PEEK (xxxx) - 1
In fast allen Spielen wird mit Hilfe eines solchen Befehles bei einem Zusammenstoß mit dem Gegner die Speicherzelle, welche die Anzahl der noch zur Verfügung stehenden Leben enthält, heruntergezählt. Wir müssen also diesen DEC-Befehl ausschalten (/1/ siehe auch »Ein Cracker packt aus« in den 64'er-Sonderheften 30 und 54). Der Pokefinder durchsucht den gesamten Speicher von $0400 (1024) bis $ffff (65535, ROM wird ausgeblendet) nach DEC-Befehlen, die eine Speicherzelle erniedrigen, welche den nach dem Start eingegeben Wert (Anzahl der Leben) enthalten. Steht im Spiel beispielsweise ab der Adresse 23521 ein Befehl, um die Speicherzelle 3890 um eins zu erniedrigen:
23521 DEC 3890
und enthält die Zelle 3890 den Wert 3, der beim Start des Finders eingegeben wurde, erkennt der Pokefinder, daß hier möglicherweise eine »Anti-Spieler-Routine« arbeitet und gibt die Speicherzelle 23521 als Fundstelle aus. Den DEC-Befehl gibt es in zwei Versionen: Für Zeropage-Adressen (Code $c6, Adressen 0 bis 255) und für absolute Adressen (Code $ce, Adressen 0 bis 65535). Je nachdem, welcher Typ vorlag, gibt der Pokefinder als POKE-Wert eine 173 ($ad, absolut) oder 165 ($a5, Zeropage) aus. Durch den POKE wird aus dem DEC-Befehl ein harmloser LDA-Befehl, der die Speicherzelle zwar ausliest, aber nicht verändert:
23521 LDA 3890
Das Spiel hat nun nicht mehr die Möglichkeit, die Anzahl der Leben um eins zu erniedrigen, und wir haben unendlich viele Leben! Nähere Hinweise zu den genauen Vorgängen innerhalb des POKE-Finders enthält der kommentierte Quelltext.
Wir wünschen Ihnen viel Erfolg mit dem POKE-Finder!