1234567891011121314151617181920212223242526272829303132333435363738 |
- .define Blm, Blmnp
- .sect .text
- .sect .rom
- .sect .data
- .sect .bss
- .sect .text
- ! This subroutine copies bytes from one place in memory to
- ! another. The source address is in registerpair AX and is stored
- ! in zeropage locations ADDR and ADDR+1.
- ! The destination address is popped from the stack and stored in
- ! zeropage locations ADDR+2 and ADDR+3.
- ! The number of bytes to be copied is in register Y (lowbyte) and
- ! zeropage location NBYTES+1 (highbyte).
- ! The subroutine Blmnp is used when the source and destination
- ! addresses are already in zeropage.
- Blm:
- stx ADDR+2 ! source address (lowbyte)
- sta ADDR+3 ! source address (highbyte)
- jsr Pop
- stx ADDR ! destination address (lowbyte)
- sta ADDR+1 ! destination address (highbyte)
- Blmnp: ldx NBYTES+1
- 1: dey
- lda (ADDR),y ! get source byte
- sta (ADDR+2),y ! copy to destination
- tya
- bne 1b
- dec ADDR+1 ! 256 bytes copied
- dec ADDR+3 ! decrement source and destination address
- ldy #0
- dex
- bne 1b ! do it n times
- rts
|