File AAVG2.

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

/LAB8E ADVANCED AVERAGER MS-SECTION 2,SIGNAL AVERAGING
/
/DEC-8E-AAA2A-A-LA
/
/COPYRIGHT 1972
/DIGITAL EQUIPMENT CORPORATION
/MAYNARD,MASSACHUSETTS 01754
/

/FILE AD2.1 /SECTION II OF THE LAB8/E ADVANCED AVERAGER . /THIS IS PART 2 OF ADVANCED AVERAGER FOR DSK/DTA /OVERLAY SECTION 2 FOR PS8 SYSTEM. *7557 OVRLAY, IOF CLA CLL CMA CLZE /DISABLE CLOCK CLA ADCL /AD DILC /DISPLAY DBDI /I/O CDF 0 /CHAIN IN SEC. 3. DCA I KC7746 /0 PS8 JOB STATUS WORD. TAD I XXOV2A DCA XXOV2 CIF 10 JMS I CHAIN 6 XXOV2, 0 CHAIN, 7700 XXOV2A, PG0OV PG0OV=5 MONITR=7600 CLZE=6130 ADCL=6530 DILC=6050 DBEI=6501
/LAB-8 ADVANCED AVERAGER - SECTION 2 - [U63A.2] /COPYRIGHT, 1971, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. 01754 /MEMORY BOUNDS FOR FIELD 0 LOCORE=230 /LISTS, BUFERS, DATA BLOCKS START HERE HICORE=6300 /PROTECTED AREA BEGINS HERE NXLOAD=6400 /NEXT SECTION LOADING BEGINS HERE /AVERAGING PARAMETERS: LOCATIONS 20-64 MEMTOT=20 /FIELDS IN THIS MACHINE FIELD0=21 /ROOM FOR DATA IN FIELD 0 /DIGITAL I/O OPTION, CONTINGENCY AND # OF SYNC INPUTS XROPT=22 /0 IF I/O NOT IMPLEMENTED, 1 IF IT IS /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) KITIM=31 /-(# OF ASI FROM S0 TO S0) KCTIM=33 /-(# OF ASI FROM STIM TO CONTINGENCY READING) KWTIM=35 /(-# OF ASI FROM LAST STIM TO A/B OPENING) ASI=37 /# OF USEC PER ASI S0=41 /TEMPORARY TIMER K0017=42 KMODE=43 /CLOCK RATE AND MODE
/SWEEP A LIST PARAMETERS SAMA=44 /-# OF POINTS (ASI) IN SWEEP A (EACH CHANNEL) NCHA=45 /# OF CHAN IN SWEEP A ADPNTA=46 /LOGICAL 1 OF ADC BUFFER A-1 (GEN BY ON-LINE) ADBUFA=47 /LOCATION -1 FOR START OF ADC BUFFER -A LNBUFA=50 /PHYSICAL LENGTH OF BUFFER -A /SWEEP B LIST PARAMETERS SAMB=51 /-# 0F POINTS (BSI) IN SWEEP B NCHB=52 /# 0F CHAN IN SWEEP B ADPNTB=53 /LOGICAL 1 OF ADC BUFFER-B - 1 (GEN BY AV3) ADBUFB=54 /LOCATION-1 FOR START OF BUFFER LNBUFB=55 /PHYSICAL LENGTH OF BUFFER-B /SWEEP A - ON-LINE PARAMETERS ADMPXA=56 /ADDRESS OF A SWEEP MPLX LIST -1 ADEL=57 /ADJUSTMENT AT SYNC POINT TO FIND LOGICAL 1 OF BUFFER-A KBLA=60 /-# OF ASI FROM SYNC POINT TO LOGICAL END OF A-1 /SWEEP B - ON LINE PARAMTERS KBTOA=61 /-# OF A'S TO B, 0 FOR NO B ADMPXB=62 /ADDRESS OF B MPLX LIST - 0 BDEL=63 /ADJUSTMENT AT SYNC POINT TO FIND LOGICAL 1 OF BUFFER-B KBLB=64 /-# OF BSI FROM SYNC POINT TO LOGICAL END OF B - 1 /INTERRUPT REFERENCES INTERX=65 /LINK TO INTERRUPT SERVICE ASAVE=66 /AC AT INTERRUPT LSAVE=67 /LINK AT INTERRUPT /LINKAGES TO SECTION 3 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 K0007=116 KM0027=117 K0377=120 KM0004=121 /TTY-LIST TTYLST=122 PROMRK=123 TXMRK=125 KCR=126 KM0043=127 /OCSORT OCSORT=130 K0040=130 MTXMRK=131
/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
/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 CMA CLL RTL; TWOK=CLA CLL CML RTR /EXTENDED MEMORY CDF=6201; RDF=6214; RMF=6244
*6400 /THIS IS THE ON-LINE SECTION: ZERO, ACCUMULATE, DISPLAY AVG - [U13MC] TSWIT=22 BUFA=10 BUFB=11 MPXPNT=12 GETPNT=13 PUTPNT=14 JPNT=15 /SUBROUTINE TO SENSE AND BRANCH ON PSEUDO KEYBOARD: IKBRAN 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 START /^Z - ZERO AND RESTART JMP CTRLR /^R - RESTART JMP I OVRLAX /^P - GET NEXT SECTION 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 CTRLC /^C,EXIT TO PS8. 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 /BRANCHING TABLE FOR IKBRAN IKLIST, +232 /^Z +222 /^R +220 /^P +215 /CR K0212, +212 /LF +326 /V +303 /C +330 /X -203 /^C
/THIS SUBROUTINE MOVES ADC POINTER AND CHECKS COUNT: IXPNT IXPNTS, 0 CLL CML TAD BUFEN /-(END OF BUFFER+1) TAD NCHANS /# OF CELLS IN DATA POINT TAD TBUFAD /+ CURRENT BUFFER ADDRESS SZL SNA /IS NEXT LOCATION PAST BUFFER END? TAD BUFLN /NO - ADD "END OF BUFFER" BACK IN TAD BUFST /YES - JUST ADD "BUFFER START-1" TO DISTANCE PAST END 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 BUFST, 0 /ADDRESS FOR START OF BUFFER-1 BUFLN, 0 /LENGTH OF BUFFER BUFEN, 0 /ADDRESS FOR END OF BUFFER-1 NCHANS, 0 /# OF CHANNELS MPLXED IN BUFFER /CONSTANTS FOR SETPNS - IXCNS K0005, +0005 ADSAMA, SAMA-1 /THIS SUBROUTINE SETS SWEEP PARAMETERS: SETPNT /LINK BIT=1 FOR B-SWEEP SETPNS, 0 SZL CLA /B-SWEEP? TAD K0005 /YES-M TAD ADSAMA /ADDR-1 OF 1ST A-PARAMETER DCA PXPNTR PXPNTR=17 TAD I PXPNTR /GET - # OF DATA POINTS DCA NPOINT /"TPOINT" - # OF POINTS TAD I PXPNTR /GET # OF CHANNELS DCA NCHANS TAD I PXPNTR /GET LOGICAL 1 OF BUFFER TAD TORD /GET ORDER OF CHANNEL IN BUFFER (SET UP BY JGET) DCA TBUFAD /SET ADDRESS OF FIRST DATA POINT TBUFAD=TEMP06 TAD I PXPNTR /GET PHYSICAL START OF BUFFER DCA BUFST TAD I PXPNTR /GET PHYSICAL LENGTH OF BUFFER DCA BUFLN TAD BUFST /GET PHYSICAL END OF BUFFER TAD BUFLN CMA IAC DCA BUFEN /-ADDR OF PHYSICAL END OF BUFFER JMP I SETPNS
/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 /THIS SUB-SECTION CLEARS JOB DATA REGIONS - SECTION STARTS HERE START, IOF TAD K0274 /SET UP TO TYPE "<" DCA KBDBUF JMS IKBRAS /TYPE IT TAD ADJLIS /START AT FIRST JOB DCA JPNT TAD 16 CLAB /SET COUNT DOWN CLA CLL /RATE 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 JCELLS /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 OVRLAX, OVRLAY CTRLC, PS8 /^C K0274, 0274
/INITIALIZE POINTERS, COUNTERS, AND BUFFERS ADINIT, TSF /WAIT FOR "<" JMP .-1 TAD K0003 /SET SCALE TO 1/8 DCA NSHFT NSHFT=TEMP11 CTRLR, TAD NSWEP /SET AUTO STOP COUNTER DCA NSWPS NSWPS=TEMP12 TAD K0212 /PUT LINE FEED IN KBD BUFFER DCA KBDBUF TAD ADRCLK /SETUP INTERRUPT SERVICE DCA INTERX /INTERRUPT GOES TO ADC SWEEP CLA CLL CML RAR /AC=4000 DBSO /SET PULSE OUT DCA S0 /ALSO SOFTWARE POINTER TAD 75 /AD START ON EXTERNAL ENABLE ADLE /LOAD ONLY THE ENABLE REGISTER TAD KMODE /KMODE CONTAINS CLOCK MODE CLOE CMA CLZE CLA CMA /SET ANALYSIS MODE TO "PAUSE" DCA MSWIT MSWIT=TEMP14 SWSTAR, TAD ADBUFA /SETUP ROTATING POINTERS DCA BUFA TAD ADBUFB DCA BUFB TAD SAMA /AND WRAP AROUND COUNTERS JMP I .+1 ADSTAR
/SERVICE COMMON INTERRUPT DEVICES INSERV, 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 /LOCAL VARIABLES SYTIM, 0 /COUNT FROM SYNC REC'D TO SYNC POINT 0 ITIM, 0 /COUNT FROM SYNC REC'D TO ACCEPT NEXT SYNC 0 CTIM, 0 /COUNT FROM SYNC REC'D TO READ EXTERNAL FOR SORT 0 WTIM, 0 /COUNT FROM SYNC REC'D TO OPENING OF ADC BUFFERS 0 SSAVE, 17 /S1-S3 ACTIVITY DURING LAST ASI /LOCAL CONSTANTS K3400, +3400 K4000, 4000 /LOCAL CROSSPAGE ADRCLK, CLKINT ATSTX, ATST /CLOCK SERVICING AND A/B SWEEP CONTROL - DATA ACCEPT INTO ROTATING BUFFERS CLKINT, CLSA /READ IN CLK OVRFLO S1, S2, S3 AND CLEAR SPA /CLOCK? CLL CML /YES AND K0017 /LOOK FOR SCHMIT SZA DCA SSAVE /YES SAVE ACTION RAL /CLOCK? SNA CLA JMP INSERV /NO
/PROCESS CLOCK INTERRUPT SYTST, TAD S0 /IS S0 ON? SMA JMP WTST /NO, DON'T LOOK AT SYNCS, NOT READY FOR ANY. TAD SSAVE /YES, WHAT HAS HAPPENED SINCE LAST RC INTERRUPT? AND SMASK /HAS THE SYNC INPUT WE'RE LOOKING FOR BEEN UP? SNA CLA JMP WTST /NO, CHECK CONTINGENCY (SORT) TIME. DCA S0 /YES, CLEAR S0. /AND DIGITAL INPUT CLA CLL CMA DBCI /CLEAR BITS IN INPUT REGISTER DBCO /CLEAR BITS IN OUTPUT REGISTER DCA CSWIT /SET TO "NOT YET READ" (CSWIT=1) CSWIT=TEMP22 TAD KCTIM /RESET SORT POINT TIMER - SYNC POINT TO C0-C7 READING DCA CTIM TAD KCTIM+1 DCA CTIM+1 TAD KITIM /RESET INTERNAL STIM TIMER - SYNC PULSE TO S0 SETTING DCA ITIM TAD KITIM+1 DCA ITIM+1 TAD KWTIM DCA WTIM TAD KWTIM+1 /RESET WINDOW TIMER - SYNC PULSE TO BUFFER OPENING DCA WTIM+1 TAD KSYTIM+1 DCA SYTIM+1 TAD KSYTIM /RESET SYNC TIMER - SYNC PULSE TO SYNC POINT DCA SYTIM WTST, DCA SSAVE /DON'T PRESERVE S1-S3 ACTIVITY FOR MORE THAN 1 ASI ISZ WTIM+1 /TIME TO OPEN ADC BUFFER WINDOW? JMP STST ISZ WTIM JMP STST TAD FSWIT /YES, BUT IS FSWIT .NE. 0? (.NE. 0 IN "PAUSE") SNA CLA /.NE. 0 FROM ADINIT TO SYNC POINT IN "AVG" MODE JMP WTST-1 /=0 IN "AVG" MODE FROM SYNC POINT TO ADINIT, DON'T OPEN TAD TSWIT DCA MSWIT TAD NCHA /.NE. 0, OPEN A IF ANY CHANNELS IN A DCA ASEN ASEN=TEMP20 TAD KBTOA /OPEN B IF ANY CHANNELS USE IT DCA BSEN BSEN=TEMP21
STST, ISZ ITIM+1 /TIME TO SET S0? JMP CTST /NO ISZ ITIM JMP CTST /NO CLA CLL CML RAR /SET DIGITAL I/O FOR "PULSE OUT" DBSO /BIT 0 DCA S0 /PUT IN S0 ALSO CTST, ISZ CTIM+1 /TIME TO READ C4-C11? JMP SYCN ISZ CTIM JMP SYCN DBRI /YES-READ IT. AND K0377 /LOOK ONLY AT BITS 4-11 DCA CSAVE /ACTIVITY IN C4-C11 FROM SYNC PULSE TO SORT TIME CSAVE=TEMP25 DCA CSWIT /TELL MAIN PROGRAM THAT SORT HAS BEEN READ SYCN, ISZ SYTIM+1 /IS THIS SYNC POINT? (3CY) JMP I ATSTX ISZ SYTIM JMP I ATSTX CLL CML /YES, FIND LOGICAL START OF ADC BUFFERS TAD BUFA /FIND FIRST WORD OF A TAD ADEL /MOVE BACK IN BUFFER SZL SNA /BACK PAST PHYSICAL FIRST WORD? TAD LNBUFA /YES, MOVE BACK REMAINDER FROM PHYSICAL LAST WORD TAD ADBUFA /AND ADJUST TO STARTING LOCATION DCA ADPNTA /SET BUFFER POINTER CLL CML /FIND FIRST WORD OF B TAD BUFB /MOVE BACK IN BUFFER TAD BDEL /BACK PAST PHYSICAL FIRST? SZL SNA TAD LNBUFB /YES, MOVE BACK FROM PHYSICAL LAST TAD ADBUFB DCA ADPNTB /SET BUFFER POINTER TAD MSWIT /MSWIT .NE. 0 FOR PAUSE DCA FSWIT /IF IN "AVG" MODE, STOP ROTATING BUFFER ATST, TAD ASEN /IS ADC-ACCEPT ENABLED ON A? SNA CLA JMP BTST /NO, TRY B TAD ADMPXA /YES, SET MPLX POINTER TO TOP OF LIST -1 DCA MPXPNT
ANXT, JMS ROU JMP ANXT1 DCA I BUFA JMP ANXT ANXT1, DCA I BUFA NOP ISZ BKA /CHECK FOR RUN AROUND END JMP AEND /NO PROBLEM - CONTINUE TAD ADBUFA /RUN AROUND END - RESET TO TOP DCA BUFA TAD SAMA /RESET WRAP COUNTER DCA BKA AEND, TAD FSWIT /ARE WE IN FINAL CIRCUIT OF ROTATION? SZA CLA JMP BTST /NO - GO GET B IF ENABLED. ISZ BLA /YES - COUNT DOWN # SAMPLES YET TO STORE TAD BLA SNA CLA /DONE WITH SWEEP? DCA ASEN /A IS OVER - TURN OFF A ENABLE /B SWEEP CONTROL BTST, TAD BSEN /IS B ENABLED? (5CY) SNA CLA JMP RETN /B SWEEP OFF, BSEN=0 - EXIT ISZ BSEN /DO B EVERY 'KBTOA' A (2CY) JMP RETN /NOT THIS TIME - EXIT TAD I ADMPXB /OK - SET MPLX AND CONVERT (FIRST CHAN OF B) ADLM ADST TAD KBTOA /RESET BSEN COUNTER/SWITCH DCA BSEN TAD ADMPXB /SET MPLX POINTER TO GET SECOND CHAN OF B DCA MPXPNT BNXT, JMS ROU JMP BNXT1 DCA I BUFB JMP BNXT BNXT1, DCA I BUFB NOP ISZ BKB /WRAP AROUND END? JMP BEND /NO, CONTINUE TAD ADBUFB /WRAPAROUND, RESET TO TOP DCA BUFB TAD SAMB /RESET WRAP COUNTER DCA BKB BEND, TAD FSWIT /ARE WE IN FINAL CIRCUIT OF ROTATION? SNA CLA ISZ BLB /YES, IS THIS THE LAST POINT? JMP RETN /NO-NOT IN FINAL OR NOT LAST POINT DCA BSEN /LAST POINT, CLOSE BUFFER B RETN, JMP I INSERX /CHECK LOWER PRIORITY DEVICES OR USER ROUTINES
ROU, 0 TAD I MPXPNT ADSK JMP .-1 SPA JMP ROU1 ADLM ADRB ADST ISZ ROU JMP I ROU ROU1, ADLM ADRB JMP I ROU /LOCAL CROSSPAGE INSERX, INSERV /MAYBE USER CLOCK SERVICE, RETURN TO INSERV /THIS SUBROUTINE DECODES DISPLAY WORDS: SDIS /POINTER IS AUTOINDEX REGISTER "AXPNTR" /CALL: SDIS / END OF LIST RETURN / NORMAL RETURN AXPNTR=JPNT SDISS, 0 CLA /L=1 FOR B. 0 FOR A TAD I AXPNTR /GET D1: DX(8),YS(4) SNA JMP I SDISS /EOL IF D1=0 DCA ARITH2 TAD ARITH2 AND K0017A /HAVE Y SCALE ARITH0TOR DCA I YS DCA ARITH1 /0 TO HI ARITH0 TAD K0005A /DELTA-X (5 BITS INTEGER) SHFT /MOVE BINARY POINT TO END OF ARITH2 TAD ARITH1 DCA I DELTAX TAD ARITH2 DCA I 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 I YZ TAD KM0006 /MOVE XZ TO 10 BITS OF ARITH2 SHFT TAD ARITH2 AND K1760 /GET RID OF LOW ORDER BITS DILX /LOAD X-REGISTER DCA ARITH4 /FOP HOLDS CURRENT X-VALUE ISZ SDISS /EXIT TO CALL+2 JMP I SDISS
/LOCAL VARIABLES AND CONSTANTS K0017A, +0017 YS, 224 /SCALE FACTOR FOR Y YZ, 225 /SCOPE Y FOR Y=0 DELTAX, 226 /INCREMENT BETWEEN POINTS (INTEGER PART) 227 /(FRACTIONAL PART) KM0006, -0006 K0005A, 0005 K1760, 1760 PS8, IOF DCA I .+3 /0 JOB CONTROL WORD JMP I .+1 /RETURN TO PS8 7600 7746
*7200 /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: / A/B: HELD IN LINK BIT (1 FOR B) / 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 ARITH1 /GET A/B BIT DCA TJSAVE /SIGN BIT =0 IF A TJSAVE=TEMP02 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 ARITH2 /GET CONTINGENCY AND K0377 /8 LOW ORDER BITS OF J2 DCA TCMASK TCMASK=TEMP04 TAD K0004 /GET JOB TYPE SHFT TAD ARITH1 AND K0017 /4 HI ORDER OF J2 DCA TJTYPE /-JOB TYPE TJTYPE=TEMP05 TAD TJSAVE /GET A/B BIT INTO LINK RAL CLA 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 /CONSTANTS FOR JGETS-BLKCNS NOP K0037, 0037 /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 GETPNT DCA PUTPNT 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
/START A NEW SWEEP - REINITIALIZE ADSTAR, DCA BKA BKA=TEMP07 TAD SAMB DCA BKB BKB=TEMP10 TAD KBLA /COME HERE TO START NEXT SWEEP DCA BLA /SET UP POINTS TO BE TAKEN AFTER SYNC POINT BLA=TEMP16 TAD KBLB DCA BLB BLB=TEMP17 CLA CMA /SET FINAL SWITCH TO "ROTATE", "SWEEP OK" DCA FSWIT FSWIT=TEMP15 KBDCHK, JMS I IKBRAX /LOOK AT INTERRUPT KEYBOARD JMP DISWIT /NO CHAR - GO DISPLAY CLA CMA /L.F. - COMES HERE FOR FIRST SWEEP DCA TSWIT /C.R. - SET MODE TO "AVG" TAD TSWIT /MSWIT=-1 FOR "PAUSE", MSWIT=0 FOR "AVG" DCA VSW /SET VIEW TO "INPUT" FOR PAUSE, "AVERAGES" FOR AVG VSW=TEMP13 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 JCELLX, JCELLS /SKIPPED JMS I JCELLX /GET # OF LOCATIONS/POINT-2 DCA TDSKIP /DON'T DISPLAY S.D. OR TREND TDSKIP=TEMP02 ISZ GETPNT /SKIP OVER SWEEP 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 TAD NSHFT /SCALE BY OVERALL FACTOR DISP /JOB SCALE, BIAS, DISPLAY TAD TDSKIP /MOVE POINTER OVER VARIANCE AND TREND TAD GETPNT DCA GETPNT JMS CALCHK /READY TO START CALCULATIONS? BLKCNT /NO, 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 MTW DCA TSWEP /COUNT A & B EPOCH SECTIONS OF CH LIST TSWEP=TEMP02 DCA TORD /LOOK AT 1ST OF LIST (ORDER=0) VINEXT, TAD TSWEP /FIND OUT IF A OR B EPOCH RAR /LEAVE IN LINK BIT (1 FOR B) SETPNT /SET SWEEP PARAMETERS AND POINTERS SDIS /JPNT POINTS TO DISPLAY WORDS D1 AND D2 JMP VISWEP /D1=0, LIST SECTION COMPLETE, CHECK FOR B OR E.O.L. ISZ TORD /MOVE CHANNEL COUNTER VILOOP, TAD I TBUFAD /GET DATA POINT DCA ARITH2 /LOAD IN LOW ORDER SHIFT REGISTER DISP /DISPLAY JMS CALCHK /READY TO DO CALCULATIONS? IXPNT /NO - DONE WITH THIS CHANNEL? JMP VINEXT /YES - GET NEXT CHANNEL JMP VILOOP /NO - GET NEXT POINT VISWEP, ISZ TSWEP /HAVE WE DONE A & B? JMP VINEXT-1 /NO JMP KBDCHK /YES-LOOK AT KEYBOARD FOR WHAT TO DO NEXT /LOCAL CROSSPAGE IKBRAX, IKBRAS /TEST WHETHER DATA READY FOR CALC CALCHK, 0 TAD BLA /POINTS LEFT IN A-SWEEP TAD BLB /POINTS LEFT IN B-SWEEP TAD CSWIT /SORT TIME REACHED IF =0 SZA CLA /ALL DONE? JMP I CALCHK /NO - CONTINUE DISPLAY TAD ADJLIS /READY FOR CALCULATIONS, START AT TOP 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 TCMASK /ARE REQUIRED CONTINGENCY BITS SET? AND CSAVE /ALL THE BITS IN TCMASK MUST BE SET IN CSAVE CMA IAC /-BITS THAT MATCH TAD TCMASK /+BITS REQUIRED TO MATCH SZA CLA JMP CALJOB /CONTINGENCY NOT MET, GET NEXT JOB TAD GETPNT /SET UP TO UPDATE JOB'S DATA REGION DCA PUTPNT TAD CALXM /CONTINGENCY OK, UPDATE JOB'S SWEEP COUNTER DCA .+1 CDF /GET INTO DATA FIELD TAD I GETPNT /UPDATE SWP CNT DCA NSAVE NSAVE=TEMP07 TAD NSAVE /SAVE * OF SWEEPS-1 IAC DCA I PUTPNT CALNXT, CDF 0 /ADC BUFFER IS IN FIELD 0 TAD I TBUFAD /GET SAMPLE FROM ADC BUFFER DCA TADC TADC=TEMP03 TAD TJTYPE /TYPE =1 FOR AVG ONLY, 2 FOR S.D, 3 FOR TREND CMA IAC DCA TJCNT TJCNT=TEMP04
CALXM, CDF /JOB'S DATA FIELD CLL TAD TADC /ADC BUFFER VALUE FOR POINT JMS LADDS /LIST DOUBLE PRECISION ADD ISZ TJCNT /S.D.? SKP /YES JMP CALMOR /NO, TYPE 1: 75/PNT TAD TADC /ADC BUFFER VALUE JMS SQADS /SQUARE AND LIST TRIPLE PRECISION ADD ISZ TJCNT /TREND? SKP /YES 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 /FIRST SWEEP? SNA CLA /IF SO DON'T INCR SUM OF SUCC DIFF JMP .+4 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 /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 /GET MAGNITUDE 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 /ANY MORE 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, CLL /MAYBE NOOP 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 SWSTAX, SWSTAR /LOCAL CONSTANTS K0277, 277 /> KC7746, 7746 CALEND, ISZ NSWPS /DONE WITH SWEEPS?- PUT NOP (7000) HERE TO NEVER END JMP I SWSTAX /NO - GET NEXT SWEEP CLA CMA /PUT NOP HERE TO LEAVE BUFFER RUNNING CLZE TAD K0277 /TYPE ">" DCA KBDBUF DCA VSW /SET VIEW MODE TO "AVERAGES" JMP I .+1 SWSTAR-2 $



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