/PRINTER & PLOTTER HANDLER ADCOM X80SP / PLOTTER HANDLER CONVERTS [ INTO DC3 AND ] INTO DC1 / X80SP HANDLES HT,VT,CR,LF,FF / HANDLER SUPPORTS DC3 (XOFF) - DC1 (XON) COMMANDS FROM X80SP. / SYSTEM TTY INPUT ETX (^C) CAUSES RETURN FROM THE HANDLER. / ALL CONTROL CHARACTERS SEND TO THE HANDLER ARE DIRECTED TO THE X80SP. / JOHANN J. ANDRES UNIVERSITY GOETTINGEN / / H.A. 10.DEC.1981 REV 0.0 / H.A. 4. APR.1982 REV 1.0 INSERTS [ --> DC3 AND ] --> DC1 / H.A. 5. OCT.1982 REV 1.1 LITTLE CHANGES SAVE 2 WORDS OF MEMORY / H.A. 10.OCT.82 REV 1.2 REMOVES POSSIBLE LISF/LIRB TIMING PROBLEMS / H.A. 26.OCT.82 REV 1.3 REMOVES FRTS PROBLEM: SOME CHARS WERE LOST / H.A. 17.DEC.82 NON VALID STATUS INPUT CAUSE: HLT / H.A. 5.JAN.83 REMOVES RANDOM DATA ERROR INSERTED ON 17.DEC.82 / H.A. 27.JAN.83 XON/XOFF CHARACTER CHANGED, '['&']' CONVERSION ROUTINE IMPROVED / X80VER="E&77 /VERSION 4 TTYDVC=03 / TTY INDVC=31 / LPT INTERFACE DEVICE CODE OUTDVC=32 / LPT XON=021 / BUFFER EMPTY MESSAGE XOFF=23 / BUFFER FULL MESSAGE / LSF=10^OUTDVC+6001 / SKIP ON LPT FLAG LLS=10^OUTDVC+6006 / CLEAR FLAG & PRINT CHARACTER LISF=10^INDVC+6001 / SKIP ON LPT FLAG LIRB=10^INDVC+6006 / CLEAR FLAG & READ STATUS KSF=10^TTYDVC+6001 / SKIP ON TTY FLAG KRS=10^TTYDVC+6004 / OR TTY KBD CHARACTER INTO AC / ACL=7701 / PAL8 DOESN'T KNOW HIS COMPUTER! / MQL=7421 / / *0 / 8 WORD HANDLER BLOCK -2 / TWO UNITS DEVICE X80S DEVICE LP1 1040 LPT&177 / STARTING ADR. 0;0 DEVICE X80S DEVICE PL1 1040 / WRITE ONLY LINE PRINTER PLT&177 / STARTING ADR. 0;0 / 2 WORDS MUST BE ZERO / / *200 / START OF HANDLER PLT, X80VER / ENTRY FOR PLOTTER HANDLER DCA SAC TAD PLT / HERE WE SAVE THE RETURN ADR. DCA LPT / INTO THE LPT RETURN POINT TAD TPLT / INSERT PLOTTER CALL CMD DCA TYPE JMP START LPT, X80VER DCA SAC / SAVE AC TAD TLPT / INSERT LPT CALL CMD DCA TYPE TAD (23) / SWITCH OFF THE JMS LPTPCH / PLOTTER MODE START,/ TAD SAC / RESTORE AC CLL CML CLA RAR TAD I LPT /LINK GOES ON HERE. IF NOT READ WAS REQUESTED AND LP7700 CMA DCA LPTWC LPT214, RDF / FF CONSTANT TAD LPTCIF DCA LPTXIT /SAVE CALLING FIELD IN RETURN SEQUENCE TAD I LPT AND LPT70 TAD LPCDF0 DCA LPTCDF /GET BUFFER FIELD ISZ LPT TAD I LPT DCA LPTCA /LPTCA GETS BUFFER ADDRESS ISZ LPT TAD I LPT LPTCDF, HLT ISZ LPT SNL /IF LINK NOT SET,GIVE ERROR JMP LPTERR SZA CLA / INSERT FF IN FRONT OF THE FIRST DATA BLOCK TO PRINT JMP LPT177 TAD LPT214 / FF --> AC JMP LPTKLG /NOW PICK UP THE CHARACTERS, UNPACK THEM AND PRINT. / / LOOP TO PICK UP THE CHARACTERS / LPTLP, CLA TAD I LPTCA JMS LPTPCH TAD I LPTCA AND LP7400 DCA LPTCDF ISZ LPTCA LP7400, 7400 TAD I LPTCA JMS LPTPCH TAD I LPTCA AND LP7400 CLL RTR LPTLF, RTR TAD LPTCDF RTR RTR ISZ LPTCA NOP /PROTECT ISZ LPTKLG, JMS LPTPCH LPT177, 177 ISZ LPTWC JMP LPTLP LPRTRN, ISZ LPT LPTXIT, HLT JMP I LPT LPTWC, 0 LPTCA, 0 / LPTERR, CLA CLL CML RAR / FATAL ERROR RETURN JMP LPTXIT / HOME TO MAM / / / HERE WE PRINT THE CHARACTERS / LPTPCH, 0 / AND LPT177 / WE TRUNCATE TO SEVEN BITS CHARACTER TYPE, 0 / CHANGED AT EXECUTION TIME SEE TPLT & TLPT TAD (-135) SNA / ']' --> DC3 TAD (23-135) TAD (135-133) SNA / '[' --> DC1 TAD (21-133) TAD (133-32) SNA / ^Z (SUB) TREAT AS END OF FILE JMP LPRTRN TAD (32) L4,/ LLS / CLEAR FLAG LOAD CHARACTER & PRINT LSF / IF PRINTER DONE FLAG SET, THEN WE CONTINUE JMP .-1 / ELSE WE WAIT FOR DONE FLAG LP7600, 7600 / CLA TAD LP7600 / THIS IS TO GET A NEGATIVE NUMBER KRS / OR TTY KBD INTO AC TAD LPT175 / TEST FOR ETX (^C) SNA CLA / IF NO ETX THEN GO AND WAIT FOR LP FLAG KSF / ETX ENTERED, TTY KBD ACTIVE THEN JMP INTO MONITOR JMP LPISF / TEST INPUT FROM PRINTER LPTCIF, CDF CIF 0 JMP I LP7600 LPISF, LIRB / READ ACTUAL LPT STATUS WORD DCA LPOLD / SAVE THE ACTUAL STATUS WORD TAD LPOLD / RESTORE STATUS --> AC AND LPT177 / MASK OUT 7 BITS TAD LPM23 / TEST DC3 (^S) SNA JMP LP7600 / DC3 ENTERED WAIT FOR DC1 TAD LPOFON / TEST FOR DC1 (^Q) SNA CLA JMP I LPTPCH / DC1 OR MEANINGLESS INPUT, SO WE CONTINUE PRINTING CLA JMP I LPTPCH / / TLPT, JMP L4 / LINE PRINTER HANDLER TPLT, NOP / SAVE AC / SAC, 0 / ON ENTRY WE SAVE THE AC / LP7700, 7700 LPT70, 70 LP21, XON LP23, XOFF LPOLD, XON LPM23, -XOFF LPOFON, XOFF-XON LPT175, 175 LPCDF0, CDF 0 / $$