ASMB,L,R,C HED QUEX: HP 3000 COMMUNICATIONS MONITOR * (C) HEWLETT-PACKARD CO. NAM QUEX,19,4 91741-16003 REV 2013 800109 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 * Z OPTION INCLUDES DEBUG. * EXT EXEC,D$EQT,#LU3K,D$LID,#LDEF,SLC,#TST EXT #QXCL,#RQCV,D$XS5 EXT #RSAX,PGMAD,$OPSY,#CL3K,$TIME EXT $LIBR,$LIBX SPC 1 ****************************** QUEX ****************************** * * * SOURCE: 91741-18003 * * * * BINARY: 91741-16003 * * * * JIM HARTSELL * * * * AUGUST 25, 1975 * * * ****************************************************************** * * * MODIFIED BY DAVE TRIBBY BEGINNING SEPT. 18, 1978 * * * ****************************************************************** SPC 1 L EQU 304 MAXIMUM LINE BUFFER SIZE. * * QUEX PERFORMS COMMUNICATION WITH A REMOTE HP3000 COMPUTER. * ALL MASTER REQUESTORS AND SLAVE MONITORS WISHING TO TRANSMIT * TO AN HP3000 DO SO BY WRITING THEIR BUFFERS TO THE * QUEX I/O CLASS. QUEX HANGS ON A CLASS GET CALL * AND THEN BLOCKS AS MANY REQUESTS/REPLIES AS WILL FIT INTO THE * SEND BUFFER. A "WRITE CONVERSATIONAL" CALL TO THE SYNCHRONOUS * LINE CONTROL PACKAGE (SLC) TRANSMITS THE SEND BUFFER AND * RETURNS A RECEIVE BUFFER. QUEX THEN DE-BLOCKS THE RECEIVE * BUFFER AND DISPATCHES THE REQUESTS/REPLIES TO THE PROPER MONITORS * OR MASTER REQUESTORS VIA CLASS WRITES. THE RECEIVE BUFFER * MAY BE EMPTY. SKP SUP A EQU 0 B EQU 1 SPC 2 QUEX LDA $OPSY CHECK FOR OPERATING RAR,SLA SYSTEM TYPE. RSS RSS IF MAPPED SYSTEM, JMP INITL LDA RSS CONFIGURE CROSS-MAP STA MODI2 LOAD STA MODI1 AND STORE. SPC 1 SPC 1 * * FIRST ENTRY INTO QUEX (SCHEDULED BY LSTEN OR UPLIN): * INITIALIZE THE HP3000 COMMUNICATION LINK. * INITL LDA #QXCL SAVE QUEX CLASS NUMBER. ELA,CLE,ERA CLEAR "DISCONNECT" BIT. STA QXCLS IOR B140K ADD NO-WAIT & BUFFER-SAVE BITS. STA QCLAS * LDA N16 INITIALIZE DELAY STA DCONT COUNT TO 16 (SPECIAL). * JSB CLNUP CLEAN OUT PREVIOUS ACTIVITY. * LDA D$XS5 SET FLAG WHETHER RAR HARD-WIRED OR AND D1 MODEM LINK. STA LINK 0 = HSI, 1 = MODEM. * * SET UP START AND END OF DRIVER TRACE TABLE. * LDA @D$EQ GET EXTENSION ADDR. RSS MAKE INDR LDA A,I SURE RAL,CLE,SLA,ERA IT'S JMP INDR DIRECT. STA @D$EQ ADA D$EQT ADD LENGTH. LDB D$XS5+1 SUBTRACT # WORDS CMB,INB IN CHARACTER ADA B TABLE. STA EOTBL LAST ADDRESS IN EVENT TABLE. * LDA @D$EQ GET ADDRESS ADA D76 OF TRACE TABLE. STA SOTBL FIRST ADDRESS IN EVENT TABLE. * LDA CNTRL CONFIGURE THE CONTROL WORDS. STA TEMP CLOOP LDA TEMP,I GET NEXT. SZA,RSS DONE IF ZERO. JMP INIT AND B1777 CLEAR LOW 6 BITS. IOR #LU3K INSERT LU OF 3000. STA TEMP,I STORE BACK. ISZ TEMP JMP CLOOP LOOP TILL DONE. SPC 3 * * ENTER HERE AFTER LINE CLOSE. * INIT CLA,INA STA ENQFL SET "NEED ENQ" FLAG. * LDA #CL3K GET LOGGING LU. SZA IF NOT SPECIFIED, SSA OR BAD, JMP CLRQ GO CLEAR. LDA #CL3K+1 IF DRIVER AND BIT13 TRACE WAS SZA,RSS NOT SPECIFIED, JMP CLRQ GO CLEAR. * LDA N2 SET TRACE STA TRBUF TO -2. LDA @STAT STATISTICS' ADDRESS (SOURCE). LDB @TRBF SET TRACE POINTER STB TPNTR FOR OUTPUT. INB POINT TO SECOND WORD FOR MOVE. MVW D11 MOVE 11 WORDS. LDA D12 TRACE BUFFER STA TRLEN LENGTH IS 12. JSB TRCOT WRITE TRACE ENTRY. * CLRQ JSB EXEC ISSUE CLEAR REQUEST. DEF *+6 DEF D2 DEF #LU3K DEF D0 DEF D3 DEF CLRWD * JSB SLC INITIALIZE SLC. DEF *+3 DEF #LU3K LU OF THE 3000. @D$EQ DEF D$EQT EQT EXTENSION ADDRESS. * SZA,RSS JMP LNOPN * LDA @D0 INITIALIZATION ERROR. STA SLCER LDB @EM18 JMP ABT SPECIAL "SLCER" ENTRY. @D0 DEF D0 * LNOPN LDA D$XS5+15 INITIALIZE STA OLENT TRACE POINTER. * JSB EXEC SCHEDULE QUEZ WITH WAIT TO DEF *+4 PERFORM LINE OPEN REQUEST. DEF D9 (THIS KEEPS QUEX FROM LOCKING UP DEF QUEZ PARTITION WHILE IN I/O SUSPEND.) DEF D1 SCHEDULE PARAM FOR QUEZ. * JSB SLCER CHECK FOR ERRORS. D1 DEC 1 * LDA LINK MODEM LINK? SZA,RSS JMP CERP NO. * JSB EXEC YES. DISPLAY DEF *+5 ">> HP 3000: READY FOR DIALING" DEF D2 DEF D1 DEF DIALM DEF D15 * LDA D$LID ADDR OF LOCAL ID IN "RES". LDB Q$LID ADDR OF LOCAL ID AREA IN QUEX. MVW D19 MOVE LOCAL & REMOTE ID STORED IN "RES" * LDA LOCID GET BYTE LENGTH OF LOCAL ID. SZA,RSS JMP RDISQ ZERO. NO LOCAL ID. * JSB EXEC ESTABLISH LOCAL ID SEQUENCE. DEF *+6 DEF D2 DEF #LU3K DEF D1 DEF LOCID DEF LIDSQ * JSB SLCER CHECK FOR ERRORS. D0 DEC 0 * RDISQ LDA REMID GET BYTE LENGTH OF REMOTE ID. SZA,RSS JMP CERP ZERO. NO REMOTE ID. * JSB EXEC ESTABLISH REMOTE ID SEQUENCE. DEF *+6 DEF D2 DEF #LU3K DEF D1 DEF RCVID DEF RIDSQ * JSB SLCER CHECK FOR ERRORS. DEC 0 * * CERP JSB EXEC CHANGE ERROR RECOVERY PARAMETERS. DEF *+6 DEF D2 DEF #LU3K DEF D20 # RETRIES = 20. DEF D7 LONG TIMEOUT = 21 SEC. DEF ERCWD * JSB SLCER CHECK FOR ERRORS. DEC 0 * * SEND INITIALIZATION REQUEST. * LDA XLEN STORE MAX. SIZE, CLB DIV D16 (MODULO 16) ADA N1 STA B ALF,ALF IOR B AND CURRENT SIZE. STA STRTM+4 * LDA STRTM ADDR OF INIT. REQUEST. TOBUF LDB WRADR ADDR OF SEND BUFFER. STB BPNTR MVW D8 MOVE INIT. REQUEST TO "SEND" * LDA D8 SET BLOCK LENGTH STA LOG TO EIGHT. CLA GO TO VERIF IN CASE JSB VERIF TRACE WAS SPECIFIED. NOP IGNORE ERROR. **SHOULDN'T HAPPEN** * LDA WRADR SET BUFFER POINTER ADA D8 TO END OF MESSAGE. STA BPNTR LDA N16 SET WRITE LENGTH TO 16 BYTES. STA WRLEN * JMP REMIO GO SEND INIT. REQUEST. SPC 1 @STAT DEF D$XS5+2 ADDRESS OF LONG TERM STATS. SKP * * WAIT FOR THE 3000 TO SEND SOMETHING BY SCHEDULING "QUEZ". * WAIT FOR SOMETHING TO SEND TO THE HP 3000 BY HANGING ON * A CLASS I/O GET WITH WAIT TO QUEX'S I/O CLASS. * BLOCK AS MANY REQUESTS/REPLIES FROM QUEX'S I/O CLASS * BUFFER AS WILL FIT IN THE TRANSMIT BUFFER. * WATCH JSB OFFQZ MAKE SURE QUEZ IS DORMANT. JSB EXEC SCHEDULE QUEZ TO LOOK FOR DEF *+4 SLAVE REQUESTS FROM THE 3000. DEF D10 DEF QUEZ DEF D0 SET SCHEDULE OPTION CODE. * NEWGT CLA INITIALIZE LENGTH (BYTES) STA WRLEN OF TRANSMIT BUFFER. LDA WRADR INITIALIZE BUFFER POINTER TO STA BPNTR START OF SEND AREA. * GET JSB EXEC CLASS I/O GET TO LOOK FOR DEF *+6 MASTER REQUESTS FROM RTE USERS. DEF CLS21 NO ABORT. DEF QXCLS QUEX I/O CLASS. BPNTR NOP DEF MXLEN BUFFER LENGTH. DEF LOG RETURNED BLOCK LENGTH (WORDS). NOP IGNORE ERROR RETURN. * * THE CLASS GET HAS COMPLETED. IF RECEIVED DATA LENGTH IS ZERO, * THE 3000 WANTS TO SEND A SLAVE REQUEST OR A MASTER REPLY. * IF NON-ZERO, THE RTE IS SENDING A MASTER REQUEST OR SLAVE REPLY. * LDA LOG IS QUEZ TELLING US THE 3000 IS SENDING? SZA JMP BLKIN NO. ACCUMULATE OUTGOING REQUESTS. * LDA IGNOR YES. ARE WE TO IGNORE THIS ONE? SZA,RSS JMP RINTL NO. NEED TO SERVICE THE 3000. CLA YES. GO BACK TO THE GET. STA IGNOR JMP NULGT SPC 1 * A BLOCK HAS BEEN ADDED TO THE TRANSMIT BUFFER. * ADVANCE BUFFER POINTER AND COUNTER. * BLKIN LDA SGNOF INIT. REQ. EXCHANGED YET? SZA JMP NULGT NO. IGNORE. **SHOULDN'T HAPPEN** ADDBU CLA MESSAGE IS FROM 1000. JSB VERIF CHECK VALIDITY. JMP NULGT INVALID: IGNORE. * LDA BUFL ADD LEN OF BLOCK IN NEG BYTES CLE,ELA TO TOTAL XMIT BYTE LEN (NEG) CMA,INA THAT HAVE BEEN ACCUMULATED. ADA WRLEN STA WRLEN * LDA BPNTR ADVANCE BUFFER POINTER. ADA BUFL STA BPNTR * LDA BUFL SUBTRACT THE LENGTH CMA,INA OF PROCESSED BUFFERS ADA LOG FROM BLOCK LENGTH. STA LOG SAVE REMAINING LENGTH. SZA IF ANOTHER BUFFER, JMP ADDBU GO ADD IT. * * ISSUE A NULL GET CALL TO QUEX'S I/O CLASS TO SEE * IF THERE IS ANOTHER PENDING REQUEST AND TO SEE WHETHER * THERE IS ROOM IN THE TRANSMIT BUFFER. ISSUE THE GET * WITHOUT WAIT, SAVE CLASS BUFFER, AND BUF LEN = 0. * NULGT JSB EXEC CLASS GET (DUMMY). DEF *+6 DEF CLS21 NO ABORT. DEF QCLAS QUEX I/O CLASS. DEF D0 DUMMY BUFFER. DEF D0 ZERO LENGTH BUFFER. DEF LOG RETURNED BLOCK LENGTH (WORDS). NOP IGNORE ERROR RETURN. * SSA WAS THERE ANYTHING THERE? JMP REMIO NO. GO SEND WHAT WE HAVE. * * A REQUEST IS IN THE CLASS BUFFER. SEE IF THERE * IS ROOM TO BLOCK IT INTO THE TRANSMIT BUFFER. * LDA BPNTR CMA,INA ADA RDADR # WORDS LEFT IN XMIT BUFR. INA CMA,INA NEGATE. ADA LOG ADD LENGTH OF BLOCK (WORDS). SSA JMP GET FITS. GO READ IT IN. * * IF THERE WAS NO ROOM FOR THE LAST BLOCK, IT IS STILL IN * THE CLASS BUFFER AND WILL BE PICKED UP NEXT TIME AROUND. * * SEND THE BLOCKS TO THE HP3000 AND WAIT FOR INCOMING BLOCKS. * REMIO LDA ENQFL DO WE NEED TO DO A SZA,RSS "WRITE INQUIRY"? JMP WRCON NO. * JSB EXEC ISSUE WRITE INQUIRY. DEF *+6 DEF D2 DEF #LU3K DEF D1 DEF D0 DEF WNQWD * JSB SLCER CHECK FOR ERRORS. D2 DEC 2 * LDB @D2 CPA D5 EOT RECEIVED? JMP EOTER YES. **PROTOCOL FAILURE** * CLA STA ENQFL CLEAR ENQ FLAG. * CPA D13 BACK OFF TO READ INITIAL IF JMP RINTL ENQ RECEIVED (ONLY IF RTE SECONDARY). SPC 3 * * PERFORM WRITE CONVERSATIONAL TO HP 3000. * WRCON JSB EXEC WRITE CONVERSATIONAL. DEF *+6 DEF D2 DEF #LU3K DEF WRLEN LEN/SEND BUFFER/RECEIVE BUFFER. DEF BFLEN LEN OF RECEIVE BUFFER (-BYTES). DEF CONWD CONTROL WORD. * CPB D2 TREAT 2 BYTES AS ZERO. CLB STB RDLEN SAVE POSITIVE # BYTES. * JSB SLCER CHECK FOR SLC ERROR. D3 DEC 3 * LDB WRLEN SAVE WRITE LENGTH STB OWLEN FOR 0-LEN CHECK. CLB INDICATE DATA IN WRITE STB WRLEN BUFFER HAS BEEN SENT. * CPA D5 CHECK FOR JMP EOT EOT RECEIVED. SPC 3 * REQUESTS AND/OR REPLIES HAVE BEEN RECEIVED FROM THE HP 3000. * FOR REQUESTS, DO A CLASS WRITE TO THE REQUEST CONVERTER (RQCNV). * FOR REPLIES, SEARCH THE MASTER LIST (VIA SEQUENCE #) AND DO A CLASS * WRITE TO THE CORRESPONDING MASTER CLASS NUMBER. * STLEN LDA RDLEN SET # OF CLE,INA WORDS READ. ERA STA LOG SPC 2 * * GET TO THE NEXT BLOCK IN READ BUFFER. * DISP SZA,RSS IS THERE ANOTHER BLOCK? JMP DONE NO. SERVICING COMPLETE. * ADA N7 IGNORE IF LESS THAN 8 WORDS. SSA JMP DONE IGNORE REST OF BLOCK. **SHOULDN'T HAPPEN** * * DETERMINE WHETHER MESSAGE IS A REQUEST FROM THE 3000 * OR A REPLY TO AN RTE MASTER'S REQUEST. * CLA,INA CHECK VALIDITY AND SET UP , JSB VERIF , , AND . JMP DONE INVALID REQUEST. IGNORE REST OF BLOCK. * LDA STMWD ISOLATE REPLY AND AND B140K REJECT BITS. * CPA B140K IF BOTH SET, 3000 IS REJECTING JMP NEXT AN RTE REPLY. IGNORE. * SZA IF EITHER IS SET, JMP REPLY IT'S A REPLY TO AN RTE MASTER. SPC 3 * * A REQUEST HAS ARRIVED FROM THE 3000. * LDA CLASS IF MESSAGE CLASS SZA,RSS IS ZERO, JMP MZERO GO TO SPECIAL HANDLER. LDB SGNOF INIT. REQ. EXCHANGED YET? SZB JMP REJCT NO. REJECT. * CPA D5 CLASS 5? ($STDIN/$STDLIST) JMP $SCHK YES--MAY BE FOR MASTER. * RQCNV LDA #RQCV SET IOR BIT15 NO-WAIT STA CLASN BIT. * JSB EXEC WRITE REQUEST TO RQCNV'S CLASS. DEF *+8 DEF CLS20 DEF D0 DEF BPNTR,I DEF BUFL DEF D0 DEF D0 DEF CLASN CLASS NUMBER OF RQCNV. JMP REJCT ERROR RETURN. SZA IF NO SAM, JMP REJCT TRY TO REJECT. * JMP NEXT GO DISPATCH NEXT BLOCK. SPC 3 * * THE MESSAGE IS A DS/3000 REPLY TO AN RTE MASTER REQUEST. * CHECK FOR SPECIAL CLASSES: 0, 5, AND 6. * REPLY LDA CLASS MESSAGE CLASS 0? SZA,RSS JMP REPL0 YES--GO TO SPECIAL HANDLER. * IFN ********************************************** CPA D5 MESSAGE CLASS 5? JMP LUMAP YES--PASS TO LU MAPPING MONITOR. XIF ********************************************* * CPA D6 MESSAGE CLASS 6? JMP LBYE? YES--CHECK FOR LAST BYE. * * SEARCH FOR MASTER TCB. * SRCHM LDB BPNTR GET ADB D5 SEQUENCE LDA B,I NUMBER. STA TEMP JSB #RSAX CALL DEF *+3 #RSAX DEF D4 FOR DEF TEMP SEARCH. SSB FOUND? JMP REJCT NO--REJECT. SPC 2 IOR BIT15 SET NO-WAIT BIT STA CLASN SAVE I/O CLASS #. * JSB EXEC CLASS DEF *+8 WRITE DEF CLS20 TO DEF D0 CLASN. DEF BPNTR,I DEF BUFL DEF BUFL DEF D0 DEF CLASN JMP NEXT ERROR--IGNORE. SZA IF NO SAM, JMP NOSAM PRINT ERROR MESSAGE. SPC 2 * * END OF PROCESSING FOR THIS BLOCK. * NEXT LDA BPNTR BLOCK PROCESSED: ADA BUFL UPDATE POINTER INTO STA BPNTR RECEIVE BUFFER. * LDA BUFL CALCULATE NUMBER CMA,INA OF WORDS REMAINING ADA LOG IN READ BUFFER. STA LOG * JMP DISP GO CHECK FOR ANOTHER BLOCK. SPC 2 * * ALL RECEIVED BLOCKS HAVE BEEN DISPATCHED. * DONE LDA WRLEN RESET CMA,INA BUFFER CLE,ERA POINTER. ADA WRADR STA BPNTR * LDA WRLEN ANY DATA IN WRITE BUFFER? SZA (ACCUMULATION INTERRUPTED BY ENQ.) JMP NULGT YES--CONTINUE ACCUMULATION. * JSB EXEC "NULL" CLASS GET. (BUFFERS MAY HAVE BEEN DEF *+6 ADDED WHILE QUEX WAS I-O SUSPENDED). DEF CLS21 DEF QCLAS DEF D0 DEF D0 DEF LOG NOP IGNORE ERROR RETURN. * SSA ANYTHING THERE? JMP NOMOR NO. * LDA LOG YES. SZA ZERO LENGTH BUFFER? JMP NEWGT NO. * YES. QUEZ DID IT JUST BEFORE THE INA WRITE CONVERSATIONAL. REQUEST HAS STA IGNOR ALREADY BEEN READ, SO IGNORE IT. * NOMOR LDA DCNFL ARE WE TO ATTEMPT DISCONNECT? SZA,RSS JMP CKDAT NO. * CLA YES. SEND TERMINATION REQUEST. STA DCNFL LDA TRMRQ MOVE TERMINATION REQUEST TO JMP TOBUF CURRENT BUFFER LOCATION. * * WE HAVE NOTHING TO SEND TO HP 3000. IF EMPTY MESSAGES HAVE * BEEN EXCHANGED, GO TO WRITE RESET. OTHERWISE SEND EMPTY MESSAGE. * CKDAT LDA OWLEN IF OLD WRITE LENGTH SZA,RSS OR LDA RDLEN CURRENT READ LENGTH SZA IS NOT ZERO, JMP WRCON GO SEND EMPTY MESSAGE. * RESET JSB EXEC PERFORM "WRITE RESET" (SEND EOT). DEF *+6 DEF D2 DEF #LU3K DEF D0 DEF D0 DEF RESWD * JSB SLCER CHECK FOR ERRORS. D5 DEC 5 * EOT CLA,INA STA ENQFL SET "SEND ENQ" FLAG. * JMP WATCH SPC 5 * * PRINT ERROR MESSAGE WHEN CLASS I/O FAILS BECAUSE OF NO SAM. * NOSAM JSB EXEC DEF *+5 DEF SD2 DEF D1 DEF SAMER DEF D13 NOP JMP NEXT * SAMER ASC 13,/QUEX: INSUFFICIENT S.A.M. SKP * * THE SEND BUFFER CONTAINS MASTER REQUESTS AND/OR SLAVE REPLIES, * BUT BEFORE IT COULD BE SENT, THE 3000 HAS SENT A LINE BID. * THE WRITE LENGTH INDICATES THE SEND BUFFER CONTAINS GOOD DATA. * * READ INITIAL--GET 3000'S BID FOR LINE. * RINTL JSB EXEC ISSUE "READ INITIAL" CALL. DEF *+6 DEF D1 DEF #LU3K DEF BPNTR,I DEF BFLEN DEF RDIWD * CPB D2 IF 2 BYTES WERE SENT, CLB IT'S AN EMPTY MESSAGE. STB RDLEN SAVE POSITIVE # BYTES. * JSB SLCER CHECK FOR ERRORS. D4 DEC 4 * LDB @D4 CPA D5 JMP EOTER RECEIVED EOT. **PROTOCOL FAILURE** * LDB RDLEN CHECK TRANSMISSION LOG. SZB,RSS JMP RESET SEND EOT IF ZERO. * CLA CLEAR "NEED STA ENQFL ENQ" FLAG. * JMP STLEN DISPATCH BLOCKS FROM READ BUFFER. * SPC 2 * EOTER STB SLCER EOT RECEIVED IN READ LDB @EM5 INITIAL OR WRITE INQUIRY. JMP ABT SPECIAL "SLCER" ENTRY. @D2 DEF D2 @D4 DEF D4 SKP * * CHECK WHETHER $STDLIST REQUEST SHOULD GO TO MASTER OR CNSLM. * $SCHK LDB BPNTR GET "FROM PROCESS NUMBER." ADB D4 LDA B,I ALF,ALF AND B377 SZA,RSS IF ZERO, JMP RQCNV PASS TO RQCNV. LDA B,I GET "TO PROCESS NUMBER" AND B377 SZA,RSS IF ZERO, JMP RQCNV PASS TO RQCNV. JMP SRCHM BOTH NON-ZERO. PASS TO MASTER. SPC 3 * REQUEST RECEIVED ON CLASS 0. * CLASS 0, STREAM 20: INITIALIZATION * CLASS 0, STREAM 21: TERMINATION * MZERO LDA STREM STREAM = CPA B20 OCTAL 20? JMP REJCT YES. REJECT INITIALIZATION. CPA B21 STREAM = RSS OCTAL 21? JMP REJCT NO--UNKNOWN. REJECT. **SHOULDN'T HAPPEN** * * HP 3000 REQUESTS TERMINATION ONLY WHEN IT THINKS NEITHER * SIDE HAS ANYTHING GOING. MAKE SURE PNL IS EMPTY. * CCB GET ADDRESS OF ADB #LDEF PNL HEADER ADDR. LDB B,I GET ADDR OF JSB LODWD PNL HEADER. SZA IF ANYONE IS IN LIST, JMP REJCT REJECT. **SHOULDN'T HAPPEN** JSB DCNCT SET DISCONNECT STATUS JMP CLOSE AND GO CLOSE THE LINE. SPC 1 * * REPLY RECEIVED ON CLASS 0. * REPL0 LDB STMWD GET STREAM WORD RBL AND POSITION REJECT BIT. LDA STREM IF STREAM = CPA B20 OCTAL 20, JMP INIRP IT'S AN INITIALIZATION REPLY. CPA B21 IF STREAM NOT = RSS OCTAL 21, JMP REJCT UNKNOWN. REJECT. **SHOULDN'T HAPPEN** * * HP 3000 IS REPLYING TO OUR TERMINATION REQUEST. * SSB REJECT BIT SET? JMP NEXT YES--DON'T DISCONNECT. JMP CLOSE NO--GO AHEAD AND CLOSE LINE. * * HP 3000 IS REPLYING TO OUR INITIALIZATION REQUEST. * INIRP SSB REJECT BIT SET? JMP INIT YES--RETRY. JSB CNNCT NO--ESTABLISH CONNECT STATUS. LDA D$XS5 SET MODE IOR D1 TO "PRIMARY." STA D$XS5 * LDA DCONT IF DELAY COUNT CPA N50 IS 50, SKIP JMP NEXT THE "UP" MESSAGE. * DLD UP 3000 LINK IS "UP". DST STMSG+16 LDA UP+2 STA STMSG+18 * JSB EXEC DISPLAY STATUS DEF *+5 MESSAGE ON LU 1. DEF D2 DEF D1 DEF STMSG DEF D20 * LDA N50 SET DELAY COUNT STA DCONT TO 50 (LONG). * JMP NEXT PROCESS NEXT BLOCK. SPC 3 * THE 3000 HAS FOUND NOTHING TO DO (NO HELLO OUTSTANDING AND * NO SLAVE ACTIVITY) AND HAS DISCONNECTED THE LINE, OR AN * ABORTIVE COMMUNICATION ERROR HAS OCCURRED. CLOSE THE * LINE AND RE-INITIALIZE THE DRIVER AND QUEX. * CLOSE JSB EXEC WRITE DISCONNECT. DEF *+6 DEF D2 DEF #LU3K DEF D0 DEF D0 DEF WRDIS * LNCLO JSB EXEC CLOSE THE LINE. DEF *+6 DEF D2 DEF #LU3K DEF D0 DEF D3 DEF LCLWD * JSB DVRTC PERFORM DRIVER TRACE. * JSB OFFQZ MAKE SURE QUEZ IS DORMANT. * LDA D$XS5 RESET TO "SECONDARY" MODE. AND N2 STA D$XS5 * LDA LINK IS THIS A MODEM LINK? SZA,RSS JMP INIT NO. * JSB EXEC YES. DISPLAY DEF *+5 ">> HP 3000: DISCONNECT" DEF D2 DEF D1 DEF SNOFF (QUEX WILL HANG IN "LINE OPEN" DEF D11 UNTIL EITHER END RE-DIALS.) * JMP INIT GO RE-INITIALIZE. SPC 5 * * SEND "REJECT" REPLY FOR ILLEGAL REQUESTS. * REJCT LDA STMWD MAKE SURE AND BIT14 WE AREN'T SZA REJECTING JMP NEXT A REJECT! LDA BPNTR,I APPENDAGE AND B377 LENGTH IOR LB8 IS 8. STA BPNTR,I LDA STMWD SET REJECT BIT. IOR BIT14 LDB BPNTR ADB D2 STA B,I ADB D2 REVERSE PROCESS NUMBERS. LDA B,I ALF,ALF STA B,I ADB D3 DATA LENGTH = 0. CLA STA B,I * LDA QXCLS IOR BIT15 SET NO-WAIT BIT. STA CLASN SAVE I/O CLASS #. * JSB EXEC CLASS DEF *+8 WRITE DEF CLS20 TO DEF D0 QUEX. DEF BPNTR,I DEF D8 DEF D8 DEF D0 DEF CLASN JMP NEXT ERROR--IGNORE. SZA IF NO SAM, JMP NOSAM PRINT ERROR MESSAGE. JMP NEXT * LB8 BYT 10,0 LEFT BYTE DECIMAL 8. SPC 3 * * ESTABLISH "DISCONNECT" STATUS (CHECKED BY UPLIN AND D3KMS). * DCNCT NOP CLA,INA SET SIGN OFF FLAG. STA SGNOF LDA #QXCL SET DISCONNECT FLAG IN #QXCL IOR BIT15 TO INDICATE DISCONNECT STATUS. STA #QXCL JMP DCNCT,I RETURN. * * ESTABLISH "CONNECT" STATUS. * CNNCT NOP CLA CLEAR SIGN OFF FLAG. STA SGNOF LDA #QXCL CLEAR DISCONNECT FLAG IN #QXCL ELA,CLE,ERA TO INDICATE CONNECT STATUS. STA #QXCL JMP CNNCT,I RETURN. SPC 3 * * CLASS 6 REPLY RECEIVED. IS IT LAST BYE? * LBYE? LDA STREM IF NOT CPA B21 STREAM 21, RSS IT'S NOT JMP SRCHM A BYE. * CCB GET ADDR OF PNL HEADER ADDR. ADB #LDEF LDB B,I GET ADDR OF PNL HEADER JSB LODWD GET ADDR OF FIRST PNL ENTRY. SZA,RSS JMP STDIS IF ZERO, SET DISCONNECT FLAG. LDB A PICK UP LINK.