]> git.sur5r.net Git - cc65/blobdiff - libsrc/common/strncpy.s
The spans do now contain the size of a span, no longer the end offset.
[cc65] / libsrc / common / strncpy.s
index a94b52e4a15bdf62104d2d73d498e45cb62ac9bd..21de3a15954824412f7d7a6a442bb585293c8c34 100644 (file)
@@ -6,7 +6,7 @@
 
        .export         _strncpy
        .import         popax
-       .importzp       ptr1, ptr2, ptr3, tmp1, tmp2
+       .importzp       ptr1, ptr2, tmp1, tmp2, tmp3
 
 .proc   _strncpy
 
         txa
         eor     #$FF
         sta     tmp2            ; Store -size - 1
+
                jsr     popax           ; get src
        sta     ptr1
        stx     ptr1+1
        jsr     popax           ; get dest
        sta     ptr2
        stx     ptr2+1
-       sta     ptr3            ; remember for function return
-       stx     ptr3+1
+               stx     tmp3            ; remember for function return
 
 ; Copy src -> dest up to size bytes
 
@@ -35,30 +35,32 @@ L1:     inx
 
 L2:     lda     (ptr1),y        ; Copy one character
         sta     (ptr2),y
-        beq     L3              ; Bail out if terminator reached
+        beq     L5              ; Bail out if terminator reached (A = 0)
         iny
         bne     L1
         inc     ptr1+1
         inc     ptr2+1          ; Bump high bytes
         bne     L1              ; Branch always
-                   
-; Fill the remaining bytes. A is zero if we come here
 
-L3:     inx
-        bne     L4
-        inc     tmp2
-        beq     L9
+; Fill the remaining bytes.
 
-L4:     sta     (ptr2),y
-        iny
+L3:     inx                     ; Counter low byte
+        beq     L6              ; Branch on overflow
+L4:     sta     (ptr2),y        ; Clear one byte
+L5:     iny                     ; Bump pointer
         bne     L3
         inc     ptr2+1          ; Bump high byte
         bne     L3              ; Branch always
 
+; Bump the counter high byte
+
+L6:     inc     tmp2
+        bne     L4
+
 ; Done, return dest
 
-L9:     lda     ptr3
-        ldx     ptr3+1
+L9:     lda     ptr2            ; Get low byte
+        ldx     tmp3            ; Get unchanged high byte
         rts
 
 .endproc