File: LPSS.PA of Disk: V50/Source/Source-Listing-PAL-1
(Source file text)
/LPSS SET LPT HANDLER V50 / / / / / / / / / /COPYRIGHT (C) 1980 BY DATAPLAN GMBH, LAUDA, BRD / AND 2015 W. VAN DER MARK / / / / / / / / / / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DATAPLAN GMBH. /DATAPLAN GMBH ASSUMES NO RESPONSIBILITY FOR ANY ERRORS THAT MAY APPEAR /IN THIS DOCUMENT. / /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED /(WITH INCLUSION OF DATAPLAN'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DATAPLAN. / /DATAPLAN GMBH ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY /OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DATAPLAN. / / / / / / / / / / /W.V.D.MARK, DP CONSULTING, ZUERICH, SWITZERLAND /1-JAN-80 LPVERSION="X&77 *0 -1 DEVICE LPSS;DEVICE LPT;1040;LPT&177+4000;ZBLOCK 2 /THIS HANDLER IS MEANT TO BE USED FOR ANY KIND OF /LINEPRINTER ONE MAY ENCOUNTER. FOR THE MOMENT IT IS /IMPLEMENTED FOR LP08,LS8E,LA180 OR LX180 (LOGABAX). /LIKE THE KL8E HANDLER IT IS RECOMMENDED THAT THE CODE /SHOULD BE WRITTEN IN SUCH A WAY, THAT THE CHANGES /CAN BE MADE WITH A MODIFIED 'SET' PROGRAM, I.E. /THIS HANDLER SHOULD NOT BE REASSEMBLED TOO OFTEN. / ASSEMBLING PARAMETERS: LX180=0 /1 /FOR LOGABAX PRINTER SET LPT LX180 /0 /FOR OTHER PRINTERS ------------- LA180=1 /1 /FOR LA180 PRINTER SET LPT LA78 /0 /FOR LP08,LS8E PRINTER SET LPT LA8A / DEVC=66 /31 /OR SLU2 PORT VT78 SET LPT SLU2 /33 /OR SLU3 PORT VT78 SET LPT SLU3 /XX /OR SLUX SET LPT CODE XX W=205 /LINE-WIDTH OF PAPER SET LPT WIDTH X F=14 /14 /ASCII FORMFEED SET LPT PAGE /4 /LV8E EOT FORMFEED SET LPT LV8E /0 /NO FORMFEEDS SET LPT NO PAGE /OR SET LPT NO LV8E C=0 /-40 /CONVERT LOWER-CASE SET LPT NO LC /0 /PRINT LOWER-CASE SET LPT LC P=110 /HEIGHT OF PAPER SET LPT HEIGHT X /FOR FF SIMULATION T=10 /TAB LENGTH .GE.1 SET LPT TAB X S=0 /0 /USE HRDWR FFS SET LPT NO PAUSE /OR SET LPT NO FILL /4001 /HRDWR FFS + DELAY SET LPT PAUSE /12 /SIMULATE FFS SET LPT FILL A=-1 /136 /ARROW CONTROL CHARS SET LPT ARROW /-1 /DON'T ARROW THEM SET LPT NO ARROW E=0 /0 /PRINT ESC AS ^[(ARROW) SET LPT ESC /11 /PRINT ESC AS $ SET LPT NO ESC UNIT=0 /0,1 /FOR SECOND LPT SET LPT UNIT [0,1] /SET UNIT=1 FOR THE SECOND LINE-PRINTER IN YOUR SYSTEM /LP08 DCLP08=660 IFDEF DEVC < DCLP08=DEVC^10> LSF= 6001+DCLP08 /SKIP ON FLAG LSR= 6003+DCLP08 /SKIP ON ERROR LLS= 6006+DCLP08 /LOAD LPT BUFFER IFNDEF DEVC < LIC= 6667> IFDEF DEVC < LIC= 6005+DCLP08-10> /LA180 DBST= 6570 /SKIP IF DEMAND SET AND CLEAR IT DBTD= 6574 /LOAD COMPLEMENT OF AC0-11 TO TRANSMIT BUFFER DBSE= 6575 /SET INTERRUPT ENABLE DBCE= 6576 /CLEAR INTERRUPT ENABLE DBSS= 6577 /SEND STROBE PULSE /LOGABAX LPSC= 6576 /SEND CHARACTER LPCB= 6575 /CLEAR BUFFER LPSF= 6572 /SKIP ON FLAG MREAD= 7757 /BLEEP MONITOR LOC IN FLD 0 IFZERO UNIT < LLINE= MREAD+1 LPAGE= MREAD+2> IFNZRO UNIT < LLINE= MREAD-1 LPAGE= MREAD+3> *200 LPWDTH, -W /**SET /-WIDTH-1 [USE -121 FOR 80 COLUMNS] LTERMC, F /**SET+ /4 FOR LV8 * LVCCNV, C /**SET /0 IF PRINTER PRINTS LC * LPTLCT, LLINE /**SET /MODIFIED BY LPT UNIT * LPTWC, 0 / * LPTCA, 0 / * PLPLNK, 0 /GETS ADRESS OF PAGE 2 * TAD I LPT / R/W BIT TO LINK * L AND LP7700 / * I CMA /TREAT 0 PG CNT AS 0 WD CNT N DCA LPTWC /SAVE -(DBLWD COUNT+1) * K LP70, 70 / * DCA LPTEOF /INITIALIZE EOF * LPT177, 177 / * LPT106, 106 / * LPT214, RDF /DON'T MOVE THIS CODE *** TAD LPTCIF / M DCA LPTXIT /SAVE CIF CDF RETRN FIELD U TAD I LPT / S LPT213, AND LP70 / T TAD LPCDF / DCA LPTCDF / N ISZ LPT /PT TO BUFFER O TAD I LPT /GET BUFFER ADDRESS T DCA LPTCA /SAVE BUFFER PTR CLA IAC /MAKE -WIDTH TAD LPWDTH DCA LPARG /PASS WIDTH AS ARGUMENT ISZ LPT /PT TO BLOCK # C TAD I LPT /GET IT H ISZ LPT /POINT TO ERROR RETURN G SNL JMP LPTERR /CAN'T READ FROM LPT LPM140, SZA CLA /**SET SENTINEL JMP LPSTRT IFNZRO LX180 < NOP > /?INTERRUPT DISABLE IFZERO LX180 < IFNZRO LA180 < DBCE> /INT DIS LA180 IFZERO LA180 < LIC >> /INT DIS LP08 TAD LPT213 JMS LPTPCD /RESET ALL TAD LPT215 JMS LPTPCD /CR ONLY TAD LTERMC /OUTPUT FORM FEED IF BLOCK 0 LPTELP, JMS LPTPCD /PRINT 3RD CHAR OF DOUBLEWORD ISZ LPTWC JMP LPTLP /GET 3 MORE CHARS TAD LPTEOF /WAS THIS A CLOSE OPERATION? SKP CLA /SNA CLA/NO GOOD FOR FOTP PREDELETE! LPTCTZ, TAD LTERMC /YES, TREAT LIKE CTZ JMS LPTPCD /OUTPUT FORM FEED IF EOF SEEN (EOT OF LV8) ISZ LPT /BUMP TO NORMAL RETURN LPTXIT, HLT /RESTORE FIELDS JMP I LPT /EXIT /UNPACKING LOOP - USES A SHIFT REGISTER METHOD TO GET THE /THIRD CHARACTER IN EACH DOUBLEWORD. LPTLP, STL /GUARD BIT OF SHIFT REGISTER LPROTL, RTL RTL SPA /DO WE HAVE 8 BITS SHIFTED IN? JMP LPTELP DCA LPTEOF /SAVE SHIFT REGISTER TAD I LPTCA JMS LPTPCD /PRINT A CHAR TAD I LPTCA ISZ LPTCA /BUMP INPUT POINTER LP7400, 7400 /PROTECT ISZ AND LP7400 CLL RAL TAD LPTEOF /SHIFT HIGH 4 BITS INTO JMP LPROTL /SHIFT REGISTER LPTERR, STL CLA RAR /PUT 4000 IN AC JMP LPTXIT /AND TAKE ERROR RETURN LPTPCD, 0 /INTER-PAGE JUNK JMS I PLPLNK LPARG, 0 LPP1, 0 SZA /ZERO PRINT MEANS END JMP LPCHAR LPTCDF, HLT JMP I LPTPCD /CHAR PRINT ROUTINE LPCHAR, /LOW LEVEL PRINT ROUTINE LPT215, AND LPT177 TAD LPM140 /IS IT LOWER CASE? SMA TAD LVCCNV /YES, CONVERT (MAYBE) TAD LPT106 /IS IT AN EOF? (32) SZA JMP .+3 LP7700, 7700 /**SET SENTINEL JMP LPTCTZ /YES, GET OUT TAD LP7632 /RESTORE IFZERO LX180 < IFZERO LA180 < NOP /NOP'S NEEDED FOR SET LLS /PUT CHAR IN LPT BUFFER NOP > IFNZRO LA180 < CMA DBTD /PUT CHAR IN LP BUFFER DBSS /SEND STROBE FOR PRINTRONIX >> IFNZRO LX180 < NOP /FOR SET LPCB /CLEAR FIRST LPSC /SEND TO LX180 > LP7600, 7600 /CLEAR AC LPCTCL, TAD LP7600 KRS TAD LP175 /CHECK FOR ^C FROM CONSOLE SNA CLA KSF /WITH FLAG UP JMP .+3 LPTCIF, CDF CIF 0 /**SET SENTINEL JMP I LP7600 /YES, RETURN TO OS/8 IFZERO LX180 < IFZERO LA180 <LSF> /NO FOR SET IFNZRO LA180 <DBST>> /NO MUST BE HERE IFNZRO LX180 <LPSF> /FOR LX180 JMP LPCTCL /WAIT FOR FLAG ISZ I LPTLCT /COUNT ALL LP175, 175 /PROTECT SKIP JMP I LPP1 /BACK IN LINE TO P 2 LPCDF, /** SET SENTINEL LPSTRT, CDF 0 /HERE ON NON-ZERO BLOCK# IFNZRO LX180 < SKP CLA /GO TO PAGE INIT FOR LX > IFZERO LX180 < CLA /START FOR OTHERS > JMP LPTELP TAD I LPTLCT /-WIDTH+CNT CIA /WIDTH-CNT TAD LPWDTH /-WIDTH-1=-CNT-1 DCA LPHOLD /TEMPORARY TAD LPT215 /CR ONLY JMS LPTPCD LPSPFL, ISZ LPHOLD SKP JMP LPTELP TAD LPM140 JMS LPTPCD JMP LPSPFL LP7632, 7632 LPTEOF, 0 LPHOLD, 0 ZBLOCK 375-. LPT, LPVERSION /NORMAL ENTRY POINT CLA STL RAR JMS PLPLNK PAGE SEND= JMS I LPTOUT LPTOUT, 0 JMP LPARGS /JUMP OVER SET ARGS LPPAGL, -P /**SET /PAGE LENGTH LPTABL, T /**SET /TAB SIZE LPSIMU, S /**SET /4001 HW FF, 12 SW FF LPCTRL, A /**SET /CTRLS: 136=^X, -1=NO PRINT LPTESC, E /**SET /11: ESC=$, 0: ESC=^[ LPLINE, LLINE /**SET /MODIFIED BY LPT UNIT LPPAGE, LPAGE /**SET / " " LPARGS, AND (177 TAD (-33 /IS IT ESCAPE? SNA TAD LPTESC /CONVERT TO PETRO-DOLLAR (MAYBE) TAD (33 DCA LPTEMP CDF 0 TAD I LPTOUT ISZ LPTOUT DCA LWIDTH /PASS WIDTH ARGUMENT TAD LPTEMP SNA SEND /IGNORE REAL NULLS TAD (-177 SNA SEND /IGNORE RUBOUTS TAD (145 SNA JMP LPTNRM /CTRLZ IS NEVER PRINTED! TAD (14 CLL TAD (7 SZL CLA /FORMAT CHAR? JMP LPTCTL /YES TAD LPTEMP AND LPTNMV /CONTROL CHAR? SZA CLA JMP LPTNRM /NO;OUT NORMAL TAD LPCTRL /CONVERT TO ^X? SMA /-1=NO CONVERSION AND NO MOVE JMP LPTCON /136=CONVERSION AND ALSO=^ LPTMMV, IAC /WITH NEXT MAKES -2 FOR BCKSPC LPTNMV, CMA CLL /-1 FOR NO MOVE, ALSO MASK 140 TAD I LPLINE DCA I LPLINE /MODIFIED CHAR. COUNT LPTNRM, TAD LPTEMP /SEND NORMAL SEND LPTCHK, TAD I LPLINE /CHECK IF LINE OVERFLOW SPA CLA SEND /NO;GET OUT WITH 0 AC TAD (15 /YES, RESET LINE SEND TAD (12 DCA LPTEMP TAD LWIDTH DCA I LPLINE /RESET LINE LPTLFD, ISZ I LPPAGE JMP LPTNMV /NOT AT END OF PAGE TAD (12 SEND LPTPRE, TAD LPPAGL /AT END ***** DCA I LPPAGE /RESET PAGE JMP LPTLRE /RESET LINE LPTCTL, TAD LPTEMP TAD LPTJMP DCA .+1 HLT /MUST BE 6 AFTER LPTPRE ***** JMP LPTNMV /" 7":BELL; UNCHANGED; NO MOVE JMP LPTMMV /"10":BSPC; UNCHANGED; - MOVE JMP LPTTAB /"11":TAB; CONVERT; X MOVE JMP LPTLFD /"12";LF; UNCHANGED; NO MOVE, INC PAGE LPTJMP, JMP LPTPRE /"13":VTAB; NOTHING; RESET ALL JMP LPTFF /"14":FFED; SIMU!DELAY; RESET ALL TAD (15 /"15":CR; UNCHANGED; RESET LINE SEND LPTLRE, TAD LWIDTH /RESET LINE COUNTER DCA I LPLINE SEND /GET OUT LPTFF, TAD LPSIMU /IF NEGATIVE USE HARDWARE SMA SZA CLA JMP LPFFL /POSITIVE: SIMULATE WITH LFS TAD LPTEMP /IT IS 14 FOR FF SEND LPFFL, TAD LPSIMU /IF HARDWARE DELAY WITH 4001 SNA JMP LPTPRE /OR NO DELAY WITH 0000 SEND /IF SOFTWARE SIMULATE WITH 12 ISZ I LPPAGE /PAGE FINISHED? JMP LPFFL JMP LPTPRE /RESET ALL AND RETURN LPTTAB, TAD (40 SEND /ALWAYS ONE SPACE TAD I LPLINE /-WIDTH+CNT CIA /WIDTH-CNT TAD LWIDTH /-CNT TAD LPTABL SPA JMP .-2 /-CNT+X*TABL (POSITIVE) SZA CLA /AT TAB STOP? JMP LPTTAB JMP LPTCHK /END TABS IF LINE FULL LPTCON, SEND /SEND ^ TAD (100 /AND ALPHA FOR CTRL JMP LPTNRM LWIDTH, -120 LPTEMP, 0 $$$