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