/LP11 HANDLER LPVERSION="B&77 *0 -1 DEVICE LP11;DEVICE LP;1040;LPT&177+4000;ZBLOCK 2 /LP HANDLER FOR RT-11 LINE PRINTER. /The PDP-8 is connected to a RT-11 job via a seriell line. /This handler simply starts the RT-11 program RECVLP on SY: /which transfers all incomming characters to LP:. / IOTs for communication interface: DEVCOD= 31 VRSF= DEVCOD^10+6001 VRRB= DEVCOD^10+6006 VSF= DEVCOD^10+6011 VLS= DEVCOD^10+6016 FIXTAB / special characters: CTRLC= 3 TAB= 11 LF= 12 CR= 15 CTRLN= 16 CTRLZ= 32 *200 PLINK, 0000 CLA STL RAR / handler actually starts here 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 RDF / TAD LPTCIF / M DCA LPTXIT /SAVE CIF CDF RETURN FIELD U TAD I LPT / S AND LPT70 / T TAD LPCDF0 / DCA LPTCDF / N ISZ LPT /POINT TO BUFFER O TAD I LPT /GET BUFFER ADDRESS T DCA LPTCA /SAVE BUFFER PTR ISZ LPT /PT TO BLOCK # C TAD I LPT /GET IT H ISZ LPT /POINT TO ERROR RETURN G LPTCDF, HLT / ! SNL JMP LPTERR /CAN'T READ FROM LPT SZA CLA JMP LPT1 / Initialization - start RECVLP on '11 VLS /initialize VRRB / communication interface CLA RDF TAD LPCDF0 DCA RESFLD LPCDF0, CDF 0 JMS TRATXT "R 40 "R "E "C "V "L "P CR 00 RESFLD, HLT JMP LPT1 /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 LPTCDF /SAVE SHIFT REGISTER TAD I LPTCA JMS I PLINK /PRINT A CHAR SZA JMP ERR TAD I LPTCA ISZ LPTCA /BUMP INPUT POINTER LP7400, 7400 /PROTECT ISZ AND LP7400 CLL RAL TAD LPTCDF /SHIFT HIGH 4 BITS INTO JMP LPROTL /SHIFT REGISTER LPTELP, JMS I PLINK /PRINT 3RD CHAR OF DOUBLEWORD SZA JMP ERR LPT1, ISZ LPTWC JMP LPTLP /GET 3 MORE CHARS LPTCTZ, ISZ LPT /BUMP TO NORMAL RETURN LPTXIT, HLT /RESTORE FIELDS JMP I LPT /EXIT LPTERR, STL CLA RAR /PUT 4000 IN AC JMP LPTXIT /AND TAKE ERROR RETURN LPTWC, 0 LPTCA, 0 TRATXT, 0 TAD I TRATXT /get character ISZ TRATXT /point to next SNA /character zero? JMP I TRATXT /yes - return JMS I PLINK /no - transfer it SNA JMP TRATXT+1 ERR, CLA CLL SNL JMP LPTCTZ TAD PLINK TAD OFFSET DCA PLINK CLA IAC STL RAL /AC=CTRL/C JMS I PLINK / send CTRL/C to abort job on '11 LP7700, CLA SMA /never skips JMP LPTERR LPT70, 70 LPTCIF, CDF CIF 0 OFFSET, VTYPE-LPTPCH *376 LPT, LPVERSION /NORMAL ENTRY POINT JMS PLINK IFNZRO LPT-376 PAGE /CHAR PRINT ROUTINE LPTPCH, 0 IAC AND (177 /7 bit SNA JMP I LPTPCH /don't transfer RUBOUTs TAD (-1 /restore character DCA CHAR /save it TAD CHAR AND (7770 SNA CLA JMP I LPTPCH /Null - CTRL/G TAD CHAR TAD (-CTRLZ SNA JMP EOF SMA JMP NOCTRL TAD (CTRLZ-CTRLN SMA CLA JMP I LPTPCH NOCTRL, ISZ COUNT2 JMP OUTB CLA IAC JMS VTYPE JMS VREAD JMS VREAD CLA TAD (CR JMS VTYPE JMS VREAD JMS VREAD OUTB, CLA TAD CHAR JMS VTYPE /transfer it TAD (-TAB TAD CHAR SZA CLA JMP OUTA TAD (40 DCA CHAR OUTA, JMS VREAD /read the echo CIA TAD CHAR /is it what we sent? SZA CLA /yes JMP LPERR /no - transfer error /Test for End Of Line TAD (-CR TAD CHAR SZA CLA JMP I LPTPCH TAD (-113 DCA COUNT2 JMS VREAD /wait for the LF CLA JMP I LPTPCH EOF, TAD (CTRLZ JMS VTYPE JMS VREAD JMS VREAD JMS VREAD JMS VREAD JMS VREAD CLA IAC CLL JMP I LPTPCH LPERR, IAC STL JMP I LPTPCH COUNT2, -113 CHAR, 0 /This routine reads one character from the serial line. The parity /bit is stripped off. It also checks for CTRL/C from /the terminal. VREAD, 0000 CLA VR1, JMS CINTER /abort if CTRL/C VRSF JMP VR1 VRRB /get the character AND (177 JMP I VREAD /return VTYPE, 0000 VWTF, JMS CINTER /abort if CTRL/C typed VSF JMP VWTF VLS CLA JMP I VTYPE /return CINTER, 0000 KSF /is there a character? JMP I CINTER /no - return DCA AC /yes - save Accu KRB /read character AND (177 /no parity TAD (-CTRLC /is it CTRL/C? SZA CLA /skip if it is JMP NOCC /no - return CLA IAC STL RAL /send CTRL/C JMS VTYPE / to host - this aborts host job CDF CIF 0 /exit JMP I (7600 / to OS/8 NOCC, TAD AC /restore Accu JMP I CINTER /return AC, 0 $