ASMB,R,Q,C * NAME: RNRQ * SOURCE: 92070-18214 * RELOC: 92070-1X214 * PGMR: HLC * * * **************************************************************** * * (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. * * **************************************************************** * * NAM RNRQ,6 92070-1X214 REV.1941 790331 ENT RNRQ * EXT $ERAB,$RNTA,$IDNO,$SCHD EXT $LIBR,$PVCN,$ZPCN,.ENTP EXT $LIST,$XEQ,$EXEX,$RQRT EXT $SUSP,$STAT,$XQT,$DVTA EXT $RQP1,$RQP2,$ERMG * SUP A EQU 0 B EQU 1 * * * * RESOURCE NUMBERS (RN'S) ARE ACCESSED BY USER * CALLS THAT CAN ALLOCATE, DEALLOCATE * SET AND CLEAR THE RN. IF A RN REQUEST CAN NOT * BE GRANTED BECAUSE OF NONE AVAILABLE OR * CONFLICT WITH OTHER PROGRAMS THE REQUESTER IS * SUSPENDED UNTIL THE RN BECOMES AVAILABLE * * THE EXEC CALL IS: * * EXT RNRQ * * JSB RNRQ * DEF *+4 * DEF OPTION OPTION ADDRESS * DEF RN RN NUMBER ADDRESS/RETURN * DEF STAT RN STATUS RETURN ADDRESS * * * WHERE: * OPTIN BSS 1 OPTION WORD * RN BSS 1 RN WORD * STAT BSS 1 RN STATUS * * THE OPTION WORD DEFINES WHAT ACTION IS TO BE TAKEN ON THE * REQUEST AS FOLLOWS: * * BIT MEANING IF SET * BIT 0 SET THE RN LOCALLY * BIT 1 SET THE RN GLOBALLY * BIT 2 CLEAR THE RN * BIT 3 ALLOCATE AN RN LOCALLY * BIT 4 ALLOCATE AN RN GLOBALLY * BIT 5 DEALLOCATE THE RN * BIT 14 DON'T ABORT IF ERROR, RETURN ASCII CODE IN A,B * BIT 15 RETURN EVEN IF REQUEST NOT GRANTED * * A LOCALLY ALLOCATED RN MAY BE RELEASED ONLY BY THE ALLOCATOR * A LOCALLY SET RN MAY BE CLEARED ONLY BY THE SETER * GLOBALLY ALLOCATED/SET RN'S MAY BE DEALLOCATE/CLEARED BY * ANY PROGRAM. * * IF MORE THAN ONE BIT IS SET IN THE OPTION WORD THE FOLLOWING * PRESEDENCE IS FOLLOWED: * * 1) LOCAL ALLOCATE (SKIP 2 IF DONE) * 2) GLOBAL ALLOCATE * 3) DEALLOCATE (SKIP 4, 5, & 6 IF DONE) * 4) LOCAL SET (SKIP 5 IF DONE) * 5) GLOBAL SET * 6) CLEAR * * THIS IMPLIES THAT RN MAY BE ALLOCATED,SET,AND CLEARED IN * THE SAME REQUEST. * A STATUS REQUEST WOULD BE A SET, CLEAR, WITHOUT WAIT. * THERE ARE TWO RN CODE WORDS: * A) THE USER WORD (RETURN ON ALLOCATE/SUPPLIED FOR OTHER * REQUESTS). * B) THE RN TABLE CODE WORD. * * THE USER CODE WORD HAS THE RN NUMBER IN THE LOW HALF (8 BITS) * AND THE OWNERS ID SEGMENT NUMBER IN THE HIGH 8 BITS * * THE RN TABLE CODE WORD HAS THE LOCKERS ID SEGMENT NUMBER * IN THE LOW HALF AND THE OWNERS ID NUMBER IN THE HIGH OF * THE WORD. * * GLOBAL ALLOCATES/LOCKS ARE CODED AS 377 * AVAILABLE/UNLOCKED IS CODED AS 0. * * RN STATUS IS AS FOLLOWS: * * VALUE MEANING * 0 NORMAL DEALLOCATE RETURN * 1 RN IS CLEAR (UNLOCKED) * 2 RN IS LOCKED LOCALLY TO CALLER * 3 RN IS LOCKED GLOBALLY * 4 NO RN AVAILABLE NOW * 5 NOT DEFINED * 6 RN IS LOCKED LOCALLY TO OTHER PROGRAM * 7 RN WAS LOCKED GLOBALLY WHEN REQUEST WAS MADE. * * STATUS 4,6,7 ARE ONLY RETURNED IF THE REQUEST FAILED * AND THE NO WAIT BIT WAS SET * * POSSIBLE ERRORS FROM THIS CODE ARE: * * ERROR MEANING * * RN00 NO BITS SET IN THE OPTION WORD. * RN02 ILLEGAL RN NUMBER. * RN03 RELEASE OR UNLOCK OF UNOWNED RN. * RN REQUEST PROCESSOR * SKP RQOP NOP RQNO NOP RQST NOP RNRQ NOP ENTRY JSB $LIBR TURN OFF MEMORY PROTECT NOP JSB .ENTP GET PARAMETER ADDRESSES DEF RQOP STA $RQRT COMPLETION ADDRESS ADA =D-5 STA $SUSP,I RETRY ADDRESS * CCA ADA $PVCN STA $PVCN SHOULD BE ZERO NOW IOR $ZPCN NOT CALLABLE FROM PRIVILEGED ROUTINE SZA JMP SRERR ABORT CALLER LDB RQOP,I GET THE OPTION WORD RBL,CLE,ELB BIT 14 TO E LDA $STAT,I AND =B137777 CLEAR 'NA' BIT SEZ,RSS JMP ABCAL NORMAL CALL IOR =B40000 SET 'NA' BIT ISZ $RQRT BUMP RETURN ADDRESS ABCAL STA $STAT,I * LDB $XQT JSB $IDNO GET THE ID SEGMENT NO. STB $RQP1 * LDA RQOP,I AND =B77 SZA,RSS TAKE JMP ERN00 ERROR EXIT * AND =B30 MASK TO THE ALLOCATE BITS SZA,RSS IF NO ALLOCATION REQUESTED JMP DAL GO TEST FOR DEALLOCATE * AND =B10 SZA,RSS GLOBAL ALLOCATE? (BIT 4) LDB =B377 YES, SET $IDNO TO 377B BLF,BLF STB $IDNO * LDA $RNTA START OF RN TABLE ALRN1 INA CPA $DVTA JMP NONE END OF TABLE LDB A,I RN TABLE ENTRY SZB JMP ALRN1 * STA $RQP2 SAVE ADDRESS IN RN TABLE LDB $IDNO STB A,I SET OWNER ID NO. IN TABLE LDB $RNTA CMB,INB ADA B A=OFFSET IN TABLE IOR $IDNO ADD ID NO. IN HIGH BYTE STA RQNO,I * JMP DALX TEST FOR DEALLOCATION * NONE CLA STA RQNO,I SET IN THE USER AREA STA $RQP2 CLEAR RN TABLE POINTER LDA $RNTA ALLOCATION FLAG * RNSUS LDB RQOP,I GET NO-WAIT OPTION FLAG SSB IF NO WAIT JMP EXRNW THEN EXIT * LDB $XQT JSB $LIST AND PUT THE PROG IN LIST OCT 51 JMP $XEQ GO THE THE DISPATCHER * EXRN CLB,INB,RSS EXRNW LDB =D5 ENTRY FOR 6/7 RETURN RNEX LDA $RQP2 TEST THE RN LOCATION ADDRESS CMA,CLE,INA,SZA,RSS IF ZERO SET E, ELSE SKIP LDB =D4 NO RN STATUS LDA $RQP2,I GET THE RN SEZ,SZA,RSS SKIP IF ALLOCATE PROBLEMS CLB ELSE SET DEALLOCATED FLAG IF RN IS ZERO AND =B377 MASK TO LOCK BITS SZA IF LOCKED INB STEP B TO SO INDICATE CPA =B377 IF GLOBAL INB STEP AGAIN STB RQST,I SET THE STATUS WORD JMP $EXEX ** GO TO THE DISPATCHER ** * * * DAL LDA RQNO,I GET THE RN USER SUPLIED WORD AND =B377 ISOLATE THE RN#. STA B TEST THE RN CMB,INB TO SEE IF IN THE ADB $RNTA,I TABLE SZA IF ZERO OR SSB BIGGER THAN LEGAL JMP ERN02 GO BOOM! * ADA $RNTA INDEX INTO THE RN TABLE STA $RQP2 SET THE RN ADDRESS LDA A,I GET THE RN ENTRY XOR RQNO,I IS IT OWNED AND =B177400 BY THE SAME USER HE THINKS? SZA JMP ERN03 NO TOO BAD ABOUT THAT! * DALX LDA RQOP,I TEST FOR AND =B40 DEALLOCATE SZA,RSS BIT SET? JMP SET NO GO DO THE SET THING * LDA RQNO,I GET THE RN AND ALF,ALF MAKE SURE HE OWNS IT AND =B377 OWNER ID# TO A CPA =B377 IF GLOBAL RSS OR CPA $RQP1 HE IS OWNER CLA,RSS THEN SKIP THE JMP ERN03 ABORT * STA $RQP2,I CLEAR THE RN ASSIGNMENT LDA $RNTA RESCHEDULE JSB $SCHD ALLOCATION WAITERS OCT 51 JMP CLRN2 GO DO CLEAR SCHEDULING * SET LDA $RQP2,I GET THE RN AND =B377 MASK TO CURRENT LOCK LDB RQOP,I GET THE FLAG WORD CCE,SLB,RSS IF LOCK ERB,SLB THEN JMP LOKRN GO DO LOCK * CLRN LDB RQOP,I CHECK FOR CLEAR RBR,RBR FLAG. IF NOT SLB,RSS SET JUST JMP EXRN EXIT * SZA IF NEVER LOCKED, THEN OK. CPA =B377 IF GLOBALLY LOCKED RSS CPA $RQP1 OR LOCKED BY CALLER RSS THEN OK, ELSE JMP ERN03 SEND 'RN03' * XOR $RQP2,I CLEAR THE RN. STA $RQP2,I RESTORE THE WORD * CLRN2 LDA $RQP2 SCHEDULE THE WAITERS JSB $SCHD OCT 51 JMP EXRN EXIT TO DISPATCHER PROPERLY * * LOCK RN ROUTINE * LOKRN SZA IF NOT LOCKED CPA $RQP1 OR LOCKED TO CALLER RSS THEN OK CONTINUE JMP LKSUS ELSE SUSPEND THIS GUY. * XOR $RQP2,I CLEAR THE PREVIOUS LOCK FLAG IOR $RQP1 ADD THE NEW ONE SEZ,RSS IOR =B377 GLOBAL SET STA $RQP2,I STORE IN THE RN TABLE AND =B377 SET A=ID OF NEW LOCKER JMP CLRN GO TEST FOR CLEAR OPTION * LKSUS LDA $RQP2 GET THE SUSPEND FLAG JMP RNSUS AND GO SUSPEND SPC 2 * SRNW SCHEDULES ANY PROGRAMS SUSPENDED IN THE '3' LIST * WITH A FLAG = ($RQP2) (USUALLY RN LOCK REQUEST SUSPEND) * ERN00 CLB,RSS ERN02 LDB =D2 RN02 ERROR RSS ERN03 LDB =D3 RN03 ERROR LDA =ARN USE RN JMP $ERAB GO BOOM!#$#$%&'" * SRERR LDA =ASR LDB =A JSB $ERMG 'PROGA ABORTED SR 45400' JMP $XEQ * ORG * PROGRAM LENGTH END