Assembler-Beispiel BA - TSX.asm

Aus C64-Wiki
Zur Navigation springenZur Suche springen
; Dieses Programm gibt einen Text als Inline-Parameter zum JSR-Aufruf aus.
; Programmstart mit SYS 49152

*=$c000   ; Startadresse des Programms

BSOUT = $ffd2
para  = $fd

start   jsr print          ; folgenden Inline-Text ausgeben
        .text "HALLO ALLERSEITS"
        .byte $0d,$00      ; Zeilenvorschub, Textendemarkierung
        jsr print          ; folgenden Inline-Text ausgeben
        .text "BEI C64-WIKI.DE!"
        .byte $00          ; Textendemarkierung
        rts

print
        tsx
        lda $0101,x        ; Low-Byte der Rücksprungadresse, Stapel in Page 1
        sta para
        lda $0102,x        ; High-Byte der Rücksprungadresse 
        sta para+1
        ldy #1             ; Korrektur, weil Rücksprungadresse um 1 zu niedrig
ausgabe lda (para),y       ; Zeichen holen, die dem JSR folgen
        beq fertig         ; 0 ist Endezeichen, dann Abbruch
        jsr BSOUT          ; Zeichen ausgeben, Register bleiben unverändert!
        iny                ; nächstes Zeichen
        bne ausgabe        ; solange Y ungleich 0, also max. 254 Zeichen erlaubt
fertig  tya                ; Anzahl der ausgegeben 
        clc                ; Übertrag für Addition löschen
        adc para           ; Rücksprungadresse korrigieren
        sta $0101,x        ; Low-Byte am Stack korrigiert
        lda para+1
        adc #0             ; Übertrag beim High-Byte berücksichtigen
        sta $0102,x        ; High-Byte am Stack korrigieren
        rts                ; zurück zur Stelle nach dem Inline-Parameter