ASMB,R,L,C HED * SLAVE REPLY INTERFACE * (C) HEWLETT-PACKARD CO. 1976 * NAM D65SV,7 91700-16147 REV.A 760101 SPC 1 ENT D65SV,#MBRK EXT .ENTR,EXEC,#RSAX,#PLOG,DRTEQ,D65CL * * * NAME: D65SV * SOURCE: 91780-18147 * RELOC: 91780-16147 * PGMR: C.C.H. [ 01/01/76 ] * ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** * * D65SV HANDLES SLAVE MONITOR REPLIES, WHICH ARE DESTINED FOR * REMOTE SATELLITES. THE REPLIES ARE COMMUNICATED TO THE NETWORK * VIA 'D65CL', IN ORDER TO AVOID CONFLICT WITH OTHER USERS OF * THE SAME COMMUNICATION LINE. ADDITIONALLY, 'D65SV' CLEARS THE * SLAVE MONITOR LIST-ENTRY, TO PREVENT POST FACTO TIMEOUT ERRORS. * * D65SV OPERATION: * * 1. GET USER PARAMETERS. * A. CHECK FOR VALID LOGICAL UNIT NO. (VIA 'DRTEQ'). * B. EXTRACT THE COMM. LINE DEVICE SELECT CODE. * C. VERIFY THAT THE LOGICAL UNIT IS LINKED TO DVR65. * 2. GET AND SAVE THE SLAVE MONITOR'S CLASS NUMBER. * 3. CALL <#MBRK> TO CHECK THE CURRENT TRANSACTION FOR A BREAK CONDITION. * A. IF BREAK FLAG SET, DON'T REPLY (GO TO 6.). * 4. CALL TO SEND REPLY TO THE SATELLITE. * A. IF #PLOG #0, WRITE PARMB TO PARMB LOGGER'S CLASS NO. * 5. CLEAR ENTRY IN SLAVE MONITOR CONTROL LIST. * 6. IF ERROR, RETURN TO THE CALLER AT , WITH * ASCII ERROR CODES IN &; ELSE, RETURN TO * WITH DVR65 RETURN INFO IN &. * * D65SV CALLING SEQUENCE: * * JSB D65SV * DEF *+7 * DEF RCODE REQUEST CODE. * DEF CONWD CONTROL WORD. * DEF RQBUF REPLY BUFFER. * DEF RQLEN REPLY BUFFER LENGTH (MINIMUM =35 WORDS). * DEF DABUF DATA BUFFER (OR DUMMY PARAMETER). * DEF DALEN DATA BUFFER LENGTH (OR DUMMY PARAMETER). * RETURN HERE UPON ERROR DETECTION. * NORMAL RETURN HERE, UPON COMPLETION. * ( =0: BREAK-FLAG DETECTED. ) * SKP * * D65SV ERROR MESSAGES: * * ( RETURNED TO CALLER IN & AT LOCATION ) * * "DS01" - DRIVER HAS DETECTED AN ERROR CONDITION (PARITY, ETC.) * * "DS02" - HAS PREEMPTED ACCESS TO THE COMMUNICATION LINE. * * "DS04" - LOGICAL UNIT INVALID, OR NOT ENTERED IN CLCT TABLE. * * "DS07" - 'RES' TABLE ENTRY CANNOT BE LOCATED. * * "DS08" - BUSY-REJECT FROM REMOTE [ RETRIES EXHAUSTED ]. * * "IOXX" \ * - SYSTEM LEVEL ERRORS DETECTED BY RTE. * "RNXX" / * * SPC 3 **************************************************************************** * * * #MBRK EXAMINES THE CURRENT SLAVE-STREAM LIST FOR THE MONITOR * * OPERATING ON THE STREAM-TYPE SPECIFIED BY THE CALLER. * * * * IF AN ENTRY'S BREAK-FLAG (WORD #2, BIT#15) IS SET, #MBRK RETURNS TO * * THE CALLER AT THE POINT. IF THE FLAG IS CLEAR, #MBRK * * RETURNS TO THE POINT. THE IS TAKEN, * * WHEN #MBRK DISCOVERS AN IMPROPER LOGICAL UNIT SPECIFICATION, OR * * WHEN #RSAX DETERMINES AN IMPROPER STREAM SPECIFICATION. * * * * #MBRK CALLING SEQUENCE: * * * * JSB #MBRK * * DEF *+4 * * DEF STREM MONITOR'S STREAM TYPE-CODE. * * DEF LU LOGICAL UNIT NO. TO BE ACCESSED--IF NO BREAK. * * DEF TTAGA ADDRESS OF REQUEST TIME-TAGS (2-WORDS, FOR LIST SEARCH)* * = ASCII ERROR CODES ("DS04"/"DS07") * * =0, = ENTRY ADDRESS. * * = LINE SELECT CODE, = EQT EXTENSION ADDRESS. * * * **************************************************************************** SKP RCODA NOP REQUEST CODE ADDRESS. CONWD NOP CONTROL WORD ADDRESS. RQBUF NOP REPLY BUFFER ADDRESS. RQLEN NOP REPLY BUFFER LENGTH ADDRESS. DABUF NOP DATA BUFFER ADDR. (OR DUMMY PARAMETER). DALEN NOP DATA BUFFER LENG. (OR DUMMY PARAMETER). SUP [ SUPPRESS EXTENDED LISTING ] D65SV NOP ENTRY/EXIT. JSB .ENTR OBTAIN DIRECT ADDRESSES DEF RCODA FOR PARAMETERS & RETURN POINT. CLA INITIALIZE THE STA ERFLG ERROR FLAG STA REG AND REGISTER STA REG+1 STORAGE LOCATIONS. LDA RQBUF,I GET THE FIRST WORD OF THE PARMB. AND B377 ISOLATE THE STREAM TYPE, STA STYPE AND SAVE LOCALLY. LDB RQBUF GET THE REQUEST BUFFER ADDRESS. ADB P33 FORM ADDRESS OF TIME-TAG WORDS. STB TTADR SAVE FOR LIST ACCESS. SPC 1 * CHECK FOR BREAK FLAG, AND OBTAIN SELECT CODE & EXTENSION ADDRESS. SPC 1 JSB #MBRK GO TO CHECK DEF *+4 THE SLAVE-LIST ENTRY DEF STYPE FOR A BREAK CONDITION DEF CONWD,I IN THIS MONITOR'S DEF TTADR,I STREAM-LIST. JMP D65SV,I ERROR RETURN--CODES IN . JMP EXIT BREAK DETECTED: NORMAL RETURN [=0]. SPC 1 * CALL 'D65CL' TO SEND THE REPLY TO THE SATELLITE. SPC 1 JSB D65CL GO TO COMM. LINE ACCESS ROUTINE. DEF *+8 DEF RCODA,I REQUEST CODE. DEF CONWD,I CONTROL WORD. DEF RQBUF,I REPLY BUFFER ADDRESS. DEF RQLEN,I REPLY BUFFER LENGTH. DEF DABUF,I DATA BUFFER ADDR. (OR DUMMY PARAMETER). DEF DALEN,I DATA BUFFER LENG. (OR DUMMY PARAMETER). DEF EXTAD EQT EXTENSION ADDRESS. ISZ ERFLG * ERROR--SET ERROR-RETURN FLAG. DST REG SAVE REGISTERS FOR RETURN TO CALLER. JSB PLOG GO TO CHECK FOR PARMB LOGGING REQUEST. SPC 1 * CLEAR CURRENT TRANSACTION IN SLAVE-STREAM LIST IN . SPC 1 JSB #RSAX GO TO ACCESS ROUTINE. DEF *+5 DEF P3 CLEAR AN ENTRY. DEF ST/LS SPECIFY THIS MONITOR'S LIST. DEF SCODE SEARCH, USING LINE SELECT CODE, DEF TTADR,I AND TRANSACTION TIME-TAGS. SSA ANY ERRORS? JMP ER07 YES. GO TO INFORM THE CALLER. SPC 1 * RETURN TO THE CALLER WITH & FROM DVR65, OR ASCII ERROR CODE. SPC 1 EXIT LDA ERFLG GET THE ERROR RETURN FLAG. SZA,RSS ANY ERRORS? ISZ D65SV NO. SET FOR NORMAL EXIT. DLD REG GET THE RETURN INFORMATION. JMP D65SV,I RETURN TO THE CALLER. SPC 1 * ERROR PROCESSING SECTION. SPC 1 ER07 LDB "07" #RSAX TABLE-ACCESS ERROR. LDA "DS" GET FIRST HALF OF ERROR MESSAGE "DS". JMP D65SV,I RETURN WITH ASCII ERROR MSG. IN &. SPC 4 * IF REQUESTED, WRITE PARMB'S TO THE LOGGER'S CLASS NO. SPC 1 PLOG NOP ENTRY/EXIT: PARMB LOGGING ROUTINE. LDA #PLOG GET REQUEST FLAG FROM . SZA,RSS IS THERE A REQUEST TO LOG PARMB'S? JMP PLOG,I NO. COMPLETE THE SLAVE PROCESSING. * STA PCLAS YES. SAVE THE LOGGER'S CLASS LOCALLY. * JSB EXEC WRITE DEF *+8 THE DEF CLS20 PARMB (PARAMETER BUFFER) DEF ZERO TO THE DEF RQBUF,I PARMB LOGGER'S DEF RQLEN,I CLASS NUMBER. DEF XEQT SUPPLY THE I.D. SEGMENT ADDRESS DEF "SV" AND ASCII "SV" SOURCE IDENTIFIER DEF PCLAS AS OPTIONAL PARAMETERS. NOP ** IGNORE ERRORS FOR THIS OPERATION ** JMP PLOG,I RETURN TO COMPLETE SLAVE PROCESSING. * SKP * CONSTANTS AND STORAGE. SPC 1 A EQU 0 B EQU 1 B77 OCT 77 B377 OCT 377 CLS20 OCT 100024 CLASS WRITE/READ--NO ABORT. EQMSK OCT 37400 EQT5 EQUIPMENT TYPE-CODE MASK. EXTAD NOP EQT EXTENSION ADDRESS. ERFLG NOP ERROR FLAG: #0 - TAKE . P2 DEC 2 P3 DEC 3 P4 DEC 4 P8 DEC 8 P33 DEC 33 PCLAS NOP LOCAL STORAGE: PARMB LOGGER'S CLASS NO. REG OCT 0,0 REGISTER STORAGE. SCODE NOP UPPER-BYTE SELECT CODE FOR LIST SEARCH. STYPE NOP STREAM-TYPE FROM PARMB. ST/LS NOP STREAM & LIST CODE-WORD FOR '#RSAX'. TTADR NOP TIME-TAG ADDRESS FROM PARMB. TTAG OCT 0,0 TIME-TAG STORAGE. TYP65 OCT 32400 EQUIPMENT TYPE-CODE 65, FOR DVR65. XEQT EQU 1717B USER'S I.D. SEGMENT ADDRESS. ZERO OCT 0 "04" ASC 1,04 "07" ASC 1,07 "DS" ASC 1,DS "SV" ASC 1,SV * SKP * < #MBRK > ROUTINE TO EXAMINE BREAK-FLAG IN MONITOR STREAM-LIST ENTRY. SPC 1 * CALLING SEQUENCE: * * JSB #MBRK * DEF *+4 * DEF STRM MONITOR'S STREAM TYPE-CODE. * DEF LU LU TO BE USED BY MONITOR--IF NO BREAK. * DEF TTAGA ADDRESS OF TIME-TAGS (2). * = ASCII ERROR CODES. * =0, = ENTRY ADDRESS. * =SELECT CODE, =EQT EXTENSION ADDRESS. * STRM NOP STREAM TYPE-CODE ADDRESS LU NOP LOGICAL UNIT NO. ADDRESS. TTAGA NOP ADDRESS OF 2-WORD TIME-TAG BUFFER. #MBRK NOP ENTRY/EXIT: BREAK-FLAG ROUTINE. JSB .ENTR OBTAIN DIRECT ADDRESSES DEF STRM FOR PARAMETERS & RETURN POINT. SPC 1 * VERIFY LOGICAL UNIT & EXTRACT SELECT CODE & EQT EXTENSION ADDRESS. SPC 1 JSB DRTEQ GO TO FIND EQT INFORMATION. DEF *+2 DEF LU,I RETURN INFO FOR THIS LOGICAL UNIT. SSB ANY ERRORS? JMP MBER4 * ERROR: INVALID LU "DS04". * ADB P3 FORM EQT4 ADDRESS FROM EQT FWA IN . LDA B,I GET THE CONTENTS OF EQT4. AND B77 ISOLATE THE DEVICE SELECT CODE. ALF,ALF POSITION TO THE UPPER BYTE. STA SCODE SAVE FOR CLEARING THE TABLE ENTRY. * INB POINT TO EQT5 ADDRESS. LDA B,I GET THE CONTENTS OF EQT5. AND EQMSK ISOLATE THE EQUIPMENT TYPE-CODE. CPA TYP65 IS THIS LU LINKED TO DVR65? RSS YES. SKIP TO FIND THE EQT EXTENSION. JMP MBER4 NO. * ERROR: "DS04" INVALID LU! * ADB P8 COMPUTE ADDRESS OF EQT13. LDB B,I GET A DIRECT RBL,CLE,SLB,ERB ADDRESS FOR THE JMP *-2 EQT EXTENSION. STB EXTAD SAVE FOR USE BY 'D65CL'. SPC 1 * LOCATE THE SLAVE-STREAM LIST-ENTRY FOR THE CURRENT TRANSACTION. SPC 1 LDA STRM,I GET FIRST WORD OF REPLY BUFFER. AND B377 ISOLATE THE STREAM TYPE. ALF,ALF POSITION TO UPPER BYTE. ADA P2 ADD OFFSET FOR STREAM HEADERS. STA ST/LS SAVE CODE-WORD FOR CLEARING LIST ENTRY. DLD TTAGA,I GET THE TIME-TAGS, DST TTAG AND SAVE FOR LATER USE. SKP * SEARCH FOR A "BREAK" CONDITION, AMONG THE STREAM-LIST ENTRIES. SPC 1 JSB #RSAX GO TO CHECK DEF *+5 THE SLAVE-LIST ENTRY DEF P4 FOR A BREAK CONDITION; DEF ST/LS USING SPECIFIED LIST CODE, DEF SCODE DEVICE SELECT CODE, AND DEF TTAG TIME-TAGS, FOR ENTRY-SEARCH. SSA ANY ERRORS? JMP MBER7 * LIST ERROR--REPORT: "DS07". SZB BREAK-FLAG DETECTED? JMP BREAK YES. EXIT VIA . * LDA SCODE RETURN WITH: = SELECT CODE, LDB EXTAD = EXTENSION ADDRESS. ISZ #MBRK SET NO-BREAK RETURN: P+3 BREAK ISZ #MBRK IF BREAK DETECTED: P+2 JMP #MBRK,I RETURN TO THE CALLER. * MBER4 LDB "04" INVALID LOGICAL UNIT ERROR. RSS MBER7 LDB "07" #RSAX TABLE-ACCESS ERROR. LDA "DS" GET FIRST HALF OF ERROR MESSAGE. JMP #MBRK,I TAKE ERROR-RETURN EXIT: P+1 * SPC 3 END