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