Danke.
Habe eure Lösungen ausgewertet.
Mit ASM in der 1. Basiczeile funktioniert es wunderbar.
Gruss
Es gibt 41 Antworten in diesem Thema, welches 6.290 mal aufgerufen wurde. Der letzte Beitrag (
Danke.
Habe eure Lösungen ausgewertet.
Mit ASM in der 1. Basiczeile funktioniert es wunderbar.
Gruss
Wenn der String im Code geändert wird, können Probleme auftreten,
besonders, wenn Bytes mit dem Wert 0 vorkommen.
Das würde von BASIC beim LIST als Zeilenende interpretiert werden
und die ganze verkette Liste der Zeilen ist korrumpiert.
Die verkettete Liste der Basic-Zeilen wird ja aber nicht verändert. Ich sehe ein Anzeigen von Kauderwelsch eher als Schwäche des Basic-Editors, der eigentlich nicht auf ein Null-Byte als Basic-Zeilenende schauen sollte, sondern eher auf die Adresse der folgenden Basic-Zeile - 1.
Leider nein. Der Zeilen-Parser geht beim String durch und endet bei einem Anführungszeichen oder "hart" bei einem 0-Byte. Dann wird Link-Adresse und Zeilennummer erwartet, egal wo die Link-Adresse der aktuellen Zeile hinzeigt.
Außerdem wird (auch glaub auch nach einem Einfügen oder Löschen einer Zeile) ein Re-Linking der BASIC-Textes gemacht. Dabei sind die 0-Bytes die harten Markierungen, nach dem die Link-Adressen neu gesetzt werden.
Das ist halt ein frommer Wunsch, was der Interpreter machen sollte, nützt aber nichts. Tatsächlich verlässt sich der Interpreter auf das zeilenterminierende 0-Byte, weil das für die CHRGET-Routine effizienter ist, als immer mit absoluten Adressen zu hantieren. Die Link-Adresse wird im wesentlichen nur für Vorwärts-GOTO/GOSUBs gebraucht, damit man eine Zeile in einem Schritt überspringen kann und nicht byte-weise durchwuzeln muss.
Es wird ja beispielsweise nicht mal der Sprung auf die aktuelle Zeile (zurück) optimiert, indem der Zeilenanfang vorgehalten wird - was mit echt wenig Aufwand umstetzbar wäre -, weslhalb auch hier immer von Programmbeginn über die Link-Kette die Zeile gesucht wird. ![]()