/PRINTER HANDLER FOR DECMATE OS-78 *0 -1 DEVICE LPTS;DEVICE LPT;1040;4005;ZBLOCK 2 VERHI= "A&77^100 VERLO= "0&77 VERSION= VERHI+VERLO BAUDRATE= 7 LPTTLS= 6333 LPTTSF= 6331 LPTKRB= 6326 LPTKSF= 6321 *200 START, 7573 /1 LESS THAN 7574 .-. /WILL BE STORED INTO TEXT /LPTS/ LPTBAU, BAUDRATE /BAUD RATE HELD HERE LPTENT, VERSION /VERSION NUMBER TAD LPTBAU /GET THE BAUD RATE LPTTLS /OUTPUT IT JMS LPSETUP /GO FIGURE OUT WHERE WE ARE AND SET UP RDF /READ THE CALLING DATA FIELD TAD (CIF CDF 0) /GET THE CIF CDF INSTRUCTION DCA LPTCIF /STORE IN LINE TAD I LPTENT /GET THE FIRST ARGUEMENT OF CALLER AND (70) /GET FIELD TAD (CDF 0) /ADD CDF VALUE DCA LPTINL /STORE IT TAD I LPTENT /GET ARGUEMENT AGAIN AND (3700) /GET BLOCK CMA /NEGATE DCA LPBLCN /STORE AS COUNT ISZ LPTENT /GET NEXT ARGUEMENT TAD I LPTENT /GET ADDRESS OF FUNCTION WORD DCA LPADFN /STORE IT ISZ LPTENT /POINT TO NEXT ARGUEMENT TAD I LPTENT /GET IT LPTINL, .-. /IN LINE STORAGE OF CIF CDF SZA CLA /IF THE ARGUEMENT IS ZERO, THEN SKIP JMP LPAHD1 /ELSE JUMP AHEAD LPKILL, JMS LPESC /SET UP THE PRINTER AND KILL THIS INSTRUCTION TAD (215) /GET CARRIAGE RETURN JMS LPTOUT /GO OUTPUT IT TAD (214) /GET FORM FEED JMS LPTOUT /OUTPUT IT LPAHD1, ISZ LPBLCN /INCREMENT BLOCK COUNTER JMP LPAHD2 /JUMP IF NOT ALL DONE LPTFF, TAD (213) /ELSE GET FORM FEED JMS LPTOUT /OUTPUT IT LPTCIF, CIF CDF 0 /MAKE SURE FIELD 0 ISZ LPTENT /BUMP TO SKIP ISZ LPTENT /RETURN JMP I LPTENT /AND RETURN LPAHD2, TAD I LPADFN /GET ADDRESS OF FUNCTION WORD AND (7400) /MASK OFF HIGH 4 BITS CLL RTR /MOVE OVER DCA LPTTMP /STORE IT TAD I LPADFN /GET FUNCTION WORD AGAIN JMS LPTOUT /OUTPUT IT ISZ LPADFN /BUMP TO NEXT ARGUEMENT NOP /JUST IN CASE ISZ SKIPS TAD I LPADFN /GET NEXT ARG JMS LPTOUT /OUTPUT IT TAD I LPADFN /GET IT AGAIN AND (7400) /MASK OFF HIGH FIVE BITS BSW /SWITCH BYTES TAD LPTTMP /GET BACK TEMPORARY CLL RTR /MOVE OVER JMS LPTOUT /OUTPUT IT ISZ LPADFN /MOVE UP ARGUEMENT POINTER NOP /IN CASE ISZ SKIPS JMP LPAHD1 /GO BACK AND DO IT AGAIN LPSETUP,.-. /SUBROUTINE HEADER TAD LPSETUP /GET WHERE WE ARE AND (7600) /MASK OFF PAGE BITS DCA LPTPG1 /STORE PAGE1 VARIABLE TAD LPTPG1 /GET IT BACK TAD (200) /GET NEXT PAGE DCA LPTPG2 /STORE IT RDF /READ DATA FIELD TAD (CDF 0) /ADD CDF FUNCTION DCA LPTCDF /STORE IN LNE CDF 0 /MAKE SURE DATA FIELD IS ZERO TAD LPTPG1 /GET PAGE 1 OF HANDLER TAD (357) /GET 2ND PAGE REL LOC 157 DCA START+1 /STORE IT TAD START /GET 7573 IAC /MAKE 7574 DCA I START+1 /STORE IT WHERE START+1 IS POINTING LPTCDF, CDF 0 /SET DATA FIELD TO ZERO JMP I LPSETUP /RETURN LPTOUT, .-. /OUTPUT SUBROUTINE HEADER JMS I LPTPG2 /GO DO OUTPUT JMP LPTFF /DO A FORM FEED ON NON SKIP RETURN JMP I LPTOUT /ELSE RETURN LPESC, .-. /ESCAPE SEQUENCE SEND SUBROUTINE TAD (33) /GET ESCAPE JMS LPTSEND /SEND IT TAD (266) /GET 6 JMS LPTSEND /SEND IT DCA LPKILL /KILL THE INSTRUCTION THAT COMES BACK HERE LPWAIT, ISZ LPTTMP /KILL SOME JMP .-1 /TIME ISZ LPTCNT /KILL MORE JMP LPWAIT /TIME JMP I LPESC /RETURN LPTSEND,.-. /SUBROUTINE HEADER LPTTLS /OUTPUT CHARACTER LPTTSF /SKIP ON FLAG JMP .-1 /WAIT CLA /CLEAN UP JMP I LPTSEND /RETURN LPTCNT, 7600 LPTPG1, 0 LPTTMP, .-. LPADFN, .-. LPBLCN, .-. LPTPG2, .-. PAGE /THIS PAGE BEGINS THE ACTUAL CHARACTER PRINTING ROUTINES LOUTCHR,.-. /SUBROUTINE HEADER AND (177) /MASK OFF SEVEN BITS TAD (200) /TURN ON THE EIGHTH BIT TAD (-240) /SUBTRACT LENGTH OF CONTROL CHARACTERS SKP/SPA /IF POSITIVE THEN SKIP AND JUST PROCESS CHAR JMP LPCNTR /ELSE PROCESS AS CONTROL CHARACTER LPESCEX,ISZ B152 /EXIT THROUGH HERE IF AN ESC TAD (240) /ADD BACK THE BLANK LPPREX, DCA LCHRHL /EXIT THROUGH HERE FOR OTHER PRINTABLE CHAR JMS LCHRPR /GO PRINT THE CHARACTER LOUTEX, ISZ LOUTCHR /TAKE SKIP RETURN JMS LPCDCK /GO CHECK SOMETHING? JMP I LOUTCHR /RETURN LCHRPR, .-. /SUBROUTINE HEADER JMS LUPCCK /CHECK ^C,^S,^Q TAD LCHRHL /GET BACK THE CHARACTER SNA /IF NOT BLANK SKIP AND PRINT IT JMP I LCHRPR /ELSE RETURN LPTTLS /PRINT THE CHARACTER LPTTSF /IF FLAG IS UP THEN SKIP AND RETURN JMP .-1 /ELSE WAIT FOR IT JMP I LOUTCHR /RETURN LUPCCK, .-. /^C,^S,^Q CHECKER KRB /READ THE KEYBOARD FLAG AND (177) /MASK OFF LOW 7 BITS TAD (7775) /COMPARE TO ^C SNA CLA /IF NOT ^C THEN SKIP AND CLEAR AC JMP LPBOOT /ELSE BOOTSTRAP LPTKSF /CHECK PRINTER INPUT FLAG JMP LNOUPS /FLAG IS NOT UP, GO AWAY LPTKRB /FLAG IS UP, READ THE CHARACTER AND (177) /MASK IT OFF TAD (7757) /CHECK FOR ^Q SNA /SKIP IF NOT ^Q JMP LPCQRT /DO A ^Q RETURN TAD (7776) /ADD -2 SNA CLA /CHECK FOR ^S JMP LPUPS /HANDLE THE ^S LNOUPS, ISZ LPUPHL /SKIP IF ^S,^Q SWITCH IS SET JMP LPCQRT /ELSE DO A ^Q RET LPUPS, CLA CMA /SET THE ^S,^Q SWITCH DCA LPUPHL /STORE IT JMP LUPCCK+1 /KEEP WAITING LPCQRT, DCA LPUPHL /CLEAR ^S,^Q SWITCH JMP I LUPCCK /RETURN LPBOOT, CIF CDF 0 /MAKE SURE EVERYBODY IS FIELD 0 JMP I (7600) /BOOTSTRAP LPUPHL, .-. /^S,^Q SWITCH LPCDCK, .-. /SUBROTINE HEADER TAD B152 /GET B152? TAD LP7574 /COMPARE TO 204 SPA CLA /SKIP IF GREATER JMP I LPCDCK /RETURN JMS LPCRLF /ELSE DO A CARRIAGE RETURN LINE FEED JMP I LPCDCK /RETURN LPCRLF, .-. /SUBROUTINE HEADER DCA B152 /STORE IT IN B152? TAD (215) /GET CARRIAGE RETURN DCA LCHRHL /STORE AWAY JMS LCHRPR /PRINT IT TAD (212) /GET LINE FEED DCA LCHRHL /STORE IT JMS LCHRPR /PRINT IT JMP I LPCRLF /RETURN LPCNTR, TAD (6) /CHECK FOR ^Z SNA /SKIP IF NOT ^Z JMP I LOUTCHR /ELSE RETURN SINCE ^Z IS END OF FILE TAD (15) /CHECK FOR CARRIAGE RETURN SNA /SKIP IF NOT CR JMP LPCRHN /ELSE HANDLE THE CR IAC /CHECK FOR FORM FEED SNA /SKIP IF NOT FORM FEED JMP LPFFHN /ELSE HANDLE FORM FEED IAC /CHECK FOR ^K SNA /SKIP IF NOT ^K JMP LPPREX /ELSE PRINT IT AND EXIT IAC /CHECK FOR LINE FEED SNA /SKIP IF NOT LINE FEED JMP LPLFHN /ELSE HANDLE LINE FEED IAC /CHECK FOR SZA CLA /IF THEN SKIP JMP LOUTEX /ELSE JUST LEAVE TAD B152 /GET B152? AND (7) /GET LOW ORDER 3 BITS TAD (7770) /ADD 7770? DCA B153 /STORE IT LBLOUT, TAD (240) /GET A BLANK DCA LCHRHL /STORE THE BLANK ISZ B152 /SKIP IF B152 IS 7777 JMS LCHRPR /PRINT CHARACTER ISZ B153 /INCREMENT B153 JMP LBLOUT /KEEP OUTPUTTING BLANKS JMP LOUTEX /LEAVE LPCRHN, DCA B152 /STORE INTO B152 TAD (215) /GET CR JMP LPPREX /PRINT AND EXIT LPLFHN, ISZ B154 TAD B154 TAD B156 SMA CLA JMP LPFFHN TAD (212) JMP LOUTEX LPFFHN, DCA B154 TAD (214) JMP LPPREX /PRINT AND LEAVE B152, .-. B153, .-. B154, .-. LCHRHL, .-. B156, .-. LP7574, .-.