/DAQUAN MS- DATA ACQUISITION AND ANALYSIS FOR LAB-8E.
/
/DEC-8E-ADAQA-A-LA
/
/COPYRIGHT 1972
/DIGITAL EQUIPMENT CORPORATION
/MAYNARD, MASSACHUSETTS 01754
/
/DAQUAN:
/FILE DAQ.5
/DAQUAN FOR PS8
/COPYRIGHT 1972 DIGITAL EQUIPMENT CORP. MAYNARD, MASS. 01754.
/DATA ACQUISITION AND ANALYSIS FOR 8K LAB8/E
/THE COMPUTER OF AVERAGE TRANSIENTS AND
/USING MANY OF THE CONCEPTS AND CODE AS WAS IN
/LORCAP-MADCAP PACKAGES (DECUS #8-237) AND CATACAL
FIXMRI CALL=4400 /USED TO CALL SUBR'S INDIRECTLY
FIXMRI FADD=1000
FIXMRI FSUB=2000
FIXMRI FMPY=3000
FIXMRI FDIV=4000
FIXMRI FGET=5000
FIXMRI FPUT=6000
FEXT= 0000
CDF= 6201
CLZE= 6130
CLSK= 6131
CLDE= 6132
CLAB= 6133
CLEN= 6134
CLSA= 6135
CLBA= 6136
CLCA= 6137
DBSO= 7000 /NOP
DILC= 6050
DICD= 6051
DISD= 6052
DILX= 6053
DILY= 6054
DIXY= 6055
DILE= 6056
DIRE= 6057
ADCL= 6530
ADLM= 6531
ADST= 6532
ADRB= 6533
ADSK= 6534
ADSE= 6535
ADLE= 6536
ADRS= 6537
CAF= 6007
PCE= 6020
KIE= 6035
SET1= CLL CLA IAC
SET2= SET1 RAL
SET3= SET2 STL
SET4= SET1 RTL
SET6= SET4 STL
SETM2= STA CLL RAL
SETM3= STA CLL RTL
/SHORT HAND SUBR. CALLS
FIXT= JMS I FIXER
FLOAT= JMS I FLOTER
INITAR= JMS I INIT
HEDIT1= JMS I HEADR1
HEDIT2= JMS I HEADR2
FLOUT= JMS I 6
ENTR= JMS I 7
GETNO= JMS I READXY
RDTTY= JMS I TELRED
ASK= JMS I QUERY
CRLFD= JMS I CRTLFD
FOUTCM= JMS I FOTCM
DISPLAY=JMP I DISM2 /COMMON EXIT TO DISPLAY
/THE FOLLOWING ARE USED TO CALL CERTAIN
/OPERATIONS WHILE IN INTERPRETER MODE.
SQUARE= 1
SQROOT= 2
NEGATE= 10 /NEGATE FL. PT. AC
READ= 11 /READ FP#, IGNORE NON-NUMERICS
OUTPUT= 12 /PRINT FAC. IN E FORMAT
FLOT=14
HEDIT= 15 /PRINT HEADING WITH 'HEDER2'
FNOR= 7000 /NORMALIZE C(FAC)
/EQUATES TO FLOATING PT. PKG:
DNORM=7265
FPIN=6200
FPNT=7400
EW= 44
HW= 45
LW= 46
AC0= 40
AC1= 41
AC2= 42
INPSW=52
DP=57
EFLG= 56
FLDW= 57
DADP= 60
/THESE DEFINE X-Y DAC RANGE AND PLOTTER
/LIMITS AS USED BY THIS PRGM.
AXR=1750 /X RANGE=1000(10)
AYR=1750 /Y RANGE=1000(10)
AXL=-764 /LOWER X LIMIT=-500
AYL=-764 /LOWER Y LIMIT=-500(10)
/THESE ARE USED BY 'MARKER' TO SET
/UP QUADRANT COORDINATES NEEDED.
AX1=AXL+372 /1ST X QUAD.,=-250(10)
AX2=AXL+764 /2ND " =0
AX3=AXL+1356 /3RD " =250(10)
AY1=AYL+372 /1ST Y QUAD.,=-250(10)
AY2=AYL+764 /2ND " =0
AY3=AYL+1356 /3RD " =250(10)
BUF1=-1 /STARTING ADDR.-1 OF FIRST BUFFER
DLBUF=4000 /ARRAY SIZE OR OFFSET
FIELD 0
*1 /INTERRUPT FOR CLOCK IN LOOK
JMP I .+1
STAVR
*6
FOUTX /START OUTPUT CONTROLLER
FPNT /START INTERPRETER
XIND, 0 /AUTO-INDEX REGISTERS
YIND, 0
ZIND, 0
AUTO, 0 /USED FOR TEMPORARY WORK.
AUTO2, 0 /TEMP AUTO.
*20 /SUBROUTINE TABLE
FLOTER, FLOATR /FLOAT C(AC) INTO FAC
FIXER, FIXR /FIX C(FAC) INTO AC AND LOC'N 45
READXY, READER /INPUT A FP #
HOLD, STALL /RC CLOCK DELAY SUBR.
TELRED, MODTTI /GET & PRINT CHAR. ON ASR
INIT, INITIZ /INITIALIZE STORAGE POINTERS
OUT, SELECT /OUTPUT CHAR TO ASR OR HSP
CRTLFD, MODCR /ISSUE CR-LF
HEADR1, HEDER1 /OUTPUT STRIPPED ASCII;ADDR. AFTER JMS
HEADR2, HEDER2 /DITTO; NO ADDRESS
QUERY, ASKER /ACCEPT Y OR N IN ANSWER TO QUESTION
PENUP, UPPEN /CLOSE RELAY ONE TO LIFT PEN
PENDN, DNPEN /OPEN " TO DROP PEN
DISMOV, RESET /RESET DAC OUTPUT TO NEW COORD'S
IOASK, ASKIO /ASK WHICH I/O DEVICE TO USE
ADCON, ADCONV /ADC SUBR. FOR GENERAL USE
*63 /MORE SUBR'S AND OPERATIONAL CONTROLS
FOTCM, FLTCM /FLOATING OUTPUT OF FAC FOLLOWED BY A COMMA
CLKSET, SETCLK /CLOCK CONTROL SUBR.
XSET, XSETUP /COMPUTE X AXIS INCREMENT FOR DISPLAY
DISM2, BEGDIS /BEGIN OF SCOPE DISPLAY ROUTINE
ADINX, ADDMX /SET UP X DISPLAY COORD'S
NPTS, 0 /NUMBER OF POINTS
HUNDRD, HNDRD /FLOATING 100(10)
XLIM, AXL /MIN. X FOR DISPLAY
YLIM, AYL /SAME FOR Y
XRNG, AXR /X DISPLAY RANGE
YRNG, AYR / " FOR Y
YONE, BUF1 /STARTING INDEX-1 FOR Y ARRAY
OFFSET, DLBUF /ARRAY OFFSET
YDIS, 0 /CURRENT DISPLAY COORD. FOR Y
XDIS, 0 /CURRENT X COORDINATE FOR DISPLAY
/XNC AND TXSM HAVE ASSUMED DECIMAL
/POINT AFTER BIT 11 OF HI ORDER WORD.
XNC, 0 /DOUBLE PRECISION VALUE FOR X
0 /INCREMENT FOR DISPLAY
TXSM, 0 /IS CURRENT DOUBLE PREC.
0 /VALUE FOR X DISPLAY.
FK3, 2;3000;0
P27, 27 /A CONSTANT.
/THESE 4 LOC'NS ARE USED BY AVERAGER
RUN, 0 /NO. OF SCANS
MCHAN, 0 /MULTIPLEXOR CHANNEL
AVSUM, 0 /NO. OF SAMPLES PER PT. (2'S COMP.)
EXPFC, 0 /EXPONENT FACTOR REDUCES ADC SUM
/TABLE OF CONSTANTS, COUNTERS, & TEMP. LOC'NS.
FIVE, 5
HALF, 0 /THIS IS USED TO AVOID TRUNCATION
2000 /WHEN FIXING THE FAC TO AN INTEGER.
0
NEG4, -4
RM77, 77
K1000, 1000
PCTR, 0
CNTR, 0
LNCTR, 0
MCTR, 0
TEMP, 0
TEMP1, 0
TEM2, 0
TEM3, 0
MIN, 0
MAX, 0
MODE, 0
BLOCK, 0
HIORD, 0
FTEM1,
CLTM, 0
DLATM, 0
0
FTEM2,
LOORD, 0
TMXP, 0
TMCTR, 0
TEMFP,
PS1, 0
PS2, 0
S1C, 0
XMIN,
S2C, 0
MNT, 0
MXT, 0
YMIN,
KMIN, 0
KMNT, 0
0
XSCLFC, 0
0
0
YSCLFC, 0
0
0
/MAIN CALLING ROUTINE AND
/DISPLAY LOOP PLUS SMALL SUBR'S.
*200
JMS M76TF1 /MOVE PS8 7600,FIELD 1 TO FIELD 0
/TO MAKE ROOM FOR DATA.
/DO NOT RESTART AT 200.
JMP START
JMP BEGDIS-1 /SA=202 TO RE-ENTER DISPLAY
START, CLA CLL
CDF 0
DCA IOSWT /CLR I/O SWITCH FOR LOW SPD
HEDIT1 /DAQUAN LIVES!^TITLE:
HD1
RDTTY /READ IN TEXT UNTIL CTRL/A
TAD MALT /IS ENTERED, THEN GO ON TO INPUT
SZA CLA
JMP .-3
DCA BLOCK /CLEAR FOR CHANNEL 1
DCA MODE /NO CURSORS
IAC
DCA NPTS /SET # PTS TO ONE FOR INITIAL COMMAND
HEDIT2 /OK, HIT ME!
CALL PENUP /BE SURE PLOTTER PEN IS UP
/START OF SCOPE DISPLAY ROUTINE:
BEGDIS, CDF 0 /NORMAL EXIT POINT FROM ROUTINES
CALL XSET
DCA IOSWT /CLR FOR LO SPD I/O
DCA EFLG /SET FPP E FORMAT.
CRLFD
KCC /KNOCK DOWN TTY FLAG
SCPINT, TAD MODE
SZA CLA /WANT CURSORS?
CALL DSPTS /YES
DCA TEMP /CLR SWITCH USED TO SWAP BLOCKS
DCA TEMP1 /IS Y AXIS OFFSET IF BLOCK=2
DCA TEM2 /IS X AXIS OFFSET
TAD BLOCK
SZA CLA /BLOCK 1?
STYN, TAD OFFSET /YES, ADD ARRAY OFFSET
TAD YONE
DCA YIND
TAD NPTS
CIA
DCA CNTR
TAD TEM2
TAD XLIM
DCA XDIS
TAD YLIM
TAD TEMP1
DCA TEMP1
DCA TXSM+1
KSF /GET CHAR. FROM TTY?
SKP
JMP I INTRP /YES, GO GET REST AND DECODE.
CDF 10
SCPLOP, TAD I YIND /GET Y VALUE (0-1000)
TAD TEMP1
DCA YDIS
CALL DISMOV
TAD XNC+1 /INCR. X DISPLAY SUM
TAD TXSM+1
DCA TXSM+1
RAL
TAD XDIS
TAD XNC
DCA XDIS
ISZ CNTR /MORE PTS?
JMP SCPLOP /YES
CDF 0
STA
TAD BLOCK
SPA SNA CLA /BLOCK #=2?
JMP SCPINT /NO, CONTINUE WITH CDA
ISZ TEMP /IS SWITCH SET FOR CHANNEL 1?
JMP .+4 /NO
DCA TEM2 /YES CLEAR X AND Y OFFSET
DCA TEMP1
JMP STYN+1 /AND RETURN
STA /SET SWITCH TO SKIP
DCA TEMP
IAC
CALL ADCON /GET A NEW Y OFFSET FROM KNOB 1
DCA TEMP1
CALL ADCON /GET NEW X OFFSET FROM KNOB 0
DCA TEM2
JMP STYN /AND RETURN TO SET CHAN 2
DSPTS, DISPTS
INTRP, SERVIS /DECODE KBD CHAR'S AND ACT
MALT, -201 /-CTRL/A
FIXR, 0 /THIS SUBR. TRUNCATES FAC TO INTEGER
CLA /AND LEAVES IT IN THE AC & LOC'N HW.
TAD EW
SPA SNA CLA /EXPO.<1?
JMP DONE-1 /YES; TRUNCATE TO ZERO
TAD EW
TAD M13
SNA /EXPO=13?
JMP DONE /YES; C(45) ARE INTEGER PART
SMA /EXPO.<13?
JMP LRG /NO, IS TOO LARGE
DCA FLOATR /USE FLOATR AS TEMP REG.
FIXR1, CLL /ROTATE FAC 1 RIGHT;LEAVE
TAD HW
SPA
STL
RAR /VALUE AT LW=ADD 46.
DCA HW
TAD LW
RAR
DCA LW
ISZ FLOATR /FRACTION AS C(46)
JMP FIXR1
JMP DONE
LRG, CLA CLL
TAD HW
SPA CLA /WAS IT NEG.?
CMA RTL /YES; SET AC=7775
CMA RAR /IF +,=3777;IF -,=4001
DCA HW
DONE, TAD HW
JMP I FIXR
M13, -13
/THIS IS A SHORT DEBUG AND CORE MODIFIER ROUTINE
/THE RETURN LOCATION IS SPECIFIED BY
/TYPING 'R' THEN RETURN LOC'N.
/TYPE 'N' TO OPEN NEXT LOCATION; TYPE 'C'
/AFTER A CORRECTION TO ENTER IT;
/AND TYPE 'S' TO REOPEN LAST LOCATION USED.
/'RUBOUT' WILL TERMINATE ANY OPERATION
/THEN RESTART ROUTINE.
/WILL BE CLOBBERED BY PARA'S IF USE CA:
*400
STRTIT, JMS MODCR
JMS OCTIN /GET A LOCATION TO OPEN
JMP .-2
SZA /GET A NUMBER>0?
JMP GOTIT /YES
TAD LSCHR /IS LAST CHARACTER READ
TAD MEN
SNA /WAS IT 'N'?
JMP NLOC /YES
TAD MES
SNA /WAS IT 'S'?
JMP NLOC+1 /YES
IAC
SZA CLA /WAS IT 'R'?
JMP STRTIT /NO, IGNORE IT
JMS OCTIN /YES; GET EXIT LOC'N
JMP STRTIT /IF ERROR, RESTART
SNA CLA /MUST BE NONZERO ADDR.
JMP STRTIT
JMS MODCR /WAS OK
JMP I VALU /EXIT TO THERE.
NLOC, ISZ LSLOC
TAD LSLOC
JMS OCTOUT
SKP
GOTIT, DCA LSLOC
TAD EQUAL
CALL OUT
TAD I LSLOC /GET CONTENTS OF OPEN LOC'N
JMS OCTOUT /PRINT IT
TAD COLON
CALL OUT
JMS OCTIN /GET CORRECTION
JMP STRTIT
CLA
TAD LSCHR
TAD MSEE
SZA CLA /WAS LAST CHAR. A 'C'?
JMP STRTIT /NO, RESTART.
TAD VALU /YES
DCA I LSLOC /STORE CORRECTION
JMP STRTIT
OCTOUT, 0
CLL RAL /CAME WITH OCTAL # IN AC;
DCA DTEM /ROTATE 1ST DIGIT INTO LINK
TAD NEG4
DCA NCNTR
SETIT, TAD DTEM
RTL
RAL
DCA DTEM
TAD DTEM
AND P7M0 /MASK RIGHTMOST 3 BITS
TAD AS260
CALL OUT
ISZ NCNTR /PRINTED 4 DIGITS?
JMP SETIT /NO
JMP I OCTOUT /YES, WE'RE DONE.
OCTIN, 0
CLA /OCTAL INPUT ROUTINE
DCA VALU /ANY NON OCTAL CHAR TERMINATES
DCA NCNTR />4 DIGITS OR RUBOUT GENERATE ERROR RETURN
GTCHR, JMS MODTTI /GET A CHARACTER
DCA LSCHR
TAD LSCHR
TAD MN7
SMA SZA / ASCII '0'?
JMP FNISH /NO, DEFINITELY NOT DIGIT.
DCA DTEM /IS DIGIT, KEEP IT.
TAD VALU /IS CURRENTLY ASSEMBLED LOC'N
CLL RTL
RAL
TAD DTEM /ADD NEW DIGIT
DCA VALU
ISZ NCNTR
TAD NCNTR /HAVE MORE THAN 4 CHAR'S?
TAD NEG4
SZA SMA CLA
JMP BAD /YES, ERROR
JMP GTCHR /NO, GET ANOTHER
FNISH, CLA /EXIT HERE WITH OPEN LOC'N IN AC
TAD LSCHR
TAD MRBT
SNA CLA /WAS LAST CHAR A RUBOUT?
JMP .+4 /YES, ERROR!
ISZ OCTIN /INDEX RETURN IF NO ERROR
TAD VALU /AND LEAVE RESULT IN AC
JMP I OCTIN
BAD, TAD QUEST
CALL OUT
JMP I OCTIN
MSEE, -303
AS260, 260
MRBT, -377
MN7, -267
P7M0, 267-260
EQUAL, 275
COLON, 272
MEN, -316
MES, 316-323
QUEST, 277
NCNTR, 0
LSLOC, 0
LSCHR, 0
VALU, 0
DTEM, 0
MODTTI, 0
KSF
JMP .-1
KRB
TLS
TSF
JMP .-1
JMP I MODTTI
MODCR, 0
CLA
TAD MDCR
CALL OUT
TAD MDLF
CALL OUT
JMP I MODCR
MDCR, 215
MDLF, 212
*600
READER, 0 /FP INPUT SUBR. TO IGNORE NON-NUMERICS.
CALL FLIN /GET CONVERSION
NOP /LEAVE ROOM FOR DAFFT AND PAFFT TO INSERT
/ A SWBA INSTRUCTION
TAD INPSW
SNA CLA /NUMERIC INPUT?
JMP .-3 /NO, TRY AGAIN
JMP I READER /YES, EXIT.
FLIN, FPIN
SELECT, 0 /OUTPUT SELECTOR ACCORDING TO IOSWT
DCA OUTCHR /KEEP CHAR.
TAD IOSWT
SNA CLA /WAS IT >0?
JMP TTOUT /NO, USE TELETYPE
TAD OUTCHR
PLS
PSF
JMP .-1
JMP .+5
TTOUT, TAD OUTCHR
TLS
TSF
JMP .-1
CLA
JMP I SELECT
OUTCHR, 0
MARKER, 0 /TABLE DRIVEN AXIS MARKER ROUTINE
TAD CORTAB /INITIALIZE COORD. TABLE POINTER
DCA AUTO
LOKIN, TAD I AUTO /GET STATUS WORD
DCA TEMP
TAD TEMP
IAC
SNA CLA /END OF TABLE?
JMP I MARKER /YES
TAD TEMP
SMA CLA /NEED X COORD.?
JMP .+3 /NO
TAD I AUTO
DCA XDIS
TAD TEMP
RAL
SMA CLA /NEED Y COORD.?
JMP .+3 /NO
TAD I AUTO
DCA YDIS
CLA IAC /IF BIT 11=1, MOVE TO COORD'S
AND TEMP /THEN PUT PEN DOWN; IF =0,
CALL PLTMV /INCREMENT TO COORD'S W/PEN DOWN.
JMP LOKIN /CONTINUE SCANNING TABLE
PLTMV, PLTINC
/THE FOLLOWING TABLE OF COORD'S IS STRUCTURED
/THUSLY: 1ST WORD=STATUS, BIT 0=1 MEANS
/X COORD. FOLLOWS, BIT 1=1 Y COORD. FOLLOWS,
/BOTH SET MEANS X THEN Y COORD'S FOLLOW.
/BIT 11 DESCRIBES PEN STATUS: =0
/LEAVE PEN AS IS, AND =1 RAISE PEN.
PX=4000;PY=2000;PU=1
CORTAB, .
/THESE DRAW A BOX STARTING FROM AXES ORIGIN
PX+PY+PU /GO TO AXES ORIGIN
AXL-5
AYL-5
PX /GO TO RIGHT
AXL+AXR+5
PY /GO TO TOP
AYL+AYR+5
PX /GO TO LEFT TOP
AXL-5
PY /GO TO AXES ORIGIN
AYL-5
/THESE DRAW TICS ON X AXIS
PX+PU
AXL
PY
AYL-2
PX+PY+PU
AX1
AYL-5
PY
AYL-2
PX+PY+PU
AX2
AYL-5
PY
AYL-2
PX+PY+PU
AX3
AYL-5
PY
AYL-2
PX+PY+PU
AXR+AXL
AYL-5
PY
AYL-2
/TICS ON Y AXIS
PX+PY+PU
AXL-5
AYL
PX
AXL-2
PX+PY+PU
AXL-5
AY1
PX
AXL-2
PX+PY+PU
AXL-5
AY2
PX
AXL-2
PX+PY+PU
AXL-5
AY3
PX
AXL-2
PX+PY+PU
AXL-5
AYR+AYL
PX
AXL-2
PX+PY+PU
AXL
AYL
MIN1, -1 /END OF TABLE.
FOUTX, 0 /ENTRY TO FLOATING OUTPUT.
DCA DADP
JMS I .+3 /CALL FPP OUTPUT.
NOP /LEAVE ROOM FOR DAFFT AND PAFFT TO INSERT
/ A SWBA INSTRUCTION.
JMP I FOUTX
5600
*1000
CALBRT, HEDIT1 /CALIBRATE:^LINE PLOT?
HD3
ASK
DCA I PTPLT /=0 FOR LINE PLOT;=1 FOR POINT
CLSTRT, CRLFD
CALL PENUP
JMP ORGN /START PEN AT ORIGIN OF DATA
INSTRK, CALL DISMOV /BEGIN INTERROGATION
KSF
JMP .-2 /MUST REFRESH DISPLAY
KRB
TLS
TAD YES /LEGAL CHARACTERS ARE
SNA /X,Y,O,M, OR G
JMP YMAX /WAS Y, GO TO YMAX
IAC /WAS IT X?
SNA
JMP XMAX /YES, GO TO XMAX.
TAD MGEE /WAS IT G?
SNA
JMP I PLTXIT /YES, EXIT.
TAD MEM /WAS IT M?
SZA
JMP .+3 /NO
CALL MARKR /YES, MARK COORDINATE AXES.
JMP CLSTRT
TAD MOH /WAS IT O?
SNA CLA
JMP ORGN /YES, GO TO DATA MINIMA.
TAD QUES /NO, FOUND INVALID CHARACTER
CALL OUT
JMP INSTRK
XMAX, TAD XLIM
TAD XRNG
DCA XDIS
JMP INSTRK
YMAX, TAD YLIM
TAD YRNG
DCA YDIS
JMP INSTRK
ORGN, TAD XLIM
DCA XDIS
TAD YLIM
DCA YDIS
JMP INSTRK
QUES, 277 /?
YES, -331 /-Y
NO, 331-316 /Y-N
MGEE, 330-307 /X-G
MEM, 307-315 /G-M
MOH, 315-317 /M-O
PTPLT, PNTPLT
MARKR, MARKER
PLTXIT, PLTINT
/SUBR. ACCEPTS ONLY 'Y' OR 'N' FROM
ASKER, 0 /ASR. GIVES '?' IF NOT. SETS AC=1
RDTTY /FOR 'N' ANSWER, AC=0 FOR 'Y'
TAD YES
SNA
JMP I ASKER /=0 FOR YES
TAD NO
SZA CLA
JMP .+3
IAC /=1 FOR NO
JMP I ASKER
TAD QUES
CALL OUT
JMP ASKER+1
STALL, 0
CLA CLL
TAD SET
SNA CLA /WANT FAST CLOCK?
TAD K100 /NO SET FOR 1KC
TAD K5400 /IF SKIPPED SET FOR 10KC
DCA CCLDR
SET3
CALL ADCON /GET VARIABLE COUNT FROM CHAN 3
TAD K7000
STL RAR /RANGE OF 7000 TO 7777
CALL CLKSET /INSERT DELAY TIME
CCLDR, 0
JMP I STALL
SET, 0
K7000, 7000
K5400, 5401
K100, -100
ADCONV, 0
ADLM /LOAD MUX
ADST /START CONV
ADSK
JMP .-1
ADRB /READ RESULT
JMP I ADCONV
RESET, 0 /RESET DISPLAY COORD'S
CLA
DIXY
TAD YDIS
DILY
CLA
TAD XDIS
DILX
CLA CLL
JMP I RESET
/THESE TWO SUBR'S CAN OPEN AND CLOSE A RELAY
/USING RELAY DRIVER TIED TO CHANNEL SELECT BIT.
UPPEN, 0
CALL HOLD
DILE
CALL HOLD
JMP I UPPEN
DNPEN, 0
CALL HOLD
SET2
DILE
CALL HOLD
JMP I DNPEN
HNDRD, 7;3100;0
*1200
LEADER, 0 /OUTPUT 10 INCHES OF LDR-TRLR.
CRLFD
TAD LNUM
DCA PCTR
TAD C200
CALL OUT
ISZ PCTR
JMP .-3
JMP I LEADER
LNUM, -144
C200, 200
XSETUP, 0
STA /FOLLOWING ROUTINE COMPUTES
TAD NPTS /X DISPLAY INCREMENT SCALED
FLOAT /TO THE NO. OF PTS., NPTS.
ENTR
FPUT XSCLFC
FGET XRNG
FLOT
FDIV XSCLFC /LEAVES X UNITS/PT IN FAC
FPUT XSCLFC /AND XSCLFC.
FEXT
TAD EW
SZA SMA CLA /WAS FAC<1?
JMP GTZR /NO
DCA XNC /YES, CLEAR INTEGER PART
TAD HW /ASSUMES FACTOR IS ALWAYS
CLL RAL /0.25 OR GREATER;RAL FOR SIGN BIT
ISZ EW /WAS C(44)=-1?
SKP /NO, WAS 0
CLL RAR /YES, DIVIDE BY 2
JMP .+4
GTZR, FIXT
DCA XNC
TAD LW
DCA XNC+1
JMP I XSETUP
ISDIG, JMS DATYP
HEDIT2 /PTS. TO SKIP:
GETNO
FIXT
CMA /KEEP AS ONE'S COMP.
DCA PCTR
HEDIT1 /Y RANGE AND MIN.:
DIHD1
GETNO
JMS YSVAL
ENTR
READ /READ MINIMUM Y
FPUT YMIN
FEXT
CALL IOASK /LOW SPEED I/O?
RFC
INITAR
XYSCAL, ENTR /READ A Y VALUE
READ
FSUB YMIN
FMPY YSCLFC
FADD HALF
FEXT
FIXT
CDF 10
DCA I YIND
CDF 0
ISZ PCTR /KEEPING THIS POINT?
JMP XYSCAL-1 /NO, RE-INIT. TO IGNORE PTS.
STA /AFTER FIRST SKIP, ALWAYS SKIP
DCA PCTR
ISZ CNTR
JMP XYSCAL
DISPLAY /EXIT FOR DISPLAY
DATYP, 0
HEDIT1
HD2 /NO. PTS=
GETNO
FIXT
CIA
TAD OFFSET
SPA CLA /LESS THAN ARRAY SIZE?
JMP DATYP+1 /NO, TRY AGAIN
TAD HW
DCA NPTS
CALL XSET /SET X DISPLAY INCREMENT
JMP I DATYP
YSVAL, 0
ENTR
FPUT YSCLFC /DATA RANGE IN FAC ON ENTRY
FGET YRNG /FIND YRNG/D.R.=YSCLFC
FLOT
FDIV YSCLFC / AND LEAVE FACTOR IN FAC
FPUT YSCLFC
FEXT
JMP I YSVAL
PLTINT, INITAR /INCREMENTAL X-Y ANALOG PLOTTING ROUTINE
CALL PENUP /RAISE PEN
CALL XSET
IAC /SET SWITCH FOR 1 ST PT ONLY
DCA LNCTR
PLTLOP, CDF 10 /SET UP Y VALUE
TAD I YIND
CDF 0
TAD YLIM
DCA YDIS
TAD PNTPLT /=0 FOR LINE PLOT; =1 FOR POINT
TAD LNCTR
CALL PLTMOV /MOVE PEN
DCA LNCTR /CLEAR 1 ST PT SWITCH
CALL ADINX /INCR. X DISPLAY SUM
ISZ CNTR /MORE PTS?
JMP PLTLOP /YES
CALL PENUP /LIFT PEN + EXIT
HEDIT1 /DONE. IS PLOTTER OFF?
HD6
ASK /IGNORE RESPONSE
DISPLAY
PNTPLT, 0
PLTMOV, PLTINC
YFLIP, INITAR /INVERT Y AXIS
CDF 10 /Y(I)=YRNG-Y(I)
FLY, TAD I YIND
CIA
TAD YRNG
DCA I ZIND
ISZ CNTR
JMP FLY
DISPLAY
*1400
/SUBR. PRINTS DEC. NOS. IN 10 COLUMNS
FPOUT, CALL IOASK /OF UP TO 4 DIGIT INTEGERS.
CALL LEDER
INITAR
SET6
DCA DP /NO. OF DIGITS TO OUTPUT
ISZ EFLG /SET F FORMAT.
NULINE, TAD NLIN
DCA MCTR
LOOP6, CDF 10
TAD I YIND
FLOAT
FOUTCM
ISZ CNTR
SKP
JMP DNE
ISZ MCTR
JMP LOOP6
CRLFD
JMP NULINE
DNE, CALL LEDER
DISPLAY
NLIN, -12
LEDER, LEADER
/CHECK WHICH I/O DEVICES TO USE
ASKIO, 0
HEDIT1
HDIO
ASK
CLL RAR /KEEP ANSWER IN LINK
CRLFD /MUST HAVE LOW I/O FOR CR-LF
RAL /NOW SET UP SWITCH
DCA IOSWT /=1,HIGH;=0,LOW
JMP I ASKIO
HDIO, TEXT \TTY I/O?\
/SCAN DATA FOR MIN AND MAX:
SCANY, 0
INITAR
CDF 10
STL RTR
DCA MIN
DCA MAX
LOOP4, TAD I YIND /FIND YMAX AND YMIN IN DATA
DCA TEMP
TAD TEMP /SUB Y FROM MIN
CIA
TAD MIN
SMA CLA /MINY?
JMP INCR
TAD TEMP /NO, SET MAX=Y
DCA MAX
JMP INCR
LOW, TAD TEMP
DCA MIN
INCR, ISZ CNTR
JMP LOOP4
CDF 0
JMP I SCANY
SCALY, JMS SCANY /GET YMIN & MAX
TAD MIN
CIA
TAD MAX
FLOAT
CALL YSCVAL
HEDIT1 /^MIN=
HD5
SET6
DCA DP
ISZ EFLG
TAD MIN
FLOAT
FLOUT /OUTPUT 4 DIGIT INTEGER
HEDIT2 /MAX=
TAD MAX
FLOAT
FLOUT
ENTR
HEDIT /MPY=
FGET YSCLFC
FEXT
ISZ DP /SET FIELD TO 7
SET3 /FOR 3 DEC. PLACES
FLOUT
INITAR
SKL, TAD MIN /SCALE DATA AFTER SUB'G MIN Y.
CIA
CDF 10
TAD I YIND
FLOAT
ENTR
FMPY YSCLFC
FADD HALF /CORRECT FOR TRUNCATION.
FEXT
FIXT
CDF 10
DCA I ZIND
ISZ CNTR
JMP SKL
DISPLAY
YSCVAL, YSVAL
/LOADS CURRENT XDIS AND READYS NEXT.
ADDMX, 0
CLA CLL
TAD TXSM+1 /GET LOW ORDER
CLL RAL /PUT BIT 0 IN 11 FOR ROUNDOFF
CLA RAL
TAD TXSM /GET HIGH ORDER
TAD XLIM
DCA XDIS /IS CURRENT X DISPLAY VALUE.
CLL
TAD TXSM+1 /FOR NEXT TIME: GET FRACTIONS
TAD XNC+1
DCA TXSM+1
RAL /PUT OVERFLOW IN BIT 11
TAD TXSM /GET INTEGER PARTS
TAD XNC
DCA TXSM
JMP I ADDMX
HSR, 0
RSF
JMP .-1
RRB RFC
JMP I HSR
*1600
/ENTER WITH CONTROL VALUE IN AC:
/NEG=SCOPE,0=INCREMENT, & POS=FIRST
/POINT (FOR PLOTTING ONLY, NOT SCOPE)
/OR MAKE A POINT PLOT.
PLTINC, 0
SMA /IS AC NEG?
JMP .+3 /NO
CALL DISMOV /YES, USE FAST JUMP
JMP PLEXT
SNA CLA /WAS AC>0?
JMP GSCAN /NO, USE INCREMENTER
CALL PENUP /YES; GO TO COORD'S AND WAIT
CALL DISMOV
CALL PENUP
CALL PENUP
CALL PENDN /THEN PUT PEN DOWN
JMP PLEXT
GSCAN, TAD OLDX /IS OLD X
CIA
TAD XDIS
DCA PCTR /IS DELTA X
TAD OLDY /IS OLD Y
CIA
TAD YDIS
DCA TEMP1 /IS DELTA Y
TAD PCTR
SPA
CIA
DCA MCTR /IS ABS. VALUE OF DX
TAD TEMP1
SPA
CIA /NOW HAVE ABS(DY)
TAD MCTR /ADD ABS(DX)
DCA MCTR /ABS(DX)+ABS(DY)=# OF MOVES=MCTR
TAD MCTR
SNA /IS MCTR>0?
JMP PLEXT /NO, NO MOVES TO MAKE, EXIT.
CIA
DCA LNCTR
ENTR
FGET MCTR /# MOVES
FLOT
FPUT TEMFP
FGET OLDX
FLOT
FPUT XMIN
FGET OLDY
FLOT
FPUT YMIN
FGET PCTR /DELTA X
FLOT
FDIV TEMFP
FPUT XSCLFC /X UNITS/MOVE
FGET TEMP1 /DELTA Y
FLOT
FDIV TEMFP
FPUT YSCLFC /Y UNITS/MOVE
FEXT
ISZ I CSET /USE FAST CLOCK CYCLE
SCANIT, ENTR
FGET XMIN
FADD XSCLFC
FPUT XMIN
FADD HALF
FEXT
FIXT /TRUNCATE XPOS TO NEAREST INTEGER
DCA XDIS
ENTR
FGET YMIN
FADD YSCLFC
FPUT YMIN
FADD HALF
FEXT
FIXT /DO SAME FOR Y.
DCA YDIS
CALL DISMOV /MOVE PEN TO NEW COORD'S
CALL HOLD /WAIT FOR FAST CLOCK CYCLE
ISZ LNCTR /MORE MOVES?
JMP SCANIT /YES.
DCA I CSET /RESTORE FOR SLOW CLOCK
PLEXT, TAD XDIS
DCA OLDX
TAD YDIS
DCA OLDY
JMP I PLTINC
CSET, SET
OLDX, 0
OLDY, 0
/ENTER HEDER1 WITH MESSAGE ADDRESS IN
/LOCATION FOLLOWING THE JMS (HEDER1).
/ENTER HEDER2 TO CONTINUE ON WITH A
/BROKEN STRING (E.G., SEE 'HD1' BELOW)
/AND DO NOT SUPPLY ADDRESS AFTER THE JMS.
HEDER1, 0 /THESE SUBR'S OUTPUT PACKED ASCII
CLA CLL IAC /AS GENERATED BY MACRO-8 ASSEMBLER.
TAD HEDER1 /A SINGLE CODE,UP ARROW,=CR+LF
DCA HEDER2 /ALWAYS RETURN THRU HEDER2
STA
TAD I HEDER1 /GET MESSAGE ADDRESS-1
DCA HEDER1 /USE HEDER1 AS TEMP REG
SKP
HEDER2, 0 /ENTER HERE IF NO ADDRESS GIVEN
CRLFD /BEGIN ALL MESSAGES WITH THIS
NPR, ISZ HEDER1
TAD I HEDER1
RTR
RTR
RTR /SWAP HALVES
JMS TYPCH /SET UP & TYPE ORIGINAL LEFT HALF
TAD I HEDER1
JMS TYPCH / " RIGHT HALF
JMP NPR
TYPCH, 0
AND RM77 /DELETE CURRENT LEFT HALF
SNA /ZERO IN EITHER HALF SIGNIFIES
JMP I HEDER2 /END OF STRING; RETURN
TAD M36
SPA /CODE 300 SERIES?
JMP PRTT /YES
SZA /SPECIAL CODE?
JMP .+3
CRLFD /YES, CODE 36: CARR.RET.+LN.FEED
JMP I TYPCH
TAD P236
PRTT, TAD P336
CALL OUT
JMP I TYPCH
P336, 336
P236, 236-336
M36, -36
*2000
SERVIS, KRB /DISPLAY INTERRUPT SERVICE ROUTINE
TLS /PRINT LAST CHAR.
TSF
JMP .-1
DCA TEMP
TAD TEMP
TAD (-203 /TEST FOR ^C
SNA CLA
JMP I PS8XJ
TAD TEMP
TAD M300
SPA SNA /WAS IT A LETTER?
JMP NMCHK /NO, MAY BE NEW BLOCK #
CLL RTL
RTL
RTL
DCA TEMP
RDTTY /GET NEXT CHAR
TAD M300
SPA SNA /LETTER?
JMP INVAL /NO, ERROR
TAD TEMP
DCA TEMP /KEEP 6-BIT PR AS 2'S COMP.
TAD CHTAB /SET UP SEARCH TABLE
DCA AUTO
MRRED, RDTTY /GET MORE INPUT
TAD M272
SNA /WAS IT A COLON?
JMP CHLOP+1 /YES, LOOKUP JUMP ADDR.
TAD RUBIT
SZA CLA /RUBOUT?
JMP MRRED /NO, GET MORE
INVAL, CLA
TAD ERRQ /OUTPUT '?'
CALL OUT
DISPLAY /AND EXIT TO DISPLAY
CHLOP, ISZ AUTO
TAD I AUTO /GET 6 BIT PAIR
SNA /END OF TABLE?
JMP INVAL /YES, INVALID COMMAND
TAD TEMP
SZA CLA /GET A MATCH?
JMP CHLOP /NO, TRY NEXT ENTRY
TAD I AUTO /YES, GET TABLE POINTER
DCA TEMP
JMP I TEMP /AND GO THERE
/SET UP BLOCK PARAMETER. 0=BUFFER 1, 1=BUFFER 2
NMCHK, TAD M261 /AND 2= BOTH BUFFERS W/OFFSETS FOR 2
SPA /<261?
JMP INVAL /YES
DCA BLOCK /KEEP IT TEMPORARILY
SETM3
TAD BLOCK
SPA CLA />2?
JMP I CDISPL /NO, EXIT TO DISPLAY W/O CR-LF
DCA BLOCK /YES, CLR BLOCK
JMP INVAL /PRINT '?'
ERRQ, 277
M300, -300
M261, 300-261
M272, -272
RUBIT, 272-377
CDISPL, SCPINT-1
CHTAB, DCTAB-1
PS8XJ, PS8X
DCTAB, -2324 /ST-RIP
STRIPR
-2315 /SM-OOTH
SMOT11
-1116 /IN-TEGRATE
INTEG
-1501 /MA-SS STORAGE
MASS
-2325 /SU-BTRACT CDA FROM OTHER
SUBTRT
-1725 /OU-TPUT
FPOUT
-2014 /PL-OT
CALBRT
-2303 /SC-ALE
SCALY
-2327 /SW-AP
SWAPBL
-2205 /RE-START
START
-2001 /PA-PER TAPE INPUT
ISDIG
-0126 /AV-ERAGER INPUT
ANINPT
-2411 /TI-ME CALIBRATION
CALSET
-2321 /SQ-UEEZE DATA DENSITY
SQEEZE
-0104 /AD-D OTHER TO CDA
ADDTWO
-0405 /DE-RIVATIVE FORMATION
DERIV
-3011 /XI-NVERT
XFLIP
-3111 /YI-NVERT
YFLIP
-0317 /CO-PY CDA INTO OTHER
COPY
-0325 /CU-RSORS
CURSR
-1411 /LI-ST CURSORS
CURLS
-1525 /MU-LTIPLY (SCALE) CDA
MULP
-2005 /PE-AK REPORT ON CDA
REPRT
MZAP, -1517 /MO-DIFIER ROUTINE
STRTIT
0 /END TABLE
*2200
INTFLT, 0 /INTERPERTIVE ENTRY TO FLOAT SUB.
TAD EW
FLOAT
JMP I INTFLT
COPY, CALL SPCIN /COPY DISP. CHAN INTO OTHER
TAD I YIND
DCA I AUTO
ISZ CNTR
JMP .-3
DISPLAY
SPCIN, SPINIT
SUBTRT, CALL SPCIN /SUBTRACT CDA FROM OTHER BUFFER
TAD I YIND /GET CDA
CIA
TAD I AUTO /SUBTRACT FROM OTHER
DCA I ZIND /RESTORE IN CDA
ISZ CNTR /MORE POINTS?
JMP SUBTRT+1 /YES
DISPLAY /EXIT TO DISPLAY
MASS, JMS M76TF1 /MOVE 7600 OF PS8 TO FIELD 1
CDF 0
DCA I (7746 /0 JOB CONTROL WORD.
CIF 10
JMS I (7700 /CALL COMMAND DECODER.
5
0
0
CDF 10
TAD I (7620 /GET INPUT BLOCK #.
DCA MASSA3
TAD I (7617 /TEST IF INPUT.
SNA CLA
JMP MASS1 /NO
CDF 0 /YES
JMS M76TF1 /MOVE 7600 0F PS8 TO FIELD 0.
JMS DATYP /ASK NUMBER OF POINTS.
HEDIT2 /# OF POINTS TO SKIP.
GETNO
FIXT
DCA PCTR
DCA MASSA2
TAD BLOCK /SET LOCATION TO READ INTO.
SZA CLA
TAD OFFSET
TAD YONE
IAC
DCA MASSA2
TAD NPTS /NUMBER OF POINTS TO READ.
DCA TEMP
MASS3, JMS I (7607 /CALL SYSTEM DEVICE HANDLER.
MASSA1, 0210 /READ 2 RECORDS INTO FIELD 0.
MASSA2, 0 /BUFFER ADD.
MASSA3, 0 /BLOCK ADD.
JMP ERRX
TAD PCTR /TEST TO SKIP DATA.
SNA
JMP MASS4
TAD (-400 /TEST FOR MORE THAN A BLOCK
SPA /TO SKIP.
JMP MASS2 /NO, SHIFT WORDS.
MASS6, DCA PCTR /YES
ISZ MASSA3 /READ NEXT BLOCK.
JMP MASS3
MASS2, DCA TEM2 /NUMBER OF WORDS TO MOVE.
CMA
TAD MASSA2
DCA AUTO /ADD. TO MOVE TO.
TAD AUTO
TAD PCTR
DCA AUTO2 /ADD. TO MOVE FROM.
TAD TEM2 /DEPLETE # OF PTS. TO READ.
TAD TEMP
DCA TEMP
CDF 10
MASS5, TAD I AUTO2 /SKIP POINTS.
DCA I AUTO
ISZ MASSA2 /BUMP ADDRESS TO STORE NEXT BLOCK.
ISZ TEM2
JMP MASS5
CDF 0
DCA PCTR /0 SKIP COUNT.
JMP MASS20 /TEST IF DONE.
MASS4, TAD MASSA2 /SET TO NEW BUF.START.
TAD (400
DCA MASSA2
TAD (-400 /DEPLETE # OF PTS. TO READ.
MASS20, TAD TEMP
SPA SNA /TEST IF DONE.
JMP MASS7
DCA TEMP /NO,READ NEXT BLOCK.
ISZ MASSA3
JMP MASS3
MASS7, CLA
DISPLAY
M76TF1, 0 /MOVE 7600 OF PS8 TO FIELD 1.
CLA
TAD M76LOK
CMA
DCA M76LOK
TAD (7600
DCA TEMP1
TAD (PS7600
DCA TEM2
TAD (-200
DCA TEMP
M76T1, CDF 0
JMP 2400
M76T2, JMP I M76TF1
M76LOK, 0
*2400
TAD I TEM2
DCA AUTO
CDF 10
TAD I TEMP1
CDF 0
DCA I TEM2
TAD AUTO
CDF 10
DCA I TEMP1
ISZ TEMP1
ISZ TEM2
ISZ TEMP
JMP M76T1
CDF 0
JMP M76T2
MASS1, TAD I (7600 /TEST FOR OUTPUT COMMAND.
CDF 0
SNA CLA
JMP ERRX
CDF 0
TAD (7600 /OUTPUT DATA.
DCA AUTO
TAD (MSFN-1
DCA AUTO2
TAD (-4
DCA TEMP
TAD (MSFN
DCA MASSA4
MASS8, CDF 10 /MOVE FILE NAME TO FIELD 0.
TAD I AUTO
CDF 0
DCA I AUTO2
ISZ TEMP
JMP MASS8
TAD (201 /MAX. SIZE OF FILE =8.
CIF 10
JMS I (7700 /CALL FILE CREATE.
3
MASSA4, MSFN /RETURN START BLOCK OF FILE.
MASSA5, 0 /RETURN -LENGTH.
JMP ERRX
TAD BLOCK /TEST FOR CHANNEL 2.
SZA CLA
JMS M76TF1 /MOVE 7600 OF PS8 TO FIELD 0.
TAD NPTS /CAL. # OF 128 RECORDS TO WRITE.
AND (7600
CLL RAR
DCA MASSA6
TAD NPTS
AND (177
SZA CLA
TAD (100
TAD MASSA6 /SET UP ARG 1 OF WRITE.
TAD (4010
DCA MASSA6
TAD BLOCK /SET BUFFER START.
SZA CLA
TAD OFFSET
TAD YONE
IAC
DCA MASSA7
TAD MASSA4
DCA MASSA8 /SET BLOCK ADD.
JMS I (7607 /WRITE DATA TO SYSTEM DEVICE.
MASSA6, 0
MASSA7, 0
MASSA8, 0
JMP ERRX
TAD BLOCK /TEST TO 7600 TO FIELD 1.
SZA CLA
JMS M76TF1
TAD MASSA6 /FIND # OF 256 BLOCKS.
CLL RTR
RTR
RTR
RAR
AND (17
SZL
IAC
DCA MASSA9
CIF 10
IAC /CLOSE FILE ON SYS: DEVICE.
JMS I (7700
4
MSFN /FILE NAME.
MASSA9, 0 /#OF BLOCKS.
JMP ERRX
JMS M76TF1 /MOVE 7600 BACK TO FIELD 0.
DISPLAY
MSFN, 0
0
0
0
ERRX, TAD M76LOK /ERROR EXIT.
SZA CLA
JMS M76TF1
CIF 10
JMS I (7700
7
1
FLOATR, 0 /CONVERTS INTEGER IN AC TO F.P.#.
DCA HW /AND LEAVES IT IN FAC.
TAD P13
DCA EW
DCA LW
DCA AC1 /CLEAR OVERFLOW WORD.
CDF 0
CALL FPNORM
NOP /LEAVE ROOM FOR PAFFT AND DAFFT TO INSERT
/ A SWBA INSTRUCTION.
JMP I FLOATR
FPNORM, DNORM
P13, 13
*2600
PS7600, 0 /PAGE FOR FIELD 1,7600.
*3000
SWAPBL, JMS SPINIT /SWAP THE TWO BUFFERS
TAD AUTO
DCA XIND
SWLOOP, TAD I XIND
DCA TEMP
TAD I ZIND
DCA I AUTO
TAD TEMP
DCA I YIND
ISZ CNTR /MORE POINTS?
JMP SWLOOP /YES
DISPLAY /NO, EXIT
SPINIT, 0 /SPECIAL INIT. ROUTINE
INITAR /CALL NORMAL INIT THEN SET
TAD BLOCK /AUTO FOR OTHER ARRAY
SNA CLA
TAD OFFSET
TAD YONE
DCA AUTO
CDF 10 /AND EXIT WITH DF=1
JMP I SPINIT
/11 POINT MODIFIED PARABOLIC FILTER
SMOT11, INITAR
TAD YIND /YIND IS INDEX FOR Y(I-X)
TAD PL13 /INDEX FOR Y(I+X)
DCA TEM2
CMA
TAD CNTR
TAD PL13
DCA CNTR /CNTR=-NPTS+11
NEWY, TAD MIN6
DCA TEMP /SET COEF LOOP COUNTER
TAD COTAG
DCA TEMP1 /INDEX FOR COEF'S
DCA YMIN
DCA YMIN+1
DCA YMIN+2
LOOP9, CDF 10 /LOOP OVER 6 COEF'S
TAD I YIND
TAD I TEM2
FLOAT /GET Y(I-X)+Y(I+X)
ENTR
FMPY I TEMP1
FADD YMIN /FORM WEIGHTED SUM
FPUT YMIN
FADD HALF /FOR ROUND OFF AFTER LAST MULT.
FEXT
SET3 /INCR. COEF. INDEX BY 3
TAD TEMP1
DCA TEMP1
CMA /DECR (I+X)
TAD TEM2
DCA TEM2
ISZ TEMP /ANOTHER COEFF?
JMP LOOP9 /YES
FIXT /NO, FIX RESULT
CDF 10
ISZ TEM2
DCA I TEM2 /STORE AS Y(I)
TAD YIND /RESET (I-X)
TAD MNN5
DCA YIND
TAD TEM2 /RESET (I+X)
TAD P6
DCA TEM2
ISZ CNTR /MORE PTS?
JMP NEWY /YES
DISPLAY
PL13, 13
P6, 6
MNN5, -5
MIN6, -6
COTAG, .+1
7773;4121;7270;7773;2540;2031;7774;3077;0501
7776;2445;2141;7776;3102;2657;7775;3244;5214
ADDTWO, JMS SPINIT /ADD DISP. CHAN TO OTHER
TAD I YIND
TAD I AUTO
CLL IAC RAR
DCA I ZIND /RESULTS IN DISP. CHAN.
ISZ CNTR
JMP ADDTWO+1
DISPLAY
CURSR, TAD MODE
SMA CLA /CURSORS ON SCOPE?
STA /NO, PUT THEM UP
DCA MODE
DISPLAY
/GENERAL PURPOSE CLOCK DELAY SUBR.
/AC=CLOCK COUNT, PC+1=CONTROL REGR. SETTING+1
/DISPLAY OF XDIS, YDIS IS REFRESHED WHILE WAITING.
SETCLK, 0
CLAB /SET COUNT BFR FROM AC
STA /CLR CONTROL REG
CLZE
CLSA /AND FLAGS
TAD I SETCLK /LOAD CONTROL REG, START CLOCK
CLDE
CLSK /OVERFLO?
SKP /NO, WAIT FOR IT
JMP .+3 /YES, EXIT AFTER CLEARING CLOCK REG'S
CALL DISMOV /REFRESH DISPLAY
JMP .-4
STA
CLZE /CLR REG TO STOP CLOCK
CLA CLL
CAF /CLR FLAGS!
ISZ SETCLK
JMP I SETCLK
/OUTPUT FAC THEN PRINT A COMMA
FLTCM, 0
FLOUT /AC=NO. OF DECIMAL PLACES
TAD KOMA
CALL OUT
JMP I FLTCM
KOMA, 254
*3200
/CALLED TO COMPUTE SLOPE AND RELEVANT CORE ADDRESSES
/FROM CURSOR COORDINATES STORED IN TABLE AT TPNT TO TPNT+3
/ON EXIT, TPNT+3=DELTA Y, TPNT+2=DELTA X, YMIN=TPNT+1(Y LEFT),
/XMIN=PT SPAN OF CURSORS, CNTR=-XMIN, YSCLFC=SLOPE(Y UNITS/PT),
/YIND & ZIND=ADDR. CORRESPONDING TO LEFT X, AND FAC=FIXED
/VALUE OF NO. PTS TO LEFT X COORDINATE.
SETSTR, 0
INITAR
TAD TPNT+1 /GET LEFT Y
CIA
TAD TPNT+3 /RIGHT Y
DCA TPNT+3 /KEEP DELTA Y
TAD TPNT /GET LEFT X
CIA
TAD TPNT+2 /RIGHT X
DCA TPNT+2 /KEEP DELTA X
CALL XSET /GET X INCREMENT
ENTR
FGET TPNT+1 /GET LEFT Y
FLOT
FPUT YMIN
FGET TPNT+2 /GET DELTA X
FLOT
FDIV XSCLFC /SCALE IT
FPUT XMIN /IS # OF PTS
FADD HALF
FEXT
FIXT
SPA SNA /INSURE CNTR<0!
JMP ERRD
CIA
DCA CNTR /IS # PTS IN RANGE
ENTR
FGET TPNT+3 /GET DELTA Y
FLOT
FDIV XMIN
FPUT YSCLFC /=Y DIS UNITS /PT
FGET TPNT /LEFT X
FLOT
FDIV XSCLFC
FADD HALF
FEXT /FAC=#PTS TO LEFT X
FIXT
TAD YIND
DCA YIND /SETS INDEX
TAD YIND
DCA ZIND
DCA MODE
JMP I SETSTR
ERRD, HEDIT1 /BAD X PTS!
HD26
DISPLAY
STRIPR, JMS SETSTR
HEDIT1 /STRIP PEAK?
HD25
ASK
SZA CLA
JMP STRBS
STRPK, JMS YSTEP /GET NEW Y
DCA I YIND
ISZ CNTR
JMP STRPK
DISPLAY
STRBS, HEDIT2 /FULL BASE STRIP?
ASK
SZA CLA
JMP .+3 /NO
INITAR
CALL EXTRP
REMOV, JMS YSTEP
CIA
TAD I YIND /SUB. FROM Y
DCA I ZIND
ISZ CNTR
JMP REMOV
DISPLAY
EXTRP, EXTRAP
TPNT, 0 /TABLE OF LAST ADC COORD'S
0
0
0
YSTEP, 0 /COMPUTE Y VALUE ON LINE BETWEEN CURSORS
CDF 0
ENTR
FGET YMIN /GET CURRENT Y VALUE ON LINE
FADD YSCLFC /ADD INCR./PT
FPUT YMIN /KEEP IT
FADD HALF
FEXT
FIXT /LEAVE INTEGER IN AC
CDF 10 /EXIT WITH DF=1
JMP I YSTEP
/SUBR. PERFORMS ADC'S AND SETS DAC'S FOR CURSORS.
/COORDINATES STORED IN TPNT-TPNT+3 W/ VALUES=ADC-AYL.
DISPTS, 0
SETM2
DCA TEM3
TAD DPTR /SET UP STORAGE TABLE
DCA AUTO
DCA TEM2 /SET 0 AS FIRST CHANNEL
NXPT, TAD TEM2
CALL ADCON /MAKE ADC ON CHAN'S 0 THEN 2
DCA XDIS
TAD XDIS
JMS CRSAM
TAD TEM2
CALL ADCON /ADC ON CHAN'S 1 THEN 3
DCA YDIS
TAD YDIS
JMS CRSAM
TAD DCT /SET DELAY COUNTER
DCA MCTR
CALL DISMOV /REFRESH DISPLAY
ISZ MCTR
JMP .-2
ISZ TEM3 /NEED 2ND PT THIS TIME?
JMP NXPT /YES
JMP I DISPTS /GOT IT; EXIT
DCT, -100
DPTR, TPNT-1 /STORAGE ADDR.
EXTRAP, 0 /EXTRAPOLATE Y VALUE TO LEFT EXTREME
ENTR
FGET HW /IS INTEGER NO. OF PTS TO LEFT X
FLOT
FMPY YSCLFC /MULT. BY SLOPE (DELTA Y/PT)
NEGATE
FADD YMIN /SUBTRACT FROM LEFT Y
FPUT YMIN /KEEP EXTRAP'D VALUE HERE
FEXT
FIXT
DCA MIN /AND HERE AS INTEGER
JMP I EXTRAP
*3400
INTEG, JMS RDY
CALL CURSET
STA
TAD XSCLFC
DCA XSCLFC
HEDIT1 /SCAN INT'L?
HD15
ASK
SZA CLA
JMP PTINT /NO, BETWEEN CURSORS
CALL SETLY /YES, GET EXTRAP'D LEFT Y
ENTR
FGET INTEG+1 /GET A LARGE NEG # TO START
FPUT FTEM1
FGET CMPINT+3 /GET LRG POS. #
FPUT FTEM2
FEXT
JMS RDY /PREPARE TO SCAN DATA
/THIS LOOP COMPUTES TOTAL INTEGRAL (SUM)
/TO FIND A SCALE DOWN FACTOR.
FNTOT, JMS SCASM /STRIP BASELINE AND ADD ADJ. Y'S
TAD HW
SMA CLA /IS CURRENT SUMCURRENT MAX?
JMP PT2 /NO
ENTR
FGET TEMFP
FPUT FTEM1
FEXT
PT2, ISZ CNTR /MORE POINTS?
JMP FNTOT /YES
ENTR
FGET FTEM1 /FIND INTEGRAL RANGE.
FSUB FTEM2
FPUT FTEM1
FGET YRNG /COMPUTE SCALE-DOWN FACTOR
FLOT
FDIV FTEM1
FPUT FTEM1
FMPY FTEM2 /SCALE MIN VALUE
FPUT FTEM2
FGET FTEM1
FMPY XSCLFC /GET NEW MULT'R INCLUDING SCL-DN
FPUT XSCLFC
FEXT
JMS RDY
/THIS LOOP COMPUTES AND STORES
/SCALED DOWN INTEGRAL VALUE AT EACH POINT,
CMPINT, JMS SCASM /GET INTEGRAL-BASELINE
FIXT
CDF 10
DCA I ZIND
ISZ CNTR /MORE POINTS?
JMP CMPINT /YES
TAD HW /PUT N-1 VALUE INTO NTH
DCA I ZIND
CDF 0
HEDIT1 /Y MULT'D BY'
HD5+6
DCA EFLG
ENTR
FGET XSCLFC
FDIV HALF
OUTPUT
FEXT
DISPLAY /RETURN TO DISPLAY
CURSET, SETSTR
SETLY, EXTRAP
PTINT, JMS SCASM /INTEGRATES BETWEEN CURSORS
ISZ CNTR /AND PRINTS AREA; NO CHANGE
JMP .-2 /IN DATA ARRAY
HEDIT2 /AREA=
DCA EFLG
ENTR
FGET TEMFP
OUTPUT
FEXT
DISPLAY
TPNT+1
RDY, 0
INITAR
ISZ CNTR
FLOAT
ENTR
FPUT TEMFP /CLEAR TEMFP
FGET MIN /SET LEFT Y
FLOT
FPUT YMIN
FEXT
JMP I RDY
CLRR, 0 /CLEAR Y ARRAY
INITAR
CDF 10
DCA I YIND
ISZ CNTR
JMP .-2
CDF 0
JMP I CLRR
SCASM, 0
CDF 10
TAD I YIND
TAD I YIND
FLOAT
ENTR
FSUB YMIN /SUBTRACT PIVOT VALUE
FPUT XMIN /KEEP THIS
FGET YSCLFC /INCR. PIVOT VALUE
FADD YMIN
FPUT YMIN /KEEP FOR NEXT POINT
NEGATE /SUBTRACT FROM PT SUM
FADD XMIN /FAC=Y(I+1)+Y(I)-P(I+1)-P(I)
FMPY XSCLFC /SCALE DOWN
FADD TEMFP
FPUT TEMFP
FSUB FTEM2 /SUBTRACT MIN VALUE
FEXT
CMA /RESET Y POINTER
TAD YIND
DCA YIND
JMP I SCASM
*3600
CRSAM, 0 /SUBR SETS UP CURSOR TABLE STORAGE.
TAD MLIM /SUBTRACT LIM
SPA /RESULT<0?
CLA /YES, SET IT=0
DCA I AUTO /KEEP RESULT
ISZ TEM2 /INCR. CHAN
JMP I CRSAM
MLIM, -AYL /ASSUME YLIM=XLIM!
INITIZ, 0 /SETS UP A COUNTER=-NPTS, INITIALIZES
CLA CLL /X,Y, & Z ARRAY STARTING LOC'NS.
TAD NPTS
CIA
DCA CNTR
TAD BLOCK
SZA CLA /BUFFER 1?
TAD OFFSET /NO, ADD ARRAY OFFSET
TAD YONE
DCA YIND
TAD NPTS /X ARRAY BEGINS AFTER Y'S
TAD YIND
DCA XIND
TAD YIND
DCA ZIND /AUXILIARY AUTO REG. FOR Y ARRAY
DCA TXSM /CLEAR X DISPLAY SUM
DCA TXSM+1
JMP I INITIZ
DERIV, INITAR /FORMS 5TH PT. DIFFERENCES
TAD PLS5
TAD YIND
DCA YIND
TAD PLS5
TAD CNTR
DCA CNTR
TAD ZIND
DCA XIND
CDF 10
DRLOP1, TAD I ZIND /PUT Y(I+5)-Y(I)+SHF INTO Y(I)
CIA
TAD I YIND
TAD SHF /ADD OFFSET FOR CENTERED DISPLAY
DCA I XIND
ISZ CNTR
JMP DRLOP1
TAD XIND
DCA TEMP
TAD I TEMP /PUT Y(N-5) INTO Y(N-4) AND Y(N-3)
DCA I XIND
TAD I TEMP
DCA I XIND
TAD XIND /SET UP TO SHIFT ARRAY UP BY 3
DCA TEMP /SUCH THAT FINAL ARRAY HAS VALUES
STL IAC RAL /Y(I)=Y(I+2)-Y(I-2)+SHF
TAD TEMP /WHERE Y(1)=Y(2)=Y(3) AND
DCA TEMP1 /Y(N-2)=Y(N-1)=Y(N)
CLL STA RTL
TAD NPTS
CIA
DCA CNTR
DRLOP2, TAD I TEMP /PUT Y(I) INTO Y(I+3)
DCA I TEMP1
STA
TAD TEMP
DCA TEMP
STA
TAD TEMP1
DCA TEMP1
ISZ CNTR
JMP DRLOP2
ISZ TEMP /PUT Y(1) INTO Y(2) & Y(3)
NOP /PROTECT AGAINST SKIP!!
TAD I TEMP
DCA I TEMP1
TAD I TEMP1
ISZ TEMP
DCA I TEMP
DISPLAY
PLS5, 5
SHF, 764
SQEEZE, TAD NPTS /COMPRESS ONE OR BOTH BUFFERS
CLL RAR /BY AVERAGING ADJACENT PTS.
DCA NPTS
STA
TAD BLOCK
SPA SNA CLA /BLOCK=2 FOR DOUBLE SQUEEZE?
JMP .+3 /NO
DCA BLOCK /SQUEEZE BUFF. 1 FIRST
STA
DCA TEMP /=-1 FOR DOUBLE SQUEEZE, 0 FOR SINGLE
INITAR
CDF 10
SQLP, TAD I YIND
TAD I YIND
CLL IAC RAR
DCA I ZIND
ISZ CNTR
JMP SQLP
ISZ TEMP /FINISHED?
DISPLAY /YES OR IS SINGLE SQUEEZE
IAC /NO, DO BUFF. 2
DCA BLOCK
JMP SQLP-2
*3745
PS8X, TAD M76LOK /TEST FOR PS8 PAGE 7600/1 IN FIELD 0.
SZA CLA
JMS M76TF1
CDF CIF 0
IOF
JMP I .+1
7600
*4000
/THIS IS THE AVERAGER INPUT ROUTINE
ANINPT, HEDIT1 /CHANNEL=
HD7
GETNO
FIXT
DCA MCHAN
AGO, HEDIT1 /NO. POINTS=
HD2
GETNO
FIXT
DCA TEM3
TAD TEM3
CLL RTR
DCA NPTS /TEMP'LY SET TO # PTS/4
CALL XSET /GET 4*X DISP. INCREMENT
TAD TEM3
DCA NPTS
HEDIT1 /SEC/SCAN=
HD8
ENTR
FGET NPTS
FLOT
FPUT XMIN
READ
FDIV XMIN
FPUT XMIN /=TIME PER POINT (SEC)::=M*2**X
FEXT
TAD PK15 /MIN TIME ALLOWED=2**-13 SEC/PT
TAD EW /OR 122 USEC
SPA SNA /X<-12?
JMP AGO /YES, TOO FAST! REENTER.
DCA EW
STL IAC RTR
DCA HW /SET FAC=-0.5*2**(X+13)
FIXT /IF X+13>11, TRUNCATES FAC TO -0.5*2**11
DCA AVSUM
TAD AVSUM
FLOAT
STA
TAD EW
DCA EXPFC /KEEP 2'S EXP FOR SCALING LATER
ENTR /COMPUTE DEAD TIME LOOP COUNTER, CLTM
FPUT YMIN /-# SAMPLES PER PT
FGET EXPFC
FLOT
FMPY SCNCY /# CYCLE PERLOOP IN SHRGT
FADD NCY /OTHER OVERHEAD
FPUT FTEM2
FGET XMIN /# SECS PER PT
FDIV CYCTM /FAC=TOTAL # CY'S NEEDED PER PT/3
FSUB FTEM2 /OVERHEAD CY'S PER PT/3
FDIV YMIN /DIV BY -# SAMPLES/PT=-#CY'S/SAMPLE
FADD FUGCY /OVERHEAD CY'S PER SAMPLE/3 IN LOOP 'ADDUP'
FMPY HALF /DIV BY TWO TO GET 12 BIT UNSIGNED RESULT
FEXT /FAC=-# DELAY CY'S NEEDED PER SAMPLE/6
FIXT
SMA /RESULT MUST BE NEG.
JMP AGO /TOO FAST!!
CLL RAL /TIMES 2 FOR 12 BIT UNSIGNED RESULT
DCA CLTM
TAD LW /ROUNDOFF?
SPA CLA
ISZ CLTM /YES, SET BIT 11
HEDIT2 /DELAY TIME(SEC)=
ENTR
READ
FMPY I HUNDRD
FEXT
FIXT
CIA
SMA /DELAY>10 MSEC?
CLA /NO, DELAY = 0
DCA DLATM /IS -100*SEC AS ENTERED
HEDIT2 /NO. SCANS=
GETNO
FIXT
CIA
DCA PCTR
DCA RUN
CRLFD
INITAR
TAD NPTS
CLL CMA RAL
DCA TEMP
CDF 10
DCA I YIND
ISZ TEMP /CLEAR THAT ARRAY.
JMP .-2
CAF
DCA MCTR
JMP I ESRNMR /GO WAIT FOR EVENT
PK15, 15
ESRNMR, LOOKER
CURLS, CRLFD /LIST CURSOR VALUES:
TAD FIVE
DCA DP /4 DIGIT INTEGERS
ISZ EFLG
TAD CLPT
DCA AUTO
TAD NEG4
DCA TEMP1
CUR1, TAD I AUTO /PRINT AS X1,Y1,X2,Y2
FLOAT
FLOUT
ISZ TEMP1
JMP CUR1
DISPLAY
CLPT, TPNT-1
/SPECIAL ROUTINE TO RESET
CALSET, HEDIT1 /MACHINE CYCLE TIME FOR
HDSP /ACCURATE CALIBRATION.
ENTR
READ
FMPY FK3
FPUT CYCTM /3*CYCLE TIME
FEXT
CRLFD
DISPLAY /EXIT
/NEXT 4 CONSTANTS SET TIMING FOR AVERAGER
CYCTM, 7756;3614;5704 /IS 3* MACHINE CYCLE TIME
FUGCY, 3;3525;1770 /IS # CYCLES IN LOOP 'ADDUP'/3
NCY, 4;3600;0 /IS # OVERHEAD CYCLES PER PT/3
SCNCY, 3;2125;1770 /# CYCLES IN SCLRT LOOP/3
*4200
STAVR, CLA CLL
TAD XLIM
DILX
DCA XDIS
TAD DLATM
SNA /NEED ANY DELAY?
JMP .+3 /NO
CALL CLKSET
5201 /TICKS AT 100 CPS
TAD MCHAN
ADLM
INITAR
CDF 10
GOSUM, DIXY
TAD AVSUM /THIS ROUTINE TAKES ADC
DCA LNCTR /SAMPLES, -AVSUM IN #, IN A TIME
DCA HIORD /PER SAMPLE VARIED BY CLTM
DCA LOORD /BASE TIME PER SAMPLE=23 CYCLES
ADDUP, ADST /OVERHEAD/PT=49+EXPFC*13 CYCLES
TAD CLTM
DCA TMCTR
ISZ TMCTR
JMP .-1 /ADD SOME TIME BETWEEN SAMPLES
ADRB
DILY
TAD K1000 /MAKE ALL RESULTS POS.
CLL
TAD LOORD /STORED AS DOUBLE PREC. INTEGER
DCA LOORD
RAL /LOORD OVERFLOW SETS LINK
TAD HIORD
DCA HIORD
ISZ LNCTR
JMP ADDUP
TAD EXPFC
SZA /NEED TO SHIFT RIGHT?
JMS SHRGT /YES, DO IT
CLA IAC
TAD XDIS
DILX
DCA XDIS
TAD LOORD
CLL
TAD I YIND /ADD TO CURRENT SCAN SUM
DCA I ZIND
RAL
TAD I YIND
DCA I ZIND
ISZ CNTR
JMP GOSUM
CDF 0
ISZ RUN /IS NO OF SCANS TAKEN
ISZ PCTR /INCR. COUNTER; MORE SCANS?
JMP I LOOK /YES. WAIT FOR NEXT EVENT
AVDON, INITAR /NO, WE'RE FINISHED.
ENTR /PREPARE TO NORMALIZE THE 24
FGET RUN /BIT Y STORAGE DOWN TO 12 BITS
FLOT
FPUT TEMFP /BY DIVIDING BY NO. OF SCANS
FEXT
DIVD, CDF 10
TAD I YIND /FLOAT DUBL PREC INTEGER
DCA LW
TAD I YIND
DCA HW
CDF 0
TAD P27
DCA EW
ENTR
FNOR
FDIV TEMFP /DIVIDE BY # SCANS TAKEN
FADD HALF
FEXT
FIXT
CDF 10
DCA I ZIND /SAVE SINGLE PREC RESULT
ISZ CNTR
JMP DIVD
DISPLAY
LOOK, LOOKER
SHRGT, 0
CIA CLL
DCA LNCTR
SCLRT, TAD HIORD
CLL RAR
DCA HIORD
TAD LOORD
RAR
DCA LOORD
ISZ LNCTR
JMP SCLRT
JMP I SHRGT
/CALLED TO REPORT ON PEAK RESULTS
REPRT, HEDIT1 /X1,XMPY,GATE:=
HD4
ENTR
READ
FPUT YSCLFC
READ
FPUT XSCLFC
READ
FEXT
FIXT
CIA /IS DETECTION SENSITIVITY
CALL PICPK /GET PEAKS
TAD MIN
CIA
TAD MAX
DCA MAX /IS LARGEST PK HGT CORRECTED FOR BASELINE
HEDIT1 /MIN,X,MAX,X,A,I,%A:
HDRP
CALL IOASK /SET UP OUTPUT DEVICE
INITAR
TAD RUN
CIA
DCA PCTR /SET PK CNTR
ISZ XIND /POINT TO LDG MIN X VALUE
CDF 10
TAD I XIND
DCA TEMP
TAD TEMP
TAD YIND
DCA YIND
TAD TEMP
TAD CNTR
DCA CNTR
JMP I .+1
REP1
PICPK, PKPIC
*4400
LOOKER, KIE
CLSA
STA
CLZE
TAD K14
CLDE /ENABLE SCHMIDT TRIGGER EVENT 4
ION
STLOOP, KSF /WANT TO CHANGE SCALE OR STOP?
JMP LOOPIT /NO
CLSA /CLR FLAG
KRB
TAD MD
SNA /'D' TO DECREASE SIZE?
ISZ MCTR
NOP
IAC
SNA /'C' TO CHECK DISPLAY?
IOF /YES, TURN INTERRUPT OFF
TAD MM
SZA /'M' TO INCREASE SIZE?
JMP MORE /NO
STA
TAD MCTR
DCA MCTR
MORE, TAD MS
SNA /'S' FOR STOP?
JMP ENDCHK /YES
TAD MPE
SNA CLA /'P' TO PROCEED?
ION /YES, TURN INTERRUPT ON
LOOPIT, INITAR
CDF 10
TAD I YIND /LOW ORDER
DCA LOORD
TAD I YIND /HIGH ORDER
CDF 0
DCA HIORD
SET6
TAD YIND /GET EVERY 4TH VALUE
DCA YIND
TAD MCTR
SMA SZA /MCTR>0, I.E. NEED DIVIDE?
CALL ISHRT
SMA /MAGNIFY IT?
JMP DSPIT /DO NEITHER
DCA LNCTR /YES
TAD LOORD /VALUE IS ACTUALLY SINGLE PREC.
CLL RAL /MULT. BY 2
ISZ LNCTR
JMP .-2 /MULT. AGAIN
SKP
DSPIT, TAD LOORD
TAD YLIM
DCA YDIS
CALL DISMOV /MOVE POINT ON SCOPE
CALL ADINX /GET & INCR. X COORD
SET4
TAD CNTR
SMA /MORE PTS?
JMP STLOOP /NO
DCA CNTR /YES
JMP LOOPIT+1
ENDCHK, IOF
HEDIT1 /NO. OF SCANS=
HD9
TAD FIVE
DCA DP
ISZ EFLG
TAD RUN
FLOAT
FLOUT
CRLFD
JMP I .+1
AVDON
ISHRT, SHRGT
K14, 14+1
MD, -304
MM, 303-315
MS, 315-323
MPE, 323-320
XFLIP, INITAR /INVERT X AXIS
TAD YIND /Y(I)=Y(NPTS+1-I)
TAD NPTS
DCA TEMP
TAD CNTR
STL RAR
DCA CNTR
CDF 10
FLX, TAD I YIND
DCA TEMP1
TAD I TEMP
DCA I ZIND
TAD TEMP1
DCA I TEMP
STA
TAD TEMP
DCA TEMP
ISZ CNTR
JMP FLX
DISPLAY
MULP, HEDIT1 /MIN=
HD5
GETNO
FIXT
DCA MIN
HEDIT1 /MPY=
HD5+6
ENTR
READ
FPUT YSCLFC
FEXT
JMP I .+1 /EXIT TO SCALING ROUTINE
SKL-1
HDRP, TEXT /^MIN,X,MAX,X,A,I,%A:^/
/CALLED FROM REPRT TO GET AREAS & PRINT OUTPUT
*4600
REP1, DCA FTEM2
DCA FTEM2+1
DCA FTEM2+2
SWL1, CDF 10
SET2
TAD XIND
DCA ZIND /POINT TO AREA
DCA FTEM1
DCA FTEM1+1
DCA FTEM1+2
SET6
TAD XIND
DCA AUTO /GET TRAILING MIN X VALUE
TAD I AUTO
CIA
TAD NPTS
DCA TEMP
INL1, TAD MIN /LOOP TO GET AREA BETWEEN MINIMA
CIA /SUBTRACT MIN FROM Y
TAD I YIND
FLOAT
ENTR
FADD FTEM1
FPUT FTEM1
FEXT
CDF 10
ISZ CNTR
NOP
TAD CNTR
TAD TEMP
SPA CLA /CNTR=TRAILING MIN VALUE?
JMP INL1 /NO
TAD FTEM1 /STORE AREA IN ARRAY
DCA I ZIND
TAD FTEM1+1
DCA I ZIND
TAD FTEM1+2
DCA I ZIND
CDF 0
ENTR
FADD FTEM2 /ADD TO TOTAL AREA
FPUT FTEM2
FEXT
TAD PK7
TAD XIND
DCA XIND
ISZ PCTR /ANOTHER PK?
JMP SWL1 /YES
INITAR /NO, SET UP TO OUTPUT
TAD RUN
CIA
DCA PCTR
ENTR /GET HGT SCALE FACTOR
FGET MAX
FLOT
FDIV I HUNDRD
FPUT TEMFP
FEXT
OLP1, CRLFD
SETM2
DCA MCTR
SET6
DCA DP
ISZ EFLG
SETM2
DCA TEM2
OLP2, CDF 10 /LOOP TO OUTPUT RAW MIN, X VALUE, MAX, X VALUE
TAD I XIND
FLOAT
ISZ TEM2
JMP OLP3
ENTR
FMPY XSCLFC
FADD YSCLFC /ADD X1
FEXT
SET2
FOUTCM
ISZ MCTR
JMP OLP2-2
JMP OLP4
OLP3, FOUTCM /AS INTEGERS
JMP OLP2
OLP4, CDF 10 /LOAD AREA INTO FAC
TAD I XIND
DCA EW
TAD I XIND
DCA HW
TAD I XIND
DCA LW
DCA EFLG /E FORMAT
CDF 0
ENTR
FPUT FTEM1
FMPY XSCLFC
FEXT
FOUTCM /RAW AREA
TAD MK5
TAD XIND
DCA AUTO /PNTR TO HGT
CDF 10
TAD MIN /SUBTRACT BASELINE
CIA
TAD I AUTO
FLOAT
ENTR
FDIV TEMFP /NORMALIZE IT
FEXT
TAD PK10 /8 DIGITS
DCA DP
ISZ EFLG
SET2 /2 DECIMAL PLACES
FOUTCM
ENTR
FGET FTEM1 /GET RAW AREA BACK
FDIV FTEM2 /NORMALIZE IT
FMPY I HUNDRD
FEXT
SET4
FOUTCM /4 DECIMAL PLACES
ISZ PCTR /ANOTHER PK?
JMP OLP1 /YES
DISPLAY /NO, BACK TO DISPLAY
PK10, 12
MK5, -5
PK7, 7
*5000
/ROUTINE TO DO SIMPLE AMPLITUDE PEAK DETECTION AND
/STORE RESULTS IN ARRAY JUST AFTER DATA ARRAY
PKPIC, 0
DCA AVSUM /SAVE AC AS GATE (-N)
DCA RUN /CLR FLAGS, CNTRS
INITAR
INIPK, CLA IAC /START HERE AFTER A PK IS FOUND
DCA PS1
DCA PS2
DCA S1C
DCA S2C
DCA MAX
STL RTR
DCA MIN
CDF 10
SERLP, TAD I YIND /GET DATUM
DCA TEMP
TAD MIN
CIA
TAD TEMP
SMA /YMAX?
JMP SERND /NO
TAD TEMP /YES, SAVE IT
DCA MAX
TAD CNTR /KEEP AS X VALUE
DCA MXT
ISZ S2C /BUMP MAX CNT
TAD S2C
TAD AVSUM
SPA CLA /HAD A GATE'S WORTH?
JMP SERND /NO
DCA S1C /YES
TAD PS1
SNA CLA /HAD PRECEDING MIN?
JMP SERND-2 /NO
ISZ PS2 /YES, SET PS2
DCA PS1
TAD MIN /SAVE LEADING MIN
DCA KMIN
TAD MNT /AND X VALUE
DCA KMNT
TAD MAX /RESET MIN
DCA MIN
SERND, ISZ CNTR /MORE PTS?
JMP SERLP /YES
TAD MNT /SET TRAILING MIN TIME
DCA KMNT
JMS STPEK /NO, SAVE END RUN MIN
CDF 0
CALL YSCAN /GET MIN & MAX IN DATA
JMP I PKPIC
YSCAN, SCANY
/BUFFER PK VALUES IN ARRAY AT END OF DATA
STPEK, 0
TAD KMIN
DCA I XIND
TAD KMNT /ADD NPTS TO X VALUES TO GET PT CNT
TAD NPTS
DCA I XIND
TAD MAX
DCA I XIND
TAD MXT
TAD NPTS
DCA I XIND
SET3 /RESET PNTR TO LEAVE HOLE FOR PK AREA
TAD XIND
DCA XIND
JMP I STPEK
HD1, TEXT /^DAQUAN OS-8 !^TITLE:/
TEXT /^OK, HIT ME!^/
HD2, TEXT /^NO. POINTS= /
TEXT /PTS. TO SKIP=/
HD3, TEXT /LINE PLOT?/
HD4, TEXT /X1,XMPY,GATE:/
HD5, TEXT /^MIN=/
TEXT /MAX=/
TEXT /MPY=/
HD6, TEXT /PLOTTER OFF?/
HD7, TEXT /CHANNEL= /
HD8, TEXT \SEC/SCAN=\
TEXT /DELAY(SEC)=/
HD9, TEXT /NO. SCANS= /
HD15, TEXT /SCAN INT'L?/
TEXT /AREA=/
HD25, TEXT /STRIP PEAK?/
TEXT /FULL BASE?/
HD26, TEXT /BAD X PTS!^/
DIHD1, TEXT /^Y RANGE & MIN:/
HDSP, TEXT /MCT(SEC)=/
/THE FOLLOWING ARE A SET OF OVERLAYS
/FOR FLOATING POINT PKGS. #1,2, & 4
/WHICH ALLOWS INPUT FROM THE HIGH
/OR LOW SPEED READERS. SET IOSWT=1 TO USE
/THE HIGH SPEED READER OR PUNCH.
/HERE ALSO IS AN OVERLAY WHICH ALLOWS
/BLANKS TO FOLLOW A + OR - SIGN ON INPUT.
/PLUS SIGNS ARE DELETED FROM OUTPUT.
*54
IOSWT, 0
0
*6146
JMS I .+2
JMP .+2
SELECT
*6345
INPUT, 0 /THIS IS THE INPUT OVERLAY
TAD IOSWT /CHECK I/O SWITCH
CLL RAR
SZL CLA /SETS LINK FOR HI SPD RDR.
JMP .+3 /USE HI SPD RDR.
RDTTY
SKP
CALL HSRI
CHECK, DCA 53
TAD 53
SNA
JMP INPUT+1
TAD MRBOUT
SZA CLA
JMP GOOD
TAD XCPT /PRINT '!' IF RUBOUT.
CALL OUTPT /NO
JMP I RESTRT
GOOD, TAD 53
JMP I INPUT
OUTPT, SELECT
RESTRT, 6201
HSRI, HSR
XCPT, 241
MRBOUT, -377
*7242
READER
*7245
INTFLT
HEDER2
$