/LP86 HANDLER LPVERSION="A&77 *0 -1 DEVICE LP86;DEVICE LP;1040;LPT&177+4000;ZBLOCK 2 /LP HANDLER FOR IBM PC XT/AT V24 AUX LINE. / THE PDP-8 IS CONNECTED TO THE PC VIA V24 LINE. / THIS HANDLER TRANSMITTS ALL DATA VIA THE V24 LINE. / NO ANSWER BACK. THE HANDSHAKE IS DONE WITH CTRL S (XOFF) AND / CTRL Q (XON). / THE PC HAS TO FETCH ALL DATA FROM THE LINE. NO ERROR RETRIES / OR CHECKS ARE MADE. / / REV 0.0 10-MAY-88 H.A. / REV 0.1 11-MAY-88 H.A. / REV 0.2 5-AUG-88 H.A. PHOENIX OUT OF WASTE PAPER / IOTs for communication interface: DEVCOD= 33 VRSF= DEVCOD^10+6001 VROB= DEVCOD^10+6004 VRRB= DEVCOD^10+6006 VSF= DEVCOD^10+6011 VLS= DEVCOD^10+6016 FIXTAB / special characters: XON= 21 XOFF= 23 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 VLS /initialize CLA RDF TAD LPCDF0 DCA RESFLD LPCDF0, CDF 0 JMP RESFLD / NO INIT SEQUENCE SEND TO HOST "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 /OUTPUT ANY CHARACTER ONTO THE OUTPUT LINE (8 DATA BITS) /CTRL Z IS TREATED AS END OF INPUT FILE. LPTPCH, 0 DCA CHAR /save it TAD CHAR TAD (-CTRLZ SNA JMP EOF JMS VREAD / CHECK XON/ XOFF CLA TAD CHAR JMS VTYPE /transfer it CLA JMP I LPTPCH EOF, TAD (CTRLZ JMS VTYPE CLA IAC CLL JMP I LPTPCH LPERR, IAC STL JMP I LPTPCH COUNT2, -113 CHAR, 0 /THIS ROUTINE CHECKS THE SERIELL INPUT LINE FOR XON/ XOFF / IT 8 IS STRIPPED OFF. IT ALSO CHECKS FOR CTRL C FROM /the terminal. VREAD, 0000 CLA VRSF JMP I VREAD /NO INPUT, RETURN CLA VRRB /INPUT BYTE --> AC AND (177 TAD (-XOFF /IS IT XOFF CHAR? SZA CLA JMP I VREAD /NO XOFF, RETURN VR1, JMS CINTER /TEST FOR TERMINAL INTERRUPT CLA VROB /INPUT --> AC AND (177 /STRIP OFF PARITY BIT TAD (-XON /TEST FOR XON CHARACTER SZA CLA JMP VR1 /NO XON, WAIT JMP I VREAD /XON, 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 /SEND CTRL Z TAD (CTRLZ /TO LINE 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 $