.TITLE IDENT FORMS AN IDENTITY MATRIX .IDENT /1.0/ ; 08/15/79 ;+ ++EXTSPC>> ;.NAME IDENT ;.INDEX IDENTD ;.TITLE SUBROUTINE IDENT ; ; CALL IDENT (C,M,NRC) ; ; CALL IDENTD (C,M,NRC) ; ; VERSION: VECTOR / MATRIX ROUTINES SAM MILLER REL 1.0 ; ; FUNCTION: ; ; C IS SET TO THE IDENTITY MATRIX ; ; ; LANGUAGE: MACRO-11 ; ; ; ARGUMENTS: ; ; C = OUTPUT MATRIX (RESULT IS STORED IN UPPER M X M SUBMATRIX) ; M = NUMBER OF DIAGONAL ELEMENTS TO SET = 1.0 ; NRC = NUMBER OF ROWS IN C ; ; ; COMMONS: ; ; (NONE) ; ; ; GENERAL DESCRIPTION: ; ; ALL INTEGER ARGUMENTS EXCEPT REAL C. ; ; SINGLE PRECISION - IDENT ; ; DOUBLE PRECISION - IDENTD ; ; ; ; PERIPHERAL INPUT/OUTPUT: ; ; (NONE) ; ; ; LOGICAL UNIT USAGE: ; ; (NONE) ; ; ; EXTERNAL ROUTINES CALLED: ; ; NAM$ ; $BOMB ; ;- --EXTSPC>> ; ; WRITTEN BY: ; ; DENIS MAHONY AND SAM MILLER 08/15/79 ; ; ; MODIFIED BY: ; ; ********** **DATE** ; **DETAIL** ; ;- --EXTSPC>> .PAGE .GLOBL IDENT .ENABL LSB ; F0=R0 ;DEFINE FLOATING REGISTER 0 F1=R1 ;DEFINE FLOATING REGISTER 1 IDENT: CMP #3,(R5)+ ;CHECK NUMBER OF ARGUMENTS BNE BOMB ;BOMB IF # OF ARGS. IS INCORRECT MOV (R5)+,R0 ;R0=ADDRESS OF C MOV @(R5)+,R1 ;R1=N MOV @(R5),R2 ;R2=NRC MOV R2,R3 ;R3=NRC MOV R2,R4 ;NRC ADD #1,R4 ;NRC+1 ASH #2,R4 ;R4=4*(NRC+1) - OFFSET FOR DIAGONAL ELEMENTS MOV R0,R5 ;R5=(C) (NEXT ELEMENT TO SET =1) SETF CLRF F0 ;F0=0 LDF #1.,F1 ;F1=1. ;LOOP TO 'IDENTIZE' MATRIX 10$: STF F0,(R0)+ ;C(I,J)=0 SOB R2,10$ ;DONE WITH THIS COLUMN? STF F1,(R5) ;SET DIAGONAL ELEMENT = 1. ADD R4,R5 ;SET NEXT DIAGONAL ELEMENT MOV R3,R2 ;RESET NRC SOB R1,10$ ;DONE WITH ALL COLUMNS? RTS PC ;RETURN BOMB: MOV #55240,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #34345,R4 ;MOVE 1ST HALF OF NAME TO R4 JSR R4,NAM$ ;SUBR TO PUT NAME IN WALKBACK JMP $BOMB ;ABORT, $BOMB DOES NOT EXIST .END