Beiträge von Unseen im Thema „Basic Code in eine PRG-File schreiben“

    Um mal die Diskussion in hilfreichere Gegenden zu leiten:

    Eine PRG-Datei mit einem BASIC-Programm sieht beim C64 folgendermassen aus:

    1. Zwei Byte mit der Ladeadresse, beim C64 typischerweise 0x01 0x08 für Adresse 0x0801 in Little Endian
    2. so viele BASIC-Zeilen (siehe unten) wie nötig, aber nicht mehr als in den Speicher passen
    3. Zwei 0-Byte Byte als Endmarkierung (0x00 0x00

    Eine BASIC-Zeile sieht in einer PRG-Datei so aus:

    1. Zwei Byte als Zeiger auf die Startadresse der nächsten Zeile - der wird beim Laden vom Interpreter neu berechnet, man kann also problemlos 0x01 0x01 reinschreiben (0x00 0x00 würde als Endmarkierung interpretiert werden)
    2. Zwei Byte mit der Zeilennummer, z.B. 0x0a 0x00 für Zeile 10 oder 0xe8 0x03 für Zeile 1000 (wie üblich Little Endian)
    3. der Inhalt der BASIC-Zeile, in tokenisierter Form
    4. ein Nullbyte als Ende-Markierung (0x00)

    Zeilen werden tokenisiert, indem in ihrer Stringdarstellung jedes erkannte Schlüsselwort durch sein Bitte melde dich an, um diesen Link zu sehen. ersetzt wird, ausser bei Texten, die in Anführungszeichen eingeschlossen sind. Der Tokenisierer des C64 ist doof und hat abgesehen von den Anführungszeichen keine Ahnung von BASIC-Syntax. Kleine Falle: Manche Token von Funktionen enthalten auch die öffnende Klammer, andere nicht.

    Ein Simpel-Programm

    Code
    10 PRINT "A PRINT B"

    würde also zu einem PRG mit diesem Inhalt (alles in Hex)

    01 08 Ladeadresse

    01 01 Zeiger auf nächste Zeile

    0a 00 Zeilennummer

    99 PRINT-Token

    20 Leerzeichen dahinter

    22 41 20 50 52 49 4e 54 20 42 der String hinter PRINT, wobei der Tokenisierer hier das PRINT nicht zum Token wandelt weil es in Anführungszeichen steht

    00 Zeilenende-Markierung

    00 00 Programmende-Markierung