ASMB,R,L,C HED COMM. LINE INTERFACE * (C) HEWLETT-PACKARD CO. 1976 * NAM D65CL,7 91700-16150 REV.A 760111 ENT D65CL EXT .ENTR,EXEC,DRTEQ,RNRQ,#RTRY * NAME: D65CL * SOURCE: 91700-18150 * RELOC: 91700-16150 * PGMR: C.C.H. [01/11/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. * ****************************************************************** * * D65CL CONTROLS ACCESS TO THE COMMUNICATIONS LINE VIA THE RESOURCE * NUMBERING (RN) SCHEME OF RTE-II & RTE-III. TWO RN'S ARE CHECKED FOR * AVAILABILITY, PRIOR TO ALLOWING ACCESS TO THE COMM. LINE. THE RN'S * ARE IDENTIFIED AS: PRN ( RN) AND LRN (LINE RN). * * D65CL OPERATION: * * 1. GET PARAMETERS AND CHECK FOR VALID LOGICAL UNIT NUMBER. * 2. ATTEMPT TO LOCK/CLEAR PRN WITH WAIT. * A. IF PRN IS LOCKED, SLAVE ACCESS IS REJECTED: "DS02" ERROR. * B. IF PRN IS LOCKED, MASTER ACCESS AWAITS COMPLETION. * C. IF AVAILABLE, PROCEED WITH PRN CLEARED. * 3. IF CONTROL REQ. OR MODE =DATA REQUEST, GO TO 4; ELSE, GO TO 6.C. * 4. ATTEMPT TO LOCK LRN; DON'T WAIT 'TIL AVAILABLE. * 5. CALL DVR65 FOR I/O TRANSFER VIA SUPPLIED LU. * A. IF GOOD TRANSFER, RETURN TO USER; ELSE, * 6. CHECK REJECT REASON: * A. IF REMOTE BUSY, WAIT 1-SECOND AND RETRY--GO TO 5. * B. IF RETRIES EXHAUSTED: "DS08" ERROR. * C. IF DRIVER BUSY, DO LRN LOCK W/WAIT. WHEN LRN IS AVAILABLE, * RE-CALL DRIVER (GO TO 4.). * D. IF ERROR REJECT, RETURN WITH ASCII ERROR CODE IN &. * * D65CL CALLING SEQUENCE: * * JSB D65CL * DEF *+7 [ OR *+8 ] * DEF RCODE READ/WRITE/CONTROL (1/2/3) REQUEST CODE * DEF CONWD CONTROL WORD: Z/MODE/LU OF COMM. LINE. * DEF RQBUF REQUEST OR DATA BUFFER ADDRESS. * DEF RQLEN REQUEST OR DATA BUFFER LENGTH. * DEF DABUF DATA BUFFER ADDRESS OR DUMMY PARAMETER. * DEF DALEN DATA BUFFER LENGTH OR DUMMY PARAMETER. * [ DEF EXTAD ] [ OPTIONAL ADDRESS OF EQT EXTENSION ] * RETURN HERE UPON DETECTION OF ERROR. * NORMAL COMPLETION RETURN HERE. * * NOTE: LRN & PRN ARE OBTAINED FROM THE FIRST TWO WORDS OF THE EXTENSION * TO THE EQT ENTRY LINKED TO THE USER-SPECIFIED LOGICAL UNIT NO. * SKP * * D65CL ERROR MESSAGES: * ( RETURNED TO CALLER IN & AT LOCATION ) * * "DS01" - DVR65 DETECTED AN ERROR CONDITION (PARITY ERROR, ETC.) * * "DS02" - HAS PREEMPTED COMPLETION OF THE CALLER'S REQUEST. * * "DS04" - LOGICAL UNIT INVALID, OR NOT ENTERED IN CLCT TABLE. * * "DS08" - BUSY-REJECT FROM REMOTE--RETRIES EXHAUSTED. * * "IOXX" \ * - SYSTEM LEVEL ERRORS, DETECTED BY RTE. * "RNXX" / * SKP RCODE NOP REQUEST CODE ADDRESS. CONWD NOP CONTROL WORD ADDRESS. RQBUF NOP ADDRESS OF REQUEST OR DATA BUFFER. RQLEN NOP ADDRESS OF REQUEST OR DATA BUFFER SIZE. DABUF NOP ADDRESS OF REQUEST OR DATA BUFFER. DALEN NOP ADDRESS OF REQUEST OR DATA BUFFER SIZE. EXTAD NOP OPTIONAL ADDRESS OF EQT EXTENSION. SUP [SUPPRESS EXTENDED LISTING] D65CL NOP ENTRY/EXIT JSB .ENTR OBTAIN DIRECT ADDRESSES DEF RCODE FOR PARAMETERS & RETURN POINT. SPC 1 LDA RCODE,I GET REQUEST CODE AND ABORT FLAG (BIT#15). CCE,SSA,RSS TEST SIGN & PREPARE TO SET IT. RAL,ERA SET SIGN FOR ERROR RETURN. STA RCODE SAVE REQUEST CODE, LOCALLY. * CLA LDB EXTAD GET EQT EXTENSION PARAMETER--IF ANY. STA EXTAD CLEAR PARAMETER FOR NEXT ACCESS. SZB WAS THE EXTENSION PARAMETER SUPPLIED? JMP GETX YES. GO TO GET THE EXTENSION ADDRESS. SPC 1 * CHECK FOR VALID LU AND CALCULATE EQT EXTENSION ADDRESS. SPC 1 JSB DRTEQ GO TO FIND EQT ADDRESS. DEF *+2 DEF CONWD,I RETURN INFO FOR THIS LOGICAL UNIT. CPA M1 IF INVALID LU DETECTED, JMP ABOR4 * ERROR: "DS04" - INFORM THE CALLER. * ADB D4 FORM EQT5 ADDRESS FROM EQT FWA IN . 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, CONTINUE PROCESSING. JMP ABOR4 NO. * ERROR: "DS04" - INVALID LU! * ADB D8 COMPUTE ADDRESS OF EQT13. GETX LDB B,I GET A DIRECT RBL,CLE,SLB,ERB ADDRESS FOR THE JMP *-2 EQT EXTENSION. SPC 1 * LOCATE RESOURCE NUMBERS FOR THE SPECIFIED LOGICAL UNIT. SPC 1 LDA B,I GET THE LINE-CONTROL RESOURCE NUMBER, STA LRN AND SAVE IT. INB INDEX TO THE PRN ENTRY. LDA B,I GET THE RESOURCE NUMBER, STA PRN AND SAVE IT. LDA LCGW INITIALIZE 'PRNCW' TO ACCOMMODATE STA PRNCW CORE-RESIDENT COPIES OF . * LDA #RTRY GET NEGATIVE NUMBER OF RETRIES. STA RTCNT SAVE FOR BUSY-RETRY PROCESSING. * SKP * DETERMINE WHETHER IS USING THE LINE BY DOING A LOCK CLEAR ON THE * RESOURCE NUMBER. IF HAS THE LINE, SLAVE ACCESS IS * REJECTED: "DS02"; MASTER ACCESS MUST WAIT FOR TO COMPLETE. SPC 1 PWAIT LDA PRNCW GET THE 'PRN' CONTROL WORD. XOR SIGN ADD OR DELETE THE NO-WAIT BIT(#15). STA PRNCW RESTORE THE CONTROL WORD. * JSB RNRQ GO TO CHECK PRN AVAILABILITY. DEF *+4 DEF PRNCW SPECIFY GLOBAL LOCK/CLEAR/NO-ABORT. DEF PRN ADDRESS OF RN. DEF TEMP RETURN STATUS. JMP ABORX GO PROCESS RN ERROR, IF ANY. * LDA TEMP GET THE STATUS OF 'PRN'. CPA D1 IF IT IS CLEAR, JMP REQCK THEN CONTINUE THE PROCESSING. CPA D2 IF IT WAS LOCALLY LOCKED TO THE CALLER, JMP ABOR2 THIS IS --ACCESS DENIED! * LDA CONWD,I GET THE CONTROL WORD. AND B1000 ISOLATE THE MASTER-REQUEST BIT(#9). SZA IF THIS IS A MASTER-REQUEST, JMP PWAIT GO TO AWAIT COMPLETION; JMP ABOR2 ELSE, ABORT SLAVE REQUESTS: "DS02"! SPC 1 * EXAMINE SPECIFIED DRIVER MODE. ONLY DATA & CONTROL REQUESTS WILL BE * ALLOWED TO PROCEED TO THE DRIVER WITHOUT WAITING FOR LRN AVAILABILITY. SPC 1 REQCK LDA RCODE GET THE REQUEST CODE WORD AND B77 ISOLATE THE REQUEST CODE. CPA D3 IF IT IS A CONTROL REQUEST, JMP LRNLK DO NOT WAIT FOR LRN AVAILABILITY. LDA CONWD,I GET THE CONTROL WORD. AND B700 ISOLATE THE DRIVER MODE OF OPERATION. CPA B300 IF THIS IS A DATA-ONLY REQUEST, RSS PROCEED TO MAKE THE DRIVER CALL; ELSE, JMP LOCKW GO TO CHECK AVAILABILITY OF LRN. SPC 1 * ATTEMPT TO LOCK THE LINE RN, BUT DO NOT WAIT, IF ALREADY LOCKED. * THE DRIVER WILL DETERMINE VALIDITY OF ACCESS FOR THIS REQUEST. * WE'LL BE FORCED TO WAIT AT A LATER TIME, IF DVR65 IS BUSY. SPC 1 LRNLK JSB RNRQ ATEMPT TO LOCK LRN--DON'T WAIT. DEF *+4 DEF LGNW SPECIFY GLOBAL LOCK/NO WAIT/NO ABORT. DEF LRN ADDRESS OF LINE RN. DEF TEMP RETURN STATUS (NOT USED). JMP ABORX PROCESS RN ERROR, IF ANY. * SKP SPC 1 * CALL THE DRIVER TO PERFORM THE REQUEST. SPC 1 CALLD JSB EXEC CALL RTE TO DO THE I/O. DEF *+7 RETURN ADDRESS:ERROR; ELSE, *+8:NORMAL. DEF RCODE REQUEST CODE ADDRESS. DEF CONWD,I CONTROL WORD. DEF RQBUF,I REQUEST OR DATA BUFFER ADDRESS. DEF RQLEN,I REQUEST OR DATA BUFFER LENGTH. DEF DABUF,I DATA BUFFER ADDRESS OR DUMMY PARAMETER. DEF DALEN,I DATA BUFFER LENGTH OR DUMMY PARAMETER. JMP ABORX GO TO PROCESS OP-SYSTEM ERROR. STA TEMP SAVE : EQT5 STATUS FOR CALLER. STB TEMP+1 SAVE : EQT12 STATUS FOR CALLER. SPC 1 * EXAMINE THE RETURN-STATUS FROM THE DRIVER. SPC 1 SLA,RAR WAS THE TRANSFER SUCCESSFUL? JMP NEXIT YES, GO PREPARE FOR NORMAL EXIT. SWP EXCHANGE & FOR BOOLEAN OPERATIONS. AND B40 ISOLATE EQT12 BIT#5 (REMOTE BUSY). CLE,ERB MOVE BUSY-REJECT BIT(EQT5 #1) TO . SEZ,SZA,RSS BUSY-REJECT/REMOTE-BUSY OR BOTH? JMP ABOR1 NEITHER--DRIVER ERROR! SEZ,RSS WAS THE REMOTE SYSTEM BUSY? JMP DELAY YES. GO TO WAIT AWHILE & RETRY. SZA NO. SIMULTANEOUS REQUESTS DETECTED? JMP CALLD YES. LET DVR65 SOLVE THE PROBLEM. SPC 1 * BUSY-REJECT: THE DRIVER DETERMINED THAT A NEW REQUEST COULD NOT BE * PROCESSED AT THIS TIME. THE USER MUST WAIT FOR AVAILABILITY OF THE LRN. SPC 1 LOCKW JSB RNRQ LOCK THE LRN--WAIT FOR AVAILABILITY. DEF *+4 DEF LGW SPECIFY GLOBAL LOCK/WITH WAIT/NO ABORT. DEF LRN ADDRESS OF LRN. DEF TEMP RETURN STATUS (NOT USED). JMP ABORX PROCESS RN ERROR CONDITION. JMP CALLD RN LOCKED. GO CALL THE DRIVER. SPC 1 * PREPARE FOR NORMAL RETURN TO THE USER SPC 1 NEXIT ISZ D65CL SET EXIT-POINTER FOR . DLD TEMP RETURN WITH & FROM DVR65. JMP D65CL,I RETURN TO THE USER. SPC 1 * ERROR PROCESSING SECTION. SPC 1 ABOR8 LDB "08" REMOTE-BUSY/RETRIES EXHAUSTED: "DS08". JMP GETDS GO TO GET "DS" PORTION OF ERROR CODE. ABOR4 LDB "04" INVALID LOGICAL UNIT ERROR: "DS04". JMP GETDS GO TO GET FIRST HALF OF MESSAGE. ABOR2 LDB "02" SLAVE-TRANSACTION INTERRUPTED: "DS02". RSS GO TO GET FIRST HALF OF MESSAGE. ABOR1 LDB "01" ABORTIVE DRIVER ERROR: "DS01". GETDS LDA "DS" GET FIRST HALF OF ERROR MESSAGE. ABORX JMP D65CL,I RETURN TO THE USER. SKP * WAIT--IN ORDER TO ALLOW TIME FOR THE REMOTE TO CLEAR TABLE SPACE. SPC 1 DELAY JSB EXEC GO TO THE RTE 'EXEC' DEF *+6 IN ORDER TO DEF D12 PLACE THIS PROGRAM DEF ZERO IN THE TIME LIST DEF D1 FOR A 1-SECOND DELAY, DEF ZERO WHILE WAITING FOR DEF DM100 TABLE SPACE AT REMOTE SYSTEM. * ISZ RTCNT MAXIMUM NO. OF RETRIES BEEN EXECUTED? JMP CALLD NO. GO TO TRY AGAIN. JMP ABOR8 YES. INFORM CALLER OF THE PROBLEM. SPC 2 * POINTER AND CONSTANT STORAGE AREA. SPC 1 B EQU 1 B40 OCT 40 B77 OCT 77 B300 OCT 300 B700 OCT 700 B1000 OCT 1000 D1 DEC 1 D2 DEC 2 D3 DEC 3 D4 DEC 4 D8 DEC 8 D12 DEC 12 DM100 DEC -100 EQMSK OCT 37400 EQT5 EQUIPMENT TYPE CODE MASK. LCGW OCT 40006 GLOBAL RN LOCK/CLEAR/WAIT/NO ABORT. LGNW OCT 140002 GLOBAL RN LOCK/NO WAIT/NO ABORT. LGW OCT 40002 GLOBAL RN LOCK/WAIT/NO ABORT. LRN NOP LINE CONTROL RESOURCE NUMBER. M1 OCT -1 PRN NOP RESOURCE NUMBER. PRNCW NOP RN-CHECK CONTROL WORD. RTCNT NOP BUSY-REJECT RETRY COUNTER. SIGN OCT 100000 TEMP OCT 0,0 TEMPORARY STORAGE. TYP65 OCT 32400 EQUIPMENT TYPE CODE 65 FOR DVR65. ZERO OCT 0 "01" ASC 1,01 "02" ASC 1,02 "04" ASC 1,04 "08" ASC 1,08 "DS" ASC 1,DS SPC 1 END