.TITLE MMOVD MOVE A MATRIX TO ANOTHER MATRIX (DOUBLE PRE.) .IDENT /1.0/ ; 08/15/79 .GLOBL MMOVD, M3MOVD, MPMOVD .ENABL LSB ; F0=R0 ;DEFINE FLOATING REGISTER 0 M3MOVD: CMP #2,(R5) ;CHECK FOR 2 ARGUMENTS BNE BOMB3 ;BOMB IF # OF ARGS. NE 2 MOV #3,R0 ;R0=M=3 MOV R0,R1 ;R1=N=3 BR 20$ MPMOVD: CMP #6,(R5) ;ARE THERE 6 ARGUMENTS? BNE BOMBP ;BOMB IF # OF ARGS. NE 6 MOV @6(R5),R0 ;R0=M MOV @10(R5),R1 ;R1=N MOV R0,-(SP) ;MOVE M ON STACK MOV @12(R5),R2 ;GET NRA SUB R0,R2 ;NRA-M ASH #3,R2 ;R2=8*(NRA-M) MOV @14(R5),R3 ;GET NRC SUB R0,R3 ;NRC-M ASH #3,R3 ;R3=8*(NRC-M) BR 40$ MMOVD: CMP #4,(R5) ;CHECK FOR 4 ARGUMENTS BNE BOMB ;BOMB IF # OF ARGS. NE 4 MOV @6(R5),R0 ;R0=M MOV @10(R5),R1 ;R1=N 20$: MOV R0,-(SP) ;MOVE M ON STACK MOV #0,R2 ;R2=8*(NRA-M)=0 MOV R2,R3 ;R3=8*(NRC-M)=0 40$: MOV 2(R5),R4 ;R4=ADDRESS OF C MOV 4(R5),R5 ;R5=ADDRESS OF A SETD ;SET FLOATING DOUBLE MODE BR 60$ ;LOOP TO MOVE MATRIX 50$: ADD R3,R4 ;GO TO START OF NEXT COLUMN OF C ADD R2,R5 ;GO TO START OF NEXT COLUMN OF A MOV (SP),R0 ;RESET M 60$: LDD (R5)+,F0 ;A(I) STD F0,(R4)+ ;C(I)=A(I) SOB R0,60$ ;DONE WITH THIS COLUMN? SOB R1,50$ ;DONE WITH ALL COLUMNS? ADD #2,SP ;RESTORE STACK RTS PC ;RETURN BOMBP: MOV #60464,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #51715,R4 ;MOVE 1ST HALF OF NAME TO R4 BR 70$ BOMB3: MOV #60464,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #53165,R4 ;MOVE 1ST HALF OF NAME TO R4 BR 70$ BOMB: MOV #105040,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #51527,R4 ;MOVE 1ST HALF OF NAME TO R4 70$: JSR R4,NAM$ ;SUBR TO PUT NAME IN WALKBACK JMP $BOMB ;ABORT, $BOMB DOES NOT EXIST .END