C*******--PDP-11 AUTOCORRELATION ASSEMBLER GENERATOR************ C GENERATES KNOTTED CODE AUTOCORRELATION PROGRAM C FOR PDP-11/34,40,45,55,70 AND LSI/11 C --I.E., USING 'MUL' AND 'ASHC' INSTRUCTION-- C WRITES FILE NAMED 'AUTO.NOT' ON SY0. C USES PFIEFER/BLANKINSHIP AUTOCORRRELATION ALGORITHM C WITH RESTRICTION THAT P<0.5N, N=# POINTS,P=#LAGS. C EXAMPLE OF USE OF 'AUTO.NOT': C FOR N=128,P+1=10, MAIN PROG HAS INTEGER IR(20), C INTEGER*4 IIR(10),EQUIVALENCE (IR(1),IIR(1)) C COMMON /YY/IX(128), AND THEN CALL AUTO(IR(1)). C OUTPUT IS DOUBLE INTEGER WITH HIGH 16 BITS IN EVEN C POSITONS AND LOW 16 BITS IN ODD POSITIONS OF ARRAY IR. C ALTERNATIVELY, THE DOUBLE INTEGER ARRAY IIR MAY BE CONVERTED C TO FLOATING POINT AND THE RESULTANT NUMBERS ENTERED INTO C AN AUTOCORRELATION MATRIX SOLUTION. RESULTS ARE NORMALIZED C SUCH THAT 2**14<16 MSB'S OF R(0)<2**15-1. C GENERATED PROGRAM REQUIRES ABOUT 0.5NP MEMORY LOCATIONS C AND EXECUTES IN K[N(5.55+3.98P)+5.55P] USEC, C WHERE K=1 FOR 11/55 (BIPOLAR), K=3 FOR 11/34,40, AND C K=9 FOR LSI 11. DIMENSION INAM(6) DATA INAM(1),INAM(2),INAM(3),INAM(4),INAM(5),INAM(6)/ + 2HSY,2H0:,2HAU,2HTO,2H.N,2HOT/ IUNIT=5 CALL ASSIGN(IUNIT,INAM(1),12) CALL ASSIGN(6,'TI:') WRITE(6,770) READ(6,780) N WRITE(6,790) READ(6,780) M MP1=M+1 WRITE(5,800) WRITE(5,810) WRITE(5,840) WRITE(5,850) N WRITE(5,820) C WRITE(5,890) C DO 150 JJ=2,MP1 NDEL=JJ-1 NQ=N/(2*NDEL) NN=2*NDEL*NQ IF (NN.NE.N) NQ=NQ+1 NLAST=1 C DO 160 JK=1,NQ JL=JK-1 NB1=NDEL*(2*JL+1) NB2=NDEL*(2*JL) NB3=NDEL*(2*JL+2) C DO 161 I=1,NDEL II=I N1=NB1+I N2=NB2+I N3=NB3+I IN1=N1+N1-2 IF (N2.GE.N) GO TO 161 IF (N3.GT.N) GO TO 158 C WRITE OUT (A+B)*C WRITE(5,900) IN1 NLAST=1 GO TO 161 158 IF (N1.GT.N) GO TO 161 IF (N3.LE.N) GO TO 161 C WRITE OUT A*C IF(NLAST.EQ.1) WRITE(5,902) WRITE(5,900) IN1 NLAST=2 161 CONTINUE 155 IF(JK.NE.NQ) GO TO 160 IF(II.NE.NDEL) GO TO 160 C LAST TIME PUT ZERO WRITE(5,902) IF(NLAST.EQ.1) WRITE(5,902) 160 CONTINUE 150 CONTINUE WRITE(5,902) WRITE(5,910) END FILE 5 STOP 770 FORMAT(1X,'ENTER THE NUMBER OF POINTS IN I4 FORMAT:',/) 780 FORMAT(I4) 790 FORMAT(1X,'ENTER THE DELAY IN I4 FORMAT:',/) 800 FORMAT(9X,'.TITLE AUTO',/9X,'.GLOBL AUTO',/9X,'.IRPC X,0123456' + ,/9X,'R''X=%''X',/9X,'.ENDM',/9X,'.CSECT YY',/9X,'IX=.',/9X, + '.CSECT',/9X,'PC=%7',/) 810 FORMAT(/9X,'.MACRO SUMSQ',/9X,'MOV (R0)+,R4',/9X,'MUL R4,R4' + ,/9X,'ADD R5,R3',/9X,'ADC R4',/9X,'ADD R4,R2' + ,/9X,'SOB R1,.-10.',/9X,'.ENDM',/X,'A: 0'/) 820 FORMAT(/9X,'MOV (R0)+,R1',/X,'SUB:',/9X,'CLR R2',/9X,'CLR R3', + /9X,'SUB #2,SUB+24.',/9X,'ADD #2,SUB+28.',/9X,'SUB #2,SUB+48.', + /9X,'MOV A(R1),R4',/9X,'ADD A(R1),R4',/9X, + 'MUL (R1),R4',/9X,'ADD R5,R3',/9X,'ADC R4',/9X,'ADD R4,R2', + /9X,'MOV (R0)+,R1',/9X,'BNE .-18.',/9X,'MOV (R0)+,R1',/9X, + 'BEQ .+18.',/9X,'MOV A(R1),R4',/9X,'MUL (R1),R4',/9X, + 'ADD R5,R3',/9X,'ADC R4',/9X,'ADD R4,R2',/9X,'MOV (R0)+,R1', + /9X,'BNE .-14.',/9X,'ASHC (R6),R2',/9X,'MOV R3,@OUT',/9X, + 'ADD #2,OUT',/9X,'MOV R2,@OUT',/9X,'ADD #2,OUT',/9X, + 'MOV (R0)+,R1',/9X,'BNE SUB'/) 840 FORMAT(1X,'AUTO:',/9X,'MOV 2(R5),OUT',/9X, + 'CLR R2',/9X,'CLR R3',/9X,'MOV #IX,R0') 850 FORMAT(9X,'MOV # ',O5,',R1',/9X,'SUMSQ',/9X,'MOV R2,R4', + /9X,'MOV R3,R5',/9X,'CLR R0',/1X,'T1:',/9X,'ASHC #1,R2',/9X, + 'INC R0',/9X,'BCC T1',/9X,'SUB #2,R0',/9X,'MOV R0,-(R6)', + /9X,'ASHC R0,R4',/9X,'MOV R5,@OUT',/9X,'ADD #2,OUT'/9X, + 'MOV R4,@OUT',/9X,'ADD #2,OUT',/9X,'MOV #ARRAY,R0',/9X, + 'CLR SUB+24.',/9X,'CLR SUB+28.',/9X,'CLR SUB+48.'/) 890 FORMAT(9X,'TST (R6)+',/9X,'RTS PC', + /1X,'OUT:',2X,'0',/1X,'ARRAY:') 900 FORMAT(9X,'IX+',O6) 902 FORMAT(9X,'0') 910 FORMAT(9X,'.END',/) END