]> git.sur5r.net Git - cc65/blob - libsrc/common/strcat.s
Optimization of two string functions (size & speed).
[cc65] / libsrc / common / strcat.s
1 ;
2 ; Ullrich von Bassewitz, 31.05.1998
3 ; Christian Krueger: 2013-Jul-24, minor optimization
4 ;
5 ; char* strcat (char* dest, const char* src);
6 ;
7
8         .export         _strcat
9         .import         popax
10         .importzp       ptr1, ptr2, tmp3
11
12 _strcat:
13         sta     ptr1            ; Save src
14         stx     ptr1+1
15         jsr     popax           ; Get dest
16         sta     tmp3            ; Remember for function return
17         tay
18         lda     #0
19         sta     ptr2            ; access from page start, y contains low byte
20         stx     ptr2+1
21
22 findEndOfDest:
23         lda     (ptr2),y
24         beq     endOfDestFound
25         iny
26         bne     findEndOfDest
27         inc     ptr2+1
28         bne     findEndOfDest
29
30 endOfDestFound:
31         sty     ptr2            ; advance pointer to last y position    
32         ldy     #0              ; reset new y-offset
33
34 copyByte:
35         lda     (ptr1),y
36         sta     (ptr2),y
37         beq     done
38         iny
39         bne     copyByte
40         inc     ptr1+1
41         inc     ptr2+1
42         bne     copyByte        ; like bra here
43
44 ; return pointer to dest
45 done:   lda     tmp3            ; X does still contain high byte
46         rts
47