!!! RAM Move Routine {{{ 01 ; MOVE$ RAM MOVER SUBROUTINE 02 ; BY D.W. HOWERTON 03 ; CALL FROM BASIC WITH THE FORM: 04 ; X=USR(ADR(MOVE$),FROM,TO,#BYTES) 05 ; WHERE: FROM=MEM. LOCATION TO MOVE 06 ; TO=TARGET LOCATION 07 ; #BYTES=NO. OF BYTES TO MOVE 08 ; 10 *= $0600 ;RELOCATABLE 20 FROM = $D2 ;ZERO PGE STORAGE 30 TO = $D4 ;FOR LOC USED IN 40 NUM = $D6 ;SUBROUTINE 50 PLA ;UNUSED-DISCARD 60 PLA ;HI BYTE OF FROM 70 STA FROM+1 ;STORE IT 80 PLA ;LOW BYTE OF FROM 90 STA FROM ;STORE IT 0100 PLA ;HIGH BYTE OF TO 0110 STA TO+1 ;STORE IT 0120 PLA ;LOW BYTE OF TO 0130 STA TO ;STORE IT 0140 PLA ;HI BYTE #BYTES 0150 STA NUM ;STORE IT 0160 PLA ;LO BYTE #BYTES 0170 TAX ;X IS COUNTER 0190 BNE START ;GO AHEAD 0200 DEC NUM ;PREVENT MOVING 0205 ; EXTRA PAGE OF MEM 0210 START LDY #0 ;USE FOR INDEXING 0220 MOVE LDA (FROM),Y ;BYTE TO MOVE 0230 STA (TO),Y ;MOVE IT 0240 INY ;INCREMENT INDEX 0250 BNE NEXT ;IF<>0 A PAGE 0255 ; HASN'T BEEN MOVED 0260 INC FROM+1 ;INCREMENT THE 0270 INC TO+1 ;HIGH BYTES 0280 NEXT DEX ;-LO BYTE COUNTER 0290 BNE MOVE ;MOVE ANOTHR BYTE 0300 DEC NUM ;-HI BYTE COUNTER 0310 BPL MOVE ;IF POS DO MORE 0320 RTS ;RETURN TO BASIC }}}