--- /dev/null
+/ \ ePDPPLT.RA\ e\r
+/\r
+/ PART ONE OF DEC'S XYPLOT DEC-S8-LPLTA-A-LA JULY 1973 M. HURLEY\r
+/ INCLUDED IS THE LATEST UPDATE F4 4.AAAA FROM LIBRARY FORLIB.RL NOV. 77\r
+/ COPIED: J.J. ANDRES 1.NOV. 1980\r
+/\r
+/ PLOTTER ROUTINES FOR OS8 FORTRAN 4 FOR LAB 8/E ONLY!\r
+/ VER 1.0 1. NOV. 1980 H.A.\r
+/ VER 2.0 12. NOV. 1980 H.A.\r
+/ VER 2.1 18. NOV. 1981 H.A.\r
+/ VER 2.2 4. AUG. 1982 H.A.\r
+/\r
+/ UPDATES:\r
+/ 1. PLEXIT DISABLED THE PLOTTER INTERRUPTS AT ALL AND PLOTS DID\r
+/ NOT SWITCH THEM ON A SECOND TIME.\r
+/ 2. X-Y PLOTTER CANNOT BE DRIVEN TO THE ORIGIN (0,0) BY PLOTS.\r
+/ * #XNTST IS CALLED FROM PLOTS EACH TIME PLOTS ITSELF IS CALLED.\r
+/ * NOW #XNTST TEST AND SETS THE ONCE FLAG.\r
+/ * #XNTST PUSHES THE PLOTTER 4095 TIMES INTO THE LOWER LEFT CORNER.\r
+/ 1-NOV-1980 H.A.\r
+/ 3. #XMSMBP = ADDR SYMBTB\r
+/ #XSMBP = ADDR SYMCNT\r
+/ THESE TWO VALUES ARE NOW INSERTED VIA A CALL TO SYMBOL.\r
+/ SYMBOL CALLS #XMBTB TO SWAP IN THE SYMBOL TABLE OVERLAY.\r
+/ 12-NOV-1980 H.A.\r
+/ 4. THE AMOUNT OF EXTERNAL REF TO XYPLOT IS REDUCED\r
+/\r
+\f/\r
+/ THE PDP8 CODE LOCATED IN FIELD 1\r
+/\r
+/\r
+/ INTO THESE WORDS SYMBOL INSERTS THE ADR. OF THE SYMBOL TABLE AND LENGTH\r
+/ THIS MUST BE DONE SINCE THE SYMBOL TABLE #XMBTB MAY BE LOCATED INTO\r
+/ AN OVERLAY AND THEREFORE THE ADDR DIRECTIVE WILL PRODUCE WRONG CODE.\r
+/ THE LOADER INSERTS THE ADR. OF THE OVERLAY LOADER BUT NOT THE DESIRED\r
+/ ONE.\r
+/\r
+ ENTRY #XMCNT\r
+ ENTRY #XSMBP\r
+/ \r
+/ EXTERNAL REFERENCED FROM XYPLOT ONLY\r
+/\r
+/ ENTRIES USED BY XYPLOT:\r
+ ENTRY #XETXR\r
+ ENTRY #XETUP\r
+ ENTRY #XDPXR\r
+ ENTRY #XATIO\r
+ ENTRY #XNPLT\r
+ ENTRY #XCHTP\r
+ ENTRY #XCHCK\r
+ ENTRY #XNTST\r
+ ENTRY #XDNCK\r
+ ENTRY #XORGX\r
+/\r
+/ ENTRIES USED BY SYMBOL\r
+/\r
+ ENTRY #XNDLF\r
+ ENTRY #XNDRT\r
+ ENTRY #XLEFT\r
+ ENTRY #XLTCD\r
+ ENTRY #XPSIN\r
+ ENTRY #XPSNM\r
+ ENTRY #XPNOP\r
+ ENTRY #XRGHT\r
+ ENTRY #XTXAD\r
+/\r
+PLCE= 06500 / CLEAR INTERRUPT ENABLE\r
+PLSF= 06501 / SKIP ON PLOTTER FLAG SET\r
+PLCF= 06502 / CLEAR PLOTTER FLAG\r
+PLLR= 06504 / LOAD PLOTTER DIRECTION REGISTER\r
+PLSE= 06507 / SET INTERRUPT ENABLE\r
+/\r
+/\r
+ FIELD1 PDPPLT\r
+/ ALL THESE ROUTINES USES XRS TO GET ARGS FROM FPP CODE\r
+ EXTERN ONQI\r
+ EXTERN #DISMS\r
+/ASSUMES USER ADDED 6502(CLEAR FLAG) TO FRTS CLEAR QUEUE\r
+#XNTST, ORG .+1 / INIT PTRS + ADD JOB TO INTERRUPT QUEUE\r
+ CLA CMA / SET UP POINTERS\r
+ DCA% PBFCNT+1 / COUNTER FOR LOCN OF NEXT CHARACTER TO PLOT\r
+ TAD UBUFL / COMPL. LENGTH OF BUFFER --> AC\r
+ DCA% PMBFLG+1 / RESET BUFFER POINTERS\r
+ TAD PUBFMN+1\r
+ DCA% OCHAR+1\r
+ TAD PUBFMN+1\r
+ DCA% ICHAR+1\r
+ TAD DISMS+1\r
+ DCA% PDISMS+1 / FOR HANG\r
+ ISZ ONCE / DO NOT CALL PLOTS MORE THAN 4095 TIMES!\r
+ JMP .+5\r
+ JMS% VONQI+1 / ADD PLOTTER INTO THE INTERRUPT QUEUE ONLY ONCE\r
+ PLSF / CODE TO DETECT IF PLOTTER INTERRUPTED\r
+ ADDR INTPLT / ADR. OF INTERRUPT SERVICE ROUTINE\r
+ CLA\r
+ DCA PREP / SET UP COUNTER TO RESET PEN TO ORIGIN 0,0\r
+ TAD PENUP / LIFT PEN AND THEN\r
+ JMS PLOTIT\r
+ CLA\r
+ TAD DECRXY / GO 4096 STEPS TO THE LEFT CORNER DOWN\r
+ JMS REPIT\r
+ PLCF / CLEAR FLAG FROM THE LAST STEP\r
+ ION PLSE / ENABLE PLOTTER INTERRUPTS\r
+ CIF CDF\r
+ JMP% #XNTST\r
+/\r
+/ THIS ROUTINE RESETS X-Y PLOTTER TO 0,0\r
+PENUP, 2\r
+DECRXY, 44\r
+/\r
+REPIT, ORG .+1\r
+ JMS PLOTIT\r
+ ISZ PREP / REPEAT 4096 TIMES\r
+ JMP .-2\r
+ JMP% REPIT\r
+PLOTIT, ORG .+1\r
+ IOF\r
+ PLCF PLLR\r
+ PLSF\r
+ JMP .-1\r
+ ION\r
+ JMP% PLOTIT\r
+/\r
+ONCE, 7777 / TO ADD PLSF INTO INTERRUPT QUEUE ONLY ONCE\r
+PREP,\r
+VONQI, ADDR ONQI\r
+/THIS ROUTINE CALLED ONCE FOR EACH CALL TO XYPLOT\r
+/AND DOES INITAL PEN UP OR DOWN\r
+#XETUP, 0\r
+ TAD #XETXR / GET PEN STATE\r
+ AND A3\r
+ CLL RAR / LOOK AT 3 BITS\r
+ SZA / SKIP IF 0\r
+ SNL CLA\r
+ IAC / 3=UP, 0-2=DOWN\r
+ CLL\r
+ JMS% QPLDBL+1\r
+ CDF CIF\r
+ JMP% #XETUP\r
+QPLDBL, ADDR PLDBL\r
+A3, 3\r
+#XETXR,\r
+OCHAR, ADDR POCHAR+1\r
+PBFCNT, ADDR BUFCNT\r
+#XCHCK,\r
+ICHAR, ADDR PICHAR+1\r
+PMBFLG, ADDR MBUFLG\r
+PUBFMN, ADDR USBFMN\r
+DISMS, ADDR #DISMS\r
+PDISMS, ADDR DISPTR\r
+/\r
+/ FPP 12 VARIABLES SET BY XYPLOT WICH MAY NOT BE LOADED INTO AN OVERLAY\r
+/\r
+#XORGX, ORG .+3 / LAST ABSOLUTE ORIGIN LOCATION OF PEN IN MOTOR STEPS\r
+#XORGY, ORG .+3 / LAST ABSOLUTE ORIGIN LOCATION OF PEN IN MOTOR STEPS Y DIRECTION\r
+#XABSX, ORG .+3 / ABSOLUTE LOCATION OF PEN IN MOTOR STEPS X DIRECTION (REAL)\r
+#XABSY, ORG .+3 / ABSOLUTE LOCATION OF PEN IN MOTOR STEPS Y DIRECTION\r
+#XOLDP, ORG .+3 / VALUE OF PEN AT LAST XYPLOT\r
+#XXOLD, ORG .+3 / OLD X PT WITH EFFECT OF FACTOR\r
+#XYOLD, ORG .+3 / OLD Y PT WITH EFFECT OF FACTOR\r
+#XPENC, ORG .+3 / OLD PEN STATUS (SYMBOL & NUMBER)\r
+#XINCX, ORG .+3 / INCREMENT SIZE DEPENDENT OF EACH PLOTTER X DIRECTION\r
+#XINCY, ORG .+3 / INCREMENT SIZE DEPENDENT OF EACH PLOTTER Y DIRECTION\r
+#XFCTX, ORG .+3 / X - FACTOR\r
+#XFCTY, ORG .+3 / Y - FACTOR\r
+BUFFL= 421\r
+UBUFL, -BUFFL / LENGTH OF BUFFER\r
+USBFMN, ZBLOCK BUFFL / PLOTTING BUFFER\r
+USBFMX, 0\r
+\f ORG #XNTST+600\r
+/ THESE ROUTINES GET THE PLOTTING CODES WITHIN A LETTER\r
+/ PASS THEM AS X,Y PAIRS FOR PLOT ROUTINE\r
+#XLEFT, 0\r
+ JMS GETXYS / GET A #XLEFT HAND X,Y PAIR\r
+ RTR\r
+ RTR\r
+ RTR\r
+ JMS PASSXY\r
+ CDF CIF\r
+ JMP% #XLEFT\r
+P7, 7\r
+PASSXY, 0\r
+ DCA LETCD2 / SAVE X,Y PAIR\r
+ TAD LETCD2\r
+ CLL RTR\r
+ RAR / GET IN LO THREE BITS\r
+ AND P7\r
+ DCA LETCD1 / PASS X VALUE\r
+ TAD LETCD2 / NOW FOR THE Y PART\r
+ AND P7\r
+ DCA LETCD2 / PASS THE Y VALUE\r
+ JMP% PASSXY\r
+#XRGHT, 0 / GET A #XRGHT HAND X,Y PAIR\r
+ JMS GETXYS\r
+ JMS PASSXY\r
+ CDF CIF\r
+ JMP% #XRGHT\r
+#XLTCD, 0\r
+LETCD1, 0\r
+LETCD2, 0\r
+\f/ THIS ROUTINE GETS X,Y PAIRS FROM THE PACKED SEQ FOR EACH LETTER\r
+GETXYS, 0\r
+ TAD #XLTCD\r
+ CLL\r
+ TAD LOCNPT / START OF LETTER CODE\r
+ DCA LETCD2 / UPDATE PTR TO LETTER\r
+ RAL / IF LINK SET, CROSSED FIELDS, SO UPDATE FIELD\r
+ / POINTER\r
+ TAD LOCNFL / FIELD PASSED FROM FINDIT ROUTINE\r
+ CLL RTL\r
+ RAL\r
+ TAD CDFINS\r
+ DCA NFLD\r
+NFLD, 0 / GET FIELD\r
+ TAD% LETCD2 / GET PLOTTING CODES\r
+ CDF 10\r
+ JMP% GETXYS\r
+CDFINS, 6201\r
+LOCNFL, 0 / FIELD\r
+LOCNPT, 0\r
+\f/ HERES START OF THE TABLE FOR PDP-8 ES\r
+OCT8BL, 6503 / PEN UP\r
+ 6505 / PEN DOWN\r
+/ GEOM. OCTANT 1=CODED OCTANT 8, 2=7, 3=3, 4=4, 5=2, 6=1, 8=6\r
+ 40 / PEN R\r
+ 44 \r
+ 4 / DRUM UP\r
+ 44\r
+ 20 / PEN L\r
+ 24\r
+ 4 / DRUM UP\r
+ 24\r
+ 40 / PEN R\r
+ 50\r
+ 10 / DRUM D\r
+ 50\r
+ 20 / PEN L\r
+ 30\r
+ 10 / DRUM D\r
+ 30\r
+/ THIS IS THE START OF THE PLOT VECTOR TABLE FOR PDP-12S\r
+OCT12, 6504 / PEN UP\r
+ 6524 / DOWN\r
+ 6511 / PEN #XRGHT\r
+ 6513 \r
+ 6522 / DRUM UP\r
+ 6513\r
+ 6521 / PEN #XLEFT\r
+ 6523\r
+ 6522 / DRUM UP\r
+ 6523\r
+ 6511 / PEN #XRGHT\r
+ 6515\r
+ 6514 / DRUM DOWN\r
+ 6515\r
+ 6521 / PEN #XLEFT\r
+ -6514 / 2 WORD IOT\r
+ 6514 / DRUM DOWN\r
+ -6514\r
+\f/ FIGURE OUT IF A MAJOR MOVE OR MAJ+MINOR\r
+FIGURE, 0\r
+ CLL\r
+ TAD RATIO2\r
+ TAD HOLD2\r
+ DCA HOLD2 / ADD LO WORDS\r
+ RAL / CARRY LINK\r
+ TAD RATIO1\r
+ TAD HOLD1 / ADD HIGH WORDS\r
+ DCA HOLD1\r
+ CLL\r
+ TAD HOLD1\r
+ RAL / G.T. 1?\r
+ SNL\r
+ JMP MAJONL / NO-MAJOR MOVE ONLY\r
+ CLL RAR / PUT IT BACK-1\r
+ DCA HOLD1\r
+ IAC\r
+ JMP% FIGURE / RETURN WITH AC=1\r
+MAJONL, CLA\r
+ JMP% FIGURE / RETURN WITH ZERO AC\r
+#XATIO, 0 / #XATIO CALCULATED IN REALPT\r
+RATIO1, 0\r
+RATIO2, 0\r
+HOLD1, 0\r
+HOLD2, 0\r
+/ INITIALIZE HOLD1+2 TO A ROUNDING FUDGE\r
+SPCAS, 0\r
+ DCA HOLD1\r
+ TAD RFUDGE\r
+ DCA HOLD2\r
+ JMP% SPCAS\r
+RFUDGE, 1000 / TAKES CARE OF TRUNCATION ERRORS\r
+\f ORG #XLEFT+200\r
+NXTLCN,\r
+PLETPS, ADDR LOCNPT / POINTS TO START OF CODE FOR PASSED LETTER\r
+COUNT, / COUNT OF STEPS INTO CHAR PLOTTING CODE TABLE\r
+PLCNM1, ADDR LOCNFL / USED TO PASS FIELD\r
+#XTXAD, 0\r
+ 0\r
+ 0 / ADDRESS OF PACKED 6 BIT LETTERS TO PRINT\r
+LETTER, 0\r
+#XSMBP, / HERE WE INSERT THE ADR. OF THE SYMBOL TABLE\r
+PSYMB, ORG .+2\r
+PP7, 7\r
+/ THESE ROUTINES DETERMINE THE START OF PLOTTING CODES FOR A CHARACTER\r
+/ PASSED AS A HOLERITH (6 BIT) FROM SYMBOL ROUTINE.\r
+/ FIND LOCATION OF START OF PLOT VECTORS\r
+/ FOR THE #XLEFT HALF OF 2 6 BIT CHARACTERS\r
+#XNDLF, 0\r
+ TAD #XTXAD+1 / DO FIELD STUFF\r
+ AND PP7\r
+ CLL RTL\r
+ RAL\r
+ TAD CDF\r
+ DCA DOCDF\r
+DOCDF, NOP\r
+ TAD% #XTXAD+2 / GET TWO 6 BIT VALUES\r
+ CDF 10\r
+ DCA LETTER\r
+ CLL\r
+ TAD LETTER / MOVE #XLEFT CHARACTER\r
+ RTR\r
+ RTR\r
+ RTR\r
+ AND P77 / INTO THE #XRGHTMOST 6 BITS\r
+ JMS FINDIT\r
+ ISZ #XTXAD+2 / PREPARE FOR NEXT CHARACTER TO #XLEFT\r
+ JMP FLDOK / IF SKIPS, THEN AT FIELD BOUNDARY\r
+ ISZ #XTXAD+1 / SO UPDATE FIELD ALSO\r
+FLDOK, CDF CIF\r
+ JMP% #XNDLF\r
+\fFINDIT, 0 / GET LOC OF LETTER IN SYMBOL TABLE\r
+ SPA SNA / CHECK FOR ZERO\r
+ TAD P40 / WHICH DEFAULTS TO SPACE\r
+ CIA CLL / MAKE A COUNTER\r
+ DCA #XTXAD\r
+ DCA COUNT / ZERO TOTAL STEP COUNTER\r
+ TAD PTRTBL+1\r
+ DCA NXTLCN / POINTS TO LOCN IN POINTER TABLE\r
+ / THIS TABLE HAS STEPS FOR EACH LETTER, SO\r
+ / COUNT TOTAL STEPS TO DESIRED LETTER\r
+ TAD PTRTBL\r
+ CLL RTL\r
+ RAL\r
+ TAD CDF\r
+ DCA SCANTB\r
+SCANTB, NOP\r
+ TAD% NXTLCN / GET NEXT STEP COUNT\r
+ CDF 10\r
+ TAD COUNT / AND ADD IT TO TOTAL STEP COUNT\r
+ DCA COUNT\r
+ ISZ NXTLCN / BUMP POINTER\r
+ SKP / SKIP IF DIDN'T CROSS BOUNDARIES\r
+ TAD P10 / IT DID, UPDATE FIELD WORD\r
+ TAD SCANTB\r
+ DCA SCANTB\r
+ ISZ #XTXAD\r
+ JMP SCANTB / NOT THERE YET\r
+ CLL\r
+ TAD COUNT / ADD COUNT TO\r
+ TAD PSYMB+1 / START OF CODE TABLE\r
+ DCA% PLETPS+1 / NOW IT'S CORRECT POINTER\r
+ RAL / IF LINK SET, WE CROSSED FIELD BOUNDARIES\r
+ TAD PSYMB / GET FIELD OF TABLE\r
+ DCA% PLCNM1+1 / PASS IT\r
+ JMP% FINDIT / GOT THE LETTER\r
+P40, 40\r
+P77, 77\r
+#XMCNT, / HERE WE INSERT THE POINTER INTO THE SYMBOL TABLE\r
+PTRTBL, ORG .+2\r
+CDF, 6201\r
+P10, 10\r
+\f#XNDRT, 0\r
+ TAD LETTER / #XLEFT FROM LAST #XLEFT LETTER\r
+ AND P77\r
+ JMS FINDIT\r
+ CDF CIF\r
+ JMP% #XNDRT\r
+/ ROUTINE TO HANDLE NUMBERS FROM FORTRAN SUBR. NUMBER\r
+/ NOT CALLED BY USER DIRECTLY\r
+#XPSNM, 0\r
+ TAD #XTXAD\r
+ IAC\r
+ SNA\r
+ JMP USZRO / IF EQ -1, USE 0\r
+ TAD T2\r
+ SPA / L.T. -3 BAD\r
+ JMP USZRO / SO USE ZERO\r
+ TAD M15\r
+ SPA CLA / G.T. 9 BAD TOO\r
+ JMP USEIT / IT'S -3,-2,0-9\r
+USZRO, CLA\r
+INDEX, TAD P60 / INDEX INTO TABLE\r
+ JMS FINDIT\r
+ CDF CIF\r
+ JMP% #XPSNM\r
+USEIT, TAD #XTXAD\r
+ JMP INDEX\r
+/ PLOT AN INTEGER EQUIV OR CENTERED (100-117 DEC =144-165 OCT)\r
+#XPSIN, 0\r
+ TAD #XTXAD\r
+ SPA SNA / .L.T. ZERO NO GOOD\r
+ JMP USSPAC\r
+ TAD M166 / G.T. 117 DEC. BAD\r
+ SMA\r
+ JMP USSPAC\r
+ TAD A22\r
+ SMA\r
+ JMP OKVAL / ITS A CENTERED 100-121 (0144-0165)\r
+ TAD P44\r
+ SMA CLA\r
+ JMP USSPAC / 0100-0143 ILLEGAL\r
+ TAD #XTXAD\r
+ACHAR, JMS FINDIT\r
+ CDF CIF\r
+ JMP% #XPSIN\r
+USSPAC, CLA\r
+ TAD P40 / DEFAULT TO SPACE\r
+ JMP ACHAR\r
+OKVAL, TAD P100 / PASS CENTERED AS 100-121\r
+ JMP ACHAR\r
+P100, 100\r
+A22, 22\r
+P44, 44\r
+M166, -166\r
+P60, 60\r
+M15, -15\r
+T2, 2\r
+\f ORG NXTLCN+200\r
+ EXTERN #HANG\r
+#XNPLT, 0 / NON INTERRUPT TIME PLOT ROUTINE\r
+ TAD TOTSTP\r
+ CMA\r
+ DCA TOTSTP\r
+ JMS% PSPCAS+1 / PREP FOR OCTANT CHECK\r
+MORE, ISZ TOTSTP\r
+ JMP ANOTHR / DO ANOTHER STEP\r
+DONE, CDF CIF / ALL DONE WITH THIS VECTOR\r
+ JMP% #XNPLT\r
+ANOTHR, JMS% PFIGUR+1 / TO FIGURE OUT IF MAJ OR DIAG\r
+ / RETURNS ZERO IF MAJOR ONLY, 1 IF MAJ + MINOR\r
+ TAD #XDPXR / OCTANT\r
+ JMS PLDBL\r
+ JMP MORE\r
+PLDBL, 0\r
+ TAD POCTBL+1 / START OF VECTOR TABLE\r
+ TAD #XCHTP / ADD 22 IF A PDP-12 OR NON 8-E\r
+ DCA PLTVCT / SAVE POINTER TO PROPER PLOT VECTOR\r
+ CIF 10\r
+ TAD BUFCNT / GET NUM. CHARACTERS IN BUF -1\r
+ TAD MBUFLG / AND MINUS LENGTH\r
+ CLL\r
+ SPA CLA\r
+ JMP ISROOM / STILL ROOM IN BUFFER\r
+ IOF / NO ROOM YET, GO TO HANG\r
+ CIF 0\r
+ JMS% PHANG+1\r
+DISPTR, 0\r
+ ION / HANG LEAVES INTERRUPT OFF\r
+ISROOM, TAD% PLTVCT / NOW GET THE VECTOR\r
+ DCA% PICHAR+1 / INTO BUFFER\r
+ ISZ PICHAR+1 / UPDATE LOCN\r
+ TAD PICHAR+1\r
+ CIA\r
+ TAD PBMX+1 / ARE WE OVERFLOWING MAX LOCN OF BUFFER\r
+ CLL\r
+ SMA CLA / PAST END ?\r
+ JMP LIMOK / NO\r
+ TAD PBMN+1 / YES, RESET TO BOTTOM\r
+ DCA PICHAR+1\r
+LIMOK, ISZ BUFCNT / UPDATE CHAR COUNT\r
+ / IF EMPTY WAS -1, SO NOW 0\r
+ JMP% PLDBL / WASNT EMPTY-CANT START TO PLOT\r
+ JMP OUTSUB\r
+\f#XPNOP, 0\r
+ TAD #XDPXR / USE AS INDEX INTO OPCODE TABLE\r
+ JMS PLDBL\r
+ CDF CIF\r
+ JMP% #XPNOP\r
+#XDPXR, 0\r
+TOTSTP, 0\r
+PSPCAS, ADDR SPCAS\r
+POCHAR, ADDR USBFMN\r
+INTFLG, / HANG ALWAYS FIELD 0\r
+PHANG, ADDR #HANG\r
+PICHAR, ADDR USBFMN\r
+BUFCNT,\r
+POCTBL, ADDR OCT8BL\r
+MBUFLG,\r
+PBMN, ADDR USBFMN\r
+#XCHTP,\r
+PFIGUR, ADDR FIGURE\r
+PLTVCT,\r
+PBMX, ADDR USBFMX\r
+\fOUTSUB, CLA\r
+ TAD% POCHAR+1 / GET NEXT LINE TO PLOT\r
+ DCA QTEMP5 / SAVE ACTUAL VECTOR FOR A SECOND\r
+ ISZ POCHAR+1\r
+ TAD POCHAR+1\r
+ CIA\r
+ TAD PBMX+1 / CHECK THAT OUTPUT DOESNT OVERFLOW THE BUFFER\r
+ CLL\r
+ SMA CLA / WILL IT?\r
+ JMP CLRFLG / NO\r
+ TAD PBMN+1 / YES\r
+ DCA POCHAR+1 / RESET IT\r
+CLRFLG, 6502\r
+ TAD QTEMP5 / GET VARIABLE\r
+ AND A7000 / DETERMINE TYPE OF PLOTTER\r
+ SZA CLA\r
+ JMP PENUD / A PEN OP (PDP-12 OR 8/E)\r
+ TAD QTEMP5 / ITS AN 8E\r
+ 6506 / SEND A CHARR\r
+ CLA\r
+ JMP OUTCHK / RETURN\r
+PENUD, TAD QTEMP5 / ITS A 12 OR NON-8/E PEN UP OR DOWN\r
+ SMA CLA\r
+ JMP TWOWD / IT'S A TWO WORD IOT\r
+QTEMP5, NOP / 1-WORDER SO DO IT NOW\r
+OUTCHK, TAD INTFLG\r
+ SNA CLA\r
+ JMP% PLDBL / DONE FOR NON-INTERRUPT\r
+ DCA INTFLG / INT MODE, CLEAR FLAG\r
+ CDF CIF\r
+ JMP% XDISMS+1\r
+XDISMS, ADDR #DISMS\r
+A7000, 7000\r
+TWOWD, 6514 / DRUM DOWN\r
+ 6521 / SECOND PART PEN #XLEFT\r
+ JMP OUTCHK\r
+\fINTPLT, 0 / HERE ONLY IF FLAG SET\r
+ CLA CMA\r
+ TAD BUFCNT / DECREMENT BUFFER COUNTER\r
+ SPA\r
+ JMP EMPTY\r
+ DCA BUFCNT\r
+ ISZ INTFLG / SHOULD NEVER SKIP\r
+ NOP\r
+ JMP OUTSUB\r
+EMPTY, CLA CMA\r
+ DCA BUFCNT / INITIALIZE BUFFER CNT-1\r
+ 6502 / CLEAR\r
+ JMP% INTPLT / EXIT IN FIELD 1\r
+/ BE SHURE BUFFER EMPTY BEFORE EXITING\r
+#XDNCK, 0\r
+ CLA\r
+ JMS PLDBL / DO A FINAL PEN UP\r
+WAIT, TAD BUFCNT\r
+ SMA CLA\r
+ JMP WAIT / STILL MORE TO DO\r
+ TAD #XCHTP\r
+ SNA CLA\r
+ 6500 / CLEAR INTERRUPT ENABLE FOR 8-ES \r
+ CIF CDF / ALL EMPTY\r
+ JMP% #XDNCK\r
+ END\r
+\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
\ No newline at end of file