File AAVG4.

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

/LAB8E ADVANCED AVERAGER MS-SECTION 4,DISPLAY AND OUTPUT.
/
/DEC-8E-AAA4A-A-LA
/
/COPYRIGHT 1972
/DIGITAL EQUIPMENT CORPORATION
/MAYNARD, MASSACHUSETTS 01754
/

/FILE AD4.1 /SECTION IV OF THE LAB8/E ADVANCED AVERAGER . /THIS IS PART 4 OF ADVANCED AVERAGER FOR OS-8. /OVERLAY FOR PS8. *7557 OVRLAY, IOF CLA CLL CMA CLZE /DISABLE CLOCK CLA ADCL /AD DILC /DISPLAY DBDI /I/O CDF 0 /CHAIN IN WRITE DATA TO DISK DCA I KC7746 /0 PS8 JOB STATUS WORD. TAD I XXOV4A /OVERLAY. DCA XXOV4 CIF 10 JMS I CHAIN 6 XXOV4, 0 CHAIN, 7700 XXOV4A, PG0OV+2 PG0OV=5 MONITR=7600 CLZE=6130 ADCL=6530 DILC=6050 DBEI=6501
/LAB-8 ADVANCED AVERAGER - SECTION 4 - [U63A.4] /COPYRIGHT 1971, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. 01754 /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
/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 /COMBINED OPERATES MTH=CLA CMA CLL RTL; MTW=CLA CMA CLL RAL TWO=CLA CLL CML RTL; TWOK=CLA CLL CML RTR BSW=7002 /EXTENDED MEMORY CDF=6201; RDF=6214; RMF=6244
/PAGE ZERO /CONSTANTS *112 K0004, 0004 K0003, 0003 K0002, 0002 KM0001, -1 K0007, 7 KM0027, -27 K0377, 377 KM0004, -4 K0005A, 0005 K0200, 200 KM1000, -1000 KM1777, -1777 K6777, 6777 KC7600, 7600 /LINKAGES *132 6341 /BRAN 6302 /SHFT 6362 /DADD KSTART, START /SUBROUTINE TO READ VALUE OF A KNOB *20 START0, CDF 10 TAD I KC7600 /RESTORE BLOCK ADD. FOR CHAIN IN LOC 7. /SAVED BY SEC 3. CDF 0 DCA 7 JMP I KSTART KNOBS, 0 ADLM /LOAD MUX ADST /START CONVERSION ADSK /WAIT JMP .-1 ADRB /READ RANGE: 777,-1000 CIA /RANGE -777 TO 1000 TAD K6777 /RANGE -3777, -1 JMP I KNOBS /SUBROUTINE TO LOAD Y DAC AND DISPLAY DOY, 0 DILY /LOAD Y DISD /WAIT FOR SETTLE JMP .-1 DIXY /DISPLAY JMP I DOY /SUBROUTINE TO ALLOW KNOB 3 TO CONTROL PLOT SPEED DELAY, 0 DCA ACWAIT CLL CLA CML IAC RAL /AC=3 JMS KNOBS /READ AND BIAS KNOB 3 CLAB /LOAD CLOCK COUNTER CLSA /AND WAIT SNA CLA JMP .-2 /FOR OVERFLOW TAD ACWAIT JMP I DELAY ACWAIT, 0
*6400 /THIS SECTION DISPLAYS, SCALES, AND OUTPUTS M, C, 1000T /MAIN DISPLAY AND INITIATION FOR SECTION 5 START, TAD I K0200 /SET JOBLIST POINTER TO FIRST JOB IAC DCA JPNTR /JOB LIST POINTER JPNTR=10 DCA SFACTR /PRESET SCALE FACTOR SFACTR=TEMP32 TAD KPLOT /AUTO RESET AT 1 MS A TICK CLOE CMA CLZE DISJOB, CLA CMA DCA PMODE /PMODE .NE. 0 FOR NO PLOT PMODE=TEMP31 JMS I JSETX /SETUP DATA POINTERS, COUNTERS, DISPLAY TAD TJTYPE /GET #LOC TO SKIP OVER WHEN DISPLAYING MEAN BRAN K0003 IAC /SD. AND TREND, SKIP 3 TAD K0002 /S.D., SKIP 2 DCA TSKIP TSKIP=TEMP15 KSF /KBD STRUCK? JMP DISAVG /NO, GO DISPLAY KRB /YES, GET CHARACTER BRAN /CHECK AGAINST RESPONSE LIST KBDLST MTW /X - EXPAND, SCALE UP JMP NEWSF /C - CONTRACT, SCALE DOWN JMP DISJOB+1 /P - GO TO PLOT MODE JMP I PGRIDX /G - PLOT GRID JMP I TDATAX /T - TYPE DATA JMP I KALIBX /K - CALIBRATE PLOTTER JMP NXTJOB /CR - DISPLAY NEXT JOB JMP I IDATAX /I - INTEGRATE JMP I OVRLAX /^W - WRITE DATA. JMP I PS8 /RETURN TO PS8. JMP START /^Z - FIRST JOB KECHO, TAD TEMP02 /ECHO JMS I TYPEX DISAVG, JMS GDATAS /GET M (2 WDS) AND SCALE JMS I DISPX /DISPLAY M/2^K JMS I BLKCNX /MOVE TO NEXT, CHECK FOR END JMP DISAVG /NOT ENDED, DISPLAY NEXT POINT CLA CMA /ENDED, IS JOB TYPE=1? TAD TJTYPE /(1 FOR MEAN ONLY) SNA CLA JMP DISEND /YES, DISPLAY OF JOBS IS DONE JMS I JSETX /NO, SETUP TO DISPLAY MEAN + CF'S
DISPSD, JMS GDATAS /GET M AND SCALE DCA TMEAN /SAVE M/(2^K) TMEAN=TEMP02 JMS GDATAS /GET 2S/SQRT(N) AND SCALE TAD TMEAN /[M+2S/SQRT(N)]/2^K JMS I DISPX /DISPLAY IT MTW /SKIP OVER TREND IF PRESENT JMS I BLKCNX /MOVE TO NEXT DATA POINT, CHECK FOR END JMP DISPSD /NOT ENDED, DISPLAY NEXT POINT JMS I JSETX /ENDED, SETUP FOR DISPLAY OF MEAN - CF DISMSD, JMS GDATAS /GET NM AND SCALE DCA TMEAN /SAVE M/2^K JMS GDATAS /GET 2S/SQRT(N) AND SCALE CMA IAC TAD TMEAN /[M-2S/SQRT(N)]/2^K JMS I DISPX /DISPLAY IT MTW /SKIP OVER TREND IF PRESENT JMS I BLKCNX /ANY MORE POINTS? JMP DISMSD /MORE POINTS TO DISPLAY, CONTINUE MTW /IS JOB TYPE=3? TAD TJTYPE /(3 FOR AVG, CF, AND TREND) SNA CLA JMP DISEND /NO, DISPLAY OF THIS JOB IS DONE JMS I JSETX /YES, SETUP TO DISPLAY 1000T DCA TSKIP /SKIP NO POINTS AFTER TREND DISTRN, TAD K0004 /SKIP MEAN AND CF TAD GETPNT DCA GETPNT JMS I GCDFSX /GET 1000T CDF 0 /(*) CLL RTR RTR AND K0377 TAD KM0775 JMS I DISPX /DISPLAY RANGES FROM -377+0 TO -377+177 JMS I BLKCNX /MOVE TO NEXT DATA PNT, CHECK FOR DONE JMP DISTRN /NOT DONE. DO NEXT POINT DISEND, TAD PMODE /NO MORE POINTS IN THIS JOB SZA CLA /ARE WE PLOTTING? JMP DISJOB /NO, RESTART JOB JMS I TMESSX /TYPE "DONE..." AND WAIT FOR CR DONE-1 JMP DISJOB /RESUME DISPLAY MODE
/SUBROUTINE TO GET DBL DATA WORD AND SCALE /RESULT IN ARITH2 AND AC GDATAS, 0 JMS I GCDFSX /GET CDF AND 1ST WORD DCA ARITH1 /SAVE IN HI FAC (*) TAD I GETPNT /GET LO ORDER PART (*) DCA ARITH2 /(*) CDF 0 /BACK TO FIELD 0 (*) TAD SFACTR /SCALE SHFT TAD ARITH1 JMP I GDATAS /NEW SCALE FACTOR NEWSF, CMA /AC=-1 FOR C, +1 FOR X TAD SFACTR DCA SFACTR JMP KECHO /LOCAL CONSTANTS K4077, 4077 KM0775, -775 KPLOT, 5400 /LOCAL CROSSPAGE JSETX, JSETS TYPEX, TYPES GCDFSX, GCDFS BLKCNX, BLKCNS KALIBX, KALIB PGRIDX, PGRID TDATAX, TDATA DISPX, DISPS TMESSX, TMESS IDATAX, IDATA OVRLAX, OVRLAY PS8, 7600
*6567 /SAVE SCALE AND GO TO NEXT JOB NXTJOB, TAD JPNTR /MASK SCALE FACTOR INTO J1 BITS 8-11 DCA PJPNT /ADDRESS OF J1 FOR CURRENT JOB PJPNT=TEMP01 TAD I PJPNT /J1: A/B(1), SF(5), 1(1), CHORD(5) AND K4077 /MASK OUT OLD SF DCA I PJPNT /J1: A/B(1), 0(5), 1(1), CHORD(5) TAD SFACTR SPA /SCALE FACTOR LESS THAN 0 ILLEGAL CLA BSW AND K3700 TAD I PJPNT /J1: A/B(1),0(5), 1(1), CHORD(5) DCA I PJPNT /J1: A/B(1), SF#(5), 1(1), CHORD(5) TAD K0006 /MOVE TO NEXT JOB TAD JPNTR DCA JPNTR JMS CRLFS /TYPE <CRLF> TAD I JPNTR SZA CLA JMP I DISJOX /DISPLAY NEXT JOB JMP I .+1 /NO MORE JOBS, DISPLAY FIRST AGAIN START /LOCAL CONSTANT K0006, 6 K0212, 0212 K3700, 3700 /LOCAL CROSSPAGE DISJOX, DISJOB TMESSY, TMESS GCDFY, GCDF DISPY, DISPS
/SUBROUTINE TO SET UP DATA POINTERS, COUNTERS, AND DISPLAY JSETS, 0 TAD I JPNTR /GET J2 TYPE (4), SORT CODE (8) RTL /PUT TYPE IN AC8-11 RTL RAL AND K0017 /MASK OUT REST OF J2 DCA TJTYPE /TYPE CODE TJTYPE=TEMP30 TAD I JPNTR /J3: LINK 1 (- COUNT OF FIRST BLOCK) DCA BLCNTR BLCNTR=TEMP25 TAD I JPNTR /J4: LINK 2 (DATA FIELD FOR FIRST BLOCK) DCA I GCDFY TAD I JPNTR /J5: LINK 3 (START OF FIRST BLOCK-1) IAC DCA GETPNT GETPNT=12 TAD I JPNTR /J6: DELTAX (8), YSCALE (4) DCA ARITH2 /PREPARE TO SHIFT TO SETUP BINARY POINT OF DX DCA ARITH1 TAD K0005A /DELTAX (8): INTEGER PART (5), FRACTION (3) SHFT TAD ARITH1 DCA DELTAX DELTAX=TEMP21 TAD ARITH2 DCA DELTAX+1 TAD KM0005 /MOVE JOB POINTER BACK TO TOP OF JOB TAD JPNTR DCA JPNTR TAD PMODE /PLOT MODE? SZA CLA JMP CHAS JMS I TMESSY /TYPE "LIFT..." AND WAIT FOR <CR> LIFT-1 CHAS, TAD KM1000 DILX /SET DISPLAY X TO LEFT EDGE DCA ARITH4 /SAVE IN FOP+1 DILY DCA YLAST YLAST=TEMP16 TAD KM0012 /DISPLAY CALIBRATION MARK DCA PCNTR PCNTR=TEMP02 JMS I DISPY /10 SAMPLING INTERVALS HORIZONTALLY ISZ PCNTR JMP .-2 TAD K0062 /AND 50 COUNTS (100 MV) VERTICALLY ED, TAD KM0001 JMS DOY /HEIGHT OF MARKER =100 MV AT THE A/D SZA JMP ED
JMS KNOBS /GET CURRENT CURSOR SETTING FROM KNOBS 0 AND 1 DCA CURSE1 CURSE1=TEMP20 CLA IAC JMS KNOBS DCA CURSE2 CURSE2=TEMP17 TAD KM1000 DILX /RESET DISPLAY DCA ARITH4 TAD PMODE /PLOT MODE? SZA CLA JMP HERE /NO, CONTINUE JMS I GDATAX DILY DIXY CLL CMA CLA RAL TAD GETPNT DCA GETPNT JMS I TMESSY /TYPE "LOWER..." AND WAIT FOR <CR> LOWER-1 HERE, JMP I JSETS /LOCAL CONSTANTS K0017, +17 GDATAX, GDATAS K0034, +34 K0062, 62 K0215, 215 KM0005, -05 KM0012, -12 ADGRID, GRDLIS
/SUBROUTINE TO TYPE ASCII IN AC TYPES, 0 TLS TSF JMP .-1 TCF CLA JMP I TYPES /SUBROUTINE TO TYPE <CRLF> CRLFS, 0 TAD K0215 JMS TYPES TAD K0212 JMS TYPES JMP I CRLFS /TTY MESSAGES... LOWER, 314 /L 317 /O 327 /W 305 /E 322 /R 0 /END GAIN, 307 /G 301 /A 311 /I 316 /N 0 /END DONE, 317 /O 306 /F 306 /F 0 /END /PLOT CALIBRATION GRID PGRID, TAD KM1000 /GO TO LOWER LEFT CORNER DILX DCA XPOS XPOS=TEMP31 TAD ADGRID /LIST OF CALIBRATION VECTORS DCA GRDPNT GRDPNT=TEMP27 TAD KM1000 JMS DOY DCA YPOS YPOS=TEMP30 JMS I TMESSZ /"LIFT" LIFT-1 JMS I TMESSZ /"LOWER..." LOWER-1
PLOOP, JMS PLSET /GET NEXT (Y) VECTOR TAD YPOS /GET LAST POSITION FOR Y JMS DOY /PLOT Y POSITION, X UNCHANGED JMS PLMOVE /GET NEXT VALUE JMP .-2 /CONTINUE VECTOR DCA YPOS /UPDATE Y POSITION JMS PLSET /GET NEXT (X) VECTOR TAD XPOS /GET LAST POSITION FOR X DILX /PLOT X-POSITION, Y UNCHANGED DISD JMP .-1 DIXY JMS PLMOVE /GET NEXT VALUE JMP .-5 /CONTINUE VECTOR DCA XPOS /UPDATE X POSITION JMP PLOOP /GET NEXT VECTOR PLDONE, PGRID /YES, /CALIBRATE X-Y PLOTTER KALIB, TAD K0777 /SET X AND Y OUTPUTS TO MAX VOLTAGE DILY /Y=+777 DILX /X=777 CLA JMS I TMESSZ /"BIAS..." BIAS-1 /SET X AND Y OUTPUTS TO MIN VOLTAGE TAD KM1000 /X=-1000, Y=-1000 DILY DILX CLA JMS I TMESSZ /"GAIN..." GAIN-1 JMP KALIB /SUBROUTINE TO SETUP FOR NEXT GRID VECTOR PLSET, 0 TAD I GRDPNT /GET NEXT GRID VECTOR SNA /IF 0, DONE JMP I PLDONE SMA /GET MAGNITUDE OF DISTANCE CMA IAC /(NEGATIVE FOR USE AS COUNTER) DCA PLCNT PLCNT=TEMP26 TAD I GRDPNT ISZ GRDPNT SPA CLA /EITHER +1 OR -1 MTW IAC DCA PLINCR PLINCR=TEMP25 JMP I PLSET
/SUBROUTINE TO GET NEXT POSITION IN VECTOR PLMOVE, 0 JMS DELAY TAD PLINCR /ENTER WITH OLD POSITION IN AC ISZ PLCNT /LEAVE WITH NEW POSITION JMP I PLMOVE /EXIT TO CALL+1 IF MORE VECTOR ISZ PLMOVE /EXIT TO CALL+2 IF VECTOR DONE JMP I PLMOVE /SUBROUTINE TO DISPLAY POINT: SCALE, BIAS, INCREMENT X DISPS, 0 DCA YSAVE YSAVE=TEMP14 TAD YSAVE TAD YLAST /GET DISTANCE FROM LAST POINT SMA CMA DCA SLUCNT /PEN DELAY PROPORTIONAL TO DISTANCE SLUCNT=TEMP01 TAD ARITH4 /X FOR NEXT POINT DILX CLA TAD YSAVE /GET POINT JMS DOY /DISPLAY IT CMA IAC DCA YLAST /SAVE AS LAST POINT TAD PMODE /RUNNING PLOTTER? SZA CLA JMP DXINC /NO, INCREMENT X AND CONTINUE JMS DELAY ISZ SLUCNT /TIME PROPORTIONAL TO DISTANCE TRAVELLED JMP .-2 DXINC, TAD DELTAX /SETUP X FOR NEXT POINT DCA ARITH1 TAD DELTAX+1 DCA ARITH2 DADD /INCREMENT BY DISTANCE BETWEEN POINTS JMS CURSES /CURSOR REACHED? SKP /YES JMP I DISPS /NO TAD KM0027 DCA CRCNTR CRCNTR=TEMP01 /INTENSIFY CURSOR DIXY ISZ CRCNTR /POSITION JMP .-2 JMP I DISPS
/LOCAL CROSSPAGE TMESSZ, TMESS /LOCAL CONSTANTS K0777, 777 K1000, 1000 K0022, +022 /SUBROUTINE TO MOVE TOWARD CURSOR CURSES, 0 ISZ CURSE1 SKP /NOT AT CURSOR1 JMP I CURSES /EXIT, AT CURSOR1 ISZ CURSE2 ISZ CURSES /NOT AT CURSOR, EXIT TO CALL+2 JMP I CURSES /IF AT CURSOR2, EXIT TO CALL+1 /SUBROUTINE TO CHECK BLOCK AND LINK TO NEXT IF REQUIRED /EXIT TO CALL +2 IF END OF FILE REACHED BLKCNS, 0 TAD TSKIP /MOVE GETPNT TO NEXT DATA POINT TAD GETPNT DCA GETPNT ISZ BLCNTR /BLOCK COMPLETE? JMP I BLKCNS /NO, CONTINUE JMS GCDFS /YES, END OF FILE? SNA /L1: -COUNT FOR NEXT BLOCK (*) ISZ BLKCNS /END OF FILE EXIT TO CALL+2(*) DCA BLCNTR /RESET COUNTER(*) TAD I GETPNT /L2: CDF N (*) DCA GCDF /RESET DATA FIELD (*) TAD I GETPNT /L3: START OF NEW BLOCK-1(*) DCA GETPNT /RESET DATA POINTER(*) CDF 0 /(*) JMP I BLKCNS /SUBROUTINE TO SET DATA FIELD AND GET 1 WORD GCDFS, 0 GCDF, CDF /CURRENT DATA FELD TAD I GETPNT /GET DATA (*) JMP I GCDFS /(*)
/KEYBOARD LIST KBDCHK, +221 /CTRL/Q -215 /CR *7200 /TYPE DATA IN JOB TDATA, JMS PRETYP DCA TSKIP /SKIP NOTHING TYPLUP, TAD TJTYPE /JOB TYPE: 1, 2, OR 3 CMA IAC DCA TYPCNT TYPCNT=TEMP02 JMS I CRLFX /NEW LINE TAD CHANNL /TYPE DATA POINT # JMS NUMTYP JMS SHFTYP /TYPE SCALED MEAN IN MV ISZ TYPCNT /CF COMPUTED? SKP /YES JMP TYPEND /NO JMS SHFTYP /TYPE SCALED CF IN MV ISZ TYPCNT /TREND COMPUTED? JMS ABSTYP /TYPE 1000T TYPEND, JMS I CURSEY /REACHED SECOND CURSOR? JMP TYPDUN /YES ISZ CHANNL /NO JMS I BLKCNY /CHECK FOR END OF JOB JMP TYPLUP /NOT ENDED, CONTINUE TYPDUN, CLA CLL CMA TAD SFACTR DCA SFACTR JMS I CRLFX /NEW LINE JMP I DISJOY /DONE. RETURN TO DISPLAY /LOCAL CONSTANTS K0254, 254 /ASCII COMMA K0257, 257 KMD1K, -1750 /-1000(10) KMCTRL, -221 KMD100, -144 /-100(10) KMD010, -12 /-10(10) /LOCAL CROSSPAGE CRLFX, CRLFS TYPEY, TYPES BLKCNY, BLKCNS DISJOY, DISJOB GDATAY, GDATAS GCDFSY, GCDFS CURSEY, CURSES SGNTYX, SGNTYP
/GET DOUBLEWORD DATA POINT, SCALE BY 4, SIGN EXTEND, TYPE SIGNED SHFTYP, 0 JMS I GDATAY /GET DOUBLEWORD AND SCALE BY SF JMS I SGNTYX /TYPE SIGNED VALUE IN AC JMP I SHFTYP /TYPE ABSOLUTE VALUE SINGLE WORD IN DATA BLOCK ABSTYP, 0 JMS I GCDFSY /GET DATA WORD (*) CDF 0 /(*) JMS NUMTYP /TYPE DECIMAL VALUE IN AC JMP I ABSTYP /TYPE DECIMAL VALUE IN AC NUMTYP, 0 DCA ARITH4 /# TO RADIX DEFLATE TAD KMD1K /REDUCE BY FACTORS OF 1000(10) JMS GDIGIT /TYPE DIGIT FOR 1000'S TAD KMD100 /REDUCE BY FACTORS OF 100(10) JMS GDIGIT /TYPE DIGIT FOR 100'S TAD KMD010 /REDUCE BY FACTORS OF 10'S JMS GDIGIT /TYPE DIGIT FOR 10'S CLA CMA /REDUCE BY FACTORS OF 1 JMS GDIGIT /TYPE DIGIT FOR 1'S TAD K0254 JMS I TYPEY /TYPE 1 COMMA JMP I NUMTYP /SUBROUTINE SETS UP FOR TYPING PRETYP, 0 JMS I CRLFX /<CRLF> CLA CMA /MOVE POINTER BACK TO SWEEP COUNT TAD GETPNT DCA GETPNT JMS ABSTYP /# OF SWEEPS IN AVERAGE TAD SFACTR /SCALE FACTOR JMS I SGNTYX CLA CLL IAC /TYPEOUT IS IN MV (2MV/COUNT) TAD SFACTR DCA SFACTR DCA CHANNL /DATA POINT # INIT TO 0 CHANNL=TEMP16 PRESKP, JMS I CURSEY /LOOK FOR FIRST CURSOR JMP I PRETYP /FOUND IT, EXIT ISZ CHANNL /NO CURSOR YET, INDEX POINT # TWO JMS I BLKCNY /STEP THRU DATA POINT JMP PRESKP /MORE DATA POINTS, CONTINUE JMP TYPDUN /END OF DATA POINTS AND NO CURSOR, GO BACK TO DISPLAY.
/SUBROUTINE TO PRINT MESSAGE AND WAIT FOR CR TMESS, 0 TAD I TMESS /ADDR OF MESS-1 AT CALL+1 DCA TYPNTR TYPNTR=13 ISZ TMESS /EXIT TO CALL+2 TAD I TYPNTR /GET NEXT CHARACTER SNA /0 INDICATES END OF MESS. JMP TWAIT /END JMS I TYPEY /TYPE CHARACTER JMP .-4 /CONTINUE TWAIT, KSF /END, WAIT FOR CR JMP .-1 KRB BRAN KBDCHK JMP I DISJOY /^Q TYPED, RESTART DISPLAY JMS I CRLFX /C.R. TYPED, ECHO IT JMP I TMESS /OTHER OR CR, RESUME /FINDS DIGIT AND TYPES IT GDIGIT, 0 DCA ARITH1 /FACTOR TO DEFLATE BY DCA NDIGIT /DIGIT=0 NDIGIT=TEMP01 TAD ARITH4 GLOOP, DCA ARITH4 /SAVE NEW REDUCED ARGUMENT TAD ARITH4 /AND PREPARE TO REDUCE AGAIN CLL TAD ARITH1 /TRIAL SUBTRACTION ISZ NDIGIT /INDEX DIGIT SZL JMP GLOOP /SUBTRACT SOME MORE CLA /THAT'S ALL FOR THIS DIGIT TAD K0257 /DIGIT IS NDIGIT-1 TAD NDIGIT /TYPE ASCII JMS I TYPEY KSF /CHECK FOR CTRL Q JMP I GDIGIT /NO KEY, EXIT KRB /KEY, BUT IS IT CTRL Q? TAD KMCTRL SZA CLA JMP I GDIGIT /NO, EXIT JMP TYPDUN /YES RESUME DISPLAY /MESSAGE BIAS, 302 /B 311 /I 301 /A 323 /S 0 /END
/INTEGRATE DATA BETWEEN CURSORS IDATA, JMS PRETYP /INITIALIZE TYPEOUT TAD CHANNL /LO LIMIT OF INTEGRATION JMS NUMTYP DCA AVGSUM /CLEAR PARTIAL SUMS AVGSUM=TEMP21 DCA CFLSUM CFLSUM=TEMP22 DCA AVGFLG /CLEAR OFLO FLAGS AVGFLG=TEMP14 DCA CFLFLG CFLFLG=TEMP13 ILOOP, TAD AVGSUM /PREPARE TO UPDATE SUMS JMS UPSUM ISZ AVGFLG /OVERFLOW RETURN, SET FLAG DCA AVGSUM CLA CMA /CF'S COMPUTED? TAD TJTYPE SNA CLA JMP IDONE /NO, CONTINUE TAD CFLSUM /YES UPDATE THAT SUM JMS UPSUM ISZ CFLFLG /OVERFLOW RETURN, SET FLAG DCA CFLSUM MTW /ALREADY PAST CF'S. IDONE, ISZ CHANNL /UPDATE DATA POINT # JMS I BLKCNZ /MOVE TO NEXT DATA POINT JMS I CURSEZ /REACHED SECOND CURSOR? SKP /AT SECOND CURSOR OR OUT OF DATA JMP ILOOP /CONTINUE CLA CMA /GET # OF LAST DATA POINT TAD CHANNL JMS I NUMTYX TAD AVGSUM /TYPE SUM JMS SGNTYP TAD AVGFLG /TYPE OVERFLOW MARK JMS OMARK CLA CMA /CFLSUM CALCULATED? TAD TJTYPE SNA CLA JMP .+5 /NO, EXIT TAD CFLSUM /YES, OUTPUT INTEGRAL OF CFL'S. JMS I NUMTYX TAD CFLFLG /OVERFLOW MARK IF REQ. JMS OMARK JMP I .+1 /TYPE SOME CRLF, RESTORE SCALE FACTOR TYPDUN /AND RESUME DISPLAY
/SUBROUTINE TO TYPE SIGNED # IN AC SGNTYP, 0 DCA ARITH4 TAD ARITH4 SPA CLA /TYPE CORRECT SIGN: " " OR "-" TAD K0015 /MAKE A "-" TAD K240 JMS I TYPEZ TAD ARITH4 SPA CMA IAC /GET ABS VALUE JMS I NUMTYX /AND TYPE IT JMP I SGNTYP /LOCAL CROSSPAGE NUMTYX, NUMTYP BLKCNZ, BLKCNS CURSEZ, CURSES TYPEZ, TYPES GDATAZ, GDATAS /SUBROUTINE TO GET SUM OF AC AND NEXT DATA POINT UPSUM, 0 DCA INADD /SAVE ADDEND INADD=TEMP02 JMS I GDATAZ /GET AUGEND SPA /SET LINK BIT EQUAL TO SIGN BIT CML TAD INADD /ADD ADDEND DCA INSUM INSUM=TEMP03 TAD INADD /MODIFY LINK BIT IN ACCORD WITH SIGN SPA CLA CML TAD INSUM /WE HAVE FAKED A 13 BIT ADD SPA SZL /ARE THE LINK AND SIGN BITS EQUAL? CML CMA /1,1 TO 0,0; 0,1 TO 1,0; 1,0 TO 0,1 SMA SNL CLA /0,1 AND 1,0 ARE OVERFLOW ISZ UPSUM /L,S WERE 0,0 OR 1,1; NO OVERFLOW TAD INSUM /GET THE RESULT AND EXIT JMP I UPSUM /TO CALL+1 (OVRFLO) OR CALL+2 (NORMAL) /SUBROUTINE TO TYPE "^" IF OVERFLOW (AC#0) OMARK, 0 SNA CLA /AC=0? JMP I OMARK /YES, EXIT TAD K0336 /NO, TYPE "^" JMS I TYPEZ JMP I OMARK /LOCAL CONSTANTS K0336, 336 /^ K0015, 015 K240, 240
/KBD RESPONSE LIST KBDLST, +330 /X +303 /C +320 /P +307 /G +324 /T +313 /K +215 /CR +311 /I 227 /^W 203 /^C -232 /^Z /DISPLAY LIST GRDLIS, +1777 /FROM (-1000, -1000) TO (-1000, +777) +1777 /THEN TO (777, +777) -1777 /(777, -1000) -1777 /(-1000, -1000) +140 /(-1000, -640) +1777 /(777, -640) +40 /(777, -600) -1777 /(-1000, -600) +40 /(-1000, -540) +1777 /(777, -540) +540 /(777,0) -1777 /(-1000, 0) 0 /MESSAGE LIFT, 314 /L 311 /I 306 /F 324 /T 0 /END KC7746, 7746 $



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