A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rka / paroff / p1.ra
1 /\ e P1.RA FOR HP 7475 AND ADCOMP X80-SP
2 / \ ePDPPLT.RA\ e
3 /
4 / PART ONE OF DEC'S XYPLOT DEC-S8-LPLTA-A-LA JULY 1973 M. HURLEY
5 / INCLUDED IS THE LATEST UPDATE F4 4.AAAA FROM LIBRARY FORLIB.RL NOV. 77
6 / COPIED: J.J. ANDRES 1.NOV. 1980
7 /
8 / PLOTTER ROUTINES FOR OS8 FORTRAN 4 FOR LAB 8/E ONLY!
9 / VER 1.0 1. NOV. 1980 H.A.
10 / VER 2.0 12. NOV. 1980 H.A.
11 / VER 2.1 18. NOV. 1981 H.A.
12 / VER 2.2 4. AUG. 1982 H.A.
13 / VER 2.3 24-NOV-83 H.A. INSERTS VARIABLES FOR XYPLOT VER 3.3
14 / VER 3.0 11-JUN-85 H.A. FOR ADCOMP X80-SP AND HP 7475 PLOTTER
15 /
16 / UPDATES:
17 / 1. PLEXIT DISABLED THE PLOTTER INTERRUPTS AT ALL AND PLOTS DID
18 / NOT SWITCH THEM ON A SECOND TIME.
19 / 2. X-Y PLOTTER CANNOT BE DRIVEN TO THE ORIGIN (0,0) BY PLOTS.
20 / * #XNTST IS CALLED FROM PLOTS EACH TIME PLOTS ITSELF IS CALLED.
21 / * NOW #XNTST TEST AND SETS THE ONCE FLAG.
22 / * #XNTST PUSHES THE PLOTTER 4095 TIMES INTO THE LOWER LEFT CORNER.
23 / 1-NOV-1980 H.A.
24 / 3. #XMSMBP = ADDR SYMBTB
25 / #XSMBP = ADDR SYMCNT
26 / THESE TWO VALUES ARE NOW INSERTED VIA A CALL TO SYMBOL.
27 / SYMBOL CALLS #XMBTB TO SWAP IN THE SYMBOL TABLE OVERLAY.
28 / 12-NOV-1980 H.A.
29 / 4. THE AMOUNT OF EXTERNAL REF TO XYPLOT IS REDUCED
30 / 5. ONLY ASCII PLOT OUTPUT FOR X80-SP OR HP7475 PLOTTER VIA
31 / FORTRAN UNIT 2 USEING THE OS/8 DEVICE HANDLER.
32 / NO CODE FOR CALCOMP INTERFACE. NO I/O BUFFERS .....
33 /
34 \f/
35 / THE PDP8 CODE LOCATED IN FIELD 1
36 /
37 /
38 / INTO THESE WORDS SYMBOL INSERTS THE ADR. OF THE SYMBOL TABLE AND LENGTH
39 / THIS MUST BE DONE SINCE THE SYMBOL TABLE #XMBTB MAY BE LOCATED INTO
40 / AN OVERLAY AND THEREFORE THE ADDR DIRECTIVE WILL PRODUCE WRONG CODE.
41 / THE LOADER INSERTS THE ADR. OF THE OVERLAY LOADER BUT NOT THE DESIRED
42 / ONE.
43 /
44 ENTRY #XMCNT
45 ENTRY #XSMBP
46 /
47 / EXTERNAL REFERENCED FROM XYPLOT ONLY
48 /
49 / ENTRIES USED BY XYPLOT:
50 ENTRY #XORGX
51 /
52 / ENTRIES USED BY SYMBOL
53 /
54 ENTRY #XNDLF
55 ENTRY #XNDRT
56 ENTRY #XLEFT
57 ENTRY #XLTCD
58 ENTRY #XPSIN
59 ENTRY #XPSNM
60 ENTRY #XRGHT
61 ENTRY #XTXAD
62 /
63 PLCE= 06500 / CLEAR INTERRUPT ENABLE
64 PLSF= 06501 / SKIP ON PLOTTER FLAG SET
65 PLCF= 06502 / CLEAR PLOTTER FLAG
66 PLLR= 06504 / LOAD PLOTTER DIRECTION REGISTER
67 PLSE= 06507 / SET INTERRUPT ENABLE
68 /
69 \f/
70 FIELD1 PDPPLT
71 /
72 / FPP 12 VARIABLES SET BY XYPLOT WICH MAY NOT BE LOADED INTO AN OVERLAY
73 /
74 #XORGX, ORG .+3 / LAST ABSOLUTE ORIGIN LOCATION OF PEN IN MOTOR STEPS
75 #XORGY, ORG .+3 / LAST ABSOLUTE ORIGIN LOCATION OF PEN IN MOTOR STEPS Y DIRECTION
76 #XABSX, ORG .+3 / ABSOLUTE LOCATION OF PEN IN MOTOR STEPS X DIRECTION (REAL)
77 #XABSY, ORG .+3 / ABSOLUTE LOCATION OF PEN IN MOTOR STEPS Y DIRECTION
78 #XOLDP, ORG .+3 / VALUE OF PEN AT LAST XYPLOT
79 #XXOLD, ORG .+3 / OLD X PT WITH EFFECT OF FACTOR
80 #XYOLD, ORG .+3 / OLD Y PT WITH EFFECT OF FACTOR
81 #XPENC, ORG .+3 / OLD PEN STATUS (SYMBOL & NUMBER)
82 #XINCX, ORG .+3 / INCREMENT SIZE DEPENDENT OF EACH PLOTTER X DIRECTION
83 #XINCY, ORG .+3 / INCREMENT SIZE DEPENDENT OF EACH PLOTTER Y DIRECTION
84 #XFCTX, ORG .+3 / X - FACTOR
85 #XFCTY, ORG .+3 / Y - FACTOR
86 X80SPX, ORG .+3
87 X80SPY, ORG .+3
88 \f/
89 / THESE ROUTINES GET THE PLOTTING CODES WITHIN A LETTER
90 / PASS THEM AS X,Y PAIRS FOR PLOT ROUTINE
91 #XLEFT, 0
92 JMS GETXYS / GET A #XLEFT HAND X,Y PAIR
93 RTR
94 RTR
95 RTR
96 JMS PASSXY
97 CDF CIF
98 JMP% #XLEFT
99 P7, 7
100 PASSXY, 0
101 DCA LETCD2 / SAVE X,Y PAIR
102 TAD LETCD2
103 CLL RTR
104 RAR / GET IN LO THREE BITS
105 AND P7
106 DCA LETCD1 / PASS X VALUE
107 TAD LETCD2 / NOW FOR THE Y PART
108 AND P7
109 DCA LETCD2 / PASS THE Y VALUE
110 JMP% PASSXY
111 #XRGHT, 0 / GET A #XRGHT HAND X,Y PAIR
112 JMS GETXYS
113 JMS PASSXY
114 CDF CIF
115 JMP% #XRGHT
116 #XLTCD, 0
117 LETCD1, 0
118 LETCD2, 0
119 \f/ THIS ROUTINE GETS X,Y PAIRS FROM THE PACKED SEQ FOR EACH LETTER
120 GETXYS, 0
121 TAD #XLTCD
122 CLL
123 TAD LOCNPT / START OF LETTER CODE
124 DCA LETCD2 / UPDATE PTR TO LETTER
125 RAL / IF LINK SET, CROSSED FIELDS, SO UPDATE FIELD
126 / POINTER
127 TAD LOCNFL / FIELD PASSED FROM FINDIT ROUTINE
128 CLL RTL
129 RAL
130 TAD CDFINS
131 DCA NFLD
132 NFLD, 0 / GET FIELD
133 TAD% LETCD2 / GET PLOTTING CODES
134 CDF 10
135 JMP% GETXYS
136 CDFINS, 6201
137 LOCNFL, 0 / FIELD
138 LOCNPT, 0
139 \f ORG #XORGX+200
140 NXTLCN,
141 PLETPS, ADDR LOCNPT / POINTS TO START OF CODE FOR PASSED LETTER
142 COUNT, / COUNT OF STEPS INTO CHAR PLOTTING CODE TABLE
143 PLCNM1, ADDR LOCNFL / USED TO PASS FIELD
144 #XTXAD, 0
145 0
146 0 / ADDRESS OF PACKED 6 BIT LETTERS TO PRINT
147 LETTER, 0
148 #XSMBP, / HERE WE INSERT THE ADR. OF THE SYMBOL TABLE
149 PSYMB, ORG .+2
150 PP7, 7
151 / THESE ROUTINES DETERMINE THE START OF PLOTTING CODES FOR A CHARACTER
152 / PASSED AS A HOLERITH (6 BIT) FROM SYMBOL ROUTINE.
153 / FIND LOCATION OF START OF PLOT VECTORS
154 / FOR THE LEFT HALF OF 2 6 BIT CHARACTERS
155 #XNDLF, 0
156 TAD #XTXAD+1 / DO FIELD STUFF
157 AND PP7
158 CLL RTL
159 RAL
160 TAD CDF
161 DCA DOCDF
162 DOCDF, NOP
163 TAD% #XTXAD+2 / GET TWO 6 BIT VALUES
164 CDF 10
165 DCA LETTER
166 CLL
167 TAD LETTER / MOVE LEFT CHARACTER
168 RTR
169 RTR
170 RTR
171 AND P77 / INTO THE #XRGHTMOST 6 BITS
172 JMS FINDIT
173 ISZ #XTXAD+2 / PREPARE FOR NEXT CHARACTER TO #XLEFT
174 JMP FLDOK / IF SKIPS, THEN AT FIELD BOUNDARY
175 ISZ #XTXAD+1 / SO UPDATE FIELD ALSO
176 FLDOK, CDF CIF
177 JMP% #XNDLF
178 \fFINDIT, 0 / GET LOC OF LETTER IN SYMBOL TABLE
179 SPA SNA / CHECK FOR ZERO
180 TAD P40 / WHICH DEFAULTS TO SPACE
181 CIA CLL / MAKE A COUNTER
182 DCA #XTXAD
183 DCA COUNT / ZERO TOTAL STEP COUNTER
184 TAD PTRTBL+1
185 DCA NXTLCN / POINTS TO LOCN IN POINTER TABLE
186 / THIS TABLE HAS STEPS FOR EACH LETTER, SO
187 / COUNT TOTAL STEPS TO DESIRED LETTER
188 TAD PTRTBL
189 CLL RTL
190 RAL
191 TAD CDF
192 DCA SCANTB
193 SCANTB, NOP
194 TAD% NXTLCN / GET NEXT STEP COUNT
195 CDF 10
196 TAD COUNT / AND ADD IT TO TOTAL STEP COUNT
197 DCA COUNT
198 ISZ NXTLCN / BUMP POINTER
199 SKP / SKIP IF DIDN'T CROSS BOUNDARIES
200 TAD P10 / IT DID, UPDATE FIELD WORD
201 TAD SCANTB
202 DCA SCANTB
203 ISZ #XTXAD
204 JMP SCANTB / NOT THERE YET
205 CLL
206 TAD COUNT / ADD COUNT TO
207 TAD PSYMB+1 / START OF CODE TABLE
208 DCA% PLETPS+1 / NOW IT'S CORRECT POINTER
209 RAL / IF LINK SET, WE CROSSED FIELD BOUNDARIES
210 TAD PSYMB / GET FIELD OF TABLE
211 DCA% PLCNM1+1 / PASS IT
212 JMP% FINDIT / GOT THE LETTER
213 P40, 40
214 P77, 77
215 #XMCNT, / HERE WE INSERT THE POINTER INTO THE SYMBOL TABLE
216 PTRTBL, ORG .+2
217 CDF, 6201
218 P10, 10
219 \f#XNDRT, 0
220 TAD LETTER / #XLEFT FROM LAST #XLEFT LETTER
221 AND P77
222 JMS FINDIT
223 CDF CIF
224 JMP% #XNDRT
225 / ROUTINE TO HANDLE NUMBERS FROM FORTRAN SUBR. NUMBER
226 / NOT CALLED BY USER DIRECTLY
227 #XPSNM, 0
228 TAD #XTXAD
229 IAC
230 SNA
231 JMP USZRO / IF EQ -1, USE 0
232 TAD T2
233 SPA / L.T. -3 BAD
234 JMP USZRO / SO USE ZERO
235 TAD M15
236 SPA CLA / G.T. 9 BAD TOO
237 JMP USEIT / IT'S -3,-2,0-9
238 USZRO, CLA
239 INDEX, TAD P60 / INDEX INTO TABLE
240 JMS FINDIT
241 CDF CIF
242 JMP% #XPSNM
243 USEIT, TAD #XTXAD
244 JMP INDEX
245 / PLOT AN INTEGER EQUIV OR CENTERED (100-117 DEC =144-165 OCT)
246 #XPSIN, 0
247 TAD #XTXAD
248 SPA SNA / .L.T. ZERO NO GOOD
249 JMP USSPAC
250 TAD M166 / G.T. 117 DEC. BAD
251 SMA
252 JMP USSPAC
253 TAD A22
254 SMA
255 JMP OKVAL / ITS A CENTERED 100-121 (0144-0165)
256 TAD P44
257 SMA CLA
258 JMP USSPAC / 0100-0143 ILLEGAL
259 TAD #XTXAD
260 ACHAR, JMS FINDIT
261 CDF CIF
262 JMP% #XPSIN
263 USSPAC, CLA
264 TAD P40 / DEFAULT TO SPACE
265 JMP ACHAR
266 OKVAL, TAD P100 / PASS CENTERED AS 100-121
267 JMP ACHAR
268 P100, 100
269 A22, 22
270 P44, 44
271 M166, -166
272 P60, 60
273 M15, -15
274 T2, 2
275 END
276 \f\1a