.TITLE DOLOOP ; SUBROUTINE DOLOOP ; ; CONTAINS ENTRY POINTS DOBYTE, DOWORD, DOREAL, BYTEDO, WORDDO, REALDO ; DOBYTE:: ; SUBROUTINE DOBYTE(ADD1,ADD2,VAL1) ; ; THIS ROUTINE TRANSFERS VAL1 TO ADD1-ADD2, BYTE BY BYTE ; CHECK IF PARAMETERS OK ; CMP #3,(R5) ; SEE IF 3 BNE 4$ ; RETURN IF NOT 3 ; ; GET FORWARD OR BACKWARD LOOP GOING ; MOV 2(R5),R1 ; GET ADDRESS OF ADD1 MOV 4(R5),R2 ; GET ADDRESS OF ADD2 MOV 6(R5),R3 ; GET ADDRESS OF VAL CMP R1,R2 ; COMPARE FOR TEST ADD1-ADD2 BGE 2$ ; ADD1 GE ADD2, GO BACKWARD 1$: MOVB (R3),(R1)+ ;MOVE DATA AND ADVANCE CMP R1,R2 ; SEE IF FINISHED BLE 1$ ;NOT FINISHED IF ADD1 LE ADD2 4$: RTS PC ; RETURN TO MAIN PROG ; ; BACKWARD SECTION ; 2$: MOV 4(R5),R1 ; PLACE HIGHER IN R1 MOV 2(R5),R2 ; PLACE LOWER IN R2 BR 1$ ; GO TO FORWARD SECTION WITH PARAM REVERSED BYTEDO:: ; SUBROUTINE BYTEDO(ADD1,ADD2,ADD3) ; ; THIS ROUTINE TRANSFERS ADD3-ADD4 TO ADD1-ADD2, BYTE BY BYTE ; CHECK IF PARAMETERS OK ; CMP #3,(R5) ; SEE IF 3 BNE 4$ ; RETURN IF NOT 3 ; ; GET FORWARD OR BACKWARD LOOP GOING ; MOV 2(R5),R1 ; GET ADDRESS OF ADD1 MOV 4(R5),R2 ; GET ADDRESS OF ADD2 MOV 6(R5),R3 ; GET ADDRESS OF VAL CMP R1,R2 ; COMPARE FOR TEST ADD1-ADD2 BGE 2$ ; ADD1 GE ADD2, GO BACKWARD 1$: MOVB (R3)+,(R1)+ ;MOVE DATA AND ADVANCE CMP R1,R2 ; SEE IF FINISHED BLE 1$ ;NOT FINISHED IF ADD1 LE ADD2 4$: RTS PC ; RETURN TO MAIN PROG ; ; BACKWARD SECTION ; 2$: INC R3 ; SET UP ONE HIGHER TO ALLOW FOR DEC INC R1 ; SET UP ONE HIGHER TO ALLOW FOR DEC 3$: MOVB -(R3),-(R1) ; MOVE BYTE CMP R1,R2 ; CHECK IF FINISHED BGT 3$ ; CONTINUE IF NOT RTS PC ;RETURN DOWORD:: ; SUBROUTINE DOWORD(ADD1,ADD2,VAL1) ; ; THIS ROUTINE TRANSFERS VAL1 TO ADD1-ADD2, WORD BY WORD ; CHECK IF PARAMETERS OK ; CMP #3,(R5) ; SEE IF 3 BNE 4$ ; RETURN IF NOT 3 ; ; GET FORWARD OR BACKWARD WORD GOING ; MOV 2(R5),R1 ; GET ADDRESS OF ADD1 MOV 4(R5),R2 ; GET ADDRESS OF ADD2 MOV 6(R5),R3 ; GET ADDRESS OF VAL CMP R1,R2 ; COMPARE FOR TEST ADD1-ADD2 BGE 2$ ; ADD1 GE ADD2, GO BACKWARD 1$: MOV (R3),(R1)+ ;MOVE DATA AND ADVANCE CMP R1,R2 ; SEE IF FINISHED BLE 1$ ;NOT FINISHED IF ADD1 LE ADD2 4$: RTS PC ; RETURN TO MAIN PROG ; ; BACKWARD SECTION ; 2$: MOV 4(R5),R1 ; PLACE HIGHER IN R1 MOV 2(R5),R2 ; PLACE LOWER IN R2 BR 1$ ; GO TO FORWARD SECTION WITH PARAM REVERSED WORDDO:: ; SUBROUTINE WORDDO(ADD1,ADD2,ADD3) ; ; THIS ROUTINE TRANSFERS ADD3-ADD4 TO ADD1-ADD2, WORD BY WORD ; CHECK IF PARAMETERS OK ; CMP #3,(R5) ; SEE IF 3 BNE 4$ ; RETURN IF NOT 3 ; ; GET FORWARD OR BACKWARD LOOP GOING ; MOV 2(R5),R1 ; GET ADDRESS OF ADD1 MOV 4(R5),R2 ; GET ADDRESS OF ADD2 MOV 6(R5),R3 ; GET ADDRESS OF VAL CMP R1,R2 ; COMPARE FOR TEST ADD1-ADD2 BGE 2$ ; ADD1 GE ADD2, GO BACKWARD 1$: MOV (R3)+,(R1)+ ;MOVE DATA AND ADVANCE CMP R1,R2 ; SEE IF FINISHED BLE 1$ ;NOT FINISHED IF ADD1 LE ADD2 4$: RTS PC ; RETURN TO MAIN PROG ; ; BACKWARD SECTION ; 2$: ADD #2,R3 ; ALLOW FOR WORD BOUNDRY ADD #2,R1 ; ALLOW FOR WORD BOUNDRY 3$: MOV -(R3),-(R1) ; MOVE WORD CMP R1,R2 ; CHECK IF FINISHED BGT 3$ ; CONTINUE IF NOT RTS PC ;RETURN DOREAL:: ; SUBROUTINE DOREAL(ADD1,ADD2,VAL1) ; ; THIS ROUTINE TRANSFERS VAL1 TO ADD1-ADD2, REAL BY REAL ; CHECK IF PARAMETERS OK ; CMP #3,(R5) ; SEE IF 3 BNE 4$ ; RETURN IF NOT 3 ; ; GET FORWARD OR BACKWARD REAL GOING ; MOV 2(R5),R1 ; GET ADDRESS OF ADD1 MOV 4(R5),R2 ; GET ADDRESS OF ADD2 MOV 6(R5),R3 ; GET ADDRESS OF VAL CMP R1,R2 ; COMPARE FOR TEST ADD1-ADD2 BGE 2$ ; ADD1 GE ADD2, GO BACKWARD 1$: MOV (R3),(R1)+ ;MOVE DATA AND ADVANCE MOV 2(R3),(R1)+ ; MOVE SECOND PART OF WORD OVER CMP R1,R2 ; SEE IF FINISHED BLE 1$ ;NOT FINISHED IF ADD1 LE ADD2 4$: RTS PC ; RETURN TO MAIN PROG ; ; BACKWARD SECTION ; 2$: MOV 4(R5),R1 ; PLACE HIGHER IN R1 MOV 2(R5),R2 ; PLACE LOWER IN R2 BR 1$ ; GO TO FORWARD SECTION WITH PARAM REVERSED REALDO:: ; SUBROUTINE REALDO(ADD1,ADD2,ADD3) ; ; THIS ROUTINE TRANSFERS ADD3-ADD4 TO ADD1-ADD2, REAL BY REAL ; CHECK IF PARAMETERS OK ; CMP #3,(R5) ; SEE IF 3 BNE 4$ ; RETURN IF NOT 3 ; ; GET FORWARD OR BACKWARD LOOP GOING ; MOV 2(R5),R1 ; GET ADDRESS OF ADD1 MOV 4(R5),R2 ; GET ADDRESS OF ADD2 MOV 6(R5),R3 ; GET ADDRESS OF VAL CMP R1,R2 ; COMPARE FOR TEST ADD1-ADD2 BGE 2$ ; ADD1 GE ADD2, GO BACKWARD 1$: MOV (R3)+,(R1)+ ;MOVE DATA AND ADVANCE MOV (R3)+,(R1)+ ; MOVE REAL SECOND PART CMP R1,R2 ; SEE IF FINISHED BLE 1$ ;NOT FINISHED IF ADD1 LE ADD2 4$: RTS PC ; RETURN TO MAIN PROG ; ; BACKWARD SECTION ; 2$: ADD #4,R3 ; INC TO REAL WORD ENDING ADD #4,R1 ; INC TO REAL WORD ENDING 3$: MOV -(R3),-(R1) ; MOVE REAL MOV -(R3),-(R1) ; MOVE SECOND PART CMP R1,R2 ; CHECK IF FINISHED BGT 3$ ; CONTINUE IF NOT RTS PC ;RETURN .END