*COMDECK COMCHNRES
 NOS      IF     DEF,NOS
  
* 
*         CHANNEL RESERVE EQUATES 
* 
  
 S.CHREQ  EQU    11                CHANNEL BEING REQUESTED
RES       SPACE  4,10 
**        RES - RESERVE CHANNEL.
* 
*         ENTRY  (CHNRES) = 0, IF CHANNEL NOT RESERVED. 
*                         = 1, IF CHANNEL RESERVERD.
* 
*         EXIT   (CHNRES) = 1, CHANNEL RESERVED.
* 
*         USES   D.Z0, D.T0-T4, RELA, RELB. 
* 
*         CALLS  R.MTR. 
  
  
 RES      ENM    X
          LDD    CHNRES 
          SBN    1
          ZJN    RESX              IF CHANNEL RESERVED
          LDN    P.ZERO 
          CRD    D.T0              ZERO CHANNEL REQUEST 
 NLD      IF     DEF,NLD
          LDD    CHAN 
 NLD      ELSE
 CVL      IF     DEF,CVL
          LDD    CHAN 
 CVL      ELSE
          LDD    D.REQ1+C.CH
          SHN    -6 
 CVL      ENDIF 
 NLD      ENDIF 
          STD    D.T1              SAVE NEW CHANNEL 
          CHTE   *
          SBN    CH 
          NJN    RES1              IF NEW CHANNEL 
  
 RES0     LDN    M.RCH             RESERVE CHANNEL
          RJM    R.MTR
          LDN    1
          STD    CHNRES 
          UJK    RESX              RETURN 
  
 RES1     LDC    CHANT             POINTER TO LIST OF ADDRESSES 
          STD    D.T0              SAVE LIST ADDRESS
          LDI    D.T0 
          STD    D.Z0              SAVE BYTE LOCATION 
 RES2     AOD    D.T0              ADVANCE LIST POINTER 
          LDI    D.T0 
          STD    D.T2              SAVE WORD LOCATION 
          ZJN    RES3              IF END OF LIST 
          LDI    D.T2 
          SCN    37B               CLEAR BYTE FIELD 
          LMI    D.Z0              OR BYTE INTO WORD
          STI    D.T2              RESTORE WORD 
          UJN    RES2 
  
 RES3     BSS    0                 (A = 0)
          STD    D.Z0              (D.Z0) = WORD OFFSET WITHIN CHT
          LDD    D.T1 
          STD    D.T0              COPY CHANNEL NUMBER
 RES4     LCN    5
          RAD    D.T0 
          MJN    RES5              IF CHANNEL NUMBER IN THIS WORD 
          AOD    D.Z0              CHECK IF CHANNEL NUMBER IN NEXT WORD 
          UJN    RES4 
 RES5     ADK    .LDD.+D.T0+5 
          STM    RELB              STORE BYTE OFFSET
          LDC    0                 FWA OF CHANNEL TABLE SET BY INT
 RESA     EQU    *-1
          ADD    D.Z0              ADD WORD OFFSET IN CHT 
          STM    RELA              STORE LOWER 12 BITS FOR REL
          SHN    -12
          ADK    .LDC.
          STM    RELA-1            STORE UPPER 12 BITS FOR REL
          UJK    RES0              RESERVE CHANNEL
REL       SPACE  4,10 
**        REL    RELEASE CHANNEL. 
* 
*         ENTRY  (A) = 0, COMPLETE CHANNEL RELEASE. 
*                    .NE. 0, TEMPORARY CHANNEL RELEASE. 
*                (CHNRES) = 0, IF CHANNEL NOT RESERVED. 
*                         = 1, IF CHANNEL COMPLETELY RESERVED.
* 
*         EXIT   (CHNRES) = 0, IF COMPLETE CHANNEL RELEASE. 
*                         = 1, IF CHANNEL COMPLETELY RESERVED.
* 
*         USES   D.Z1, D.T0 - D.T4. 
* 
*         CALLS  R.MTR. 
  
  
 REL      ENM    X
          STD    D.Z1              SAVE,RELEASE TYPE
          LDD    CHNRES 
          ZJN    RELX              IF CHANNEL NOT RESERVED
          LDD    D.Z1 
          ZJN    REL1              IF COMPLETE RELEASE
          LDC    0                 FIRST WORD OF CHANNEL TABLE
 RELA     EQU    *-1               PLUS WORD OFFSET 
          CRD    D.T0 
          LDD    D.T0              LOAD CHANNEL STATUS BYTE 
 RELB     EQU    *-1               D.T0 PLUS CHANNEL BYTE OFFSET
          SHN    17-S.CHREQ 
          MJN    REL1              IF CHANNEL IS REQUESTED
          LDN    0
          RJM    R.MTR             PAUSE FOR RELOCATION 
          UJN    RELX 
  
          CHTE   *
 REL1     LDN    CH 
          STD    D.T1              STORE CHANNEL NUMBER 
          LDN    M.DCH
          RJM    R.MTR             CALL MONITOR TO DROP CHANNEL 
          LDN    0
          STD    CHNRES            FLAG CHANNEL RELEASED
          UJN    RELX 
 NOS      ELSE
* 
*         CHANNEL RESERVE EQUATES 
* 
  
 M.CHNAVL EQU    1                 CHANNEL AVAILABLE MASK 
 M.CHARGE EQU    4                 CHANNEL CHARGE MASK
 ILDELAY  EQU    36                INTERLOCK DELAY
RES       SPACE  4,10 
**        RES - RESERVE CHANNEL.
* 
*         ENTRY  (CHNRES) = 0, IF CHANNEL NOT RESERVED. 
*                         = 1, IF CHANNEL COMPLETELY RESERVED.
*                         = 2, IF CHANNEL TEMPORARILY RELEASED. 
* 
*         EXIT   (CHNRES) = 1, CHANNEL COMPLETELY RESERVED. 
* 
*         USES   D.Z1 - D.Z5, D.T0 - D.T4, D.REQ1.
* 
*         CALLS  R.MTR, R.STB.
  
  
 RES      ENM    X                 ENTRY/EXIT 
          LDD    CHNRES 
          SBN    1
          ZJN    RESX              IF CHANNEL RESERVED
          LDN    P.ZERO 
          CRD    D.T0              ZERO CHANNEL REQUEST 
 NLD      IF     DEF,NLD
          LDD    CHAN 
 NLD      ELSE
 CVL      IF     DEF,CVL
          LDD    CHAN 
 CVL      ELSE
          LDD    D.REQ1+C.CH
          SHN    -6 
 CVL      ENDIF 
 NLD      ENDIF 
          STD    D.T1              SAVE NEW CHANNEL 
          CHTE   *
          SBN    CH 
          ZJN    RES1              IF NO CHANNEL PLUG REQUIRED
          LCN    37B
          STM    R.STBMSK          CHANGE MASK TO PRESERVE NO HANG BIT
          LDC    CHANT
          RJM    R.STB             PLUG IN CHANNEL
          LCN    77B
          STM    R.STBMSK          RESTORE MASK 
 RES1     LDC    0
 RESA     EQU    *-1               CHANNEL STATUS TABLE ADDRESS 
          ADD    D.T1 
          STD    D.Z6              SAVE WORD ADDRESS
          CRD    D.Z1              READ CHANNEL STATUS WORD 
          SBD    D.Z5 
          NJN    RES4              IF CHANNEL RESERVED BY ANOTHER PP
          LDN    M.RCH
          RJM    R.MTR             REQUEST CHANNEL
          LDD    D.T4 
          NJN    RES6              IF THIS PP GOT CHANNEL 
 RES2     LDN    77B               DELAY
 RES3     SBN    1
          NJN    RES3              IF DELAY NOT DONE
          UJN    RES1 
  
 RES4     LDD    D.Z1+C.CSTCB 
          LPK    M.CHNAVL 
          ZJN    RES7              IF CHANNEL IS NOT AVAILABLE
          LDD    D.Z1+C.CSTCB 
          SCK    M.CHNAVL+M.CHARGE CLEAR CHANNEL AVAILABLE + CHARGE FLAG
          STD    D.Z1+C.CSTCB 
          LDD    D.PPIR 
          STD    D.Z5              INSERT THIS PPS IDENTITY 
          LDD    D.Z6 
          CWD    D.Z1              ATTEMPT TO GRAB CHANNEL
          LDK    ILDELAY           INTERLOCK DELAY
 RES5     SBN    1
          NJN    RES5              IF DELAY NOT DONE
 RES6     LDD    D.Z6 
          CRD    D.Z1              READ CHANNEL STATUS WORD 
 RES7     BSS    0
          LDD    D.Z5 
          SBD    D.PPIR 
          NJN    RES2              IF ANOTHER PP HAS CHANNEL
          LDD    D.Z1+C.CSTCB 
          LPK    M.CHNAVL 
          NJN    RES2              IF CHANNEL AVAILABLE FLAG SET
          LDN    1
          STD    CHNRES            FLAG CHANNEL RESERVED
          LJM    RESX 
REL       SPACE  4,10 
**        REL - RELEASE CHANNEL.
* 
*         ENTRY  (A) = 0, COMPLETE CHANNEL RELEASE. 
*                    .NE. 0, TEMPORARY CHANNEL RELEASE. 
*                (CHNRES) = 0, IF CHANNEL NOT RESERVED. 
*                         = 1, IF CHANNEL COMPLETELY RESERVED.
*                         = 2, IF CHANNEL TEMPORARILY RELEASED. 
* 
*         EXIT   (CHNRES) = 0, IF COMPLETE CHANNEL RELEASE. 
*                         = 2, IF TEMPORARY CHANNEL RELEASE.
* 
*         USES   NONE.
* 
*         CALLS  R.DCH. 
  
  
 REL      ENM    X                 ENTRY/EXIT 
          STD    D.Z1              SAVE RELEASE TYPE
 NLD      IF     DEF,NLD
          LDD    CHAN 
 NLD      ELSE
 CVL      IF     DEF,CVL
          LDD    CHAN 
 CVL      ELSE
          LDD    D.REQ1+C.CH
          SHN    -6 
 CVL      ENDIF 
 NLD      ENDIF 
          STD    D.Z2              CHANNEL NUMBER RESERVED
          ADM    RESA 
          STD    D.Z3              CHANNEL STATUS WORD ADDRESS
          LDD    CHNRES 
          ZJN    RELX              IF CHANNEL NOT RESERVED
          SBN    1
          ZJN    REL4              IF CHANNEL AVAILABLE FLAG NOT SET
          LDD    D.Z1 
          NJN    RELX              IF TEMPORARY RELEASE 
          LDD    D.Z3 
          CRD    D.T0              READ CHANNEL STATUS WORD 
          LDD    D.T4 
          SBD    D.PPIR 
          NJN    REL3              IF THIS PP DOES NOT OWN CHANNEL
          LDD    D.T0+C.CSTCB 
          SCK    M.CHNAVL          CLEAR CHANNEL AVAILABLE FLAG 
          STD    D.T0+C.CSTCB 
          LDD    D.Z3 
          CWD    D.T0              ATTEMPT TO ESTABLISH COMPLETE CONTROL
          LDK    ILDELAY           INTERLOCK DELAY
 REL1     SBN    1
          NJN    REL1              IF DELAY NOT DONE
          LDD    D.Z3 
          CRD    D.T0              READ CHANNEL STATUS WORD 
          LDD    D.T4 
          SBD    D.PPIR 
          NJN    REL3              IF THIS PP DOES NOT OWN CHANNEL
 REL2     LDD    D.Z2 
          RJM    R.DCH             RELEASE CHANNEL
 REL3     LDN    0
          UJN    REL5 
  
 REL4     LDD    D.Z1 
          ZJN    REL2              IF COMPLETE RELEASE
          LDD    D.Z3 
          CRD    D.T0              READ CHANNEL STATUS WORD 
          LDK    M.CHNAVL 
          RAD    D.T0+C.CSTCB      SET CHANNEL AVAILABLE
          LDD    D.Z3 
          CWD    D.T0 
          LDN    2                 INDICATE TEMPORARY RELEASE 
 REL5     STD    CHNRES            SAVE CHANNEL STATE 
          LJM    RELX 
 NOS      ENDIF 
