File DPLOT.RA

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




/FPP FORTRAN IV PLOT DRIVER
/USES STANDARD PDP-12 CALCOMP INTERFACE
/INTERUPT DRIVEN

/CALLS ARE:
/	CALL INITDP
/	CALL DSCALE(XMIN,YMIN,XMAX,YMAX)
/	CALL DPLOT(N,X,Y,PEN)
/	CALL DPWAIT


/WRITTEN BY:
/	DENNIS MCGHIE
/	CARDIAC SURGERY
/	STANFORD MED. CENTER
/	STANFORD, CALIF.  94305

/	AUGUST 1972

/VERSION 2
/	FIXED TRACEBACK BUG
/	SEPTEMBER 1973

/	OS/8 FORTRAN IV VERSION
/	JANUARY 1974


	RING=10	/.LE. NUMBER OF FWORDS AT END OF 8 SECTION

SECT DPLOT JA #DPLOT TEXT +DPLOT + DRTN, SETX #X0 SETB #BASE #BASE, FNOP ORG .+2 XMIN, N, ORG .+3 YMIN, X, ORG .+3 XMAX, Y, ORG .+3 YMAX, PEN, ORG .+3 XRANGE, F 850. YRANGE, F 1050. FRING, F 8. /THIS MUST BE THE SAME AS RING (ONLY DECIMAL) ORG #BASE+30 FNOP JA DRTN FNOP DPBAK, JA . YSCALE, F 1. YZERO, F 0. XSCALE, F 1. XZERO, F 0. #DPLOT, JSA PICKUP /GET 4 ARGS BASE #BASE FLDA% N FNEG ATX 1 /-# OF POINTS TO PLOT LDX -1,2 /INDEX OFFSET FOR ARRAYS DPLOO, JXN DPLO1,4 /(X4)=0 MEANS NO MORE ROOM JA DPLOO /WAIT FOR PLOTTER TO FINISH A POINT DPLO1, FLDA% PEN,2+ /GET PEN UP-DOWN VALUE ATX 7 /PUT IN WORD 3 OF XYP FLDA% Y,2 /GET Y & SCALE IT FMUL YSCALE FSUB YZERO ATX 6 /PUT IN WORD 2 OF TRIPLE FLDA% X,2 /GET X & SCALE IT FMUL XSCALE FSUB XZERO ATX 5 /PUT IN WORD 1 OF XYP FLDA XYP /GET TRIPLE (X5,X6,X7) DPLO2, JXN DPLO2,0 /HANG IF X0 IS NOT 0 ADDX -1,4 FSTA XYP,3+ XTA 3 /CHECK FOR END OF RING BUFFER FSUB FRING /END IF .EQ. JLT DPLO3 / .LT. IS JUST SAFE, REALLY .NE. ATX 3 /RESET RING (FAC=0!) DPLO3, JXN DPLOO,1+ /DO MORE IF NOT DONE JA DPBAK
BASE 0 PICKUP, JA . /SUBROUTINE ENTRY POINT STARTD FLDA 30 /RETN JA FSTA DPBAK FLDA 0 /ARG PTR BASE #BASE SETB #BASE /MY BASE LOC SETX #X0 /ON PLOTTER PAGE FSTA #BASE LDX 1,1 /ARG OFFSET REGISTER FLDA% #BASE,1 FSTA N /POINTS TO ARG1 FLDA% #BASE,1+ FSTA X /POINTS TO ARG2 FLDA% #BASE,1+ FSTA Y /POINTS TO ARG3 FLDA% #BASE,1+ FSTA PEN /POINTS TO ARG4 STARTF JA PICKUP /RETURN
/ENTRY TO SCALE PLOT SPACE ENTRY DSCALE DSCALE, JSA PICKUP BASE #BASE FLDA% XMAX FSUB% XMIN FSTA XMAX /X RANGE FLDA% YMAX FSUB% YMIN FSTA YMAX /Y RANGE FLDA XRANGE FDIV XMAX FSTA XSCALE FMUL% XMIN FSTA XZERO FLDA YRANGE FDIV YMAX FSTA YSCALE FMUL% YMIN FSTA YZERO JA DPBAK
/PLOTTER SOFTWARE INITIALIZATION ROUTINE ENTRY INITDP INITDP, BASE 0 TRAP4 DPQUE FLDA 30 JAC /WAIT FOR PLOTTER COMPLETE ROUTINE ENTRY DPWAIT DPWAIT, TRAP4 WAIT FLDA 30 JAC
FIELD1 DPLT /BASIC PLOTTER MOVE ROUTINE /CALLING SEQUENCE: / C(AC)=-1 INITIALIZE / C(AC)=0 PLOT WITH PEN DOWN / C(AC)=1 PLOT WITH PEN UP / JMS PLOTX EFFECTIVE JMS TO PLOTX / X X LOCATION IN .01S / Y Y LOCATION IN .01S /PLOTTER DEFINITIONS FOLLOW, REMOVE /IF ALREADY IN SYMBOL TABLE PLSF=6501 PLCF=6502 PLPU=6504 PLPR=6511 PLDU=6512 PLDD=6514 PLPL=6521 PLUD=6522 PLPD=6524 PLOTX, 0 SMA JMP PLOTB /INIT SECTION PLPU /RAISE PEN ON INIT CLA CLL DCA PLOTPN /CURRENT POSITION IS (0,0) DCA PLOTNX DCA PLOTNY ISZ PLOTX /SKIP OVER ARGS ISZ PLOTX JMP% PLOTX /RETURN WHILE IN PROGRESS / PLOTB, TAD PLOTPN CLL RTR SPA CLA JMP PLOT1 /NO CHANGE TO PEN UP OR DOWN SNL CLA JMP .+4 DCA PLOTPN /WAS DOWN, WANT UP PLPU JMP PLOT1A /GO TO COMMON PART ISZ PLOTPN /WAS UP, WANT DOWN PLPD PLOT1A, JMS% DPSWA+1 /PEN MOVE PART (ALREADY UP OR DOWN) PLOT1, DCA PLOTMV /AC=0 TAD PLOTNX JMS COMPAR DCA PLOTDX TAD% PLOTX DCA PLOTNX ISZ PLOTX TAD PLOTNY JMS COMPAR DCA PLOTDY TAD% PLOTX DCA PLOTNY ISZ PLOTX TAD PLOTDX CIA CLL TAD PLOTDY SNL CLA JMP PLOT2 TAD PLOTDX DCA PLOTNA TAD PLOTDY DCA PLOTDX TAD PLOTNA DCA PLOTDY IAC AND PLOTMV TAD PLOTT1-1 JMP .+4 PLOT2, TAD PLOTMV CLL RAR TAD PLOTT2-1 DCA PLOTNA TAD% PLOTNA DCA PLOT4 TAD PLOTMV TAD PLOTT3-1 DCA PLOTMV TAD% PLOTMV DCA PLOTDB TAD PLOTDX CLL RAR DCA PLOTNA TAD PLOTDX CMA DCA PLOTMV JMP PLOT5 PLOT3, TAD PLOTNA TAD PLOTDY DCA PLOTNA TAD PLOTDX CIA CLL TAD PLOTNA SPA CLA JMP PLOT4 PLOTDB, 0000 TAD PLOTDX CIA TAD PLOTNA DCA PLOTNA SKP PLOT4, 0000 JMS% DPSWA+1 PLOT5, ISZ PLOTMV JMP PLOT3 JMP% NEWP+1 /READY RIGHT NOW FOR ANOTHER! PLOTNX, /CURRENT X ADDR PLOTT1 PLOTT1, PLPR PLPL PLOTNY, /CURRENT Y ADDR PLOTT2 PLOTT2, PLDU PLDD PLOTDX, ADDR PLOTT3 PLOTT3, PLDU!PLPR PLUD!PLPL PLDD!PLPR JMS .+1 0 PLDD PLPL JMP% .-3 / / PLOTNA, /2ND USE FOR THIS LOC COMPAR, 0 CIA TAD% PLOTX DCA PLOT4 TAD PLOTMV RAL CLL DCA PLOTMV TAD PLOT4 SMA JMP .+5 CIA DCA PLOT4 TAD PLOT4 JMP% COMPAR ISZ PLOTMV JMP% COMPAR PLOTPN, 0 /0=UP, 1=DOWN PLOTDY, DPSWA, ADDR DPSW+1 PLOTMV, NEWP, ADDR NEWPT ORG PLOTX+200 /PAGE
/ROUTINE TO PLACE ROUTINES ON IDLE AND INTERUPT QUEUES DPQUE, 0000 TAD ONCE DCA .-1 /ONLY PUT ON QUE ONCE JMS% ONQIDL+1 /DON'T NEED CIF BECAUSE OF FIELD1 ADDR DPIDL JMS% ONQINT+1 PLSF /PLOTTER SKIP IOT ADDR DPINT DPQO, CDF CIF JMP% DPQUE /RETN FROM TRAP4 EXTERN ONQB ONQIDL, ADDR ONQB EXTERN ONQI ONQINT, ADDR ONQI ONCE, JMP DPQO /PREVENT TWO ENTRIES ON QUEUES /ROUTINE TO WAIT UNTIL PLOTTER IS INACTIVE WAIT, 0000 TAD ACTIVE SZA CLA JMP .-2 CDF CIF 0 JMP% WAIT
DPIDL, 0000 TAD #X0+4 SNA CLA JMP DPIDL2 /CHECK ACTIVE, X3 WILL BE 0 TAD #X0+3 SNA CLA /BUFFER EMPTY? JMP% DPIDL /YES DPIDL2, TAD ACTIVE SZA CLA /NEW BUFFER(WAS INACTIVE)? JMP% DPIDL /ALREADY ACTIVE TAD% PLPNA+1 /0=UP, 1=DOWN SZA CLA TAD PDMPU TAD PLIOT DCA .+1 0000 /SET FLAG BY MOVING PEN TO PRESENT POSITION CLA IAC DCA ACTIVE /MAKE SOFTWARE ACTIVE JMP% DPIDL PLPNA, ADDR PLOTPN PDMPU, PLPD-PLPU PLIOT, PLPU ACTIVE, 0
DPINT, 0000 CLA CMA DCA #X0 /IF NOT 0, PICKUP IN PROGRESS PLCF JMP% DPSW+1 DPSW, ADDR NEWPT DCA #X0 /CLEAR IN PROGRESS SWITCH JMP% DPINT NEWPT, TAD #X0+4 TAD X4INIT SZA CLA /IF =, NO MORE TO DO JMP NEWPT1 DCA #X0+3 /RESET X3 TAD DATIN+1 DCA DATPTR+1 /RESET DATA POINTER CLA CMA TAD X4INIT DCA DPCNT /RESET COUNTER DCA ACTIVE /RESET SOFTWARE TO INACTIVE JMP CY+1 /JMP TO COMMON RETN TO SAVE A WORD NEWPT1, ISZ DPCNT /BUMP COUNTER JMP NEWPT2 TAD DATIN+1 DCA DATPTR+1 TAD X4INIT DCA DPCNT NEWPT2, ISZ DATPTR+1 TAD% DATPTR+1 DCA CX ISZ DATPTR+1 TAD% DATPTR+1 DCA CY ISZ DATPTR+1 TAD% DATPTR+1 ISZ #X0+4 JMS% PLOTXA+1 CX, 0 CY, 0 JMS DPSW+1 JMP NEWPT DPCNT, -RING-1 /START OUT 1 LARGER THAN RING (SEE NEWPT1,) DATPTR, ADDR #X0+7 PLOTXA, ADDR PLOTX DATIN, ADDR #X0+7 X4INIT, -RING /INDEX REGISTERS #X0, 0 /POINT PICKUP IN PROGRESS SWITCH 0 /LOOP COUNTER IN DPLOT 0 /INDEXER IN DPLOT 0 /BUFFER OFFSET IN DPLOT RING /BUFFER LENGTH COUNTER IN DPLOT XYP, 0 /#X0+5 TO +7 ARE USED TO GENERATE XYP 0 0 REPEAT RING-1 F 0. F 0. /FORCE PRINT OF LAST ADDR USED



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