File BAD2.

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

/BASIC AVERAGER MS-SIGNAL AVERAGER FOR LAB-8E.
/
/DEC-8E-ABA0A-A-LA
/
/COPYRIGHT 1972
/DIGITAL EQUIPMENT CORPORATION
/MAYNARD, MASSACHUSETTS 01754
/

/FILE BA.2 /LAB8E BASIC AVERAGER FOR PS 8 *7557 OVRLAY, IOF /CALL IN SECT. 3 OF ADV. AVG. CLA CLL CMA CLZE /DISABLE CLOCK CLA ADCL /AD DILC /DISPLAY DBDI /I/O CDF 0 /CHAIN IN SEC 3 DCA I KC7746 CIF 10 JMS I CHAIN 6 XX0V1, 0 CHAIN, 7700 KC7746, 7746 /DEFINE WHERE TO GO FOR <CTRL>C MONITR=7600 /EXIT TO BIN LOADER KM0001=115 CLZE=6130 ADCL=6530 DILC=6050 DBEI=6501
/LIST ADDRESSES ADJLIS=23 /START OF JOB LIST-1 ADCHNL=24 /START OF CHANNNEL DISPLAY LIST-1 /JOINT SWEEP PARAMETERS - 29 LOCATIONS SMASK=25 /STIMULUS (SYNC) CHANNEL MASK NSWEP=26 /-# OF SWEEPS IN AVERAGE KSYTIM=27 /-(# OF ASI FROM STIM TO SYNC POINT -1) FAST=33 /ONE OR MORE CHANNELS MCHAN=34 /CHANNELS KMCHAN=35 RATE=36 /THIS IS CLOCK PRESET KADC=41 /ADC MODE KMODE=43 /CLOCK MODE /SWEEP A LIST PARAMETERS SAMA=44 /-# OF POINTS (ASI) IN SWEEP A (EACH CHANNEL) NCHA=45 /# OF CHAN IN SWEEP A ADBUFA=47 /LOCATION -1 FOR START OF ADC BUFFER -A /SWEEP A - ON - LINE PARAMETER KBLA=60 /-# OF ASI FROM SYNC POINT TO LOGICAL END OF A-1 /INTERRUPT REFERENCES INTERX=65 /LINK TO INTERRUPT SERVICE ASAVE=66 /AC AT INTERRUPT LSAVE=67 /LINK AT INTERRUPT /LINKAGES TO THIS SECTION JGET=JMS I 70 /PICKUP NEXT JOB FROM JOB LIST BLKCNT=JMS I 71 /MOVE THRU DATA BLOCK SETPNT=JMS I 72 /SET ADC POINTERS IXPNT=JMS I 73 /MOVE THRU ADC BUFFERS SDIS=JMS I 74 /SET UP DISPLAY DISP=JMS I 75 /DISPLAY A POINT
/BASIC SUBROUTINES [SU63A] BRAN=JMS I 132 /BRANCH ACCORDING TO AC MATCH WITH LIST SHFT=JMS I 133 /DOUBLE PRECISION ARITHMETIC SHIFT DADD=JMS I 134 /DOUBLE PRECISION ADD /PAGE ZERO CONSTANTS K0004=112 K0003=113 K0002=114 KM0001=115
/IOT REFERENCES FOR THE LAB/8E / / /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 /DISABLE INTERRUPT DBEI=6501 /ENABLE 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 /COMBINED OPERATES MTH=CLA CMA CLL RTL MTW=CLA CMA CLL RAL TWO=CLA CLL CML RTL
/INTERRUPT SERVICE ROUTINE ENTRANCE *1 DCA ASAVE /INTERRUPT SERVICE DISPATCH RAR DCA LSAVE JMP I INTERX PG0OV, 0 0 0 /INSTALLATION PARAMETERS: LOCATIONS 20-64 / 0 /FIELDS IN THIS MACHINE: MEMTOT / HICORE-LOCORE-4 /ROOM FOR DATA IN FIELD 0: FIELD0 /LIST ADDRESSES / LOCORE-1 /START OF LISTS. BUFFERS, DATA: ADJLIS / 0 /START OF CHANNEL DISPLAY WORDS: ADCHNL /JOINT SWEEP PARAMETERS - 29 LOCATIONS / 0 /STIMULUS (SYNC) CHANNEL MASK: SMASK / 0 /-# OF SWEEPS IN AVERAGE: NSWEP / 0 /-(# OF ASI FROM STIM TO SYNC POINT -1): KSYTIM / 0 /(DBL PRECISION) / -1 /-# OF USEC PER ASI: ASI / 0 /(DBL) / 200 /KADC; A/D MODE. START ON EXTERNAL / 1640 /KMODE; CLOCK MODE; 1 USEC, RESET, EXTERNAL /SWEEP A LIST PARAMETERS / 0 /-#OF POINTS (ASI) IN SWEEP A (EACH CHANNEL): SAMA / 0 /# OF CHAN IN SWEEP A: NCHA / 0 /LOCATION -1 FOR START OF A: ADBUFA /SWEEP A - ON-LINE PARAMETERS / 0 /-# OF ASI FROM SYNC POINT TO LOGICAL END OF A -1: KBLA
*70 /LINKAGES TO SUBROUTINES JGETS /PICKUP NEXT JOB FROM JOB LIST: JGET BLKCNS /MOVE THRU DATA BLOCK: BLKCNT SETPNS /SET ADC POINTERS: SETPNT IXPNTS /MOVE THRU ADC BUFFERS: IXPNT SDISS /SET UP DISPLAY: SDIS DISPS /DISPLAY A POINT: DISP *100 6563 /LINK TO DFIX K0005, 5 *104 PS8X, PS8 /THESE ARE LINKAGES FOR SECTIONS III AND IV *105 6600 /FLOATING ADD; FADD 6717 /FLOATING DIVIDE; FDIV 6707 /FLOAT AC TO FAC; FLOAT 6476 /FLOATING MULTIPLY; FMUL 6545 /FIX FAC TO AC; FIX
*112 /PAGE ZERO CONSTANTS - USED BY RESIDENT SUBROUTINES - DON'T RELOCATE 0004 /K0004 0003 /K0003 0002 /K0002 -001 /KM0001 +0007 /K0007 -0027 /KM0027 +0377 /K0377 -0004 /KM0004 /TTY-LIST 0 /@-END OF LIST 42 /"-PROGRAM OUTPUT MARKER: PROMRK 44 /$-DISPLAY RESET 47 /'-KEYBORAD INPUT MARKER: TXMRK 45 /CR-CARRIAGE RETURN: KCR -43 /LF-LINE FEED: KM0043 /OCSORT 40 /SPACE: K0040 -47 /': MTXMRK /LINKAGES TO BASIC SUBROUTINES BRANS /BRANCH ACCORDING TO FOLLOWING LIST: BRAN SHFTS /DOUBLE PRECISION ARITHMETIC SHIFT: SHFT DADDS /DOUBLE PRECISION ADD: DADD
*142 /LINKAGES TO FLTSUB SUBROUTINES USED IN SECTION III 6414 /SAVE FAC: SAVE 6400 /LOAD FAC: LOAD 6430 /DOUBLE PRECISION NEGATE: DCOM 6443 /NORMALIZE FAC: NORM
/TEMPORARY STORAGE REGISTERS 146-177 TEMP01=146 TEMP02=147 TEMP03=150 TEMP04=151 TEMP05=152 TEMP06=153 TEMP07=154 TEMP10=155 TEMP11=156 TEMP12=157 TEMP13=160 TEMP14=161 TEMP15=162 TEMP16=163 TEMP17=164 TEMP20=165 TEMP21=166 /TEMPORARY STORAGE AND MULTIPLE ACCUMULATORS ARITH0=167 TEMP22=167 ARITH1=170 TEMP23=170 ARITH2=171 TEMP24=171 ARITH3=172 TEMP25=172 ARITH4=173 TEMP26=173 ARITH5=174 TEMP27=174 /TEMPORARY STORAGE AND TTY-KBD BUFFERS KBDBUF=175 TEMP30=175 TTYBUF=176 TEMP31=176 TTYFLG=177 TEMP32=177 *200 SYNCLR, 0 ISZ SYNCLR /FIX RETURN CLSA CLA CLL TAD ASWIT ASWIT=TEMP15 DCA VSW VSW=TEMP14 JMP I SYNCLR SLOCK, 0 /SUBROUTINE TO SLOW CLOCK FOR PLOT CMA DCA PSWIT TAD 44 /GET -# OF POINTS TAD K2500 CIA CLAB CLA TAD K5400 CLOE CMA CLZE CLA JMP I SLOCK K5400, 5400 K2500, 2500
*400 /OVERLAY LOOKUP FOR CAINING. START0, CDF 0 CLL CLA TAD (2001 DCA 7746 /SET PS-8 JOB STATUS WORD. TAD (PG0OV+1 DCA XXT3 TAD (NAMES DCA XXT2 TAD (-2 DCA XXT1 CDF 0 CIF 10 JMS I (7700 /LOCK IN USR. 10 CLA IAC /FIND BLOCK ADDRESS OF SECT. 3 CDF 0 CIF 10 JMS I (200 2 ARGA, NAME2 0 JMP ERRXX CLA CLL TAD ARGA /STORE BLOCK ADD.IN CHAIN COMMAND DCA XX0V1 /TO CALL SEC.2. ARGBS, CLA IAC /FIND BLOCK ADD.OF SEC.4, CDF 0 /AND WRITE OVERLAY. CIF 10 JMS I (200 2 ARGB, NAME3 0 JMP ERRXX CLA CLL TAD ARGB DCA I XXT3 /STORE AT LOCS. 6,7. TAD I XXT2 DCA ARGB ISZ XXT2 ISZ XXT3 ISZ XXT1 JMP ARGBS CDF 0 CIF 10 JMS I (200 /UNLOCK USR. 11 CLA CLL DCA 7746 /RESET JOB STATUS WORD. JMP START ERRXX, CDF 0 CIF 10 JMS I (200 7 1 /USER ERROR 1 HLT XXT1, 0 XXT2, 0 XXT3, 0 NAME2, FILENAME AAVG3.SV NAME3, FILENAME AAVG4.SV NAME4, FILENAME AAVG5.SV NAMES, NAME4
*6200 BUFA=10 GETPNT=11 PUTPNT=12 JPNT=13 /ROUTINES TO TYPE DECIMAL WITH FORMATTING /TYPE SIGNED DECIMAL IN ARITH2 DECTYP, 0 TAD ARITH2 /GET SIGN SPA CLA TAD K0015 /TYPE "-" FOR NEGATIVE TAD K0240 /TYPE SPACE FOR PLUS JMS I TYPEX TAD ARITH2 SPA CMA IAC DCA ARITH0 /.ABS. OF NUMBER TAD KMD1K /GET THOUSANDS DIGIT JMS GDIGIT TAD KMD100 /GET HUNDREDS DIGIT JMS GDIGIT TAD KMD010 /GET TENS DIGIT JMS GDIGIT CLA CMA /GET UNITS DIGIT JMS GDIGIT TAD K0254 /TYPE COMMA JMS I TYPEX ISZ CRCNT /CHECK ITEM COUNT FOR LINE JMP I DECTYP /NOT 10 YET, EXIT JMS CRLFS /10 ITEMS, NEW LINE JMP I DECTYP /RADIX DEFLATE AND TYPE DIGIT GDIGIT, 0 DCA ARITH3 /RADIX TO DEFLATE BY DCA NDIGIT NDIGIT=TEMP01 TAD ARITH0 /NUMBER TO DEFLATE GLOOP, DCA ARITH0 /UPDATE DEFLATED NUMBER TAD ARITH0 TAD ARITH3 /TRIAL SUBTRACTION ISZ NDIGIT SMA /DO MORE? JMP GLOOP /YES, CONTINUE DEFLATION CLA /NO TAD K0257 /NDIGIT IS DIGIT+1 TAD NDIGIT /TYPE DIGIT JMS I TYPEX JMP I GDIGIT
/SUBROUTINE TO TYPE CRLF AND SET LINE-ITEM COUNTER CRLFS, 0 TAD K0215 /TYPE CR JMS I TYPEX TAD K212 /TYPE LF JMS I TYPEX TAD KMD010 /SET COUNT TO -10 ITEMS DCA CRCNT JMP I CRLFS /LOCAL CONSTANTS KMD1K, -1750 KMD100, -0144 KMD010, -0012 K0015, 0015 K0257, 0257 K0240, 0240 K212, 0212 /BRANCH LIST KCHEK, K0215, 0215 7777 /DUMMY END /TEXT OF CTRL/A MESSAGES TXMESS, 215 /(CR) 212 /(LF) TMCH, 0 /* 272 /: 240 /SPACE 0 /END TEXT /LOCAL VARIABLE CRCNT, -12 /LOCAL CROSSPAGE TYPEX, TYPES K0254, 254
*6302 /BASIC SUBROUTINES SHFT, DADD, AND BRAN [SU63AB] /SUBROUTINE TO SHIFT DOUBLE PRECISION WORD (SHFR): SHFT (10+6N) /CALL: TAD KXXXX /AC HOLDS SHFT COUNT, RIGHT IS NEGATIVE / SHFT / RETURN /LINK=0, AC=0 /FORMAT OF DOUBLE WORD IS (HI,LO) HI(0)-ONLY-HOLDS SIGN /SIGN BIT WILL BE REPLICATED IN RIGHT SHIFTS /TEMPORARY STORAGE ALLOCATION SHCNT=TEMP01 /ARITHMETIC REGISTER ALLOCATION SHFR=ARITH1 /ARITH1-2 ARE FOR SHIFTING SHFTS, 0 CLL SNA /IF SHIFT COUNT=0. EXIT JMP I SHFTS SMA /SHIFT RIGHT OR LEFT CML CMA IAC /LEFT-SET LINK=1 AND COUNT NEGATIVE DCA SHCNT SZL /RIGHT SHIFT? JMP SHLEFT /NO-SHIFT LEFT SHRIHT, TAD SHFR /SHIFT DONE ON ARITH1-2 SPA /SET L=1 IF NEGATIVE CML RAR DCA SHFR /SHIFT WITH SIGN REPLICATION TAD SHFR+1 /SHIFT LO ORDER HALF RAR DCA SHFR+1 CLL ISZ SHCNT /ENOUGH SHIFTS? JMP SHRIHT /NO-CONTINUE JMP I SHFTS /YES-EXIT SHLEFT, TAD SHFR+1 /SHIFT LO-ORDER CLL RAL /0 TO LSB DCA SHFR+1 TAD SHFR /SHIFT HI-ORDER RAL DCA SHFR CLL ISZ SHCNT /ENOUGH? JMP SHLEFT /NO-CONTINUE JMP I SHFTS
/SUBROUTINE FOR BRANCHING ON MATCH OF AC AGAINST TABLE: BRAN / BRAN / ADDRESS OF TABLE / RETURN HERE IF FIRST ENTRY MEETS MATCH / ETC. / NONE MATCH /TABLE, FIRST ENTRY / SECOND ENTRY / -LAST ENTRY /TEMPORARY STORAGE ALLOCATION BPNT=TEMP01 BSAVE=TEMP02 BRANS, 0 DCA BSAVE TAD I BRANS /GET ADDRESS OF FIRST ENTRY OF MATCH LIST DCA BPNT BRLOOP, TAD I BPNT /LOOK AT ENTRY SMA /GET MAGNITUDE CMA IAC ISZ BRANS /INDEX RETURN ADDRESS TAD BSAVE /MATCH FOUND? SNA CLA JMP I BRANS /YES-EXIT TO RETURN AS CALCULATED TAD I BPNT /NO-TEST FOR LAST ENTRY. ISZ BPNT /INDEX ENTRY POINTER SMA CLA /-INDICATES THIS WAS LAST ENTRY JMP BRLOOP /NOT LAST-CONTINUE ISZ BRANS /EXIT, NOT IN LIST, NONE MATCH JMP I BRANS /SUBROUTINE TO DO DOUBLE PRECISION ADD OF ARITH1-2, AND 4-5: DADD (21) /ARITHMETIC REGISTER ALLOCATION DBLAC=ARITH1 DBLARG=ARITH4 DADDS, 0 /ADD LO-ORDER CLL CLA TAD DBLAC+1 TAD DBLARG+1 DCA DBLARG+1 RAL /CARRY TAD DBLAC /ADD HI-ORDER TAD DBLARG DCA DBLARG /LEAVE IN ARITH4-5. CLL JMP I DADDS /FLOATING CONSTANT USED BY [SU54A] K100MF, 0033 /100,000,000(10) 2765 7020
*6400 /SUBROUTINE TO SENSE AND BRANCH ON PSEUDO KEYBOARD: IKBRAN / EXIT 1 /NORMAL RETURN / EXIT 2 /<LF> / EXIT 3 /<CR> IKBRAS, 0 /PROTECT AGAINST BAD CONTROL TAPE TAD KBDBUF /EXAMINE INTERRUPT KBD SNA /KEY STRUCK? JMP I IKBRAS /NO NEW KEY BRAN /YES - WHICH IS IT? IKLIST JMP CTRLZ /^Z - ZERO AND RESTART JMP CTRLR /^R - RESTART JMP I OVRLAX /^P - GET NEXT SECTION JMP CTRLA /^A - ALTER PARAMETERS JMP CTRLQ /^Q - TERMINATE AVERAGING ISZ IKBRAS /C.R. -SET EXIT TO CALL+3 JMP IKCRLF /L.F. - ECHO AND EXIT TO CALL+2 JMP IKV /V - COMPLEMENT VIEW SWITCH MTW /C - CONTRACT VIEW SCALE JMP IKXC /X - EXPAND VIEW SCALE JMP I 104 /EXIT TO PS8 JMP IKT /T- TYPE DATA JMP IKP /P - PLOT MODE IKCONT, TAD KBDBUF /OTHERS - ECHO TLS /TYPE DCA TTYFLG /SET FLAG - CHARACTER IN PROGRESS DCA KBDBUF /CLEAR KBD BUFFER IKEXIT, JMP I IKBRAS IKV, TAD VSW /V -COMPLEMENT VIEW SWITCH CMA DCA VSW JMP IKCONT /ECHO AND EXIT IKXC, CLL CMA /-2 GOES TO 1, 0 GOES TO -1 TAD NSHFT /C: INC. NSHFT, X: DECR. NSHFT DCA NSHFT /NSHFT IS # OF PLACES TO SHIFT RIGHT JMP IKCONT /ECHO AND EXIT IKCRLF, TAD K0212 /CR OR LF. TYPE AN LF LATER DCA TTYBUF ISZ IKBRAS /EXIT TO CALL+2 OR CALL+3 JMP IKCONT /ECHO AND EXIT IKP, TAD XMASK /IS AVERAGING DONE? SZA CLA JMP IKEXIT-1 /NO, DON'T EVEN ECHO "P" TAD PSWIT /YES, COMPLEMENT PLOT SWITCH JMS I SCLOX JMP IKCONT /ECHO AND EXIT SCLOX, SLOCK
IKT, TAD PSWIT /PLOTTING DONE? TAD XMASK /IS AVG DONE? SZA CLA JMP IKEXIT-1 /NO, DON'T ECHO DCA TNJOB /PRESET TO DUMP MODE TNJOB=TEMP10 DCA TNMIN TNMIN=TEMP11 DCA TNMAX TNMAX=TEMP12 TAD KBDBUF /"<CRLF>T: " JMS I RDKBDX /GET AVERAGE TO BE OUTPUT SNA /0 TO TYPE ALL JMP IKTGO /IN DUMP MODE, TYPE ALL DATA DCA TNJOB /-JOB # TAD K0314 /"<CRLF>L: " JMS I RDKBDX /GET LOWER LIMIT (BIN #) DCA TNMIN TAD K0310 /"<CRLF>H: " JMS I RDKBDX /GET UPPER LIMIT (BIN #) DCA TNMAX IKTGO, CLA CMA DCA TSWIT TAD K215 DCA KBDBUF JMP I IKBRAS CTRLQ, CLA CMA /DO 1 MORE SWEEP DCA NSWPS /AND THEN QUIT JMP IKEXIT-1 /FAST AVERAGER STARTS HERE START, TAD K201 DCA KBDBUF ADCL /CLEAR OUT ADC ENABLE CTRLA, TAD K0322 /ASK FOR RATE IN USECS, DELAY, # SWEEPS JMS I RDKBDX JMS I TCALX /SET UP THE CLOCK AND ADC TAD K0316 /"/CRLF/N: " JMS I RDKBDX /-# OF SWEEPS DCA NSWEP TAD K0304 /"/CRLF/D: " JMS I RDKBDX /-DELAY (IN SAMPLING INTERVALS) TAD KM0001 DCA KSYTIM+1
CTRLZ, TAD K0212 /"/LFCRLF/: " JMS I TMESSX TAD ADJLIS /START AT FIRST JOB DCA JPNT ZNXT, CDF 0 JGET /GET JOB PARAMETERS JMP ADINIT /NO MORE JOBS - INITIALIZE SWEEP CONTROL TO ACCEPT DATA ISZ JPNT /SKIP OVER DISPLAY WDS IN J6 AND J7 ISZ JPNT DCA ZXM /AC HOLDS CDF INSTRUCTION JMS I JCELLX /GET # OF CELLS -2 FOR JOB'S DATA POINT TAD K0002 /# OF CELLS PER DATA POINT IS N CMA IAC DCA TZCELL TZCELL=TEMP02 CLA CMA /FIRST ITEM HAS SWEEP CNT (NOT COUNTED IN LENGTH) ZXM, CDF TAD TZCELL /FOR EACH PNT, ZERO N CELLS DCA TZCNT TZCNT=TEMP01 DCA I GETPNT /GETPNT INIT BY JGETS ISZ TZCNT JMP .-2 BLKCNT /NEXT POINT? DCA ZXM /YES BUT CHANGE CDF JMP ZXM /CONTINUE JMP ZNXT /END OF JOB, GET NEXT JOB /LOCAL CROSSPAGE RDKBDX, RDKBDS JCELLX, JCELLS OVRLAX, OVRLAY TMESSX, TMESS TCALX, TCALS /ASCII CHARACTERS K0322, 322 /R K0304, 304 /D K0316, 316 /N K0212, 212 /LF K0314, 314 /L K0310, 310 /H K215, 215 K201, 201
/INITIALIZE POINTERS, COUNTERS, AND BUFFERS ADINIT, TAD K0003 /SET SCALE TO 1/8 DCA NSHFT NSHFT=TEMP21 CTRLR, TAD K0212 /PUT LINE FEED IN KBD BUFFER DCA KBDBUF TAD NSWEP /SET AUTO STOP COUNTER DCA NSWPS NSWPS=TEMP20 TAD SMASK /SYNC CHANNEL MASK DCA XMASK XMASK=TEMP17 DCA PSWIT /NO PLOTTING PERMITTED PSWIT=TEMP16 TAD ADRCLK /SETUP INTERRUPT SERVICE DCA INTERX /INTERRUPT GOES TO SWEEP ADC TAD K0011 /SET CLOCK MODE CLOE /SCHMIT #1 AND INTERRUPT ENABLE CMA CLZE /CLEAR ALL OTHER BITS CLA KBDCHK, JMS I IKBRAX /LOOK AT INTERRUPT KEYBOARD JMP RSTART /NO CHAR - GO DISPLAY CLA CMA /L.F. - COMES HERE FOR FIRST SWEEP - SET MODE TO "PAUSE" DCA ASWIT /C.R. - SET MODE TO "COMPUTE" JMS I .+1 SYNCLR DCA TSWIT /SET TO "NO-TYPE" TSWIT=TEMP13 RSTART, ION /INITIALIZE INTERRUPT ON DISWIT, TAD VSW /VIEW INPUT OR PARTIAL SUMS? SZA CLA JMP VINPUT /VIEW INPUT TAD ADJLIS /LOOK AT PARTIAL RESULTS OF JOBS DCA JPNT /START WITH FIRST JOB VJSTAR, CDF 0 JGET /VIEW PARTIAL SUMS JMP KBDCHK /NO MORE JOBS, LOOK AT KEYBOARD DCA VJXM /CDF INSTRUCTION SDIS /SETUP DISPLAY PARAMETERS K0011, 0011 /SKIPPED JMS JCELLS /GET # OF LOCATIONS/POINT-2 DCA TDSKIP /DON'T DISPLAY S.D. OR TREND TDSKIP=TEMP04 TAD VJXM /SET UP FIELD TO GET N DCA VJXMN
VJXMN, CDF TAD I GETPNT /NUMBER OF SWEEPS DCA ARITH2 TAD TSWIT /CHECK TYPE SWITCH SNA CLA /.NE. 0 TO TYPE JMP VJXM /DON'T TYPE TAD TNJOB /DUMP MODE? SNA CLA JMP .+3 /YES, START TYPING ISZ TNJOB /NO, IS THIS THE JOB TO BE TYPED? JMP VJXM /NO, DISPLAY THIS ONE JMS I CRLFX /TYPE CRLF, SET ITEM COUNTER JMS I DECTYX /TYPE N TAD NSHFT /GET SCALE FACTOR DCA ARITH2 /SAVE FOR TYPING JMS I DECTYX /TYPE SCALE FACTOR JMS I CRLFX /TYPE CRLF, SET CR COUNT VJXM, CDF /GET DATA FIELD TAD I GETPNT /GET DATA POINT (LO ORDER, HI ORDER) DCA ARITH2 TAD I GETPNT /AND PUT IN SHIFT REGISTER DCA ARITH1 CLL CLA CMA /OUTPUT IN MV, DECREASE SF BY 2 TAD NSHFT CMA IAC SHFT TAD TSWIT /CHECK TYPE SWITCH SNA CLA JMP VJDIS /TYPE NOT ENABLED TAD TNJOB /IS THIS JOB TO BE TYPED SZA CLA JMP VJDIS /NO, JUST DISPLAY IT TAD TNMIN /HAVE WE REACHED THE FIRST POINT SNA CLA JMP .+3 ISZ TNMIN /NO, COUNT DOWN SKP /JUST DISPLAY JMS I DECTYX /YES, TYPE DATA POINT ISZ TNMAX /HAVE WE REACHED THE LAST POINT? SKP /NO, CONTINUE ISZ TNJOB /YES, DISABLE TYPEOUT VJDIS, CLA IAC /SCALE TWO MORE RIGHT (COUNTS FROM MV) DISP /JOB SCALE, BIAS, DISPLAY TAD TDSKIP /MOVE POINTER OVER VARIANCE AND TREND TAD GETPNT DCA GETPNT BLKCNT /CHECK BLOCK LENGTH DCA VJXM /NEW DATA FIELD JMP VJXM /FILE NOT YET COMPLETE JMP VJSTAR /GET NEXT JOB AND DISPLAY IT
/VIEW RAW INPUTS VINPUT, TAD ADCHNL /GET START OF CHANNEL DISPLAY LIST DCA JPNT DCA TORD /LOOK AT 1ST OF LIST (ORDER=0) VINEXT, SETPNT /SET SWEEP PARAMETERS AND POINTERS SDIS /JPNT POINTS TO DISPLAY WORDS D1 AND D2 JMP KBDCHK ISZ TORD /MOVE CHANNEL COUNTER VILOOP, TAD I TBUFAD /GET DATA POINT DCA ARITH2 /LOAD IN LOW ORDER SHIFT REGISTER DISP /DISPLAY IXPNT /DONE WITH THIS CHANNEL? JMP VINEXT /YES - GET NEXT CHANNEL JMP VILOOP /NO - GET NEXT POINT /LOCAL CROSSPAGE ADRCLK, CLKINT CRLFX, CRLFS DECTYX, DECTYP IKBRAX, IKBRAS /SUBROUTINE TO GET (#CELLS-2) FROM JOB TYPE JCELLS, 0 /CELLS-2 PER DATA POINT IN CALC BUFFER TAD TJTYPE /1, 2, OR 3 BRAN K0003 TAD K0004 /TYPE 3: 7 CELLS+2 TAD K0003 /TYPE 2: 3 CELLS+2 JMP I JCELLS /TYPE 1: 0 CELLS+2 /SERVICE COMMON INTERRUPT DEVICES INKBD, KSF /KEYBOARD UP? JMP INTTY /NO, LOOK AT TTY KRB /YES, READ CHARACTER DCA KBDBUF INTTY, TSF /TTY DONE? JMP INTOUT /NO, RESTORE AC.L TCF /YES, CLEAR FLAG. DCA TTYFLG /CLEAR SOFTWARE FLAG: TTY NOT IN PROGRESS TAD TTYBUF /MORE TO TYPE? SNA JMP INTOUT /NO, EXIT TLS /YES, TYPE IT DCA TTYFLG /SET TTY SOFTWARE FLAG: TTY IN PROGRESS DCA TTYBUF /CLEAR BUFFER INTOUT, TAD LSAVE /RESTORE LINK BIT CLL RAL TAD ASAVE /RESTORE AC RMF /RESTORE MEMORY FIELD ION /TURN INTERRUPT ON JMP I 0 /RESUME MAIN PROGRAM
/SYNC SERVICING AND SWEEPING CLKINT, CLSA /READ IN S1, S2, S3, AND CLEAR AND XMASK /CHECK AGAINST MASK SNA CLA JMP I INKBDX /NO SYNC, GO TRY OTHER DEVICES TAD KBLA /# OF SAMPLES TO ACCEPT STORWC, DCA BLA BLA=TEMP01 TAD ADBUFA /START OF BUFFER-1 STORMA, DCA BUFA TAD KSYTIM+1 /-# SAMPLING INTERVALS TO WAIT DCA SYTIM SYTIM=TEMP02 TAD RATE /SET CLOCK RATE. CLAB CLA TAD KMODE /SET CLOCK MODE CLOE /1 USEC PER TICK, AUTO RESET, EXTERNAL ENABLE CMA CLZE WLOOP, CLSA /ABORT ADC, CLEAR CLOCK FLAG SNA CLA /WAIT FOR PRE-ANALYSIS DELAY JMP .-2 ISZ SYTIM JMP WLOOP ADLM /SET MUX TO CHANNEL 0. /ACCEPT SWEEP INTO BUFFER JMP I ADLOX /SWEEP ACCEPTED INTO BUFFER, UPDATE CALCULATIONS IF APPROPRIATE BACK, TAD ASWIT /AVERAGING SWITCH, =0 IF OK TO AVERAGE SZA CLA JMP ADONE /.NE. 0, DON'T UPDATE CALCULATIONS TAD ADJLIS /START CALCULATIONS AT TOP OF LIST DCA JPNT CALJOB, CDF 0 /FIELD 0 IS WHERE THE LIST IS JGET /GET JOB PARAMETERS JMP CALEND /E.O.L. DETECTED - END OF THIS SWEEP ISZ JPNT /MOVE OVER J6 AND J7 ISZ JPNT DCA CALXM /AC HELD CDF N SETPNT /SET UP ADC POINTERS AND COUNTERS TAD GETPNT /SET UP TO UPDATE JOB'S DATA REGION DCA PUTPNT TAD CALXM /UPDATE JOB'S SWEEP COUNTER DCA .+1 CDF /GET INTO DATA FIELD TAD I GETPNT /GET # OF SWEEPS DCA NSAVE NSAVE=TEMP07 ISZ I PUTPNT /SAVE INCR. # OF SWEEPS
CALNXT, CDF 0 /ADC BUFFER IS IN FIELD 0 TAD I TBUFAD /GET SAMPLE FROM ADC BUFFER DCA TADC TADC=TEMP03 CALXM, CDF /JOB'S DATA FIELD CLL TAD TADC /ADC BUFFER VALUE FOR POINT JMS LADDS /LIST DOUBLE PRECISION ADD CLA CMA TAD TJTYPE /S.D.? SNA CLA JMP CALMOR /NO, TYPE 1: 75/PNT TAD TADC /ADC BUFFER VALUE JMS SQADS /SQUARE AND LIST TRIPLE PRECISION ADD MTW TAD TJTYPE /TREND? SNA CLA JMP CALMOR /NO, TYPE 2: 400/PNT TAD I GETPNT /LAST SWEEP'S ADC BUFFER VALUE FOR THIS POINT DCA TSAVE TSAVE=TEMP01 TAD TADC /SAVE THIS SWEEP'S ADC BUFFER VALUE FOR THIS POINT DCA I PUTPNT TAD NSAVE /# OF SWEEPS SNA CLA /0? JMP .+4 /YES, X(1)-X(0)=0 TAD TSAVE /THIS SWEEP - LAST SWEEP CMA IAC TAD TADC /SQUARE AND LIST-TRIPLE ADD JMS SQADS /TYPE 3: 750/PNT CALMOR, BLKCNT /MORE DATA IN JOB? DCA CALXM /FIELD CHANGE - CHANGE CDF INSTRUCTION IXPNT /NOT COMPLETE, UPDATE ADC POINTER JMP CALJOB /THIS JOB COMPLETE, GET NEXT JOB JMP CALNXT /NOT COMPLETE, GET NEXT POINT /LOCAL CROSSPAGE ADLOX, ADLOPS /SUBROUTINE TO DBL PREC ADD TO PUTPNT/GETPNT LIST (28) LADDS, 0 DCA TLAD TLAD=TEMP01 TAD TLAD /ADD LO-ORDER TAD I GETPNT DCA I PUTPNT /UPDATE LO-ORDER CALC POINT TAD TLAD /DO SIGN EXTENSION OF ADC WORD TO HI-ORDER SPA CLA CMA SZL /L=1 INDICATES LO-ORDER OVERFLOW IAC /ADD IN OVERFLOW TAD I GETPNT DCA I PUTPNT /UPDATE HI-ORDER CALC POINT CLL JMP I LADDS
/SUBROUTINE TO SQUARE AC AND ADD TO TRIP PREC LIST (62+56N; APPX 300) SQADS, 0 SPA SNA /GET MAGNITUDE CLL CML CMA IAC DCA TSQAD TSQAD=TEMP02 TAD TSQAD /LOAD DOUBLE PREC. AC DCA ARITH2 DCA ARITH1 DCA ARITH5 DCA ARITH4 SQLOOP, TAD TSQAD /MULTIPLIER SNA /ANYMORE TO ADD TO PARTIAL PRODUCT? JMP SQDONE /NO-UPDATE CALC BUFFER AND EXIT CLL RAR /LINK BIT HOLDS WHETHER TO ADD IN MORE DCA TSQAD /ROTATE FOR NEXT SZL /L=1, ADD MULTIPLICAND TO PARTIAL PRODUCT DADD IAC /SHIFT PARTIAL PRODUCT 1 LEFT SHFT JMP SQLOOP /DO IT SOME MORE SQDONE, TAD ARITH5 /ADD DOUBLE PRECISION AC TO 3-WORD ENTRY TAD I GETPNT /LO-ORDER DCA I PUTPNT RAL /OVERFLOW BIT TAD ARITH4 /PLUS HI ORDER JMS LADDS /ADD TO 2-WORD ENTRY JMP I SQADS /TRIPLE PRECISION IN ALL. /LOCAL CROSSPAGE INKBDX, INKBD /LOCAL CONSTANTS K0276, 276 /">" K11, 11 CALEND, ISZ NSWPS /SWEEPS COMPLETED? JMP ADONE /NO DCA VSW /YES, SET VIEW SWITCH TO "AVERAGES" DCA XMASK /DO NOT SAMPLE TAD K0276 /TYPE ">" DCA KBDBUF JMP .+3 ADONE, TAD K11 CLOE /SET CLOCK MODE, NULL IF DONE CMA /CLEAR S1-S3 THAT CAME DURING SWEEP CLZE CLSA CLL CLA ADLM JMP I .+1 /START AT TOP OF DISPLAY CYCLE KBDCHK
/THIS SUBROUTINE DECODES DISPLAY WORDS: SDIS /POINTER IS AUTOINDEX REGISTER "AXPNTR" /CALL: SDIS / END OF LIST RETURN / NORMAL RETURN AXPNTR=JPNT SDISS, 0 TAD PSWIT /PLOT MODE? SNA CLA JMP .+4 /NO, CONTINUE JMS I IKBRAY /WAIT FOR CR OR LF JMP .-1 K0037, 0037 /NOP TAD I AXPNTR /GET D1: DX(8),YS(4) SNA JMP I SDISS /EOL IF D1=0 DCA ARITH2 TAD ARITH2 AND K0017 /HAVE Y SCALE FACTOR DCA YS DCA ARITH1 /0 TO HI ARITH0 TAD K0005 /DELTA-X SHFT /MOVE BINARY POINT TO END OF ARITH2 TAD ARITH1 DCA DELTAX TAD ARITH2 DCA DELTAX+1 TAD I AXPNTR /GET D2: XZ(6),YZ(6) DCA ARITH2 TAD K0004 /MOVE YZ TO 10 SIGNIFICANT BITS SHFT TAD ARITH2 DCA YZ TAD KM0006 /MOVE XZ TO 10 BITS OF ARITH2 SHFT TAD ARITH2 AND KM0006 /GET RID OF LOW ORDER BITS DILX /LOAD X-REGISTER DCA ARITH4 /FOP HOLDS CURRENT X-VALUE TAD PSWIT /PLOT MODE? SNA CLA JMP .+4 /NO, CONTINUE JMS I IKBRAY /WAIT FOR CR OR LF JMP .-1 K0017, 0017 /NOP ISZ SDISS /EXIT TO CALL+2 JMP I SDISS
/LOCAL VARIABLES YS, 0 /SCALE FACTOR FOR Y YZ, 0 /SCOPE Y FOR Y=0 DELTAX, 0 /INCREMENT BETWEEN POINTS (INTEGER PART) 0 /(FRACTIONAL PART) /LOCAL CONSTANTS KM0006, -0006 IKBRAY, IKBRAS /SUBROUTINE TO DISPLAY POINT OF DATA (X-INCREMENTED):DISP /DATA VALUE SHOULD BE IN ARITH1, ARITH0+2 DISPS, 0 TAD YS /AC+(YS) = # PLACES TO SHIFT RIGHT CMA IAC SHFT /SCALE TAD ARITH4 /MOVE X TO NEW VALUE DILX CLA TAD YZ /BIAS TAD ARITH2 DILY CLA DISD JMP .-1 DIXY /LOAD Y AND DISPLAY TAD PSWIT /PLOT MODE? SNA CLA JMP .+4 /NO, CONTINUE CLSA /YES, WAIT FOR CLOCK SNA CLA JMP .-2 TAD DELTAX /LOAD INCREMENT FOR X DCA ARITH1 TAD DELTAX+1 DCA ARITH2 DADD /ADD TO PRESENT X JMP I DISPS
/THIS SUBROUTINE DECODES JOB LIST AND SETS JOB POINTERS (136) / J1: A/B(1), CHAN#(5), 1(1), CHAN ORDER(5) / J2: JOB TYPE(4), CONTINGENCY(8) / J3: LINKAGE WORD (L1) TO FIRST BLOCK / J4: LINKAGE WORD (L2) TO FIRST BLOCK / J5: LINKAGE WORD (L3) TO FIRST BLOCK / J6: DISPLAY WORD D1 / J7: DISPLAY WORD D2 /PARAMETERS OF JOB: / TYPE: - TYPE # IN "TJTYPE" / CONTINGENCY: "TCMASK", CHAN ORDER: "TORD" / COUNT FOR 1ST BLK: "TCBLK" / LOCATION OF 1ST -1: "GETPNT" / CDF INSTRUCTION: AC / AUTOINDEX "JPNT" POINTS TO J5 AT EXIT (J6 IS NEXT) JGETS, 0 TAD I JPNT /GET J1 SNA /J1=0 FOR END OF JOB LIST JMP I JGETS /J1=0, E.O.L. DCA ARITH1 /SAVE J1 IN SHIFT REGISTER TAD I JPNT /GET J2 DCA ARITH2 /LO-ORDER SHIFT REGISTER TAD ARITH1 /GET ORDER IN MX LIST AND K0037 /5 LOW ORDER BITS OF J1 DCA TORD TORD=TEMP03 TAD K0004 /GET JOB TYPE SHFT TAD ARITH1 AND K0017 /4 HI ORDER OF J2 DCA TJTYPE /-JOB TYPE TJTYPE=TEMP05 TAD I JPNT /GET -# OF ITEMS IN NEXT BLOCK (J3) DCA CNBLK TAD I JPNT /GET DATA FIELD (J4) DCA TCDF TCDF=TEMP01 TAD I JPNT /GET STARTING ADDRESS-1 FOR DATA BLOCK (J5) DCA GETPNT ISZ JGETS /EXIT TO CALL+2 TAD TCDF /LEAVE CDF IN INSTRUCTION IN AC JMP I JGETS /VARIABLES FOR JGETS-BLKCNS CNBLK, 0 /-# OF ITEMS LEFT IN SWEEP
/THIS SUBROUTINE COUNTS DOWN BLOCK ENTRIES AND LINKS TO NEXT: BLKCNT /CALL: BLKCNT / NEW FIELD RETURN / NORMAL RETURN / END OF FILE RETURN BLKCNS, 0 ISZ CNBLK /COUNT ITEMS IN BLOCK JMP BLKOK /NO OVERFLOW TAD I GETPNT /OVERFLOW - GET NEXT BLOCK SNA JMP BLKFIN /L1=0, END OF FILE EXIT DCA CNBLK /SET COUNT UP FOR NEXT BLOCK TAD I GETPNT DCA TCDF /GET NEW DATA FIELD INSTRUCTION TAD I GETPNT /GET ADDRESS-1 FOR NEXT BLOCK DCA GETPNT TAD TCDF /GET DATA FIELD IN AC. JMP I BLKCNS /NEW FIELD, EXIT TO CALL+1 BLKFIN, ISZ BLKCNS /END OF FILE-EXIT TO CALL+3 BLKOK, ISZ BLKCNS /CONTINUE IN THIS BLOCK, EXIT TO CALL+2 JMP I BLKCNS /BRANCHING TABLE FOR IKBRAN IKLIST, +232 /^Z +222 /^R +220 /^P +201 /^A +221 /^Q +215 /CR +212 /LF +326 /V +303 /C +330 /X +203 /^C +324 /T -320 /P - PLOT MODE
/THIS SUBROUTINE MOVES ADC POINTER AND CHECKS COUNT: IXPNT IXPNTS, 0 TAD NCHA /# OF CELLS IN DATA POINT TAD TBUFAD /+ CURRENT BUFFER ADDRESS DCA TBUFAD /UPDATE ADC BUFFER ISZ NPOINT /IF COUNTER DOESN'T OVERFLOW ISZ IXPNTS /EXIT TO CALL+2 JMP I IXPNTS /OTHERWISE, TO CALL+1 /VARIABLES FOR SETPNS - IXCNS NPOINT, 0 /-# OF ITEMS LEFT IN SWEEP /THIS SUBROUTINE SETS SWEEP PARAMETERS: SETPNT SETPNS, 0 TAD SAMA /GET - # OF DATA POINTS DCA NPOINT /"TPOINT" - # OF POINTS TAD ADBUFA /GET LOGICAL 1 OF BUFFER IAC TAD TORD /GET ORDER OF CHANNEL IN BUFFER (SET UP BY JGET) DCA TBUFAD /SET ADDRESS OF FIRST DATA POINT TBUFAD=TEMP06 JMP I SETPNS /SUBROUTINE TO TYPE "<CRLF>*: " TMESS, 0 DCA I TMCHX /*CHARACTER IN AC TAD ADMESS /ADDRESS OF TEXT DCA TMPNTR TMPNTR=17 TMLOOP, TAD I TMPNTR /GET CHARACTER SNA /END OF TEXT? JMP I TMESS /YES, EXIT JMS TYPES JMP TMLOOP /SUBROUTINE TO TYPE CHARACTER IN AC TYPES, 0 IOF TLS TSF JMP .-1 TCF DCA KSAVE KSAVE=TEMP02 KSF JMP I TYPES KRB TAD KMCTRL /^Q? SZA CLA JMP I TYPES CDF 0 JMP I .+1 KBDCHK
/SUBROUTINE TO ACCEPT DECIMAL ARGUMENT RDKBDS, 0 JMS TMESS /ASK FOR ARGUMENT RDLOOP, DCA ARITH2 KSF /WAIT FOR KEYBOARD JMP .-1 KRS JMS TYPES /ECHO TAD KSAVE /CHECK FOR CR BRAN KCHEK JMP RDONE /CR, ARGUMENT COMPLETE K017, 17 /CAN NOT RETURN HERE TAD KSAVE /NOT DONE, GET DIGIT AND K017 DCA ARITH5 CLA IAC /ADD OLD SUM*10(10) TO DIGIT SHFT DADD TAD K0002 SHFT DADD TAD ARITH5 JMP RDLOOP RDONE, TAD ARITH2 /GET - ARGUMENT CMA IAC JMP I RDKBDS /LOCAL CONSTANTS ADMESS, TXMESS-1
TCALS, 0 DCA RATE TAD FAST DCA ONE TAD KMCHAN /SET UP -# OF CHANNELS DCA MCHAN JMP I TCALS ADLOPS, TAD KADC /ENABLE AD START ON CLOCK. ADLE ADRB /CLEAR OUT AD FLAG. ADLOOP, ADSK /WAIT FOR AD DONE. JMP .-1 ADRB /READ DCA I BUFA /STORE ONE, ISZ MCHAN JMP OK ADLM TAD KMCHAN DCA MCHAN OK, ISZ BLA JMP ADLOOP ADLE /DISABLE AD ON CLOCK. JMP I .+1 BACK /LOCAL CONSTANT KMCTRL, -221 /LOCAL CROSSPAGE TMCHX, TMCH PS8, CDF 0 IOF JMP I .+1 7600 $



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