diff --git a/libsrc/common/copydata.s b/libsrc/common/copydata.s index 10f409ca9..b0a9987fd 100644 --- a/libsrc/common/copydata.s +++ b/libsrc/common/copydata.s @@ -1,53 +1,49 @@ ; -; Ullrich von Bassewitz, 07.12.1998 +; Ullrich von Bassewitz, 1998-12-07, 2004-12-01 ; ; Copy the data segment from the LOAD to the RUN location ; .export copydata .import __DATA_LOAD__, __DATA_RUN__, __DATA_SIZE__ - .importzp ptr1, ptr2 + .importzp ptr1, ptr2, tmp1 copydata: - lda #<__DATA_LOAD__ ; Source pointer + lda #<__DATA_LOAD__ ; Source pointer sta ptr1 lda #>__DATA_LOAD__ sta ptr1+1 - lda #<__DATA_RUN__ ; Target pointer + lda #<__DATA_RUN__ ; Target pointer sta ptr2 lda #>__DATA_RUN__ sta ptr2+1 - ldy #$00 - ldx #>__DATA_SIZE__ ; Get page count - beq @L2 ; No full pages + ldx #<~__DATA_SIZE__ + lda #>~__DATA_SIZE__ ; Use -(__DATASIZE__+1) + sta tmp1 + ldy #$00 -; Copy full pages +; Copy loop -@L1: lda (ptr1),y - sta (ptr2),y - iny - bne @L1 - inc ptr1+1 - inc ptr2+1 ; Bump pointers - dex - bne @L1 +@L1: inx + beq @L3 -; Copy last page (remember: y contains zero) +@L2: lda (ptr1),y + sta (ptr2),y + iny + bne @L1 + inc ptr1+1 + inc ptr2+1 ; Bump pointers + bne @L1 ; Branch always (hopefully) -@L2: ldx #<__DATA_SIZE__ ; Get remaining bytes - beq @L4 +; Bump the high counter byte -@L3: lda (ptr1),y - sta (ptr2),y - iny - dex - bne @L3 +@L3: inc tmp1 + bne @L2 ; Done -@L4: rts - + rts