/DIFFERENTIATION SUBROUTINE USING STRAIGHT LINE FIT BY LEAST SQUARES /RETURNS VELOCITY IN SPVEL /THE FORMULA IS IMPEMENTED AS A RECURSIVE FILTER BY THE FOLLOWING: /V(J)=2*V(J-1)-V(J-2)+K[[Y(J+K)-Y(J-K-2)]-[Y(J+K-1)-Y(J-K-1)]] / -[Y(J+K-1)-Y(J-K-1)] DIFF, .-. /SUBROUTINE HEADER NL7776 /GET -2 DCA DIFSGN /STORE AS SIGN CDF DECFLD /GET THE DIFFERENTIATION BUFFER TAD I DIFHI /GET Y(J+K-1) CIA /-Y(J+K-1) DCA PB1 /STORE IT THERE TEMPORARILY ISZ DIFHI /MOVE UP HIGH POINTER IN DIFF BUFFER NOP /MAKE SURE IT DOES NOT SKIP TAD PB1 /GET -Y(J+K-1) TAD I DIFHI /Y(J+K)-Y(J+K-1) DCA HIDIF /STORE HIGH DIFFERENCE TAD I DIFLOW /GET Y(J-K-2) CIA /NEGATE IT MQL /PUT -Y(J-K-2) IN MQ ISZ DIFLOW /POINT TO J-K-1 NOP /MAKE SURE ISZ DOESN'T SKIP TAD I DIFLOW /GET Y(J-K-1) DCA PB2 /STORE IT MQA /GET BACK -Y(J-K-2) TAD PB2 /Y(J-K-1)-Y(J-K-2) TAD HIDIF /Y(J+K)-Y(J+K-1)+Y(J-K-1)-Y(J-K-2) DCA HIDIF /STORE IT BACK CDF CODFLD /GET CODE FIELD TAD PB2 /GET Y(J-K-1) ASR; 14 /SIGN EXTEND DST; VELSUM /STORE IT CAM /CLEAN UP TAD PB1 /GET Y(J+K-1) ASR; 14 /SIGN EXTEND DAD; VELSUM /ADD BACK Y(J-K-1) DST; VELSUM /Y(J-K-1)-Y(J+K-1) CAM /CLEAN UP TAD HIDIF /GET Y(J+K)-Y(J+K-1)+Y(J-K-1)-Y(J-K-2) SMA /SKIP IF NEGATIVE JMP DIFPS1 /ELSE JUMP AHEAD CIA /MAKE POSITIVE ISZ DIFSGN /INDICATE THAT ITS NEGATIVE DIFPS1, MQL MUY;DIFMUL /MULTIPLY ISZ DIFSGN /SKIP IF IT SHOULD BE INVERTED SKP /ELSE DO NOT DCM /NEGATE DAD; VELSUM /ADD BACK VELSUM DST; VELSUM /STORE IT DLD; VEL /GET VELOCITY SHL; 1 /MULTIPLY BY 2 DCM /MAKE NEGATIVE DAD; VELPRE /ADD PREVIOUS VELOCITY DCM /2*V(J-1)-V(J-2) DAD; VELSUM /ADD BACK THE TEMPORARY DST; VELSUM /STORE IT TEMPORARILY DLD; VEL /GET PREVIOUS VELOCITY DST; VELPRE /STORE IN PREVIOUS VELOCITY HOLD DLD; VELSUM /GET THE PRESENT VELOCITY DST; VEL /STORE IN VELOCITY HOLD ASR; VIGAIN /DIVIDE BY INVERSE GAIN SWP /GET LOW BITS DCA VELOUT /STORE AS VELOCITY JMP I DIFF /RETURN DIFSGN, .-. /SIGN WORD DIFCNT, .-. /COUNTER DIFLOW, DIFBUF-2 /LOW POINTER IN CUM POS BUFFER DIFMUL, DIFWID%2 /HALF THE BUFFER WIDTH DIFHI, DIFBUF-2+DIFWID /POINTER TO LATEST VALUE IN DIF BUF DIFTMP, ZBLOCK 2 /TWO WORD TEMPORARY HIDIF, .-. /TEMPORARY PB1, .-. /TEMPORARY PB2, .-. /TEMPORARY VELOUT, .-. /12 BIT OUTPUT VELOCITY VEL, ZBLOCK 2 /VELOCITY VELPRE, ZBLOCK 2 /HOLDS PREVIOUS VELOCITY VELSUM, ZBLOCK 2 /MAGIC SUM PAGE