ASMB,Q,C HED QUEZ: HP 3000 MODEM COMM. MONITOR * (C) HEWLETT-PACKARD CO. NAM QUEZ,19,4 91750-16157 REV.2013 800423 MEF: 3000 MODEM LINK 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,XLUEX,$OPSY EXT #LU3K,#QXCL,#CL3K,#RQCV,#RSAX,#LDEF EXT D$MXR,D$RQB,D$3BF,D$XS5 SPC 1 UNL NEXT 5 LINES ARE FOR PRODUCTION ENGINEERING * NAME: QUEZ *SOURCE: 91750-18157 * RELOC: 91750-16157 * PGMR: DMT LST *********************** QUEZ - MODEM VERSION ********************* * * * SOURCE: 91750-18157 * * * * BINARY: 91750-16157 * * * * DMT * * * * MAY 7, 1979 * * * ****************************************************************** SPC 1 * * QUEZ PERFORMS MODEM COMMUNICATION WITH A REMOTE HP3000 COMPUTER. * QUEZ READS ALL MESSAGES RETURNED FROM THE HP3000 TO THE HP1000, * THEN DISPATCHES THEM TO MASTERS WAITING FOR REPLIES, SLAVE * MONITORS (VIA RQCNV) WHO ARE WAITING FOR REQUESTS, OR QUEX (WHO * MAY BE WAITING FOR SPECIAL REQUESTS AND REPLIES). * ALL MASTER REQUESTORS AND SLAVE MONITORS WISHING TO TRANSMIT * TO AN HP3000 DO SO BY WRITING THEIR BUFFERS TO THE * QUEX I/O CLASS. SPC 1 SUP A EQU 0 B EQU 1 SKP QUEZ LDA $OPSY CHECK FOR OPERATING RAR,SLA SYSTEM TYPE. RSS RSS IF MAPPED SYSTEM, JMP INITL LDA RSS CONFIGURE CROSS-MAP STA MODI2 LOAD * LDA D$XS5 CHECK FOR AND D2 HSI LINK. SZA,RSS 0 = HSI, 2 = MODEM JMP WRDVR ERROR--HSI. SPC 2 * * CONFIGURE THE CONTROL WORD TO PERFORM DS2 READ. * INITL LDA #LU3K LOAD THE HP3000 WRITE LU. INA ADD ONE FOR READ LU. STA REDWD STORE IN XLUEX WORD. * LDA #QXCL GET QUEX CLASS NUMBER. ELA,CLE,ERA CLEAR "DISCONNECT" BIT. STA QXCLS SAVE LOCALLY. SPC 1 * * READ FROM HP 3000. * READ JSB XLUEX DEF *+5 DEF D1 DEF REDWD DEF D$3BF DEF D$MXR * STB LOG SAVE NUMBER OF WORDS READ. * * CHECK FOR ERROR IN READ. * STA TEMP SAVE STATUS. RAR SLA,RSS IF NO ERROR, JMP SETPT GO DISPATCH. * JSB EXEC WRITE STATUS WORD TO DEF *+8 QUEX SO IT WILL PRINT DEF CLS20 A MESSAGE ON THE SYSTEM DEF D0 CONSOLE. DEF TEMP DEF D1 DEF D1 DEF D0 DEF #QXCL D0 NOP * JSB EXEC ABORT! DEF *+2 DEF D6 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. * SETPT LDA D$RQB SET BPNTR TO POINT TO STA BPNTR FIRST WORD IN BUFFER. LDA LOG GET READ LENGTH. SPC 1 * * PROCESS THE NEXT BLOCK IN READ BUFFER. * DISP SZA,RSS IS THERE ANOTHER BLOCK? JMP READ NO. SERVICING COMPLETE. * ADA N7 IF LESS THAN 8 WORDS, SSA JMP READ 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. * * CHECK VALIDITY AND SET UP , JSB VERIF , , AND . JMP READ INVALID REQUEST. IGNORE REST OF BLOCK. * LDA CLASS IF CLASS 0 REQUEST SZA,RSS OR REPLY, SEND JMP TOQX TO QUEX. * 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 (NOT ON CLASS 0). * LDB #QXCL INIT. REQ. EXCHANGED YET? SSB NO. IGNORE (MUST BE AN OLD JMP READ BUFFER LEFT ON THE CARD). * LDA CLASS 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. * REPLY LDA CLASS MESSAGE CLASS 6? CPA D6 JMP LBYE? YES--CHECK FOR LAST BYE. * * SEARCH FOR MASTER TCB. * SRCHM LDB BPNTR GET ADB D5 SEQUENCE LDA B,I NUMBER. STA TEMP SZA,RSS IF IT'S ZERO, JMP REJCT REJECT. JSB #RSAX CALL DEF *+3 #RSAX DEF D4 FOR DEF TEMP SEARCH. SSB FOUND? JMP NEXT NO--IGNORE. SPC 1 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 RPCLS REPORT CLASS ERROR. SZA IF NO SAM, JMP NOSAM PRINT ERROR MESSAGE. SPC 1 * * 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 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 10,/QUEZ: INSUFFICIENT S.A.M. SPC 3 * * PRINT OTHER CLASS I/O ERROR MESSAGES * RPCLS DST CMSG1 STORE ASCII ERROR CODE. JSB EXEC WRITE MESSAGE DEF *+5 ON SYSTEM DEF SD2 CONSOLE. DEF D1 DEF CMSG DEF D12 NOP JMP NEXT GET NEXT BUFFER. * CMSG ASC 10,/QUEZ: CLASS ERROR CMSG1 ASC 2, 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 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 AND NBT13 CLEAR CONTINUATION BIT. 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 * TOQX 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 RPCLS REPORT CLASS I/O ERROR. SZA IF NO SAM, JMP NOSAM PRINT ERROR MESSAGE. JMP NEXT * LB8 BYT 10,0 LEFT BYTE DECIMAL 8. 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 LDB B,I GET ADDR OF FIRST PNL ENTRY. JSB CKLST CHECK FOR ONE ENTRY. JMP STDIS NONE--DO DISCONNECT. JSB CKLST CHECK FOR SECOND ENTRY. JMP STDIS NO MORE--DO DISCONNECT. JMP SRCHM MORE THAN ONE HELLO OUTSTANDING. * STDIS JSB EXEC CLASS WRITE TO QUEX. DEF *+8 (NO REPLY EXPECTED) DEF CLS20 DEF D0 DEF D0 DUMMY BUFFER ADDRESS. DEF D0 ZERO-LENGTH RECORD. DEF D0 LENGTH PASSED TO QUEX. DEF D0 DEF #QXCL NOP IGNORE ERRORS. * JMP SRCHM SEARCH FOR MASTER. SPC 3 * * SUBROUTINE TO CHECK IF A TCB LIST HAS ANY HP3000 ENTRIES. * CALLING SEQUENCE: LDB * JSB CKLST * * * CKLST NOP CKLOP SZB,RSS END OF LIST? JMP CKLST,I YES--TAKE NO-ENTRY RETURN. JSB LODWD STA TEMP SAVE LINK. INB GET SECOND JSB LODWD TCB WORD. LDB TEMP SET UP POINTER FOR NEXT LOOP. AND BIT14 ISOLATE "3000" BIT. SZA,RSS IF NOT SET, JMP CKLOP STAY IN LOOP. * ISZ CKLST ENTRY FOUND! JMP CKLST,I TAKE 2ND RETURN. SKP * * SUBROUTINE TO VERIFY AUTHENTICITY OF REQUESTS AND REPLIES * BEING SENT OR RECEIVED. ALSO SETS , , , * AND AND PERFORMS TRACE (IF REQUESTED). * * ON ENTRY, * BPNTR = BUFFER ADDRESS OF REQ/REPLY. * VERIF NOP LDB BPNTR LOAD ADDRESS OF MESSAGE. * LDA B,I CHECK WORD 1: SZA,RSS IF ZERO, IT MUST JMP VERIF,I LEFT-OVER CARD BUFFER. AND B377 ISOLATE MESSAGE CLASS. STA CLASS SAVE IT. ADA N9 SSA,RSS JMP BADBF ERROR IF MESSAGE CLASS > 8. * ADB D2 CHECK WORD 3: LDA B,I STA STMWD SAVE IT. AND B377 ISOLATE STREAM TYPE. STA STREM SAVE IT. ADA NB20 SSA JMP BADBF ERROR IF < OCTAL 20. ADA NB10 SSA,RSS JMP BADBF ERROR IF > OCTAL 27. * ADB D5 CHECK WORD 8: LDA B,I SSA JMP BADBF ERROR IF NEGATIVE. * LDB BPNTR VERIFY THAT ADB D7 WDCNT <= N(WORDS) + 8. LDB B,I INB CLE,ERB ADB D8 STB BUFL SAVE WORD COUNT. INB CMB,INB LDA BPNTR,I ALF,ALF AND B377 ADA B SSA,RSS JMP BADBF ERROR. ISZ VERIF NO ERROR, TAKE NORMAL RETURN. * LDA #CL3K TRACE OPTION REQUESTED? SZA (LU NOT SET.) SSA (BAD LOG LU.) JMP VERIF,I NO. * LDA #CL3K+1 BUFFERS TO BE TRACED? SSA,RSS IF BIT 15 NOT SET, JMP VERIF,I RETURN. * LDA D8 INITIALIZE TRACE STA TRLEN LENGTH TO 8. * LDA #CL3K+1 APPENDAGE BIT SET? AND BIT14 SZA,RSS JMP WRTRC NO. GO WRITE. * LDA BPNTR,I GET LENGTH OF ALF,ALF APPENDAGE AND AND B377 HEADER FROM STA TRLEN WORD 1. * LDA #CL3K+1 GET MAX DATA LENGTH AND LENBT FROM BITS 0-12. ADA TRLEN ADD HEADER/APPEND LENGTH. STA B HOLD IN B-REG. CMA,INA IF GREATER THAN ACTUAL ADA BUFL BUFFER LENGTH, SSA LDB BUFL USE BUFFER LENGTH. STB TRLEN STORE TRACE LENGTH. * WRTRC CCA ADA BPNTR SET TRACE STA TPNTR POINTER. LDB TPNTR,I SET FIRST WORD STB HOLD TO INDICATE CLB,INB DIRECTION. STB TPNTR,I ISZ TRLEN ADD 1 TO LENGTH. JSB TRCOT WRITE TRACE. LDA HOLD RESTORE FIRST STA TPNTR,I BUFFER WORD. JMP VERIF,I RETURN. * BADBF LDA LOG SET BUFFER LENGTH STA BUFL TO REMAINING BLOCK STA TRLEN LENGTH & SET TRACE LEN. * JSB EXEC DISPLAY DEF *+5 ">> HP 3000: BAD BUFFER RECEIVED". DEF D2 DEF D1 DEF BDBUF DEF D16 * LDA #CL3K TRACE OPTION REQUESTED? SZA (LU NOT SET.) SSA (BAD LOG LU.) JMP VERIF,I NO. JMP WRTRC YES. SPC 1 * VALUES SET BY VERIF: CLASS NOP DS/3000 MESSAGE CLASS. STMWD NOP DS/3000 STREAM WORD. STREM NOP DS/3000 MESSAGE STREAM. BUFL NOP WORD COUNT OF BUFFER. HOLD NOP * BDBUF ASC 16,>> HP 3000: BAD BUFFER RECEIVED SPC 5 * * SUBROUTINE TO WRITE A RECORD TO TRACE LU. * CALLING SEQUENCE: * JSB TRCOT * TRCOT NOP ENTRY POINT. * LDA #CL3K CHECK STA TRCST BIT STA TRCIO 13 OF AND BIT13 LOG WORD. SZA JMP CLIO SET--DO CLASS I/O. * JSB XLUEX CHECK OUT DEF *+3 DYNAMIC DEF SD3 STATUS. DEF TRCST JMP WRERR ERROR RETURN. AND B277 IF ANY "BAD" BITS SZA ARE SET, JMP TRCDN SET TRACE DOWN. * JSB XLUEX WRITE ENTIRE DEF *+5 MESSAGE TO DEF SD2 TRACING LU. DEF TRCIO DEF TPNTR,I DEF TRLEN RSS ERROR RETURN. JMP TRCOT,I NO ERROR. RETURN. * WRERR DST ABREG PRINT JSB EXEC ERROR DEF *+5 MESSAGE. DEF SD2 DEF D1 DEF IOERR DEF D13 NOP * TRCDN LDA #CL3K SET "BAD" BIT IOR BIT15 IN TRACE LU. STA #CL3K JMP TRCOT,I RETURN. * CLIO LDA #CL3K SET NO-WAIT BIT IOR BIT15 IN CLASS NUMBER. STA CLASN JSB EXEC WRITE TO I/O CLASS. DEF *+8 DEF CLS20 DEF D0 DEF TPNTR,I DEF TRLEN DEF TRLEN DEF D0 DEF CLASN JMP WRERR (ERROR RETURN.) SZA,RSS CHECK FOR NO S.A.M. JMP TRCOT,I NO ERROR...RETURN. DLD "SAM" REPORT SAM ERROR. JMP WRERR * "SAM" ASC 2,SAM IOERR ASC 11,/QUEZ: TRACING ERROR ABREG BSS 2 TRLEN NOP TRACE OUTPUT LENGTH. TPNTR NOP TRACE OUTPUT POINTER. TRCIO OCT 0,100 TRACE LU/BINARY BIT TRCST OCT 0,600 TRACE LU/STATUS FUNCTION SD3 DEF 3,I B277 OCT 277 SPC 4 * * SUBROUTINE TO LOAD WORD FROM ALTERNATE MAP (IF RTE-III OR IV). * LODWD NOP MODI2 LDA B,I GET WORD FROM TCB (RSS IF DMS SYSTEM). JMP LODWD,I RETURN IF RTE-II. XLA B,I LOAD WORD FROM ALTERNATE MAP. JMP LODWD,I RETURN. SKP * * WRONG DRIVER FOR THIS QUEZ. REPORT THE ERROR. * WRDVR JSB EXEC REPORT ERROR DEF *+5 ON SYS CONSOLE. DEF D2 DEF D1 DEF WRMSG DEF D13 * JSB EXEC SUSPEND. DEF *+2 DEF D7 * JMP WRDVR STAY IN LOOP IN CASE OF "GO". * WRMSG ASC 13,>> QUEZ EXPECTS MODEM LINK SPC 5 * * CONSTANTS AND WORKING STORAGE. * * NB10 OCT -10 NB20 OCT -20 B20 OCT 20 B21 OCT 21 B377 OCT 377 B140K OCT 140000 BIT15 OCT 100000 BIT14 OCT 40000 BIT13 OCT 20000 NBT13 OCT 157777 LENBT OCT 17777 BITS 0-12 REDWD OCT 0,1000 RECEIVE DC2 CONTROL WORD CLS20 DEF 20,I SD2 DEF 2,I D1 DEC 1 D2 DEC 2 D3 DEC 3 D4 DEC 4 D5 DEC 5 D6 DEC 6 D7 DEC 7 D8 DEC 8 D12 DEC 12 D13 DEC 13 D16 EQU B20 D20 DEC 20 N7 DEC -7 N9 DEC -9 QXCLS NOP QUEX CLASS NUMBER. LOG NOP WORDS TO PROCESS IN CURRENT BUFFER TEMP NOP CLASN NOP BPNTR NOP SPC 2 * BSS 0 *** SIZE OF QUEZ **** SKP IFZ *** DEBUG OPTION *** ***** SPECIAL DEBUG SECTION: TRACE * INSERT A "JSB TRACE" IN PROGRAM. QUEZ WILL PRINT CALL LOCATION * AND CONTENTS OF A- & B-REGISTERS ON LU SPECIFIED IN #CL3K+6. * EXT CNUMO TRACE NOP ENTRY DST ABREG STORE REGISTERS LDA #CL3K+6 SZA,RSS IF TRACE LU ISN'T SPECIFIED, JMP TRTRN RETURN FROM TRACE. * STA TRLU SAVE TRACE LU NUMBER. * LDB 1727B GET POINTER TO STARTING ADDR FROM BASE PG. JSB LODWD GET STARTING ADDR FROM ID SEG. CMA,INA NEGATE. ADA TRACE ADD CALLING ADDRESS STA TOFST TO GET OFFSET. * JSB CNUMO CONVERT DEF *+3 ADDRESS OFFSET DEF TOFST TO DEF TADDR OCTAL. * JSB CNUMO CONVERT DEF *+3 A-REG DEF ABREG TO DEF TAREG OCTAL. * JSB CNUMO CONVERT DEF *+3 B-REG DEF ABREG+1 TO DEF TBREG OCTAL. * JSB XLUEX PRINT DEF *+5 INFORMATION. DEF SD2 DEF TRLU DEF TINFO DEF D20 NOP TRTRN DLD ABREG RESTORE REGISTERS. JMP TRACE,I RETURN. * TOFST NOP TINFO ASC 7,/QUEZ TRACE @ TADDR ASC 3, ASC 2,: A= TAREG ASC 3, ASC 2,, B= TBREG ASC 3 TRLU OCT 0,0 XIF ***** END OF DEBUG ***** END QUEZ