; SUBROUTINE TO MOVE MEMORY ; ENTRY: (HL) = SOURCE START. ; (DE) = DESTINATION START. ; (BC) = NUMBER OF BYTES TO MOVE. ; EXIT: (HL) = SOURCE AREA +1. ; (DE) = DESTINATION AREA + 1. ; (BC) = 0. ; .org 0000h LD SP, 0080h ; ADDED FOR TESTING PURPOSES. LD HL, 50h LD DE, 60h LD BC, 10 LD A, 00h CALL MOVE HALT MOVE: PUSH HL ; SAVE SOURCE POINTER. OR A ; CLEAR CARRY. SBC HL, DE ; SOURCE - DESTINATION POINTERS. POP HL ; RESTORE POINTER. JP C, MOV10 ; GO IF MOVE BACK. LDIR ; MOVE FORWARD. JR MOV20 ; GO TO RETURN. MOV10: ADD HL, BC ; POINT TO END +1. DEC HL ; POINT TO END. EX DE, HL ; SWAP. ADD HL, BC ; POINT TO END +1. DEC HL ; POINT TO END. EX DE, HL ; SWAP BACK. LDDR ; MOVE BACK MOV20: RET ; RETURN .ORG 0050h FIFTY: .DB 00h,01h,02h,03h,04h,05h,06h,07h,08h,09h,0Ah .END