         opt l-,p+,s+,n+
         ; l- : sofort ausführbarer Code
         ; p+ : positionsunabhängiger C.
         ; s+ : Symboltabelle an
         ; n+ : schmales Listing

* ================================
*
*     Upcase deutsch Assembler
*
*        von Lars Jedinski
*
* ================================

        movem.l d0-d7/a0-a6,-(sp) ; alle Register für Basic retten

        move.l  64(sp),a0         ; Zeiger auf Parameter

        clr.l   d0                ; Zähler auf 0 setzen
        clr.l   d1                ; "b$" leeren
loop
        move.b  0(a0,d0),d1       ; b$=MID$(x$,i%,1)

        cmp.b   #0,d1             ; string ende ?
        beq     ende              ; dann zurück zu Basic !

        cmp.b   #"ä",d1           ; b$="ä" ?
        bne     nicht_ae
        move.b  #"Ä",d1
        bra     done
nicht_ae
        cmp.b   #"ö",d1
        bne     nicht_oe
        move.b  #"Ö",d1
        bra     done
nicht_oe
        cmp.b   #"ü",d1
        bne     nicht_ue
        move.b  #"Ü",d1
        bra     done
nicht_ue
        cmp.b   #"a",d1
        bmi     done              ; "a">x$
        cmp.b   #"z",d1
        bhi     done              ; "z"<x$
                                  ; "a" <= x$ <= "z" :
        sub.b   #32,d1            ; x$=UCASE$(x$)
done
        move.b  d1,0(a0,d0)       ; entspricht a$=a$+x$
        addq    #1,d0
        bra     loop

ende
        movem.l (sp)+,d0-d7/a0-a6 ; Register re-initialisieren
        rts



