*COMDECK  COMPBEL - BUMP EXPIRED LIMITS.
 BEL      CTEXT  COMPBEL - BUMP EXPIRED LIMITS. 
 BEL      SPACE  4,8
          IF     -DEF,QUAL$,1 
          QUAL   COMPBEL
          BASE   D
 BEL      SPACE  4,8
***       BEL - BUMP EXPIRED LIMITS.
* 
*         T. R. RAMSEY       74/05/05.
 BEL      SPACE  4,8
***       BEL - BUMP EXPIRED LIMITS.
* 
*         BEL CHECKS AND BUMPS ANY LIMIT WHICH WOULD NOT ALLOW A JOB TO 
*         PERFORM AN ADDITIONAL AMOUNT OF PROCESSING. THERE IS A
*         DISTINCT VALUE ASSOCIATED WITH EACH LIMIT HEREAFTER KNOWN AS
*         THE MARGIN. LIMITS ARE BUMPED ONLY BY THE AMOUNT NEEDED TO
*         GUARANTEE THE MARGIN. IF A LIMIT IS BUMPED TO A VALUE LARGER
*         THAN THE FIELD WHICH HOLDS IT, THE LIMIT IS SET TO INFINITE.
*         EACH LIMIT IS ALLOWED TO BE BUMPED ONCE ONLY. 
* 
* 
*         ENTRY  NONE 
* 
*         EXIT   NONE 
* 
*         USES   D.Z0 - D.T7
* 
*         CALLS  NONE 
  
  
****      DEFAULT MARGINS.
  
  
CPINC     CEQU   IP.CPLM           CP TIME (SECONDS)
IOINC     CEQU   IP.IOLM           IO TIME (SECONDS)
MSINC     CEQU   IP.MSLM           MASS STORAGE (PRU-S) 
  
****
  
  
 BITCPL   BIT    S.CPL
 BITIOL   BIT    S.IOL
 BITMSL   BIT    S.MSL
 BEL      SPACE  4,8
 BEL      ENM    X                 ENTRY/EXIT 
  
*         READ AND SAVE THE LIMIT BITS. 
  
          LDD    D.CPAD 
          ADK    W.CPFLAG 
          CRD    D.Z0 
          LDD    D.Z0+C.CPFLAG
  
          IFNE   0,C.CPFLAG,1 
          STD    D.Z0              LIMIT BITS 
  
*         PROCESS IO LIMIT. 
  
          LPK    BITIOL 
          ZJN  BEL1                IF IO TIME LIMIT HAS NOT BEEN BUMPED 
          LJM  BEL4 
  
 BEL1     LDD    D.CPAD 
          ADK    W.CPIOL
          CRD    D.T3              IO TIME LIMIT
          ADK    W.CHTIM-W.CPIOL
          CRD    D.Z1              CURRENT IO TIME
          LDD    D.Z5 
          SHN    -11               CARRY BIT FOR ROUNDING 
          ADK    IOINC
          RAD    D.Z4              CURRENT+INC, LOW ORDER 12 BITS 
          SHN    -12
          RAD    D.Z3              CURRENT+INC, HIGH ORDER 12 BITS
          SHN    -3 
          ZJN  BEL2                IF CURRENT+INC .LT. 2**15
          LDN    0                 ELSE, USE INFINITE LIMIT 
          STD    D.Z3 
          STD    D.Z4 
          UJN  BEL3 
  
 BEL2     LDD    D.T3+C.CPIOL+1    00DEXX 
          SCN    77B               00DE00 
          SHN    6                 DE0000 
          LMD    D.T3+C.CPIOL      DEXABC 
          SHN    9                 ABCDEX 
          SHN    -3                0ABCDE 
          ZJN  BEL4                IF LIMIT IS INFINITE 
          SBD    D.Z4 
          MJN  BEL3                IF CURRENT+INC .GT. LIMIT
          SHN    -12
          SBD    D.Z3 
          PJN  BEL4                IF CURRENT+INC .LE. LIMIT
 BEL3     LDD    D.Z4              SET LIMIT TO CURRENT+INC OR INFINITE 
          SHN    6                 BCDE00 
          LMD    D.T3+C.CPIOL+1    BCGGXX 
          SCN    77B               BCGG00 
          LMD    D.T3+C.CPIOL+1    BCDEXX 
          STD    D.T3+C.CPIOL+1      DEXX 
          SCN    77B               BCDE00 
          LMD    D.Z3              BCDE0A 
          SHN    6                 DE0ABC 
          LMD    D.T3+C.CPIOL      DEXGGG 
          LPC    777B              000GGG 
          LMD    D.T3+C.CPIOL      00XABC 
          STD    D.T3+C.CPIOL        XABC 
          LDD    D.CPAD 
          ADK    W.CPIOL
          CWD    D.T3              NEW IO TIME LIMIT
          LDK    BITIOL 
          RAD    D.Z0              INDICATE THAT LIMIT HAS BEEN BUMPED
  
*         PROCESS CP LIMIT. 
  
 BEL4     LDD    D.Z0 
          LPK    BITCPL 
          ZJN  BEL5                IF CP TIME LIMIT HAS NOT BEEN BUMPED 
          LJM  BEL8 
  
 BEL5     LDD    D.CPAD 
          ADK    W.CPTIML 
          CRD    D.T3              CP TIME LIMIT
          ADK    W.CPTIME-W.CPTIML
          CRD    D.Z1              CURRENT CP TIME FOR CPU A
  
          IFNE   IP.MCPU,1
          ADK    W.CPTIMB-W.CPTIME
          ELSE   1
          LDN    P.ZERO 
  
          CRD    D.Z6              CP TIME FOR CPU B OR ZERO IF NO CPU B
          LDD    D.Z5 
          ADD    D.T2 
          SHN    -11               CARRY BITS FOR ROUNDING
          ADK    CPINC
          ADD    D.T1 
          RAD    D.Z4              CURRENT+INC, LOW ORDER 12 BITS 
          SHN    -12
          ADD    D.T0 
          RAD    D.Z3              CURRENT+INC, HIGH ORDER 12 BITS
          SHN    -3 
          ZJN  BEL6                IF CURRENT+INC .LT. 2**15
          LDN    0                 ELSE, USE INFINITE LIMIT 
          STD    D.Z3 
          STD    D.Z4 
          UJN  BEL7 
  
 BEL6     LDD    D.T3+C.CPTIML+1   00EXXX 
          LPC    7000B             00E000 
          SHN    6                 E00000 
          LMD    D.T3+C.CPTIML     E0ABCD 
          SHN    3                 0ABCDE 
          ZJN  BEL8                IF LIMIT IS INFINITE 
          LMC    077777B
          ZJN  BEL8                IF LIMIT IS OTHER INFINITE 
          LMC    077777B
          SBD    D.Z4 
          MJN  BEL7                IF CURRENT+INC .GT. LIMIT
          SHN    -12
          SBD    D.Z3 
          PJN  BEL8                IF CURRENT+INC .LE. LIMIT
 BEL7     LDD    D.Z3              SET LIMIT TO CURRENT+INC OR INFINITE 
          SHN    12                0A0000 
          LMD    D.Z4              0ABCDE 
          SHN    15                E0ABCD 
          STD    D.T3+C.CPTIML       ABCD 
          SHN    -6                00E0AB 
          LMD    D.T3+C.CPTIML+1   00GXXX 
          LPC    7000B             00G000 
          LMD    D.T3+C.CPTIML+1   00EXXX 
          STD    D.T3+C.CPTIML+1     EXXX 
          LDD    D.CPAD 
          ADK    W.CPTIML 
          CWD    D.T3              NEW CP TIME LIMIT
          LDK    BITCPL 
          RAD    D.Z0              INDICATE THAT LIMIT HAS BEEN BUMPED
  
*         PROCESS MS LIMIT. 
  
 BEL8     LDD    D.Z0 
          LPK    BITMSL 
          ZJN  BEL9                IF MS LIMIT HAS NOT BEEN BUMPED
          LJM  BEL12
  
 BEL9     LDD    D.CPAD 
          ADK    W.CPMSLM 
          CRD    D.T3              MS LIMIT 
          CRD    D.Z1              CURRENT MS (PRU COUNT) 
          LDD    D.Z1+C.CPMSRC
          LPN    77B
          STD    D.Z1+C.CPMSRC
          LDK    MSINC
          RAD    D.Z1+C.CPMSRC+1   CURRENT+INC, LOW ORDER 12 BITS 
          SHN    -12
          RAD    D.Z1+C.CPMSRC     CURRENT+INC, HIGH ORDER 12 BITS
          SHN    -6 
          ZJN  BEL10               IF CURRENT+INC .LT. 2**18
          LDN    0                 ELSE, USE INFINITE LIMIT 
          STD    D.Z1+C.CPMSRC
          STD    D.Z1+C.CPMSRC+1
          UJN  BEL11
  
 BEL10    LDD    D.T3+C.CPMSLM
          ADD    D.T3+C.CPMSLM+1
          ZJN  BEL12               IF LIMIT IS INFINITE 
          LDD    D.T3+C.CPMSLM
          SBD    D.Z1+C.CPMSRC
          MJN  BEL11               IF CURRENT+INC .GT. LIMIT
          NJN  BEL12               IF CURRENT+INC .LT. LIMIT
          LDD    D.T3+C.CPMSLM+1   ELSE, LOOK AT LOW ORDER 12 BITS
          SBD    D.Z1+C.CPMSRC+1
          PJN  BEL12               IF CURRENT+INC .LE. LIMIT
 BEL11    LDD    D.Z1+C.CPMSRC     SET LIMIT TO CURRENT+INC OR INFINITE 
          STD    D.T3+C.CPMSLM
          LDD    D.Z1+C.CPMSRC+1
          STD    D.T3+C.CPMSLM+1
          LDD    D.CPAD 
          ADK    W.CPMSLM 
          CWD    D.T3              NEW MS LIMIT 
          LDK    BITMSL 
          RAD    D.Z0              INDICATE THAT LIMIT HAS BEEN BUMPED
  
*         PUT THE LIMIT BITS BACK WHERE THEY BELONG.
  
 BEL12    LDD    D.CPAD 
          ADK    W.CPFLAG 
          CRD    D.T0 
          LDD    D.Z0 
          STD    D.T0+C.CPFLAG
          LDD    D.CPAD 
          ADK    W.CPFLAG 
          CWD    D.T0 
          LJM  BELX 
          SPACE  4,8
          BASE   *
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 BEL      EQU    /COMPBEL/BEL 
 QUAL$    ENDIF 
 BEL      ENDX
