]> git.sur5r.net Git - cc65/blob - libsrc/common/strupper.s
Squeeze two cycles out of the abs() function
[cc65] / libsrc / common / strupper.s
1 ;
2 ; Ullrich von Bassewitz, 02.06.1998
3 ;
4 ; char* strupper (char* s);
5 ; char* strupr (char* s);
6 ;
7 ; Non-ANSI
8 ;
9
10         .export         _strupper, _strupr
11         .import         popax
12         .import         __ctype
13         .importzp       ptr1, ptr2
14
15 _strupper:
16 _strupr:
17         sta     ptr1            ; Save s (working copy)
18         stx     ptr1+1
19         sta     ptr2
20         sta     ptr2+2          ; save function result
21         ldy     #0
22
23 loop:   lda     (ptr1),y        ; get character
24         beq     L9              ; jump if done
25         tax
26         lda     __ctype,x       ; get character classification
27         and     #$01            ; lower case char?
28         beq     L1              ; jump if no
29         txa                     ; get character back into accu
30         clc
31         adc     #<('A'-'a')     ; make upper case char
32         sta     (ptr1),y        ; store back
33 L1:     iny                     ; next char
34         bne     loop
35         inc     ptr1+1          ; handle offset overflow
36         bne     loop            ; branch always
37
38 ; Done, return the argument string
39
40 L9:     lda     ptr2
41         ldx     ptr2+1
42         rts
43
44
45