Fehlermeldung

Aus C64-Wiki
Zur Navigation springenZur Suche springen
BASIC versteht nur bestimmte Befehle.

Die Fehlermeldung teilt dem Benutzer mit, dass das Betriebssystem des Computers ein Problem mit dem eingegebenen oder zu verarbeitenden Befehl hat, d.h. etwas bei der Befehlseingabe falsch gemacht wurde oder die Abarbeitung eines Befehls zu einem Fehler führte. Eine Fehlermeldung kann im Direkteingabemodus, bei durchgeführte Operationen wie Lade- oder Speicherfehler, aber auch in Programmen durch Programmierfehler oder falsche Dateneingabe (im engeren Sinne sind diese Fehlermeldungen eher Warnhinweise) erfolgen.
Üblicherweise bewirken Fehler einen Abbruch des gerade laufenden Programms. Es gibt aber auch Meldungen, die als Warnung oder Hinweis gewertet werden können, weil dabei die Ausführung nicht abgebrochen wird. Diese richten sich im Gegensatz zu den Fehlermeldungen an den Benutzer und nicht an den Programmierer.


Anhand dieser Fehlermeldungen und deren Bedeutung kann der Programmierer bzw. Benutzer feststellen, was er falsch gemacht hat und entsprechend seine Eingabe oder das Programm korrigieren.
Die verschiedenen BASIC-Dialekte realisieren die Fehlerausgabe unterschiedlich. Der Fehler kann schlicht als Nummer (hier muss man im Handbuch für eine Erklärung nachschlagen) oder als 2-Buchstabencode (der die Meldung erahnen lässt) oder im Klartext erfolgen. Häufig wird mit einem Fragezeichen unterstrichen, dass dem BASIC-Interpreter etwas unklar ist und mit der Programmzeilenangabe der Hinweis auf den Ort des Fehler gegeben

Bei der CBM-BASIC-Linie werden die Fehlermeldungen im Klartext gegeben. Ein Fragezeichen leitet die Meldung ein, gefolgt von der Klartextmeldung, der stets das Wort "ERROR" (durch interessanterweise zwei Leerzeichen getrennt - im Falle von ?BREAK ERROR sind es sogar drei!) folgt und endet, sofern im Programmmodus befindlich, mit dem Wort "IN" gefolgt von einer Zeilennummer.
Beispiel:

?SYNTAX ERROR IN 100

Insbesondere die höheren BASIC-Versionen (3.5 und 7.0) von Commodore im C16/116, sowie Plus/4 und C128/D/DCR besitzen BASIC-Befehle zum Abfangen von fehlerbedingten Unterbrechungen und Debugging-Hilfen wie TRAP, RESUME, TROFF, TRON, EL, ER und ERR$.
Für den C64 gibt es zahlreiche Tools und Utilitys, um z.B. in BASIC-Programmen schnell und einfache Fehlerbehebung durchzuführen (in engl. to debug). Zu erwähnen ist u.a. das BASIC-Entwicklungssystem PLH (engl. Abkürzung für Programmer's Little Helper) aus INPUT 64 (Ausgabe 12/1987).
Andere BASIC-Erweiterungen wie das berühmte Simons Basic oder die Weiterentwicklung TSB beinhalten weitere Befehle zur Fehlermeldungsrückverfolgung wie ERRN, ERRLN, OUT (TSB), ON ERROR, ON ERROR (TSB), NO ERROR und RESUME (TSB). Simons Basic verfügt auch über eigene, spezielle Fehlermeldungen.

Programmierfehler sind besonders unschön, da sie aus der Sicht des Anwenders das Programm unterbrechen und damit ggf. Bildschirmmasken oder den Spielverlauf (zer-)stören. Die Folge eines Programmierfehlers kann sein, dass der Anwender dieses Programm zukünftig meidet oder das Programm schlicht unbrauchbar wird.

Weiterhin lassen Fehlersituationen, die vom Programmierer nach Fertigstellung des Programms nicht entdeckt wurden, seine Nachlässigkeit beim Test des Programms oder Unkenntnis über die genutzte Programmiersprache oder das Computersystem vermuten. Allerdings ist zu bedenken, dass die Hürde alle Fehler - teilweise auch unverschuldete - zu vermeiden mitunter (speziell bei BASIC V2) recht groß ist und in der Masse der BASIC-Programme nicht durchgehend gegeben ist.

Bei den beliebten Listings der 1980er-Jahre war zudem die Gefahr von Druckfehlern und der Unlesbarkeit (schlechte Druckqualität) gegeben, aber auch schlicht Tippfehler waren allgegenwärtig, die den abtippenden Anwender zur Verzweiflung brachten. Hilfreich waren natürlich mit abgedruckte Prüfsummen, die dann bei der Eingabe mittels Programme wie Checksummer oder MSE die Fehler offenbarten und eine sichere Eingabe gewährleisteten.


Auflistung von Fehlermeldungen und Warnhinweisen[Bearbeiten | Quelltext bearbeiten]

Fehlermeldungen des C64 und BASIC 2.0[Bearbeiten | Quelltext bearbeiten]

In der folgenden Liste werden alle Fehlermeldungen des Commodore 64 Betriebssystems BASIC 2.0, alphabetisch angeführt:


Der Befehl LOAD wurde an die Tastatur gesendet.
Bei einem POKE wurde ein negativer Wert angegeben.
Es wurde als Dateiname eine leere Zeichenkette angegeben.
Eine Trilliarde mal eine Trilliarde ist zu viel für BASIC 2.0.

Siehe dazu Fehlerliste und Fehlernummern bei ERR$ auch in Hinblick auf höhere BASIC-Versionen.

  • ?BAD SUBSCRIPT ERROR
    Der Indexwert einer Feldvariable ist größer, als in der DIM-Anweisung vereinbart, oder die Anzahl der verwendeten Indizes (bei mehrdimensionalen Feldern) ist falsch.
  • ?BREAK ERROR
    Während des Ladens, Schreibens oder Verifizierens wurde RUN/STOP  gedrückt. Wird dagegen ein laufendes Programm unterbrochen, erscheint beispielsweise nur die Meldung BREAK IN 10, was keinen Fehler an sich anzeigt.
  • ?CAN'T CONTINUE ERROR
    Ein unterbrochenes BASIC-Programm konnte mit CONT nicht fortgesetzt werden.
    • Bei allen nicht programmverändernden Maßnahmen, wie z.B. dem Zuweisen einer Variablen im Direktmodus oder das Verändern von Speicherstellen außerhalb des BASIC-Speicherbereichs mit POKE <Adresse>,<Wert> kann CONT problemlos verwendet werden.
    • Falls vor der Eingabe von CONT irgendwelche Veränderungen am Programm vorgenommen wurde und sei es nur eine unveränderte BASIC-Zeile erneut mit RETURN  zu bestätigen, erzeugt das diese Fehlermeldung.
    • Ein (Neu-)Start des veränderten Programms mit RUN oder GOTO <Zeilennummer> ist möglich.
  • ?DEVICE NOT PRESENT ERROR
    Das durch einen Befehl angesprochene Gerät oder Laufwerk ist nicht betriebsbereit.
    • Meistens wurde vergessen es einzuschalten oder die Kabelverbindungen sitzen nicht korrekt.
    • Es kann auch sein, dass die Geräteadresse vertauscht wurde oder dass das Laufwerk die falsche Adresse eingestellt hat.
  • ?DIVISION BY ZERO ERROR
    In der Auswertung eines Ausdrucks wurde versucht durch Null zu dividieren. Eine derartiger Ausdruck ist mathematisch nicht definiert und kann auch als Fließkommawert nicht gebildet werden.
  • ?FILE DATA ERROR
    Es wurde mittels INPUT# versucht, Zeichenketten aus einer Datei in eine numerische Variable einzulesen.
    Wird im Anhang L des Benutzerhandbuchs fälschlicherweise als ?BAD DATA ERROR bezeichnet.
  • ?FILE NOT FOUND ERROR
    Die Datei, die laut eingegebenem Befehl geladen werden soll, existiert auf dem gerade angesprochenen Laufwerk nicht.
    • Entweder wurde die falsche Diskette eingelegt oder die Datei ist nicht vorhanden.
    • Der Name der Datei könnte auch falsch geschrieben worden sein.
  • ?FILE NOT OPEN ERROR
    Eine durch einen I/O-Befehl angesprochene Datei wurde vorher nicht mit OPEN geöffnet.
    • Eventuell wurde die Datei auch versehentlich bereits wieder mit CLOSE geschlossen.
  • ?FILE OPEN ERROR
    Diese Meldung erscheint beim Versuch eine Datei mit OPEN zu öffnen, wobei die Dateinummer bereits für eine geöffnete Datei in Verwendung ist.
  • ?FORMULA TOO COMPLEX ERROR
    Die maximale Anzahl der Verschachtelungen in einem Zeichenkettenausdruck wurde überschritten.
  • ?ILLEGAL DEVICE NUMBER ERROR
    Die Gerätenummer ist für Massenspeicherbefehle nicht erlaubt.
    • Befehle wie LOAD, SAVE oder VERIFY ergeben für Geräte mit Nummer 0, 2 oder 3 keinen Sinn.
  • ?ILLEGAL DIRECT ERROR
    Es wurde versucht, einen im Direktmodus unzulässigen Befehl, wie INPUT oder GET, zu verwenden.
  • ?ILLEGAL QUANTITY ERROR
    Der Zahlenwert eines Arguments oder einer Ganzzahlzuweisung hat einen Wert außerhalb des erlaubten bzw. erwarteten Bereichs ergeben, beispielsweise ein POKE-Wert größer als 255.
  • ?MISSING FILENAME ERROR
    Bei den Befehlen LOAD, SAVE oder VERIFY wurde (außer bei Gerätenummer 1, Datasette) ein leerer Dateiname angegeben (Zeichenkette mit dem Dateinamen muss mindestens 1 Zeichen enthalten).
  • ?NEXT WITHOUT FOR ERROR
    In einem BASIC-Programm soll ein NEXT ausgeführt werden, ohne das zuvor die zugehörige FOR-Anweisung abgearbeitet wurde.
  • ?NOT INPUT FILE ERROR
    Es wurde versucht, aus einer nur zum Schreiben geöffneten Datei Daten zu lesen.
  • ?NOT OUTPUT FILE ERROR
    Es wurde versucht in eine nur zum Lesen geöffnete Datei Daten zu schreiben.
  • ?OUT OF DATA ERROR
    In einem Programm soll READ ausgeführt werden, es sind aber keine DATA-Werte (mehr) vorhanden.
    • Häufig fehlt zwischen zwei DATA-Werten ein Komma.
  • ?OUT OF MEMORY ERROR
    Diese Fehlermeldung zeigt an, dass nicht mehr genügend Speicher vorhanden ist, um den anstehende Befehl auszuführen.
    • Für eine neu anzulegende Variable oder Feldvariable ist kein Platz mehr.
    • Kein Platz für Zeichenketten und die Garbage Collection konnte keinen freien Platz mehr schaffen.
    • Verschachtelungen von GOSUB-RETURN, FOR-NEXT, DEF-FN-Aufrufen, in Klammerausdrücken, Funktionsaufrufen von nummerischen Ausdrücken bringen Stapel zum Überlauf.
      Die gerade mögliche Verschachtelungstiefe hängt auch von anderen Konstrukten ab, die den Stapel nutzen (z.B. reduziert sich entsprechend innerhalb von Unterprogrammen oder FOR-NEXT-Schleifen).
  • ?OVERFLOW ERROR
    Ein mathematischer Ausdruck führt zu einem End- oder ein Zwischenergebnis, das eine Fließkommazahl nicht mehr fassen kann (siehe VAL).
    • Im Falle von Ganzzahlen wird beim Überschreiten des kleinsten oder größten möglichen Wertes ILLEGAL QUANTITY ERROR gemeldet.
    • Eine Art Underflow Error gibt es nicht. Nicht mehr abbildbare Werte erhalten der Wert 0.
  • ?REDIM'D ARRAY ERROR
    Es wurde versucht, eine bereits dimensionierte Variable nochmals mit DIM zu definieren.
  • ?RETURN WITHOUT GOSUB ERROR
    In einem BASIC-Programm soll ein RETURN abgearbeitet werden, es wurde aber zuvor kein GOSUB ausgeführt.
    • Dies passiert meist dann, wenn am Ende des Hauptprogramms kein END gesetzt wurde und im Anschluss ein Unterprogramm folgt.
  • ?STRING TOO LONG ERROR
    Eine Zeichenkette würde die Länge von 255 Zeichen überschreiten oder bei INPUT# wird das Maximum von 88 Zeichen überschritten.
  • ?SYNTAX ERROR
    Diese Fehlermeldung tritt häufig bei Basic-Neulingen in Erscheinung. Sie besagt, dass der BASIC-Interpreter einen BASIC-Befehl nicht versteht oder die Parametersyntax falsch ist.
    • Die Ursache ist oft eine falsche Schreibweise eines Befehls, zum Beispiel ein Tippfehler oder ein Variablenname der mit einem Befehlsnamen kollidiert.
    • Die Reihenfolge oder Abfolge von Befehlen und Strukturen in nicht korrekt (z.B. mehrfaches oder fehlendes THEN bei einer IF-THEN-Konstruktion).
    • Ein Parameter fehlt oder wurde zu viel angegeben.
    • Der Eingabewert entspricht nicht der zu erwarteten Zeichenklasse (z.B. GET# für Zahlenvariablen liest keine Ziffer).
  • ?TOO MANY FILES ERROR
    Es wurde versucht, mittels OPEN mehr als zehn logischen Dateien gleichzeitig zu öffnen.
  • ?TYPE MISMATCH ERROR
    Es wurde versucht, einer numerischen Variablen einen Zeichenketten-Ausdruck zuzuweisen (oder umgekehrt) bzw. es entspricht der Werttyp eines Befehlsparameters nicht dem erwarteten Typ (Zeichenkette <-> Zahl).
  • ?UNDEF'D FUNCTION ERROR
    In einem Ausdruck wurde eine Funktion angesprochen, ohne dass zuvor mit DEF FN definiert wurde.
    • Häufig wurde der Name der Funktion falsch geschrieben.
    • Die Definition wird zu spät bzw. die Funktion unerwarteter Weise zu früh aufgerufen.
  • ?UNDEF'D STATEMENT ERROR
    Über RUN, GOTO, oder GOSUB wurde versucht, eine nicht existierende Programmzeile im Programm anzuspringen.
  • ?VERIFY ERROR
    Der Vorgang des Verifizierens wurde abgebrochen, weil das Programm im RAM nicht mit dem Programm auf dem Datenträger identisch ist.
    • Sofern der Benutzer nicht selbst Veränderungen herbeigeführt hat, sollte in diesem Fall das Speichern auf einem anderen Datenträger wiederholt werden.
    • Ein identisches Basic-Programm unterscheidet sich von einem gespeicherten, wenn sich der Basic-Anfang verschoben haben sollte.

Hinweise bei BASIC 2.0[Bearbeiten | Quelltext bearbeiten]

Im Unterschied zu den Fehlermeldungen wird hier nicht das Wort "ERROR" ausgegeben und es erfolgt kein Abbruch des Programms (außer er wurde manuell, per Tastendruck ausgelöst).

  • BREAK
    Das Programm oder die gerade eingegebene Befehlssequenz wurde mit RUN/STOP  abgebrochen. Im Programmmodus folgt auch noch die Angabe der Zeilennummer.
Eine INPUT-Abfrage erwartetet Ziffern als Antwort.
  • ?EXTRA IGNORED
    Bei einer INPUT-Abfrage wurden mehr Eingaben getätigt, als Variablen hinter dem INPUT-Befehl stehen. Die überzähligen Eingaben werden ignoriert, das Programm wird jedoch fortgesetzt.
    • Dieser Fehler wird häufig bei Texteingaben verursacht, die ein Komma oder einen Doppelpunkt enthalten. Wenn man solche Eingaben mit Anführungszeichen einschließt, kann man den Fehler vermeiden (aber nicht grundsätzlich verhindern).
    • Abhilfe: Statt INPUT eine zeichenorientierte GET-Eingaberoutine benutzen (die allerdings ausprogrammiert werden muss) bei der die Eingabe kontrolliert und anschließend überprüft werden kann, um Zerstörungen der Bildschirmmaske zu vermeiden.
  • ?REDO FROM START
    Bei einer INPUT-Abfrage wurden statt Ziffern Zeichen eingegeben. Das Programm wird bei dieser Meldung nicht unterbrochen, die Abfrage wird wiederholt.
    • Abhilfe: Zeichenkettenvariablen wie A$ benutzten, statt von Zahlenvariablen wie A oder A%. Danach die Zeichenkettenvariable A$ mittels Funktion VAL in eine Zahl umwandeln und den Zahlenwert ggf. überprüfen. Oder gleich eine entsprechende GET-Eingaberoutine benutzen (siehe Punkt davor).


Fehlermeldungen bei Diskettenlaufwerken[Bearbeiten | Quelltext bearbeiten]

Eine Fehlersituation z.B. bei einem 1541-Laufwerk, die im Zusammenhang mit einer Diskettenoperation auftritt, ist am Blinken der Kontroll-LED erkennbar. Die entsprechende Statusmeldung[1] wird vom CBM DOS zur Verfügung gestellt und kann über Fehlerkanal abgerufen werden. Bei einigen Datei- und Diskettenoperationen (speziell den neueren BASIC-Versionen und bei entsprechenden Erweiterungen) werden auch Statusmeldungen herausgegeben. Da alle Fehler- und Statusmeldungen numerisch zugeordnet sind, behandeln wir sie hier als Fehlermeldungen.

Als Platzhalter dienen

  • TT ... Track-Nummer
  • SS ... Sector-Nummer
  • XX ... Anzahl/Zähler


  • 00,OK,00,00
    Es ist kein Fehler aufgetreten.
  • 01,FILES SCRATCHED,XX,00
    Rückmeldung nach SCRATCH-Befehl (XX=Anzahl der gelöschten Dateien). Es handelt sich hier nicht wirklich um einen Fehler, sondern um einen informellen Hinweis bzw. Status.
  • 20,READ ERROR,TT,SS
    Kopf des Datenblocks wurde nicht gefunden.
  • 21,READ ERROR,TT,SS
    SYNC-Markierung eines Datenblockes wurde nicht gefunden.
  • 22,READ ERROR,TT,SS
    Prüfsummenfehler im Kopf eines Datenblocks.
  • 23,READ ERROR,TT,SS
    Prüfsummenfehler im Datenteil eines Datenblocks.
  • 24,READ ERROR,TT,SS
    Prüfsummenfehler
  • 25,WRITE ERROR,TT,SS
    Datenblock wurde fehlerhaft auf Disk geschrieben.
  • 26,WRITE PROTECT ON,TT,SS
    Schreibversuch auf Diskette mit aktiviertem Schreibschutz.
  • 27,READ ERROR,TT,SS
    Prüfsummenfehler
  • 28,WRITE ERROR,TT,SS
    SYNC-Markierung eines Datenblocks wurde nicht gefunden.
  • 29,DISK ID MISMATCH,TT,SS
    Disk-ID ist fehlerhaft.
  • 30,SYNTAX ERROR,00,00
    Gesendeter DOS-Befehl ist syntaktisch nicht korrekt aufgebaut.
  • 31,SYNTAX ERROR,00,00
    Gesendeter DOS-Befehl ist nicht bekannt (bzw. implementiert).
  • 32,SYNTAX ERROR,00,00
    Gesendeter DOS-Befehl ist länger als 40 Zeichen.
  • 33,SYNTAX ERROR,00,00
    Unzulässige Verwendung eines Jokerzeichens.
  • 34,SYNTAX ERROR,00,00
    In einem DOS-Befehl wurde der Dateiname nicht gefunden.
  • 39,SYNTAX ERROR,00,00
    Programm vom Typ USR wurde nicht gefunden.
  • 50,RECORD NOT PRESENT,00,00
    Es wurde ein Datensatz einer relativen Datei angesprochen, der noch nicht existiert. Sofern ein Schreibzugriff erfolgt ist, wurde der Datensatz angelegt. Es handelt sich hier nicht wirklich um einen Fehler, sondern um einen informellen Hinweis bzw. Status zu einer relativen Datei.
  • 51,OVERFLOW IN RECORD,00,00
    Die gesendeten Daten überschreiten die Datensatzlänge einer relativen Datei.
  • 52,FILE TOO LARGE,00,00
    Datensatznummer einer relativen Datei ist zu groß bzw. die Datei kann nicht weiter vergrößert werden.
  • 60,WRITE FILE OPEN,00,00
    Es wurde versucht, eine Datei zu öffnen, die beim letzten Schreibversuch nicht ordnungsgemäß geschlossen wurde.
  • 61,FILE NOT OPEN,00,00
    Eine angesprochene Datei wurde zuvor nicht geöffnet.
  • 62,FILE NOT FOUND,00,00
    Die angesprochene Datei existiert auf der Diskette nicht.
  • 63,FILE EXISTS,00,00
    Es wurde versucht, eine Datei mit einem auf der Diskette bereits existierenden Namen anzulegen.
  • 64,FILE TYPE MISMATCH,00,00
    Beim Öffnen einer Datei wurde ein falscher Dateityp angegeben.
  • 65,NO BLOCK,TT,SS
    Es wurde versucht, einen Datenblock zu belegen, der bereits belegt war. In TT und SS steht der nächste belegbare Block. Wenn TT gleich 0 ist, gibt es keinen weiteren Block mehr.
  • 66,ILLEGAL TRACK OR SECTOR,TT,SS
    Es wurde versucht, auf einem nicht existierenden Datenblock zuzugreifen.
  • 67,ILLEGAL TRACK OR SECTOR,TT,SS
    Die Track-Sektor-Verkettung einer Datei ist fehlerhaft.
  • 70,NO CHANNEL,00,00
    Es wurde versucht, mehr Dateien zu öffnen als Kanäle vorhanden sind.
  • 71,DIR ERROR,TT,SS
    Die Anzahl der freien Datenblöcke im DOS-Speicher stimmt mit dem Bit-Muster der BAM nicht überein.
  • 72,DISK FULL,00,00
    Diskette ist komplett mit Daten belegt oder das Directory ist voll.
  • 73,CBM DOS V2.6 1541,00,00
    Das ist kein Fehler, sondern die Einschaltmeldung der Floppy. Die Meldung kommt immer, wenn nach dem Einschalten der Floppy oder einem Reset bevor ein Befehl an die Floppy gesendet wurde.
    Der tatsächliche Text nach der Meldungsnummer hängt vom Laufwerk beziehungsweise dem dort eingebauten ROM ab.
  • 74,DRIVE NOT READY,00,00
    Es wurde versucht die Floppy anzusprechen, ohne dass sich eine Diskette im Laufwerk befindet.

Literatur[Bearbeiten | Quelltext bearbeiten]

Weblinks[Bearbeiten | Quelltext bearbeiten]

Referenzen[Bearbeiten | Quelltext bearbeiten]

  1. CBM DOS V2.6 Error Messages Sprache:englisch, aus All_About_Your_1541