File: strcat.s

package info (click to toggle)
cc65 2.19-2
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 20,268 kB
  • sloc: ansic: 117,151; asm: 66,339; pascal: 4,248; makefile: 1,009; perl: 607
file content (51 lines) | stat: -rw-r--r-- 1,157 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
;
; Ullrich von Bassewitz, 31.05.1998
; Christian Krueger: 2013-Jul-24, minor optimizations
;
; char* strcat (char* dest, const char* src);
;

        .export         _strcat
        .import         popax
        .importzp       ptr1, ptr2, tmp3
        .macpack        cpu

_strcat:
        sta ptr1        ; Save src
        stx ptr1+1
        jsr popax       ; Get dest
        sta tmp3        ; Remember for function return
        tay
.if (.cpu .bitand ::CPU_ISET_65SC02)
        stz ptr2
.else
        lda #0
        sta ptr2        ; access from page start, y contains low byte
.endif
        stx ptr2+1

findEndOfDest:
        lda (ptr2),y
        beq endOfDestFound
        iny
        bne findEndOfDest
        inc ptr2+1
        bne findEndOfDest

endOfDestFound:
        sty ptr2        ; advance pointer to last y position
        ldy #0          ; reset new y-offset

copyByte:
        lda (ptr1),y
        sta (ptr2),y
        beq done
        iny
        bne copyByte
        inc ptr1+1
        inc ptr2+1
        bne copyByte    ; like bra here

; return pointer to dest
done:   lda tmp3        ; X does still contain high byte
        rts