This is my attempt, definitely uses more code.
This is untested so may have multiple errors.
Code:
xpal p3 ; 2s complement of p3
xri 0xFF
xpal p3
xpah p3
xri 0xFF
xpah p3
ld @1(p3)
copyloop:
ld @1(p1)
st @1(p2)
ld @1(p3) ; Increment p3
xpal p3
jnz loop1
xpal p3
xpah p3
xae
ldi 0x0F
ane
jnz loop2
ldi 0x10
ade
jz end
xpah p3
jmp loop3
loop2:
xae
xpah p3
jmp loop3
loop1:
xpal p3
loop3:
xpal p1 ; check for p1 page boundry crossed
jnz loop4
xpal p1
xpah p1
xae
ldi 0x0F
ane
jnz loop5
ldi 0x10
ade
xpah p1
jmp loop6
loop5:
xae
xpah p1
loop4:
xpal p1
loop6:
xpal p2 ; check for p2 page boundry crossed
jnz loop7
xpal p2
xpah p2
xae
ldi 0x0F
ane
jnz loop9
ldi 0x10
ade
xpah p2
jmp copyloop
loop9:
xae
xpah p2
loop7:
xpal p2
jmp copyloop
end: