3 / PART ONE OF DEC'S XYPLOT DEC-S8-LPLTA-A-LA JULY 1973 M. HURLEY
4 / INCLUDED IS THE LATEST UPDATE F4 4.AAAA FROM LIBRARY FORLIB.RL NOV. 77
5 / COPIED: J.J. ANDRES 1.NOV. 1980
7 / PLOTTER ROUTINES FOR OS8 FORTRAN 4 FOR LAB 8/E ONLY!
8 / VER 1.0 1. NOV. 1980 H.A.
9 / VER 2.0 12. NOV. 1980 H.A.
10 / VER 2.1 18. NOV. 1981 H.A.
11 / VER 2.2 4. AUG. 1982 H.A.
12 / VER 2.3 24-NOV-83 H.A. INSERTS VARIABLES FOR XYPLOT VER 3.3
13 / VER 3.0 21-FEB-85 H.A. ASCII OUTPUT ONLY
16 / 1. PLEXIT DISABLED THE PLOTTER INTERRUPTS AT ALL AND PLOTS DID
17 / NOT SWITCH THEM ON A SECOND TIME.
18 / 2. X-Y PLOTTER CANNOT BE DRIVEN TO THE ORIGIN (0,0) BY PLOTS.
19 / * #XNTST IS CALLED FROM PLOTS EACH TIME PLOTS ITSELF IS CALLED.
20 / * NOW #XNTST TEST AND SETS THE ONCE FLAG.
21 / * #XNTST PUSHES THE PLOTTER 4095 TIMES INTO THE LOWER LEFT CORNER.
23 / 3. #XMSMBP = ADDR SYMBTB
24 / #XSMBP = ADDR SYMCNT
25 / THESE TWO VALUES ARE NOW INSERTED VIA A CALL TO SYMBOL.
26 / SYMBOL CALLS #XMBTB TO SWAP IN THE SYMBOL TABLE OVERLAY.
28 / 4. THE AMOUNT OF EXTERNAL REF TO XYPLOT IS REDUCED
29 / 5. DELETES OUTPUT ROUTINE TO X-Y PLOTTER INTERFACE.
30 / NOW THERE IS ONLY ASCII OUTPUT VIA XYPLOT ROUTINE.
31 / THE OUTPUT BUFFER IS DELETED.
34 / THE PDP8 CODE LOCATED IN FIELD 1
37 / INTO THESE WORDS SYMBOL INSERTS THE ADR. OF THE SYMBOL TABLE AND LENGTH
38 / THIS MUST BE DONE SINCE THE SYMBOL TABLE #XMBTB MAY BE LOCATED INTO
39 / AN OVERLAY AND THEREFORE THE ADDR DIRECTIVE WILL PRODUCE WRONG CODE.
40 / THE LOADER INSERTS THE ADR. OF THE OVERLAY LOADER BUT NOT THE DESIRED
46 / EXTERNAL REFERENCED FROM XYPLOT ONLY
48 / ENTRIES USED BY XYPLOT:
57 / ENTRIES USED BY SYMBOL
69 PLCE= 06500 / CLEAR INTERRUPT ENABLE
70 PLSF= 06501 / SKIP ON PLOTTER FLAG SET
71 PLCF= 06502 / CLEAR PLOTTER FLAG
72 PLLR= 06504 / LOAD PLOTTER DIRECTION REGISTER
73 PLSE= 06507 / SET INTERRUPT ENABLE
77 / ALL THESE ROUTINES USES XRS TO GET ARGS FROM FPP CODE
78 /ASSUMES USER ADDED 6502(CLEAR FLAG) TO FRTS CLEAR QUEUE
79 #XNTST, ORG .+1 / INIT PTRS + ADD JOB TO INTERRUPT QUEUE
80 CLA CMA / SET UP POINTERS
81 DCA% PBFCNT+1 / COUNTER FOR LOCN OF NEXT CHARACTER TO PLOT
92 / FPP 12 VARIABLES SET BY XYPLOT WICH MAY NOT BE LOADED INTO AN OVERLAY
94 #XORGX, ORG .+3 / LAST ABSOLUTE ORIGIN LOCATION OF PEN IN MOTOR STEPS
95 #XORGY, ORG .+3 / LAST ABSOLUTE ORIGIN LOCATION OF PEN IN MOTOR STEPS Y DIRECTION
96 #XABSX, ORG .+3 / ABSOLUTE LOCATION OF PEN IN MOTOR STEPS X DIRECTION (REAL)
97 #XABSY, ORG .+3 / ABSOLUTE LOCATION OF PEN IN MOTOR STEPS Y DIRECTION
98 #XOLDP, ORG .+3 / VALUE OF PEN AT LAST XYPLOT
99 #XXOLD, ORG .+3 / OLD X PT WITH EFFECT OF FACTOR
100 #XYOLD, ORG .+3 / OLD Y PT WITH EFFECT OF FACTOR
101 #XPENC, ORG .+3 / OLD PEN STATUS (SYMBOL & NUMBER)
102 #XINCX, ORG .+3 / INCREMENT SIZE DEPENDENT OF EACH PLOTTER X DIRECTION
103 #XINCY, ORG .+3 / INCREMENT SIZE DEPENDENT OF EACH PLOTTER Y DIRECTION
104 #XFCTX, ORG .+3 / X - FACTOR
105 #XFCTY, ORG .+3 / Y - FACTOR
109 / THESE ROUTINES GET THE PLOTTING CODES WITHIN A LETTER
110 / PASS THEM AS X,Y PAIRS FOR PLOT ROUTINE
112 JMS GETXYS / GET A #XLEFT HAND X,Y PAIR
121 DCA LETCD2 / SAVE X,Y PAIR
124 RAR / GET IN LO THREE BITS
126 DCA LETCD1 / PASS X VALUE
127 TAD LETCD2 / NOW FOR THE Y PART
129 DCA LETCD2 / PASS THE Y VALUE
131 #XRGHT, 0 / GET A #XRGHT HAND X,Y PAIR
139 \f/ THIS ROUTINE GETS X,Y PAIRS FROM THE PACKED SEQ FOR EACH LETTER
143 TAD LOCNPT / START OF LETTER CODE
144 DCA LETCD2 / UPDATE PTR TO LETTER
145 RAL / IF LINK SET, CROSSED FIELDS, SO UPDATE FIELD
147 TAD LOCNFL / FIELD PASSED FROM FINDIT ROUTINE
153 TAD% LETCD2 / GET PLOTTING CODES
161 PLETPS, ADDR LOCNPT / POINTS TO START OF CODE FOR PASSED LETTER
162 COUNT, / COUNT OF STEPS INTO CHAR PLOTTING CODE TABLE
163 PLCNM1, ADDR LOCNFL / USED TO PASS FIELD
166 0 / ADDRESS OF PACKED 6 BIT LETTERS TO PRINT
168 #XSMBP, / HERE WE INSERT THE ADR. OF THE SYMBOL TABLE
171 / THESE ROUTINES DETERMINE THE START OF PLOTTING CODES FOR A CHARACTER
172 / PASSED AS A HOLERITH (6 BIT) FROM SYMBOL ROUTINE.
173 / FIND LOCATION OF START OF PLOT VECTORS
174 / FOR THE #XLEFT HALF OF 2 6 BIT CHARACTERS
176 TAD #XTXAD+1 / DO FIELD STUFF
183 TAD% #XTXAD+2 / GET TWO 6 BIT VALUES
187 TAD LETTER / MOVE #XLEFT CHARACTER
191 AND P77 / INTO THE #XRGHTMOST 6 BITS
193 ISZ #XTXAD+2 / PREPARE FOR NEXT CHARACTER TO #XLEFT
194 JMP FLDOK / IF SKIPS, THEN AT FIELD BOUNDARY
195 ISZ #XTXAD+1 / SO UPDATE FIELD ALSO
198 \fFINDIT, 0 / GET LOC OF LETTER IN SYMBOL TABLE
199 SPA SNA / CHECK FOR ZERO
200 TAD P40 / WHICH DEFAULTS TO SPACE
201 CIA CLL / MAKE A COUNTER
203 DCA COUNT / ZERO TOTAL STEP COUNTER
205 DCA NXTLCN / POINTS TO LOCN IN POINTER TABLE
206 / THIS TABLE HAS STEPS FOR EACH LETTER, SO
207 / COUNT TOTAL STEPS TO DESIRED LETTER
214 TAD% NXTLCN / GET NEXT STEP COUNT
216 TAD COUNT / AND ADD IT TO TOTAL STEP COUNT
218 ISZ NXTLCN / BUMP POINTER
219 SKP / SKIP IF DIDN'T CROSS BOUNDARIES
220 TAD P10 / IT DID, UPDATE FIELD WORD
224 JMP SCANTB / NOT THERE YET
226 TAD COUNT / ADD COUNT TO
227 TAD PSYMB+1 / START OF CODE TABLE
228 DCA% PLETPS+1 / NOW IT'S CORRECT POINTER
229 RAL / IF LINK SET, WE CROSSED FIELD BOUNDARIES
230 TAD PSYMB / GET FIELD OF TABLE
231 DCA% PLCNM1+1 / PASS IT
232 JMP% FINDIT / GOT THE LETTER
235 #XMCNT, / HERE WE INSERT THE POINTER INTO THE SYMBOL TABLE
240 TAD LETTER / #XLEFT FROM LAST #XLEFT LETTER
245 / ROUTINE TO HANDLE NUMBERS FROM FORTRAN SUBR. NUMBER
246 / NOT CALLED BY USER DIRECTLY
251 JMP USZRO / IF EQ -1, USE 0
254 JMP USZRO / SO USE ZERO
256 SPA CLA / G.T. 9 BAD TOO
257 JMP USEIT / IT'S -3,-2,0-9
259 INDEX, TAD P60 / INDEX INTO TABLE
265 / PLOT AN INTEGER EQUIV OR CENTERED (100-117 DEC =144-165 OCT)
268 SPA SNA / .L.T. ZERO NO GOOD
270 TAD M166 / G.T. 117 DEC. BAD
275 JMP OKVAL / ITS A CENTERED 100-121 (0144-0165)
278 JMP USSPAC / 0100-0143 ILLEGAL
284 TAD P40 / DEFAULT TO SPACE
286 OKVAL, TAD P100 / PASS CENTERED AS 100-121