Tagesarchive: 8.10.2012

Unnützes Wissen (2): DATA … Lost in Space!?

Ich hatte es ja geahnt, dass es nicht bei einem seltsamen Phänomen bleiben wird. Heute ist mir eine weitere Seltsamkeit des Commodore-BASIC begegnet, die man normalerweise nie zu Gesicht bekommt. Ein Programm, dass auf einem C128 klaglos lief, quittierte auf einem (emulierten) CBM 4001 Series den Dienst mit einer „OUT OF DATA“ Fehlermeldung. Als „Übeltäter“ erwies sich dabei, welch eine Überraschung, das DATA-Statement (*) selber.

Alles fing damit an, dass ich ein Listing für Demonstrationszwecke etwas übersichtlicher gestalten wollte und nach den Doppelpunkten zur Befehlstrennung jeweils ein Leerzeichen einfügte. Im Normalfall vermeidet man solche Speicherplatzverschwendung, aber die Befehle ließen sich jetzt etwas leichter lesen. Auf einem C128 funktionierte das Programm auch tadellos. Als es dann in VICE im PET/CBM-Emulator getestet wurde, kam es zu der besagten Fehlermeldung. Natürlich denkt man in so einem Fall viel zu kompliziert und sucht den Fehler überall, nur nicht dort wo er einem eigentlich ins Auge springt.

Es dauerte daher einige Zeit bis ich dahinterkam, wohin die Daten, die die „OUT OF DATA“-Meldung als vermisst beklagte, verschwundenen waren. Man sagt ja manchmal so dahin „Lost in Space“, aber diesmal trifft dieser Satz den Kern! Wenn direkt vor dem DATA-Statement ein Leerzeichen (Space) steht, wird das DATA-Statement vom Interpreter ignoriert! Die nachfolgenden Daten „verschwinden“ im „Space“.

DATA missing error PET/CBM (1)   DATA missing error PET/CBM (2)
Spaces sorgen für Übersicht und fehlende Daten
Unübersichtlicher, aber funktionsfähig

Dieser spezielle Fehler tritt bei allen CBM-Rechnern vom PET bis zum CBM 8296 auf. Die CBM2-Reihe, der VC20 und alles was danach produziert wurde, hat diesen Bug nicht mehr. Ich habe nicht herausfinden können, ob dieses Fehlverhalten schon allgemein bekannt ist – die Internet-Recherche nach DATA, PET und BUG liefert keine brauchbaren Treffer – vermute aber, dass ich nicht wirklich der Erste bin, der es entdeckt hat. Falls also jemand einen passenden Link zu einem früheren Entdecker bzw. Literaturstellen kennt oder findet: Immer her damit!

Nachtrag (09.10.2012):
(*) Nur um etwaigen Irritationen vorzubeugen: Damit ist der Ort des Problems gemeint. Eigentlich ist das DATA-Statement Opfer und nicht Täter. Zwar bestimmt das Leerzeichen vor DATA ob das Problem auftritt oder nicht, aber der Fehler selbst wird natürlich durch den fehlerhaft programmierten READ-Befehl ausgelöst, der im beschriebenen Fall das gesamte DATA-Statement ignoriert wenn davor ein Space steht.

Nachtrag (14.10.2012):
Im Commodore Computer Wiki wurde der Eintrag zum BASIC-Statement DATA zwischenzeitlich von Hydrophilic aktualisiert. Der Artikel erwähnt jetzt auch den hier beschriebenen DATA-Bug

Nachtrag (15.10.2012):
Teil 3: Zwiespältiges GETKEY

Veröffentlicht unter CBM | Schreib einen Kommentar