Hallo Besucher, der Thread wurde 4,6k mal aufgerufen und enthält 41 Antworten

letzter Beitrag von JeeK am

VIC20 : ASM-Code in String unterbringen und aufrufen ?

  • 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. X/