900 SYS 700 ;ACTIVATE PAL 64 ASSEMBLER 1000 *=828 1010 ; 1020 SRCE =25 ;PARAMETER - LOCATION OF SRCE ADDRESS 1030 DEST =27 ;PARAMETER - LOCATION OF DEST ADDRESS 1040 NBYTES =29 ;PARAMETER - LOCATION OF NUMBER OF BYTES 1050 ; 1060 NBLKS =NBYTES+1 ;NUMBER OF FULL BLOCKS TO MOVE 1070 ; 1080 MOVE LDA NBLKS ;GET NUMBER OF FULL BLOCKS TO MOVE 1090 BEQ DONEBL ;IF NONE THEN TEST FOR PARTIAL BLOCK 1100 LDA #0 ;SET COMPARISON VALUE FOR TRANSFER 1110 START STA REMAIN ;256 BYTE BLOCKS (0=256) 1120 LDY #0 ;SET INDEX TO POINT TO FIRST BYTE OF BLOCK 1130 ; 1140 NXTBYT LDA (SRCE),Y ;GET NEXT SOURCE BYTE 1150 STA (DEST),Y ;STORE AT NEXT DESTINATION SLOT 1160 INY ;SET INDEX TO POINT TO NEXT BYTE 1170 CPY REMAIN ;COMPARE TO REMAINING BYTES VALUE 1180 BNE NXTBYT ;IF NOT ALL MOVED THEN DO NEXT BYTE 1190 ; 1200 INC SRCE+1 ;INCREMENT SRCE ADDRESS BY ONE BLOCK 1210 INC DEST+1 ;INCREMENT DEST ADDRESS BY ONE BLOCK 1220 DEC NBLKS ;DECREMENT NUMBER OF FULL BLOCKS TO MOVE 1230 BMI DONE ;IF MINUS THEN WE ARE DONE ALL BYTES 1240 BNE NXTBYT ;IF POSITIVE WE HAVE MORE BLOCKS TO DO 1250 ; 1260 DONEBL LDA NBYTES ;DO WE HAVE A PARTIAL BLOCK 1270 BNE START ;IF YES THEN MOVE IT 1280 DONE RTS ;RETURN TO CALLING ROUTINE 1290 ; 1300 REMAIN *=*+1 ;NUMBER OF BYTES TO MOVE IN CURRENT BLOCK