A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rkb / paroff / pdpplt.ra
CommitLineData
81e70d48
PH
1/ \ ePDPPLT.RA\ e\r
2/\r
3/ PART ONE OF DEC'S XYPLOT DEC-S8-LPLTA-A-LA JULY 1973 M. HURLEY\r
4/ INCLUDED IS THE LATEST UPDATE F4 4.AAAA FROM LIBRARY FORLIB.RL NOV. 77\r
5/ COPIED: J.J. ANDRES 1.NOV. 1980\r
6/\r
7/ PLOTTER ROUTINES FOR OS8 FORTRAN 4 FOR LAB 8/E ONLY!\r
8/ VER 1.0 1. NOV. 1980 H.A.\r
9/ VER 2.0 12. NOV. 1980 H.A.\r
10/ VER 2.1 18. NOV. 1981 H.A.\r
11/\r
12/ UPDATES:\r
13/ 1. PLEXIT DISABLED THE PLOTTER INTERRUPTS AT ALL AND PLOTS DID\r
14/ NOT SWITCH THEM ON A SECOND TIME.\r
15/ 2. X-Y PLOTTER CANNOT BE DRIVEN TO THE ORIGIN (0,0) BY PLOTS.\r
16/ * #XNTST IS CALLED FROM PLOTS EACH TIME PLOTS ITSELF IS CALLED.\r
17/ * NOW #XNTST TEST AND SETS THE ONCE FLAG.\r
18/ * #XNTST PUSHES THE PLOTTER 4095 TIMES INTO THE LOWER LEFT CORNER.\r
19/ 1-NOV-1980 H.A.\r
20/ 3. #XMSMBP = ADDR SYMBTB\r
21/ #XSMBP = ADDR SYMCNT\r
22/ THESE TWO VALUES ARE NOW INSERTED VIA A CALL TO SYMBOL.\r
23/ SYMBOL CALLS #XMBTB TO SWAP IN THE SYMBOL TABLE OVERLAY.\r
24/ 12-NOV-1980 H.A.\r
25/\r
26\f/\r
27/ THE PDP8 CODE LOCATED IN FIELD 1\r
28/\r
29/\r
30/ INTO THESE WORDS SYMBOL INSERTS THE ADR. OF THE SYMBOL TABLE AND LENGTH\r
31/ THIS MUST BE DONE SINCE THE SYMBOL TABLE #XMBTB MAY BE LOCATED INTO\r
32/ AN OVERLAY AND THEREFORE THE ADDR DIRECTIVE WILL PRODUCE WRONG CODE.\r
33/ THE LOADER INSERTS THE ADR. OF THE OVERLAY LOADER BUT NOT THE DESIRED\r
34/ ONE.\r
35/\r
36 ENTRY #XMCNT\r
37 ENTRY #XSMBP\r
38/ \r
39/ EXTERNAL REFERENCED FROM XYPLOT ONLY\r
40/\r
41/ ENTRIES USED BY XYPLOT:\r
42 ENTRY #XOLDP\r
43 ENTRY #XXOLD\r
44 ENTRY #XYOLD\r
45 ENTRY #XPENC\r
46 ENTRY #XINCR\r
47 ENTRY #XFCTX\r
48 ENTRY #XFCTY\r
49 ENTRY #XETXR\r
50 ENTRY #XETUP\r
51 ENTRY #XDPXR\r
52 ENTRY #XATIO\r
53 ENTRY #XNPLT\r
54 ENTRY #XCHTP\r
55 ENTRY #XCHCK\r
56 ENTRY #XNTST\r
57 ENTRY #XDNCK\r
58/\r
59/ ENTRIES USED BY SYMBOL\r
60/\r
61 ENTRY #XNDLF\r
62 ENTRY #XNDRT\r
63 ENTRY #XLEFT\r
64 ENTRY #XLTCD\r
65 ENTRY #XPSIN\r
66 ENTRY #XPSNM\r
67 ENTRY #XPNOP\r
68 ENTRY #XRGHT\r
69 ENTRY #XTXAD\r
70/\r
71PLCE= 06500 / CLEAR INTERRUPT ENABLE\r
72PLSF= 06501 / SKIP ON PLOTTER FLAG SET\r
73PLCF= 06502 / CLEAR PLOTTER FLAG\r
74PLLR= 06504 / LOAD PLOTTER DIRECTION REGISTER\r
75PLSE= 06507 / SET INTERRUPT ENABLE\r
76/\r
77/\r
78 FIELD1 PDPPLT\r
79/ ALL THESE ROUTINES USES XRS TO GET ARGS FROM FPP CODE\r
80 EXTERN ONQI\r
81 EXTERN #DISMS\r
82/ASSUMES USER ADDED 6502(CLEAR FLAG) TO FRTS CLEAR QUEUE\r
83#XNTST, ORG .+1 / INIT PTRS + ADD JOB TO INTERRUPT QUEUE\r
84 CLA CMA / SET UP POINTERS\r
85 DCA% PBFCNT+1 / COUNTER FOR LOCN OF NEXT CHARACTER TO PLOT\r
86 TAD UBUFL / COMPL. LENGTH OF BUFFER --> AC\r
87 DCA% PMBFLG+1 / RESET BUFFER POINTERS\r
88 TAD PUBFMN+1\r
89 DCA% OCHAR+1\r
90 TAD PUBFMN+1\r
91 DCA% ICHAR+1\r
92 TAD DISMS+1\r
93 DCA% PDISMS+1 / FOR HANG\r
94 ISZ ONCE / TEST THE ONCE ONLY FLAG\r
95 JMP .+5\r
96 JMS% VONQI+1 / ADD PLOTTER INTO THE INTERRUPT QUEUE ONLY ONCE\r
97 PLSF / CODE TO DETECT IF PLOTTER INTERRUPTED\r
98 ADDR INTPLT / ADR. OF INTERRUPT SERVICE ROUTINE\r
99 CLA\r
100 DCA ONCE / CLEAR THE ONCE ONLY FLAG TO ZERO\r
101/ THIS IS FOR GUYES PLOTTING MORE THAN 4095 DRAWINGS WITH ONE PROGRAM.\r
102/ SOME PEOPLE ARE CRAZY, AREN'T THEY?\r
103 DCA PREP / SET UP COUNTER TO RESET PEN TO ORIGIN 0,0\r
104 TAD PENUP / LIFT PEN AND THEN\r
105 JMS PLOTIT\r
106 CLA\r
107 TAD DECRXY / GO 4096 STEPS TO THE LEFT CORNER DOWN\r
108 JMS REPIT\r
109 PLCF / CLEAR FLAG FROM THE LAST STEP\r
110 ION PLSE / ENABLE PLOTTER INTERRUPTS\r
111 CIF CDF\r
112 JMP% #XNTST\r
113/\r
114/ THIS ROUTINE RESETS X-Y PLOTTER TO 0,0\r
115PENUP, 2\r
116DECRXY, 44\r
117/\r
118REPIT, ORG .+1\r
119 JMS PLOTIT\r
120 ISZ PREP / REPEAT 4096 TIMES\r
121 JMP .-2\r
122 JMP% REPIT\r
123PLOTIT, ORG .+1\r
124 IOF\r
125 PLCF PLLR\r
126 PLSF\r
127 JMP .-1\r
128 ION\r
129 JMP% PLOTIT\r
130/\r
131ONCE, 7777 / TO ADD PLSF INTO INTERRUPT QUEUE ONLY ONCE\r
132PREP,\r
133VONQI, ADDR ONQI\r
134/THIS ROUTINE CALLED ONCE FOR EACH CALL TO XYPLOT\r
135/AND DOES INITAL PEN UP OR DOWN\r
136#XETUP, 0\r
137 TAD #XETXR / GET PEN STATE\r
138 AND A3\r
139 CLL RAR / LOOK AT 3 BITS\r
140 SZA / SKIP IF 0\r
141 SNL CLA\r
142 IAC / 3=UP, 0-2=DOWN\r
143 CLL\r
144 JMS% QPLDBL+1\r
145 CDF CIF\r
146 JMP% #XETUP\r
147QPLDBL, ADDR PLDBL\r
148A3, 3\r
149#XETXR,\r
150OCHAR, ADDR POCHAR+1\r
151PBFCNT, ADDR BUFCNT\r
152#XCHCK,\r
153ICHAR, ADDR PICHAR+1\r
154PMBFLG, ADDR MBUFLG\r
155PUBFMN, ADDR USBFMN\r
156DISMS, ADDR #DISMS\r
157PDISMS, ADDR DISPTR\r
158/\r
159/ FPP 12 VARIABLES SET BY XYPLOT WICH MAY NOT BE LOADED INTO AN OVERLAY\r
160/\r
161#XOLDP, ORG .+3 / VALUE OF PEN AT LAST XYPLOT\r
162#XXOLD, ORG .+3 / OLD X PT WITH EFFECT OF FACTOR\r
163#XYOLD, ORG .+3 / OLD Y PT WITH EFFECT OF FACTOR\r
164#XPENC, ORG .+3 / OLD PEN STATUS (SYMBOL & NUMBER)\r
165#XINCR, ORG .+3 / INCREMENT SIZE DEPENDENT OF EACH PLOTTER\r
166#XFCTX, ORG .+3 / X - FACTOR\r
167#XFCTY, ORG .+3 / Y - FACTOR\r
168BUFFL= 435\r
169UBUFL, -BUFFL / LENGTH OF BUFFER\r
170USBFMN, ZBLOCK BUFFL / PLOTTING BUFFER\r
171USBFMX, 0\r
172\f ORG #XNTST+600\r
173/ THESE ROUTINES GET THE PLOTTING CODES WITHIN A LETTER\r
174/ PASS THEM AS X,Y PAIRS FOR PLOT ROUTINE\r
175#XLEFT, 0\r
176 JMS GETXYS / GET A #XLEFT HAND X,Y PAIR\r
177 RTR\r
178 RTR\r
179 RTR\r
180 JMS PASSXY\r
181 CDF CIF\r
182 JMP% #XLEFT\r
183P7, 7\r
184PASSXY, 0\r
185 DCA LETCD2 / SAVE X,Y PAIR\r
186 TAD LETCD2\r
187 CLL RTR\r
188 RAR / GET IN LO THREE BITS\r
189 AND P7\r
190 DCA LETCD1 / PASS X VALUE\r
191 TAD LETCD2 / NOW FOR THE Y PART\r
192 AND P7\r
193 DCA LETCD2 / PASS THE Y VALUE\r
194 JMP% PASSXY\r
195#XRGHT, 0 / GET A #XRGHT HAND X,Y PAIR\r
196 JMS GETXYS\r
197 JMS PASSXY\r
198 CDF CIF\r
199 JMP% #XRGHT\r
200#XLTCD, 0\r
201LETCD1, 0\r
202LETCD2, 0\r
203\f/ THIS ROUTINE GETS X,Y PAIRS FROM THE PACKED SEQ FOR EACH LETTER\r
204GETXYS, 0\r
205 TAD #XLTCD\r
206 CLL\r
207 TAD LOCNPT / START OF LETTER CODE\r
208 DCA LETCD2 / UPDATE PTR TO LETTER\r
209 RAL / IF LINK SET, CROSSED FIELDS, SO UPDATE FIELD\r
210 / POINTER\r
211 TAD LOCNFL / FIELD PASSED FROM FINDIT ROUTINE\r
212 CLL RTL\r
213 RAL\r
214 TAD CDFINS\r
215 DCA NFLD\r
216NFLD, 0 / GET FIELD\r
217 TAD% LETCD2 / GET PLOTTING CODES\r
218 CDF 10\r
219 JMP% GETXYS\r
220CDFINS, 6201\r
221LOCNFL, 0 / FIELD\r
222LOCNPT, 0\r
223\f/ HERES START OF THE TABLE FOR PDP-8 ES\r
224OCT8BL, 6503 / PEN UP\r
225 6505 / PEN DOWN\r
226/ GEOM. OCTANT 1=CODED OCTANT 8, 2=7, 3=3, 4=4, 5=2, 6=1, 8=6\r
227 40 / PEN R\r
228 44 \r
229 4 / DRUM UP\r
230 44\r
231 20 / PEN L\r
232 24\r
233 4 / DRUM UP\r
234 24\r
235 40 / PEN R\r
236 50\r
237 10 / DRUM D\r
238 50\r
239 20 / PEN L\r
240 30\r
241 10 / DRUM D\r
242 30\r
243/ THIS IS THE START OF THE PLOT VECTOR TABLE FOR PDP-12S\r
244OCT12, 6504 / PEN UP\r
245 6524 / DOWN\r
246 6511 / PEN #XRGHT\r
247 6513 \r
248 6522 / DRUM UP\r
249 6513\r
250 6521 / PEN #XLEFT\r
251 6523\r
252 6522 / DRUM UP\r
253 6523\r
254 6511 / PEN #XRGHT\r
255 6515\r
256 6514 / DRUM DOWN\r
257 6515\r
258 6521 / PEN #XLEFT\r
259 -6514 / 2 WORD IOT\r
260 6514 / DRUM DOWN\r
261 -6514\r
262\f/ FIGURE OUT IF A MAJOR MOVE OR MAJ+MINOR\r
263FIGURE, 0\r
264 CLL\r
265 TAD RATIO2\r
266 TAD HOLD2\r
267 DCA HOLD2 / ADD LO WORDS\r
268 RAL / CARRY LINK\r
269 TAD RATIO1\r
270 TAD HOLD1 / ADD HIGH WORDS\r
271 DCA HOLD1\r
272 CLL\r
273 TAD HOLD1\r
274 RAL / G.T. 1?\r
275 SNL\r
276 JMP MAJONL / NO-MAJOR MOVE ONLY\r
277 CLL RAR / PUT IT BACK-1\r
278 DCA HOLD1\r
279 IAC\r
280 JMP% FIGURE / RETURN WITH AC=1\r
281MAJONL, CLA\r
282 JMP% FIGURE / RETURN WITH ZERO AC\r
283#XATIO, 0 / #XATIO CALCULATED IN REALPT\r
284RATIO1, 0\r
285RATIO2, 0\r
286HOLD1, 0\r
287HOLD2, 0\r
288/ INITIALIZE HOLD1+2 TO A ROUNDING FUDGE\r
289SPCAS, 0\r
290 DCA HOLD1\r
291 TAD RFUDGE\r
292 DCA HOLD2\r
293 JMP% SPCAS\r
294RFUDGE, 1000 / TAKES CARE OF TRUNCATION ERRORS\r
295\f ORG #XLEFT+200\r
296NXTLCN,\r
297PLETPS, ADDR LOCNPT / POINTS TO START OF CODE FOR PASSED LETTER\r
298COUNT, / COUNT OF STEPS INTO CHAR PLOTTING CODE TABLE\r
299PLCNM1, ADDR LOCNFL / USED TO PASS FIELD\r
300#XTXAD, 0\r
301 0\r
302 0 / ADDRESS OF PACKED 6 BIT LETTERS TO PRINT\r
303LETTER, 0\r
304#XSMBP, / HERE WE INSERT THE ADR. OF THE SYMBOL TABLE\r
305PSYMB, ORG .+2\r
306PP7, 7\r
307/ THESE ROUTINES DETERMINE THE START OF PLOTTING CODES FOR A CHARACTER\r
308/ PASSED AS A HOLERITH (6 BIT) FROM SYMBOL ROUTINE.\r
309/ FIND LOCATION OF START OF PLOT VECTORS\r
310/ FOR THE #XLEFT HALF OF 2 6 BIT CHARACTERS\r
311#XNDLF, 0\r
312 TAD #XTXAD+1 / DO FIELD STUFF\r
313 AND PP7\r
314 CLL RTL\r
315 RAL\r
316 TAD CDF\r
317 DCA DOCDF\r
318DOCDF, NOP\r
319 TAD% #XTXAD+2 / GET TWO 6 BIT VALUES\r
320 CDF 10\r
321 DCA LETTER\r
322 CLL\r
323 TAD LETTER / MOVE #XLEFT CHARACTER\r
324 RTR\r
325 RTR\r
326 RTR\r
327 AND P77 / INTO THE #XRGHTMOST 6 BITS\r
328 JMS FINDIT\r
329 ISZ #XTXAD+2 / PREPARE FOR NEXT CHARACTER TO #XLEFT\r
330 JMP FLDOK / IF SKIPS, THEN AT FIELD BOUNDARY\r
331 ISZ #XTXAD+1 / SO UPDATE FIELD ALSO\r
332FLDOK, CDF CIF\r
333 JMP% #XNDLF\r
334\fFINDIT, 0 / GET LOC OF LETTER IN SYMBOL TABLE\r
335 SPA SNA / CHECK FOR ZERO\r
336 TAD P40 / WHICH DEFAULTS TO SPACE\r
337 CIA CLL / MAKE A COUNTER\r
338 DCA #XTXAD\r
339 DCA COUNT / ZERO TOTAL STEP COUNTER\r
340 TAD PTRTBL+1\r
341 DCA NXTLCN / POINTS TO LOCN IN POINTER TABLE\r
342 / THIS TABLE HAS STEPS FOR EACH LETTER, SO\r
343 / COUNT TOTAL STEPS TO DESIRED LETTER\r
344 TAD PTRTBL\r
345 CLL RTL\r
346 RAL\r
347 TAD CDF\r
348 DCA SCANTB\r
349SCANTB, NOP\r
350 TAD% NXTLCN / GET NEXT STEP COUNT\r
351 CDF 10\r
352 TAD COUNT / AND ADD IT TO TOTAL STEP COUNT\r
353 DCA COUNT\r
354 ISZ NXTLCN / BUMP POINTER\r
355 SKP / SKIP IF DIDN'T CROSS BOUNDARIES\r
356 TAD P10 / IT DID, UPDATE FIELD WORD\r
357 TAD SCANTB\r
358 DCA SCANTB\r
359 ISZ #XTXAD\r
360 JMP SCANTB / NOT THERE YET\r
361 CLL\r
362 TAD COUNT / ADD COUNT TO\r
363 TAD PSYMB+1 / START OF CODE TABLE\r
364 DCA% PLETPS+1 / NOW IT'S CORRECT POINTER\r
365 RAL / IF LINK SET, WE CROSSED FIELD BOUNDARIES\r
366 TAD PSYMB / GET FIELD OF TABLE\r
367 DCA% PLCNM1+1 / PASS IT\r
368 JMP% FINDIT / GOT THE LETTER\r
369P40, 40\r
370P77, 77\r
371#XMCNT, / HERE WE INSERT THE POINTER INTO THE SYMBOL TABLE\r
372PTRTBL, ORG .+2\r
373CDF, 6201\r
374P10, 10\r
375\f#XNDRT, 0\r
376 TAD LETTER / #XLEFT FROM LAST #XLEFT LETTER\r
377 AND P77\r
378 JMS FINDIT\r
379 CDF CIF\r
380 JMP% #XNDRT\r
381/ ROUTINE TO HANDLE NUMBERS FROM FORTRAN SUBR. NUMBER\r
382/ NOT CALLED BY USER DIRECTLY\r
383#XPSNM, 0\r
384 TAD #XTXAD\r
385 IAC\r
386 SNA\r
387 JMP USZRO / IF EQ -1, USE 0\r
388 TAD T2\r
389 SPA / L.T. -3 BAD\r
390 JMP USZRO / SO USE ZERO\r
391 TAD M15\r
392 SPA CLA / G.T. 9 BAD TOO\r
393 JMP USEIT / IT'S -3,-2,0-9\r
394USZRO, CLA\r
395INDEX, TAD P60 / INDEX INTO TABLE\r
396 JMS FINDIT\r
397 CDF CIF\r
398 JMP% #XPSNM\r
399USEIT, TAD #XTXAD\r
400 JMP INDEX\r
401/ PLOT AN INTEGER EQUIV OR CENTERED (100-117 DEC =144-165 OCT)\r
402#XPSIN, 0\r
403 TAD #XTXAD\r
404 SPA SNA / .L.T. ZERO NO GOOD\r
405 JMP USSPAC\r
406 TAD M166 / G.T. 117 DEC. BAD\r
407 SMA\r
408 JMP USSPAC\r
409 TAD A22\r
410 SMA\r
411 JMP OKVAL / ITS A CENTERED 100-121 (0144-0165)\r
412 TAD P44\r
413 SMA CLA\r
414 JMP USSPAC / 0100-0143 ILLEGAL\r
415 TAD #XTXAD\r
416ACHAR, JMS FINDIT\r
417 CDF CIF\r
418 JMP% #XPSIN\r
419USSPAC, CLA\r
420 TAD P40 / DEFAULT TO SPACE\r
421 JMP ACHAR\r
422OKVAL, TAD P100 / PASS CENTERED AS 100-121\r
423 JMP ACHAR\r
424P100, 100\r
425A22, 22\r
426P44, 44\r
427M166, -166\r
428P60, 60\r
429M15, -15\r
430T2, 2\r
431\f ORG NXTLCN+200\r
432 EXTERN #HANG\r
433#XNPLT, 0 / NON INTERRUPT TIME PLOT ROUTINE\r
434 TAD TOTSTP\r
435 CMA\r
436 DCA TOTSTP\r
437 JMS% PSPCAS+1 / PREP FOR OCTANT CHECK\r
438MORE, ISZ TOTSTP\r
439 JMP ANOTHR / DO ANOTHER STEP\r
440DONE, CDF CIF / ALL DONE WITH THIS VECTOR\r
441 JMP% #XNPLT\r
442ANOTHR, JMS% PFIGUR+1 / TO FIGURE OUT IF MAJ OR DIAG\r
443 / RETURNS ZERO IF MAJOR ONLY, 1 IF MAJ + MINOR\r
444 TAD #XDPXR / OCTANT\r
445 JMS PLDBL\r
446 JMP MORE\r
447PLDBL, 0\r
448 TAD POCTBL+1 / START OF VECTOR TABLE\r
449 TAD #XCHTP / ADD 22 IF A PDP-12 OR NON 8-E\r
450 DCA PLTVCT / SAVE POINTER TO PROPER PLOT VECTOR\r
451 CIF 10\r
452 TAD BUFCNT / GET NUM. CHARACTERS IN BUF -1\r
453 TAD MBUFLG / AND MINUS LENGTH\r
454 CLL\r
455 SPA CLA\r
456 JMP ISROOM / STILL ROOM IN BUFFER\r
457 IOF / NO ROOM YET, GO TO HANG\r
458 CIF 0\r
459 JMS% PHANG+1\r
460DISPTR, 0\r
461 ION / HANG LEAVES INTERRUPT OFF\r
462ISROOM, TAD% PLTVCT / NOW GET THE VECTOR\r
463 DCA% PICHAR+1 / INTO BUFFER\r
464 ISZ PICHAR+1 / UPDATE LOCN\r
465 TAD PICHAR+1\r
466 CIA\r
467 TAD PBMX+1 / ARE WE OVERFLOWING MAX LOCN OF BUFFER\r
468 CLL\r
469 SMA CLA / PAST END ?\r
470 JMP LIMOK / NO\r
471 TAD PBMN+1 / YES, RESET TO BOTTOM\r
472 DCA PICHAR+1\r
473LIMOK, ISZ BUFCNT / UPDATE CHAR COUNT\r
474 / IF EMPTY WAS -1, SO NOW 0\r
475 JMP% PLDBL / WASNT EMPTY-CANT START TO PLOT\r
476 JMP OUTSUB\r
477\f#XPNOP, 0\r
478 TAD #XDPXR / USE AS INDEX INTO OPCODE TABLE\r
479 JMS PLDBL\r
480 CDF CIF\r
481 JMP% #XPNOP\r
482#XDPXR, 0\r
483TOTSTP, 0\r
484PSPCAS, ADDR SPCAS\r
485POCHAR, ADDR USBFMN\r
486INTFLG, / HANG ALWAYS FIELD 0\r
487PHANG, ADDR #HANG\r
488PICHAR, ADDR USBFMN\r
489BUFCNT,\r
490POCTBL, ADDR OCT8BL\r
491MBUFLG,\r
492PBMN, ADDR USBFMN\r
493#XCHTP,\r
494PFIGUR, ADDR FIGURE\r
495PLTVCT,\r
496PBMX, ADDR USBFMX\r
497\fOUTSUB, CLA\r
498 TAD% POCHAR+1 / GET NEXT LINE TO PLOT\r
499 DCA QTEMP5 / SAVE ACTUAL VECTOR FOR A SECOND\r
500 ISZ POCHAR+1\r
501 TAD POCHAR+1\r
502 CIA\r
503 TAD PBMX+1 / CHECK THAT OUTPUT DOESNT OVERFLOW THE BUFFER\r
504 CLL\r
505 SMA CLA / WILL IT?\r
506 JMP CLRFLG / NO\r
507 TAD PBMN+1 / YES\r
508 DCA POCHAR+1 / RESET IT\r
509CLRFLG, 6502\r
510 TAD QTEMP5 / GET VARIABLE\r
511 AND A7000 / DETERMINE TYPE OF PLOTTER\r
512 SZA CLA\r
513 JMP PENUD / A PEN OP (PDP-12 OR 8/E)\r
514 TAD QTEMP5 / ITS AN 8E\r
515 6506 / SEND A CHARR\r
516 CLA\r
517 JMP OUTCHK / RETURN\r
518PENUD, TAD QTEMP5 / ITS A 12 OR NON-8/E PEN UP OR DOWN\r
519 SMA CLA\r
520 JMP TWOWD / IT'S A TWO WORD IOT\r
521QTEMP5, NOP / 1-WORDER SO DO IT NOW\r
522OUTCHK, TAD INTFLG\r
523 SNA CLA\r
524 JMP% PLDBL / DONE FOR NON-INTERRUPT\r
525 DCA INTFLG / INT MODE, CLEAR FLAG\r
526 CDF CIF\r
527 JMP% XDISMS+1\r
528XDISMS, ADDR #DISMS\r
529A7000, 7000\r
530TWOWD, 6514 / DRUM DOWN\r
531 6521 / SECOND PART PEN #XLEFT\r
532 JMP OUTCHK\r
533\fINTPLT, 0 / HERE ONLY IF FLAG SET\r
534 CLA CMA\r
535 TAD BUFCNT / DECREMENT BUFFER COUNTER\r
536 SPA\r
537 JMP EMPTY\r
538 DCA BUFCNT\r
539 ISZ INTFLG / SHOULD NEVER SKIP\r
540 NOP\r
541 JMP OUTSUB\r
542EMPTY, CLA CMA\r
543 DCA BUFCNT / INITIALIZE BUFFER CNT-1\r
544 6502 / CLEAR\r
545 JMP% INTPLT / EXIT IN FIELD 1\r
546/ BE SHURE BUFFER EMPTY BEFORE EXITING\r
547#XDNCK, 0\r
548 CLA\r
549 JMS PLDBL / DO A FINAL PEN UP\r
550WAIT, TAD BUFCNT\r
551 SMA CLA\r
552 JMP WAIT / STILL MORE TO DO\r
553 TAD #XCHTP\r
554 SNA CLA\r
555 6500 / CLEAR INTERRUPT ENABLE FOR 8-ES \r
556 CIF CDF / ALL EMPTY\r
557 JMP% #XDNCK\r
558 END\r
559\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\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