ASMB,R,Q,C * NAME: LOCK * SOURCE: 92071-18145 * RELOC: 92071-16145 * PGMR: HLC * * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. 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 LOCK,0 92071-16145 REV.2041 790807 * ENT $TRRN,$ULLU,$CGRN ENT $$LOC,$.LOC * EXT $IDNO,$SCHD,$XQT EXT $LUT#,$LUTA,$RNTA EXT $RQP6,$RQP7,$RQP8,$RQP9 * * SUP A EQU 0 B EQU 1 * * * $TRRN IS THE RN/LU LOCK CLEAN UP ROUTINE. * IT IS CALLED BY ABORT WHEN EVER A PROGRAM COMPLETES * * ITS FUNCTION IS TO RELEASE ANY LOCAL LOCKS AND ANY LOCAL * ALLOCATIONS THE PROGRAM HAS. IT ALSO RELEASES ANY LU * LOCKS THE PROGRAM HAS. * * CALLING SEQUENCE: * * JSB $TRRN * NORMAL RETURN REGISTERS MEANING LESS * * $TRRN NOP JSB $ULLU RELEASE ANY LU LOCKS * LDA $RNTA,I GET THE TABLE SIZE CMA,INA,SZA,RSS SET NEGATIVE / IF ZERO EXIT JMP $TRRN,I STA $RQP7 SET LOOP COUNTERS STA $RQP8 FOR BOTH LOOPS * LDB $RNTA SET THE TABLE ADDRESS STB $RQP9 FOR BOTH LOOPS * TRRN1 INB DALLOCATE LOOP LDA B,I GET THE RN ALF,ALF PUT OWNER FLAG IN LOW A AND =B377 MASK CPA $RQP6 IF OWNED BY COMPLETING STA B,I PROGRAM FLAG FOR NEXT LOOP ISZ $RQP8 STEP COUNTER JMP TRRN1 LOOP IF NOT DONE * TRRN3 ISZ $RQP9 LOCAL LOCK LOOP LDA $RQP9,I GET THE RN AND =B377 IF LOCAL LOCK CPA $RQP6 TO COMPLETING PROGRAM JMP TRRN6 GO RELEASE THE LOCK * TRRN4 ISZ $RQP7 STEP COUNT JMP TRRN3 IF NOT DONE LOOP * LDA $RNTA AND THE ALLOCATE SUSPEND FLAG JSB $SCHD SCHEDULE ANY WAITING PROGRAMS OCT 51 JMP $TRRN,I RETURN * TRRN6 XOR $RQP9,I CLEAR THE LOCK STA $RQP9,I FLAG AND RESET LDA $RQP9 JSB $SCHD SCHEDULE ANY WAITERS FOR THIS RN OCT 51 JMP TRRN4 RETURN TO LOOP * * $CGRN NOP CLEAR GLOBAL RN STA TEMP AND =B377 STA B ADB $RNTA COMPUTE ADDRESS IN TABLE * LDA TEMP IOR =B377 CPA B,I RSS JMP $CGRN,I NOT VALID, RETURN XOR =B377 CLEAR THE RN STA B,I LDA B JSB $SCHD SCHEDULE ANY WAITERS OCT 51 JMP $CGRN,I * TEMP NOP * SKP * THIS SUBROUTINE RELEASES ALL LU'S LOCKED BY A PROGRAM * AND SCHEDULES ANY PROGRAMS WAITING FOR AN LU LOCK. * * CALLING SEQUENCE: * * JSB $ULLU * RETURN - REGISTERS MEANINGLESS * $ULLU NOP LDB $XQT JSB $IDNO GET THE ID NUMBER STB $RQP6 SET FOR $TRRN * ALF,RAR STA $RQP7 LOCK FLAG LDA $LUT# SET UP TO SCAN THE CMA,INA LU TABLE STA $RQP8 * LDA $LUTA STA $RQP9 ULLU1 LDB $RQP9,I SEARCH FOR ALL SZB,RSS JMP ULLU2 BIT BUCKET ADB =D6 LDA B,I DVT WORD 7 AND =B3770 LOCKED LU'S CPA $RQP7 LOCKED TO CALLER? JMP ULLU4 YES - GO CLEAR * ULLU2 ISZ $RQP9 NO / YES STEP TO NEXT ENTRY ISZ $RQP8 IF NOT DONE JMP ULLU1 TRY NEXT ONE JMP $ULLU,I * ULLU4 XOR B,I STA B,I LDA $RQP9,I GET DVT ADDRESS JSB $SCHD OCT 50 JMP ULLU2 CONTINUE SEARCH * $$LOC EQU * STANDARD MODULE $.LOC DEC 0 STANDARD MODULE END