ASMB,R,L,C HED MASTER REQUEST INTERFACE * (C) HEWLETT-PACKARD CO. 1977* NAM D65MS,7 91740-16040 REV 1913 790104 * ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. 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. * ****************************************************************** * * ENT D65MS * * EXT .ENTR,#RSAX,#QRN,#WAIT,#NODE EXT EXEC,D65AB,D65GT,RNRQ,#TBRN EXT #GRPM,#BREJ,#NCNT,$OPSY * * NAME: D65MS * SOURCE: 91740-18040 * RELOC: 91740-16040 * PGMR: CHUCK WHELAN NOV 1976 ** ** HANDLING OF AN ILLEGAL REQUEST ERROR ALTERED [1-4-79] CEJ ** ALTERED TO ACCEPT TWO DATA BUFFER ADDRESSES [10-27-78] CEJ ** * * * D65MS CALLING SEQUENCE: * * JSB D65MS * DEF *+8 * DEF CONWD CONTROL WORD/ERROR-RETURN FLAG (BIT#15). * DEF RQBUF REQUEST BUFFER ADDRESS. * DEF RQLEN REQUEST LENGTH. * DEF DABUF OUTGOING DATA BUFFER ADDRESS * DEF DLWRT OUTGOING BUFFER LENGTH (OR ZERO) * DEF DLRED INCOMING BUFFER LENGTH (OR ZERO) * DEF RPLEN MAX REPLY LENGTH * DEF INBUF INCOMING DATA BUFFER ADDRESS * A & B HAVE ASCII ERROR CODE (ALSO IN REPLY 5 & 6) * A= RCVD REQ LEN, B= RCVD DATA LEN (OR 0) * * CONWD DESCRIPTION: * * BIT#15 - ERROR-RETURN FLAG * BIT#14 - NO TIMEOUT * SKP * * * D65MS PERFORMS THE FOLLOWING FUNCTIONS: * 1. RETURNS DS00 TO CALLER IF SYSTEM IS QUIESCENT. * 2. ALLOCATES A CLASS NUMBER FOR THE REQUEST. * 3. DOES A LOCK/WAIT ON THE "RES" TABLE ACCESS RN. * 4. CREATES A MASTER TCB * 5. CONVERTS DESTINATION NODE TO LU * 6. SENDS THE REQUEST(/DATA) * 6. CALLS "D65GT" TO AWAIT THE REPLY(/DATA) * 8. IF REPLY WAS A "QUIESCENT-REJECT", PUTS SELF IN TIME-LIST. * 9. IF ERROR FLAG IN 7TH REPLY WORD = 1, DOES ERROR RETURN. * 10. CLEARS THE MASTER CLASS # AND TCB. * 11. IF REPLY OK, GIVES RETURN WITH RCVD LENGTHS IN A & B. * * D65MS ERROR PROCESSING: * * 1. IF SIGN BIT(#15) OF CONWD 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! * "DS02" - DVA65 DETECTED ERROR (PARITY, ETC.) * "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" - REMOTE BUSY FAILURE - NO SAM, ETC * "IOXX" - \ * - RTE SYSTEM DETECTED ERRORS. * "RNXX" - / * SKP CONWD NOP CONTROL WORD ADDRESS. RQBUF NOP REQUEST BUFFER ADDRESS. RQLEN NOP REQUEST BUFFER LENGTH. DABUF NOP OUTGOING DATA BUFFER ADDRESS OR DUMMY PARAMETER. DLWRT NOP WRITE DATA LENGTH (OR ZERO) DLRED NOP READ DATA LENGTH (OR ZERO) RPLEN NOP MAX EXPECTED REPLY LENGTH INBUF NOP INCOMING DATA BUFFER ADDRESS OR DUMMY PARAMETER. SPC 2 D65MS NOP ENTRY/EXIT JSB .ENTR OBTAIN DIRECT ADDRESSES DEF CONWD FOR PARAMETERS & RETURN POINT. LDA RPLEN SZA,RSS FIRST 7 PARAMETERS PASSED? JMP ILRQ NO, GIVE ILLEGAL REQUEST * LDA INBUF YES, IF 8TH PARAMETER NOT GIVEN, LDB DABUF SET IT TO THE 4TH PARAMETER. SZA,RSS STB INBUF * LDB RQBUF ADB K4 ADDR OF REPLIES ERROR FIELD STB ERRAD SAVE FOR LATER RETRY CLA STA CLASN CLEAR CLASS # FOR ERROR CK * * CHECK FOR LOCAL SYSTEM SHUT-DOWN OR QUIESCENT STATUS. * CPA #GRPM IS THE DS/1000 SYSTEM SHUT-DOWN? JMP DOWN YES. GO TELL CALLER THE SAD NEWS. * * REQUESTS WILL BE FORCED TO WAIT HERE, IF LOCAL SYSTEM HAS BEEN QUIESCED. * 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. * * REQUEST A CLASS NUMBER ALLOCATION FROM RTE. * 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 & * * * WAIT FOR AVAILABILITY OF LIST-ENTRY SPACE IN 'RES'; ADD NEW ENTRY. * 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 * * LDA CONWD,I RAL,ELA BIT 14 HAD TIMEOUT SUPPRESS FLAG LDA CLASN RAL,ERA MOVE FLAG TO BIT15 OF CLASS WORD STA TEMP * LDB RQBUF REQUEST BUFFER ADDR ADB K2 POINT TO 3RD REQUEST WORD LDA #NODE LOCAL NODE NUMBER STA 1,I SET ORIGINATOR NODE (US) INB LDA 1,I GET DESTINATION NODE CPA N1 ALWAYS LOCAL? LDA #NODE YES! GET LOCAL NODE # STA 1,I SET DESTINATION FIELD STB NODAD SAVE ADDR OF DESTINATION NODE * JSB #RSAX GO TO "RES" ACCESS ROUTINE DEF *+5 DEF K2 ADD MASTER TCB DEF TEMP PASS CLASS # & TIMEOUT FLAG DEF XEQT PASS ID SEG ADDR NODAD NOP PASS DESTINATION NODE SSB ANY ERRORS? JMP RESER * ERROR: "DS07" (NOT LIKELY) LDB RQBUF INB POINT TO 2ND WORD OF REQUEST BUFFER STA 1,I STORE SEQ # IN 2ND WORD STA SEQ# SAVE LOCALLY * * VERIFY THAT 6 < REQUEST LENGTH < 32 * LDB "03" LDA RQLEN,I GET REQUEST LENGTH ADA N7 MUST BE AT LEAST 7 SSA JMP GETDS GIVE DS03 IF <7 ADA N25 SSA,RSS JMP GETDS GIVE DS03 IF > 31 * * CONVERT DESTINATION NODE TO LU * LDA NODAD,I SSA ABSOLUTE DESTINATION CODE ? (NEIGHBOR) JMP ABS YES, GET LU AND RETURN DLD #NCNT NO, GET ADDR & SIZE OF NRV TABLE STA TEMP SAVE COUNTER * LOOP JSB LODWD GET A CPU # INB POINT TO CORRESPONDING LU CPA NODAD,I IS IT THE GOOD ONE ? JMP LUFND YES INB POINT TO NEXT NODE IN TABLE ISZ TEMP END OF TABLE ? JMP LOOP NO, CONTINUE * LDB "04" YES, CPU # ERROR JMP GETDS * ABS CMA,INA MAKE IT >0 JMP LUOK * LUFND JSB LODWD FETCH LU AND B77 ISOLATE IT * * NOW SEND THE REQUEST(/DATA) * LUOK LDB #GRPM GRPM'S CLASS NUMBER STB CLASS IOR CONWX SET "Z" BIT AND "WRITE" INDICATOR STA TEMP * LDA RQBUF,I GET STREAM WORD AND B77 CLEAR THE RETRY COUNTERS IOR #BREJ INITIALIZE TO REQUIRED VALUE STA RQBUF,I * JSB EXEC DO CLASS WRITE/READ DEF *+8 DEF CLS20 NO ABORT DEF TEMP CONTROL WORD DEF DABUF,I DEF DLWRT,I DATA BUFFER LENGTH OR ZERO DEF RQBUF,I REQUEST ADDRESS DEF RQLEN,I REQUEST LENGTH DEF CLASS JMP PASER DO ERROR RETURN SKP * * DO A CLASS GET TO WAIT FOR A REPLY FOR THIS TRANSACTION. * JSB D65GT GET REPLY DEF *+6 DEF CLASN SPECIFY MASTER CLASS NO.--NO RELEASE. DEF RQBUF,I SPECIFY REPLY ADDRESS. DEF RPLEN,I SPECIFY MAXIMUM REPLY LENGTH. DEF INBUF,I DATA BUFFER ADDR DEF DLRED,I DATA LENGTH OR ZERO JMP PASER * GET ERROR: GO TO PROCESS * DST REG SAVE REGS FOR RETURN * * CHECK FOR PROPER REPLY. * SZA,RSS CHECK FOR ZERO REPLY LENGTH. JMP MTOER * ZERO LENGTH: GO PROCESS TIMEOUT ERROR * LDB RQBUF GET REPLY BUFFER ADDRESS. ADB K5 POINT TO 6TH/7TH WORDS OF REPLY DLD 1,I GET THEM * * CHECK THAT REPLY DOESN'T CONTAIN ERROR SSB,RSS IS SIGN BIT SET? JMP GOODX NO, NO ERROR CPA "08" YES, WAS IT REMOTE BUSY? JMP SUSPD YES, GO SUSPEND AWHILE JMP ERPLY ELSE DO ERROR EXIT * GOODX JSB CLNUP GO TO CLEAN UP BEFORE EXITING. STA RPLEN CLEAR PARAMETERS FOR CHECK STA INBUF ON NEXT ENTRY. * * RETURN TO USER AT NORMAL RETURN POINT. * DLD REG = RCVD REQUEST & DATA LENGTHS ISZ D65MS SET EXIT POINTER FOR NORMAL RETURN. JMP D65MS,I RETURN TO THE CALLER. SKP * SUSPD CLB CPB #WAIT DO WE DELAY OR RETURN ERROR DS08? JMP ERPLY NO WAIT SPEC'D, GIVE DS08 TO CALLER * DELAY AWHILE THAN TRY AGAIN JSB CLNUP RETURN MASTER CLASS # & TCB * JSB EXEC GO TO THE RTE 'EXEC' DEF *+6 IN ORDER TO PLACE DEF K12 INTO THE TIME-LIST, DEF ZERO THIS PROGRAM, FOR A PERIOD DEF K2 OF DELAY IN SECONDS, DEF ZERO (ONCE-ONLY) AS DETERMINED BY A DEF #WAIT NEGATIVE VALUE <#WAIT> IN 'RES'. * JMP RETRY NOW, RE-SUBMIT THE REQUEST. SKP * * SUBROUTINE TO RELEASE THE MASTER CLASS & CLEAR THE MASTER TCB * CLNUP NOP ENTRY/EXIT LDA CLASN GET THE CLASS NUMBER. CCE,SZA,RSS IF CLASS NEVER ASSIGNED, JMP CLNUP,I RETURN NOW. * RAL,ERA INCLUDE THE NO-WAIT BIT(#15), STA CLASN AND SAVE FOR RELEASE. CREPT CCA SET THE RELEASE RE-TRY SWITCH STA TEMP 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 TEMP RELEASE PROCESSING COMPLETED? JMP CLRES YES. GO TO CLEAR THE 'RES' ENTRY. INA,SZA NO, ALL PENDING REQS CLEARED? 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 JSB #RSAX GO TO 'RES' ACCESS ROUTINE. DEF *+3 DEF K6 CLEAR MASTER TCB DEF SEQ# PASS SEQ # CLA JMP CLNUP,I RETURN. SPC 2 * LOAD WORD FROM S.A.M., CROSS-LOAD IF DMS SYSTEM LODWD NOP LDA $OPSY OPERATING SYSTEM TYPE RAR,SLA,ERA SKIP IF NON-DMS JMP *+3 DMS. GO EXECUTE XLA LDA 1,I NON-DMS. PICK UP SAM WORD JMP LODWD,I RETURN XLA 1,I CROSS-LOAD SAM WORD JMP LODWD,I RETURN SKP * * ERROR PROCESSING SECTION. * DOWN LDB "00" SYSTEM IS SHUT-DOWN: "DS00". 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". * GETDS LDA "DS" GET FIRST HALF OF ERROR MESSAGE "DS". * PASER DST ERRAD,I SAVE ERROR MESSAGE IN REPLY * ERPLY JSB CLNUP GO TO CLEAN UP BEFORE EXITING. STA RPLEN CLEAR FOR NEXT PARAM CHECK STA INBUF * LDA D65MS ADA N8 COMPUTE THE ERROR ADDRESS LDB CONWD,I GET ERROR-RETURN FLAG. ELB POSITION TO FOR TESTING. LDB ERRAD POINTS TO ERROR MESSAGE SEZ,RSS ABORT OR RETURN TO CALLER? JSB D65AB ABORT! -- NO RETURN. ERRAD EQU *+1 DLD TEMP GET ERROR CODES AND RETURN TO JMP D65MS,I THE CALLER AT ERROR-RETURN POINT. * SKP * * CONSTANTS AND STORAGE. * BIT13 OCT 20000 TEMP NOP TEMPORARY STORAGE. CLASN NOP CLASS NUMBER STORAGE. CLASS NOP SEQ# NOP B77 OCT 77 CLMSK OCT 117777 CLASS NUMBER MASK. CONWX OCT 10100 CLS19 OCT 100023 CLASS CONTROL--NO ABORT. CLS20 OCT 100024 CLASS WRITE/READ--NO ABORT CLS21 OCT 100025 CLASS GET--NO ABORT. LCGW OCT 40006 GLOBAL RN LOCK/CLEAR/WAIT/NO-ABORT. LGW OCT 40002 GLOBAL RN LOCK/WAIT/NO ABORT. K2 DEC 2 K4 DEC 4 K5 DEC 5 K6 DEC 6 K12 DEC 12 N1 DEC -1 N7 DEC -7 N8 DEC -8 N25 DEC -25 REG OCT 0,0 RETURN REGISTER INFORMATION. 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 * SIZE BSS 0 * END