ASMB,R,L,C HED * - DS1 RESIDENT STORAGE * (C) HEWLETT-PACKARD CO. 1976 * NAM RES,14 91700-16129 REV.A 760130 SPC 1 ENT #BUSY,#FWAM,#GPRN,#GRPM,#LDEF,#MNUM,#MRTH,#MSTO ENT #NULL, #QRN,#RSAX,#RTRY,#SAVM,#SBIT,#SRPM,#ST00 ENT #ST01,#ST02,#ST03,#ST04,#ST05,#ST06,#ST07,#ST08 ENT #ST09,#ST10,#SVTO,#TBRN,#WAIT,#RXCL,#QCLM,#QLOG ENT #NCLR,#SCLR,#SWRD,#PLOG,#PRMY,#RFSZ,OVFLA EXT $ALC,$CGRN,$LIBR,$LIBX,$RTN,.ENTP * NAME: RES * SOURCE: 91700-18129 * RELOC: 91700-16129 * PGMR: C.C.H. [ 01/30/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. * ****************************************************************** * * RES IS A CORE-RESIDENT SYSTEM LIBRARY MODULE, USED BY THE * DS1 (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. * * #RSAX IS A PRIVILEGED LIBRARY ROUTINE, EMBEDDED IN RES, * WHICH CONTROLS ACCESS TO, AND ALLOWS MAINTENANCE OF, THE * NETWORK'S TRANSACTION-CONTROL-BLOCKS FOR CURRENT REQUESTS. * * #RSAX OPERATION: * 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 LOC'N 1742B(BPA1) =2, THEN OP-SYSTEM USES DMS HARDWARE, * REQUIRING CONFIGURATION OF DMS FIRMWARE MACRO INSTRUCTIONS. * C. IF NON-DMS: OP-SYSTEM IS RTE-II--CLEAR DMS REFERENCES. * D. CLEAR THE 'JSB' TO THE INITIALIZATION ROUTINE. * 2. GET PARAMETERS & CHECK VALIDITY OF SPECIFIED STREAM & LIST. * A. IF IMPROPER LIST - ERROR #1 --- REJECT! * 3. CHECK MODE OF OPERATION: * A. IF =0, GO TO 7. TO ALLOCATE/DE-ALLOCATE SYSTEM MEMORY. * B. IF =1, GO TO 3. TO ADD NEW ENTRY TO MASTER-REQUEST LIST. * C. IF =2, GO TO 4. TO ADD NEW ENTRY TO A SLAVE-STREAM LIST. * D. IF =3, GO TO 5. TO REMOVE AN ENTRY & RETURN IT TO THE POOL. * E. IF =4, SEARCH FOR BRK. FLAG--IF FOUND, CLEAR&RETURN ENTRY(GO TO 5.) * F. IF =5, SEARCH FOR ENTRY--=0:FOUND;=-4: NOT FOUND (GO TO 5.) * G. IF NONE OF THE ABOVE - ERROR #2 --- REJECT! * 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 CLASS NO. 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#4). * D. LINK THE NEW ENTRY INTO THE MASTER REQUEST LIST. * 4.E. TRANSFER THE CALLER'S DATA INTO THE NEW ENTRY. * F. IF ENTRY POOL NOT DEPLETED, CLEAR TABLE-ACCESS RN & RETURN. * 5. CHECK FOR AVAILABLE ENTRY, BEFORE ADDING TO THE SLAVE-STREAM LIST. * A. IF NONE, #TBRN NOT CHECKED BEFORE ENTRY - ERROR #3 --- REJECT! * B. LINK THE NEW ENTRY INTO THE SPECIFIED SLAVE-STREAM LIST. * C. TRANSFER CALLER'S DATA INTO THE NEW ENTRY. * D. RETURN VIA 3.F.(ABOVE), TO UPDATE STATUS OF TABLE-ACCESS RN. * 6. CHECK LIST SPECIFICATION, BEFORE SEARCHING FOR/CLEARING AN ENTRY. * A. IF IMPROPER LIST SPECIFIED - ERROR #1 --- REJECT! * B. SEARCH FOR ENTRY. IF MODE=4,CHECK BREAK FLAG & CLEAR ENTRY, IF SET. * C. IF MODE=5, RETURN; ELSE, CLEAR ENTRY & RESTORE IT TO ENTRY POOL. * D. RETURN VIA 3.F.(ABOVE), TO UPDATE STATUS OF TABLE-ACCESS RN. * 7. VERIFY CALLER TO BE BEFORE ALLOCATION/DE-ALLOCATION OF S.A.M. * A. IF ST/LS = #FWAM GO TO DE-ALLOCATE SYSTEM AVAILABLE MEMORY. * B. IF ST/LS # #FWAM REQUEST ALLOCATION OF SYSTEM AVAIL. MEMORY. * C. IF REQUEST GRANTED, STORE BLOCK ADDRESS IN #FWAM, SIZE IN #SAVM. * D. IF REQUEST DENIED, RETURN REASON IN , FOR FURTHER ANALYSIS. * SKP * #RSAX CALLING SEQUENCE: * * JSB #RSAX * DEF *+5 * DEF MODE MODE OF OPERATION (0,1,2,3,4,OR 5). * DEF ST/LS STREAM/LIST, OR ALLOCATE: #WORDS, DE-ALLOCATE: #FWAM * DEF KEY KEYWORD FOR LIST SEARCHES. * DEF BUFAD ADDRESS OF DATA BUFFER FOR NEW ENTRY OR SEARCH. * NORMAL: =0, =ENTRY ADDRESS; ERROR: =-N,=0; * BREAK-FLAG FOUND:=0,= ENTRY ADDR.; NOT FOUND:=0 * * WHERE: * MODE =0 - REQUEST ALLOCATION/DE-ALLOCATION OF SYSTEM MEMORY. * MODE =1 - TO ADD A NEW ENTRY TO THE MASTER REQUEST LIST. * MODE =2 - TO ADD A NEW ENTRY TO A SLAVE-STREAM LIST. * MODE =3 - TO REMOVE AN ENTRY FROM A LIST & RETURN IT TO THE POOL. * MODE =4 - SEARCH FOR SLAVE-STRM. BREAK FLAG & CLEAR ENTRY IF SET. * MODE =5 - SEARCH FOR A MASTER OR SLAVE ENTRY. * * ST/LS - MODE =0: ALLOCATE NUMBER OF WORDS SPEC'D. IN ST/LS. * ST/LS - MODE =0: IF ST/LS =(#FWAM), RETURN SYSTEM MEMORY. * ST/LS - MODE=1-5: DUAL-BYTE CODE WORD WHICH IDENTIFIES THE LIST * WHICH IS TO BE MODIFIED. THE UPPER BYTE CONTAINS * THE SLAVE-STREAM IDENTITY (0-12B); THE LOWER BYTE * CONTAINS THE LIST-TYPE IDENTITY (1=MASTER,2=SLAVE): * * LIST IDENTIFICATION STREAM/LIST CODE WORD * ----------------------- --/-- ------- * MASTER REQUEST 00/01 000001B * SLAVE-STREAM 0 REQUEST 00/02 000002B * SLAVE-STREAM 1 REQUEST 01/02 000402B * SLAVE-STREAM 2 REQUEST 02/02 001002B * SLAVE-STREAM 3 REQUEST 03/02 001402B * SLAVE-STREAM 4 REQUEST 04/02 002002B * SLAVE-STREAM 5 REQUEST 05/02 002402B * SLAVE-STREAM 6 REQUEST 06/02 003002B * SLAVE-STREAM 7 REQUEST 07/02 003402B * SLAVE-STREAM 8 REQUEST 10/02 004002B * SLAVE-STREAM 9 REQUEST 11/02 004402B * SLAVE-STREAM 10 REQUEST 12/02 005002B * * KEY - UNIQUE KEYWORD FOR LIST SEARCHES. IT MUST BE SPECIFIED * TO BE THE MASTER-REQUESTOR'S CLASS NO., WHEN ADDING TO, * DELETING FROM, OR SEARCHING MASTER LIST (MODE=1,3,5). * 'KEY' MUST BE SUPPLIED AS A DUMMY PARAMETER FOR MODE=2. * IT MUST CONTAIN THE SELECT CODE OF THE COMMUNICATION * LINE I/O CARD (IN THE UPPER BYTE), TO SEARCH FOR OR * DELETE SLAVE-STREAM ENTRIES (MODE=3,4,5; ST/LS=XX/02). * [OPTIONAL (NOT USED) WHEN MODE =0] * * BUFAD - ADDRESS OF 3-WORD DATA BUFFER(MODE=1,2), WITH ELEMENTS * TO BE ADDED TO A LIST ENTRY; OR ADDRESS OF 2-WORD * TIME-TAG TO SEARCH/CLEAR SLAVE ENTRIES (MODE=3,4,5). * [OPTIONAL: CLEAR/SEARCH-FOR MASTER ENTRY (MODE=3,5)]. * [OPTIONAL (NOT USED) WHEN MODE =0] * SKP * DATA BUFFER FORMAT FOR MASTER-LIST ENTRIES: * * WORD #1 - SELECT CODE OF COMM. LINE DEVICE (BITS#13-8) * REQUEST TIMEOUT COUNT (BITS#7-0). * * WORD #2 - MASTER CLASS NUMBER (BITS#12-0). * * WORD #3 - REQUESTOR'S ID SEG. ADDRESS (BITS#14-0). * * DATA BUFFER FORMAT FOR SLAVE-STREAM LIST ENTRIES: * * WORD #1 - SELECT CODE OF COMM. LINE DEVICE (BITS#13-8) * REQUEST TIMEOUT COUNT (BITS#7-0). * * WORD #2 - TRANSACTION TIME-TAG #1 (LEAST). * * WORD #3 - TRANSACTION TIME-TAG #2 (MOST). * * DATA BUFFER FORMAT FOR SLAVE-LIST CLEARING/BREAK-FLAG CHECK: * * WORD #1 - TRANSACTION TIME-TAG #1 (LEAST). * * WORD #2 - TRANSACTION TIME-TAG #2 (MOST). * * LIST FORMATS: * * 'RES' SYSTEM AVAILABLE MEMORY * ------------------------------- ------------------------- * * #MRTH < ADDR.=1RST MASTER-LIST ENTRY>--- * * * * * #ST00 --- * . * . < TRANSACTION TIME-TAG#1 > * . < TRANSACTION TIME-TAG#2 > * . * . * #STXX < ******* FORMAT SAME ******* >---< **** FORMAT SAME ***** > * < ********* FOR ALL ********* > < ******** FOR ********* > * < ****** SLAVE STREAMS ****** > < ******** ALL ********* > * < *** SLAVE STREAMS **** > * * WHERE: A(#15) = ABORT O.K. FOR MONITOR; B(#15) = BAD CONTENTS; * * SCODE(#13-#8) = COMM. LINE DEVICE'S SELECT CODE; * * I(#15) = I/O COMPLETION FLAG X = NOT USED [RESERVED!] * * !(#15) = MONITOR BREAK FLAG (TRANSACTION WAS INTERRUPTED). * * D(#14) = REQUEST AND DATA TRANSACTION * * *NOTE: 0 IN LIST HEAD OR FIRST WORD OF ENTRY SIGNALS END OF LIST. SKP **************************************************************************** * * * #SBIT IS A SPECIAL SUBROUTINE TO ALLOW THE COMMUNICATION DRIVER * * TO SET THE I/O COMPLETION FLAG (BIT#15) IN WORD #2 OF MASTER * * REQUEST ENTRIES, AND TO SET THE BREAK FLAG (BIT#15) IN WORD #2 * * OF SLAVE-STREAM ENTRIES. * * * * NOTE: #SBIT SHOULD ONLY BE ENTERED FROM TYPE-0 PROGRAMS, SINCE * * ACCESS TO THE RTE PRIVILEGED PROCESSORS ($LIBR, $LIBX) IS * * NOT PROVIDED AT THIS ENTRY POINT. * * * * TYPE-0 PROGRAMS MUST NOT MAKE EXTERNAL REFERENCES TO * * #SBIT, LEST A COPY OF BE INCORRECTLY APPENDED * * TO THE PROGRAM. THE ADDRESS OF THE ENTRY POINT WILL BE * * PROVIDED TO THE DRIVER WHEN ENABLES THE LU. * * * * * * #SBIT CALLING SEQUENCE: * * * * LDA ST/LS = LIST IDENTIFIER (SEE ABOVE). * * LDB KEY = SEARCH KEY * * JSB #SBIT * * =0: NORMAL; ALWAYS =0. * * * * SEARCH KEY IS: * * * * = D-BIT(#14) & SELECT CODE(BITS#13-8)-SLAVE ENTRY * * = CLASS NUMBER (BITS#12-0) - MASTER LIST ENTRY. * * * * #SBIT ERRORS AT RETURN: =-1 - INVALID LIST * * =-4 - ENTRY COULD NOT BE FOUND * * * **************************************************************************** SPC 4 * #RSAX ERROR INDICATIONS: * * ERROR DETECTION WILL RESULT IN A RETURN TO THE CALLER WITH THE * REQUESTED ACTION NOT PERFORMED. WILL BE =0; IS AS FOLLOWS: * * = -1: AN INVALID LIST IDENTIFIER HAS BEEN SPECIFIED OR * FIRST CALLER IS NOT . * * = -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: THE ENTRY TO BE CLEARED CANNOT BE LOCATED. * SKP MODE NOP MODE OF OPERATION. ST/LS NOP STREAM/LIST, #WORDS OR FWA: S.A.M. KEY NOP KEYWORD FOR LIST SEARCHES. BUFAD NOP ADDRESS OF NEW ENTRY BUFFER. SUP [SUPPRESS EXTENDED LISTING] #RSAX NOP ENTRY/EXIT 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. * LDA KEY,I GET THE SEARCH KEY, STA KEY AND SAVE IT LOCALLY. LDA ST/LS,I GET STREAM/LIST OR S.A.M. PARAMETER. STA ST/LS AND SAVE LOCALLY. LDB MODE,I GET THE MODE OF OPERATION, STB MODE AND SAVE IT LOCALLY, ALSO. * DMS1 JSB MAPSV SAVE MAP STATUS: DMS; 'NOP': RTE-II. * LDB MODE GET THE MODE OF OPERATION (AGAIN?). SZB,RSS IF MODE =0, THEN THIS IS A S.A.M. JMP SAM ALLOCATION/DE-ALLOCATION REQUEST. * JSB LSTCK GO CHECK VALIDITY & SET LIST CODE. SZA LIST IDENTIFIER ACCEPTABLE? [=LSTCD] JMP ERR01 * NO. ERROR #1: INVALID LIST! * LDA MODE GET THE MODE OF OPERATION. CPA P1 IF MODE =1, GO TO ADD A NEW ENTRY JMP ADENT TO THE MASTER-REQUESTOR LIST. CPA P2 IF MODE =2, GO TO ADD A NEW ENTRY JMP ADENT TO THE SLAVE MONITOR'S LIST. CPA P3 IF MODE =3, GO CLEAR AN ENTRY AND JMP MD345 RETURN IT TO THE NULL ENTRY POOL. CPA P4 IF MODE =4, GO EXAMINE THE LIST FOR JMP MD345 AN ENTRY WITH THE BREAK-FLAG SET. CPA P5 IF MODE =5, REQUEST IS ENTRY SEARCH. JMP MD345 GO TO SEARCH FOR THE ENTRY. JMP ERR02 * ERROR #2: INVALID MODE! * SKP * ADD A NEW ENTRY TO THE MASTER OR SLAVE-STREAM LIST. SPC 1 ADENT LDA #NULL GET THE NULL LIST LINK-WORD. CLE,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. LDA MODE GET THE OPERATION MODE. CPA P2 IF A SLAVE ENTRY IS TO BE ADDED, JMP SLVAD GO TO PROCESS LIST CHANGES.[=LSTCD] * LDA CLMSK SET UP CLASS NO. MASK FOR STA KYMSK SEARCH OF EXISTING MASTER ENTRIES. LDB P2 SET UP OFFSET TO ALLOW SEARCH FOR STB OFSET SECOND WORD OF MASTER ENTRIES. ADB BUFAD FORM ADDRESS OF THE THIRD DATA ELEMENT GETID LDA B,I GET NEW ID SEG. ADDR. [XLA B,I: DMS] NOP [DUMMY: RTE-II; DEF B,I: DMS] STA IDSEG SAVE FOR BAD-ENTRY PROCESSING. * MLOOK JSB SERCH SEARCH FOR AN OBSOLETE ENTRY. JMP MSTAD END-OF-LIST: GO TO ADD NEW ENTRY. ADB P3 GET THE 3RD WORD (ID SEGMENT ADDRESS) LDA B,I FROM ENTRY WITH SAME CLASS NUMBER. CPA IDSEG PREVIOUS ENTRY FROM SAME REQUESTOR? IOR SIGN YES. ADD BAD-ENTRY FLAG (BIT#15). STA B,I REPLACE THE MODIFIED WORD. JMP MLOOK SEARCH FOR ADDITIONAL BAD ENTRIES. * MSTAD CLB,INB ADD AN ENTRY TO THE MASTER LIST. * SLVAD CLA REMOVE AN ENTRY FROM THE NULL LIST. JSB LNK GO TO PROCESS LIST CHANGES. SZA LIST-PROCESSING ERROR? JMP ERR04 YES--INFORM THE CALLER! * LDA ENTAD = DESTINATION ADDRESS, WHICH INA IS THE SECOND WORD OF THE NEW ENTRY. STA TEMP SAVE FOR DESTINATION-BUFFER POINTER. LDB M3 GET NEGATIVE COUNT = NUMBER OF MOVES. STB TEMP+1 SAVE FOR WORD-MOVE COUNTER. LDB BUFAD GET THE SOURCE ADDRESS. MVW LDA B,I GET THE SOURCE WORD [XLA B,I: DMS] NOP [DUMMY: RTE-II; DEF B,I: DMS] STA TEMP,I STORE IT INTO THE DESTINATION LOCATION. INB ADVANCE THE SOURCE-BUFFER POINTER. ISZ TEMP ADVANCE THE DESTINATION BUFFER POINTER. ISZ TEMP+1 ALL WORDS BEEN MOVED? JMP MVW NO. GO BACK FOR MORE. * GETAD LDB ENTAD =ENTRY ADDRESS FOR NORMAL RETURN. CLA JMP EXIT GO TO PREPARE FOR RETURN TO CALLER. * SKP * ERROR PROCESSING AND EXIT SECTION. SPC 1 ERR04 LDA P4 =4: ENTRY CANNOT BE LOCATED. JMP ERR01+1 ERR03 LDA M3 =3: NEW ENTRY NOT AVAILABLE. CLB =0: ERROR-RETURN. JMP DMS2 RETURN-DIRECTLY-WITH ERROR INDICATION! ERR02 LDA P2 =2: INVALID MODE PARAMETER. JMP ERR01+1 ERR01 CLA,INA =1: INVALID LIST PARAMETER. CMA,INA NEGATE THE ERROR CODE. CLB =0: FOR ERROR RETURN. * EXIT DST TEMP SAVE TEMPORARILY. LDA #NULL IF NO 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 REGISTER RETURN-DATA. * DMS2 JSB MPRST RESTORE MAPS: DMS; 'NOP': RTE-II. * JSB $LIBX RETURN TO THE CALLER, VIA THE RTE DEF #RSAX PRIVILEGED ROUTINE PROCESSOR. * SPC 3 * * DYNAMIC MAPPING SYSTEM MAP PROCESSING ROUTINES. SPC 1 MAPSV NOP ENTRY/EXIT: STATUS SAVE RSB GET CURRENT MAP STATUS. RBL,RBL POSITION CURRENT STATUS FOR RESTORATION. STB DMSTS SAVE FOR RESTORATION BEFORE EXIT. SJP MAPSV,I ENABLE SYSTEM MAP AND RETURN. * DMSTS NOP DMS MAP-STATUS STORAGE. * SPC 1 MPRST NOP ENTRY/EXIT: MAP RESTORATION. JRS DMSTS MPRST,I RESTORE MAP AND RETURN. * SKP * PROCESS: CLEAR(3), BREAK-FLAG CHECK(4), AND SEARCH(5) MODES. SPC 1 MD345 LDB BUFAD GET ADDRESS OF USER'S TIME-TAGS. * GTAG1 LDA B,I GET TAG #1 [XLA B,I: DMS] NOP [DUMMY: RTE-II; DEF B,I: DMS] INB POINT TO SECOND TIME-TAG. GTAG2 LDB B,I GET TAG #2 [XLB B,I: DMS] NOP [DUMMY: RTE-II; DEF B,I: DMS] DST TTAG SAVE FOR ENTRY COMPARISON. LDB LSTCD GET THE REMOVAL-LIST IDENTIFIER. ADB #LDEF FIND THE TABLE ADDRESS. LDB B,I GET LIST-HEADER ADDRESS FROM TABLE. LDA B,I GET THE LINK-WORD. SZA,RSS EMPTY LIST? JMP ERR01 * YES. ERROR #1: INVALID LIST! * LDA SCMSK GET MASK FOR SEARCH BY SELECT CODE. CPB MDEF IF A MASTER ENTRY IS TO BE CLEARED, LDA CLMSK THEN CLASS NO. MASK MUST BE USED. STA KYMSK SAVE THE MASK FOR USE BY 'SERCH'. CLA,CLE,INA SET: KEY= 2ND WORD OF SLAVE ENTRY. CPB MDEF IF A MASTER ENTRY IS TO BE CLEARED, INA THEN SEARCH KEY IS IN 3RD WORD. STA OFSET SAVE THE ENTRY-OFFSET FOR 'SERCH'. STB TEMP SAVE THE LIST ADDRESS--TEMPORARILY. * CLOOP JSB SERCH SEARCH FOR THE ENTRY TO BE CLEARED. JMP ERR04 * ERROR #4: ENTRY NOT FOUND! STB ENTAD SAVE THE ENTRY ADDRESS. * LDA TEMP GET THE LIST ADDRESS AGAIN. CPA MDEF IF A MASTER ENTRY IS BEING PROCESSED, JMP MODCK GO CHECK FOR SEARCH OR CLEAR OPTION. ADB P2 POINT TO THE SLAVE TIME-TAG WORDS. DLD B,I GET THE ENTRY'S TIME-TAGS. CPA TTAG IF THE FIRST COMPARES, RSS GO TO CHECK THE SECOND; ELSE, JMP CLOOP CONTINUE SEARCHING. CPB TTAG+1 IF THE SECOND COMPARES, RSS GO CLEAR THE ENTRY; ELSE, JMP CLOOP CONTINUE SEARCH FOR VALID ENTRY. * MODCK LDA MODE GET THE MODE OF OPERATION. CPA P3 IF A CLEAR REQUEST IS IN PROCESS, JMP CLREN GO-DIRECTLY-TO CLEAR THE ENTRY. CPA P4 IF A BREAK-FLAG SEARCH IS IN PROCESS, CLB,INB,RSS PREPARE TO EXAMINE ENTRY'S SECOND WORD. JMP GETAD MODE =5: RETURN WITHOUT ALTERING ENTRY. * ADB ENTAD FORM ADDRESS OF SECOND ENTRY-WORD. LDA B,I GET THE CONTENTS OF THE SECOND WORD. CLB PREPARE TO RETURN NO-BREAK INDICATOR. SSA,RSS IS THE BREAK-FLAG (BIT#15) SET? JMP GETAD+1 NO. EXIT WITHOUT FURTHER ACTION. * CLREN LDA LSTCD REMOVE ENTRY FROM SPECIFIED LIST. CLB ADD ENTRY TO NULL LIST. JSB LNK GO TO PROCESS LIST CHANGES. SZA LIST-PROCESSING ERROR? JMP ERR04 YES. GO TO INFORM THE CALLER! JMP GETAD NO. GO TO MAKE NORMAL RETURN. * SPC 10 * * SYSTEM AVAILABLE MEMORY ALLOCATION/DE-ALLOCATION PROCESSOR. SPC 1 SAM LDA XEQT GET CALLER'S I.D. SEGMENT ADDRESS. CPA VALID IF THIS IS CALLING, RSS THEN ALLOW ACCESS; ELSE, JMP ERR01 REPORT IMPROPER ACCESS! * LDA ST/LS GET THE MEMORY-REQUEST SPECIFICATION. CPA #FWAM IF CURRENT FWA S.A.M. SPECIFIED, JMP RTSAM THEN THIS IS A DE-ALLOCATION REQUEST. * STA SZMEM ALLOCATE: SAVE NO. OF WORDS REQUESTED. 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 LDB #SAVM GET THE NUMBER OF WORDS TO RETURN. 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. * VALID NOP I.D. SEGMENT ADDRESS: LEGAL CALLER. * SKP * SUBROUTINE FOR DRIVER MANIPULATION OF LIST ENTRIES. SPC 1 * ENTER: = ST/LS; = D-BIT(#14) & SELECT CODE (UPPER BYTE)--SLAVE * = CLASS NO (BITS#12-0)--MASTER * RETURN: & =0: NORMAL; =-1, =0: LIST-CODE ERROR. * =-4, =0: NO SUCH ENTRY. * #SBIT NOP ENTRY/EXIT: DRIVER ACCESS TO LISTS. STB KEY SAVE KEYWORD FOR LIST SEARCH. * DMS3 JSB MAPSV SAVE MAP STATUS: DMS; 'NOP': RTE-II. * JSB LSTCK GO CHECK VALIDITY & SET LIST CODE. SZA VALID LIST IDENTIFIER? JMP SERR1 * NO. INFORM CALLER OF ERROR. [=-1] CLB,CLE,INB SEARCH COMPARISONS ARE TO BE CPB LSTCD PERFORMED ON 2ND WD. OF SLAVE ENTRIES, INB OR ON 3RD WD. OF MASTER ENTRIES. STB OFSET SAVE THE KEYWORD OFFSET. LDA DSMSK GET MASK: D-BIT AND SELECT CODE. CPB LSTCD IF MASTER LIST IS TO BE SEARCHED, LDA CLMSK THEN CLASS NO. MASK MUST BE USED. STA KYMSK SAVE THE MASK FOR USE BY 'SERCH'. JSB SERCH SEARCH FOR THE ENTRY TO BE MODIFIED. JMP SERR4 * ENTRY NOT FOUND--ERROR! INB POINT TO THE FLAG WORD. LDA B,I GET THE WORD TO BE MODIFIED. IOR SIGN INCLUDE THE FLAG (BIT#15). STA B,I REPLACE THE MODIFIED WORD. * CLA,RSS =0 FOR NORMAL RETURN. SERR4 LDA M4 =-4 FOR UNLOCATED ENTRY. SERR1 CLB =0, FOR ALL RETURNS. * DMS4 JSB MPRST RESTORE MAPS: DMS; 'NOP': RTE-II. * JMP #SBIT,I RETURN TO THE USER. * DSMSK OCT 77400 SEARCH MASK: D-BIT & SELECT CODE. M4 DEC -4 *