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