/ / / TRIG TABLE FOR THE FFT / 1024 VALUES OF SIN(X) / 0<=X<=2*PI / / *1600 / DECIMAL ZEROPI,0 13 25 38 50 63 75 88 100 113 126 138 151 163 176 188 201 213 226 238 251 263 276 288 301 313 325 338 350 363 375 387 400 412 424 436 449 461 473 485 498 510 522 534 546 558 570 582 595 607 619 630 642 654 666 678 690 702 714 725 737 749 760 772 784 795 807 818 830 841 853 864 876 887 898 910 921 932 943 954 965 976 988 999 1009 1020 1031 1042 1053 1064 1074 1085 1096 1106 1117 1127 1138 1148 1159 1169 1179 1190 1200 1210 1220 1230 1240 1250 1260 1270 1280 1289 1299 1309 1319 1328 1338 1347 1357 1366 1375 1385 1394 1403 1412 1421 1430 1439 1448 1457 1466 1475 1483 1492 1500 1509 1517 1526 1534 1543 1551 1559 1567 1575 1583 1591 1599 1607 1615 1622 1630 1637 1645 1652 1660 1667 1674 1682 1689 1696 1703 1710 1717 1724 1730 1737 1744 1750 1757 1763 1769 1776 1782 1788 1794 1800 1806 1812 1818 1824 1829 1835 1840 1846 1851 1857 1862 1867 1872 1877 1882 1887 1892 1897 1902 1906 1911 1915 1920 1924 1928 1932 1937 1941 1945 1949 1952 1956 1960 1963 1967 1970 1974 1977 1980 1984 1987 1990 1993 1995 1998 2001 2004 2006 2009 2011 2013 2016 2018 2020 2022 2024 2026 2028 2029 2031 2033 2034 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2046 2047 2047 2047 2047 2047 / / / /PI/2 PIHALF,2047 2047 2047 2047 2047 2047 2047 2046 2046 2045 2044 2043 2042 2041 2040 2039 2038 2037 2036 2034 2033 2031 2029 2028 2026 2024 2022 2020 2018 2016 2013 2011 2009 2006 2004 2001 1998 1995 1993 1990 1987 1984 1980 1977 1974 1970 1967 1963 1960 1956 1952 1949 1945 1941 1937 1932 1928 1924 1920 1913 1911 1906 1902 1897 1892 1887 1882 1877 1872 1867 1862 1857 1851 1846 1840 1835 1829 1824 1818 1812 1806 1800 1794 1788 1782 1776 1769 1763 1757 1750 1744 1737 1730 1724 1717 1710 1703 1696 1689 1682 1674 1667 1660 1632 1645 1637 1630 1622 1615 1607 1599 1591 1583 1575 1567 1559 1551 1543 1534 1526 1517 1509 1500 1492 1483 1473 1466 1457 1448 1439 1430 1421 1412 1403 1394 1385 1375 1366 1357 1347 1338 1328 1319 1309 1299 1290 1280 1270 1260 1250 1240 1230 1220 1210 1200 1190 1179 1169 1159 1148 1138 1127 1117 1106 1096 1085 1074 1064 1053 1042 1031 1020 1009 999 988 976 965 954 943 932 921 910 898 887 876 864 853 841 830 818 807 795 784 772 DECIMAL 760 749 737 725 714 702 690 678 666 654 642 630 619 607 595 582 570 558 546 534 522 510 498 485 473 461 449 436 424 412 400 387 375 363 350 338 325 313 301 288 276 263 251 238 226 213 201 188 176 163 151 138 126 113 100 88 75 63 50 38 25 13 / / / / PI PI,0 -12 -24 -37 -49 -62 -74 -87 -100 -112 -125 -137 -150 -162 -175 -187 -200 -212 -225 -237 -250 -262 -275 -287 -300 -312 -325 -337 -349 -362 -374 -386 -399 -411 -423 -436 -448 -460 -472 -485 -497 -509 -521 -534 -546 -558 -570 -582 -594 -606 -618 -630 -642 -654 -666 -678 -689 -701 -713 -725 -737 -748 -760 -772 -783 -795 -806 -818 -829 -841 -852 -864 -875 -886 -898 -909 -920 -932 -943 -954 -965 -976 -987 -998 -1009 -1020 -1031 -1042 -1053 -1064 -1074 -1085 -1096 -1106 -1117 -1127 -1138 -1148 -1159 -1169 -1179 -1189 -1200 -1210 -1220 -1230 -1240 -1250 -1260 -1270 -1280 -1289 -1299 -1309 -1319 -1328 -1338 -1347 -1357 -1366 -1375 -1385 -1394 -1403 -1412 -1421 -1430 -1439 -1448 -1457 -1466 -1475 -1483 -1492 -1500 -1509 -1517 -1526 -1534 -1543 -1551 -1559 -1567 -1575 -1583 -1591 -1599 -1607 -1615 -1622 -1630 -1637 -1645 -1652 -1660 -1667 -1674 -1682 -1689 -1696 -1703 -1710 -1717 -1723 -1730 -1737 -1744 -1750 -1757 -1763 -1769 -1776 -1782 -1788 -1794 -1800 -1806 -1812 -1818 -1824 -1829 -1835 -1840 -1846 -1851 -1857 -1862 -1867 -1872 -1877 -1882 -1887 -1892 -1897 -1902 -1906 -1911 -1915 -1920 -1924 -1928 -1932 -1937 -1941 -1945 -1949 -1952 -1956 -1960 -1963 -1967 / Tape 2 kludge begin //BUGBUG: This is reconstructed and likely way off. OCTAL CLR=CLA CLL /CLEAR THE DECKS HALF=CLL RAR /DIVIDE BY TWO / / AX08 DEFINITIONS / DXC=6301 /CLEAR X REGISTER DXL=6302 /LOAD X REGISTER DXCDXL=DXC DXL DISY=6304 /INTENSIFY POINT (COMBINE WITH DXL) DISY=6314 /INTENSIFY POINT (COMBINE WITH DXY) SKAD=6332 /SKIP ON ADC DONE SKRK=6341 /SKIP ON RC CLOCK FLAG ZTEN=6342 /ZEROES TO ENABLE REGISTER OTEN=6344 /ONES TO ENABLE REGISTER, CLEAR AC CLRK=6354 /CLEAR RC CLOCK FLAG ICMX=6361 /INCREMENT MULTIPLEXER CHANNEL RADC=6362 /ADC BUFFER TO AC, CLEAR DONE, ADCIP ADCV=6364 /INITIATE CONVERSION ACMX=6371 /LOAD MULTIPLEX REGISTER *10 AI10, .-. /AUTO-INDEX REGISTERS AI11, .-. AI12, .-. K1000, 1000 /PRESUMED CONSTANTS K200, 200 K34, 34 K3537, 3527 K37, 37 K40, 40 K400, 400 K4000, 4000 K700, 700 KNOP, 7000 M1, -1 M1000, -1000 M200, -200 M2000, -2000 M4, -4 M400, -400 MTWO, -2 /ENABLE REGISTER BIT VALUES CVEN, 2000 /CONVERSION INITIATED BY RC CLOCK R1, 0010 /RELAY 1 CNEN, 0002 /RC COUNTING CHAIN ENABLED /VARIABLES PTR1, .-. /NOT AUTOINDEX PTR2, .-. PTR3, .-. PTR4, .-. C, .-. K, .-. L, .-. N, .-. P, .-. Q, .-. S, .-. CHANNE, .-. CNT1, .-. CNT3, .-. COSK, .-. GI, .-. GR, .-. HAN1, .-. HAN2, .-. HORIZ, .-. KPI2, .-. MMU, .-. MN, .-. MTWON, .-. MP1, .-. MP2, .-. MP3, .-. MP5, .-. OFFSET, .-. QUADI, .-. SCLCNT, .-. SINK, .-. TEMP, .-. TTEMP, .-. WINC, .-. WSTART, .-. //BUGBUG: These resolve the symbols, but in no way creates a viable binary. IMAGPT=. /USED AS A POINTER, NEVER SET IMPTR=. /USED AS A CONSTANT TO INIT AI11 MU=. /USED AS A CONSTANT MULTI=. /USED AS A POINTER TO A MULTIPLY ROUTINE NEGATE=. /USED AS A CONSTANT REALPT=. /USED AS A CONSTANT RLPTR=. /USED AS A CONSTANT THIR=. /USED AS A CONSTANT TRIGPT=. /USED AS A CONSTANT RSET=. /MISSING SUBROUTINE!! / Tape 2 kludge ends / / / FFT PART 1 / *200 START, CLA HLT /SETUPS TAD N CIA DCA MN TAD MN TAD MN DCA MTWON TAD RLPTR /SET STORAGE AREA TO 0000 DCA AI10 TAD MTWON DCA CNT1 DCA I AI10 ISZ CNT1 /ALL? JMP .-2 / / / SAMPLING ROUTINE / BIT 0 DOWN MEANS USE TIMED SAMPLING / BIT 0 UP MEANS SAMPLE ON RC TICK / SAMPLR,TAD RLPTR DCA AI10 TAD CHANNEL ACMX /SELECT CHANNEL CLR TAD MN DCA CNT3 TAD R1 /SET RELAY 1 FOR DURATION OF SAMPLING OTEN / LAS SPA CLA /IS BIT 0 UP? JMP CLKSAM /YES TIMSAM,ADCV /CONVERT SKAD /DONE? JMP .-1 /NO, WAIT RADC /YES, READ IT DCA I AI10 /PUT IT AWAY /ROUTINE TO WAIT 0.01 SEC TAD K3537 DCA CNT1 ISZ CNT1 JMP .-1 /STALL ISZ CNT3 /ALL SAMPLES TAKEN? JMP TIMSAM JMP ENDSAM / / CLKSAM,NOP /COULD BE TAD SKEN / /(=4000) TO SLOW THE CLOCK DOWN TAD CVEN /(=2000) TO START CONVERSION ON TICK TAD CNEN /(=0002) TO ENABLE RC COUNT CHAIN OTEN /WHATEVER TURNS YOU ON!! / CLRK TIKSAM,SKRK /WAIT FOR A TICK JMP .-1 CLRK / SKAD /WAIT FOR COMPLETE CONVERSION JMP .-1 RADC DCA I AI10 ISZ CNT3 /ALL IN? JMP TIKSAM ENDSAM,ZTEN /DISABLE THE ENABLE REGISTER / / / / DISPLAY INPUT WAVEFORM / FIRST HALF IN UPPER PORTION OF SCREEN / SECOND HALF IN LOWER PORTION OF SCREEN / INDISP,MTWO DCA CNT3 /NUMBER OF HALVES TAD RLPTR DCA AI10 TAD K200 DIS1, DCA OFFSET /SET FOR 1/2 OF SCREEN TAD M1000 /POINTS ALONG X AXIS DCA CNT1 DCA HORIZ /STARTING X DISPLA,TAD HORIZ DXCDXL ISZ HORIZ CLR TAD I AI10 /GET A SAMPLE HALF /SCALE IT TAD OFFSET DISY /DISPLAY IT CLR ISZ CNT1 /1000(8) PTS? JMP DISPLA ISZ CNT3 /BOTH HALVES? SKP JMP ENDISP TAD M200 /SECOND 1/2 JMP DIS1 ENDISP,LAS /SHOULD WE STOP OR GO ON RAR SZL CLA /IS BIT 11 UP? JMP INDISP /YES, KEEP DISPLAYING / / / /FIRST STAGE INITIALIZATIONS STAGE1,CLR TAD MU CIA DCA MMU IAC DCA L /L=1 TAD N /N=#OF SAMPLES=1024(DECIMAL)=2000(OCTAL) HALF DCA S /S=(1/2)*N TAD S /FOR TRIG ROUTINES HALF DCA KPI2 / PI/2 CMA TAD KPI2 DCA QUADI /1ST QUADRANT PART CMA /-1 TAD S DCA Q /Q=((1/2)*N)-1 / / /PASS 1&2 ARE ADDITIONS WITH NO MULTIPLICATIONS /NO IMAGINARY PARTS IN PASS1 (0+0=0) / SMALL NUMBERS SO USE SINGLE PRECISION /AND DON'T WORRY ABOUT OVERFLOWS / PASS1, CLR LOOP1, TAD Q TAD REALPT DCA PTR1 /POINTS TO X(Q) TAD REALPT TAD Q TAD S /N/2 NOW DCA PTR2 /POINTS TO X(Q+N/2) / / X(Q)=X(Q+N/2)+X(Q) ADDER, TAD I PTR1 TAD I PTR2 DCA TEMP / / X(Q+N/2)=X(Q)-X(Q+N/2) TAD I PTR2 CIA TAD I PTR1 DCA I PTR2 /SAVE IT TAD TEMP DCA I PTR1 /SAVE IT / TAD Q SMA SZA CLA /IS Q 0 CMA /YES, -1 TAD Q DCA Q /Q=Q-1 JMP LOOP1 / / / *377 / / / PART 2 / PASS2, CLR / /DIVIDE PASS2 INTO LOWER AND UPPER / LOWER REDUCES TO: / XR(P)=XR(Q) / XI(P)=XR(P) / XR(Q)=XR(Q) / XI(Q)=-XR(P) / UPPER REDUCES TO: / XR(P)=XR(Q)-XR(P) / XR(Q)=XR(Q)+XR(P) / ALL XI=0 / LOW2, JMS SETMUP JMS SETSS MOVE2L,TAD I PTR1 DCA I PTR3 /XI(P)=XR(P) TAD I PTR1 CIA DCA I PTR4 /XI(Q)=-XR(P) TAD I PTR2 DCA I PTR1 /XR(P)=XR(Q) CMA TAD P DCA P /P=P-1 ISZ C /IS C=S? SKP /NOT YET JMP HIGH2 /YES, DO UPPER JMS RSET /NO, DO SOME RESETTING JMP MOVE2L / HIGH2, TAD S CIA TAD P DCA P /P=P-S JMS SETSS MOVE2H,TAD I PTR1 CIA TAD I PTR2 DCA TEMP /XR(Q)-XR(P) TAD I PTR1 TAD I PTR2 DCA I PTR2 /XR(Q)=XR(P)+XR(Q) TAD TEMP DCA I PTR1 /XR(P)=XR(Q)-XR(P) CMA TAD P DCA P /P=P-1 ISZ C /IS C=S? SKP /NOT YET JMP PASSES JMS RSET JMP MOVE2H / SETSS, 0 /SET UP SUBSCRIPTS TAD S CIA DCA C /C=-S (C IS A COUNTER) TAD C TAD P DCA Q /Q=P-S TAD REALPT TAD P DCA PTR1 /POINTS TO XR(P) TAD REALPT TAD Q DCA PTR2 /POINTS TO XR(Q) TAD IMAGPT TAD P DCA PTR3 /POINTS TO XI(P) TAD IMAGPT TAD Q DCA PTR4 /POINTS TO XI(Q) JMP I SETSS / / / SETMUP,0 /INITIALIZATIONS FOR PASS2 ON UP CLR TAD MMU TAD L SNA CLA /IS L=MU? JMP ORDER /...ALL BUT DONE... / /NO, DO INITIALIZATIONS ISZ L /L=L+1 TAD S HALF DCA S /S=S/2 CMA TAD N DCA P /P=N-1 JMP I SETMUP / / / / / / / PART 3 A / / / PASSES 3 AND ABOVE / PASSES,JMS SETMUP MIDPAS,JMS SETSS INTPRT,TAD MMU /TAKE INTEGER PART OF (P*2^H) TAD L /ACTUALLY SCALE P (MU-L) MANY PLACES RIGHT SNA /WHAT IF IT IS 0? JMP ZSCAL DCA CNT1 TAD P HALF /SCALE RIGHT 1 BIT ISZ CNT1 /MU-L TIMES? JMP .-2 HAVINT,JMS REVBIT /YES, REVERSE THE BITS DCA K /K=BINARY REVERSE OF / / / FIND SINE AND COSINE VALUES FROM TABLE SINE, TAD K TAD TRIGPT /TABLE ADDRESS DCA TEMP TAD I TEMP DCA SINK /SIN(2*PI*K/N) / COSINE,TAD K /COS(Z)=SIN(Z+PI/2) TAD KPI2 TAD MN SPA CLA /IS K+PI/2>2*PI? JMP COS1 /NO TAD K /YES, PERIODICITY MEANS AND QUADI /GET 1ST QUADRANT PART OF K COS2, TAD TRIGPT /TABLE ADDRESS DCA TEMP TAD I TEMP DCA COSK /COS(2*PI*K/N) JMP COMPUT / COS1, TAD K TAD KPI2 /ADD PI/2 JMP COS2 / / ZSCAL, TAD P /DON'T SCALE P JMP HAVINT / /ROUTINE TO REVERSE BINARY BITS /BY MOVING RIGHT AND SAVING LEFT / ENTER WITH BITS TO BE REVERSED IN THE AC / LEAVE WITH REVERSED BITS IN THE AC / REVBIT,0 DCA TEMP /SAVE THEM TAD MMU DCA CNT1 /MINUS NUMBER OF BITS TO BE REVERSED CLL /MAKE SURE ITS EMPTY ROT, RAL /SHIFT INTO LINK DCA TTEMP /SAVE SHIFTED WORD TAD TEMP /GET BITS TO BE REVERSED RAR /MOVE RIGHT INTO LINK DCA TEMP /SAVE UNSHIFTED BITS GLK /GET THE LINK BIT TAD TTEMP /ADD TO PREVIUS SHIFTS ISZ CNT1 /ALL ? JMP ROT /NO JMP I REVBIT /YES, LEAVE / / / PAGE / PART 3 B / /TWO'S COMPLEMENT SINGLE PRECISION MULTIPLY ROUTINE /RETURN HIGH ORDER PRODUCT IN AC, NO LO ORDER MULT, 0 CLL SPA /TEST FOR NEGATIVE MULTIPLIER CMA CML IAC DCA MP1 /STORE MULTIPLIER DCA MP5 TAD I MULT SNA /TEST FOR ZERO MULTIPLICAND JMP MPSN-2 SPA /TEST FOR NEGATIVE MULTIPLICAND CMA CML IAC DCA MP2 /STORE MULTIPLICAND TAD THIR DCA MP3 MP4, TAD MP1 /MULTIPLY LOOP PROPER RAR DCA MP1 TAD MP5 SZL /TEST IF MULTIPLICAND SHOULD BE ADDED TAD MP2 CLL RAR DCA MP5 ISZ MP3 /TEST FOR END OF LOOP JMP MP4 TAD MP1 RAR MPSN, SZL JMP COMP SPA CLA /ROUND UP? IAC /YES TAD MP5 CLL RAL /TIMES 2 MPZ, ISZ MULT /EXIT JMP I MULT COMP, CMA CLL IAC /COMPLEMENT PRODUCT SPA CLA /ROUND OFF? IAC /YES TAD MP5 CMA SZL IAC CLL RAL /TIMES 2 SMA /DID WE LOSE THE SIGN? TAD K4000 /YES, RESTORE IT JMP MPZ MLTPLY=JMS MULT / / / G=(W^K)*X(P) / / / COMPUTATION SECTION / COMPUT,TAD COSK /START ACTUAL COMPUTATIOMS DCA .+5 TAD I PTR1 SNA JMP .+3 MLTPLY 000 DCA TEMP /COS(K)*XR(P) / TAD SINK DCA .+5 TAD I PTR3 SNA JMP .+3 MLTPLY 000 TAD TEMP DCA GR /GR=COS(K)*XR(P)+SIN(K)*XI(P) / TAD COSK DCA .+5 TAD I PTR3 SNA JMP .+3 MLTPLY 000 DCA TEMP /COS(K)*XI(P) / TAD SINK DCA .+5 TAD I PTR1 SNA JMP .+4 MLTPLY 000 CIA /-SIN(K)*XR(P) TAD TEMP DCA GI /GI=COS(K)*XI(P)-SIN(K)*XR(P) / PART 4 / / X(P)=G+X(Q) / X(Q)=X(Q)-G / COMP0, TAD GR TAD I PTR2 DCA I PTR1 /XR(P)=GR+XR(Q) / TAD GI TAD I PTR4 DCA I PTR3 /XI(P)=GI+XI(Q) / COMP1, TAD GR CIA TAD I PTR2 DCA I PTR2 /XR(Q)=XR(Q)-GR / TAD GI CIA TAD I PTR4 DCA I PTR4 /XI(Q)=XI(Q)-GI / / / / END COMPUTATION SECTION / / CMA TAD P DCA P /P=P-1 / ISZ C /IS C=S? SKP /NOT YET JMP NXTCHK /YES, "DANGER ZONE" JMS RSET JMP COMPUT / / / / / NXTCHK,TAD P CMA TAD S SNA CLA /IS P+1=S? JMP CHKSCL /YES, MAJOR RESET...END OF PASS!!! TAD S CIA TAD P DCA P /P=P-S JMP I .+1 MIDPAS / / / / / / / CHKSCL,TAD RLPTR /NEED WE SCALE? DCA AI10 TAD MTWON DCA CNT1 SCALL, TAD I AI10 SPA /GET ABSOLUTE VALUE CIA TAD M2000 SMA CLA /MORE THAN 2000(8)? JMP SCALE /YES ISZ CNT1 /ALL CHECKED? JMP SCALL /NO, KEEP CHECKING JMP PASSES /YES / PAGE / / /SCALING / SCALE ALL VALUES IN HALF / SCALE, TAD RLPTR DCA AI10 TAD RLPTR DCA AI11 TAD MTWON DCA CNT1 / SCALER,TAD I AI10 /GET UNSCALED VALUE SPA /IS IT POSITIVE? JMP NEGSCL /NEGATIVE HALF /SCALE BY 1/2 PUTBAK,DCA I AI11 /PUT SCALED VALUE IN ISZ CNT1 /ALL SCALED? JMP SCALER /NOPE JMP PASSES /BEGIN NEXT PASS / NEGSCL,STL RAR /PRESERVE SIGN JMP PUTBAK / / / / / / PART 5 / / AT THIS POINT THE TRANSFORMATION HAS TAKEN PLACE / BUT THE COEFFICIENTS ARE IN BIT REVERSE ORDER / SO STRAIGHTEN THEM OUT / / / / PUT THE COEFFICIENTS IN PROPER NUMERICAL ORDER / ORDER, TAD N /Q=N-1 ORDER0,TAD M1 /-1 DCA Q TAD Q JMS REVBIT DCA P TAD P CIA TAD Q SPA CLA /IS P / / SQUARE ALL TERMS SQUARE=JMS I MULTI / MAG1, TAD MTWON DCA CNT1 TAD RLPTR DCA AI10 TAD RLPTR DCA AI11 / MAG, TAD I AI10 SPA /GET ABS VALUE CIA SNA /IS IT 0? JMP MAGCNT-1 /YES DCA MAG0 TAD MAG0 SQUARE MAG0, 000 DCA I AI11 /TERM HAS BEEN SQUARED MAGCNT,ISZ CNT1 /ALL TERMS? JMP MAG /NO / / / SUM SQUARED TERMS TAD RLPTR DCA AI10 TAD IMPTR DCA AI11 TAD RLPTR DCA AI12 / TAD MN DCA CNT1 / MAG2, TAD I AI10 TAD I AI11 /ADD THEM DCA I AI12 ISZ CNT1 /ALL ADDED? JMP MAG2 /NO / / / / / / / PART 6 / / /HANN THE FINAL SPECTRUMM / HANN2, NOP TAD KNOP /REMOVE THE MINUS SIGNS DCA OPR1 TAD KNOP DCA OPR2 / HANNPS,DCA I IMAGPT /H(N+1)=0 [LAST VALUE] TAD REALPT JMS HANN / JMP FINDSP / / PAGE / / / HANNING PROCESS / EQUATION / H'(N)=[+-](1/4)*H(N-1) +(1/2)*H(N) [+-](1/4)*H(N+1) / HANN, 0 DCA PTR1 DCA TEMP /=0 TAD MN DCA CNT1 H0, TAD TEMP /H(N-1) SPA JMP NEG1 HALF HALF / (1/4) OPR1, HLT /SET TO CIA OR NOP H1, DCA HAN1 TAD I PTR1 /H(N) DCA TEMP /H(N-1) NEXT TIME TAD TEMP SPA JMP NEG2 HALF / (1/2) H2, DCA HAN2 ISZ PTR1 TAD I PTR1 /H(N+1) DCA TTEMP CMA TAD PTR1 DCA PTR1 TAD TTEMP SPA JMP NEG3 HALF HALF / (1/4) OPR2, HLT /SET TO CIA OR NOP H3, TAD HAN1 TAD HAN2 DCA I PTR1 /STORE HANNED TERM ISZ PTR1 ISZ CNT1 /HANN JOB DONE? JMP H0 /NO, KEEP HANNING JMP I HANN /YES, EXIT / NEG1, STL RAR /NEGATIVE SCALING ROUTINES STL RAR /PRESERVE THE SIGN BIT JMP OPR1 / NEG2, STL RAR JMP H2 / NEG3, STL RAR STL RAR JMP OPR2 / / / / / / / / / DISPLAY OF FINAL RESULTS / THE POWER SPECTRUM / / KNOB 34 CONTROLS VERTICAL SCALING / KNOB 35 CONTROLS HORIZONTAL SCALING / KNOB 36 CONTROLS STARTING VALUE OF FREQUENCY / / BIT 9 UP MEANS DRAW HISTOGRAM FORM / BIT 10 UP MEANS KEEP DISPLAYING / FINDSP,CLR TAD K34 ACMX JMS SAM AND K700 CLL RTR RTR RTR CMA DCA SCLCNT /MINUS(0-7) FOR VERT SCALE JMS SAM /CHANNEL 35 CLL RTR RTR AND K37 SNA TAD K40 DCA WINC /0-40 FOR HORIZ SCALE JMS SAM /CHANNEL 36 CLL RAL DCA WSTART /0-2000 FOR STARTING ADDRESS / / TAD RLPTR /WHERE FINAL SPECTRUM IS TAD WSTART DCA AI10 /POINTS TO COEFFICIENTS SPCDIS,DXCDXL /ACTUAL SPECTRAL DISPLAY DCA HORIZ TAD SCLCNT DCA CNT1 TAD I AI10 /GET THE COEFFICIENT SKP /1ST TIME CLL RAL /*2 (SCALING ISZ CNT1 /ANY SCALING TO BE DONE? JMP .-2 /YES TAD M400 /NO, SHIFT FOR SCOPE DISY /DISPLAY THE POINT DCA TEMP /SAVE IT, JUST IN CASE OSR RTR RAR SZL CLA /IS BIT 9 UP? JMP HIST /YES, DRAW A HISTOGRAM NXTDIS,TAD WINC /NO,SET FOR NEXT TAD HORIZ TAD M1000 SMA /PAST THE END OF THE SCREEN? JMP CHKDIS /YES TAD K1000 /NO, RESTORE X POSITION JMP SPCDIS /KEEP DISPLAYING POINTS / / CHKDIS,LAS /SHOULD WE REFRESH THE DISPLAY? RTR SZL /IS BIT 10 UP? JMP FINDSP /YES, RESTART THE DISPLAY NOP /NO,END OF ANALYSIS!!! JMP I .+1 START /GLUTTON FOR PUNISHMENT! / / HIST, TAD TEMP SMA /IS IT NEGATIVE? JMP HISDIS /NO CIA /YES, HOW MUCH SO? TAD M400 SMA CLA /LESS THAN -400? JMP NXTDIS /YES, DONE WITH THIS LINE TAD TEMP /NO HISDIS,TAD M4 /DECREMENT POINT BY 4 DISY DCA TEMP /SAVE IT JMP HIST /KEEP DRAWING / / / SAM, 0 /READ THIS CHANNEL ADCV SKAD JMP .-1 RADC ICMX SMA /NEGATIVE? IAC /NO, ADD 1 TAD K400 /LEAVE WITH 0<=AC<=1000 JMP I SAM / / / $