File CORD3.

Directory of image this file is from
This file as a plain text file

/AUTO AND CROSS CORRELATION MS- CORRELATIONS ON DATA
/COLLECTED VIA THE A/D.
/
/DEC-8E-AACRA-A-LA
/
/COPYRIGHT 1972
/DIGITAL EQUIPMENT CORPORATION
/MAYNARD, MASSACHUSETTS 01754
/

/FILE COR.3 / /THIS VERSION RUNS UNDER OS-8 /AND READS ANS WRITES TO THE SYSTEM DEVICE. /AUTO AND CROSS CORRELATION PROGRAM FOR THE LAB8/E. /IOT REFERENCES FOR THE LAB8/E / / /AD8-EA 10 BIT A/D CONVERTER / ADCL=6530 /CLEAR ALL ADLM=6531 /LOAD MPLXR ADST=6532 /START CONVERSION ADRB=6533 /READ AD BUFFER ADSK=6534 /SKIP ON AD DONE ADSE=6535 /SKIP ON TIMING ERROR ADLE=6536 /LOAD ENABLE REGISTER ADRS=6537 /READ STATUS REGISTER /VC8-E POINT PLOT DISPLAY DILC=6050 /CLEAR ALL DICD=6051 /CLEAR DONE FLAG DISD=6052 /SKIP ON DONE FLAG DILX=6053 /CLEAR DONE FLAG LOAD X DILY=6054 /CLEAR DONE FLAG LOAD Y DIXY=6055 /CLEAR DONE, INTENSIFY, SET DONE DILE=6056 /LOAD ENABLE CLEAR AC DIRE=6057 /ENABLE TO AC / /DK8-EP REAL TIME CLOCK / CLZE=6130 /ZERO TO ENABLE CLSK=6131 /SKP ON CLOCK FG CLOE=6132 /ONES TO ENABLE CLAB=6133 /AC TO CLK BUF AND COUNTER REGISTER CLEN=6134 /ENABLE TO AC CLSA=6135 /STATUS TO AC AND AC ONE'S CLEAR STATUS REG. CLBA=6136 /CLK BUF TO AC CLCA=6137 /CLK CNTR TO AC AND TO AC / /DB8-EA 12 CHANNEL DIGITAL I/O / DBDI=6500 /ENABLE INTERRUPT DBEI=6501 /DISABLE INTERRUPT
DBSK=6502 /SKIP ON INPUT DBCI=6503 /CLEAR INPUT BITS WITH SET AC BIT DBRI=6504 /READ INPUT DBCO=6505 /CLEAR OUTPUT BITS WITH AC BITS DBSO=6506 /SET OUTPUT BITS WITH AC BITS DBRO=6507 /READ OUTPUT REGISTER BSW=7002 /PAGE 0 *0 0 /JUMP TO INTERRUPT ROUTINE. JMP I .+1 CHAS TTYBUF, 0 /CHAR TO BE TYPED PLACED HERE BY PRINTC. KEYBRD, 0 /CHAR TO BE INPUTED PLACED IN HERE BY INTERRUPT ROUTINE. 0 /LOCATIONS 5,6,AND 7 ARE RESERVED FOR XODT. 0 0 *10 PNTR, 0 /AUTO INDEX REGISTERS. PNTR1, 0 PNTR2, 0 PNTR3, 0 BTCFLG, 0 /=0 IF NORMAL, -1 IF BATCH MODE. TFLAG, 0 SCL, 0 *20 NUMBER, 0 /CONTAINS NUMBER OF POIINTS. CLKCNT, 0 /CONTAINS NUMBER OF XTAL CLOCK TICKS FOR EACH STAGE OF THE ALGORITHIM. WRDCNT, 0 /CONTAINS - # OF POINTS. FLAG, 0 /=0 IF AUTO CORRELATION, -1 IF CROSS. SBUF, BUFFER-1 ENDTMP, 0 /POINTS TO END TEMP BUFFER-1 ENDPRM, 0 /POINTS TO END PERMAMENT BUFFER-1 TKCNT, 0 /COUNTER USED BY CLOCK ROUTINE TO COUNT THE NUMBER OF XTAL TICKS.
COMFLG, -1 /=0 IF ALL COMMANDS LEGAL.=-1 IF ONLY CNTRL/C AND CNTRL/A ARE LEGAL PNTRT, 0 /POINTER TO TEMP BUFFER USED BY CLOCK SERVICE ROUTINE. PNTRH, 0 /POINTERS TO DOUBLE PRECISION BUFFER USED BY CLOCK SERVICE ROUTINE. PNTRL, 0 DISFLG, 0 /=0 IF DISPLAY TEMP BUFFER.=-1 IF DISPLAY PERMAMENT BUFFER. PLTFLG, 0 /=0 IF DON'T PLOT,-1 IF SHOULD PLOT. CHAR, 0 /HOLDS A CHARACTER. NUMER, 0 /NUMERATOR IN DIVIDE ROUTINE. DENOM, 0 /DENOMINATOR IN DIVIDE ROUTINE. X, 0 /X-COORIDINATE Y, 0 /Y-COORIDNATE. CNTR, 0 CNTR1, 0 HIGH1, 0 /DOUBLE PRECISION STORAGE LOW1, 0 HIGH, 0 LOW, 0 S0, 0 /SIGN INDICATOR FOR ADCVAL. S1, 0 TELSW, 0 /IS NON ZERO IF PRINTER SERVICE ROUTINE IS EXPECTING AN INTERRUPT. TEMP, 0 CHECK1, CHECK2 ADC0, BUFFER /ADC0 IS FIRST WORD IN BUFFER. ADC1, 0 PNTR5, 0 SCNTR, 0 /USED AS A COUNTER IN THE CLOCK SERVICE ROUTINE. CURFLG, -1 /=0 IF DISPLAY CURSORS. -1 IF DON'T. SCALE, 4 /CONTAINS SCALE FACTOR FOR Y VALUES. CHKSUM, 0 SGN, 0 T2, 0 CNTR6, 0 HIGH2, 0 DIGBOX, 0 C, 0 T1, 0 SWEEPH, 0 SWEEPL, 0 TT1, 0
SDADDR, CONL-1 T4, 0 PNTR6, 0 DATFLG, 0 /=-1 IF TAKING DATA, 0 IF NOT. EXP, 0 /FLOATING AC HORD, 0 LORD, 0 OVER2, 0 EX1, 0 AC1H, 0 AC1L, 0 OVER1, 0 MINS, ACMINS /SUBROUTINE ASSIGNMENTS. NORM=JMS I . ;DNORM SAVE=JMS I . ;XSAVE NORMF=JMS I . ;DNORM DIVF=JMS I . ;FDIV SORTJ=JMS I . ;SORTB /SEARCH AND BRANCH ROUTINE. COMCHK=JMS I . ;CHECK /CHECKS TO SEE IF USER TYPED COMMANDS. SETDAT=JMS I . ;XSDAT /SETS UP DATA FOR THE DISPLAY ROUTINES. DISPLY=JMS I . ;DYS /DISPLAYS BUFFERS. SETUP=JMS I . ;XSETUP /SETS UP INTERNAL DATA FOR DISPLAY ROUTINE. MESAGE=JMS I . ;MESG /TYPES A MESSAGE ONTO THE TELETYPE. PRINTC=JMS I . ;XPRINT /PRINTS A SINGLE CHAR ONTO THE TELETYPE. READC=JMS I . ;INDEV /READS A CHARACTER FROM THE TELETYPE. DIV=JMS I . ;XDIV /DOES A DIVISION BY SUBTRACTION METHOD. CRLF=JMS I . ;XCRLF /TYPES A CR-LF COMBINATION. RESET=JMS I . ;XRESET /RESETS DATA FOR CLOCK ROUTINE AFTER A SWEEP IS OVER. DNEG=JMS I . ;XDNEG /DOES A DOUBLE PRECISON NEGATION. DBLSCL=JMS I . ;DBS /SCALES A DOUBLE PRECISION WORD. DECIN=JMS I . ;DECINP /INPUTS A DECIMAL # FROM THE TTY. CLEAR=JMS I . ;XCLR /CLEARS OUT THE BUFFERS. CURSOR=JMS I . ;XCUR /DISPLAYS CURSORS. ADC=JMS I . ;XADC /READS IN AN ADC VALUE FROM CHANNEL (AC). DECOUT=JMS I . ;DECTYP /OUTPUTS A DOUBLE PRECISON NUMBER. DOUT=JMS I . ;SDPRNT /OUTPUTS A DOUBLE PRECISION DECIMAL NUMBER.
INIT=JMS I . ;INIT1 /INITIALIZES VARS. DLOOP=JMS I . ;DOLOOP /DOES A LOOP IN THE DISPLAY ROUTINE. LOADX=JMS I . ;XLOAD LOADY=JMS I . ;YLOAD LIUFLG, 0 /THE REST OF THE PAGE 0 LOCATIONS ARE RESERVED FOR LITERALS. *200 START, CLA CLL CMA CLZE CLA TCF KCC ION AGAIN, MESAGE /TYPE "RATE? " MES1-1 DECIN /READ THE ANSWER. TAD NUMBER /RATE<=0? SMA SZA CLA JMP ALRGHT /YES. MESAGE /NO. TYPE "000.0<RATE<204.8" MES2-1 JMP AGAIN ALRGHT, TAD NUMBER /CRYSTAL CLOCK COUNTER=-RATE CIA DCA CLKCNT AGAIN1, MESAGE /TYPE "N0. OF POINTS? " MES3-1 JMS I (DECI /READ THE ANSWER. TAD NUMBER /# OF POINTS <=0? SMA SZA CLA JMP OK /NO. ERROR4, MESAGE /YES. TYPE "0<# OF POINTS<513" MES4-1
JMP AGAIN1 OK, TAD (-1000 /NUMBER<=512 (DECIMAL)? TAD NUMBER SMA SZA CLA JMP ERROR4 /NO. TAD NUMBER /NUMBER>4? TAD (-4 SPA SNA CLA JMP ERROR4 /NO. TAD NUMBER /YES. WRDCNT=-NUMBER 0F POINTS. CIA DCA WRDCNT MESAGE /TYPE "AUTO? " MES5-1 RDAGN, READC /READ ANSWER. /BECAUSE COMFLG=-1 ONLY CNTRL/C AND CNTR/A ARE LEGAL COMMANDS. SORTJ /SEE IF CHAR ="Y" OR "N" LST1-1 JMP1-LST1 JMP RDAGN /NOT A "Y" OR "N". IGNORE AND DON'T ECHO . ASK AGAIN. YES, CMA /FLAG=0 IF AUTO NO, CMA /FLAG=-1 IF CROSS DCA FLAG PRINTC /ECHO. CRLF /TYPE A CR-LF TAD SBUF /GET BUFFER -1 TAD NUMBER /SET ENDTMP TO END OF TEMP BUF -1 DCA ENDTMP TAD NUMBER /SET ENDPRM TO END OF PERM BUF -1 CLL RAL /MULT BY 2 TO COMPENSATE FOR DOUBLEPRECISION. TAD ENDTMP DCA ENDPRM CONT2, CLEAR /CLEAR BUFFERS. TAD CLKCNT /TICK COUNTER = CLKCNT. DCA TKCNT /TKCNT USED BY CLOCK SERVICE ROUTINE. DCA COMFLG /ALL COMMANDS ACCEPTABLE. DCA LIUFLG /SET THE BUFFER NOT FULL FLAG RESET /SET UP DATA FOR CLOCK SERVICE ROUTINE. JMS I (MODE
CONT3, JMS DISP JMP .-1 /DISPLAY LOOP BEGINS HERE. DISP, 0 TAD DISFLG /DISPLAYING INPUT? SZA CLA JMP SPPB /NO. TAD SBUF /YES. SET PNTR TO BEGINNING OF TEMP BUF IAC CONT6, DCA PNTR SETDAT /SET DATA FOR DISPLAY ROUTINE. DISPLY /DISPLAY DATA. TAD PLTFLG /PLOTTING? SMA CLA JMP CONT5 /NO. DCA PLTFLG /YES. TERMINATE PLOTTING MODE. SKP CONT5, CURSOR /DISPLAY CURSORS. JMP I DISP SPPB, TAD ENDTMP /SET PNTR TO BEGGINNING OF PERMAMENT BUFFER. IAC JMP CONT6 /THIS NEXT ROUTINE IS A SORT AND BRANCH ROUTINE. /CALLING SEA /CALLING SEQUENCE: SORTJ / LIST1-1 / LIST2-LIST1 / /RETURN /THE CONTENTS OF CHAR IS SORTED AGAINST LIST1. /IF A MATCH IS FOUND A JUMP IS MADE TO THE /CONTENTS OF THE CORRESPONDING LOCATION IN LIST2. /IF A MATCH IS NOT FOUND A RETURN IS MADE TO RETURN. /LIST1 IS TERMINATED BY A NEGATIVE NUMBER. SORTB, 0 /CALLED VIA "SORTJ" TAD I SORTB /GET POINTER LIST1-1 DCA PNTR1 SORTB1, TAD I PNTR1 /GET ENTRY
SMA /END OF LIST? JMP SORTB2 /NO. ISZ SORTB /YES. RETURN. ISZ SORTB CLA CLL JMP I SORTB SORTB2, CIA TAD CHAR SZA CLA /MATCH? JMP SORTB1 /NO. CONTINUE LOOKING. TAD PNTR1 /YES. COMPUTE CORRESPONDING LOCATION IN LIST2. ISZ SORTB TAD I SORTB DCA SORTB TAD I SORTB DCA SORTB JMP I SORTB /THIS NEXT ROUTIEN CHECKS TO SEE IF A COMMAND HAS BEEN TYPED /BY THE USER. /IF THE AC IS NON-ZERO UPON ENTRY, THE ROUTINE WILL CHECK /FOR COMMANDS USING CHAR, INSTEAD OF KEYBRD. CHECK, 0 SZA CLA /AC=0? JMP CHK /NO. CHECK WITH CHAR. TAD KEYBRD /YES. CHECK WITH KEYBRD. ANYTHING TO CHECK? SNA JMP I CHECK /NO. EXIT. DCA CHAR /YES. DCA KEYBRD CHK, TAD COMFLG /CHECK FOR CNTR/C AND CNTRL/A? SPA CLA JMP CHECK3 /YES. JMS I (CHKALL /CHECK FOR MORE COMMANDS. CHECK2, JMP I CHECK /NO. RETURN.CHECK2, JMP I CHECK /RETURN. NOT A COMMAND. CHECK3, SORTJ CLST-1 COMGO1-CLST LUCY, JMP I CHECK
/THIS NEXT ROUTINE DISPLAYS EITHER THE TEMP OR PERM BUFFERS. *400 DYS, 0 /CALLED VIA "DISPLY" COMCHK /CHECK FOR COMMANDS. SETUP /SETUP COUNTERS AND POINTERS. DYS1, DLOOP /DO DISPLAY LOOP JMP I DYS /DONE. TAD X /LOAD X LOADX CLA CLL TAD Y LOADY CLA CLL TAD PLTFLG /PLOTTING? SZA CLA JMS I (DELAY /YES DELAY. JMP DYS1 /NO. CONTINUE. XSETUP, 0 /CALLED VIA "SETUP" DCA C /C=0 TAD DENOM /X=-QUOTIENT. CIA DCA X CLA CMA TAD WRDCNT /CNTR=-# OF POINTS. DCA CNTR JMP I XSETUP DOLOOP, 0 /CALLED VIA "DLOOP" TAD X /X=X+QUOTIENT. TAD DENOM DCA X TAD WRDCNT /C>=DIVISOR?
TAD C SPA CLA JMP DS1 /NO. DCA C /YES. C=0 ISZ X /X=X+1 DS1, TAD DISFLG /DISPLAYING DOUBLE PRECSIION? SMA CLA JMP DS2 /NO. TAD I PNTR /YES. DCA HIGH /GET HIGH ORDER. TAD I PNTR DCA LOW DBLSCL TAD SCL DS3, DCA Y TAD C /C=C+REMAINDER TAD NUMER DCA C ISZ CNTR /LOOP DONE? ISZ DOLOOP /NO. JMP I DOLOOP /YES. EXIT CALL+1 DS2, TAD I PNTR /DO A SINGLE PRECISION SCALE. JMP DS3 /THIS ROUTINE TYPES A MESSAGE ON THE TTY. /CALLING SEQUENCE: MESAGE / LIST-1 / RETURN /THE LIST CONTAINS 8 BIT ASCII CHARS AND IS TERMINATED BY A 0. MESG, 0 /CALLED VIA "MESAGE" CRLF /TYPE A CR-LF. TAD I MESG /GET POINTER. DCA PNTR ISZ MESG MESG1, COMCHK /CHECK FOR COMMANDS. TAD I PNTR /GET TABLE ENTRY.
SNA /END? JMP I MESG /YES. PRINTC /NO. PRINT IT. JMP MESG1 /THE NEXT ROUTINE PRINTS A CHAR. XPRINT, 0 /CALLED VIA "PRINTC" SZA /PRINT CONTENTS OF AC? DCA CHAR /YES. TAD TELSW /INTERRUPT EXPECTED? SNA CLA JMP XPR1 /NO. PRINT HERE. XPR3, TAD TTYBUF /YES. PREVIOUS CHAR BEEN PRINTED? SZA CLA JMP XPR2 /NO. TAD CHAR /YES. DCA TTYBUF JMP I XPRINT XPR1, TAD CHAR TLS /PRINT CHAR. DCA TELSW /TURN ON TELSW DCA TTYBUF JMP I XPRINT XPR2, COMCHK /CHECK FOR COMMANDS WHILE IN LOOP. JMP XPR3 /CHECK AGAIN. /THE NEXT ROUTINE READS A CHAR FROM THE TTY. /AND PLACES IT IN CHAR. INDEV, 0 /CALLED VIA "READC" TAD KEYBRD /ANYTHING TYPED YET? SNA CLA JMP .-2 /NO. CHECK AGAIN. COMCHK JMP I INDEV /THE NEXT ROUTIEN TYPES OUT A CR-LF.
XCRLF, 0 /CALLED VIA CRLF TAD (215 PRINTC TAD (212 PRINTC JMP I XCRLF /THE NEXT ROUTINE DOES A DIVISION BY SUBTRACTION. /THE NUMERATOR IS HELD IN LOCATION NUMER /THE DENOMINATOR IS HELD IN LOCATION DENOM. /AFTER THE DIVISION THE REMAINDER IS IN NUMER /AND THE QUOTIENT IN DENOM. /NUMER MUST BE >= DENOM XDIV, 0 /CALLED VIA "DIV" DCA INDEV /CLEAR SUBTRACTION COUNTER. COUNT, TAD DENOM /DO NUMER-DENOM CIA TAD NUMER SPA /SUBTRACTED ENOUGH TIMES? JMP .+4 /YES. DCA NUMER /NO. ISZ INDEV /UP DATE SUBT. COUNTER. JMP COUNT CLA CLL TAD INDEV /PUT IN QUOTIENT DCA DENOM JMP I XDIV MES10, "N "A "M "E ": 240 0 /INTERRUPT HANDLER.
*600 INTRPT, DCA AC RAL DCA LINK CLSA SNA CLA JMP TPRNT /NO. CHECK OTHER DEVICES. ISZ TKCNT /CLOCK TICKED ENOUGH TIMES? JMP IEXIT /NO. EXIT. TAD AC DCA AC1 /YES. SAVE AC. TAD LINK DCA LINK1 TAD CLKCNT /RESET CLOCK COUNTER. DCA TKCNT TAD 0 /SAVE RETURN. DCA RETURN ION JMS DOALG /NO. DO ALGORITHIM. JMS I [RDVAL RESET /RESET VARS. TAD DATFLG /STILL TAKING DATA? SMA CLA JMP I (CNTRQ1 /NO TAD LINK1 RAR TAD AC1 JMP I RETURN RETURN, 0 AC1, 0 LINK1, 0 AC, 0 PNTRA, 0 LINK, 0 ADCVAL, 0 TEST, 0 CLL /CLEAR LINK.
SPA /ADC VALUE <0? CML CIA /YES. SET LINK AND NEGATE. DCA ADCVAL /SAVE. RAR /GET LINK. IT INDICATES THE SIGN. DCA S0 TAD ADCVAL AND [360 /MASK 0FF THE 4 BITS. CLL RTR /ROTATE INTO POSITION. RTR TAD S0 /PUT IN SIGH BIT DCA ADCVAL JMP I TEST DOALG, 0 TAD BTCFLG /ARE WE IN BATCH MODE? SZA CLA JMP LIU1 /YES, BUFFER MUST BE FULL TAD LIUFLG /NO HAVE WE FILLED THE BUFFER YET? TAD WRDCNT SZA CLA JMP LIU4 /NO, JUST SHIFT LIU1, TAD I PNTRT /GET DATA. CLL /CLEAR LINK. SPA /IS IT NEG? CML CIA /YES. SET LINK AND NEGATE. AND [360 /GET THE 4 BITS. TAD ADCVAL /ADD IN ADCVAL. SPA /ADCVAL NEG? CML /YES. AND [3777 /CLEAR SIGN BIT. TAD [7000 /ADD IN TABLE BIAS. DCA PNTRA TAD I PNTRA /GET ANSWER. SZL /# NEG? JMP NEG /YES. TAD I PNTRL /ADD IN LOW ORDER. DCA I PNTRL GLK JMP BOOB NEG, CIA /NEGATE RESULT. TAD I PNTRL DCA I PNTRL GLK CIA BOOB, TAD I PNTRH /ADD OR SUBTRACT CARRY. DCA I PNTRH
LIU4, TAD I PNTRT /ROTATE IT. ISZ PNTRT DCA I PNTRT TAD [-2 TAD PNTRT DCA PNTRT TAD [-2 /PNTRH=PNTRH-2 TAD PNTRH DCA PNTRH TAD PNTRH /RESET PNTRL. IAC DCA PNTRL ISZ SCNTR /LOOP DONE? JMP DOALG+1 /NO. JMS I [ADDS TAD LIUFLG /INCREMENT THE SCAN COUNT? TAD WRDCNT SZA CLA /IF SKIP, NO ISZ LIUFLG /YES JMP I DOALG TPRNT, TSF /PRINTER? JMP KINT /NO. TCF /YES. CLEAR FLAG. TAD TTYBUF /ANYTHING TO TYPE? SZA JMP INT1 /YES. DCA TELSW /NO. TURN OFF TELSW. IEXIT, TAD LINK RAR TAD AC IEXIT1, RMF ION JMP I 0 INT1, TPC /PRINT CHAR. DCA TELSW /TURN ON TELSW. DCA TTYBUF /CLEAR TTYBUF. JMP IEXIT KINT, KSF /KEYBORAD? JMP IEXIT KRB /YES. READ IN CHAR. DCA KEYBRD JMP IEXIT
CHAS, DCA AC RAL DCA LINK JMP TPRNT *1000 /THE NEXT ROUTINE DOES A DOUBLE PRECISION NEGATION . /CALLIN SEQUENCE: DNEG / POINTER TO HIGH ORDER. / RETURN /THE RESULT IS PUT BACK IN THE SAME WORDS. XDNEG, 0 /CALLED VIA "DNEG" TAD I XDNEG /GET POINTER. DCA PNTR5 TAD PNTR5 IAC CLL /GENERATE POINTER TO LOW ORDER. DCA PNTR6 TAD I PNTR6 /NEGATE LOW ORDER. CIA DCA I PNTR6 TAD I PNTR5 /COMPLEMENT HIGH ORDER. CMA SZL /ADD IN CARRY. IAC CLL DCA I PNTR5 JMP I XDNEG /THE NEXT ROUTINE SCALES A DOUBLE PRECISON WORD. /IF SCALE=0 THEN NOTHING IS DONE. /IF SCALE > 0 THEN THE DOUBLE PRECISON WORD IS SHIFTED LEFT /SCALE # OF TIMES AND THE HIGH ORDER WORD DISPLAYED. /IF SCALE <0 THEN THE DOUBLE PRECISON WORD IS SCALED /RIGHT SCALE TIMES.
DBS, 0 TAD HIGH /DOUBLE PRECISIONWORD < 0? SPA CLA JMP NEGG1 /YES. XXX1, DCA SGN /NO. SGN=0. IAC CLL RAL /SHIFT AN ORIGNAL 2 PLACES RIGHT. JMS I [SHIFTR HIGH TAD SCALE /SCALE =0? SNA JMP EXIT1 /YES. SPA /NO. >0? JMP SL0 /NO. JMS SHIFTL /YES. SHIFT LEFT. HIGH EXIT1, TAD HIGH ISZ SGN CIA CIA JMP I DBS SL0, CIA JMS I (SHIFTR /SHIFT RIGHT. HIGH JMP EXIT1 NEGG1, DNEG HIGH CMA JMP XXX1 SHIFTL, 0 /THIS ROUTINE SHIFTS HIGH LOW AC TIMES LEFT. CIA DCA CNTR1 /SET COUNTER. TAD I SHIFTL DCA PNTR5 /GET POINTER. TAD PNTR5 IAC ISZ SHIFTL DCA PNTR6 SHIFL, TAD I PNTR6
CLL RAL DCA I PNTR6 TAD I PNTR5 RAL DCA I PNTR5 ISZ CNTR1 JMP SHIFL CLL JMP I SHIFTL PLOT, TAD PMODE CLOE CLA CMA DCA PLTFLG /PLOT TAD DISFLG /DISPLAYING TEMP BUF? SMA CLA JMP PYES /YES. JMS I (DISFST /NO. DISP FIRST POINT OF PERM BUFFER. WAIT, READC /WAIT FOR USER TO TYPE SOMETHING BEFORE PLOTTING. JMS I [DISP READC /WAIT FOR USER TO TYPE SOMETHING BEFORE PROCEEDING. JMP I [CONT3 PMODE, 5300 PYES, TAD SBUF IAC DCA PNTR LOADX CLL CLA TAD I PNTR LOADY CLA CLL JMP WAIT /THE NEXT ROUTINE INPUTS A DECIMAL NUMBER FROM THE TTY. /THE NUMBER TYPED IN IS LEFT IN LOCATION NUMBER. /IF A RUBOUT IS TYPED THEN INPUT IS RESTARTED. /ONLY A MAX OF 4 DIGITS CAN BE TYPED.
DECINP, 0 /CALLED VIA "DECIN" TAD (-3 /INPUT NO MORE THAN 3 DIGITS BEFORE DECIMAL POINT. DCA CNTR1 DCA NUMBER LOOP5, READC /READ A CHAR. SORTJ /SEE IF A RUBOT OR PERIOD. INLST-1 GOLST-INLST JMS I TESTN1 /NOT A RUBOUT OR ".". SEE IF A DIGIT. JMP LOOP5 /NOT A DIGIT. IGNORE. PRINTC /IT IS A DIGIT. ECHO. JMS I CONVRI /DO ALGORITHIM. ISZ CNTR1 /INPUTED 3 DIGITS? JMP LOOP5 /NO. DEC6, READC /YES. WAIT FOR PERIOD. SORTJ INLST-1 GOLST-INLST JMP DEC6 PERIOD, DCA CNTR1 PRINTC /ECHO THE PERIOD. READC /INPUT ONE MORE DIGIT. JMS I TESTN1 /A DIGIT? JMP PERIOD+2 /NO.IGNORE. PRINTC /YES. ECHO. JMS I CONVRI /DO ALGORITHIM. BIN5, CRLF JMP I DECINP RUBOUT, TAD (334 /A RUBOUT WAS TYPED. RESTART INPUT. PRINTC /ECHO A "\" JMP DECINP+1 CR, TAD X /X=-1? IF SO CR ACCEPTABLE. SPA CLA JMP BIN5 /YES. TYPE A CR AND EXIT. TAD CNTR1 /NO. STILL WAITING FOR 3 DIGITS? SZA CLA JMP LOOP5 /YES.
JMP DEC6 /NO. WAITING FOR A PERIOD CONVRI, CONVER TESTN1, TESTN /THE NEXT ROUTINE CLEARS THE BUFFERS. *1200 /THIS ROUTINE DISPLAYS THE CURSORS. XCUR, 0 /CALLED VIA "CURSOR" TAD CURFLG /DISPLAY CURSORS? SZA CLA JMP I XCUR /NO. ADC JMS DELOOP CLA IAC ADC JMS DELOOP JMP I XCUR DELOOP, 0 TAD [400 LOADX CLA CLL TAD (-1000 DCA TT1 TAD (-377 DLOP, LOADY TAD [-10 ISZ TT1 JMP DLOP CLA CLL JMP I DELOOP
/THE NEXT ROUTIE DIES A DOUBLE PRECISION SIGNED /DECIMAL OUTPUT. IT PRITNS THE DOULBE PRECISION NUMBER /HELD IN LOCATIONS HIGH1 AND LOW1. SDPRNT, 0 /CALLED VIA "DOUT" TAD HIGH1 SMA CLA /NUMBER <0? TAD (-15 /NO. GENERATE CODE FOR SPACE. TAD (255 PRINTC TAD HIGH1 /HIGH1<0? SMA CLA JMP NO11 /NO. DNEG HIGH1 /YES. NEGATE IT. NO11, TAD (-7 /TYPE OUT 7 DIGITS. DCA CNTR6 TAD SDADDR DCA PNTR2 SDLOOP, TAD I PNTR2 /GET ENTRY FROM TABLE OF POWERS. DCA HIGH TAD I PNTR2 DCA LOW SDOUT, JMS I (DPDIV TAD DIGBOX TAD (260 PRINTC /PRINT DIGIT. ISZ CNTR6 /DONE? JMP SDLOOP /NO. JMP I SDPRNT CONL, 0364 /1,000,000 1100 0030 /100,000 3240 0002 /10,000 3420 0000
1750 /1,000 0000 /100 144 0000 /10 0012 ONE, 0000 0001 /COMMAND HANDLERS. CNTRLA, INIT /INIT VARS. JMP I .+1 START CNTRLZ, CLEAR /CLEAR BUFFERS. INIT CLA CLL CMA /TURN OFF CLOCK. CLZE CLA TAD (CHAS DCA 2 DCA COMFLG /ALL COMMANDS ACCEPTABLE. ION JMP I (CONT3 CNTRLS, CLEAR /CLEAR BUFFERS. CNTRLR, CLSA CLA CMA CLZE /ZAP THE CLOCK DCA DATFLG /SET DATA TAKING FLAG TAD (-144 CLAB /BUFFER PRESET = -100 CLL CLA TAD CLKMDE /GET THE CLOCK MODE CLOE CLA CLL CMA DCA CURFLG
TAD BTCFLG /BATCH MODE? SZA CLA JMP I (BATCH-6 /YES. TAD (INTRPT DCA 2 JMP I [CONT3 MES8, 262 /2 336 /^ 0 DVSOR, 0 0 DECI, 0 CMA DCA X DECIN DCA X JMP I DECI CLKMDE, 5610 *1400 KALBRT, LOADX /CALABRATE PLOTTER. TAD (-377 LOADY CLA CLL READC /WAIT FOR USER TO TYPE SOMETHING. CMA COMCHK /CHECK FOR COMMAND TAD (777 LOADX CLA CLL CLL CLA TAD (377 LOADY CLA CLL
READC /WAIT FOR USER TO YPE SOMETHING. CMA COMCHK JMP KALBRT /THIS COMMAND TYPES OUT DATA BETWEEN CURSORS. /IN ADDITION IT TYPES OUT THE FOLLOWING DATA: /VALUE OF THE LOWER CURSOR, VALUE OF THE HIGHER CURSOR, /THE # OF SWEEPS, # OF POINTS BETWEEN CURSORS, AND /THE TIME IN HUNDREDS OF MICRO SECS BEWEEEN CURSORS. /THIS NEXT COMMAND TYPES OUT DATA BETWEEN THE CURSORS IN ONE OF /TWO MODES. MODE 1 IS REPRESENTED EXTERNALLY BY THE COMMAND /CNTRL/T. IT DIVIDES THE DATA BETWEEN THE CURSORS BY THE FIRST /POINT IN THE PERMAMENT BUFFER. SINCE THE FIRST IS THE LARGEST, /OUTPUT IS IN THE FORM OF THE FRACTIONAL VALUES OF EACH /POINT IN RELATION TO THE FIRST POINT. /MODE 2 IS OUTPUTS THE POINTS AS MILLI VOLTS SQUARED TIMES 10^2. TYPCR, CLA CMA /MODE 1. TFLAG=-1 TYPCUR, DCA TFLAG /MODE 2. TFLAG=0 CRLF DCA DISFLG SETDAT /TYPE OUT DATA BETWEEN CURSORS. SETUP /SET UP DATA FOR DISPLAY ROUTINE. ADC JMS FIND DCA TEMP SETDAT SETUP CLA IAC ADC JMS FIND DCA ADC1 TAD ADC1 /TEMP=ADC1? CIA
TAD TEMP SNA JMP I CHECK1 /YES. DON'T TYPE ANYTHING. SMA /NO. TEMP<ADC1 JMP TYP1 /NO. DCA TT1 /YES. SAVE DIFFERENCE FOR USE AS A COUNTER. TYP2, CMA TAD TT1 DCA TT1 CMA TAD TEMP CLL RAL /GENERATE LOCATION IN PERM BUFFER. TAD ENDTMP IAC DCA PNTR3 TAD TEMP DECOUT TAD (254 PRINTC TAD ADC1 DECOUT JMS I (SWPOUT JMS I (TYPRST /TYPE REST OF THE DATA. CRLF TAD TFLAG /IS THIS MODE 1? SMA CLA JMP CONT12 /NO. TAD ENDTMP /YES. FLOAT FIRST POINT IN BUFFER. IAC DCA 17 TAD I 17 DCA HORD TAD I 17 DCA LORD JMS I (DFLOAT SAVE /SAVE IT DVSOR CONT12, TAD I PNTR3 DCA HIGH1 /GET HIGH ORDER WORD TAD I PNTR3
DCA LOW1 JMS I (TYPIT /PRINT IT. CRLF ISZ TT1 /DONE? JMP CONT12 JMP I (TEXIT TYP1, CIA /SAVE DIFFERENCE AS A COUNTER DCA TT1 TAD TEMP DCA PNTR2 /SAVE TEMP TAD ADC1 /EXCHANGE ADC1 AND TEMP DCA TEMP TAD PNTR2 DCA ADC1 JMP TYP2 FIND, 0 TAD [400 DCA TT1 DCA SGN /CLAER Y COUNTER. FIND1, DLOOP /CALL DISPLY ROUTINE. JMP DONE-1 /DONE ISZ SGN /INC Y COUNTER. TAD X /TT1<=X? CIA TAD TT1 SMA SZA CLA JMP FIND1 /NO. LOOK AGAIN. TAD SGN /YES. DONE, JMP I FIND /THE NEXT ROUTINE READS IN FROM THE ADC . THE CHANNEL TO /READ FROM IS IN THE AC UPON ENTRY. THE VALUES READ IN IS IN /THE AC WHEN EXIT IS MADE. XADC, 0 /CALLED VIA "ADC" ADLM ADST ADSK JMP .-1
ADRB CLL SPA CLL CML RAR CLL JMP I XADC MSRW, CDF CIF 10 JMP I .+1 /JUMP TO THE MASS STORAGE ROUTINE. MSSTRT *1600 OUT1, 0 /THIS ROUTINE OUTPUTS THE (AC). DCA T4 /SAVE. TAD SGN /HIGH SPEED? SZA CLA JMP LOWSPD /NO. IOF /YES TAD T4 JMS I PNCHI ION CONT17, TAD T4 TAD CHKSUM DCA CHKSUM COMCHK JMP I OUT1 LOWSPD, TAD T4 PRINTC JMP CONT17 PNCHI, PNCH OUTW, 0 /THIS ROUTINE OUT PUTS A 12 BIT WORD. DCA T1 /SAVE WORD. TAD T1 AND [7700 /OUTPUT LEFT HALF. CLL RTR RTR
RTR JMS OUT1 TAD T1 AND [77 /OUTPUT RIGHT HALF. JMS OUT1 JMP I OUTW OUTDP, 0 /THIS ROUTINE OUTPUTS A DOUBLE PECSION NUMBER. TAD I PNTR3 JMS OUTW TAD I PNTR3 JMS OUTW JMP I OUTDP JMP2, YES1 NO1 LST2, 377 /RUBOUT 215 /CR 221 /CNTRL/Q -1 JMP3, RUBIT CR1 CNTRQ MES9, "O "U "T "? 240 000 LST1, 331 /Y 316 /N -1 JMP1, YES NO COMLST, 224 /CNTRL/T THESE COMMANDS CAN NOT RUN WHILE DATA IS BEING TAKEN.
217 /CNTRL/O 320 /P 313 /K 324 /T 202 /CNTRL/B 227 /CNTRL/W 316 /N 303 /C CMLST1, 203 /CNTRL/C THESE COMMANDS CAN INTERRUPT DATA TAKING. 201 /CNTRL/A 221 /CNTRL/Q 232 /CNTRL/Z 325 /U 304 /D 222 /CNTRL/R 326 /V 223 /CNTRL/S 225 /CNTRL/U 330 /X 332 /Z -1 COMGO, TYPCR CHECK2 PLOT KALBRT TYPCUR BIN MSRW SWEEP1 KCUR COMGO1, CNTRLC CNTRLA CNTRLQ CNTRLZ UP DOWN CNTRLR VIEW CNTRLS CHECK2
EXPAND ZERO CLST, 203 /CNTRL/C 201 /CNTRL/A -1 INLST, 256 /"." 377 /RUBOUT 215 /CR -1 GOLST, PERIOD RUBOUT CR /MESSAGES. MES1, 322 /R 301 /A 324 /T 305 /E 277 /? 240 / 0 MES2, 260 /0 260 /0 260 /0 256 /. 260 /0 274 /< 322 /R 301 /A 324 /T 274 /< 262 /2 260 /0 264 /4 256 /. 270 /8 0
MES4, 264 /4 274 /< 243 /# 240 / 317 /O 306 /F 240 / 320 /P 317 /O 311 /I 316 /N 324 /T 323 /S 274 /< 265 /5 261 /1 263 /3 0 MES3, 316 /N 317 /O 256 /. 240 / 317 /O 306 /F 240 / 320 /P 317 /O 311 /I 316 /N 324 /T 323 /S 277 /? 240 / 0 MES5, 301 /A
325 /U 324 /T 317 /O 277 /? 240 / 0 /THIS ROUTINE OUTPUTS A SINGLE PRECISON SIGNED /NUMBER AS A DECIMAL NUMBER. THE NUMB@R IS HELD IN THE /AC UPON ENTRY. DECTYP, 0 /CALLED VIA "DECOUT" DCA LOW1 /SAE NUIBER DCA HIGH1 TAD LOW1 /IS #<0? SMA CLA JMP DEC1 /NO. TAD LOW1 CIA /YES. DCA LOW1 DNEG HIGH1 DEC1, DOUT JMP I DECTYP /THIS ROUTINE RESETS VARS. XRESET, 0 TAD ENDTMP DCA PNTRT TAD ENDPRM DCA PNTRH TAD PNTRH IAC DCA PNTRL TAD WRDCNT DCA SCNTR
JMP I XRESET JMS I (BRESET /RESET VARS. AND CLEAR FLAG. TAD P10 CLZE CLA TAD CLKCNT DCA TKCNT BATCH, TAD DATFLG /STILL TAKING DATA? SMA CLA JMP I (CNTRQ1 /NO. RETURN TO CNTRLQ CLSA SNA CLA JMP .-2 ISZ TKCNT /TICKED ENOUGH TIMES? JMP .-4 /NO. CLA CLL /MAKE SURE AC IS CLEAR. ADC /READ IN VALUE. DCA I PNTRT /STORE IN BUFFER. CMA /MOVE POINTERS. TAD PNTRT DCA PNTRT ISZ SCNTR /READ IN N+1 POINTS? JMP BATCH-2 /NO. READ ANOTHER VALUE. JMS I (STRIP /YES. STRIP DATA JMS I [DISP /DIPLAY. JMS I [DISP TAD FLAG /CROSS CORRELATION? SMA CLA JMP DOSWP /NO. IAC /YES. READ IN VALUE. ADC JMS I [TEST DOSWP, TAD ENDTMP /DO A SWEEP. DCA PNTRT TAD WRDCNT DCA SCNTR JMS I (DOALG JMS I [DISP JMP BATCH-6 /YES.
P10, 10 XSDAT, 0 /CALLED VIA "SETDAT". SETS UP DATA FOR DISPLAY. TAD [1000 DCA NUMER TAD NUMBER DCA DENOM DIV JMP I XSDAT KCUR, TAD CURFLG CMA DCA CURFLG JMP I CHECK1 ERROR, MESAGE MES12-1 CRLF JMP I (CONT3 *2200 SWEEP1, CRLF JMS I SSOUT /TYPE # OF SWEEPS MESAGE /TYPE "2^" MES8-1 TAD SCALE DECOUT CRLF JMP I [CONT3 SSOUT, SWPOUT ADDS, 0 /INC SWEEP COUNTER. TAD SWEEPL
IAC CLL DCA SWEEPL GLK TAD SWEEPH DCA SWEEPH JMP I ADDS /THIS NEXT ROUTIEN DETERMINES THE MODE, EITHER NORMAL OR BATCH. /IT DOES IT IN THE FOLLOWING WAY. IT TAKES 200 MICRO SECS /TO PROCESS ONE POINT. IF THE TOTAL PROCESSING TIME, WHICH /IS N*200 MICRO SECS IS <= TO THE TIME BETWEEN SAMPLES, /THEN IT IS NORMAL MODE, OTHERWISE IT IS BATCH MODE. /THE USER TYPES IN HIS RATE IN THE FORMAT XXX.X MIILI SECS, /WHICH IS EQIV. TO XXXX HUNDRED MICRO SECS.. /TO COMPARE WE USE THE FOLLOWING, IS N*200 MICRO SECS /LESS THAN AND EQUAL TO XXXX*100 MICRO SECS, OR /IS 2*N<=XXXX. MODE, 0 TAD NUMBER CLL RAL /MULT NUMBER BY 2. TAD CLKCNT /SUBTRACT RATE. SPA SNA CLA JMP XXXT CMA /YES. BTCFLG=-1 DCA BTCFLG MESAGE /TYPE "BATCH." MES6-1 CRLF JMP I MODE XXXT, MESAGE /TYPE "NORMAL." MES7-1 CRLF DCA BTCFLG JMP I MODE UP, IAC SKP
DOWN, CMA TAD SCALE DCA SCALE JMP I CHECK1 SHIFTR, 0 /SHIFTS HIGH, LOW AC PLACES RIGHT. CIA /SAVE COUNTER. DCA T2 TAD I SHIFTR /GET POINTER TO HIGHORDER WORD. DCA PNTR5 TAD PNTR5 IAC ISZ SHIFTR DCA PNTR6 SHIFR, TAD I PNTR5 CLL RAR DCA I PNTR5 TAD I PNTR6 RAR DCA I PNTR6 ISZ T2 /DONE? JMP SHIFR JMP I SHIFTR STRIP, 0 TAD SBUF /SET ADCVAL. DCA PNTR TAD I PNTR JMS I [TEST JMP I STRIP BRESET, 0 /RESETS VARS FOR BATCH MODE. RESET ISZ PNTRT
CMA TAD SCNTR DCA SCNTR CLSA CLA JMP I BRESET EXPAND, CLA CLL IAC RAL /READ IN FROM CHANNEL 2 ADC TAD SCL DCA SCL JMP I CHECK1 ZERO, DCA SCL JMP I CHECK1 MES6, 302 /B 301 /A 324 /T 303 /C 310 /H 240 / 315 /M 317 /O 304 /D 305 /E 256 /. 0 MES7, 316 /N 317 /O 322 /R 315 /M 301 /A 314 /L 240 / 315 /M 317 /O 304 /D
305 /E 256 /. 0 PNCH, 0 PLS PSF JMP .-1 PCF CLA CLL JMP I PNCH /THIS NEXT ROUTINE CLEARS THE BUFFER. XCLR, 0 /CALLED VIA "CLEAR" TAD WRDCNT /GET # OF POINTS. DCA CNTR1 TAD SBUF DCA PNTR2 /INIT POINTER. DCA I PNTR2 ISZ CNTR1 JMP .-2 DCA I PNTR2 /TEMP BUF HAS NOW BEEN CLEARED. TAD WRDCNT /CLEAR PERM BUFFER. DCA CNTR1 DCA I PNTR2 DCA I PNTR2 ISZ CNTR1 JMP .-3 JMP I XCLR *2400 /THE NEXT ROUTINE DOES THE ALGORTHIM FOR DECIMAL /INPUT.
CONVER, 0 TAD CHAR /GET THE VALUE OF THE DIGIT. AND (17 DCA CHAR TAD NUMBER /SET NUMBER=10*NUMBER+DIGIT. CLL RTL /MULT BY 8 RAL TAD NUMBER /ADD TWICE TO GET TO 10 TAD NUMBER TAD CHAR /ADD IN DIGIT. DCA NUMBER JMP I CONVER CNTRLC, CLA CMA CLZE CLA IOF JMP I .+1 7600 CNTRLQ, TAD DATFLG /TAKING DATA? SMA CLA JMP CNTRQ1 /NO. DCA DATFLG /NO LONGER TAKING DATA. JMP I CHECK1 /WAIT FOR SWEEP TO FINISH. CNTRQ1, CLA CMA /SWEEP IS OVER. TURN OFF CLOCK. CLZE CLA TAD [CHAS DCA 2 JMP I [CONT3 CHKALL, 0 TAD DATFLG /TAKING DATA? SMA CLA JMP CHK1 /NO.
SORTJ /YES. SEE IF A LEGAL COMMAND. CMLST1-1 COMGO1-CMLST1 JMP I CHKALL /NO. CHK1, SORTJ COMLST-1 COMGO-COMLST JMP I CHKALL BIN, CLA CMA CLZE CLA TAD [CHAS DCA 2 TAD ENDTMP IAC DCA PNTR3 TAD WRDCNT DCA CNTR MESAGE /TYPE "HIGH?" MES9-1 BIN1, READC /READ ANSWER. SORTJ /WAS A Y OR N TYPED? LST4-1 JMP2-LST4 JMP BIN1 NO1, CLA CMA /A "N" WAS TYPED. SGN=-1 YES1, DCA SGN /SGN=0 PRINTC /ECHO. CRLF BIN4, MESAGE /TYPE "NAME: " MES10-1 TAD [-6 /ACCEPT NO MORE THAN 6 CHARS. DCA CNTR1 TAD TABPNT /SET TABLE. DCA PNTR2 BIN2, CMA DCA COMFLG /CHECK FOR CNTRL/A AND CNTRL/C COMMANDS.
READC SORTJ LST2-1 /CHECK FOR RUBOUT, CR, AND CNTRL/Q JMP3-LST2 PRINTC /NOT A RUBOUT OR CR. ECHO. TAD CHAR DCA I PNTR2 ISZ CNTR1 /TYPED SIX? JMP BIN2+2 CR1, CRLF /YES. DCA I PNTR2 /CLEAR OUT LAST PLACE. TAD TABPNT /RESET TABLE POINTER FOR OUTPUT. DCA PNTR2 DCA COMFLG JMS I (LEADER BIN3, TAD I PNTR2 /GET DATA. DCA TT1 TAD TT1 JMS I OUT1I TAD TT1 /DONE? SZA CLA JMP BIN3 /NO. JMS I (LEADER DCA CHKSUM /CLEAR CHECK SUM TAD (TABLE1-1 /OUTPUT VARS THAT MUST BE SAVED. DCA PNTR BLOOP, TAD I PNTR SNA /END OF TSBLE? JMP .+3 /YES. JMS I (OUTO1 /NO. OUTPUT ORIGIN AND CONTENTS OF ORIGIN. JMP BLOOP TAD ENDTMP TAD (2 JMS I (OUTO /OUTPUT ORIGIN OF BUFFER. JMS I OUTDPI /OUT PUT A DOUBLE ORECISON NUMBER. ISZ CNTR /DONE? JMP .-2 /NO. TAD CHKSUM /YES. PUNCH CHECKSUM JMS I OUTWI JMS I (LEADER
CNTRQ, DCA COMFLG JMP I [CONT3 RUBIT, TAD (334 PRINTC JMP BIN4 OUT1I, OUT1 OUTWI, OUTW OUTDPI, OUTDP TABPNT, TABLE-1 *2600 DISFST, 0 /DSIPLAYS FIRST POINT IN BUFFER. TAD ENDTMP IAC DCA PNTR TAD I PNTR /GET DOUBLE PRECISION WORD. DCA HIGH TAD I PNTR DCA LOW LOADX CLL CLA DBLSCL /SCALE IT. LOADY CLA CLL JMP I DISFST /THE NEXT ROUTINE DIVIDES HIGH1,LOW1 BY HIGH,LOW. /HIGH,LOW MUST BE POSITIVE. /ANSWER IS IN DIGBOX. DPDIV, 0
TAD HIGH /HIGH< 0? SPA CLA JMP I [ERROR /YES TAD HIGH SZA CLA /HIGH,LOW = 0000 0000? JMP DPCONT /NO. TAD LOW SNA CLA JMP I [ERROR /YES DPCONT, DNEG HIGH /NEGATE HIGH,LOW TAD HIGH1 /DIVIDEND < 0? SPA CLA JMP DPNEG /YES. DPRT, DCA SGN /NO. SGN=0 DCA DIGBOX DCA HIGH2 /CLEAR HIGH ORDER PART OF COUNTER. SUBMOR, CLL TAD LOW TAD LOW1 /ADD LOW ORDERS. DCA X /SAVE. GLK TAD HIGH TAD HIGH1 SPA /DONE? JMP DPDONE /YES. DCA HIGH1 /NO. TAD X DCA LOW1 JMS I [ADD ONE HIGH2 JMP SUBMOR DPDONE, CLA CLL ISZ SGN JMP I DPDIV DNEG HIGH2 JMP I DPDIV DPNEG, DNEG
HIGH1 CMA JMP DPRT /THE NEXT ROUTINE NORMALIZES A DOUN;BLE PRECISION /WORD FROM THE PERMAMENT BUFFER FOR OUTPUT IN /MILLI VOLTS. /THE FOLLOWING IS DONE. THE RESULT OF 2^8 * (N/[A-X]) /IS OUTPUTED. N IS THE DOUBLE PRECISION WORD. /A IS THE NUMBER OF SWEEPS. X IS THE RELATIVE LOCATION /IN THE BUFFER OF THE POINT BEING OUTPUTED. TYPIT, 0 TAD TFLAG /MODE 1? SZA CLA JMP MODE1 /YES. TAD BTCFLG /BATCH MODE? SZA CLA JMP TYPIT1 /YES.DON'T USE RELATIVE POSITION TAD ENDTMP /GENERATE RELATIVE POSITON N BUFFER. TAD [3 CIA TAD PNTR3 CLL RAR TYPIT1, DCA LOW /LOW=X DCA HIGH DNEG /LOW=-LOW HIGH JMS I [ADD SWEEPH HIGH JMS DPDIV IAC JMS I [SHIFTL /DO DIVISOR-2*REMAINDER. HIGH1 DNEG HIGH1 DNEG
HIGH JMS I [ADD HIGH1 HIGH TAD HIGH /RESULT < 0? SMA CLA JMP .+4 JMS I [ADD /YES. ONE HIGH2 TAD [14 /MULT BY 2^12 JMS I [SHIFTL HIGH2 TAD HIGH2 DCA HIGH1 TAD DIGBOX DCA LOW1 DOUT JMP I TYPIT /THIS ROUTINE TYPES OUT # OF POINTS BETWEEN CURSORS /AND THE TIME REPRESENTED BY THE CURSORS. TYPRST, 0 TAD [254 PRINTC TAD TT1 /PRINT # 0F POINTS BETWEEN CURSORS. CIA DECOUT TAD [254 PRINTC TAD TT1 CMA DCA T1 /COMPUTE TIME BETWEEN SAMPLES. TAD CLKCNT CIA DCA T2 JMS I (MULT
DCA HIGH1 /SAVE HIGH ORDER RESULT. TAD T1 /GET LOW ORDER ESULT. DCA LOW1 /SAVE LOW ORDER. DOUT /PRINT OUT IN HUNDREDS OF MICRO SECS. CRLF JMP I TYPRST MODE1, JMS I (DOIT JMP I TYPIT *3000 /THE NEXT ROUTINE DOES A DUBLE PRECISON ADDITON. /CALLING SEQUENCE: JMS ADD / HIGH WORD 1 / HIGH WORD 2 /RESULT IS PLACED IN HIGH WORD 2. ADD, 0 TAD I ADD /GET POINTERS. DCA PNTR5 ISZ ADD TAD I ADD DCA PNTR6 TAD PNTR6 DCA ATEMP TAD I PNTR5 /ADD HIGH ORDERS. TAD I PNTR6 DCA I PNTR6 ISZ PNTR5 ISZ PNTR6 CLL TAD I PNTR5 /ADD LOW ORDERS. TAD I PNTR6 DCA I PNTR6 TAD I ATEMP SZL /WAS THERE A CARRY? IAC /YES. INC HIGHORDER RESULT. DCA I ATEMP ISZ ADD
CLL JMP I ADD /THE NEXT TROUTINE SEES IF CHAR IS A DIGIT "0"-"9". /CALLING SEQUENCE: JMS TESTN1 / /NO / YES TESTN, 0 TAD CHAR /CHAR <=271? TAD (-271 SMA SZA CLA JMP I TESTN /NO. TAD CHAR TAD (-260 SMA CLA ISZ TESTN JMP I TESTN ATEMP, 0 /THE NEXT ROUTINE DOES A SINGLE PRECSION UNSIGNED /MULTIPLY BY ADDITION. /ARG1 IS IN T1 /ARG2 IS IN T2 /ON EXIT THE HIGH ORDER IS IN AC AND THE LOW ORDER /IN T1. MULT, 0 CLA CMA TAD T1 CIA DCA T1 /ADD T2 T1 TIMES. TAD T2 DCA MPLOW DCA MPHIGH TAD MPLOW DCA ML DCA MH TAD T1 /T1=0? SNA CLA
JMP MEXIT /YES. DON'T MULT. DOMUL, JMS I [ADD /ADD T2 TO ITSELF. MH MPHIGH ISZ T1 /DONE? JMP DOMUL /NO. MEXIT, TAD MPLOW /YES. T1 = LOW ORDER. DCA T1 TAD MPHIGH JMP I MULT MPHIGH, 0 MPLOW, 0 MH, 0 ML, 0 MES12, "D "I "V "I "S "I "O "N 240 "B "Y 240 "0 0 DOIT, 0 TAD HIGH1 DCA HORD TAD LOW1 DCA LORD JMS DFLOAT DIVF DVSOR JMS I FOUT JMP I DOIT
FOUT, FLOUTP /THE NEXT ROUTINE FLOATS A DOUBLE PRECSION NUMBER. DFLOAT, 0 TAD (27 DCA EXP NORM JMP I DFLOAT /THE NEXT ROUTINE SAVES THE FLOATING AC IN MEMORY. XSAVE, 0 /CALLED VIA "SAVE" CLA CMA TAD I XSAVE /PICK UP ADDRESS. DCA 17 TAD EXP DCA I 17 TAD HORD DCA I 17 TAD LORD DCA I 17 ISZ XSAVE JMP I XSAVE /THE NEXT ROUTINE DOES A TRIPLE PRECISION NEGATION. ACMINS, 0 CLA CLL TAD OVER2 CIA DCA OVER2 TAD LORD CMA SZL CLL IAC DCA LORD TAD HORD CMA
SZL CLL IAC DCA HORD JMP I ACMINS VIEW, TAD DISFLG CMA DCA DISFLG JMP I .+1 LUCY *3200 BUFFER=. *6202 DNORM, 0 CLA CLL DCA ATM1 DCA SIGN1 TAD HORD SPA /MANTISSA NEG? ISZ SIGN1 /YES. SZA CLA /MANTISSA=0? JMP GO6 /NO. TAD LORD SZA CLA JMP GO6 TAD OVER2 SNA CLA JMP EXIT2 GO6, TAD SIGN1 /NEG? SZA CLA JMS I MINS /YES. LOP, TAD HORD RAL CLL
SPA CLA JMP EXXIT1 TAD OVER2 CLL RAL DCA OVER2 TAD LORD RAL DCA LORD TAD HORD RAL DCA HORD ISZ ATM1 /COUNT # OF TIMES SHIFTED. JMP LOP EXXIT1, TAD ATM1 /CORRECT EXPONENT CIA TAD EXP DCA EXP TAD SIGN1 /NEG? SZA CLA JMS I MINS JMP I DNORM EXIT2, DCA EXP JMP I DNORM ATM1, 0 SIGN1, 0 /THE NEXT ROUTIE DOES A FLOATING POINT DIVIDE. /CALLING SEQUENCE: DIVF / ADDRESS OF DIVISOR / RETURN FDIV, 0 /CALLED VIA "DIVF" CLA CMA TAD I FDIV /GET ADDRESS. DCA 17 TAD I 17 DCA EX1 TAD I 17 DCA AC1H TAD I 17
DCA AC1L DCA OVER1 ISZ FDIV JMS FLDV JMP I FDIV FLDV, 0 TAD AC1H SNA CLA JMP I (ERROR TAD EX1 /SUBTRACT EXPONENTS. CIA IAC JMS SIGN JMS MINUS2 /NEGATE DIVISOR. JMS I DIVIDE /DIVIDE. JMS MULDIV JMP I FLDV SIGN, 0 TAD EXP DCA EXP TAD (-2 DCA SGN1 TAD HORD SMA CLA JMP .+3 JMS I MINS ISZ SGN1 TAD AC1H SMA CLA JMP I SIGN JMS MINUS2 ISZ SGN1 JMP I SIGN JMP I SIGN DIVIDE, DUBDIV SGN1, 0 MINUS2, 0
CLA CLL TAD OVER1 CIA DCA OVER1 TAD AC1L CMA SZL CLL IAC DCA AC1L TAD AC1H CMA SZL CLL IAC DCA AC1H JMP I MINUS2 MULDIV, 0 ISZ SGN1 JMS I MINS JMS I MINS NORM ISZ OVER2 JMP I MULDIV JMP I MULDIV *6400 DUBDIV, 0 DCA MP4 DCA MP1 TAD MIF DCA MP3 SKP DV3, JMS MULT2 CLL TAD AC1L TAD LORD DCA MP2 RAL TAD HORD TAD AC1H
SNL JMP .+4 DCA HORD TAD MP2 DCA LORD CLA TAD MP1 RAL DCA MP1 TAD MP4 RAL DCA MP4 ISZ MP3 JMP DV3 TAD MP1 DCA LORD TAD MP4 DCA HORD JMP I DUBDIV MIF, -27 MP1, 0 MP2, 0 MP3, 0 MP4, 0 EXPONT=EXP HORDER=HORD LORDER=LORD MULT10, 0 TAD LORDER DCA LTEMP TAD HORDER DCA HTEMP DCA REMAIN JMS MULT2 JMS MULT2 JMS DUBLAD JMS MULT2
TAD DIGIT DCA LTEMP DCA HTEMP JMS DUBLAD TAD REMAIN JMP I MULT10 LTEMP, 0 HTEMP, 0 DIGIT, 0 REMAIN, 0 MULT2, 0 CLA CLL TAD OVER2 CLL RAL DCA OVER2 TAD LORDER RAL DCA LORDER TAD HORDER RAL DCA HORDER TAD REMAIN RAL DCA REMAIN JMP I MULT2 /THIS ROUTINE DELAYS ACCORDING TO KNOB 3 DELAY, 0 TAD (3 ADLM ADST ADSK JMP .-1 ADRB CIA TAD (6777 CLAB CLSA
SNA CLA JMP .-2 JMP I DELAY /THIS ROUTINE INITS VARS. INIT1, 0 /CALLED VIA "INIT" CMA DCA COMFLG DCA TTYBUF DCA KEYBRD DCA DISFLG DCA PLTFLG DCA TELSW DCA SWEEPH DCA SWEEPL TAD [4 DCA SCALE IOF TAD [CHAS DCA 2 CMA DCA CURFLG DCA SCL JMP I INIT1 DUBLAD, 0 CLA CLL TAD LORDER TAD LTEMP DCA LORDER RAL TAD HORDER TAD HTEMP DCA HORDER RAL TAD REMAIN DCA REMAIN JMP I DUBLAD
*6600 FLOUTP, 0 JMS FOUTCN TAD BEXP DCA EXPONT TAD CHE PRINTC JMS I FEXPPT JMP I FLOUTP FOUTCN, 0 CLA CLL TAD HORDER SPA CLA CLA CML TAD SPLUS SZL TAD SMINUS PRINTC JMS OUTDG TAD (256 PRINTC CLA CLL TAD HORDER SPA CLA JMS I MINS FGO1, CLA CMA TAD EXPONT DCA EXPONT DCA BEXP FGO2, TAD EXPONT SMA JMP FGO3 TAD FOUR SMA CLA JMP FGO4 DIVF PT10
CLA CMA TAD BEXP DCA BEXP JMP FGO2 FGO3, DIVF TEN ISZ BEXP JMP FGO2 FGO4, DCA I DPT JMS I M2PT JMS I M10PT SKP FGO5A, JMS DIVTWO ISZ EXPONT JMP FGO5A SNA JMP FGO7 FGO6, JMS OUTDG TAD MINUS7 DCA EXPONT FGO6A, JMS I M10PT JMS OUTDG ISZ EXPONT JMP FGO6A JMP I FOUTCN FGO7, CLA CMA TAD BEXP DCA BEXP TAD HORDER SZA CLA JMP .+4 TAD LORDER SNA CLA DCA BEXP CLA CMA JMP FGO6+1 BEXP, 0 MINUS7, -4 /OUTPUT 5 DIGITS. FOUR, 4
SPLUS, 253 SMINUS, 255-253 DPT, DIGIT M10PT, MULT10 M2PT, MULT2 FEXPPT, FEXC CHE, 305 OUTDG, 0 TAD (260 PRINTC JMP I OUTDG XLOAD, 0 /CALLED VAI "LOADX" CLL RAL TAD (7001 DILX RAR JMP I XLOAD YLOAD, 0 /CALLED VIA "LOADY" CLL RAL DILY DISD JMP .-1 RAR DIXY JMP I YLOAD SWPOUT, 0 TAD SWEEPH DCA HIGH1 TAD SWEEPL DCA LOW1 TAD [254 PRINTC DOUT JMP I SWPOUT
DIVTWO, 0 CLL RAR DCA OUT TAD HORDER RAR DCA HORDER TAD LORDER RAR DCA LORDER TAD OUT JMP I DIVTWO OUT, 0 PT10, 7775 /.10 3146 3147 *7400 TEN, 0004 2400 0000 FEXC, 0 CLA CLL TAD EXPONT SPA CIA CML DCA EXPONT TAD C253 SZL TAD C255 JMS I DGPT DCA HORDER TAD EXPONT ISZ HORDER TAD MM144 SMA JMP .-3 TAD C144
DCA EXPONT CMA TAD HORDER SZA JMS I DGPT DCA HORDER TAD EXPONT ISZ HORDER TAD M12 SMA JMP .-3 TAD C12 DCA LORDER CLA CMA TAD HORDER JMS I DGPT TAD LORDER JMS I DGPT JMP I FEXC C253, 253-260 C255, 255-253 MM144, -144 C144, 144 C12, 12 DGPT, OUTDG TEXIT, CLA CMA DCA DISFLG JMP I [CONT3 LST4, "H "L M12, -12 RDVAL, 0 ADC /READ FIRST VALUE FROM CHANNEL 0. DCA I ADC0 /PUT IN FIRST WORD OF BUFFER. TAD FLAG /IS THIS CROSS CORRELATION?
SMA CLA JMP RDVAL1 /NO. AUTO. IAC /YES. READ SECOND VALUE FROM CHANNEL 1. ADC RDVAL2, JMS I (TEST JMP I RDVAL RDVAL1, TAD I ADC0 JMP RDVAL2 OUTO, 0 /OUTPUTS ORIGIN. DCA CNTR2 /SAVE. TAD CNTR2 AND [7700 CLL RTR RTR RTR TAD (100 /PUT IN CHANNEL 7 BIT. JMS I (OUT1 TAD CNTR2 AND [77 JMS I (OUT1 JMP I OUTO CNTR2, 0 OUTO1, 0 /OUTPUTS ORIGIN AND CONTENTS OF ORIGIN. DCA NUMER /SAVE. TAD NUMER JMS OUTO /OUTPUT ORIGIN. TAD I NUMER JMS I (OUTW /CONTENTS. JMP I OUTO1 LEADER, 0 /OUTPUT 100 LEADER/TRAILER. TAD (-144 DCA CNTR1 TAD (200 JMS I (OUT1 ISZ CNTR1
JMP .-3 JMP I LEADER TABLE, 0 0 0 0 0 0 0 TABLE1, CLKCNT WRDCNT ENDTMP ENDPRM SWEEPH SWEEPL NUMBER BTCFLG FLAG 0000 *7560 /THIS IS A SHORT ROUTINE TO INIT VARS CLA CLL /AND TURN ON INTERRUPT AFTER LOADING A DCA COMFLG /DATA TAPE WITH THE BINARY LOADER. DCA TTYBUF /BEFORE LOADING, BE SURE TO TYPE CNTRL/Z. DCA KEYBRD DCA DISFLG DCA PLTFLG DCA TELSW ION JMP I (CONT3 *7000 /THE MULTIPLICATION TABLE IS PLACED HERE. ITS CORE /LIMITS ARE 7000-7377.
DECIMAL 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15 0;2;4;6;8;10;12;14;16;18;20;22;24;26;28;30 0;3;6;9;12;15;18;21;24;27;30;33;36;39;42;45 0;4;8;12;16;20;24;28;32;36;40;44;48;52;56;60 0;5;10;15;20;25;30;35;40;45;50;55;60;65;70;75 0;6;12;18;24;30;36;42;48;54;60;66;72;78;84;90 0;7;14;21;28;35;42;49;56;63;70;77;84;91;98;105 0;8;16;24;32;40;48;56;64;72;80;88;96;104;112;120 0;9;18;27;36;45;54;63;72;81;90;99;108;117;126;135 0;10;20;30;40;50;60;70;80;90;100;110;120;130;140;150 0;11;22;33;44;55;66;77;88;99;110;121;132;143;154;165 0;12;24;36;48;60;72;84;96;108;120;132;144;156;168;180 0;13;26;39;52;65;78;91;104;117;130;143;156;169;182;195 0;14;28;42;56;70;84;98;112;126;140;154;168;182;196;210 0;15;30;45;60;75;90;105;120;135;150;165;180;195;210;225
/ /ROUTINE TO READ AND WRITE DATA TO MASS STORAGE. OCTAL FIELD 1 *7400 MSSTRT, CDF 0 IOF TAD (2001 DCA I (7746 /SET JOB CONTROL WORD CDF CIF 10 JMS I (7700 /CALL COMMAND DECODER. 5 0 0 TAD (7601 /SET FILE NAME ADD. DCA MSTR2 TAD I (7600 /CREATE FILE. SNA CLA /TEST FOR INPUT JMP MSTR7 /INPUT. TAD (201 /MAX. SIZE OF FILE IS 8. JMS I (7700 /CALL FILE CREATE. 3 MSTR2, 7601 /RETURN START BLOCK OF FILE. MSTR3, 0 /RETURN -BLOCK LENGTH. JMP ERRO TAD (3 /SET LOC 0=3 FOR CORRELATION CODE. CDF 0 DCA I (0 CDF 10 TAD MSTR2 /SET ARG. TO WRITE PAGE 0 DCA MARG3 TAD (4200 DCA MARG1 DCA MARG2 JMS MSTRW /WRITE PAGE 0. TAD (-3177 /SET UP WRITE THE DATA /WRITE FROM 3200 SO IT CAN /BE READ BACK. CDF 0 /CALCULATE SIZE OF DATA. TAD I (ENDPRM /WRITE FROM 3200 TO END OF DATA. IAC /ENDPRM IS BUF END -1. CDF 10 DCA MSTRW /SAVE # OF WORDS TO WRITE. TAD MSTRW /CALCULATE # OF 128 RECORDA TO WRITE. AND (7600 CLL RAR DCA MARG1 TAD MSTRW AND (177 /TEST FOR PARTIAL RECORD. SZA CLA TAD (100 TAD MARG1 TAD (4000 DCA MARG1 TAD (3200 DCA MARG2 ISZ MARG3 JMS MSTRW /WRITE DATA. TAD MARG1 /FIND # OF 256 BLOCKS USED. CLL RTR RTR RTR /SHIFT INTO BITS 7-11. RAR /DIVIDE BY 2. AND (17 /SAVE ONLY BITS 8-11. SZL IAC /ADD 1 FOR HALF A BLOCK. IAC /ADD 1 FOR BLOCK 1. DCA MARG4 IAC /CLOSE FILE ON SYS: JMS I (7700 4 7601 /NAME ADDRESS. MARG4, 0 /NUMBER OF BLOCKS. JMP ERRO MEXITO, CDF CIF 0 CLA CLL ION JMP I .+1 CNTRQ MSTRW, 0 /WRITE SUBROUTINE. CIF 0 JMS I (7607 MARG1, 0 MARG2, 0 MARG3, 0 JMP ERRO JMP I MSTRW ERRO, CDF 10 JMS I (7700 7 1 MSTR7, TAD I (7620 /READ PAGE 0 SNA /TEST FOR COMMAND ERROR. JMP ERRO DCA MARG3 TAD (200 DCA MARG1 DCA MARG2 JMS MSTRW /READ EXECUTE. ISZ MARG3 /READ DATA TAD I (7617 /CALCULAT # 0F 128 BLOCKS TO READ. CMA /SET POSITIVE,DON'T ADD 20 AND (7760 /TO SUBTRACT 1ST BLOCK. CLL RTL /ROTATE TO BITS 1-5. RAL DCA MARG1 TAD (3200 DCA MARG2 JMS MSTRW JMP MEXITO $



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search