;THIS SUBROUTINE MOVES A BLOCK OF DATA IN MEMORY. THE STARTING
;ADDRESS OF THE DATA IS CONTAINED IN LOCATIONS $40 (LOW ADDRESS
;BYTE) AND $41 (HIGH ADDRESS BYTE). THE STARTING ADDRESS OF
;THE DESTINATION OF THE DATA IS CONTAINED IN LOCATIONS $42 (LOW
;ADDRESS BYTE) AND $43 (HIGH ADDRESS BYTE). THE NUMBER OF BYTES
;TO BE MOVED IS CONTAINED IN LOCATION $44.

MOVE8	LDX	$44	/LOAD BYTE COUNT INTO X REGISTER
	SEC		/CALCULATE MOVE DISPLACEMENT
	LDA	$42
	SBC	$40
	LDA	$43
	SBC	$41
	BMI	DISPN	/DISPLACEMENT NEGATIVE?
	LDY	$44	/NO. START MOVE WITH LAST BYTE
CONTI	DEY
	LDA	($40),Y	/LOAD BYTE FROM SOURCE LOCATION
	STA	($42),Y	/ AND STORE IT AT DESTINATION LOCATION
	DEX		/DECREMENT BYTE COUNT
	BNE	CONTI	/LOOP UNTIL ALL BYTES MOVED
RTS
DISPN	LDY	#00	/START MOVE WITH FIRST BYTE
CONT2	LDA	($40),Y	/LOAD BYTE FROM SOURCE LOCATION
	STA	($42),Y	/ AND STORE IT AT DESTINATION LOCATION
	INY		/INDEX TO NEXT BYTE
	DEX		/DECREMENT BYTE COUNT
BNE	CONT2		/LOOP UNTIL ALL BYTES MOVED
	RTS
