File: PLOTIT.RA of Tape: Various/Decus/decus-4
(Source file text)
/ 8-MODE SUBROUTINE PLOTIT (UNIT) / /BACKGROUND PLOTTING ROUTINE FOR FORTRAN IV. / /WRITTEN BY: / R. W. PHELPS / DEPT. RAD. BIOL. & BIOPHYSICS / UNIVERSITY OF ROCHESTER MEDICAL CENTER / ROCHESTER, NY 14642 / / SEPT., 1974 / / MODIFIED 4/75 / MODIFIED 8/75 / INTERRUPT DRIVEN DISK HANDLER REMOVED, 4/76 / /CALLING SEQUENCE: / EXTERNAL PLOTIT, PDONE / CALL MODE8 (PLOTIT, UNIT) / / DATA WILL BE PLOTTED FROM UNIT <UNIT> / <PDONE> WILL BE SET TO NON-ZERO WHEN THE PLOT IS COMPLETE. / / FIELD1 PLOTIT / /INITIALIZE AND START PLOTTING FROM UNIT / 0 CLA IAC TAD PLOTIT DCA PNTR RDF /SET FIELDS FOR RETURN TAD #CDFCIF DCA EXIT RDF TAD #CDF DCA .+4 CDF 10 DCA% #PDONE+1 /INDICATE PLOTTER BUSY DCA% #PDONE HLT /CDF CALLING FIELD TAD% PNTR /GET UNIT SNA /IF UNIT = 0, CONTINUE JMP CNTU CLL RTL /MULT BY 9 RAL TAD% PNTR TAD LDSRN DCA PNTR / / MAKE SURE USER DECLARED A UNIT / #CDF, CDF 0 CLL TAD% PNTR /GET ENTRY POINT TAD M7607 CIF 0 SNL CLA JMP% UE CIF 10 INPL1, TAD% PNTR /GET EP IF IOF HANDLER DCA DISK /SET ENTRY POINT OF HANDLER ISZ PNTR ISZ PNTR /SKIP HANDLER CODE WORD ISZ PNTR ISZ PNTR /SKIP CHARACTER POINTER ISZ PNTR /SKIP CHARACTER COUNTER TAD% PNTR /GET STARTING BLOCK SNA /FILE DECLARED? HLT /NO! DCA BLOCK / ISZ PNTR ISZ PNTR /SKIP CURRENT BLOCK TAD% PNTR /GET LENGTH OF FILE CMA DCA NOBLKS / CMA DCA KNTR /SET TO SIGNIFY NO WORDS LEFT / /PUT PLOTTER INTERRUPT INTO INTERRUPT CHAIN / FIRST0, SKP JMP FIRST1+1 CDF 10 JMS% #ONQI+1 6501 ADDR PLOTINT / FIRST1, DCA FIRST0 /ONLY EXECUTE THIS ONCE / /START PLOT / 6506 /NOP FOR PLOTTER TO GENERATE FIRST INTERRUPT EXIT, HLT /CIF INSTRUCTION JMP% PLOTIT / #CDFCI, CIF CDF DSRN=4244 LDSRN, DSRN-11 PNTR, 0 M7607, -7607 /ENTRY POINT FOR SYS: K12, 12 K200, 200 NOBLKS, EXTERN ONQI #ONQI, ADDR ONQI EXTERN #UE DISK, ADDR #UE UE=.-1 K7400, 7400 K70, 70 KNTR, 0 M377, -377 WKNTR, #X, ADDR X BPNTR, #PLOT, ADDR PLOT PLNEXT, CLA CMA CLL RTL /-3 => AC DCA WKNTR /WORDS TO READ EACH VECTOR TAD #X+1 /LOCATION OF PARAMETERS FOR DISK DCA BPNTR PLL1, ISZ KNTR /MORE WORDS IN BUFFER? JMP PLL2 /YES ISZ NOBLKS /NO READ MORE - MORE BLOCKS? SKP /YES HLT /PLOT NOT TERMINATED, PROBABLY GARBAGE CIF 0 JMS% DISK /READ THEM WORD, ADDR PLBUFR CORE= .-1 BLOCK, -1 ORG WORD 210 ORG BLOCK+1 HLT /DISK ERROR! ISZ BLOCK /INCREMENT TO NEXT BLOCK TAD CORE DCA PNTR TAD M377 /NUMBER OF WORDS READ DCA KNTR / PLL2, DFLD, CDF 10 /FIELD OF BUFFER TAD% PNTR CDF 10 /RESTORE FIELD DCA% BPNTR ISZ PNTR ISZ BPNTR ISZ WKNTR JMP PLL1 / JMS% #PLOT+1 /OUTPUT NEXT COMMAND X, -1 Y, -1 PEN, -1 SZA DCA KNTR /SKIP REST OF BLOCK IF AC=7777 JMP PLNEXT / CNTU, CMA DCA KNTR /CONTINUE LAST PLOT, CMA /REREAD LAST BLOCK TAD BLOCK DCA BLOCK CMA TAD NOBLKS DCA NOBLKS JMP FIRST1+1 / ORG .+1 #PDONE, ADDR PDONE ORG #PDONE-1 ADDR PDONE+1 / ORG .-1!177+1 / PLBUFR=. /TWO PAGE BUFFER ORG .+400 /PLOTTER DRIVER / /WRITTEN BY: / ROBERT PHELPS / COLUMBINE CONSULTANTS / / SEPTEMBER, 1972 / / MODIFIED FOR THE PDP-12, SEPTEMBER, 1974 / / /CALLING SEQUENCE: / JMS PLOT / FINAL X COORD / FINAL Y COORD / PEN CONTROL -- 00 MEANS TERMINATE PLOTTING / +1 MEANS RESET (X,Y) TO PARAMETERS (NO MOVE!!) / +2 MEANS PEN DOWN / +3 MEANS PEN UP / NEG MEANS RESET (X,Y) TO (0,0) AFTER MOVE / NEG ALSO MEANS NEW FRAME DEFINITION / (RETURN) / ADDR PLNEXT-1 / PLOT= .-1 / /COMPUTE DISTANCE TO MOVE IN X DIRECTION / TAD PLOTX /GET OLD X CLL CIA TAD% PLOT /NZ LINK MEANS MOVE IN + DIR SNL SZA /Z LINK MEANS MOVE IN NEG DIR CIA DCA PLOTDX /ABSOLUTE VALUE OF UNITS TO / MOVE IN X DIR. / /SET UP CODE FOR + OR - X MOVEMENT / TAD KDD /DRUM DOWN (+) SNL /CHECK DIRECTION RAR /IF NEG., MAKE IT DRUM UP (-) TAD K6510 /MAKE IT PDP-12 INSTRUCTION DCA PLOTRX TAD% PLOT /UPDATE PEN LOCATION DCA PLOTX ISZ PLOT /BUMP TO Y / /COMPUTE DISTANCE TO MOVE IN Y DIRECTION / TAD PLOTY /GET OLD Y CLL CIA /(TREAT THE SAME AS X ABOVE TAD% PLOT SNL SZA CIA DCA PLOTDY /ABSOLUTE VALUE OF Y UNITS / /SET UP CODE FOR + OR - Y MOVEMENT / TAD KPL /PEN LEFT (+) SNL RAR /IF NEG., MAKE IT PEN RIGHT(-) TAD K6501 /MAKE IT PDP-12 INSTRUCTION DCA PLOTRY TAD% PLOT /UPDATE PEN LOCATION DCA PLOTY ISZ PLOT /BUMP TO PEN CONTROL / /FIND LARGER OF THE TWO DISTANCES. /IT CONTROLS NUMBER OF INCREMENTS TO BE MOVED / TAD PLOTDX /GET X UNITS TO MOVE CIA CLL TAD PLOTDY /COMPARE X WITH Y SZL CLA JMP PLOT1 /X SMALLER - Y LARGER TAD PLOTDY /Y SMALLER, SWITCH PARAMETERS DCA PLOTNA TAD PLOTDX /SWITCH DISTANCES DCA PLOTDY TAD PLOTNA DCA PLOTDX TAD PLOTRY /SWITCH MOTION CODES DCA PLOTNA TAD PLOTRX DCA PLOTRY TAD PLOTNA DCA PLOTRX / PLOT1, TAD PLOTDY /GET LARGER DISTANCE SNA JMP PLOTEXT /RETURN IF NO MOVEMENT CMA DCA PLOTNB /SET UP # OF MOVES DCA PLOTNA /INITIATE RUNNING COUNTER / /SET PEN AS INDICATED / TAD% PLOT /FIX PEN - GET PEN CONTROL SNA JMP #DONE /DONE IF PEN CONTROL IS ZERO TAD PLOTPEN /CHECK OLD PEN LOCATION SNA CLA JMP PLOT2 /NO CHANGE REQUESTED TAD% PLOT SPA CIA CLL RAR SNA CLA /WAS ORIG. BIT 10 SET? JMP PLOTEXT /NO - NOT 2 OR 3, ASSUME 1, NO MOVE 6504 /PEN UP SNL 6524 /PEN DOWN TAD% PLOT /SET PEN SOFTWARE SWITCH SMA CIA DCA PLOTPEN / /MOVEMENT CONTROL / CIF CDF 10 JMP% .+1 PLOTINT, 0 6502 /CLEAR FLAG / PLOT2, ISZ PLOTNB /MORE POINTS TO PLOT? JMP PLOT3 /YES PLOTEXT, TAD% PLOT /REDEFINE ORIGIN? SNA JMP #DONE SMA CLA JMP PLEXT2 DCA PLOTX DCA PLOTY CMA /INCIDATE END OF FRAME (SKIP REST OF BLOCK) PLEXT2, ISZ PLOT /NO - BUMP TO EXIT JMP% PLOT PLOT3, TAD PLOTDX /DECREMENT RUNNING COUNTER CLL CIA TAD PLOTNA DCA PLOTNA SNL /OVERFLOW? PLOTRX, HLT /YES - MOVE SHORT DIRECTION PLOTRY, HLT /ALWAYS MOVE LONG DIRECTION SNL CLA /CHECK OVERFLOW AGAIN TAD PLOTDY /RESET COUNTER ONLY IF OVERFLOW TAD PLOTNA DCA PLOTNA JMP PLOTINT-2 / PLOTPEN, 0 /CURRENT PEN POSITION PLOTX, 0 /CURRENT POSN COORDINATES PLOTY, 0 PLOTNA, 0 PLOTNB, -1 /COUNTS TOTAL # OF MOVES KDD, 4 KPL, 20 K6510, 6510 /PDP-12 DRUM INSTRUCTION + 2 OR 4 K6501, 6501 /PDP-12 PEN INSTRUCTION + 10 OR 20 #DONE, CLA IAC DCA PDONE CLL CML RTR DCA PDONE+1 CMA DCA% PLOT /IF RESTARTED, FORCE NEG PEN CONTROL / TO START IT OFF RIGHT CMA DCA PLOTNB JMP PLOTINT-2 / ENTRY PDONE PDONE, F 1.0 / PLOTDX, 0 PLOTDY, 0 / END