A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rkb / paroff / pdpplt.ra
diff --git a/sw/rescue/lab8e_goettingen/disk2_11/rkb/paroff/pdpplt.ra b/sw/rescue/lab8e_goettingen/disk2_11/rkb/paroff/pdpplt.ra
new file mode 100644 (file)
index 0000000..557e172
--- /dev/null
@@ -0,0 +1,559 @@
+/      \ 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
+/\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
+/\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   #XOLDP\r
+       ENTRY   #XXOLD\r
+       ENTRY   #XYOLD\r
+       ENTRY   #XPENC\r
+       ENTRY   #XINCR\r
+       ENTRY   #XFCTX\r
+       ENTRY   #XFCTY\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
+/\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            / TEST THE ONCE ONLY FLAG\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     ONCE            / CLEAR THE ONCE ONLY FLAG TO ZERO\r
+/      THIS IS FOR GUYES PLOTTING MORE THAN 4095 DRAWINGS WITH ONE PROGRAM.\r
+/      SOME PEOPLE ARE CRAZY, AREN'T THEY?\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
+#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
+#XINCR,        ORG     .+3             / INCREMENT SIZE DEPENDENT OF EACH PLOTTER\r
+#XFCTX,        ORG     .+3             / X - FACTOR\r
+#XFCTY,        ORG     .+3             / Y - FACTOR\r
+BUFFL= 435\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
\ No newline at end of file