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