Code: Select all
.export moveram
.importzp s, d, c
.code
.proc moveram
ldy #0
ldx c
sty c
inc c+1 ; *honk!*
cmp #0
bne copy_backwards
copy_forwards:
l: lda (s),y
sta (d),y
inc s
beq k
n: inc d
beq m
q: dex
bne l
dec c+1
bne l
rts
k: inc s+1
jmp n
m: inc d+1
jmp q
copy_backwards:
l2: lda (s),y
sta (d),y
dec s
lda s
cmp #$ff
beq m2
n2: dec d
lda d
cmp #$ff
beq j2
q2: dex
bne l2
dec c+1
bne l2
rts
m2: dec s+1
jmp n2
j2: dec d+1
jmp q2
.endproc