ASMB,R,L,C HED DS/1000 RESIDENT STORAGE * (C) HEWLETT-PACKARD CO. 1979 * NAM RES,30 91740-16031 REV.2026 800429 SPC 1 ENT #BUSY,#FWAM,#GRPM,#BREJ,#LDEF,#MNUM,#MRTH ENT #PNLH,#TRCL,#TRCN,#CL3K ENT #RDLY,#PRLU ENT #MSTO,#NODE,#NCNT, #NRV,#NULL, #QRN,#RSAX,#RTRY ENT #ST00,#ST01,#ST02,#ST03,#ST04,#ST05,#ST06,#ST07 ENT #ST08,#ST09,#ST10,#SVTO,#TBRN,#WAIT,#CNOD,#LNOD ENT #QCLM,#NCLR,#SCLR,#SWRD,#PLOG,#RFSZ,#SAVM ENT #RPCV,#RQCV,#LU3K,#QZRN,#QXCL,#TST ENT D$LID,D$RID SPC 1 EXT #PRLX EXT $ALC,$CGRN,$LIBR,$LIBX,$OPSY,$RTN,.ENTP * * NAME: RES * SOURCE: 91740-18031 * RELOC: 91740-16031 * PGMR: C. HAMILTON [ 03/02/77 ] * D. TRIBBY [ 03/17/77 ] * HP3000 MODIFICATIONS * * LYLE WEIMAN [ 08/05/78 ] * TOM MILNER [ 04/29/80 ] * REMOVED 'LSTEN' CHECKS * * * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. 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. * * *************************************************************** * SPC 5 * RES IS A MEMORY-RESIDENT SYSTEM LIBRARY MODULE USED BY THE * DS/1000 (DISTRIBUTED SYSTEMS) SOFTWARE PACKAGE TO PROVIDE * CONTROLLED-ACCESS COMMON STORAGE. ITEMS STORED IN ARE NETWORK * GLOBAL CONSTANTS & VARIOUS LISTS WHICH CONTAIN THE TRANSACTION-BLOCK * RECORDS OF CURRENT TRANSACTIONS-IN-PROCESS ON THE NETWORK. * SPC 5 * #RSAX IS A PRIVILEGED LIBRARY ROUTINE EMBEDDED IN RES * WHICH CONTROLS ACCESS TO, AND ALLOWS MAINTENANCE OF, THE * NETWORK'S TRANSACTION-CONTROL-BLOCKS (TCB'S) FOR CURRENT REQUESTS. * SKP * #RSAX OPERATION: SPC 1 * 1. ON FIRST ENTRY, VERIFY THAT CALLER IS ELSE, ERROR #1! * A. SAVE I.D. SEGMENT ADDRESS FOR S.A.M. VALIDITY CHECKS. * B. IF BIT #1 OF $OPSY =1, THEN OP-SYSTEM USES DMS HARDWARE, * REQUIRING THE USE OF OF DMS FIRMWARE MACRO INSTRUCTIONS. * C. IF DMS, THEN CLEAR THE DMS-BYPASSING JUMP INSTRUCTIONS. * D. IF NON-DMS, ALLOW BYPASS INSTRUCTIONS TO REMAIN. * E. CLEAR THE 'JSB' TO THE INITIALIZATION ROUTINE. SPC 1 * 2. GET PARAMETERS & SAVE LOCALLY, IN PREPARATION FOR DMS MAP SWITCHING. * A. IF DMS SYSTEM, THEN SAVE MAP STATUS AND SWITCH TO SYSTEM MAP. SPC 1 * 3. CHECK MODE OF OPERATION: * A. IF =0, GO TO 7. TO ALLOCATE SYSTEM MEMORY. * B. IF =1, GO TO 7. TO DE-ALLOCATE SYSTEM MEMORY. * C. IF =2, GO TO 4. TO ADD NEW ENTRY TO MASTER-REQUEST LIST. * D. IF =3, GO TO 5. TO ADD NEW ENTRY TO A SLAVE-STREAM LIST. * E. IF =4, GO TO 6. TO SEARCH FOR A MASTER TCB ENTRY. * F. IF =5, GO TO 6. TO SEARCH FOR A SLAVE TCB ENTRY. * G. IF =6, GO TO 6. TO REMOVE A MASTER ENTRY & RETURN IT TO THE POOL. * H. IF =7, GO TO 6. TO REMOVE A SLAVE ENTRY & RETURN IT TO THE POOL. * I. IF =8, GO TO 4. TO ADD AN HP3000 PROCESS. * J. IF=10, GO TO 6. TO REMOVE AN HP3000 PROCESS. * K. IF NONE OF THE ABOVE - ERROR #2 --- REJECT! SPC 1 * 4. CHECK FOR AVAILABLE ENTRY, BEFORE ADDING TO THE MASTER LIST. * A. IF NONE AVAILABLE, CALLER HAS NOT CHECKED AVAILABILITY OF * TABLE-ACCESS RN (#TBRN) BEFORE ENTRY - ERROR #3 --- REJECT! * B. IF ENTRY AVAILABLE, SEARCH BY ID SEG. ADDR. FOR OBSOLETE * ENTRIES IN THE MASTER REQUEST LIST. * C. FLAG ALL OBSOLETE MASTER-REQUEST ENTRIES AS BAD, IF THEY * ORIGINATED WITH SAME REQUESTOR (BIT#15 =1 OF WORD#5). * D. LINK THE NEW ENTRY INTO THE MASTER REQUEST LIST. * E. USE TIMEOUT FROM NRV--IF SPECIFIED; ELSE USE DEFAULT: #MSTO. * F. TRANSFER THE CALLER'S DATA INTO THE NEW ENTRY. * G. IF ENTRY POOL NOT DEPLETED, CLEAR TABLE-ACCESS RN & RETURN. SPC 1 * 5. CHECK FOR AVAILABLE ENTRY, BEFORE ADDING TO THE SLAVE-STREAM LIST. * A. IF NONE, #TBRN NOT CHECKED BEFORE ENTRY - ERROR #3 --- REJECT! * B. CHECK STREAM PARAMETER FOR ACCEPTABLE TYPE--ERROR #1, IF INVALID. * C. LINK THE NEW ENTRY INTO THE SPECIFIED SLAVE-STREAM LIST. * D. TRANSFER CALLER'S DATA INTO THE NEW ENTRY. * E. RETURN VIA 4.G.(ABOVE), TO UPDATE STATUS OF TABLE-ACCESS RN. SPC 1 * 6. INITIALIZE LIST POINTERS, BEFORE SEARCHING FOR/CLEARING AN ENTRY. * A. IF IMPROPER LIST SPECIFIED - ERROR #1 --- REJECT! * B. SEARCH FOR ENTRY. IF ENTRY NOT LOCATED, REJECT---ERROR #4! * C. IF MODE=4/5, GET CONTENTS OF ENTRY WORD#4 & RETURN TO CALLER. * D. IF MODE=6/7, GET CONTENTS OF WD#4 & RE-LINK ENTRY IN NULL LIST. * E. RETURN VIA 4.G.(ABOVE), TO UPDATE STATUS OF TABLE-ACCESS RN. SPC 1 * 7. VERIFY CALLER TO BE BEFORE ALLOCATION/DE-ALLOCATION OF S.A.M. * A. IF MODE & #FWAM =0, GO TO ALLOCATE SYSTEM AVAILABLE MEMORY. * B. IF REQUEST GRANTED, STORE BLOCK ADDRESS IN #FWAM, SIZE IN #SAVM. * D. IF REQUEST DENIED, RETURN REASON IN , FOR FURTHER ANALYSIS. * E. IF MODE=1 & PRAM1=#FWAM, RETURN MEMORY TO THE SYSTEM. * F. CLEAR #FWAM & #SAVM, BEFORE RETURNING TO . SKP * #RSAX CALLING SEQUENCE: * * JSB #RSAX * DEF *+3 [ OR *+4 OR *+5 ] * DEF MODE MODE OF OPERATION (0 THRU 7) * DEF PRAM1 REQUIRED PARAMETER (SEE TABLE, BELOW) * DEF PRAM2 REQUIRED FOR MODES: 2,3,5,7 [OPTIONAL MODES: 0,1,4,6] * DEF PRAM3 REQUIRED FOR MODES 2 & 3 ONLY (NODAL ADDRESS) * : NORMAL-(SEE TABLE); ERROR-(SEE LATER DESCRIPTION) * * WHERE: * * +----+------------+--------------+------------+---------+-------+-------+ * !MODE! ACTION ! PRAM1 ! PRAM2 ! PRAM3 ! RTN! RTN! * !====+============+==============+============+=========+=======+=======+ * ! 0 ! GET MEMORY !#WORDS TO GET ! NOT USED ! NOT USED!FWA SAM! #WORDS! * +----+------------+--------------+------------+---------+-------+-------+ * ! 1 ! RTN MEMORY !FWA SAM BLOCK ! NOT USED ! NOT USED! 0 ! 0 ! * +----+------------+--------------+------------+---------+-------+-------+ * ! 2 ! ADD MASTER !MASTER CLASS# !ID SEG.ADDR.!DEST.NODE!LOC SEQ!TCB ADR! * +----+------------+--------------+------------+---------+-------+-------+ * ! 3 ! ADD SLAVE !ORIG. SEQ. NO.!SLAVE STREAM!ORIG.NODE!LOC SEQ!TCB ADR! * +----+------------+--------------+------------+---------+-------+-------+ * ! 4 ! FIND MASTER!LOCAL SEQ. NO.! NOT USED ! NOT USED!CLASS# !TCB ADR! * +----+------------+--------------+------------+---------+-------+-------+ * ! 5 ! FIND SLAVE !LOCAL SEQ. NO.!SLAVE STREAM! NOT USED!ORG SEQ!TCB ADR! * +----+------------+--------------+------------+---------+-------+-------+ * ! 6 !CLEAR MASTER!LOCAL SEQ. NO.! NOT USED ! NOT USED!CLASS# ! 0 ! * +----+------------+--------------+------------+---------+-------+-------+ * ! 7 !CLEAR SLAVE !LOCAL SEQ. NO.!SLAVE STREAM! NOT USED!ORG SEQ! 0 ! * +----+------------+--------------+------------+---------+-------+-------+ * ! 8 ! ADD PNL ! LOGGING LU # !ID SEG.ADDR.!PROCESS #!LOC.SEQ!TCB ADR! * +----+------------+--------------+------------+---------+-------+-------+ * ! 10 ! CLEAR PNL !PROCESS NUMBER! NOT USED ! NOT USED! LOG LU! 0 ! * +----+------------+--------------+------------+---------+-------+-------+ * * #RSAX ERROR INDICATIONS: * * ERROR DETECTION WILL RESULT IN A RETURN TO THE CALLER WITH THE * REQUESTED ACTION NOT PERFORMED. * * = -1: AN INVALID LIST HAS BEEN SPECIFIED; FIRST CALLER * IS NOT ; MEMORY ALLOCATION/DE-ALLOCATION IMPROPER. * * = -2: THE SPECIFIED MODE OF OPERATION IS UN-DEFINED. * * = -3: NO SPACE FOR A NEW ENTRY. THE CALLER DID NOT WAIT FOR * THE TABLE-ACCESS RESOURCE NUMBER (#TBRN) TO BE CLEARED, * PRIOR TO CALLING #RSAX. (THIS SHOULD NOT OCCUR IF ALL * CALLERS ADHERE TO THE RN CONVENTION, PRIOR TO CALLING.) * * = -4: ENTRY CANNOT BE LOCATED; ACCESSING AN EMPTY LIST. * * MODE 0 ( ALLOCATION ): =-1,=MAXIMUM POSSIBLE NO. OF WORDS. * = 0,=MAXIMUM WORDS AVAILABLE NOW. * 1 (DE-ALLOCATION): NO ERRORS INDICATED. SKP * LIST FORMATS: * * 'RES' SYSTEM AVAILABLE MEMORY * ------------------------------- ------------------------- * * #PNLH < ADDR 1ST PROCESS# LIST ENTRY>... * < ---------------------- > * < PROCESS NUMBER > * < LOGGING LU NUMBER > * * * #MRTH < ADDR.=1RST MASTER-LIST ENTRY>... * < UD------*TIMEOUT CNTR. > * < LOCAL SEQUENCE NUMBER > * * * * #ST00 ... * . <- * MONITOR'S CLASS NUMBER > < UD------*TIMEOUT CNTR. > * . < LOCAL SEQUENCE NUMBER > * . < ORIGIN SEQUENCE NUMBER > * . < ORIGIN NODAL ADDRESS > * . * . * #STXX < ******* FORMAT SAME ******* >...< **** FORMAT SAME ***** > * < ********* FOR ALL ********* > < ******** FOR ********* > * < ****** SLAVE STREAMS ****** > < ******** ALL ********* > * < ******* SLAVE ******** > * < ****** STREAMS ******* > * * WHERE: - = RESERVED FOR FUTURE USE. A(#15) = ABORT OK. * B(#15) = BAD ENTRY. * C(#15) = LONG MASTER TIMEOUT (APPROXIMATELY 20 MIN.) * U(#15) = UPLIN TEMPORARY BIT. D(#14) = HP3000 REQUEST. * * *NOTE: 0 IN LIST HEAD OR FIRST WORD OF ENTRY SIGNALS END OF LIST. * * * NETWORK ROUTE VECTOR TABLE: * * #NCNT < NEGATIVE NUMBER OF NRV PAIRS> * #NRV < ADDRESS OF NRV TABLE >...< NODAL ADDRESS (0-32767)> * * < *** NODAL ADDRESS *** > * < *** LOGICAL UNIT *** > * . * : * SKP MODE NOP MODE OF OPERATION. PRAM1 NOP USER PRAM2 NOP SPECIFIED PRAM3 NOP PARAMETERS. SUP [SUPPRESS EXTENDED LISTING] #RSAX NOP ENTRY/EXIT: TCB MANAGEMENT. JSB $LIBR DECLARE THIS TO BE NOP A PRIVILEGED ROUTINE. JSB .ENTP OBTAIN DIRECT ADDRESSES DEF MODE FOR PARAMETERS & RETURN POINT. * INIT JSB CONFG 1RST ENTRY: CONFIGURE; 'NOP' THEREAFTER. * CLA [PROTECT AGAINST MISSING PARAMETER] LDA PRAM1,I OBTAIN STA PRAM1 PARAMETERS CLA FOR LDA PRAM2,I LOCAL USE, STA PRAM2 IN PREPARATION CLA FOR A LDA PRAM3,I POSSIBLE STA PRAM3 DMS MAP-SWITCH. CLA LDB MODE,I GET THE MODE OF OPERATION, STB MODE AND SAVE IT LOCALLY, ALSO. LDA PRAMA INITIALIZE THE KEYWORD ADDRESS POINTER STA KEYAD TO REFERENCE FIRST CALLER PARAMETER. * DMS1 JMP MODCK BYPASS MAP CODE: RTE-II / 'NOP': RTE-III * RSA GET CURRENT MAP STATUS. RAL,RAL POSITION CURRENT STATUS FOR RESTORATION. STA DMSTS SAVE FOR RESTORATION BEFORE EXIT. SJP MODCK ENABLE SYSTEM MAP AND CONTINUE. * DMSTS NOP DMS MAP-STATUS STORAGE. * MODCK SZB,RSS MODE =0? JMP SAM YES, GO TO ALLOCATE MEMORY. CPB P1 MODE =1? JMP SAM RETURN MEMORY TO RTE. CPB P2 MODE =2? JMP ADENT GO TO CREATE A MASTER TCB ENTRY. CPB P3 MODE =3? JMP ADENT GO TO CREATE A SLAVE TCB ENTRY. CPB P4 MODE =4? JMP FIND SEARCH FOR A MASTER TCB ENTRY. CPB P5 MODE =5? JMP FIND SEARCH FOR A SLAVE TCB ENTRY. CPB P6 MODE =6? JMP FIND SEARCH FOR/CLEAR A MASTER TCB ENTRY. CPB P7 MODE =7? JMP FIND SEARCH FOR/CLEAR A SLAVE TCB ENTRY. CPB P8 MODE =8? JMP ADENT GO TO CREATE A PROCESS # ENTRY. CPB P10 MODE =10? (LAST CHANCE!) JMP FIND SEARCH FOR/CLEAR A PROCESS # ENTRY. * JMP ERR02 * ERROR #2: INVALID MODE! * * SPC 10 * ADD A NEW ENTRY TO THE MASTER OR SLAVE-STREAM LIST. SPC 1 ADENT LDA #NULL GET THE NULL LIST LINK-WORD. SZA,RSS IS AN ENTRY AVAILABLE FROM THE POOL? JMP ERR03 * NO. ERROR #3: NO ENTRY AVAILABLE! STA ENTAD YES. SAVE ADDRESS OF NEW ENTRY. * INA POINT TO THE SECOND WORD OF THE ENTRY. STA ENPNT SAVE THE POINTER FOR ENTRY BUILDING. CLE,SLB IF THIS IS TO BE A SLAVE ENTRY, JMP SLVAD THEN SKIP THE SEARCH FOR MASTER ENTRIES. * LDA MDEF INITIALIZE THE LIST CPB P8 POINTER TO REFERENCE LDA PDEF THE PNL OR THE STA LSTAD MASTER LIST. * ISZ KEYAD SEARCH KEYWORD IS PRAM2 (ID SEG ADDR). LDA P4 EXAMINE FIFTH WORD OF EACH MASTER TCB. MLOOK JSB SERCH FIND ENTRIES WITH SAME CLASS OR PROCESS #. JMP MSTAD END-OF-LIST: GO TO ADD NEW ENTRY. ADB P4 GET THE 5TH WORD (ID SEGMENT ADDRESS) LDA B,I FROM ENTRY WITH SAME NUMBER. IOR SIGN ADD BAD-ENTRY FLAG (BIT#15). STA B,I RETURN MODIFIED WORD.(UPLIN CLEARS TCB). JMP MLOOK SEARCH FOR MORE OBSOLETE ENTRIES.[E=1]. * MSTAD CCB CHECK FOR LDA MODE NEW PROCESS CPA P8 NUMBER MODE. JMP SETIM+1 YES--GO SET TIMEOUT * DLD #NCNT # OF NRV ENTRY PAIRS & NRV ADDRESS CAX COUNT WITH X REG MST1 LDA B,I GET NODE # FROM TABLE INB CPA PRAM3 MATCH? JMP MST2 YES! INB ISX INCREMENT NRV COUNT JMP MST1 TRY MORE MST2 LDA B,I GET TIMEOUT / LU LDB B100 ASR 6 A=TIMEOUT, B=1 (MASTER LIST CODE) SZA,RSS DEFAULT REQUESTED? LDA #MSTO YES, GET IT JMP SETIM * SLVAD JSB LSTCK PREPARE REFERENCES FOR THE SLAVE LIST. ADA P2 POINT TO WORD #3 OF SLAVE-STREAM HEAD. LDA A,I GET THE MONITOR I.D. SEGMENT ADDRESS. SZA,RSS IF THE MONITOR HAS NOT BEEN INITIALIZED, JMP ERR01 THEN NOTHING MAY BE ADDED TO THIS LIST! LDA #SVTO VALID LIST: GET SLAVE TIMEOUT VALUE. * SETIM STA ENPNT,I SET TIMEOUT INTO ENTRY WORD #2 ISZ ENPNT POINT TO NEXT WORD OF ENTRY CLA OBTAIN AN ENTRY FROM THE NULL LIST. JSB LNK GO PROCESS LIST CHANGES.[B=LIST CODE] SZA LIST-PROCESSING ERROR? JMP ERR04 YES--INFORM THE CALLER! * LDA PRAM3 USE THIRD PARAMETER LDB MODE INSTREAD OF SEQUENCE CPB P8 NUMBER FOR MODE 8. JMP STOR3 STORE IN THIRD TCB WORD. * SKP SPC 3 LDA SEQN GET THE LAST SEQUENCE NUMBER. INA,SZA,RSS ADVANCE THE COUNT & TEST FOR ZERO. CLE,INA ROLL-OVER: RESET TO ONE. STA SEQN SAVE THE CURRENT SEQUENCE NUMBER. STOR3 STA ENPNT,I INSERT IT INTO THE THIRD ENTRY WORD. ISZ ENPNT ADVANCE THE ENTRY POINTER. LDA MODE IF A SLAVE-ENTRY IS TO BE CLE,ERA ADDED, SET =1. PRAMA EQU *+1 [INITIAL KEYWORD POINTER TO 'PRAM1'] DLD PRAM1 GET THE CALLER'S PARAMETERS. SEZ SLAVE-LIST ADDITION? LDB PRAM3 YES, GET THE ORIGIN NODAL ADDRESS. DST ENPNT,I ADD PARAMETERS TO ENTRY WORDS #4,#5. * LDA SEQN RETURN WITH: =CURRENT SEQUENCE NO. LDB ENTAD =ENTRY ADDRESS. JMP EXIT GO TO PREPARE FOR RETURN TO CALLER. * SEQN NOP TRANSACTION SEQUENCE NUMBER. * SPC 3 * ERROR PROCESSING AND EXIT SECTION. SPC 1 ERR04 LDA P4 =4: ENTRY CANNOT BE LOCATED. JMP ERR01+1 ERR03 LDA P3 =3: NEW ENTRY NOT AVAILABLE. JMP ERR01+1 ERR02 LDA P2 =2: INVALID MODE PARAMETER. JMP ERR01+1 ERR01 CLA,INA =1: INVALID LIST PARAMETER. CMA,INA NEGATE THE ERROR CODE. STA B ARE THE SAME FOR ERROR RETURN. * EXIT DST TEMP SAVE TEMPORARILY. CLA CLEAR PARAMETER ADDRESSES STA MODE TO FACILITATE CHECKING STA PRAM1 FOR MISSING PARAMETERS STA PRAM2 UPON NEXT ENTRY OF <#RSAX>. STA PRAM3 LDA #NULL IF NO TCB ENTRIES REMAIN AVAILABLE SZA,RSS IN THE ENTRY POOL, THEN DO NOT JMP RETRN CLEAR THE TABLE-ACCESS RN; ELSE, LDA #TBRN GET THE TABLE-ACCESS RN AND GO TO RTE JSB $CGRN TO MAKE IT AVAILABLE FOR NEXT ACCESS. RETRN DLD TEMP RESTORE THE RETURN-DATA TO & . * DMS2 JMP LBEX BYPASS MAP CODE: RTE-II / 'NOP': RTE-III JRS DMSTS LBEX *** RESTORE THE APPROPRIATE MAPS *** * LBEX JSB $LIBX RETURN TO THE CALLER, VIA THE RTE DEF #RSAX PRIVILEGED ROUTINE PROCESSOR. * SKP * SEARCH FOR ENTRIES. CLEAR AND RETURN TO POOL, IF REQUESTED. SPC 1 FIND LDA MDEF INITIALIZE CPB P10 POINTERS LDA PDEF TO REFER STA LSTAD TO THE CLA,INA MASTER LIST CPB P10 OR THE CCA PROCESS NUMBER STA LSTCD LIST. * CLE,SLB IF THIS IS A SLAVE REQUEST, THEN JSB LSTCK ESTABLISH REFERENCES TO THE SLAVE LIST. * LDA P2 THIRD WORD OF TCB IS THE SEARCH KEY. JSB SERCH GO TO LOCATE THE TCB ENTRY [E=0]. JMP ERR04 * ERROR #4: ENTRY CANNOT BE LOCATED! * * STB ENTAD SAVE THE ENTRY ADDRESS FOR LATER USE. ADB P3 POINT TO THIRD WORD, FOR LATER USE, STB ENPNT IN RETURNING THE CONTENTS TO CALLER. * LDA MODE GET THE MODE OF OPERATION. ADA M6 IF THE MODE CLE,SSA IS LESS THAN 6, JMP FOUND DO NOT CLEAR THE ENTRY. * LDA LSTCD REMOVE ENTRY FROM THE SPECIFIED LIST. CLB RETURN IT TO THE NULL LIST. JSB LNK GO TO PROCESS THE LIST CHANGES. CCE,SZA LIST PROCESSING ERROR? JMP ERR04 YES! GO TO INFORM THE CALLER. * FOUND LDA ENPNT,I GET WORD #4 FOR RETURN TO CALLER. CLB,SEZ,RSS IF THIS IS A SEARCH, ONLY, LDB ENTAD THEN GET THE TCB ADDRESS; JMP EXIT ELSE, RETURN WITH =0. * ENPNT NOP POINTER INTO TCB ENTRY. ENTAD NOP TCB ADDRESS STORAGE. * SKP * SYSTEM AVAILABLE MEMORY ALLOCATION/DE-ALLOCATION PROCESSOR. SPC 1 SAM LDA PRAM1 GET THE CALLER'S PARAMETER. SLB IF THE REQUEST IS FOR DE-ALLOCATION, JMP RTSAM GO TO RETURN THE MEMORY TO THE SYSTEM. * STA SZMEM ALLOCATE: SAVE NO. OF WORDS REQUESTED. LDA #FWAM IF SYSTEM-AVAILABLE-MEMORY SZA HAS ALREADY BEEN ALLOCATED, JMP ERR01 THEN REJECT THE REQUEST! * JSB $ALC REQUEST SYSTEM AVAILABLE MEMORY (S.A.M.) SZMEM DEC 128 IN THE AMOUNT SPECIFIED BY THE CALLER. JMP DMS2 * NEVER AVAILABLE: =-1,=MAX EVER JMP DMS2 * NOT AVAILABLE NOW: =0,=MAX NOW STA #FWAM O.K. SAVE THE ADDRESS OF MEMORY BLOCK. STB #SAVM SAVE THE SIZE OF THE MEMORY BLOCK. JMP DMS2 RETURN WITH S.A.M. SPECIFICATIONS. * RTSAM CPA #FWAM IS CALLER SPECIFYING CORRECT BLOCK? RSS YES. PROCESS THE DE-ALLOCATION. JMP ERR01 NO. ** IGNORE THE REQUEST! ** * LDB #SAVM GET THE BLOCK-SIZE SPECIFICATION. DST RTN CONFIGURE THE DE-ALLOCATION REQUEST. * JSB $RTN RETURN A SYSTEM-AVAILABLE-MEMORY BLOCK; RTN NOP BEGINNING AT SPECIFIED ADDRESS, AND NOP CONTAINING SPECIFIED NO. OF WORDS. CLA CLEAR THE STORAGE LOCATIONS FOR: STA #FWAM MEMORY BLOCK ADDRESS. STA #SAVM MEMORY BLOCK SIZE. JMP DMS2 RETURN TO THE CALLER. * SKP * SUBROUTINE TO CHECK LIST PARAMETER & SET LIST CODE & LIST ADDRESS. SPC 1 * ENTER: = DON'T CARE. * RETURN: =LIST ADDRESS; =LIST CODE. * ERROR - RETURN VIA ERROR EXIT WITH ERROR #1. * LSTCK NOP ENTRY/EXIT: LIST ID ROUTINE. LDA PRAM2 GET THE STREAM PARAMETER. AND B77 ISOLATE THE STREAM NUMBER. ADA P2 ADD OFFSET FOR NULL & MASTER LISTS. STA LSTCD SAVE FOR USE ELSEWHERE. STA B SAVE FOR RETURN TO CALLER. ADA NMAX CHECK FOR SPECIFICATION CLE,SSA,RSS OF AN UN-DEFINED LIST. JMP ERR01 * ERROR #1: INVALID LIST! LDA #LDEF GET THE LIST-TABLE ADDRESS. ADA B INDEX TO THE PROPER ENTRY. LDA A,I GET THE LIST ADDRESS. STA LSTAD SAVE THE ADDRESS FOR LATER USE. JMP LSTCK,I RETURN TO THE CALLER. * B77 OCT 77 LSTAD NOP ADDRESS OF LIST HEADER. LSTCD NOP LIST IDENTIFICATION CODE. * SKP * SUBROUTINE TO SEARCH FOR A SPECIFIC LIST ENTRY. SPC 1 * ENTER: = OFFSET INTO TCB ENTRY; = DON'T CARE. * =0: SEARCH FROM TOP; =1: CONTINUE SEARCH. * 'LSTAD' SET TO ADDRESS OF LIST TO BE SEARCHED. * * RETURN: P+1 -- ENTRY NOT LOCATED; MEANINGLESS, =0. * P+2 -- ENTRY WAS LOCATED; MEANINGLESS, = ENTRY ADDRESS. * SERCH NOP ENTRY/EXIT:LIST SEARCH ROUTINE. LDB TEMP+1 GET NEXT-ENTRY ADDRESS TO CONTINUE. SEZ IS THIS A REQUEST TO CONTINUE? JMP SLOOP YES. GO TO CONTINUE THE SEARCH. STA OFSET SAVE OFFSET INTO TCB ENTRY. LDB LSTAD GET TOP-OF-LIST ADDRESS. * SLOOP LDB B,I GET THE LINK TO THE NEXT ENTRY. SZB,RSS IS THIS THE END OF THE LIST? JMP SERCH,I YES. TAKE "NOT FOUND" EXIT (P+1). * STB TEMP+1 SAVE POINTER TO NEXT ENTRY. ADB OFSET POINT TO KEYWORD LOCATION. LDA B,I GET THE KEYWORD. LDB TEMP+1 PREPARE TO RETURN WITH ENTRY ADDRESS. CPA KEYAD,I DOES IT MATCH THE CALLER'S KEYWORD? CCE,RSS YES. SET FOR CONTINUATION--SKIP. JMP SLOOP NO. CONTINUE SEARCHING. * ISZ SERCH ENTRY FOUND: SET RETURN TO P+2. JMP SERCH,I RETURN TO THE CALLER. * OFSET NOP KEYWORD OFFSET INTO TCB ENTRY. KEYAD NOP KEYWORD POINTER * SKP * SUBROUTINE TO PROCESS LIST LINKAGE. SPC 1 * ENTER: = CODE OF REMOVAL LIST; = CODE OF ADDITION LIST. * 'ENTAD' SET TO ADDRESS OF ENTRY TO BE REMOVED. * * RETURN: & =0: NORMAL; =-1, =UNCHANGED: ERROR. * LNK NOP ENTRY/EXIT: LIST LINK ROUTINE. STA TEMP SAVE REMOVAL-LIST CODE, TEMPORARILY. ADA #LDEF FIND THE TABLE ADDRESS. LDA A,I GET ADDRESS: TOP-OF-REMOVAL-LIST. LNK1 STA PNTR SAVE LIST POINTER. LDA A,I GET THE LINK TO THE NEXT ENTRY. SZA,RSS IF THIS IS THE END OF THE LIST, JMP LNKER THEN INFORM THE CALLER OF THE ERROR. CPA ENTAD IS THIS THE ENTRY TO BE REMOVED? RSS YES. SKIP TO REMOVE IT. JMP LNK1 NO. TRY THE NEXT ONE. LDA ENTAD,I GET THE LINK TO THE FOLLOWING ENTRY, STA PNTR,I AND MOVE IT TO THE PREVIOUS ENTRY. * ADB #LDEF FIND THE TABLE ADDRESS. LDB B,I GET ADDRESS: TOP-OF-ADDITION-LIST. LNK2 STB PNTR SAVE LIST POINTER. LDB B,I GET THE LINK TO THE NEXT ENTRY. SZB IS THIS THE END OF THE LIST? JMP LNK2 NO. CONTINUE SEARCHING FOR THE END. STB ENTAD,I YES. MAKE NEW ENTRY = END-OF-LIST. LDA ENTAD GET THE ADDRESS OF THE NEW ENTRY. STA PNTR,I SAVE IN LINK-WORD OF PREVIOUS ENTRY. * LDA MODE IF MODE IS ADA M8 >= 8 THEN SSA,RSS PROCESSING JMP LNKER-1 IS ALL DONE. * CPB TEMP REMOVING ENTRY FROM NULL LIST? [=0] CLA,INA,RSS YES. PREPARE TO ADD TO ACTIVE COUNT. CCA NO. PREPARE TO DECREMENT ACTIVE COUNT. ADA #BUSY COMPUTE THE NEW 'ACTIVE-ENTRY' COUNT, STA #BUSY AND UPDATE THE INDICATOR. CLA,RSS INDICATE NORMAL RETURN, AND SKIP. LNKER CCA =-1: NO ENTRIES IN REMOVAL LIST. JMP LNK,I RETURN IS MADE TO THE CALLER. * PNTR NOP LIST POINTER STORAGE. * SKP * TABLE OF LIST-HEADER ADDRESSES. LIST CODES: SPC 1 #LDEF DEF SOT START-OF-TABLE DEFINITION. PDEF DEF #PNLH HP3000 PROCESS NUMBER HEADER -01 SOT DEF #NULL ENTRY-POOL HEADER 00 MDEF DEF #MRTH MASTER-REQUEST HEADER 01 SDEF DEF #ST00 SLAVE-STREAM 00 HEADER 02 DEF #ST01 SLAVE-STREAM 01 HEADER 03 DEF #ST02 SLAVE-STREAM 02 HEADER 04 DEF #ST03 SLAVE-STREAM 03 HEADER 05 DEF #ST04 SLAVE-STREAM 04 HEADER 06 DEF #ST05 SLAVE-STREAM 05 HEADER 07 DEF #ST06 SLAVE-STREAM 06 HEADER 10 DEF #ST07 SLAVE-STREAM 07 HEADER 11 DEF #ST08 SLAVE-STREAM 08 HEADER 12 DEF #ST09 SLAVE-STREAM 09 HEADER 13 DEF #ST10 SLAVE-STREAM 10 HEADER 14 * NEW ENTRY: .........DEF #STXX.....SLAVE-STREAM XX HEADER........15 * NMAX ABS #LDEF+1-* LIST CODE VALIDITY-CHECKING CONSTANT. * #MNUM ABS NMAX-SDEF NUMBER OF SLAVE-STREAM TYPES. SPC 1 * CONSTANTS AND STORAGE. SPC 1 M6 DEC -6 M8 DEC -8 P1 DEC 1 P2 DEC 2 P3 DEC 3 P4 DEC 4 P5 DEC 5 P6 DEC 6 P7 DEC 7 P8 DEC 8 P10 DEC 10 B100 OCT 100 SIGN OCT 100000 TEMP OCT 0,0 TEMPORARY STORAGE LOCATIONS. SPC 1 * HP3000 ID SEQUENCE SPECIFICATIONS * D$LID DEF LOC LOCAL ID SEQUENCE ADDRESS D$RID DEF REM REMOTE ID SEQUENCE ADDRESS SPC 1 #RDLY DEC -200 MAXIMUM RTRY DELAY: 200 CENTOSECONDS (2 SEC.) #PRLU DEF #PRLX DEFAULT LU FOR PROGL MESSAGES: NO MESSAGES * (NOTE: #PRLX IS IN #REQU. IT MUST BE SEPARATED * IN ORDER TO ALLOW 'ABS' AT GEN-TIME TO WORK, AS WELL * AS ON-LINE PATCHES TO #PRLU) * * GENERAL SYSTEM DATA [ INITIALIZED BY 'LSTEN' ]. SPC 1 #SCLR DEF #TBRN START OF AREA CLEARED BY 'LSTEN'. #FWAM NOP ADDRESS OF SYSTEM AVAIL. MEMORY BLOCK. #SAVM NOP SIZE OF SYSTEM AVAIL. MEMORY BLOCK. #TBRN NOP TABLE-ACCESS RESOURCE NUMBER. #QRN NOP QUIESCENT(RN) OR SHUT-DOWN(0). #GRPM NOP GENERAL PRE-PROCESS MODULE CLASS NO. #QCLM NOP QUEUE CLEAN-UP MONITOR CLASS NUMBER. #BUSY NOP NUMBER OF ACTIVE TCB ENTRIES. #MSTO NOP MASTER REQUEST TIMEOUT VALUE. #SVTO NOP SLAVE REQUEST TIMEOUT VALUE. #RTRY NOP RETRY-PROCESSOR'S CLASS NUMBER. #WAIT NOP D65MS QUIESCENT WAIT INTERVAL. #SWRD NOP NETWORK-NODE SECURITY CODE. #BREJ NOP D65MS RETRY COUNT FOR BUSY REJECT. #RPCV NOP HP3000 REPLY CONVERTER CLASS NO. #RQCV NOP HP3000 REQUEST CONVERTER CLASS NO. #LU3K NOP LU NUMBER OF HP3000 #QZRN NOP QUEZ RN FOR "LISTEN MODE" #QXCL NOP QUEX CLASS NO. #TST NOP HP3000 TRANS. STATUS TABLE ADDRESS NOP HP3000 TRANS. STATUS TABLE SIZE,IN ENTRIES * SKP SKP * LIST HEADERS (REMAINDER OF LISTS LOCATED IN SYSTEM AVAILABLE MEMORY). SPC 3 #PNLH NOP HP3000 PROCESS # LIST SPC 1 #NULL NOP LIST HEADER: ENTRY POOL. SPC 1 #MRTH NOP MASTER REQUEST LIST. SPC 1 #ST00 OCT 0,0,0 SLAVE-STREAM 00 LIST. SPC 1 #ST01 OCT 0,0,0 SLAVE-STREAM 01 LIST. SPC 1 #ST02 OCT 0,0,0 SLAVE-STREAM 02 LIST. SPC 1 #ST03 OCT 0,0,0 SLAVE-STREAM 03 LIST. SPC 1 #ST04 OCT 0,0,0 SLAVE-STREAM 04 LIST. SPC 1 #ST05 OCT 0,0,0 SLAVE-STREAM 05 LIST. SPC 1 #ST06 OCT 0,0,0 SLAVE-STREAM 06 LIST. SPC 1 #ST07 OCT 0,0,0 SLAVE-STREAM 07 LIST. SPC 1 #ST08 OCT 0,0,0 SLAVE-STREAM 08 LIST. SPC 1 #ST09 OCT 0,0,0 SLAVE-STREAM 09 LIST. SPC 1 #ST10 OCT 0,0,0 SLAVE-STREAM 10 LIST. SPC 1 * NEW ENTRY: ...#STXX OCT 0,0,0..................SLAVE-STREAM XX LIST. SKP #RFSZ NOP MAXIMUM NUMBER OF 'OPEN' RFA FILES. SPC 3 #PLOG BSS 7 1000 LOGGING PROGRAM'S CLASS NO. #CL3K BSS 7 3000 LOGGING PROGRAM'S CLASS NO. SPC 3 * NODAL ADDRESSING SPECIFICATIONS. * #CNOD NOP CURRENT-USER-NODE; -1: INACTIVE. * #LNOD NOP DOWN-LOAD NODE (RTE-M, ONLY). * #NODE NOP LOCAL NODE NUMBER. * #NCNT NOP NEG. NUMBER OF NRV TABLE ENTRIES (PAIRS) #NRV NOP S.A.M. ADDRESS OF NRV TABLE. #TRCL NOP 'TRACE' CLASS NUMBER #TRCN NOP 'TRACE' RESOURCE NUMBER SPC 2 #NCLR ABS #TBRN-* NEGATIVE NO: LOCATIONS LSTEN CLEARS SPC 3 * HP3000 ID SEQUENCE SPECIFICATIONS * LOC NOP LOCAL ID SEQUENCE: BYTE COUNT BSS 8 CHARACTERS * REM NOP REMOTE ID SEQUENCE: RESERVED WORD NOP BYTE COUNT BSS 8 CHARACTERS SKP * INITIALIZATION SECTION: DMS SETUP & VALIDITY CHECKING. * * NOTE: THIS CODE IS USED ONLY UPON INITIAL ENTRY. * IT IS OVERLAYED BY THE SYSTEM SPECIFICATIONS. * ORG #GRPM CODE RESIDES IN SYSTEM DATA AREA. * CONFG NOP ENTRY/EXIT: INITIALIZATION ROUTINE. LDA $OPSY GET THE OP-SYSTEM IDENTIFIER. AND P2 ISOLATE THE DMS BIT(#1). RAR,CLE,ERA =0 AND = DMS BIT. SEZ,CLE,RSS IF DMS SYSTEM, SKIP & ENABLE DMS CODE; JMP NODMS ELSE, MERELY DISABLE CONFIGURATION CALL. * STA DMS1 CLEAR THE BYPASS-SWITCHES STA DMS2 TO ENABLE DMS PROCESSING. * NODMS STA INIT CLEAR ACCESS TO THE CONFIGURATOR. JMP CONFG,I RETURN TO NORMAL PROCESSING. * A EQU 0 B EQU 1 SPC 1 ORR [ INDICATES SIZE OF ] SPC 1 END