--- /dev/null
+/ A-D CLOCKED, BUFFERED SAMPLING ROUTINE
+/
+/ VERSION 5A 4-27-77 PT
+/
+ ADSK=6534
+ ADRB=6533
+ ADST=6532
+ ADLM=6531
+ ADLE=6536
+ ADCL=6530
+ CLZE=6130
+ ESF=4
+ LINC=6141
+ PDP=2
+ SAM=100
+ CLEN=6134
+ FIELD1 SAMPLE
+ 0 /INTERRUPT TIME AD SAMPLER
+ IFNSW 8 <
+ JMS LNCSAM /INITIATE SAMPLE
+NEXTCH, ISZ SAMINS /UPDATE SAM INST FOR NEXT CHAN
+ JMS LNCSAM /SAM AND INITIATE NEXT CHANNEL
+ >
+ TAD SAMPTR /SAVE THE OLD SAM BUFFER POINTER
+ DCA OLDPTR
+ TAD BUFFLD /AND THE FIELD
+ DCA OLDFLD
+ ISZ SAMPTR /BUMP BUFFER POINTER
+ JMP FLDOK /FIELD IS OK
+ TAD BUFFLD /BUMP FIELD
+ TAD L10
+ DCA BUFFLD
+FLDOK, ISZ SAMCNT /BUMP BUFFER COUNT
+ JMP BUFFLD /NOT END OF BUFFER
+ TAD ARRAY+2 /RESET POINTER TO START OF BUFFER
+ DCA SAMPTR
+ TAD FLDBUF /RESET BUFFER FIELD
+ DCA BUFFLD
+ TAD BUFSIZ /RESET COUNT
+ DCA SAMCNT
+BUFFLD, HLT /GET FIELD OF NEW ADB STOP CODE
+ TAD% SAMPTR /IS THIS THE SAM STOP CODE ?
+ TAD M3776 /(ILLEGAL AS A SAMPLE)
+ SZA CLA
+ JMP NOERR
+ ISZ TOOFAS /SET TOO FAST SWITCH
+SAMPLD, CDF 10
+ DCA% XCLINT+1 /STOP SAMPLING
+ JMP% SAMPLE
+NOERR, CLL CMA RAR /SET ADB STOP CODE
+ DCA% SAMPTR
+OLDFLD, HLT /GET TO FIELD OF SAMPLE
+ IFSW 8 <
+ ADRB /READ SAMPLE
+ >
+ IFNSW 8 <
+ TAD SAMTMP /GET PREVIOUSLY READ SAMPLE
+ >
+ DCA% OLDPTR /INTO BUFFER
+ ISZ NPOINT+2 /ANY MORE SAMPLES
+ SKP /YES
+ ISZ NPOINT+1 /MORE THAN 7777 ?
+ SKP /YES
+ JMP SAMPLD /NO
+ ISZ NCHANL+1 /ANY MORE CHANNELS TO SAMPLE ?
+ JMP NEXTCH /YES GO START SAMPLING
+ TAD CSTART+2 /STARTING CHANNEL
+ IFSW 8 <
+ ADLM
+ >
+ IFNSW 8 <
+ DCA SAMINS
+ JMS LNCSAM /SET CHANNEL TO START
+ /IN CASE CLOCK INITIATED
+ >
+ TAD NCHANL+2 /NUMBER OF CHANNELS
+ DCA NCHANL+1 /INTO COUNTER
+ CDF 10
+ JMP% SAMPLE
+ IFSW 8 <
+NEXTCH, ADST /SAMPLE NEXT CHANNEL
+ ADSK /WAIT FOR SAMPLE
+ JMP .-1
+ JMP SAMPLE+1
+ >
+ IFNSW 8 <
+LNCSAM, 0 /LINC SAM SUBROUTINE
+ LINC
+SAMINS, SAM 0 /SAMPLE AND SELECT NEXT CHANNEL
+ PDP
+ DCA SAMTMP /SAVE IT
+ JMP% LNCSAM
+ >
+ADSETU, 0 /SET UP ROUTINE
+ DCA TOOFAS /CLEAR TOO FAST SWITCH
+ TAD ARRAY+1 /GET FIELD OF BUFFER
+ AND L7
+ CLL RTL
+ RAL
+ TAD CDF0
+ DCA FLDBUF
+ TAD FLDBUF
+ DCA BUFFLD /SAVE IN SAMPLER CODE
+ TAD ARRAY+2 /SET SAMPLER BUFFER POINTER
+ IAC
+ DCA SAMPTR
+ TAD LENGTH+2 /SIZE OF BUFFER
+ CLL RAL
+ TAD LENGTH+2 /TIMES THREE
+ DCA BUFSIZ /SAVE IT
+ TAD BUFSIZ /SET INITIAL COUNT
+ IAC
+ DCA SAMCNT
+ TAD NCHANL+2 /SET CHANNEL COUNT
+ DCA NCHANL+1
+ IFSW 8 <
+ CLA CMA /STOP THE CLOCK
+ CLZE
+ CLA
+ ADCL /CLEAR AD LOGIC JUST IN CASE
+ TAD L300 /SET AD ENABLE BITS
+ ADLE
+ TAD CSTART+2 /STARTING CHANNEL NUMBER
+ ADLM
+ >
+ IFNSW 8 <
+ CLEN /STOP THE CLOCK
+ TAD CSTART+2 /SET UP INITIAL SAM INSTRUCTION
+ TAD L100
+ DCA CSTART+2
+ TAD CSTART+2
+ DCA SAMST /STARTING SAM
+ TAD SAMST /ALSO INTERRUPT TIME SAM
+ DCA SAMINS
+ TAD L100 /SET FAST SAM BIT
+ IOF /TURN OFF INTERRUPTS IN LINC MODE
+ LINC /ENTER LINC MODE
+ ESF
+SAMST, SAM 0 /SET INITIAL SAM CHANNEL
+ PDP
+ ION
+ CLA
+ >
+ CIF CDF
+ JMP% ADSETU
+BASEX, FNOP
+M3776, -3776
+L10, 10
+SAMPTR,
+ARRAY, 0;0;0
+LENGTH, 0;0
+BUFSIZ, 0
+SAMCNT,
+CSTART, 0
+OLDPTR, 0;0
+SAMTMP,
+NCHANL, 0;0;0
+NPOINT, 0;0;0
+FLDBUF,
+XCLINT, ADDR #CLINT
+ IFSW 8 <
+L300, 300
+ >
+ IFNSW 8 <
+L100, 100
+ >
+SAMXR, 0;0
+TOOFAS, 0
+ ORG 10*3+BASEX
+ 0
+ JA NAME+3
+ 0
+SAMRTN, JA .
+CDF0, CDF
+L7, 7
+\f SECT REALTM
+ BASE 0
+ STARTD
+ FLDA 30 /GET RETURN ADDR
+ FSTA SAMRTN
+ FLDA 0 /GET ARG POINTER
+ BASE BASEX
+ SETB BASEX
+ SETX SAMXR
+ FSTA NPOINT /SAVE ARG POINTER
+ FCLA
+ EXTERN #CLINT
+ FSTA #CLINT /STOP ANY SAMPLING NOW!
+ LDX 1,1
+ FLDA% NPOINT,1 /GET BUFFER ADDRESS
+ FSTA ARRAY
+ FLDA% NPOINT,1+ /GET ADDR OF LENGTH
+ FSTA LENGTH
+ FLDA% NPOINT,1+ /ADDR OFHANNEL START
+ FSTA CSTART
+ FLDA% NPOINT,1+ /ADDR OF # CHANNELS
+ FSTA NCHANL
+ FLDA% NPOINT,1+ /ADDR OF NUMBER OF POINTS
+ FSTA NPOINT
+ FLDA ARRAY /CREATE SETX INS
+ FADD STXMJA
+ FSTA BUFSTX
+ FSTA ADBSTX /AND SAVE IT IN TWO PLACES
+ STARTF
+ FLDA% LENGTH /INTEGERIZE AND NEGATE SOME ARGS
+ FNEG
+ ALN 0
+ FSTA LENGTH
+ FNORM
+ ATX 1 /SET BUFFER COUNT
+ FLDA% CSTART /GET STARTING CHANNEL
+ ALN 0
+ FSTA CSTART
+ FLDA% NCHANL
+ FNEG
+ ALN 0
+ FSTA NCHANL
+ FLDA% NPOINT
+ FNEG
+ ALN 0
+ FSTA NPOINT
+ LDX -1,2 /SET UP FOR BUFFER CLEAR
+ FCLA
+CLRBUF, FSTA% ARRAY,2+
+ JXN CLRBUF,1+
+ TRAP4 ADSETU /SET UP AD STUFF
+ FLDA LENGTH /RE-GET BUFFER SIZE
+ FNORM
+ ATX 1 /BUT NOW ITS TIMES THREE
+ FLDA STPCOD /STORE STOP CODES
+ FSTA% ARRAY /INTO FIRST 3 WORD
+ STARTD
+ FLDA SAMADR /SET UP SAMPLER INTERRUPT HANDLER
+ FSTA #CLINT
+ STARTF
+ JA SAMRTN /RETURN
+NAME, TEXT +RTMADB+
+SAMADR, ADDR SAMPLE
+STPCOD, 3776;3777;0
+STXMJA, 1100-1030;0
+L2047, F 2047.
+L511, F 511.
+\f ENTRY ADB
+ADB, BASE 0 /FETCH SAMPLE FROM BUFFER
+ STARTD
+ FLDA 30 /SAVE REUTRN
+ FSTA SAMRTN
+ SETB BASEX
+ SETX SAMXR
+ BASE BASEX
+ JXN SPEEDK,2 /CLOCK TOO FAST
+ FLDA ADBSTX /SAVE OLD SETX
+ FSTA OLDSTX
+ FADD L1 /ADD ONE TO IT
+ FSTA ADBSTX /AND SAVE IT BACK
+ JXN NORINQ,1+ /END OF BUFFER ?
+ FLDA BUFSTX /YES, RESTART
+ FSTA ADBSTX
+ FLDA LENGTH /RESET COUNT
+ ATX 1
+NORINQ, STARTF
+ADBSTX, SETX 0 /SET XR0 TO NEXT SAMPLE
+WAIT, XTA 0 /GET THE NEXT SAMPLE
+ FSUB L2047 /IS IT THE STOP CODE
+ JEQ WAIT /YES
+ XTA 0 /NO, FETCH THE SAMPLE
+ LDX 3776,0 /SET SAMPLE STOP CODE
+OLDSTX, SETX 0 /SET XR0 TO PREVIOUS STOP CODE
+ LDX 0,0 /NOW ZERO IT
+ JA SAMRTN /RETURN
+SPEEDK, EXTERN #WRITO /USE FORTRAN I/O
+ TRAP3 #WRITO /TO WRITE A MESSAGE
+ JA TTYUNT /ON THE TTY
+ JA MESSAG
+ EXTERN #RENDO
+ TRAP3 #RENDO /CLOSE THE RECORD
+ LDX 0,2 /KILL TOO FAST SWITCH
+ JA SAMRTN /RETURN FROM ADB
+TTYUNT, F 0.
+MESSAG, TEXT '(" SAMPLING TOO FAST")'
+BUFSTX, SETX 0
+L1, 0;1
+ END
+\f