File: PL.TK of Disk: Disks/MyPDP/m8-blue-rka1-rkb1
(Source file text)
/PL.TK 5-DEZ-79 / /THIS TASK SERVES AS A PLOTTERDRIVER. IT WRITES /THE DATA IN THE DISKFILE "SPOOL.PL" ON THE SYSTEM DISK. /INTERNAL IN THE TASK IS A SECOND TASK THAT MOVES THE DATA /FROM THE DISKFILE TO THE PLOTTER. / **** NOTE **** /THIS TASK ASSUMES THAT ALL REQUESTS ARE FOR ONE BLOCK ONLY ! /CONFIGURATION PARAMETERS: MASSDEV="S^100+"Y&3777 /NAME OF MASS STORAGE DEVICE DECIMAL WIDTH1=0 /HIGH ORDER WIDTH OF PLOTTER FOR XY8E WIDTH2=3000 /LOW ORDER (MOD. 4096) WIDTH OCTAL UNIT=0 /UNIT NUMBER *200 PLTEMP, "P^100+"L&3777 1000 /A FOUR PAGE TASK LENGTH, /FILE LENGTH XINIT, INIT /POINTER TO INITIALIZATION CODE XMAXY, MAXY XIO, IO XPLEND, PLEND XEND, END XRTV, RTV XBUF, BUFFER XWTV, WTV XFIN, FINISH XPLOTR, PLOTR FIRST, 0 PL, JMP I XINIT //GO INITIALIZE THIS TASK. OVERLAYED WITH: / SNA //CLOSE CALL ? JMP I XPLEND //MAKE END OF FILE JMS DEFER /GET FUNCTION WORD AND C70 /GET FIELD OF BUFFER TAD (4200+UNIT /ASSUME ONE BLOCK TRANSFER DCA RTV ISZ X TAD I X DCA RTV+1 JMS MONITOR RESERV RETURN CONTINUE DCA PLSLOT /SEE IF THERE IS ENOUGH ROOM FOR THIS TRY, CLA CLL //13BIT COMPARISON AHEAD TAD COUNT //NUMBER OF BLOCKS OCCUPIED TAD MLNGTH //COUNT-LENGTH+1 SNL CLA //OK ? JMP GO //YES, PROCEED JMS MONITOR //WAIT A WHILE STALL DGNTICK //1 SECOND JMP TRY //TRY AGAIN /TRANSFER THE DATA TO DISK NOW: GO, TAD FIRST TAD INBLK //THE CURRENT INPUT BLOCK# DCA RTV+2 TAD XRTV CDTOIF JMS MONITOR CALL MASSDEV JMP .-3 /LOOP ON BUSY DCA EVNT JMS MONITOR WAIT EVNT, 0 CLA CLL /NO ERRORS EXPECTED TAD INBLK TAD MLNGTH //BLOCK-LENGTH+1 SZA //END OF FILE ? TAD LENGTH //BLOCK+1 DCA INBLK ISZ COUNT /UPDATE COUNTER JMS MONITOR /START THE WRITER RUN TCBPW, 0 /GET TCBP OF WRITER TASK K170, 170 /OK, HE'S RUNNING ALREADY JMS MONITOR SIGNAL HALT PLSLOT, 0 INBLK, 0 COUNT, 0 RTV, ZBLOCK 3 /THE OUTPUT WRITER. A SEPARATE TASK CREATED BY THE INITIALIZATION WRITER, CDTOIF TAD COUNT /ANYTHING IN FILE SNA CLA JMP I XEND /NOTHING TO DO TAD FIRST TAD OUTBLK DCA WTV+2 /ACTUAL BLOKNUMBER TAD XBUF DCA PLCAO /BUFFER POINTER TAD XWTV JMS I XIO TAD M400 DCA PLWCO /WORD COUNT OUTPUT PL1, TAD I PLCAO /GET A WORD SNA /END OF FILE ? JMP NEXTB /YES JMS I XMAXY /TRACK MAXIMUM Y DIRECTION IFDEF XY8E < AND C77 /GET DIRECTION BITS DCA PLX /STORE TAD I PLCAO BSW / AND C77 /GET COUNTER CMA / DCA PLCOUNT /-NUMBER OF STEPS PL2, TAD PLX /OUTPUT A STEP JMS I XPLOTR ISZ PLCOUNT /DONE ? JMP PL2 /NO, CYCLE > IFDEF KLPLOT < JMP NEXT /WAS CHARACTER MODE, DONE AND C7 /LINK HAS PEN BIT; GET DIRECTION SZL /PEN DOWN ? TAD C200 /YES, SET PEN BIT DCA PLX TAD I PLCAO AND (3770 /GET ALL COUNT BITS DCA PLCOUNT /STORE IN COUNTER PL2, CLL TAD PLCOUNT SNA /END OF LINE ? JMP NEXT /QUIT TAD KM170 SMA /CAN WE DO ANOTHER FULL COUNT ? DCA PLCOUNT /YES, UPDATE COUNTER AND (3770 /AVOID OVERFLOW NOW TAD K170 / TAD PLX /GET DIRECTION AND PEN JMS I XPLOTR /AND OUTPUT IT SZL /DID THE COUNTER OVERFLOW ? JMP PL2 /NO, GO ROUND AGAIN > NEXT, ISZ PLCAO K36, 0036 /PROTECT ISZ ISZ PLWCO /END OF BUFFER ? JMP PL1 KM170, SKP CLA NEXTB, JMS I XFIN /CLEANUP ACM1 TAD COUNT DCA COUNT /UPDATE THE COUNTER TAD OUTBLK TAD MLNGTH /BLOCK-LENGTH+1 SZA /END OF FILE TAD LENGTH /BLOCK+1 DCA OUTBLK JMP WRITER /PROCEED WITH NEXT BLOCK MLNGTH, 0 /-LENGTH+1 OUTBLK, 0 /OFFSET IN FILE PLCOUNT,0 /NUMBER OF STEPS PLWCO, 0 /WORDCOUNT WTV, 0 PLCAO, 0 PLX, 0 PAGE YTCBPW, TCBPW XCOUNT, COUNT OFFSET, 200 XOTV, OTV XOVLAY, OVLAY XMOVEUP,MOVEUP /0 IO, 0 /ROUTINE TO PERFORM DISK IO JMS MONITOR CALL DEV, MASSDEV JMP .-3 /LOOP ON BUSY DCA EVNT1 JMS MONITOR WAIT EVNT1, 0 CLA CLL /NO ERRORS EXPECTED CDTOIF JMP I IO PLEND, CDTOIF TAD I XCOUNT / SZA CLA /FILE EMPTY ? JMP NOEND /NO JMS I XMOVEUP /MOVE PAPER OUT TAD M4 TAD I YTCBPW DCA ZTEM1 CDF 0 TAD I (FHEAD DCA I ZTEM1 TAD ZTEM1 DCA I (FHEAD ACM1 /GIVE NULL EVENT JMS MONITOR EXIT SWPOUT END, JMS MONITOR RUN "P^100+"L&3777 K54, 0054 /NOP NOEND, ACM1 JMS MONITOR EXIT IFDEF XY8E < MAXY, 0 DCA ZTEM1 /CURRENT PLOTTER WORD TAD ZTEM1 AND C4 /MINUS X ? (DRUM UP) SZA CLA JMP UP /GOING UP TAD ZTEM1 AND (10 /PLUS X ? (DRUM DOWN) SNA CLA JMP MAXEND /NO X-MOVE TAD ZTEM1 BSW AND C77 STL CMA TAD XMAX2 /LOW ORDER DCA XMAX2 SZL /BORROW? CMA /YES TAD XMAX1 DCA XMAX1 SNL /BORROW AGAIN? JMP MAXEND /NO DCA XMAX1 /TOO FAR, RESET COUNTER DCA XMAX2 /FOR TOTAL EXCURSION JMP MAXEND UP, TAD ZTEM1 /COUNT FARTHEST EXCURSION IN -X DIR BSW AND C77 CLL IAC TAD XMAX2 DCA XMAX2 /LOW ORDER RAL TAD XMAX1 /ADD TO HIGH ORDER IF CARRY DCA XMAX1 MAXEND, TAD ZTEM1 JMP I MAXY XMAX1, 0 XMAX2, 0 / > IFDEF KLPLOT < MAXY, 0 DCA ZTEM1 KLPLOT-10+6001 /ABORT FLAG UP ? SKP JMP I MAXY /YES, SKIP THIS PLOTWORD ACM2 TAD ZTEM1 SNA /PLOT MODE SETTING ? JMP PLOTM /YES IAC SNA CLA /ASCII MODE SETTING ? JMP ASCIIM /YES TAD MODE SZA CLA /PLOT MODE ? JMP PLTCHR /NO, CHARACTER MODE AC0003 AND ZTEM1 SNA CLA /PURE X ? JMP MAXEND /YES, DONE TAD ZTEM1 AND (3774 /EXTRACT COUNTER AND Y-SIGN CLL RTR RAR /NOW COUNTER IN 4-11, Y-SIGN IN LINK SZL /GOING UP ? JMP DWN /NO TAD YMAX DCA YMAX JMP MAXEND /ADDED STEP TO MAX Y POSITION DWN, STL CIA TAD YMAX SZL CLA DCA YMAX MAXEND, AC4000 /MOVE PEN BIT TO LINK TAD ZTEM1 / ISZ MAXY /SKIP RETURN JMP I MAXY /RETURN ASCIIM, ACM1 PLOTM, DCA MODE /SET MODE FLAG PLTCHR, TAD ZTEM1 TAD (-12 AND C177 SZA CLA /LINEFEED ? JMP PLTCH1 /NO TAD K54 STL CIA TAD YMAX SZL CLA DCA YMAX PLTCH1, TAD ZTEM1 /NOW PRINT THE CHARACTER JMS PLOTR /OUTPUT THE CHARACTER JMP I MAXY /AND TAKE NON-SKIP RETURN YMAX, 0 MODE, 0 / > FINISH, 0 /MOVE PEN TO NEXT PICTURE CDTOIF /READ OVERLAY IN THE BUFFER TAD ("S^100+"Y&3777 DCA DEV /READ OVERLAY FROM SYS ! TAD XOTV / JMS IO TAD (MASSDEV DCA DEV /RESTORE DEVICE FOR SPOOL.PL TAD OFFSET / JMS I XOVLAY / JMP I FINISH /DONE PLOTR, 0 /OUPUT ROUTINE; MUST PRESERVE THE LINK ! DCA EVNT1 /SAVE PLOTWORD IFDEF KLPLOT <CLA IAC /SET INTERRUPT ENABLE KLPLOT-10+6005 /KIE > IFDEF XY8E <XY8E+6007 /SET INTERRUPT ENABLE > TAD M10 /TIMEOUT JMS MONITOR WAIT PLOT CLA TAD EVNT1 /GET PLOTWORD IFDEF KLPLOT<KLPLOT+6006> IFDEF XY8E < AND (3 /TEST FOR PENUPDOWN SZA JMP PENUD TAD EVNT1 XY8E+6006 > PENUEX, CLA JMP I PLOTR IFDEF XY8E < PENUD, RAR CLA RTL TAD (XY8E+6003 DCA .+1 HLT JMP PENUEX > OTV, ZBLOCK 3 PAGE BUFFER, ZPLOTR, PLOTR IFDEF KLPLOT < ZYMAX, YMAX ZMODE, MODE > IFDEF XY8E < ZXMAX1, XMAX1 ZXMAX2, XMAX2 > 0 OVLAY, . TAD M200 /CORRECTION DCA ZTEM1 /RELOCATION DISTANCE OVL1, TAD .&7600 SNA /END OF POINTERS ? JMP OVL3 TAD ZTEM1 OVL2, DCA .&7600 ISZ OVL1 ISZ OVL2 JMP OVL1 OVL3, IFDEF XY8E < AC0002 JMS I ZPLOTR /ONE FINAL PENUP TAD (10 /SET TO DRUM DOWN (+X) DCA SLWCOM TAD I ZXMAX2 CMA /COMPLEMENT LOW ORDER DCA I ZXMAX2 /NUMBER OF STEPS TO GO IN X TAD I ZXMAX1 CMA DCA I ZXMAX1 /HOW MANY TIMES AROUD? JMS SLEW /GO SLEW TO NEXT PICTURE TAD (40 /SET NOW FOR PEN RIGHT (-Y) DCA SLWCOM TAD (-WIDTH2-1 /SET TO MAX WIDTH DCA I ZXMAX2 TAD (-WIDTH1-1 DCA I ZXMAX1 JMS SLEW /GO TO EDGE OF PLOTTER JMP I OVLAY SLEW, 0 XLOP, ISZ I ZXMAX2 JMP LOWINC /ONE STEP LOW ORDER ISZ I ZXMAX1 /LOW ORDER AGAIN? JMP XLOP /YES JMP I SLEW LOWINC, TAD SLWCOM /EITHER +X OR -Y JMS I ZPLOTR JMP XLOP SLWCOM, 0 / > IFDEF KLPLOT < TAD I ZYMAX RAR RTR AND (777 CMA DCA I ZYMAX AC0002 JMS I ZPLOTR /SET PLOT MODE TAD (106 /PEN UP, 10 STEPS -Y JMS I ZPLOTR ISZ I ZYMAX /DONE ? JMP .-3 /CYCLE TAD (TAD STRNG JMS STRING KLPLOT-10+6001 /ABORT FLAG UP ? TAD (STRNG1-STRNG2 TAD (TAD STRNG2 JMS STRING ACM1 DCA I ZMODE /SET TO CHAR MODE KLPLOT-10+6002 /CLEAR ABORT FLAG JMP I OVLAY MOVEUP, 0 TAD (TAD STRNG3 JMS STRING JMP I MOVEUP STRING, 0 DCA TADI TADI, TAD STRNG SNA JMP I STRING JMS I ZPLOTR ISZ TADI JMP TADI STRNG, 1;17;215;4;212;"[;0 STRNG1, "E;"N;"D;" "O;"F;" ;"P;"I;"C;"T;"U;"R;"E;"];215;212;0 STRNG2, "P;"I;"C;"T;"U;"R;"E;" ;"A;"B;"O;"R;"T;"E;"D;"];215;212;0 STRNG3, 5;212;4;212;0 / > IFDEF XY8E < MOVEUP, 0 /SUBROUTINE TO POSITION THE PAPER JMP I MOVEUP /(TO BE SUPPLIED) > PAGE QPLOTR, PLOTR XFILE, FILE XTCBPW, TCBPW /ARGUMENT IN RUN-REQUEST XWRITER,WRITER /START ADDRESS OF WRITER TASK XFIRST, FIRST XLENGTH,LENGTH XMLNGTH,MLNGTH XPL, PL YWTV, WTV YBUF, BUFFER YOTV, OTV YOTV1, OTV+1 YOTV2, OTV+2 0 INIT, SNA //CLOSE ? JMP CLOSE //QUIT DCA INIT //SAVE POINTER TO REQUEST TAD I ZMYCDF DCA PLCDF //SAVE FIELD OF REQUEST CDTOIF TAD XFILE /POINTER TO FILE LOOKUP REQUEST BLOCK JMS MONITOR CALL "D^100+"I&3777 JMP .-3 SZA CLA JMP ERROR /*** SPOOL.PL NOT FOUND *** TAD FILE+2 CIA DCA I XLENGTH /LENGTH OF SPOOLFILE TAD FILE+2 IAC DCA I XMLNGTH /-LENGTH+1 TAD FILE+4 DCA I XFIRST /STARTBLOCK OF SPOOLFILE INIT1, CDF 0 TAD I (FHEAD SNA JMP WAITS /NO BLOCKLET AVAILABLE JMS DEFER DCA I (FHEAD ACM1 TAD X DCA AUTO10 DCA I AUTO10 /ZERO BACKLINK DCA I AUTO10 /ZERO THREAD TAD XWRITER DCA I AUTO10 /START ADDRESS DCA I AUTO10 /ZERO BLOCKNUMBER RIF DCA I AUTO10 /INSTRUCTION FIELD TAD AUTO10 CDTOIF DCA I XTCBPW /TCBP OF WRITER TASK TAD (200+UNIT RIF DCA I YWTV /SETUP FUNCTION WORD TAD I YWTV DCA I YOTV TAD YBUF DCA I YOTV1 CDF 0 ACM1 TAD I (CURTSK JMS DEFER CDTOIF IAC DCA I YOTV2 /BLOCK # OF OVERLAY IFDEF XY8E <6503 6507 / > IFDEF KLPLOT < KLPLOT-10+6002 /CLEAR ABORT FLAG AC0002 /PLOTMODE JMS I QPLOTR TAD (173 /MOVE BACK TO END OF PREVIOUS PICTURE JMS I QPLOTR ISZ (-20 JMP .-3 AC0001 /SEND ASCII-MODE JMS I QPLOTR TAD (17 /SEND NORMAL (-NON-JAPANESE) MODE JMS I QPLOTR TAD C215 JMS I QPLOTR CLA / > TAD (SNA DCA I XPL /PATCH FIRST INSTRUCTION OF TASK TAD INIT PLCDF, HLT JMP I XPL //START THE TASK WAITS, JMS MONITOR STALL DGNTICK CLA CLL JMP INIT1 ERROR, TAD (-HRDERR-1 JMS MONITOR EXIT RELEASE /A CLOSE WILL FOLLOW CLOSE, ACM1 /OK EVENT JMS MONITOR EXIT SWPOUT FILE, MASSDEV /NAME OF DEVICE HANDLER UNIT /UNIT NUMBER FILENAME SPOOL.PL /FILENAME $