         ; ***************************
         ; ***   Basic-Start.inc   ***
         ; ***************************

; DIESE DATEI DARF NIE BEDINGT EINGEBUNDEN WERDEN!
; Als Anwendungsbeispiel siehe "Transfer.src".

; Includedatei für CrossAss V1.0. Generiert Basic-Kopf für Assembler-
; programme, so daß diese wie Basicprogramme mit LOAD "...",8 geladen und mit
; RUN gestartet werden können. Benötigt "C64.con" als Konvertierungstabelle.
; Vor der Einbindung dieser Datei müssen im aufrufenden Programm,
; das den Basic-Kopf bekommen soll, einige Vorbereitungen getroffen werden:
; 1. Es muß ein ".base"-Pseudo-Opcode vor der Einbindung die Startadresse
;    auf 2049 (=$801) setzen (Basicanfang). Sollte der Programmcounter beim
;    Einbinden der Datei nicht 2049 sein, so wird ein Fehler erzeugt, der
;    die Assemblierung abbricht (Division durch 0).
; 2. Das Definition des Label "BS_Return" bestimmt das Aussehen des zu
;    erzeugenden Basic-Kopfes:
;    BS_Return nicht definiert:
;        <Zeilennr> sys <startadr> <Text>
;    BS_Return definiert:
;        <Zeilennr> sys <startadr>:rem <Text>
;    Soll aus dem laufenden Programm zum Basicinterpreter per RTS
;    zurückgesprungen werden, muß NoReturn definiert sein, da der 
;    angefügte Kommentarstext sonst einen "?SYNTAX ERROR" hervorrufen
;    würde. Der eigentliche Wert von BS_Return hat keinen Einfluß.
; 3. Das Label "BS_Line" bestimmt die Zeilennr. des Basic-Kopfs
; 4. Der Einsprung im Hauptprogramm muß durch das Label "BS_Start"
;    gekennzeichnet sein (Diese Adresse erscheint dann hinter dem SYS-Befehl)
; 5. Zur Angabe eines Kommentarstext (z.B. einer Copyright-Meldung) wie in
;    obigen Schemata, muß ein Makro "BS_Text" definiert werden, das nur ein
;    ".ASCII"-Pseudo-Opcode mit dem entsprechenden Text enthält.

                  .if   !,*,2049       ;PC ungleich 2049 ?
                     .if   !,1/0,1     ;Fehler (in Pass 1) erzeugen
                     .endif            ;Dummy-IF schließen
                  .endif               ;PC = 2049 -> weiter

                  .word Line2          ;Adresse nächste Zeile
                  .word BS_Line        ;Zeilennummer
                  .byte 158            ;Token SYS-Befehl
                  .byte 32             ;Leerzeichen
                                       ;Startadresse in ASCII wandeln
                  .byte BS_Start/10000+'0
                  .byte BS_Start/1000-BS_Start/10000*10+'0
                  .byte BS_Start/100-BS_Start/1000*10+'0
                  .byte BS_Start/10-BS_Start/100*10+'0
                  .byte BS_Start-BS_Start/10*10+'0

                  .if   =,BS_Return    ;BS_Return definiert ?
                     .byte ':          ;Doppelpunkt einfügen
                     .byte 143         ;Token REM-Befehl
                  .endif
                  .byte 32             ;Leerzeichen einfügen
                  BS_Text              ;Makroaufruf: Text einfügen

Line2             .byte 0,0,0          ;Zeilenendemarkierung
