ASMB,R,L,C HED MASTER REQUEST INTERFACE * (C) HEWLETT-PACKARD CO. 1976* * NAM D65MS,7 91700-16135 REV.A 760331 SPC 1 ENT D65MS SPC 1 EXT .ENTR,#RSAX,$TIME,#MSTO,#QRN,#WAIT EXT EXEC,D65CL,D65AB,DRTEQ,RNRQ,#TBRN,#PLOG * * NAME: D65MS * SOURCE: 91700-18135 * RELOC: 91700-16135 * PGMR: C.C.H. [ 03/31/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. * ****************************************************************** * * D65MS PROVIDES THE MASTER REQUESTOR WITH AN INTERFACE TO THE * COMMUNICATIONS NETWORK, WHICH GUARDS AGAINST CONFLICTING * REQUESTS FROM OTHER USERS WHO MAY ATTEMPT TO GAIN ACCESS TO * THE SAME COMMUNICATION PATH. * * D65MS OPERATION: * 1. GET USER-SUPPLIED PARAMETERS. * A. FORM ERROR-REPORT ADDRESS =JSB D65MS, IF [ERRAD] NOT SUPPLIED. * B. SET ERROR-RETURN FLAG IF CONWD PARAMETER BIT#15 =1. * C. ISOLATE & REMOVE NO-WAIT BIT(#10) & BLIND REQUEST BIT(#9) IN CONWD. * D. ADD MASTER-REQUEST BIT(#9) TO CONTROL WORD. * E. SAVE FLAG WORD WITH ERROR-RETURN BIT(#15), NO-WAIT BIT(#1), * AND BLIND REQUEST BIT(#0). * 2. CHECK <#QRN> IN 'RES': * A. IF IT IS ZERO, THEN DS1 SYSTEM IS SHUT DOWN; ERROR: "DS00". * B. IF IT IS NON-ZERO, THEN VALUE IS A RESOURCE NUMBER, WHICH MUST BE * CHECKED FOR AVAILABILITY. LOCK & CLEAR THE RN, BEFORE PROCEEDING. * C. IF IT IS ALREADY LOCKED, THEN THE SYSTEM HAS BEEN MADE * QUIESCENT--WAIT FOR UN-LOCK BEFORE PROCEEDING. * D. IF IT IS UN-LOCKED, THEN PROCEED WITH THE RN CLEARED. * E. IF #QRN IS NOW =0, THEN SYSTEM HAS BEEN CHANGED FROM QUIESCENT * TO SHUT-DOWN STATE. RETURN WITH ERROR: "DS00". * 3. GET EQT EXTENSION ADDRESS FOR EQT ASSOCIATED WITH SPECIFIED LU. * A. SAVE EQT EXTENSION ADDRESS FOR USE BY 'D65CL'. * 4. IF BLIND REQUEST, THEN NO NEED TO CHECK REPLY LENGTH-GO TO 5.; ELSE, * CHECK FOR MINIMUM LENGTH =35 WORDS; <35: ERROR: "DS06". * 5. GET CLASS NUMBER FROM RTE FOR USE IN RECEIVING REPLY * VIA QUEUE--WAIT IF UNAVAILABLE. * 6. ADD FRIENDLY SATELLITE BIT(#11) TO FIRST WORD OF PARMB. * 7. PUT MASTER CLASS NO. IN WORD #2 OF PARMB, FOR LATER USE * BY QUEUE, IN FORWARDING THE REPLY. * 8. PUT CURRENT SYSTEM TIME IN WORDS #34 & #35 OF PARMB, AND * IN LOCAL STORAGE. TIME-TAG IS USED TO UNIQUELY IDENTIFY * THE REPLY AS THE EXPECTED REPLY. SKP * 9. WAIT FOR AVAILABILITY OF TABLE-ACCESS RN (#TBRN) BEFORE * BUILDING A MASTER REQUESTOR CONTROL TABLE ENTRY; START MASTER TIMER, * UNLESS CONWD BIT#9 =1 (BLIND REQUEST). * 10. GO TO 'D65CL' TO FORWARD THE REQUEST, VIA THE COMM. LINE. * A. IF #PLOG #0, WRITE PARMB TO PARMB LOGGER'S CLASS NO. * 11. IF BLIND REQUEST, RETURN NOW; ELSE, DO A CLASS GET TO AWAIT REPLY. * 12. CHECK THE REPLY: * A. ZERO LENGTH =TIMEOUT (COURTESY OF 'UPLIN'). * B. AT LEAST 35 WORDS (PARMB SIZE) ARE EXPECTED; ELSE, "DS03" ERROR! * C. SAME TIME-TAG MUST BE RETURNED; ELSE, THIS IS A LATE * OR IMPROPER REPLY, AND IS IGNORED: GO TO 11. * D. IF BUSY-REPLY(WORD#1,BIT#13=1) RECEIVED FROM A QUIESCENT * REMOTE, THEN CHECK 'FLAGS' FOR THE NO-WAIT BIT(#1). * E. IF NO-WAIT & ERROR-RETURN BITS SET, THEN RETURN VIA * WITH &="DS08"; ELSE, GO TO 'D65AB' WITH REGISTERS ="DS08". * F. IF NO-WAIT BIT CLEAR, THEN PLACE PROGRAM IN TIME LIST FOR A * PERIOD OF SECONDS, AS SPECIFIED BY <#WAIT> IN 'RES'. * G. AFTER THE DELAY, RE-SUBMIT THE REQUEST (GO TO 2.). * 13. CHECK FOR A REPLY FROM AN ILLEGAL REQUEST; IF ILLEGAL: "DS03" ERROR! * 14. RETURN THE CLASS NUMBER TO THE SYSTEM. * 15. CLEAR THE MASTER REQUESTOR CONTROL TABLE ENTRY. * 16. RETURN TO THE CALLER AT , WITH DVR65 INFO IN &. * * D65MS CALLING SEQUENCE: * * JSB D65MS * DEF *+7 [OR *+8] * DEF RCODE DRIVER REQUEST CODE * DEF CONWD CONTROL WORD/ERROR-RETURN FLAG (BIT#15). * DEF RQBUF REQUEST BUFFER ADDRESS. * DEF RQLEN REQUEST LENGTH. (MINIMUM SIZE =35 WORDS) * DEF DABUF DATA BUFFER ADDRESS OR DUMMY PARAMETER. * DEF DALEN DATA BUFFER LENGTH OR DUMMY PARAMETER. * [DEF ERRAD] [OPTIONAL ADDRESS FOR ERROR-REPORT PRINTOUT.] * RETURN HERE UPON ERROR DETECTION. * NORMAL RETURN HERE, UPON COMPLETION. * * * CONWD DESCRIPTION: * * BIT#15 - ERROR-RETURN FLAG (SEE D65MS ERROR PROCESSING: ITEM #1). * BITS#14,13 - RESERVED FOR USE BY 'RTE'. * BIT#12 - 'Z' BIT (DOUBLE BUFFER, AS DESCRIBED IN RTE MANUAL). * BIT#11 - RESERVED FOR USE BY 'RTE'. * BIT#10 - NO-WAIT (SEE D65MS OPERATION: ITEMS #12.D THRU #12.G). * BIT#9 - BLIND REQUEST: NO REPLY EXPECTED, AT THIS TIME. * BITS#8,7,6 - REQUEST TYPE (MODE): 0 - REQUEST ONLY * 1 - SEND REQUEST & READ DATA * 2 - SEND REQUEST & SEND DATA * 3 - READ OR SEND DATA ONLY * BITS#5-#0 - LOGICAL UNIT NO. OF COMMUNICATION LINE INTERFACE. * * NOTE: BITS #9,10 -AS SPECIFIED BY THE USER- ARE REMOVED BY 'D65MS', * AND BIT #9 (MASTER REQUEST) IS SET, BEFORE CALLING 'D65CL'. SKP * * D65MS ERROR PROCESSING: * * 1. IF SIGN BIT(#15) OF LU PARAMETER IS SET, ASCII ERROR CODES * ARE SUPPLIED TO THE CALLER IN THE & REGISTERS, UPON * RETURN TO THE POINT IN THE CALLING SEQUENCE. * 2. IF THE SIGN BIT IS NOT SET, THEN THE ROUTINE 'D65AB' IS * CALLED TO ABORT THE CALLER'S PROGRAM, AFTER PRINTING AN * ERROR MESSAGE ON THE SYSTEM CONSOLE. THE MESSAGE PRINTED * WILL CONTAIN EITHER THE USER-SUPPLIED ERROR ADDRESS (ERRAD), * OR THE ADDRESS OF THE USER'S CALL TO 'D65MS'. * * D65MS ERROR MESSAGES: * * "DS00" - DS1 IS SHUT-DOWN! * * "DS01" - DVR65 DETECTED ERROR (PARITY, ETC.) - FROM 'D65CL'. * * "DS03" - ILLEGAL REPLY - SHORT PARMB. * * "DS04" - LOGICAL UNIT INVALID OR NO CLCT ENTRY. * * "DS05" - MASTER REQUEST TIMEOUT (COURTESY OF 'UPLIN'). * * "DS06" - ILLEGAL REQUEST. * * "DS07" - 'RES' TABLE-ACCESS ERROR. * * "DS08" - BUSY-REJECT FROM REMOTE [NO-WAIT SET OR RETRIES EXHAUSTED]. * * "IOXX" - \ * - RTE SYSTEM DETECTED ERRORS. * "RNXX" - / * * * SKP SUP [SUPPRESS EXTENDED LISTING] RCODA NOP REQUEST CODE ADDRESS. CONWD NOP CONTROL WORD ADDRESS. RQBUF NOP REQUEST BUFFER ADDRESS. RQLEN NOP REQUEST BUFFER LENGTH. DABUF NOP DATA BUFFER ADDRESS OR DUMMY PARAMETER. DALEN NOP DATA BUFFER LENGTH OR DUMMY PARAMETER. ERRAD NOP OPTIONAL ADDRESS OF ERROR-CAUSING CALL. SPC 1 D65MS NOP ENTRY/EXIT JSB .ENTR OBTAIN DIRECT ADDRESSES DEF RCODA FOR PARAMETERS & RETURN POINT. CLB CLEAR CLASS NUMBER STB CLASN FOR ERROR PROCESSOR. LDA ERRAD,I GET OPTIONAL ERROR-REPORT ADDRESS. STB ERRAD CLEAR PARAMETER FOR NEXT CALL. SZA DID USER SUPPLY AN ADDRESS? JMP STORA YES, GO TO SAVE IT. LDA D65MS NO. SET ERROR ADDRESS TO POINT ADA DM9 TO CALL TO 'D65MS'. STORA STA ERRA SAVE FOR POSSIBLE ERROR PROCESSING. * LDA CONWD,I GET THE CONTROL WORD. RAL,CLE,ERA MOVE THE ERROR-RETURN FLAG TO . STA B SAVE IN , TEMPORARILY. AND B3000 ISOLATE NO-WAIT & BLIND REQUEST BITS. SWP EXCHANGE & FOR BOOLEAN OPERATIONS. XOR B REMOVE NO-WAIT & BLIND REQUEST BITS. IOR B1000 ADD THE MASTER-REQUEST FLAG (BIT#9). STA CONWD SAVE THE COMPLETE CONTROL WORD, LOCALLY. BLF,BLF POSITION NO-WAIT & BLIND REQUEST BITS ERB TO BITS #1,#0; ADD ERROR-RTN: BIT#15. STB FLAGS SAVE THE COMPLETE FLAG WORD. SPC 1 * CHECK FOR LOCAL SYSTEM SHUT-DOWN OR QUIESCENT STATUS. SPC 1 RETRY LDA #QRN GET THE QUIESCENT/SHUT-DOWN RN. SZA,RSS IS THE DS1 SYSTEM SHUT-DOWN? JMP DOWN YES. GO TELL CALLER THE SAD NEWS. SPC 1 * REQUESTS WILL BE FORCED TO WAIT HERE, IF LOCAL SYSTEM HAS BEEN QUIESCED. SPC 1 JSB RNRQ GO TO RTE TO CHECK FOR SYSTEM QUIESCENCE. DEF *+4 DEF LCGW LOCK/CLEAR/WAIT/NO-ABORT DEF #QRN CHECK SYSTEM-QUIESCENCE RESOURCE NUMBER. DEF TEMP DUMMY PARAMETER. JMP PASER * RTE ERROR - PASS CODE TO CALLER * * LDA #QRN IF QUIESCENT STATE HAS BEEN CHANGED SZA,RSS TO SYSTEM SHUT-DOWN STATE, JMP DOWN THEN TELL THE CALLER THE SAD NEWS. * SKP * LOCATE EQT ADDRESS TO GET DEVICE SELECT CODE & EXTENSION ADDRESS. SPC 1 JSB DRTEQ GO TO FIND EQT ADDRESS. DEF *+2 DEF CONWD RETURN INFO FOR THIS LOGICAL UNIT. * CPA M1 IF INVALID LU DETECTED, JMP LUERR * ERROR: "DS04" IS REPORTED. ADB P3 FORM EQT4 ADDRESS FROM EQT FWA IN . LDA B,I GET CONTENTS OF EQT4. AND B77 ISOLATE THE DEVICE SELECT CODE. STA SCODE SAVE FOR INSERTION INTO MRCT. INB POSITION TO EQT5 ADDRESS. LDA B,I GET 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 LUERR 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 2 * CHECK FOR MINIMUM REPLY LENGTH OF 35 WORDS. SPC 1 LDA FLAGS GET 'FLAGS' FOR BLIND-REQUEST CHECK. SLA IF THIS IS A BLIND-REQUEST, THEN JMP GCLAS NO NEED TO CHECK REPLY LENGTH. LDA RQLEN,I GET REQUEST BUFFER LENGTH. ADA M35 IF NEGATIVE, OR <35 WORDS SSA WERE SPECIFIED, THEN JMP ILRQ THIS IS AN ILLEGAL REQUEST! SPC 2 * REQUEST A CLASS NUMBER ALLOCATION FROM RTE. SPC 1 GCLAS LDA BIT13 INITIALIZE CLASS NUMBER STA CLASN FOR NON-RELEASE USAGE. JSB EXEC GO TO RTE FOR A CLASS NO.--WAIT FOR IT. DEF *+5 DEF CLS19 CLASS CONTROL(QUICK ALLOCATE)-NO ABORT. DEF ZERO LU ='BIT BUCKET' FOR ALLOCATION. DEF ZERO DUMMY PARAMETER FOR ALLOCATION. DEF CLASN CLASS NUMBER STORAGE ADDRESS. JMP PASER * RTE ERROR: MESSAGE IN & * * JSB EXEC GO TO RTE TO COMPLETE DEF *+5 PREVIOUS ALLOCATION REQUEST. DEF CLS21 CLASS GET--NO ABORT. DEF CLASN CLASS NUMBER STORAGE ADDRESS. DEF ZERO DUMMY PARAMETER. DEF ZERO DUMMY PARAMETER. JMP PASER * RTE ERROR: MESSAGE IN & * * SKP * ADD FRIENDLY SATELLITE BIT(#11) TO FIRST WORD OF PARAMETER BUFFER. SPC 1 LDA BIT11 ADD THE LDB RQBUF FRIENDLY SATELLITE BIT(#11) IOR B,I TO THE FIRST WORD (STREAM,ETC.) STA B,I OF THE PARAMETER BUFFER (PARMB). SPC 1 * ADD CLASS NUMBER & LATE-REPLY TIME TAG TO PARMB. SPC 1 LDA CLASN GET MASTER CLASS NUMBER. STA MBUF+1 SAVE FOR MASTER REQUEST TABLE ENTRY. INB POINT TO 2ND WORD (MASTER CLASS NO.) STA B,I SAVE FOR REPLY (USED BY QUEUE). ADB P32 POINT TO WORD #34 OF PARMB. STB TEMP SAVE TEMPORARILY. DLD $TIME GET CURRENT SYSTEM TIME. DST TEMP,I SAVE IN PARMB AND LOCAL STORAGE DST TAG FOR VALID REPLY RECOGNITION. SPC 1 * BUILD MASTER REQUESTOR LIST-ENTRY IN 'RES'. SPC 1 LDB FLAGS GET BLIND-REQUEST FLAG. LDA SCODE GET COMM. LINE SELECT CODE. ALF,ALF POSITION TO UPPER BYTE. SLB,RSS IF BLIND REQUEST, NO TIMER NEEDED--SKIP. IOR #MSTO INCLUDE TIMEOUT COUNT IN LOWER BYTE. STA MBUF SAVE IN FIRST WORD OF ENTRY BUFFER. LDA XEQT GET I.D. SEG. ADDRESS OF USER'S PROGRAM. STA MBUF+2 SAVE IN THIRD WORD OF ENTRY BUFFER. SPC 1 * WAIT FOR AVAILABILITY OF LIST-ENTRY SPACE IN 'RES'; ADD NEW ENTRY. SPC 1 JSB RNRQ GO TO RTE TO CHECK THE TABLE-ACCESS RN. DEF *+4 DEF LGW LOCK GLOBAL RN/WAIT FOR IT/NO ABORT. DEF #TBRN TABLE-ACCESS SPACE-AVAILABLE RN. DEF TEMP DUMMY PARAMETER. JMP PASER * RTE ERROR - PASS ERROR CODE TO USER * * JSB #RSAX GO TO 'RES' ACCESS ROUTINE. DEF *+5 DEF P1 ADD A MASTER ENTRY. DEF P1 SPECIFY MASTER LIST. DEF CLASN SEARCH FOR OLD ENTRIES, USING CLASS NO. DEF MBUF ADDRESS OF TABLE ENTRY DATA. SZA ANY ERRORS? JMP RESER * ERROR: "DS07" (NOT LIKELY). * SKP * CALL 'D65CL' TO COMMUNICATE VIA THE COMM. LINE. SPC 1 JSB D65CL GO TO COMM. LINE ACCESS ROUTINE. DEF *+8 DEF RCODA,I REQUEST CODE ADDRESS. DEF CONWD CONTROL WORD. DEF RQBUF,I REQUEST BUFFER ADDRESS. DEF RQLEN,I REQUEST BUFFER LENGTH ADDRESS. DEF DABUF,I DATA BUFFER ADDRESS OR DUMMY PARAMETER. DEF DALEN,I DATA BUFFER LENGTH OR DUMMY PARAMETER. DEF EXTAD ADDRESS OF EQT EXTENSION. JMP PASER * COMM. LINE ERROR: GO PROCESS * DST REG SAVE RETURN INFO FROM DVR65. * JSB PLOG GO TO CHECK FOR PARMB LOGGING REQUEST. * LDA FLAGS IF THIS WAS A SLA BLIND REQUEST (FLAGS BIT#0 =1), JMP BLIND GO TO CLEAN UP; ELSE, SPC 1 * DO A CLASS GET TO WAIT FOR A REPLY FOR THIS TRANSACTION. SPC 1 GETRP JSB EXEC GO TO RTE TO GET THE REPLY. DEF *+5 DEF CLS21 SPECIFY CLASS GET--NO ABORT. DEF CLASN SPECIFY MASTER CLASS NO.--NO RELEASE. DEF RQBUF,I SPECIFY REPLY ADDRESS. DEF RQLEN,I SPECIFY REPLY LENGTH. JMP PASER * RTE ERROR: GO TO PROCESS * SPC 1 * CHECK FOR PROPER REPLY. SPC 1 SZB,RSS CHECK FOR ZERO REPLY LENGTH. JMP MTOER * ZERO LENGTH: GO PROCESS TIMEOUT ERROR * ADB M35 WERE AT LEAST SSB 35 WORDS RETURNED? JMP RPLER * NO. REPLY ERROR "DS03" * LDB RQBUF GET REPLY BUFFER ADDRESS. ADB P33 POINT TO WORD #34. STB TEMP SAVE POINTER TEMPORARILY. DLD TEMP,I GET REPLY WORDS #34 & #35 (TIME TAG). CPA TAG IF FIRST TAG COMPARES, RSS SKIP TO CHECK SECOND; ELSE, JMP GETRP NOT EXPECTED REPLY; TRY AGAIN. CPB TAG+1 IF SECOND TAG COMPARES, RSS THEN THIS IS IT; ELSE, JMP GETRP NOT EXPECTED REPLY; TRY AGAIN. * SKP * CHECK FOR BUSY-REPLY FROM A REMOTE WHICH HAS BEEN MADE QUIESCENT. SPC 1 LDB RQBUF GET REPLY BUFFER ADDRESS. LDA B,I GET THE FIRST WORD OF THE REPLY. AND RPMSK ISOLATE REPLY-BIT(#14) & BUSY-BIT(#13). CPA RPMSK IS THIS A QUIESCENT-REJECT FROM REMOTE? RSS YES. SKIP TO PROCESS THE CONDITION. JMP RPLCK NO. CONTINUE WITH NORMAL PROCESSING. XOR B,I REMOVE THE REPLY & BUSY-REJECT BITS. STA B,I RESTORE THE FIRST WORD OF THE REQUEST. * LDA FLAGS GET THE FLAG-WORD. AND P2 ISOLATE THE NO-WAIT BIT (#1). SZA CALLER WISH TO WAIT FOR THE REMOTE? JMP BZYER NO. TELL HIM IT'S UN-AVAILABLE. * JSB EXEC GO TO THE RTE 'EXEC' DEF *+6 IN ORDER TO PLACE DEF P12 INTO THE TIME-LIST, DEF ZERO THIS PROGRAM, FOR A PERIOD DEF P2 OF DELAY IN SECONDS, DEF ZERO (ONCE-ONLY) AS DETERMINED BY A DEF #WAIT NEGATIVE VALUE <#WAIT> IN 'RES'. * JSB CLNUP RETURN CLASS# AND CLEAR TABLE ENTRY; JMP RETRY THEN, RE-SUBMIT THE REQUEST. SPC 1 * CHECK FOR A REPLY FROM AN ILLEGAL REQUEST. SPC 1 RPLCK ADB P2 POSITION TO THIRD WORD. LDA B,I GET THE WORD. CPA "IL" IF IT IS ASCII "IL", THEN JMP ILRQ USER MADE AN ILLEGAL REQUEST ("DS06"). BLIND JSB CLNUP GO TO CLEAN UP BEFORE EXITING. SPC 1 * RETURN TO USER AT NORMAL RETURN POINT. SPC 1 DLD REG = DVR65 RETURN INFORMATION. ISZ D65MS SET EXIT POINTER FOR NORMAL RETURN. JMP D65MS,I RETURN TO THE CALLER. * SKP * SUBROUTINE TO RELEASE THE MASTER CLASS AND CLEAR THE MASTER-LIST ENTRY. SPC 1 CLNUP NOP ENTRY/EXIT LDA CLASN GET THE CLASS NUMBER. SZA,RSS IF CLASS NEVER ASSIGNED, JMP CLNUP,I RETURN NOW. * IOR SIGN INCLUDE THE NO-WAIT BIT(#15), STA CLASN AND SAVE FOR RELEASE. CREPT CCA SET THE RELEASE RE-TRY SWITCH STA CEXIT TO =-1. * CLRTN JSB EXEC GO TO RTE TO RELEASE CLASS NUMBER. DEF *+5 DEF CLS21 SPECIFY CLASS GET/NO ABORT DEF CLASN SPECIFY MASTER CLASS/RELEASE/NO WAIT. DEF ZERO DUMMY BUFFER ADDRESS. DEF ZERO DUMMY BUFFER LENGTH. RSS IGNORE ERRORS. * ISZ CEXIT RELEASE PROCESSING COMPLETED? JMP CLRES YES. GO TO CLEAR THE 'RES' ENTRY. CPA M1 NO. ARE ALL PENDING REQUESTS CLEARED? RSS YES. SKIP TO DE-ALLOCATE THE CLASS. JMP CREPT NO. CONTINUE TO CLEAR REQUESTS. * LDA CLASN GET THE CLASS NUMBER AGAIN. AND CLMSK EXCLUDE THE NO-DE-ALLOCATION BIT(#13). STA CLASN RESTORE THE MODIFIED CLASS WORD. JMP CLRTN RETURN FOR FINAL DE-ALLOCATION. * CLRES LDA CLASN GET THE CLASS WORD. XOR SIGN REMOVE THE NO-WAIT BIT(#15). STA CLASN SAVE VIRGIN CLASS NO. FOR LIST SEARCH. * JSB #RSAX GO TO 'RES' ACCESS ROUTINE. DEF *+5 DEF P3 CLEAR A LIST ENTRY. DEF P1 SPECIFY MASTER LIST. DEF CLASN SEARCH, USING CLASS NUMBER. DEF ZERO DUMMY PARAMETER. JMP CLNUP,I RETURN. * SKP * ERROR PROCESSING SECTION. SPC 1 DOWN LDB "00" SYSTEM IS SHUT-DOWN: "DS00". JMP GETDS RPLER LDB "03" ILLEGAL REPLY/REC.SIZE: "DS03". JMP GETDS LUERR LDB "04" ILLEGAL LU OR NO CLCT ENTRY: "DS04". JMP GETDS MTOER LDB "05" MASTER REQUEST TIMEOUT: "DS05". JMP GETDS ILRQ LDB "06" ILLEGAL REQUEST: "DS06". JMP GETDS RESER LDB "07" 'RES' LIST-ACCESS ERROR: "DS07". JMP GETDS BZYER LDB "08" BUSY-REJECT FROM THE REMOTE: "DS08". * GETDS LDA "DS" GET FIRST HALF OF ERROR MESSAGE "DS". * PASER DST MSGBF SAVE TOTAL ERROR MESSAGE. * JSB CLNUP GO TO CLEAN UP BEFORE EXITING. * LDB MSGAD POINTS TO ERROR MESSAGE ADDRESS. LDA FLAGS GET ERROR-RETURN FLAG. ELA POSITION TO FOR TESTING. LDA ERRA GET THE ERROR-REPORT ADDRESS. SEZ,RSS ABORT OR RETURN TO CALLER? JSB D65AB ABORT! -- NO RETURN. DLD MSGBF GET ERROR CODES AND RETURN TO JMP D65MS,I THE CALLER AT ERROR-RETURN POINT. SPC 1 * 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 PEXIT NO. COMPLETE MASTER 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 "MS" AND ASCII "MS" SOURCE IDENTIFIER DEF PCLAS AS OPTIONAL PARAMETERS. NOP ** IGNORE ERRORS FOR THIS OPERATION ** * PEXIT DLD REG RESTORE THE REGISTERS. JMP PLOG,I RETURN TO COMPLETE MASTER PROCESSING. * PCLAS NOP LOCAL STORAGE FOR LOGGER'S CLASS NO. * SKP * CONSTANTS AND STORAGE. SPC 1 B EQU 1 B77 OCT 77 B1000 OCT 1000 B3000 OCT 3000 BIT11 OCT 4000 BIT13 OCT 20000 CEXIT NOP CLASS-RELEASE SWITCH STORAGE. CLASN NOP CLASS NUMBER STORAGE. CLMSK OCT 117777 CLASS NUMBER MASK. CLS19 OCT 100023 CLASS CONTROL--NO ABORT. CLS20 OCT 100024 CLASS WRITE/READ--NO ABORT. CLS21 OCT 100025 CLASS GET--NO ABORT. DM9 DEC -9 EQMSK OCT 37400 EQT5 EQUIPMENT TYPE-CODE MASK. FLAGS NOP ER.RTN(#15=1),NWAIT(#1=1),BLIND(#0=1) ERRA NOP ERROR-REPORT ADDRESS. EXTAD NOP EQT-EXTENSION ADDRESS. LCGW OCT 40006 GLOBAL RN LOCK/CLEAR/WAIT/NO-ABORT. LGW OCT 40002 GLOBAL RN LOCK/WAIT/NO ABORT. M1 OCT -1 M35 DEC -35 MBUF OCT 0,0,0 MRCT ENTRY BUFFER. MSGAD DEF *+1 ADDRESS OF ERROR MESSAGE BUFFER. MSGBF ASC 2,DS00 ERROR MESSAGE BUFFER. P1 DEC 1 P2 DEC 2 P3 DEC 3 P8 DEC 8 P12 DEC 12 P32 DEC 32 P33 DEC 33 REG OCT 0,0 DVR65 RETURN REGISTER INFORMATION. RPMSK OCT 60000 BUSY REPLY MASK. SCODE NOP DEVICE SELECT CODE STORAGE. SIGN OCT 100000 TAG OCT 0,0 TIME TAG STORAGE FOR REPLY VALIDATION. TEMP NOP TEMPORARY STORAGE. TYP65 OCT 32400 EQUIPMENT TYPE-CODE 65, FOR DVR65. XEQT EQU 1717B USER'S I.D. SEGMENT ADDRESS. ZERO OCT 0 "00" ASC 1,00 "03" ASC 1,03 "04" ASC 1,04 "05" ASC 1,05 "06" ASC 1,06 "07" ASC 1,07 "08" ASC 1,08 "DS" ASC 1,DS "IL" ASC 1,IL "MS" ASC 1,MS SPC 1 END