; char* strcat (char* dest, const char* src);
;
- .export _strcat
- .import popax
- .importzp ptr1, ptr2, ptr3
+ .export _strcat
+ .import popax
+ .importzp ptr1, ptr2, tmp3
_strcat:
- sta ptr1 ; Save src
- stx ptr1+1
- jsr popax ; Get dest
- sta ptr2
- stx ptr2+1
- sta ptr3 ; Remember for function return
- stx ptr3+1
- ldy #0
+ sta ptr1 ; Save src
+ stx ptr1+1
+ jsr popax ; Get dest
+ sta ptr2
+ stx ptr2+1
+ sta tmp3 ; Remember for function return
+ ldy #0
; find end of dest
-sc1: lda (ptr2),y
- beq sc2
- iny
- bne sc1
- inc ptr2+1
- bne sc1
+sc1: lda (ptr2),y
+ beq sc2
+ iny
+ bne sc1
+ inc ptr2+1
+ bne sc1
; end found, get offset in y into pointer
-sc2: tya
- clc
- adc ptr2
- sta ptr2
- bcc sc3
- inc ptr2+1
+sc2: tya
+ clc
+ adc ptr2
+ sta ptr2
+ bcc sc3
+ inc ptr2+1
; copy src
-sc3: ldy #0
-sc4: lda (ptr1),y
- sta (ptr2),y
- beq sc5
- iny
- bne sc4
- inc ptr1+1
- inc ptr2+1
- bne sc4
+sc3: ldy #0
+sc4: lda (ptr1),y
+ sta (ptr2),y
+ beq sc5
+ iny
+ bne sc4
+ inc ptr1+1
+ inc ptr2+1
+ bne sc4
; done, return pointer to dest
-sc5: lda ptr3
- ldx ptr3+1
- rts
+sc5: lda tmp3 ; X does still contain high byte
+ rts