.TITLE VECTOR .GLOBL .ABSV,.ADDV,.CLRV,.CROSV,.DOTV,.MOVV,.MULV,.SUBV .MCALL .MOVF,.SQRT A0=R0 A1=R1 ; .MACRO .ABSV A,X ;X=SQRT(AX**2+AY**2+AZ**2) LENGTH XX: .BLKW 2 ABSA: .BLKW 1 .ABSV: MOV R0,-(SP) STF A0,-(SP) STF A1,-(SP) MOV ABSA,R0 LDF (R0)+,A0 MULF A0,A0 LDF (R0)+,A1 MULF A1,A1 ADDF A1,A0 LDF (R0),A1 MULF A1,A1 ADDF A1,A0 .SQRT A0,XX LDF (SP)+,A1 LDF (SP)+,A0 MOV (SP)+,R0 RETURN ; .MACRO .ADDV A,B,C ;C-VECTOR = A-VECTOR + B-VECTOR C: .BLKW 1 ;ADDRESS OF C-VECTOR B: .BLKW 1 A: .BLKW 1 .ADDV: MOV R0,-(SP) MOV R1,-(SP) MOV R2,-(SP) STF A0,-(SP) MOV A,R0 MOV B,R1 MOV C,R2 .REPT 3 LDF (R0)+,A0 ADDF (R1)+,A0 STF A0,(R2)+ .ENDR LDF (SP)+,A0 MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 RETURN ; .MACRO .CLRV A ;A-VECTOR =0 A2: .BLKW 1 .CLRV: MOV R0,-(SP) MOV A2,R0 .REPT 3 CLRF (R0)+ .ENDR MOV (SP)+,R0 RETURN ;CROSS PRODUCT: C = AxB ; .MACRO A,B,C FOR VECTORS OF 3 COMPONENTS ; | ex ey ez | ;C = | Ax Ay Az | ; | Bx By Bz | C3: .BLKW 1 ;ADDRESS C B3: .BLKW 1 A3: .BLKW 1 .CROSV: MOV R0,-(SP) MOV R1,-(SP) MOV R2,-(SP) STF A0,-(SP) STF A1,-(SP) MOV A3,R0 ;FOR ADDRESSING VECTORS MOV B3,R1 MOV C3,R2 LDF 4(R0),A0 ;Cx=Ay*Bz - Az*By MULF 10(R1),A0 LDF 10(R0),A1 MULF 4(R1),A1 SUBF A1,A0 STF A0,(R2)+ LDF 10(R0),A0 ;Cy= Az*Bx - Ax*Bz MULF (R1),A0 LDF (R0),A1 MULF 10(R1),A1 SUBF A1,A0 STF A0,(R2)+ LDF (R0),A0 ;Cz=Ax*By - Ay*Bx MULF 4(R1),A0 LDF 4(R0),A1 MULF (R1),A1 SUBF A1,A0 STF A0,(R2) LDF (SP)+,A1 LDF (SP)+,A0 MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 RETURN ; .MACRO .DOTV A,B,X ;SCALAR X = A.B DOT PRODUCT .GLOBL .DOTV A0=R0 A1=R1 X: .BLKW 2 ;SCALAR B4: .BLKW 1 ;ADDRESS OF VECTOR B A4: .BLKW 1 .DOTV: MOV R0,-(SP) MOV R1,-(SP) STF A0,-(SP) STF A1,-(SP) MOV A4,R0 MOV B4,R1 CLRF A1 .REPT 3 LDF (R0)+,A0 MULF (R1)+,A0 ADDF A0,A1 .ENDR STF A1,X LDF (SP)+,A1 LDF (SP)+,A0 MOV (SP)+,R1 MOV (SP)+,R0 RETURN ; .MACRO .MOVV A,B ;B-VECTOR =A-VECTOR B5: .BLKW 1 A5: .BLKW 1 .MOVV: MOV R0,-(SP) MOV R1,-(SP) MOV A5,R0 MOV B5,R1 .REPT 3 .MOVF (R0)+,(R1)+ .ENDR MOV (SP)+,R1 MOV (SP)+,R0 RETURN ; .MACRO .MULV A,X,B ;B-VECTOR = A-VECTOR * X-SCALAR B6: .BLKW 1 X6: .BLKW 2 A6: .BLKW 1 .MULV: MOV R0,-(SP) MOV R1,-(SP) STF A0,-(SP) MOV A6,R0 MOV B6,R1 .REPT 3 LDF (R0)+,A0 MULF X6,A0 STF A0,(R1)+ .ENDR LDF (SP)+,A0 MOV (SP)+,R1 MOV (SP)+,R0 RETURN ; .MACRO .SUBV A,B,C ;C-VECTOR = A-VECTOR - B-VECTOR C7: .BLKW 1 B7: .BLKW 1 A7: .BLKW 1 .SUBV: MOV R0,-(SP) MOV R1,-(SP) MOV R2,-(SP) STF A0,-(SP) MOV A7,R0 MOV B7,R1 MOV C7,R2 .REPT 3 LDF (R0)+,A0 SUBF (R1)+,A0 STF A0,(R2)+ .ENDR LDF (SP)+,A0 MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 RETURN .END