Assembler-Beispiel C9 - CMP (RAUTE)$nn.asm

Aus C64-Wiki
Zur Navigation springenZur Suche springen
; Dieses Programm zeigt eine Eingabe-Routine, die mit Return  beendet wird.
; Es werden nur die ASCII-Zeichen 32-95 zugelassen. (Steuerzeichen werden herausgefiltert)
; Die Länge der Eingabe kann auf einen konstanten Wert begrenzt werden.
; DEL  kann zur Korrektur verwendet werden.
; Das Ergebnis der Eingabe liegt ab $c042. Das Ende wird durch eine 0 gekennzeichnet.
; Programmstart mit SYS 49152

*=$c000   ; Startadresse des Programms

BSOUT = $ffd2
GETIN = $ffe4
MAX = 10

start           ldx #0         ; Zeichenzähler
                stx counter
eingabe         jsr GETIN      ; Zeichen einlesen			
                beq eingabe    ; wenn keine Taste gedrückt --> zurück zur Eingabe 

                cmp #13        ; wenn Return-Taste --> Programmende
                beq ende

                cmp #20        ; wenn nicht die DEL-Taste --> verzweige nach weiter
                bne weiter
                ldx counter
                beq eingabe    ; wenn Zeichenzähler=0 --> DEL-Taste ignorieren
                dec counter    ; Zeichenzähler-1
                jmp out        ; DEL ausführen

weiter          cmp #32        ; nur Zeichen mit ASCII-Code zwischen 32 und 95 zulassen
                bcc eingabe    ; wenn < 32 --> zurück zur Eingabe
                cmp #96
                bcs eingabe    ; wenn >= 96 --> zurück zur Eingabe

ausgabe         ldx counter
                cpx #MAX
                bcs eingabe    ; wenn max. Eingabelänge erreicht --> Zeichen ignorieren
                sta text, x    ; Zeichen speichern
                inc counter    ; Zeichenzähler +1
out             jsr BSOUT      ; Zeichen ausgeben
                jmp eingabe

ende            lda #0         ; das Ende des Textes mit 0 abschließen
                ldx counter
                sta text, x

                rts            ; Rücksprung ins BASIC

counter  .byte 0
text     .byte 0