         TITLE    'BOOT TIME RECONFIGURATION & PARTITIONING PROCESSOR'
         CSECT    0
TEST     SET      0                 =0 REAL WORLD, =1 TEST MODE
AUTO     SET      0                 =0 NO AUTO CNFG.,=1 AUTO CNFG.
         SYSTEM   UTS
         DO1      TEST=1
         SYSTEM   BPM
*****************
R0       EQU      0
R1       EQU      1
R2       EQU      2
R3       EQU      3
R4       EQU      4
R5       EQU      5
R6       EQU      6
R7       EQU      7
R8       EQU      8
R9       EQU      9
R10      EQU      10
R11      EQU      11
R12      EQU      12
R13      EQU      13
R14      EQU      14
R15      EQU      15
*****************
         PAGE
*****************
*  DEF'S
***
         DEF      RECONFIG
         DEF      RECNFG:0,RECNFG:1,RECNFG:2
         DEF      PCH
*
RECONFIG EQU      %
********
*  REF'S
***
         REF      DCT1,DCT1A,DCT1P,DCTSIZ
         REF      DCT2,DCT3,DCT4,DCT16,DCT24
         REF      DCT22
         REF      CIT3
         REF      SNDDX,SSTAT,SSIG,SYMX
         REF      BATAPE,AVRTBLSIZ,AVRTBLNE,AVRTBL,AVRNOU
         REF      TYPMNSZ,OH:NM,SV:RSIZ,SB:RTY,SH:RTOT,TB:FLGS
         REF      M:MODNUM,CNTMOD#,DEVMOD#
         REF      RBLIMS
         REF      X560CUCL
         REF      OCNDD,OCNDDFLG,:ENDFND
         REF      NAMSCAN,HEXSCAN
         REF      RECNFGLL,RECNFGOC
         REF      CL2PA,CANTRUN
         REF      CSEBRANCH
         REF      M16,M24
         REF      Y1,Y2,Y3,Y4,Y8,Y08
         REF      Y04
         DO1      TEST=1
         REF      M:UC
***
         SREF     COC,LCOC,COH:DN
         SREF     IOPCNFG
         SREF     RB:FLAG,OFFBIT
         SREF     CSE%1:7,CSE%2:7,CSE%3:7,CSE%4:7,CSE%5:7
         SREF     CSE%6:7,CSE%7:7,CSE%8:7,CSE%9:7,CSE%A:7
         SREF     CSE%B:7,CSE%C:7,CSE%D:7,CSE%E:7,CSE%F:7
         SREF     CSE%1:9,CSE%2:9,CSE%3:9,CSE%4:9,CSE%5:9
         SREF     CSE%6:9,CSE%7:9,CSE%8:9,CSE%9:9,CSE%A:9
         SREF     CSE%B:9,CSE%C:9,CSE%D:9,CSE%E:9,CSE%F:9
         SREF     CSE%1:560,CSE%2:560,CSE%3:560,CSE%4:560,CSE%5:560
         SREF     CSE%6:560,CSE%7:560,CSE%8:560,CSE%9:560,CSE%A:560
         SREF     CSE%B:560,CSE%C:560,CSE%D:560,CSE%E:560,CSE%F:560
********
         PAGE
*****************
*  SPECIAL PROCS
*****************
CLUNT    CNAME
         PROC
LF       GEN,8,2,3,3  AF(1),AF(2),AF(3),AF(4)
         PEND
*****************
         PAGE
*****************
*  RECONFIG ENTRY VECTOR - MUST BE COORDINATED WITH BOOTSUBR
********
*                             ** LOC **
RECNFG:0 B        INITL       <---0-INITIALIZE DCTS, ETC.        ENTRY#1
RECNFG:1 B        PROC:       <---1-PROCESS ':' COMMAND          ENTRY#2
RECNFG:2 B        :ENDFALT    <---2-ASSUME ':END' BY DEFAULT     ENTRY#3
         DATA     0,0,0,0,0         POSSIBLE NEW VECTOR ENTRIES
*----------------
         PAGE
*****************
*  R E C N F I G  -  P R O C E S S O R
*
*    CONVERT ALL DCT1/DCT1A/DCT1P ENTRIES TO APPROPRIATE DEVICE ADDR., &
*    DETERMINE ALL EXISTING DEVICES ADDRESSES & CONTROLLER MODEL #'S &
*    USE INFO TO CHANGE CP-V MONITOR TABLES TO REPRESENT TARGET SYSTEMS
*    CONFIGURATION. ALSO, PARTITION DEVICES & CONTROLLERS PRIOR TO
*    MAKING SYSTEM AVAILABLE FOR USERS.
*
*    ENTERED FROM BOOTSUBR
*
*    CALLED:
*        R15 =    LINK              FROM BOOTSUBR OR XDELTA
*
*    EXIT BACK TO BOOTSUBR OR XDELTA
*
*    RECNFIG HAS 3 ENTRIES:
*        1. 1ST ENTRY CONVERTS DCT1/1A/1P ENTRIES
*        2. 2ND ENTRY PROCESSES A ':' COMMAND READ BY XDELTA, WHERE
*                 THE 1ST ':' COMMAND TRIGGERS AUTOMATIC RECONFIGURATOR
*        3. 3RD ENTRY IS FOR DEFAULT ':END' CARD WHEN NO ':' COMMANDS
*                 ARE ENCOUNTERED BY XDELTA
*
*****************
         PAGE
*****************
*  INITL ROUTINE
*
*    IF FLAG OCNDDFLG >0, THEN TAKE VALUE IN OCNDD, FORMAT IT, & PUT
*    IT INTO DCT1/DCT1P, & DCT16. IF OCNDDFLG =0, NO FORMATTING NEEDED.
*    INIT THEN TAKES EACH DCT1/DCT1A ENTRY & CONVERTS THE DEVICE
*    ADDR. ACCORDING TO SIGMA OR 560 REQUIREMENTS.
*
*    ENTRY:
*        OCNDDFLG = 0, NO FORMATTING OF OC ADDR.
*                 > 0, VALUE = DCT INDEX WHERE FORMATTED OC ADDR. GOES
*
*    CALLED:
*        R15 =    LINK              FROM BOOTSUBR
*
*****************
         SPACE    3
INITL    EQU      %           <---  ENTER
         LCI      0                 SAVE
         PSM,R0   STK                 REGISTERS
         LW,R15   STK               PUT FLAG IN
         PSW,R15  STK                 STACK FOR RESTORATION
         LW,R6    OCNDDFLG          GET OC DCT INDEX IF OC CHANGED
         BEZ      OCSAME      NO--- DID OC CHANGE
         LD,R8    DCT16,R6    YES--
         LW,R10   OCNDD             GET OC DEVICE ADDR.
         LI,R1    2
         LB,R2    R10,R1            GET CHANNEL OR CLUSTER/UNIT BITS
         BIF,X560 XRX560      YES-- IS THIS XEROX 560
         AI,R2    'A'         NO--- SIGMA, MAKE CHANNEL LETTER
         B        XRXSIGMA
*----------------
XRX560   EQU      %
         LB,R2    X560CUCL,R2       XEROX 560, MAKE CLUSTER/UNIT LETTER
XRXSIGMA EQU      %
         STB,R2   R10,R1            REPLACE BINARY VALUE WITH EBCDIC
         STH,R10  DCT1,R6           PUT NDD (N=EBCDIC, & DD=HEX)
         STH,R10  DCT1P,R6            INTO DCT TABLES
         SLD,R10  -4
         SLS,R11  -4
         LB,R2    R11               GET 'D' (2)
         AI,R2    '0'               CONVERT HEX TO EBCDIC
         CI,R2    '9'
         BLE      %+2               0-9
         AI,R2    'A'-'9'+1         A-F
         STB,R2   R11
         SLD,R10  -4
         SLS,R11  -4
         LB,R2    R11               GET 'D' (1)
         AI,R2    '0'               CONVERT HEX TO EBCDIC
         CI,R2    '9'
         BLE      %+2               0-9
         AI,R2    'A'-'9'+1         A-F
         STB,R2   R11
         SLD,R10  -16               R11 = NDD IN EBCDIC
         LW,R10   M24
         XW,R10   R11
         STS,R10  R9                REPLACE OLD DCT16'S NDD WITH NEW
         STD,R8   DCT16,R6
OCSAME   EQU      %
*
*   WE NOW SET UP DCT1 WITH THE PROCESSOR ADDRESSES BY
*   LOOKING AT THE CHANNEL LETTER MNEUMONIC IN THE
*   HIGH ORDER BYTE
*
         LI,R1    DCTSIZ            SIZE OF DCT TABLES
DCTLOOP  LH,R8    DCT1,R1           PICK UP CHANNEL LETTER
         SLS,R8   16                CLEAR OUT SIGN
         SLD,R8   -24               ISOLATE CL, SAVE DEV ADDRESS IN R9
         BAL,R15  CL2PA             CONVERT CHANNEL LETTER TO PROC ADDR
         BCS,1    %                 BAD LETTER, QUIT
         SLD,R8   8                 GET DEVICE PART BACK
         STH,R8   DCT1,R1           PUT IT AWAY
         STH,R8   DCT1P,R1          JUST IN CASE DUAL
         LB,R9    DCT3,R1           PICK UP DUAL FLAGS
         CI,R9    3                 IS IT POOLED DEVICE
         BNE      NONPOOL           B/ NO
         LH,R8    DCT1A,R1          PICK UP ALT ADDR
         SLS,R8   16
         SLD,R8   -24
         BAL,R15  CL2PA
         BCS,1    %
         SLD,R8   8
NONPOOL  EQU      %
         STH,R8   DCT1A,R1          STORE AWAY AS ALT ADDRESS
         BDR,R1   DCTLOOP
*
*   SET UP CSEBRANCH TABLE IF NEEDED
*
         LW,R0    CSED%MACHINE
         CB,R0    CSED%MACHINE      COMPARE HIGH BYTE WITH LOW
         BAZ      CANTRUN           MEANS WE DONT HAVE THE RIGHT HANDLERS
         LB,R0    CSED%MACHINE
         EOR,R0   CSED%MACHINE      SEE IF MORE THAN ONE HANDLER
         BEZ      ONLYONE           NOTHING TO DO
         BIF,S9X560 NOTSIG7         B/ IF SIGMA9, OR XEROX 560
         LI,R1    S7BRANCH-1        ADDRESS OF S7 BRANCH TABLE
         B        MOVEIT
NOTSIG7  BIF,X560  NOTSIG9          B/ IF X560
         LI,R1    S9BRANCH-1        ADDRESS OF SIGMA 9 BRANCH TABLE
         B        MOVEIT
NOTSIG9  LI,R1    X560BRANCH-1      MUST BE X560
MOVEIT   LI,R2    CSEBRANCH%SIZE    SIZE OF TABLE
MOVE2    LW,R3    *R1,R2            PICK UP BRANCH
         STW,R3   CSEBRANCH-1,R2    PUT IT INTO CSEBRANCH TABLE
         BDR,R2   MOVE2
ONLYONE  EQU      %
         MTW,1    M:TAURUS          SET TAURUS (560) FLAG
         BIF,X560 XIT         YES-- IS THIS XEROX 560 (TAURUS)
         MTW,-1   M:TAURUS    NO--- SET FLAG BACK TO SIGMA
XIT      EQU      %           <---  COMMON EXIT ROUTINE
RESTK    EQU      %
         PLW,R15  STK
         CW,R15   STK
         BNE      RESTK       NO--- FIND SPECIAL STACK FLAG
         LCI      0           YES-- RESTORE
         PLM,R0   STK                 REGISTERS
         B        *R15        --->  RETURN TO BOOTSUBR OR XDELTA
*----------------
         PAGE
*****************
*  PROC: ROUTINE
*
*    PROCESS ':' COMMAND WHICH WAS READ BY XDELTA
*
*    ENTRY:
*        R12 =    WA(CARD IMAGE BUFFER)
*
*    CALLED:
*        R15 =    LINK              FROM XDELTA VIA BOOTSUBR
*
*****************
         SPACE    3
PROC:    EQU      %           <---  ENTER
         LCI      0                 SAVE
         PSM,R0   STK                 REGISTERS
         LW,R15   STK               PUT FLAG IN
         PSW,R15  STK                 STACK FOR RESTORATION
         LW,R13   M24               PUT COMMAND BUFFER ADDR.
         STS,R12  SCNPLST+FLGS        INTO SCAN PLST
         MTW,0    1ST:FLG
         BNEZ     NOT1ST:     NO--- 1ST TIME IN
         MTW,1    1ST:FLG     YES--
         LI,R11   0                 INITIALIZE SIZE
         STW,R11  INT:BUF+V1          OF CONFIGURATION TABLES
         MTW,1    FND:CRD           SET ':' CARD FOUND FLAG
         DO1      AUTO=1
         BAL,R11  AUTOCNFG    ****  DO AUTOMATIC RECONFIGURATION
         PAGE
NOT1ST:  EQU      %
         SPACE    2
*****************
*  PROCESS THE ':' COMMAND
*
*    THE COMMANDS ACCEPTED INCLUDE:
*        :GO
*                 ACCEPT PO TAPES HARDWARE ADRESSES AS IS
*                 ONLY :PART & :END COMMANDS ACCEPTED
*                 :TYPE COMMANDS ARE IGNORED
*        :SAVE
*                 KEEP ALL DEV.ADDR.NOT CHANGED BY :TYPE
*                 OR AUTO.RECONFIGURATION. THAT IS, NO
*                 PERMANENT DOWN DEVICES.
*                 THIS COMMAND IS LIKE :GO EXCEPT :TYPE COMMANDS ARE OK.
*        :TYPE DEV.TYPE,DEV.ADDR.<,DEV.ADDR.,....>
*        :TYPE DEV.TYPE,(DEV.ADDR.1,DEV.ADDR.2)<,(....,....)>
*                 DEV.TYPE = 6-CHAR. FIELD:
*                     1ST 2 CHAR.= TYPE MNEMONIC(E.G., CR)
*                     LAST 4 CHAR.=DEV.MODEL # IN HEX
*                 DEV.ADDR.N = LIST OF 1 OR MORE ADDR.PAIRS(DUAL ACCESS)
*                     DEV.ADDR.1 = PRIMARY PATH
*                     DEV.ADDR.2 = ALTERNATE PATH
*                 DEV.ADDR.= LIST OF 1 OR MORE DEV.ADDR.(SINGLE ACCESS)
*                             SIGMA = NDD
*                             TAURUS= NDD OR VALUE
*                                   N = CHAN.OR CLUSTER/UNIT
*                                   DD= DEV.NUMBER
*                                   VALUE = 4-HEX.DIGITS,CLUST/UNT/DEV.#
*                 DEFINES DEVICE TYPE,MODEL #, & DEVICE ADDRESS
*                 AUGMENTS RECONFIGURATORS FINDINGS
*                 CHANGES RECONFIGURATORS FINDINGS
*        :PART <DEVICE ADDRESS     >
*              <CONT,DEVICE ADDRESS>
*                 DEVICE ADDRESS = RESOURCES HARDWARE ADDRESS
*                                   SIGMA = NDD
*                                   TAURUS= NDD OR VALUE
*                                     N = CHAN.OR CLUSTER/UNIT
*                                     DD= DEVICE NUMBER
*                                     VALUE = 4-HEX.DIG.,CLUST/UNT/DEV.#
*                 CONT = KEYWORD INDICATING PARTITION CONTROLLER
*        :REMOVE <DEVICE ADDRESS     >
*                <CONT,DEVICE ADDRESS>
*                 PARAMETERS SAME AS :PART
*        :END
*                 TERMINATE BOOT TIME RECONFIGURATOR
*
*****************
         PAGE
************************************************************************
*  GENERAL TABLE STRUCTURE (INTERNAL TO RECONFIG, AT INT:BUF)
*
*                 *******************************************
*    TABLE WORD-0 |                         # WORDS IN TABLE|
*                 *******************************************
*
*    PARTITION ENTRY (:PART)
*
*                 *******************************************
*          WORD-0 |V|V|-|1|-|0|.|.|00000000|       DEV.ADDR.|
*                 *******************************************
*                  | |   |   |
*                  | |   |---|----- :PART ENTRY FLAGS
*                  | |
*                  |-|------------- = 01, DEVICE REQUEST
*                  |-|------------- = 10, CONTROLLER REQUEST
*
************************************************************************
         PAGE
************************************************************************
*    REMOVE ENTRY (:REMOVE)
*
*                 *******************************************
*          WORD-0 |V|V|-|0|-|1|.|.|00000000|       DEV.ADDR.|
*                 *******************************************
*                  | |   |   |
*                  | |   |---|----- :REMOVE ENTRY FLAGS
*                  | |
*                  |-|------------- = 01, DEVICE REQUEST
*                  |-|------------- = 10, CONTROLLER REQUEST
*
************************************************************************
         PAGE
************************************************************************
*    TYPE ENTRY (:TYPE)
*
*                 *******************************************
*          WORD-0 |V|V|V|0|V|0|.|.|TYP.INDX|      PRIM.ADDR.|
*                 *******************************************
*                  | | | | | |
*                  | | | |---|----- :TYPE ENTRY FLAGS
*                  | | |   |
*                  | | |   |------- = 0, NOT REORGANIZED DUE TO MUC
*                  | | |   |------- = 1, REORGANIZED DUE TO MUC
*                  | | |
*                  | | |----------- = 0, SINGLE ACCESS
*                  | | |----------- = 1, DUAL ACCESS
*                  | |
*                  | |------------- = 0, IN SYSTEM
*                  | |------------- = 1, NOT IN SYSTEM (CANNOT BE ADDED)
*                  |
*                  |--------------- = 0, AUTO RECONFIGURATION ENTRY
*                  |--------------- = 1, :TYPE COMMAND RECONFIGURATION
*
*                 ***********************************
*          WORD-1 |       DEV.MOD.#|      CONT.MOD.#|
*                 ***********************************
*
*                 ***********************************
*          WORD-2 |0000000000000000|       ALT.ADDR.|
*        IF DUAL  ***********************************
*
************************************************************************
         SPACE    3
         LI,R7    SCNPLST           CHAR.SCAN PLIST ADDR.
         LI,R8    1                 START SCAN
         STW,R8   SCNPLST+CCP         IN COLUMN 2
         LI,R0    STK               STACK POINTER FOR SCAN S.R.'S
         LI,R8    0                 INITIALIZE
         STW,R8   DUALFLG             DUAL FLAG FOR :TYPE
         STW,R8   SNGLFLG             SINGLE FLAG FOR :TYPE
         STB,R8   SCNPLST+FLGS        SCAN PLIST
         STW,R8   SCNPLST+CSL           VALUES
         BAL,R11  NAMSCAN     ****  GET COMMANDS ID
         BCS,8    NAMERR      EEEE  BAD NAME
         CI,R8    BADCONT
         BE       XIT         YES-- BAD CONTINUATION, EXIT
         LI,R12   0           NO---
         STW,R12  SUPRPART          INITIALIZE :REMOVE FLAG
         LW,R12   SCNPLST+CHSTRG    GET NAME
         LI,R5    #NAMES            # ID'S
NXTNAM   EQU      %
         CW,R12   NAMES-1,R5
         BE       NAMFND      YES-- FIND ID
         BDR,R5   NXTNAM      NO--- DONE SEARCH
         B        NAMERR      EEEE  UNKNOWN ID
*----------------
NAMFND   EQU      %
         EXU      CMNDVECT-1,R5 --> EXIT TO COMMAND PROCESSOR
*                                       :GO,:TYPE,:REMOVE,:PART,:END
*----------------
         PAGE
*****************
*  :GO ROUTINE
*
*    PROCESS :GO COMMAND
*
*****************
         SPACE    3
:GO      EQU      %           <---  ENTER
         MTW,0    ENDFLG
         BNEZ     BADCMND EEE YES-- :END FOUND ALREADY
         MTW,0    GOFLG       NO---
         BNEZ     BADCMND EEE YES-- PREVIOUS :GO COMMAND
         MTW,1    GOFLG       NO--- SET :GO FLAG
         LI,R12   NO:TYPE           'ALL :TYPE/:REMOVE CMNDS.IGNORED'
         BAL,R11  MSGLL       ****  DISPLAY ON LL
         B        XIT         --->  EXIT
*----------------
         PAGE
*****************
*  :SAVE ROUTINE
*
*    PROCESS :SAVE COMMAND
*
*****************
         SPACE    3
:SAVE    EQU      %           <---  ENTER
         MTW,0    ENDFLG
         BNEZ     BADCMND EEE YES-- :END FOUND ALREADY
         MTW,0    SAVEFLG     NO---
         BNEZ     BADCMND EEE YES-- :SAVE FOUND ALREADY
         MTW,1    SAVEFLG     NO--- SET TO FOUND
         LI,R12   KEEPDVAD          'KEEP DEV.ADDR.EVEN WITH :TYPE'
         BAL,R11  MSGLL       ****  DISPLAY ON LL
         B        XIT         --->  EXIT
*----------------
         PAGE
*****************
*  :TYPE ROUTINE
*
*    PROCESS :TYPE COMMAND
*    DEFINE CONFIGURATION
*
*****************
         SPACE    3
:TYPE    EQU      %           <---  ENTER
         MTW,0    ENDFLG
         BNEZ     BADCMND EEE YES-- :END FOUND ALREADY
         MTW,0    GOFLG       NO---
         BNEZ     BADCMND EEE YES-- PREVIOUS :GO COMMAND
*                             NO---
         LI,R0    STK               STACK POINTER FOR SCAN S.R.'S
         LI,R8    0                 CLEAR CURRENT CHAR.FLAG FOR SCAN
         BAL,R11  NAMSCAN     ****  GET DEVICE TYPE & MODEL #
         BCS,8    NAMERR      EEEE  BAD VALUE
         CI,R8    BADCONT
         BE       XIT         YES-- BAD CONTINUATION, EXIT
         LCI      2           NO---
         LM,R2    SCNPLST+CHSTRG    DEV.TYPE & MODEL #
         LW,R1    SCNPLST+CSL       # CHAR.
         CI,R1    6
         BNE      NAMERR      EEEE  FIELD MUST BE 6 CHAR.LONG
         AI,R3    -' '+','          PUT IN ','
         LCI      2
         STM,R2   DEVTYP            SAVE DEV.TYPE & MODEL # IN MESSAGE
         LW,R4    SCNPLST+CCP
         STW,R4   RELCHAR           SAVE FOR POSSIBLE FUTURE USE
         LH,R4    R2                TYPE MNEMONIC
         LI,R5    TYPMNSZ           # DEVICE TYPES
NXTYP    EQU      %
         CH,R4    OH:NM,R5
         BE       CHK4MOD#    YES-- FIND MNEMONIC
         BDR,R5   NXTYP       NO--- DONE SEARCH
*                             YES--
         B        NAMERR      EEEE  UNKNOWN TYPE MNEMONIC
*----------------
CHK4MOD# EQU      %
*
* R2,R3= YYMM,MM--            YY=TYPE MNEMONIC, MMMM=DEV.MOD.#
*    R5= TYPE MNEMONIC INDEX
*
         SLD,R2   16                PUT MOD# INTO R2
         STW,R2   SCNPLST+CHSTRG      & INTO SCAN BUFFER
         LW,R3    Y2                SET SCAN BUFFER
         STS,R3   SCNPLST+FLGS        STILL FULL FLAG
         MTW,-2   SCNPLST+CSL       # CHAR.TO LOOK AT =4 (I.E.,6-2=4)
         BAL,R11  HEXSCAN     ****  CHECK MOD# FOR HEX
         BCS,8    NAMERR      EEEE  BAD VALUE
*
*  GIVEN A DEV.MOD#:
*        FIRST FIND DEV.MOD# & OBTAIN ITS CONT.MOD# FROM M:MODNUM.
*        IF NOT DESIRED PAIR, THEN FIND NEXT CONT.MOD# & OBTAIN ITS
*        DEV.MOD# & CONTINUE UNTIL EITHER A PAIR IS FOUND OR END
*        OF PAIRS IS ENCOUNTERED.
*    NO PAIRS FOUND, THEN FIND NEXT DEV.MOD# & OBTAIN ITS CONT.MOD#
*        & CONTINUE AS STATED ABOVE UNTIL A PAIR IS FOUND OR END OF
*        PAIRS IS ENCOUNTERED.
*    WHEN A PAIR IS FOUND, THE PAIR IS IN SYSGENED SYSTEM.
*
         LW,R14   Y8                SET FLAG, DEV.IN SYST.& :TYPE
         LW,R6    M:MODNUM          SIZE OF M:MODNUM
         AW,R6    M:MODNUM          # WORDS IN TABLE
NXTMOD#D EQU      %                 SEARCH FOR DEV.MOD#
         CW,R2    M:MODNUM,R6
         BE       FNDMOD#D    YES-- FIND DEV.MOD# IN MASTER TABLE
2NXMOD#D EQU      %           NO---
         AI,R6    -1
         BDR,R6   NXTMOD#D    NO--- DONE SEARCH
         OR,R14   Y4          YES-- SET FLAG, CANNOT ADD DEV.TO SYSTEM
         B        CONTSCAN    EEEE  UNKNOWN NAME, BUT CONTINUE
*----------------
FNDMOD#D EQU      %
         AI,R6    1                 POINT TO CONTROLLER MODEL #
         LW,R3    M:MODNUM,R6       GET CONTROLLER MODEL #
*
*  R2 =  DEV.MOD#
*  R3 =  CONT.MOD#
*  R5 =  TYPE MNEMONIC INDEX
*  R6 =  CURRENT INDEX INTO M:MODNUM +1
*
         LI,R4    DCTSIZ            #DCT ENTRIES
NXTDCT4D EQU      %
         CB,R5    DCT4,R4
         BE       FNDEVTPD    YES-- FIND DEV.TYPE
FNDCT4D  EQU      %           NO---
         BDR,R4   NXTDCT4D    NO--- DONE SEARCH
         AI,R6    -1          YES-- POINT BACK TO DEV.MOD#
         LCI      R6-R2+1
         PSM,R2   STK               SAVE OUTER LEVELS REGISTERS
         LW,R6    M:MODNUM          SIZE OF M:MODNUM
         AW,R6    M:MODNUM          # WORDS IN TABLE
         AI,R6    1
NXTMOD#C EQU      %                 SEARCH FOR CONT.MOD#
         CW,R3    M:MODNUM,R6
         BE       FNDMOD#C    YES-- FIND CONT.MOD# IN MASTER TABLE
2NXMOD#C EQU      %           NO---
         AI,R6    -1
         BDR,R6   NXTMOD#C    NO--- DONE SEARCH
*                             YES--
         LCI      R6-R2+1
         PLM,R2   STK               RESTORE OUTER LEVELS REGISTERS
         B        2NXMOD#D
*----------------
FNDMOD#C EQU      %
         AI,R6    -1                POINT TO DEVICE MOD#
         LW,R2    M:MODNUM,R6       GET DEV.MOD#
*
*  R2 =  DEV.MOD#
*  R3 =  CONT.MOD#
*  R5 =  TYPE MNEMONIC INDEX
*  R6 =  CURRENT INDEX INTO M:MODNUM -1
*
         LI,R4    DCTSIZ            #DCT ENTRIES
NXTDCT4C EQU      %
         CB,R5    DCT4,R4
         BE       FNDEVTPC    YES-- FIND DEV.TYPE
FNDCT4C  EQU      %           NO---
         BDR,R4   NXTDCT4C    NO--- DONE SEARCH
         AI,R6    1           YES-- POINT BACK TO CONT.MOD#
         B        2NXMOD#C
*----------------
FNDEVTPC EQU      %
*
*  R2 =  DEV.MOD# IN EBCDIC
*  R3 =  CONT.MOD# IN EBCDIC
*  R4 =  DCT INDEX
*
         BAL,R11  CNVTMOD#    ****  CONVERT MOD#'S TO HEX
*
*  R12 = DEV.MOD# IN HEX
*  R13 = CONT.MOD# IN HEX
*
         CH,R12   DEVMOD#,R4
         BNE      FNDCT4C     NO--- THIS DEV.= SYSGENED ONE
         CH,R13   CNTMOD#,R4  YES--
         BNE      FNDCT4C     NO--- THIS CONT.= SYSGENED ONE
         LI,R8    -(R6-R2+1)  YES--
         MSP,R8   STK               REMOVE OUTER LEVEL INFO
         B        CONTSCAN
*----------------
FNDEVTPD EQU      %
*
*  R2 =  DEV.MOD# IN EBCDIC
*  R3 =  CONT.MOD# IN EBCDIC
*  R4 =  DCT INDEX
*
         BAL,R11  CNVTMOD#    ****  CONVERT MOD#'S TO HEX
*
*  R12 = DEV.MOD# IN HEX
*  R13 = CONT.MOD# IN HEX
*
         CH,R12   DEVMOD#,R4
         BNE      FNDCT4D     NO--- THIS DEV.= SYSGENED ONE
         CH,R13   CNTMOD#,R4  YES--
         BNE      FNDCT4D     NO--- THIS CONT.= SYSGENED ONE
CONTSCAN EQU      %           YES--
*
* R5      = TYPE MNEMONIC INDEX
* R14(B1) = 0,    FOUND AN ENTRY IN SYSTEM FOR THIS DEVICE
* R14(B1) = 1,    DEVICE CANNOT BE ADDED TO SYSTEM
*
         CI,R8    ','
         BNE      TERMERR     EEEE  BAD TERMINATOR
         STW,R5   TYPINDX           SAVE DEV.TYPE MNEMONIC INDEX
         LW,R4    R14               SAVE FLAGS
SCNXTFLD EQU      %
         LCI      R4-R2+1
         PSM,R2   STK               SAVE MODEL # INFO
         LI,R0    STK               STACK POINTER FOR SCAN S.R.'S
         LI,R8    0                 CLEAR CURRENT CHAR.FLAG FOR SCAN
         STB,R8   SCNPLST+FLGS      SET SCAN FLAGS =0
         BAL,R11  NAMSCAN     ****  GET DEV.ADDR.
         BCS,8    CHKDUAL     YES-- POSSIBLE BAD VALUE OR DUAL ACCESS
FLDNUM   EQU      %           NO---
         CI,R8    BADCONT           SINGLE ACCESS
         BE       XIT         YES-- BAD CONTINUATION, EXIT
         MTW,0    DUALFLG     NO---
         BNEZ     DONTMIX EEE YES-- IN DUAL MODE
         MTW,1    SNGLFLG     NO--- SET SINGLE ACCESS FLAG
         LW,R5    SCNPLST+CSL       # CHAR.
         LW,R13   SCNPLST+CHSTRG    DEV.ADDR.
         STW,R13  DEVADDR           PUT INTO MESSAGE
         BAL,R10  HEXEHEX     ****  CONVERT 'NDD'/'VALUE' TO HEX
*
*  R14 = CONVERTED VALUE (DEV.ADDR.)
*
         LW,R0    R14               SAVE DEV.ADDR.
         LCI      R4-R2+1
         PLM,R2   STK               RESTORE MODEL # INFO
BILDENT  EQU      %
*
*  R2 =  DEV.MOD#
*  R3 =  CONT.MOD#
*  R4 =  :TYPE FLAG & DEV.IN SYSTEM FLAG (BIT-0 & BIT-1 RESPECTIVELY)
*                 BIT-1 = 1, CANNOT ADD TO SYSTEM
*        ALSO CONTAINS DUAL FLAG, BIT-2 = 1
*  R0 =  PRIM.DEV.ADDR.
*  R9 =  ALT.DEV.ADDR.(DUAL ACCESS MODE)
*
         LCI      R4-R2+1
         PSM,R2   STK               SAVE IN CASE OF ANOTHER FIELD LATER
         CW,R4    Y4
         BANZ     CANTADD     NO--- CAN DEV.BE ADDED TO SYSTEM
         LI,R5    4           YES--
         LW,R13   R2                DEV.MOD#
         MTW,1    SPECNVRT          MAKE CONVERSION OF 4 HEX DIGITS
         BAL,R10  HEXEHEX     ****  CONVERT DEV.MOD#
*
*  R14 = CONVERTED DEV.MOD#
*
         LW,R2    R14               SAVE DEV.MOD#
         LI,R5    4
         LW,R13   R3                CONT.MOD#
         BAL,R10  HEXEHEX     ****  CONVERT CONT.MOD#
*
*  R14 = CONVERTED CONT.MOD#
*
         MTW,-1   SPECNVRT          RESET CONVERT FLAG
         LW,R3    R14               SAVE CONT.MOD#
         SLS,R3   16
         SLD,R2   16                FORM DEV./CONT.MOD#'S IN R2
         LW,R3    R4                FLG1 FLAGS &
         AW,R3    R0                  PRIMARY DEV.ADDR.IN R3
         LW,R13   TYPINDX
         LI,R4    1
         STB,R13  R3,R4             PUT DEV.TYPE MNEMONIC INDEX IN ENTRY
         LW,R4    R9                ALTERNATE DEV.ADDR.IN R4
         LI,R13   2                 ENTRY SIZE (MINIMUM)
         LW,R12   Y2                MIN.SIZE ENTRY (CONDITION CODE SET)
         CW,R3    Y2
         BAZ      1ACSENT     YES-- SINGLE ACCESS ENTRY
         LI,R13   3           NO--- DUAL ACCESS, ENTRY SIZE (MAXIMUM)
         LW,R12   Y3                MAX.SIZE ENTRY (CONDITION CODE SET)
1ACSENT  EQU      %
         XW,R2    R3
         LW,R1    INT:BUF+V1        CURRENT TABLES SIZE
         AW,R1    R13               SIZE OF NEW ENTRY
         CI,R1    V2
         BG       NOAREA  EEE NO--- WILL NEW ENTRY FIT
         STW,R1   INT:BUF+V1  YES-- UPDATE SIZE
         SW,R1    R13
         LC       R12
         STM,R2   INT:BUF+V1+1,R1   PUT ENTRY INTO TABLE
         MTW,1    FND:TYPE          SET FOUND :TYPE COMMAND
         CI,R13   2
         BE       NXTFLD      YES-- SINGLE ACCESS ENTRY
         CI,R8    ')'         NO---
         BNE      TERMERR     EEEE  BAD TERMINATOR
         LI,R0    STK               SET STACK POINTER FOR SCAN S.R.'S
         LI,R8    0                 CLEAR CURRENT CHAR.FLAG FOR SCAN
         BAL,R11  NAMSCAN     ****  GET NEXT FIELD
         BCS,8    NXTFLD      YES-- TERMINATOR FOUND
         LW,R1    SCNPLST+CCP NO--- NO TERMINATOR, THEREFORE ERROR
         SW,R1    SCNPLST+CSL       PUT CHAR.POS.
         STW,R1   SCNPLST+CCP         BACK TO START OF FIELD
         B        TERMERR     EEEE  NO TERMINATOR
*----------------
NXTFLD   EQU      %
         LCI      R4-R2+1           RESTORE
         PLM,R2   STK                 DEV./CONT.MOD#'S & FLAGS
         CI,R8    ','
         BE       SCNXTFLD    YES-- MORE FIELDS
CHKTERM  EQU      %           NO---
         CI,R8    EOB
         BE       XIT         YES-- END OF BUFFER, EXIT
         CI,R8    NL          NO---
         BE       XIT         YES-- NEW LINE, EXIT
         CI,R8    PERIOD      NO---
         BE       XIT         YES-- PERIOD, EXIT
         CI,R8    CR          NO---
         BE       XIT         YES-- CARRIAGE RETURN, EXIT
         CI,R8    ' '         NO---
         BE       XIT         YES-- TRAILING BLANK TERMINATOR, EXIT
         B        TERMERR EEE NO--- BAD TERMINATOR
*----------------
CHKNUM1  EQU      %
         BAL,R10  CHKNUM      ****  CHECK & SCAN AS HEX IF TAURUS
*
*  NO RETURN IF TAURUS & NOT HEX VALUE 0R IF NOT TAURUS
*
         B        FLDNUM
*----------------
CHKNUM2  EQU      %
         BAL,R10  CHKNUM      ****  CHECK & SCAN AS HEX IF TAURUS
*
*  NO RETURN IF TAURUS & NOT HEX VALUE OR IF NOT TAURUS
*
         B        PRIMNUM
*----------------
CHKNUM3  EQU      %
         BAL,R10  CHKNUM      ****  CHECK & SCAN AS HEX IF TAURUS
*
*  NO RETURN IF TAURUS & NOT HEX VALUE OR IF NOT TAURUS
*
         B        ALTNUM
*----------------
CHKNUM4  EQU      %
         BAL,R10  CHKNUM      ****  CHECK & SCAN AS HEX IF TAURUS
*
*  NO RETURN IF TAURUS & NOT HEX VALUE OR IF NOT TAURUS
*
         B        PARTNUM
*----------------
CHKNUM5  EQU      %
         BAL,R10  CHKNUM      ****  CHECK & SCAN AS HEX IF TAURUS
*
*  NO RETURN IF TAURUS & NOT HEX VALUE OR IF NOT TAURUS
*
         B        CNTNUM
*----------------
CHKDUAL  EQU      %
         CI,R8    '('
         BNE      CHKNUM1     EEEE  MUST BE DUAL ACCESS OR IS IN ERROR
         MTW,0    SNGLFLG           DUAL ACCESS
         BNEZ     DONTMIX EEE YES-- IN SINGLE MODE
         MTW,1    DUALFLG     NO--- SET DUAL ACCESS FLAG
         LI,R0    STK               SET STACK POINTER FOR SCAN S.R.'S
         LI,R8    0                 CLEAR CURRENT CHAR.FLAG FOR SCAN
         STB,R8   SCNPLST+FLGS      SET FLAGS =0
         BAL,R11  NAMSCAN     ****  PRIMARY DEV.ADDR.
         BCS,8    CHKNUM2     EEEE  BAD VALUE
PRIMNUM  EQU      %
         CI,R8    BADCONT
         BE       XIT         YES-- BAD CONTINUATION, EXIT
         LW,R5    SCNPLST+CSL NO--- # CHAR.
         LW,R13   SCNPLST+CHSTRG    PRIM.DEV.ADDR.
         STW,R13  DEVADDR           PUT INTO MESSAGE
         AI,R13   -' '+','
         STW,R13  BAD:NDDS          PUT INTO MESSAGE
         LW,R13   DEVADDR
         BAL,R10  HEXEHEX     ****  CONVERT 'NDD'/'VALUE' TO HEX
*
*  R14 = CONVERTED VALUE (DEV.ADDR.)
*
         PSW,R14  STK               SAVE PRIM.DEV.ADDR.
         CI,R8    ','
         BNE      TERMERR     EEEE  BAD TERMINATOR
         LI,R0    STK               SET STACK POINTER FOR SCAN S.R.'S
         LI,R8    0                 CLEAR CURRENT CHAR.FLAG FOR SCAN
         BAL,R11  NAMSCAN     ****  ALTERNATE DEV.ADDR.
         BCS,8    CHKNUM3     EEEE  BAD VALUE
ALTNUM   EQU      %
         CI,R8    BADCONT
         BE       XIT         YES-- BAD CONTINUATION, EXIT
         LW,R5    SCNPLST+CSL NO--- # CHAR.
         LW,R13   SCNPLST+CHSTRG    ALT.DEV.ADDR.
         STW,R13  BAD:NDDS+1        PUT INTO MESSAGE
         BAL,R10  HEXEHEX     ****  CONVERT 'NDD'/'VALUE' TO HEX
*
*  R14 = CONVERTED VALUE (DEV.ADDR.)
*
         LW,R9    R14               SAVE ALT.DEV.ADDR.
         PLW,R0   STK               RESTORE PRIM.DEV.ADDR.
         LCI      R4-R2+1
         PLM,R2   STK               RESTORE MODEL # INFO
         OR,R4    Y2                SET DUAL FLAG
         LI,R11   MIOPCNTM          MIOP MASK
         LW,R10   R0                PRIM.DEV.ADDR.
         CS,R10   R9                PRIM.CONT.VS.ALT.CONT.
         BE       BADUAL  EEE YES-- SAME CONTROLLERS
         B        BILDENT     NO---
*----------------
         PAGE
*****************
*  CHKNUM ROUTINE
*
*    DETERMINE IF TAURUS MODE & THEN IF HEX VALUE
*    IF NOT TAURUS MODE, ERROR
*    IF TAURUS MODE & NOT HEX VALUE, ERROR
*    ELSE, RETURN
*
*    CALLED:
*        R10 =    LINK
*
*****************
         SPACE    3
CHKNUM   EQU      %           <---  ENTER
         MTW,0    M:TAURUS
         BEZ      NAMERR      EEEE  NOT TAURUS, THUS ERROR
         BAL,R11  HEXSCAN     ****  CHECK IF HEX VALUE
         BCS,8    NAMERR      EEEE  NOT HEX, THUS ERROR
         B        *R10        --->  RETURN, HEX VALUE
*----------------
         PAGE
*****************
*  :REMOVE ROUTINE
*
*    PROCESS :REMOVE COMMAND
*    REMOVE RESOURCES FROM SYSTEM (OPPOSITE OF :TYPE)
*
*****************
         SPACE    3
:REMOVE  EQU      %           <---  ENTER
         MTW,0    GOFLG
         BNEZ     BADCMND EEE YES-- PREVIOUS :GO COMMAND
         LW,R8    Y14         NO---
         STW,R8   SUPRPART          SET PROCESS :REMOVE COMMAND FLAG
         B        :PART       --->  PROCESS :REMOVE AS :PART
*----------------
         PAGE
*****************
*  :PART ROUTINE
*
*    PROCESS :PART COMMAND
*    PARTITION RESOURCES
*
*****************
         SPACE    3
:PART    EQU      %           <---  ENTER
         MTW,0    ENDFLG
         BNEZ     BADCMND EEE YES-- :END FOUND ALREADY
         LI,R8    0           NO--- CLEAR CURRENT CHAR.FLAG FOR SCAN
         LI,R0    STK               SET STACK POINTER FOR SCAN S.R.'S
         LW,R4    Y5                SET FLAG FOR :PART & DEV.TYPE
         BAL,R11  NAMSCAN     ****  GET FIELD ('CONT'/'NDD'/'VALUE')
         BCS,8    CHKNUM4     EEEE  BAD FIELD
PARTNUM  EQU      %
         CI,R8    BADCONT
         BE       XIT         YES-- BAD CONTINUATION, EXIT
         LW,R5    SCNPLST+CSL NO--- # CHAR.
         LW,R13   SCNPLST+CHSTRG    GET VALUE
         CI,R5    4
         BE       CHKCONT     YES-- 4 CHAR.= 'CONT'/'VALUE'
         CI,R5    3           NO---
         BNE      NAMERR  EEE NO--- 3 CHAR.= 'NDD', BAD VALUE
VAL:NDD  EQU      %           YES--
*
*  R4 =  FLAGS IDENTIFYING TYPE OF CONFIG.TABLE ENTRY
*
         BAL,R10  HEXEHEX     ****  CONVERT 'NDD'/'VALUE'
*
*  R14 = CONVERTED DEV.ADDR.(NDD/VALUE)
*
         OR,R4    R14               MERGE INDEV.ADDR.
         EOR,R4   SUPRPART          DOES NOTHING FOR :PART COMMAND
*                                   RESETS Y1 & SETS Y04 FOR :REMOVE
         LW,R1    INT:BUF+V1        SIZE OF CONFIG.TABLE
         AI,R1    1
         CI,R1    V2
         BG       NOAREA  EEE NO--- WILL NEW ENTRY FIT
         STW,R1   INT:BUF+V1  YES-- UPDATE SIZE
         AI,R1    -1
         STW,R4   INT:BUF+V1+1,R1   PUT ENTRY INTO TABLE
         MTW,0    SUPRPART
         BEZ      NOTREM      NO--- :REMOVE COMMAND
         MTW,1    FND:REMOVE  YES-- SET FOUND :REMOVE FLAG
         B        CHKTERM
*----------------
NOTREM   EQU      %
         MTW,1    FND:PART          SET FOUND :PART COMMAND
         B        CHKTERM           CHECK TERMINATOR & EXIT
*----------------
CHKCONT  EQU      %
         CW,R13   CONT
         BNE      VAL:NDD     NO--- VALUE = 'CONT', THEN = 'VALUE'
         CI,R8    ','         YES--
         BNE      TERMERR     EEEE  BAD TERMINATOR
         AW,R4    Y4                SET FLAG, CONTROLLER TYPE
         LI,R0    STK               SET STACK POINTER FOR SCAN S.R.'S
         LI,R8    0                 CLEAR CURRENT CHAR.FLAG FOR SCAN
         BAL,R11  NAMSCAN     ****  GET FIELD
         BCS,8    CHKNUM5     EEEE  BAD VALUE
CNTNUM   EQU      %
         CI,R8    BADCONT
         BE       XIT         YES-- BAD CONTINUATION
         LW,R5    SCNPLST+CSL NO--- # CHAR.
         LW,R13   SCNPLST+CHSTRG    GET VALUE
         CI,R5    4
         BE       VAL:NDD     YES-- 4 CHAR.= 'VALUE'
         CI,R5    3           NO---
         BNE      NAMERR  EEE NO--- 3 CHAR.= 'NDD', BAD VALUE
         B        VAL:NDD     YES--
*----------------
         PAGE
*****************
*  :ENDFALT ROUTINE
*
*    NO :END ENCOUNTERED, THEREFORE, :END BY DEFAULT
*
*    CALLED:
*        R15 =    LINK
*
*****************
         SPACE    3
:ENDFALT EQU      %           <---  ENTER
         LCI      0                 SAVE
         PSM,R0   STK                 REGISTERS
         LW,R15   STK               PUT FLAG IN
         PSW,R15  STK                 STACK FOR RESTORATION
         B        :ENDX       --->  EXIT
*----------------
         PAGE
*****************
*  :END ROUTINE
*
*    PROCESS :END COMMAND
*    FINISH BOOT TIME RECONFIGURATION PROCEDURE
*
*****************
         SPACE    3
:END     EQU      %           <---  ENTER
         MTW,0    ENDFLG
         BNEZ     BADCMND EEE YES-- :END FOUND ALREADY
:ENDX    EQU      %           NO--- ENTER FROM :ENDFALT
         MTW,1    ENDFLG            SET :END FLAG
         MTW,0    GOFLG
         BNEZ     GOEND       YES-- WAS :GO SPECIFIED
         MTW,0    FND:CRD     NO---
         BNEZ     RECNF       YES-- ANY ':' COMMANDS
GOEND    EQU      %           NO--- ASSUME :GO/:END BY DEFAULT
         LI,R12   NORCNFG           'NO RECONFIGURATION PERFORMED'
         BAL,R11  MSGLL       ****  OUTPUT TO LL
CNTINU   EQU      %
         BAL,R11  DSPRESLL    ****  DISPLAY RESOURCES ON LL
         BAL,R11  DOPART      ****  PROCESS PARTITION INFO
         LI,R1    COC
         BEZ      XIT         --->  NO COC SYSTEM
         LI,R1    0
COCLOOP  EQU      %
         LH,R2    COH:DN,R1         GET COC DCT INDEX
         LH,R2    DCT1,R2           GET COC ADDRESS
         STH,R2   COH:DN,R1           AND PUT INTO COC ADDR.TABLE
         AI,R1    1                 TO NEXT COC
         CI,R1    LCOC
         BLE      COCLOOP     YES-- MORE COCS
*                             NO---
         B        XIT         --->  EXIT
*----------------
RECNF    EQU      %
         BAL,R11  ORGANIZ     ****  ORGANIZE DEV.ADDR.WITHIN CONT.SEQ.
         BAL,R11  DORECNFG    ****  PROCESS RECONFIGURATION INFO
         BAL,R11  DOREMOVE    ****  PROCESS REMOVE INFO
         B        CNTINU
*----------------
         PAGE
*****************
*  DSPRESLL ROUTINE
*
*    DISPLAY SYSTEM HARDWARE RESOURCES ON LL
*
*    CALLED:
*        R11 =    LINK
*
*****************
         SPACE    3
DSPRESLL EQU      %           <---  ENTER
         PSW,R11  STK               SAVE RETURN
         LI,R12   TOP               TOP OF PAGE
         BAL,R11  MSGLL       ****  OUTPUT TO LL
         LI,R12   ASTER             '****--**'
         BAL,R11  MSGLL       ****  OUTPUT TO LL
         LI,R12   TITL1             'DEVICE RESOURCE CONFIG.'
         BAL,R11  MSGLL       ****  OUTPUT TITLE TO LL
         LI,R12   TITL2             'DEV.TYPE : ----'
         BAL,R11  MSGLL       ****  OUTPUT HEADER TO LL
         LI,R12   DASH              '------'
         BAL,R11  MSGLL       ****  OUTPUT TO LL
         LI,R12   BLANK             '    '
         BAL,R11  MSGLL       ****  OUTPUT BLANKS TO LL
         LI,R2    DCTSIZ            #DCT ENTRIES
         LI,R1    1                 CURRENT ENTRY #
NXTDCTAD EQU      %
         LB,R10   DCT24,R1          GET DEVICE FLAGS
         CI,R10   PERDWND
         BAZ      NOTDWN      NO--- DEV.PERM.DOWN
INCTONXT EQU      %           YES--
         AI,R1    1                 TO NEXT DCT ENTRY
         BDR,R2   NXTDCTAD    NO--- DONE
         LI,R12   BLANK       YES-- '    '
         BAL,R11  MSGLL       ****  OUTPUT BLANKS TO LL
         LI,R12   ASTER             '*****--**'
         BAL,R11  MSGLL       ****  OUTPUT TO LL
         LI,R12   TOP               TOP OF PAGE
         BAL,R11  MSGLL       ****  OUTPUT TO LL
         PLW,R11  STK               RESTORE RETURN
         B        *R11        --->  RETURN
*----------------
NOTDWN   EQU      %
         LW,R15   BLK
         LI,R5    IMGSZ-PBPRV+BA(IMG)+3
         SLS,R5   -2
         STW,R15  WA(PBPRV)-1,R5    BLANK OUT MESSAGE AREA
         BDR,R5   %-1
         LH,R13   DCT1P,R1          GET DEV.ADDR.(PRIMARY)
         STW,R13  TMPADDR           SAVE FOR DUAL CHECK
         LI,R5    4                 # CHAR.
         STH,R13  R13               LEFT JUSTIFY
         BAL,R10  HEXHEXE     ****  CONVERT TO EBCDIC
*
*  R14 = EBCDIC VALUE
*
         SCD,R14  -24               PUT
         LCI      2                   DEV.ADDR.(PRIM.)
         STM,R14  WA(DVAD)            INTO MESSAGE
         LI,R5    2                 # CHAR.
         STB,R1   R13               LEFT JUSTIFY
         BAL,R10  HEXHEXE     ****  CONVERT DCT INDEX TO EBCDIC
*
*  R14 = EBCDIC VALUE
*
         SLS,R14  16                PUT
         AI,R14   '  '                DCT INDEX
         SCS,R14  -8                  INTO
         STW,R14  WA(DCTI)            MESSAGE
         LD,R14   DCT16,R1          GET YYNDD(R14=---Y,R15=YNDD)
         SLD,R14  16                PUT
         AI,R15   '  '                YYNDD
         LCI      2                   INTO
         STM,R14  WA(DVID)            MESSAGE
         LB,R4    DCT4,R1           GET TYPE MNEMONIC INDEX
         LH,R15   OH:NM,R4          GET TYPE MNEMONIC
         LI,R5    1                 DCT INDEX
GO2NXT   EQU      %
         CB,R4    DCT4,R5
         BE       CHK4EQU     YES-- FIND EQUIVALENT TYPE
         AI,R5    1           NO--- TO NEXT DCT
         CW,R5    R1
         BL       GO2NXT      NO--- BACK TO WHERE WE STARTED
         B        %           YES-- THIS SHOULD NEVER HAPPEN
*----------------
CHK4EQU  EQU      %
         CW,R5    R1
         BNE      NOTOT       NO--- 1ST TIME THIS TYPE FOUND
         STH,R15  WA(TP)      YES-- PUT DEV.TYPE IN MESG.
         LI,R5    2                 # CHAR.TO CONVERT
         LH,R13   SH:RTOT,R4        GET RESOURCE TOTAL COUNT
         STH,R13  R13               LEFT JUSTIFY
         BAL,R10  HEXHEXE     ****  CONVERT COUNT TO EBCDIC
*
*  R14 = EBCDIC VALUE
*
         STB,R14  WA(TOT)+1         PUT
         SLS,R14  -8                  COUNT
         OR,R14   BLK                 INTO
         STW,R14  WA(TOT)             MESSAGE
NOTOT    EQU      %
         LI,R5    4                 # CHAR.
         LH,R13   DEVMOD#,R1        GET DEV.MOD#
         STH,R13  R13               LEFT JUSTIFY
         BAL,R10  HEXHEXE     ****  CONVERT TO EBCDIC
*
*  R14 = EBCDIC VALUE
*
         XW,R14   R15               PUT
         STB,R15  WA(DVTP)+2        PUT
         SCD,R14  -8                  DEV.TYPE MNEMONIC
         STW,R15  WA(DVTP)+1          AND
         LI,R5    3                   DEV.MODEL #
         STB,R14  WA(DVTP),R5         INTO MESSAGE
         PSW,R1   STK               SAVE DCT INDEX
         AI,R1    -BATAPE
         BLZ      NO:PAC      NO--- DISK PACK
         CI,R1    AVRTBLSIZ   YES-- POSSIBLY
         BL       NO:PAC      NO--- DISK PACK
         CI,R1    AVRTBLNE    YES-- POSSIBLY
         BGE      NO:PAC      NO--- DISK PACK
         LW,R5    PRIV        YES-- 'PRIV'
         LD,R14   AVRTBL,R1         GET AVR INFO
         CI,R15   0
         BGEZ     %+2         YES-- PRIVATE PACK
         LW,R5    PUB         NO--- PUBLIC ('PUB')
         STH,R5   WA(PBPRV)+1       PUT
         SLS,R5   -16                 PRIV/PUB
         LI,R1    1                   INTO
         STH,R5   WA(PBPRV),R1        MESSAGE
NO:PAC   EQU      %
         PLW,R1   STK               RESTORE DCT INDEX
         LB,R4    DCT4,R1           DEV.TYPE INDEX
         LB,R12   TB:FLGS,R4        DEV.TYPE FLAGS
         LI,R4    #DEVTYPS-1
TRY:NXT  EQU      %
         CH,R12   DEVTYPS,R4
         BE       NOT:PART    YES-- FIND NON-PART.TYPE
         BDR,R4   TRY:NXT     NO--- DONE
         LB,R12   DCT24,R1
         CI,R12   NOPARTC
         BANZ     NOT:PRTC    YES-- CONT.NON-PARTITIONABLE
         CI,R12   NOPARTD     NO---
         BANZ     NOT:PRTD    YES-- DEVICE NON-PARTITIONABLE
         LI,R12   0           NO--- SET FLAG
IS:SYMBT EQU      %
         LB,R4    SNDDX             SYMBIONT TABLE SIZE
TRY:SYMB EQU      %
         CB,R1    SNDDX,R4
         BE       IS:SYMB     YES-- SYMBIONT TYPE DEVICE
         BDR,R4   TRY:SYMB    NO--- DONE
*                             YES--
PRNTIMG  EQU      %
         LCI      R2-R1+1
         PSM,R1   STK               SAVE DCT INDEXES
         LI,R12   IMG
         BAL,R11  MSGLL       ****  OUTPUT TO LL
         LCI      R2-R1+1
         PLM,R1   STK               RESTORE DCT INDEXES
         LB,R5    DCT2,R1           GET CHAN.(QUEUING) INDEX
         LB,R5    CIT3,R5           GET CHAN.FLAGS
         CI,R5    DUALACS
         BAZ      INCTONXT    NO--- DUAL ACCESS
         LW,R14   BLK         YES-- BLANKS
         STW,R14  WA(DVTP)+1        PUT BLANKS INTO MESSAGE
         STW,R14  WA(DVTP)+2          OVER DEV.TYP.MNEMONIC
         STW,R14  WA(TP)              , TYPE,
         STW,R14  WA(TOT)             RESOURCE
         STW,R14  WA(TOT)+1           TOTAL,
         LW,R14   IMGX                & DEV.MOD#
         STW,R14  IMG
         LH,R13   DCT1A,R1          GET DEV.ADDR.(ALTERNATE)
         CW,R13   TMPADDR
         BE       INCTONXT    YES-- DEV.ADDR.= PRIM., SKIP THIS ADDR.
         STW,R13  TMPADDR     NO--- SAVE, USED AS FLAG TO EXIT FROM HERE
         LI,R5    4                 # CHAR.
         STH,R13  R13               LEFT JUSTIFY
         BAL,R10  HEXHEXE     ****  CONVERT TO EBCDIC
*
*  R14 = EBCDIC VALUE
*
         LW,R15   BLK               PUT
         SCD,R14  -24                 DEV.ADDR.(ALT.)
         LCI      2                   INTO
         STM,R14  WA(DVAD)            MESSAGE
         B        PRNTIMG
*----------------
NOT:PART EQU      %
         LD,R14   MV:NT:PT
         B        MV:IT:IN          MOVE TO MESG.
*----------------
NOT:PRTD EQU      %
         LD,R14   MV:NT:PD
FLGSYMB  EQU      %
         EXU      MV:IT:IN          MOVE TO MESSAGE
         LI,R12   -1                SET FLAG FOR SYMB.CHECK
         B        IS:SYMBT
*----------------
NOT:PRTC EQU      %
         LD,R14   MV:NT:PC
         B        FLGSYMB           MOVE TO MESG.
*----------------
IS:SYMB  EQU      %
         LD,R14   MV:IS:SM
         CI,R12   0
         BEZ      MV:IT:IN    NO--- SPECIAL SYMB.CHECK
         LW,R14   SYMBMX      YES--
         STW,R14  WA(:SYM)          ':SYM' TO MESSAGE
         B        PRNTIMG
*----------------
MV:IT:IN EQU      %
         MBS,R14  0                 MOVE TO MESSAGE THE INFO
         B        PRNTIMG
*----------------
         PAGE
*****************
*  DOREMOVE ROUTINE
*
*    PROCESS REMOVE REQUESTS FROM CONFIG.TABLE
*
*    CALLED:
*        R11 =    LINK
*
*****************
         SPACE    3
DOREMOVE EQU      %           <---  ENTER
         MTW,0    FND:REMOVE
         BEZ      *R11        --->  RETURN, NO :REMOVE REQUESTS
         LW,R3    Y04
         STW,R3   REM:PART          LOOK FOR :REMOVE ENTRIES
         STW,R3   REMVFLG           SET REMOVE FLAG TO TRUE
         B        DOREMV      --->  GO DO REMOVE (LIKE PART.)
*----------------
         PAGE
*****************
*  DOPART ROUTINE
*
*    PROCESS PARTITIONING & REMOVE REQUESTS FROM CONFIG.TABLE
*
*    CALLED:
*        R11 =    LINK
*
*****************
         SPACE    3
DOPART   EQU      %           <---  ENTER
         LW,R3    Y1
         STW,R3   REM:PART          LOOK FOR :PART ENTRIES
         LI,R3    0
         STW,R3   REMVFLG           SET REMOVE FLAG TO FALSE
         MTW,0    FND:PART
         BEZ      *R11        --->  RETURN, NO :PART REQUESTS
DOREMV   EQU      %                 PROCESS :PART/:REMOVE REQUESTS
         PSW,R11  STK               SAVE RETURN
         LI,R3    0                 ENTRY INDEX INTO CONFIG.TABLE
NXT:PART EQU      %
         LW,R8    REM:PART          FLAG FOR :PART/:REMOVE ENTRY SEARCH
         BAL,R11  FINDENT     ****  FIND AN ENTRY IN CONFIG.TABLE
*
*  R3 =  INDEX INTO CONFIG.TABLE OF PARTITION ENTRY
*  CC1=1 END OF CONFIG.TABLE FOUND
*
         BCR,8    PROCPART    NO--- END OF TABLE
         LI,R12   TOP         YES-- 'TOP OF PAGE'
         BAL,R11  MSGLL       ****  OUTPUT TO LL
         MTW,0    REMVFLG
         BNEZ     CHK:REMV    YES-- REMOVE
*                             NO--- PART
         PLW,R11  STK               RESTORE RETURN
         B        *R11        --->  RETURN
*----------------
PROCPART EQU      %
         LI,R1    0
         STW,R1   SAMFLG            RESET FLAG 4 LOOKING 4 LIKE DEV.ADDR.
         LI,R1    DCTSIZ            # ENTRIES IN DCT
NXTDVAD  EQU      %
         LI,R2    1                 CONT.REQUEST FLAG
         LW,R13   E0,R3             GET ENTRY(FLAGS & DEV.ADDR.)
         BLZ      %+2         YES-- CONTROLLER REQUEST
         LI,R2    0           NO--- DEVICE, DEV.REQUEST FLAG
         AND,R13  M16               KEEP ONLY DEV.ADDR.
DOPARTCD EQU      %
         CH,R13   DCT1P,R1
         BE       CHKNOHER    YES-- FIND DEV.ADDR.(PRIM.)
         LI,R6    DCT1A       NO---
         CI,R6    DCT1P
         BE       NEXDCT      YES-- SINGLE ACCESS SYSTEM(NON-DUAL)
         CH,R13   DCT1A,R1    NO---
         BE       CHKNOHER    YES-- FIND DEV.ADDR.(ALT.)
NEXDCT   EQU      %           NO---
         BDR,R1   DOPARTCD    NO--- DONE SEARCH
         MTW,0    SAMFLG      YES--
         BNEZ     NXT:PART    YES-- LOOKING FOR LIKE DEV.ADDR.
NOPRESNT EQU      %           NO---
         LI,R6    PERMDWNM          'NOT PRESENT'
BILDMSG  EQU      %
         PSW,R3   STK               SAVE INDEX
         EXU      DVCNTMOV,R2       PARAM.ADDR. TO R8
         LD,R8    *R8               ', DEV.'  OR  ',CONT.'
         MBS,R8   0                   TO MESSAGE
         LI,R3    0
         MTW,0    REMVFLG
         BNEZ     %+2         YES-- REMOVE
         LI,R3    1           NO--- PART
         EXU      PARTREMV,R3       PARAM.ADDR. TO R8
         LD,R8    *R8               'PARTITION' OR 'REMOVE'
         MBS,R8   0                   TO MESSAGE
         BAL,R11  MVTOMSG     ****  SET UP MESSAGE
         LI,R12   CANTPART          'CANNOT XXXXXX, NDD---'
         BAL,R11  MSGLL       ****  OUTPUT TO LL
         PLW,R3   STK               RESTORE INDEX
         B        NXT:PART
*----------------
CHKNOHER EQU      %
         MTW,0    REMVFLG
         BNEZ     ISPRMDWN    YES--  REMOVE
*                             NO---
         LB,R6    DCT4,R1           GET TYPMNE INDEX
         LB,R6    TB:FLGS,R6        GET DEV.TYPE FLAGS
         LI,R4    #DEVTYPS-1        # DEV.TYPES
NXTYPMNE EQU      %
         CH,R6    DEVTYPS,R4
         BE       NOTPART     NO--- LEGITIMATE DEVICE
*                             YES--
         BDR,R4   NXTYPMNE    NO--- DONE SEARCH
ISPRMDWN EQU      %           YES--
         EXU      DCT:FLG1,R2       GET FLAGS IN R6
         EXU      PRMDWN,R2         CHECK PERM.DOWN (R6)
         BANZ     NOPRESNT    NO--- RESOURCE PRESENT
         MTW,0    REMVFLG     YES--
         BNEZ     CHKCNT      YES-- REMOVE TYPE
         EXU      NOPARTN,R2  NO--- CHECK NON-PARTITIONABLE (R6)
         BAZ      CHKDWN      YES-- RESOURCE PARTITIONABLE
NOTPART  EQU      %           NO---
         LI,R6    NOPARTM           'NON-PARTITIONABLE'
         B        BILDMSG
*----------------
CHKDWN   EQU      %
         EXU      DCT:FLG2,R2       GET FLAGS IN R6
         EXU      ALREDWN,R2        CHECK ALREADY DOWN (R6)
         BAZ      CHKCNT      NO--- ALREADY DOWN
PARTNOW  EQU      %           YES--
         LI,R6    ALREDPTM          'ALREADY PARTITIONED'
         B        BILDMSG
*----------------
         SPACE    3
CHKPRVDP EQU      %
         MTW,0    REMVFLG
         BNEZ     REMOVEIT    YES-- REMOVE TYPE
*                             NO--- PART
         LCI      (PRTMSZ+3)**-2
         LM,R10   DEVALU            SET MESSAGE
         STM,R10  PARTM               TO 'DEV.'
         BAL,R11  PRIVPACK    ****  CHECK IF PRIVATE PACK
*
*  NO RETURN IF PUBLIC DISK PACK
*
         LI,R14   0                 FLAG TO DECREMENT RESOURCE COUNT
         CLM,R1   RBLIMS
         BCR,9    REMOTEP     YES-- REMOTE BATCH DEVICE
         LB,R4    SNDDX       NO--- SYMBIONT TABLE SIZE
NXTSNDX  EQU      %
         CB,R1    SNDDX,R4          CHECK DCT INDEX
         BE       FNDSYMB     YES-- SYMBIONT DEVICE
         BDR,R4   NXTSNDX     NO--- DONE SEARCH
         B        PART:IT     YES--
*----------------
FNDSYMB  EQU      %
         LI,R6    'Q'
         LB,R12   SYMX,R4           INPUT/OUTPUT FLAG
         CI,R12   OUTPUT
         BANZ     %+2         YES-- OUTPUT SYMBIONT
         LI,R6    'L'         NO--- INPUT
         STB,R6   SSIG,R4           SET SYMBIONT SIGNAL
         LI,R6    NOTAVAIL
         STB,R6   SSTAT,R4          SET STATUS = NOT AVAILABLE
         LI,R14   1                 FLAG TO NO DECREMENT RESOURCE COUNT
PART:IT  EQU      %
         PSW,R3   STK               SAVE PART.INDEX
         PSW,R14  STK               SAVE FLAG FOR LATER
         BAL,R11  MVNDD       ****  SET UP MESSAGE WITH 'NDD'
*
*  R6 =  EBCDIC 'NDD' LEFT JUSTIFIED BLANK FILLED
*
         STW,R6   PKTP3             'NDD'
         STW,R6   PKTP4             'NDD'
         STH,R6   NDDPARTM+1        PUT
         SLS,R6   -16                 'NDD'
         LI,R3    1                   INTO
         STH,R6   NDDPARTM,R3         MESSAGE
         LI,R12   PARTM             'NDD PART.' (DEV.)
         BAL,R11  MSGLL       ****  OUTPUT TO LL
         PLW,R14  STK               RESTORE FLAG
         PLW,R3   STK               RESTORE PART.INDEX
         LB,R6    DCT3,R1           GET FLAGS (DEV.)
         LW,R12   R6
         OR,R6    ALREDWN,R2        SET DOWND FLAG
         STB,R6   DCT3,R1
         LB,R6    DCT24,R1          GET FLAGS (CONT.)
         OR,R6    CONTRFLG          SET DOWNC FLAG (IF CONT.REQUESTED)
         OR,R6    NOALLOC           SET NO ALLOCATE FLAG
         STB,R6   DCT24,R1
         CI,R14   0
         BNEZ     DNTDECR     YES-- SYMBIONT DEVICE
         LB,R4    DCT4,R1     NO--- DEV.TYPE INDEX
         LI,R5    SV:RSIZ+1
NXTRSRCP EQU      %
         CB,R4    SB:RTY,R5
         BE       DECR        YES-- FIND DEV.RESOURCE
         BDR,R5   NXTRSRCP    NO--- DONE SEARCH
         B        DNTDECR     YES--
*----------------
DECR     EQU      %
         LW,R6    R12
         EXU      ALREDWN,R2        CHECK IF DEV.ALREADY ACCOUNTED 4(R6)
         BANZ     DNTDECR     YES-- ACCOUNTING DONE
         MTH,-1   SH:RTOT,R5  NO--- DECREMENT TOTAL COUNT
DNTDECR  EQU      %
         BAL,R11  TAPEPACK    ****  DISPLAY SPECIAL MESSAGE IF TAPE/PACK
NXTDEV   EQU      %
         MTW,0    CONTRFLG
         BNEZ     NXDV:CNT    --->  DEV.IN CONT.REQUEST, EXIT
         BDR,R1   MORESAME    YES-- POSSIBLY MORE DEV.ADDR.SAME
         B        NXT:PART    NO---
*----------------
MORESAME EQU      %
         MTW,1    SAMFLG            SET LOOKING FOR MORE DEV.ADDR.FLAG
         B        NXTDVAD           CONTINUE SEARCH
*----------------
REMOVEIT EQU      %
         LW,R6    R1                DCT INDEX
         LI,R4    1                 # ENTRIES TO SET
         LI,R0    -1                - COUNT
         LI,R2    PERDWND+DONTALLO  DEV.PERM.DOWN FLAGS
         PSW,R1   STK               SAVE DCT INDEX
         BAL,R11  SETPERDN    ****  SET DEV.NOT AVAIL.
         PLW,R1   STK               RESTORE DCT INDEX
         B        NXTDEV
*----------------
         SPACE    3
*****************
*  DEVINCNT ROUTINE (SUB-ENTRY TO PART ROUTINE)
*
*    ENTER:
*        R1 =     DCT INDEX
*        R13=     DEV.ADDR.
*        CONTRFLG=DOWNC FLAG
*
*****************
         SPACE    3
DEVINCNT EQU      %
         LB,R10   DCT24,R1          GET FLAGS
         CI,R10   PERDWND
*                             NO--- DEV.PRESENT
         BANZ     NXDV:CNT    --->  EXIT IF NOT
         B        CHKPRVDP          DO PARTITIONING
*----------------
         SPACE    3
*****************
CHKCNT   EQU      %
         LI,R10   0
         STW,R10  CONTRFLG          SET DEV.REQUESTED
         CI,R2    0
         BEZ      CHKPRVDP    YES-- DEV.REQUEST
         LB,R6    DCT2,R1     NO--- CONTROLLER
*
*  IF A PACK CONTROLLER:
*    LOOK AT ALL DEVICES WITHIN IT FOR PRIVATE & PARTITIONABLE
*    LOOK AT ALL DEVICES FOR PARTITIONABLE EVEN IF NOT PACK
*
         LI,R5    1                 DCT INDEX
         LI,R7    0                 1ST DCT(I) FOR DEVICE
CHK4CIT  EQU      %
         LB,R12   DCT2,R5
         CW,R12   R6
         BE       CITSAME     YES-- FIND DEV.IN CONT.
CKNXTCIT EQU      %           NO---
         AI,R5    1                 TO NEXT DCT
         CI,R5    DCTSIZ
         BG       ENDCTCHK    YES-- END OF DCT'S
         B        CHK4CIT     NO---
*----------------
CITSAME  EQU      %
         LI,R9    MIOPCNTM          MIOP MASK
         CI,R13   MIOPMASK          MASK TO CHK.4 MIOP
         BANZ     %+2         YES-- MIOP TYPE
         LI,R9    SIOPCNTM    NO--- SIOP, SIOP MASK
         LH,R8    DCT1P,R5          GET DEV.ADDR.
         CS,R8    R13
         BNE      CKNXTCIT    NO--- FIND DESIRED CONT.
         MTW,0    R7          YES--
         BNEZ     %+2         YES-- 1ST DCT(I) FOR DEV.FOUND
         STW,R5   R7          NO--- SAVE 1ST DCT(I) FOR DEVICE
         MTW,0    REMVFLG
         BNEZ     ENDCTCHK    YES-- REMOVE
*                             NO--- PART
         STW,R1   R12               SAVE DCT INDEX
         LW,R1    R5                CURRENT DCT INDEX
         BAL,R11  PRIVPACK    ****  CHECK IF PRIVATE PACK
*
*  NO RETURN IF PUBLIC PACK
*
         LW,R1    R12               RESTORE DCT INDEX
         LB,R12   DCT24,R5          CANNOT PARTITION CONTROLLER
         CI,R12   NOPARTD             IF A DEVICE WITHIN IT IS
         BANZ     NOTPART             NOT PARTITIONABLE
*                                   ALL'S OK
         B        CKNXTCIT
*----------------
ENDCTCHK EQU      %
*
*  R7 =  INDEX OF 1ST DEV. IN CONT.
*
         LI,R2    0                 DEV.PART.FLAG
         LI,R10   DOWNC
         STW,R10  CONTRFLG          SET CONT.REQUESTED
         LW,R8    R13               SAVE DEV.ADDR. (ORIGINAL)
PRT:CONT EQU      %
         LW,R1    R7
         LH,R13   DCT1P,R7          GET CURRENT DEV.ADDR.
         LI,R9    MIOPCNTM          MIOP TYPE MASK
         CI,R13   MIOPMASK          MASK TO CHK.4 MIOP
         BANZ     %+2         YES-- MIOP TYPE
         LI,R9    SIOPCNTM    NO--- SIOP, SIOP TYPE MASK
         CS,R8    R13
         BNE      XITCNT      YES-- END OF CONTROLLER
         LCI      R8-R7+1     NO--- SAVE DCT INDEX
         PSM,R7   STK                 & ORIGINAL DEV.ADDR.
         B        DEVINCNT    ****  PART.DEV.& CONT.
*
*  R E T U R N   TO   H E R E
*
NXDV:CNT EQU      %
         LCI      R8-R7+1           RESTORE DCT INDEX
         PLM,R7   STK                 & ORIGINAL DEV.ADDR.
         AI,R7    1
         LB,R13   DCT2,R7
         CB,R13   DCT2,R1
         BE       PRT:CONT    NO--- END OF DEV.IN CONT.
         MTW,0    REMVFLG     YES--
         BNEZ     NXT:PART    YES-- REMOVE
         LW,R13   R8          NO--- PART, ORIGINAL DEV.ADDR.
         LI,R2    1                 SET CONT.REQUEST FLAG
         LB,R10   DCT24,R1
         CI,R10   DOWNC
         BAZ      NOPRESNT    NO--- WAS CONT.PART.
XITCNT   EQU      %           YES--
         LCI      (PRTMSZ+3)**-2
         LM,R10   CONTVALU          SET MESSAGE
         STM,R10  PARTM               TO 'CONT.'
         PSW,R3   STK               SAVE PART.INDEX
         LW,R13   R8
         BAL,R11  MVNDD       ****  SET UP MESSAGE WITH 'NDD'
*
*  R6 =  EBCDIC 'NDD' LEFT JUSTIFIED BLANK FILLED
*
         STH,R6   NDDPARTM+1        PUT
         SLS,R6   -16                 'NDD'
         LI,R3    1                   INTO
         STH,R6   NDDPARTM,R3         MESSAGE
         LI,R12   PARTM             'NDD PART.' (CONT.)
         BAL,R11  MSGLL       ****  OUTPUT TO LL
         PLW,R3   STK               RESTORE PART.INDEX
         B        NXT:PART
*----------------
REMOTEP  EQU      %
         LI,R11   OFFBIT
         STS,R11  RB:FLAG,R1        SET REMOTE BATCH STATUS TO OFF
         B        PART:IT
*----------------
         PAGE
*****************
*  TAPEPACK ROUTINE
*
*    CHECK IF TAPE/PACK & DISPLAY SPECIAL MESSAGE
*
*    ENTER:
*        R1 =     DCT INDEX
*
*    CALLED:
*        R11 =    LINK
*
*****************
         SPACE    2
TAPEPACK EQU      %           <---  ENTER
         LW,R4    R1                DCT INDEX
         AI,R4    -BATAPE
         BLZ      *R11        --->  RETURN, NOT TAPE OR PACK
         CI,R4    AVRTBLNE
         BGE      *R11        --->  RETURN, NOT TAPE OR PACK
         PSW,R11  STK               SAVE RETURN
         LW,R12   TAPE              'TAPE'
         CI,R4    AVRTBLSIZ
         BL       %+2               TAPE
         LW,R12   PACK              PACK, 'PACK'
         STW,R12  PKTP1             'PACK' / 'TAPE'
         LB,R5    DCT4,R1           TYPE MNEMONIC INDEX
         LH,R12   OH:NM,R5          TYPE MNEMONIC
         LI,R5    PKTP2
         STH,R12  0,R5              'YY'
         LI,R12   PKTP:PRT          'XXXX YYNDD PART.,DIAL #V NOT AVAIL.'
         BAL,R11  MSGLL       ****  OUTPUT TO LL
         PLW,R11  STK               RESTORE RETURN
         B        *R11        --->  RETURN
*----------------
         PAGE
*****************
*  FINDENT ROUTINE
*
*    FIND AN ENTRY IN CONFIG.TABLE CORRESPONDING
*    TO A REQUESTED TYPE, (I.E., TYPE VS. PART)
*
*    ENTER:
*        R3 =     CURRENT INDEX INTO TABLE
*        R8 =     FLAG FOR TYPE OF ENTRY DESIRED (CRITERIA)
*                 = X'10000000' FOR :PART
*                 = X'00000000' FOR :TYPE
*                 = X'04000000' FOR :REMOVE
*
*    EXIT:
*        CC1 = 0  NOT END OF INFO
*          R3=    INDEX OF ENTRY IN TABLE
*        CC1 = 1  END OF INFO
*
*    CALLED:
*        R11 =    LINK
*
*****************
         SPACE    3
FINDENT  EQU      %           <---  ENTER
         CI,R3    0
         BEZ      2NXT        YES-- 1ST TIME IN
         LW,R1    Y14         NO--- MASK
         CW,R1    INT:BUF+V1,R3
         BANZ     2NXT        YES-- :PART/:REMOVE ENTRY
*                             NO--- :TYPE
         LW,R1    INT:BUF+V1,R3
         AI,R3    1
         CW,R1    Y2
         BAZ      2NXT        NO--- DUAL ACCESS ENTRY (:TYPE)
         AI,R3    1           YES-- BYPASS EXTRA WORD
2NXT     EQU      %
         AI,R3    1                 TO NEXT ENTRY
         CW,R3    INT:BUF+V1
         BLE      CHK:ENT     NO--- END OF INFO
         LCI      8           YES--
         B        *R11        --->  RETURN
*----------------
CHK:ENT  EQU      %
         LW,R9    Y14
         CS,R8    INT:BUF+V1,R3
         BNE      FINDENT     NO--- THIS A GOOD ENTRY
         LCI      0           YES--
         B        *R11        --->  RETURN
*----------------
         PAGE
*****************
*  CNVTMOD# ROUTINE
*
*    CONVERT DEV/CONT MODEL #'S IN EBCDIC TO HEX
*
*    CALLED:
*        R2 =     DEV.MOD#
*        R3 =     CONT.MOD#
*
*    EXIT:
*        R12 =    DEV.MOD# (WITH SIGN EXT.)
*        R13 =    CONT.MOD#(WITH SIGN EXT.)
*
*    CALLED:
*        R11 =    LINK
*
*****************
         SPACE    3
CNVTMOD# EQU      %           <---  ENTER
         LCI      R15-R14+1+R11-R0+1
         PSM,R14  STK               SAVE REGISTERS
         MTW,1    SPECNVRT          SET SPECIAL CONVERT FLAG
         LI,R5    4                 # CHAR.
         LW,R13   R2                DEV.MOD#
         BAL,R10  HEXEHEX     ****  CONVERT TO HEX
*
*  R14 = CONVERTED VALUE
*
         STH,R14  R12
         LH,R12   R12               DEV.MOD# IN HEX (SIGN EXT.)
         LI,R5    4                 # CHAR.
         LW,R13   R3                CONT.MOD#
         BAL,R10  HEXEHEX     ****  CONVERT TO HEX
*
*  R14 = CONVERTED VALUE
*
         STH,R14  R13
         LH,R13   R13               CONT.MOD# IN HEX (SIGN EXT.)
         MTW,-1   SPECNVRT          RESET CONVERT FLAG
         LCI      R15-R14+1+R11-R0+1
         PLM,R14  STK               RESTORE REGISTERS
         B        *R11        --->  RETURN
*----------------
         PAGE
*****************
*  DORECNFG ROUTINE
*
*    PROCESS CONFIGURATION REQUESTS FROM CONFIG.TABLE
*
*    CALLED:
*        R11 =    LINK
*
*****************
         SPACE    3
DORECNFG EQU      %           <---  ENTER
         MTW,0    FND:TYPE
         BEZ      *R11        --->  RETURN, NO :TYPE ENTRIES
*                                   PROCESS :TYPE REQUESTS
         PSW,R11  STK               SAVE RETURN
         LI,R2    PERDWND+PERDWNC+DONTALLO
*                                   DEV./CONT.PERM.DOWN FLAGS
         LI,R3    0                 ENTRY INDEX INTO CONFIG.TABLE
         BAL,R11  SETPERDN    ****  SET ALL PERIPHERALS PERM.DOWN
NXT:TYPE EQU      %
         LI,R8    0                 FLAG FOR :TYPE ENTRY SEARCH
         BAL,R11  FINDENT     ****  FIND AN ENTRY IN CONFIG.TABLE
*
*  R3 =  INDEX INTO CONFIG.TABLE OF TYPE ENTRY
*  CC1=1 END OF CONFIG.TABLE FOUND
*
         BCR,8    PROCTYPE    NO--- END OF TABLE
*                             YES--
********
         SPACE    3
********
*
*  SUB-ENTRY INTO DORECNFG, USED BY DOPART WHEN REMOVE TYPE
*
********
         SPACE    3
CHK:REMV EQU      %           <---  ENTER
         LI,R1    1                 DCT INDEX
         LI,R2    DCTSIZ            # DCT ENTRIES
CHK:UP   EQU      %
         LB,R11   DCT24,R1
         CI,R11   PERDWND
         BAZ      2NXAVR      YES-- DEV.AVAILABLE
         MTW,0    REMVFLG     NO---
         BNEZ     DWNBYREM    YES-- REMOVE
         LW,R4    R1          NO---
         MTW,0    SAVEFLG
         BEZ      CHK4AVR     NO--- :SAVE COMMAND SPECIFIED
         LB,R11   DCT24,R1    YES--
         CI,R11   PERDWNC
         BAZ      2NXAVR      YES-- CONTROLLER UP
         LCI      2           NO---
         PSM,R1   STK               SAVE INDEXES
         LI,R2    0                 DEV.AVAILABLE FLAG
         BAL,R11  SETPERDN    ****  SET DEV.AVAILABLE & COUNTS
         LCI      2
         PLM,R1   STK               RESTORE INDEXES
         B        2NXAVR
*----------------
CHK4AVR  EQU      %
         LI,R11   0
         STB,R11  DCT22,R4          CLEAR DISC ADDR.CONVERSION TABLE
         LI,R11   -1
         STH,R11  DCT1P,R4          SET DCT1 ENTRY
         STH,R11  DCT1A,R4            TO X'FFFF'
         AI,R4    -BATAPE
         BLZ      2NXAVR:1    NO--- TAPE OR DISK PACK DEV.
         CI,R4    AVRTBLSIZ   YES-- POSSIBLY
         BL       SETNOU      YES-- TAPE DEV.
         CI,R4    AVRTBLNE    NO---
         BGE      2NXAVR:1    NO--- DISK PACK DEV.
         MTH,1    AVRNOU,R4   YES-- MAKE DISK PACK LOOK BUSY(I.E.,DOWN)
SETNOU   EQU      %
         LD,R8    AVRTBL,R4         MAKE
         AI,R9    NOU                 TAPE OR DISK PACK
         STD,R8   AVRTBL,R4           LOOK BUSY (I.E.,DOWN)
2NXAVR:1 EQU      %
         MTW,0    REMVFLG
         BNEZ     POSTAVR     YES-- REMOVE TYPE
*                             NO---
2NXAVR   EQU      %
         AI,R1    1
         BDR,R2   CHK:UP      NO--- DONE
         LI,R11   0           YES--
         LB,R1    SNDDX             SIZE OF SYMBIONT TABLES
ZAPSNDDX EQU      %
         LB,R2    SSTAT,R1          GET STATUS
         CI,R2    NOTAVAIL
         BNE      %+2         YES-- SYMBIONT AVAILABLE
         STB,R11  SNDDX,R1    NO--- REMOVE COMPLETELY
         BDR,R1   ZAPSNDDX    NO--- DONE
         PLW,R11  STK         YES-- RESTORE RETURN
         B        *R11        --->  RETURN
*----------------
DWNBYREM EQU      %
         CI,R11   PERDWNC
         BANZ     2NXAVR      YES-- CONT.PERM.DOWN
         LH,R10   DCT1P,R1    NO--- ORIGINAL DEV.ADDR.
         CI,R10   -1
         BE       2NXAVR      YES-- DEV.ALREADY PERM.DOWN
         LI,R13   0           NO--- TOTAL # ENTRIES
         LI,R14   0                 # ENTRIES PERM.DOWN
         LI,R15   0                 1ST ENTRY INDEX
         LB,R8    DCT4,R1           DEV.TYPE INDEX
         LI,R6    1                 DCT INDEX
         LI,R5    DCTSIZ            # ENTRIES IN DCT
CHKAGAIN EQU      %
         LB,R9    DCT4,R6           GET TYPE MNEMONIC INDEX
         CW,R9    R8
         BE       SAMECHAN    YES-- EQUIVALENT TYPE INDEX VALUES
NEWENT   EQU      %           NO---
         AI,R6    1                 TO NEXT DCT
         BDR,R5   CHKAGAIN    NO--- DONE SEARCH
SETINDX  EQU      %           YES--
         LW,R4    R15               GET INDEX OF 1ST ENTRY
         BEZ      2NXAVR      NO--- ANY FOUND(CANT HAPPEN, ACTUALLY)
         LH,R12   DCT1P,R4    YES-- GET DEV.ADDR.
         LI,R11   MIOPCNTM          MIOP MASK
         CI,R10   MIOPMASK          CHECK 4 MIOP
         BANZ     %+2         YES-- MIOP TYPE
         LI,R11   SIOPCNTM    NO--- SIOP, SIOP MASK
         CS,R10   R12
         BNE      GETNXDCT    NO--- SAME CONTROLLER
         CW,R13   R14         YES--
         BNE      CHK4AVR     NO--- CONT.PERM.DOWN ALSO(VALUES =)
         LB,R11   DCT24,R4    YES--
         OR,R11   CPERDWN           SET CONT.PERM.DOWN
         STB,R11  DCT24,R4
         B        CHK4AVR
*----------------
POSTAVR  EQU      %
         AI,R15   1                 NEXT DCT
         AI,R13   -1                TOTAL # ENTRIES -1
         BDR,R14  SETINDX     NO--- DONE
         B        2NXAVR      YES--
*----------------
GETNXDCT EQU      %
         AI,R15   1                 NEXT DCT
         CI,R15   DCTSIZ
         BGE      2NXAVR      YES-- END OF DCT
         B        SETINDX     NO---
*----------------
SAMECHAN EQU      %
         LH,R12   DCT1P,R6          GET DEV.ADDR.
         CI,R12   -1
         BE       NEWENT      YES-- DEV.ALREADY PERM.DOWN
         LI,R11   MIOPCNTM    NO--- MIOP MASK
         CI,R10   MIOPMASK          CHECK 4 MIOP
         BANZ     %+2         YES-- MIOP TYPE
         LI,R11   SIOPCNTM    NO--- SIOP, SIOP MASK
         CS,R10   R12
         BNE      NEWENT      NO--- SAME CONTROLLER
         AI,R13   1           YES-- TOTAT # ENTRIES
         LB,R9    DCT24,R6
         CI,R9    PERDWND
         BAZ      NEWENT      NO--- THIS DEV.PERM.DOWN
         AI,R14   1           YES-- # ENTRIES PERM.DOWN +1
         CI,R15   0
         BNEZ     NEWENT      YES-- 1ST DCT FOUND ALREADY
         STW,R6   R15         NO--- SAVE 1ST DCT INDEX
         B        NEWENT
*----------------
PROCTYPE EQU      %
         LW,R13   E0,R3             GET ENTRY WRD-1 (FLAGS & DEV.ADDR.)
         CW,R13   Y4
         BANZ     NXT:TYPE    NO--- DEV.IN SYSTEM
         LW,R12   E1,R3       YES-- GET ENTRY WRD-2 (DEV/CONT MOD#'S)
         LH,R11   R12               DEV.MOD# (WITH SIGN EXT.)
         STH,R12  R12
         LH,R12   R12               CONT.MOD# (WITH SIGN EXT.)
         LI,R1    1                 CURRENT DCT INDEX
         LI,R2    DCTSIZ            # DCT ENTRIES
CHKNXDCT EQU      %
         CH,R11   DEVMOD#,R1
         BE       DEVMODOK    YES-- FIND DEV.MOD#
NOTHIS1  EQU      %           NO---
         AI,R1    1                 NEXT DCT
         BDR,R2   CHKNXDCT    NO--- DONE SEARCH
         B        NOADDEV     YES-- CANT ADD DEV.
*----------------
DEVMODOK EQU      %
         CH,R12   CNTMOD#,R1
         BNE      NOTHIS1     NO--- FIND CONT.MOD#
CHKNX    EQU      %           YES--
         LB,R14   DCT24,R1          GET FLAGS
         CI,R14   PERDWND
         BANZ     DEV:FND     NO--- ALREADY CONFIGURE THIS DEVICE
TRYNXT   EQU      %           YES--
         BDR,R2   TRYNXDCT    NO--- END OF DCT'S
         AI,R1    1           YES--
NOADDEV  EQU      %                 CANNOT ADD DEV.TO SYSTEM
         AI,R1    -1
NOADDEV1 EQU      %
         LI,R5    4                 # CHAR.
         LW,R13   R11               DEV.
         SLS,R13  16                  MOD#
         BAL,R10  HEXHEXE     ****  CONVERT TO EBCDIC
*
*  R14 = CONVERTED DEV.MOD# IN EBCDIC
*
         LW,R15   R14               SAVE DEV.MOD#
         LW,R13   E0,R3             GET ENTRY WRD-1 AGAIN
         LI,R5    1
         LB,R5    R13,R5            GET DEV.TYPE INDEX
         LH,R14   OH:NM,R5          TYPE MNEMONIC
         SLD,R14  16
         AI,R15   ' ,'
         LCI      2
         STM,R14  DEVTYP            PUT INTO MESSAGE
         LCI      0
         PSM,R0   STK               SAVE REGISTERS
         LW,R13   E0,R3
         BAL,R11  MVNDD       ****  FORM 'NDD'
*
*  R6 =  'NDD' IN EBCDIC
*
         STW,R6   DEVADDR           PUT INTO MESSAGE
         LI,R12   NOADD             'XXXX,XXXX CANNOT BE ADDED TO SYST.'
         BAL,R11  MSGLL       ****  OUTPUT TO LL
         LCI      0
         PLM,R0   STK               RESTORE REGISTERS
         B        NXT:TYPE
*----------------
TRYNXDCT EQU      %
         LB,R5    DCT4,R1           CURRENT DEV.TYPE
         AI,R1    1                 NEXT DCT ENTRY
         CB,R5    DCT4,R1
         BE       CHKNXDCT    YES-- THIS SAME DEV.TYPE AS PREVIOUS
         AI,R1    -1          NO--- BUT POSSIBLE, NEEDS FURTHER CHECKS
         LI,R5    1
         LB,R5    R13,R5            GET TYPE MNEMONIC INDEX
         CB,R5    DCT4,R1
         BE       NOADDEV1    YES-- LOOKING FOR THIS DEV.TYPE
         AI,R1    1           NO--- TO NEXT DCT ENTRY
         B        CHKNXDCT
*----------------
DEV:FND  EQU      %
*
*  R1 =  DCT INDEX
*  R3 =  INDEX INTO CONFIG.TABLE OF CURRENT ENTRY
*  R13=  FLAGS & PRIMARY DEV.ADDR.
*
         LI,R6    1
         LB,R6    R13,R6            GET TYPE MNEMONIC INDEX
         CB,R6    DCT4,R1
         BNE      TRYNXT      NO--- IS THIS THE DEVICE TYPE
*                             YES--
         LI,R12   -1                NON-DUAL FLAG
         CW,R13   Y2
         BAZ      %+2         NO--- DUAL ACCESS CONFIG.ENTRY
         LW,R12   E2,R3       YES-- DUAL FLAG = ALT.DEV.ADDR.
         LB,R6    DCT2,R1           GET CHAN.(QUEUING) INDEX
         LB,R6    CIT3,R6           GET CHAN.FLAGS
         CI,R6    DUALACS
         BAZ      SYSGSNGL    NO--- SYSGENED AS DUAL ACCESS, SINGLE
         CI,R12   -1          YES--
         BE       CANTMIX     NO--- RECONFIGURED AS DUAL ACCESS, SINGLE
CONFG:IT EQU      %           YES--
         LH,R0    DCT1P,R1          GET ORIGINAL DEV.ADDR.
         STH,R13  DCT1P,R1          NEW PRIMARY DEV.ADDR.
         STH,R13  DCT1A,R1          NEW ALTERNATE DEV.ADDR.=PRIMARY
         CI,R12   -1
         BE       %+2         NO--- DUAL ACCESS, SINGLE
         STH,R12  DCT1A,R1    YES-- NEW ALTERNATE DEV.ADDR.
         LD,R8    DCT16,R1          GET OLD 'YYNDD'
         BAL,R11  MVNDD       ****  CONVERT TO EBCDIC
*
*  R6 =  CONVERTED 'NDD'
*
         SLS,R6   -8
         LW,R7    M24
         STS,R6   R9                REPLACE OLD 'NDD'
         STD,R8   DCT16,R1            WITH NEW 'NDD'
         LW,R13   R0                GET DEV.ADDR.(ORIGINAL)
         LB,R8    DCT4,R1           DEV.TYPE INDEX
         LI,R6    1                 DCT ENTRY
         LI,R5    DCTSIZ            # DCT ENTRIES
NEXTENT  EQU      %                 SEARCH FOR EQUIVALENT TYPE  ENTRY
         LB,R9    DCT4,R6
         CW,R9    R8
         BE       EQUCHAN     YES-- FIND EQUIVALENT ENTRY, POSSIBLY
2NEXTENT EQU      %           NO---
         AI,R6    1                 TO NEXT ENTRY
         BDR,R5   NEXTENT     NO--- DONE
         LI,R2    0           YES-- DEV.AVAILABLE FLAG
         BAL,R11  SETPERDN    ****  SET DEV.AVAIL.& RESOURCE COUNTS
         B        NXT:TYPE
*----------------
SYSGSNGL EQU      %
         CI,R12   -1
         BE       CONFG:IT    NO--- RECONFIGURED AS DUAL ACCESS, SINGLE
CANTMIX  EQU      %           YES-- CANNOT MIX DUAL/SINGLE ACCESS TYPES
         LI,R12   NOMIX             'DUAL/SINGLE ACCESS MIXTURE'
         BAL,R11  MSGLL       ****  OUTPUT TO LL
         LW,R12   E1,R3             DEV.
         LH,R11   R12                 MOD#
         B        NOADDEV1
*----------------
EQUCHAN  EQU      %
         LH,R10   DCT1P,R6          CURRENT DEV.ADDR.
         LI,R11   MIOPCNTM          MIOP MASK
         CI,R13   MIOPMASK          MASK TO CHK.4 MIOP
         BANZ     %+2         YES-- MIOP TYPE
         LI,R11   SIOPCNTM    NO--- SIOP, SIOP MASK
         CS,R10   R13               CURRENT VS.ORIGINAL DEV.ADDR.
         BNE      2NEXTENT    NO--- SAME CONTROLLER
         LB,R9    DCT24,R6    YES-- SET BOTH
         AND,R9   NPERDWNC            PRIMARY & ALTERNATE
         STB,R9   DCT24,R6            CONTROLLERS TO AVAILABLE
         B        2NEXTENT
*----------------
         PAGE
*****************
*  SETPERDN ROUTINE
*
*    SET DEVICE & CONTROLLER TO NOT AVAILABLE OR AVAILABLE & SET COUNTS
*
*    ENTER:
*        R1 =     DCT INDEX WHEN R3>0
*        R2 = 0   SET AVAILABLE
*           > 0   SET NOT AVAILABLE
*        R3 = 0   SET ALL ENTRIES ACCORDING TO R2
*           > 0   SET ONLY ENTRY R1 ACCORDING TO R2
*
*    CALLED:
*        R11 =    LINK
*
*****************
         SPACE    3
SETPERDN EQU      %           <---  ENTER
         PSW,R11  STK               SAVE RETURN
         PSW,R3   STK               SAVE CONFIG.TABLE INDEX
         MTW,0    REMVFLG
         BNEZ     SET:IT      YES-- REMOVE ENTRY
*                             NO--- PART
         CI,R3    0
         BNEZ     SET:ENT     YES-- SET ONLY ONE ENTRY
         LI,R0    -1          NO--- SET ALL ENTRIES & - COUNT
         LI,R4    SV:RSIZ+1         # ENTRIES IN SH:RTOT
MVRTOT   EQU      %
         LH,R5    SH:RTOT,R4        SAVE RESOURCE
         STH,R5   TSH:RTOT,R4         COUNT TABLE
         BDR,R4   MVRTOT      NO--  DONE MOVE
         LI,R4    DCTSIZ      YES-- # ENTRIES TO SET
         LI,R6    1                 DCT TABLE ENTRY
SET:IT   EQU      %
         LI,R3    PERDWND+PERDWNC+DONTALLO
*                                   FORM MASK
SET:NXT  EQU      %
         LB,R5    DCT24,R6          SET/RESET
         STS,R2   R5                  APPROPRIATE
         STB,R5   DCT24,R6            FLAGS
         CLM,R6   RBLIMS
         BCR,9    REMOTE      YES-- REMOTE BATCH DEVICE
         LB,R5    SNDDX       NO--- SYMBIONT TABLE SIZE
CHKNXT   EQU      %
         CB,R6    SNDDX,R5          CHECK DCT INDEX
         BE       SYMB        YES-- SYMBIONT DEVICE
         BDR,R5   CHKNXT      NO--- DONE SEARCH
SETCOUNT EQU      %           YES--
         LI,R5    SV:RSIZ+1
         LB,R12   DCT4,R6           DEV.TYPE INDEX
2NXRES   EQU      %
         CB,R12   SB:RTY,R5
         BE       INC:DEC     YES-- FIND DEV.RESOURCE
         BDR,R5   2NXRES      NO--- DONE SEARCH
NOINCDEC EQU      %           YES--
         AI,R6    1
         BDR,R4   SET:NXT     NO--- DONE
         PLW,R3   STK         YES-- RESTORE CONFIG.TABLE INDEX
         PLW,R11  STK               RESTORE RETURN
         B        *R11        --->  RETURN
*----------------
SET:ENT  EQU      %
         LW,R6    R1                DCT ENTRY
         LI,R4    1                 # ENTRIES TO SET
         LI,R0    1                 + COUNT
         B        SET:IT
*----------------
REMOTE   EQU      %
         LI,R14   OFFBIT            FLAG SETTING
         CI,R2    0
         BNEZ     %+2         NO--- DEV.FOUND, DEV.NOT AVAIL.
         LI,R14   0           YES-- FLAG SETTING, DEV.AVAIL.
         LI,R15   OFFBIT
         STS,R14  RB:FLAG,R6        SET TO OFF/NOT OFF
         B        SETCOUNT
*----------------
SYMB     EQU      %
         CI,R2    0
         BEZ      SYMBAVAL    YES-- DEV.FOUND, SET SYMB.AVAIL.
         LI,R11   'Q'         NO--- SET SYMB.NOT AVAIL.
         LB,R12   SYMX,R5           INPUT/OUTPUT FLAG
         CI,R12   OUTPUT
         BANZ     %+2         YES-- OUTPUT SYMBIONT
         LI,R11   'L'         NO--- INPUT
         STB,R11  SSIG,R5           SET SYMBIONT SIGNAL
         LI,R11   NOTAVAIL
         STB,R11  SSTAT,R5          SET STATUS = NOT AVAILABLE
         B        NOINCDEC
*----------------
SYMBAVAL EQU      %
         STB,R2   SSTAT,R5          STATUS = NOT ACTIVE
         STB,R2   SSIG,R5           SIGNAL = 0
         B        NOINCDEC
*----------------
INC:DEC  EQU      %                 INCREMENT/DECREMENT RESOURCE COUNT
         MTW,0    REMVFLG
         BNEZ     DEC:REMV    YES-- REMOVE TYPE
*                             NO--- PART
         CI,R0    0
         BLZ      INCDECOK    NO--- INCREMENTING RESOURCE COUNTS
DEC:REMV EQU      %           YES--
         LW,R1    R6                CHECK 4 PUBLIC PACKS
         AI,R1    -BATAPE
         BLZ      INCDECOK    NO--- TAPE OR PACK TYPE
         CI,R1    AVRTBLSIZ   YES--
         BL       INCDECOK    NO--- PACK TYPE
         CI,R1    AVRTBLNE    YES--
         BGE      INCDECOK    NO--- PACK TYPE
         LD,R14   AVRTBL,R1   YES--
         CI,R15   0
         BLZ      NOINCDEC    YES-- PUBLIC PACK
INCDECOK EQU      %           NO---
         LH,R12   SH:RTOT,R5
         CI,R0    0
         BLZ      DEC         YES-- DECREMENT COUNT
         CH,R12   TSH:RTOT,R5 NO--- INCREMENT RESOURCE COUNT
         BGE      NOINCDEC    YES-- MAXIMUM # ALREADY REACHED
DOINCDEC EQU      %           NO---
         AW,R12   R0                INCREMENT/DECREMENT
         STH,R12  SH:RTOT,R5          RESOURCE COUNT
         B        NOINCDEC
*----------------
DEC      EQU      %                 DECREMENT RESOURCE COUNT
         CI,R12   0
         BEZ      NOINCDEC    YES-- MINIMUM # ALREADY REACHED
         B        DOINCDEC    NO---
*----------------
         PAGE
*****************
*  ORGANIZ ROUTINE
*
*    LOOK AT ALL DEVICES WITHIN MUC TYPE CONTROLLERS & MAKE
*    DEVICE ADDRESSES SEQUENTIAL (WITHIN CONFIG.TABLE :TYPE ENTRYS)
*    THIS MEANS, IF TAPE ADDRESS ARE:  A82,A85,A80, & A84
*    THEN THEY WILL BECOME:  A80,A81,A82, & A83
*
*    CALLED:
*        R11 =    LINK
*
*****************
         SPACE    3
ORGANIZ  EQU      %           <---  ENTER
         MTW,0    FND:TYPE
         BEZ      *R11        --->  RETURN, NO :TYPE ENTRIES
         PSW,R11  STK               SAVE RETURN
         LI,R3    0                 ENTRY INDEX INTO CONFIG.TABLE
INCR:2NX EQU      %
         LI,R8    0                 FLAG FOR :TYPE ENTRY SEARCH
         BAL,R11  FINDENT     ****  FIND AN ENTRY IN CONFIG.TABLE
*
*  R3 =  INDEX INTO CONFIG.TABLE OF :TYPE ENTRY
*  CC1=1 END OF CONFIG.TABLE FOUND
*
         BCR,8    ORG:IT      NO--- END OF TABLE
         PLW,R11  STK         YES-- RESTORE RETURN
         B        *R11        --->  RETURN
*----------------
ORG:IT   EQU      %
         LW,R12   E0,R3             PRIMARY DEV.ADDR.& FLAGS (OLD)
         CI,R12   MUC
         BAZ      INCR:2NX    NO--- THIS ENTRY MULTI-UNIT CONT.
         CW,R12   Y08         YES--
         BANZ     INCR:2NX    YES-- THIS ENTRY ALREADY LOOKED AT
         LI,R13   MIOPCNTM    NO--- MIOP MASK
         LI,R10   0                 RELATIVE DEV.#
         LI,R15   MIOPCNTM          MIOP MASK
         LI,R14   0                 SINGLE ACCESS(NO ALT.DEV.ADDR.)(OLD)
         CW,R12   Y2                OLD ALT.FLAG
         BAZ      %+2         NO--- OLD ALT.EXIST
         LW,R14   E2,R3       YES-- ALTERNATE DEV.ADDR.(OLD)
         PSW,R3   STK               SAVE CURRENT CONFIG.TABLE INDEX
         LI,R3    0
         STW,R3   OUTRLVL           RESET OUTER LEVEL TO CAN BE ADDED
NXTLEVEL EQU      %
         LI,R8    0                 FLAG FOR :TYPE ENTRY SEARCH
*
* ORIGINAL ENTRY INFO
*  R10 = RELATIVE DEVICE #
*  R12 = PRIMARY DEV.ADDR.& FLAGS
*  R13 = MIOP MASK
*  R14 = ALTERNATE DEV.ADDR.FOR DUAL ACCESS
*  R15 = MIOP MASK
*
         BAL,R11  FINDENT     ****  FIND ANOTHER ENTRY IN CONFIG.TABLE
*
*  R3 =  INDEX INTO CONFIG.TABLE OF NEW :TYPE ENTRY
*  CC1=1 END OF CONFIG.TABLE FOUND
*
         BCR,8    CHK4SAME    NO--- END OF TABLE
         PLW,R3   STK         YES-- RESTORE ORIGINAL INDEX
         LW,R8    E0,R3             WORD-1 OF OUTER LEVEL ENTRY
         OR,R8    OUTRLVL           SET TO CANNOT BE ADDED TO SYSTEM
         STW,R8   E0,R3               IF INNER LEVEL CONFLICT FOUND
         B        INCR:2NX
*----------------
CHK4SAME EQU      %                 R12=PRIM., R14=ALT.
         LW,R8    E0,R3             NEW ENTRIES PRIM.DEV.ADDR.& FLAGS
         CS,R12   E0,R3             OLD PRIM.VS.NEW PRIM.
         BNE      NOTPRIM     NO--- PRIM.=PRIM.
         CI,R14   0           YES-- OLD ALT.FLAG
         BEZ      CHK4ALT     NO--- OLD ALT.EXIST
         CW,R8    Y2          YES-- NEW ALT.FLAG
         BAZ      BADMIX      NO--- NEW ALT.EXIST
         CS,R14   E2,R3       YES-- OLD ALT.VS.NEW ALT.
         BNE      BADMIX      NO--- ALT.=ALT.
*                             YES--
DO:ORG   EQU      %
         OR,R8    Y08               SET MUC ORDERED
         LI,R1    1
         LB,R1    R12,R1            GET TYPE MNEMONIC INDEX
         LB,R11   TB:FLGS,R1        GET TYPE FLAGS
         CI,R11   RAD
         BNE      CHNGADDR    NO--- RAD TYPE
         STW,R8   E0,R3       YES-- LEAVE ADDR.AS IS
         B        ORGDONE
*----------------
CHNGADDR EQU      %
         AND,R8   DEV#MSK           REMOVE OLD DEV.#
         OR,R8    R10               ADD NEW DEV.#
         STW,R8   E0,R3             REPLACE OLD ENTRY WITH NEW
         CW,R8    Y2
         BAZ      ORGDONE     NO--- DUAL ACCESS ENTRY
         LW,R9    E2,R3       YES-- NEW ENTRIES ALT.DEV.ADDR.
         AND,R9   DEV#MSK           REMOVE OLD DEV.#
         OR,R9    R10               ADD NEW DEV.#
         STW,R9   E2,R3             REPLACE OLD ENTRY WITH NEW
ORGDONE  EQU      %
         AI,R10   1                 NEXT DEV.#
         B        NXTLEVEL
*----------------
BADMIX   EQU      %                 R12=PRIM., R14=ALT.
         OR,R8    Y4                SET CANNOT BE ADDED
         STW,R8   E0,R3               TO SYSTEM
         LW,R11   Y4
         STW,R11  OUTRLVL           SET OUTER LEVEL TO CANNOT BE ADDED
         LCI      0
         PSM,R0   STK               SAVE REGISTERS
         PSW,R14  STK               SAVE ALT.ADDR.
         LW,R13   R12               PRIM.ADDR.
         BAL,R11  MVNDD       ****  CONVERT NDD
*
*  R6 =  CONVERTED NDD
*
         AI,R6    -' '+','
         STW,R6   1STNDDS           PUT INTO MESSAGE
         PLW,R13  STK               RESTORE ALT.ADDR.
         LW,R6    BLANK+1
         CI,R13   0
         BEZ      NO:ALT1     NO--- ANY ALT.ADDR.
*                             YES--
         BAL,R11  MVNDD       ****  CONVERT NDD
*
*  R6 =  CONVERTED NDD
*
NO:ALT1  EQU      %
         AI,R6    -' '+')'
         STW,R6   1STNDDS+1         PUT INTO MESSAGE
         LW,R13   E0,R3             PRIM.ADDR.
         BAL,R11  MVNDD       ****  CONVERT NDD
*
*  R6 =  CONVERTED NDD
*
         AI,R6    -' '+'('
         SCS,R6   -8
         STW,R6   2NDNDDS           PUT INTO MESSAGE
         LW,R6    BLANK+1
         LW,R13   E0,R3
         CW,R13   Y2
         BAZ      NO:ALT2     YES-- SINGLE ACCESS
         LW,R13   E2,R3       NO--- DUAL
         BAL,R11  MVNDD       ****  CONVERT NDD
*
*  R6 = CONVERTED NDD
*
NO:ALT2  EQU      %
         AI,R6    -' '+','
         SCS,R6   -8
         STW,R6   2NDNDDS+1         PUT INTO MESSAGE
         LI,R12   DUALMIX           'DUAL ACCESS DEF.CONFLICTS----'
         BAL,R11  MSGLL       ****  OUTPUT TO LL
         LCI      0
         PLM,R0   STK               RESTORE REGISTERS
         B        NXTLEVEL
*----------------
NOTPRIM  EQU      %
         CI,R14   0                 OLD ALT.FLAG
         BEZ      PRIM:ALT    NO--- OLD ALT.EXIST
         CW,R8    Y2          YES-- NEW ALT.FLAG
         BAZ      ALT:PRIM    NO--- NEW ALT.EXIST
         CS,R14   E2,R3       YES-- OLD ALT.= NEW ALT.
         BE       BADMIX      YES-- ALT.DEV.ADDR.SAME CONT.
         CS,R14   E0,R3       NO--- OLD ALT.VS.NEW PRIM.
         BE       BADMIX      YES-- ALT.=PRIM.
         CS,R12   E2,R3       NO--- OLD PRIM.VS.NEW ALT.
         BE       BADMIX      YES-- PRIM.=ALT.
         B        NXTLEVEL    NO---
*----------------
CHK4ALT  EQU      %
         CW,R8    Y2                NEW ALT.FLAG
         BANZ     BADMIX      YES-- NEW ALT.EXIST
         B        DO:ORG      NO---
*----------------
PRIM:ALT EQU      %
         CW,R8    Y2                NEW ALT.FLAG
         BAZ      NXTLEVEL    NO--- NEW ALT.EXIST
         CS,R12   E2,R3       YES-- OLD PRIM.VS.NEW ALT.
         BE       BADMIX      YES-- PRIM.=ALT.
         B        NXTLEVEL    NO---
*----------------
ALT:PRIM EQU      %
         CS,R14   E0,R3             OLD ALT.VS.NEW PRIM.
         BE       BADMIX      YES-- ALT.=PRIM.
         B        NXTLEVEL    NO---
*----------------
         PAGE
*****************
* HEXEHEX ROUTINE
*
*        CONVERT A 'YYNDD' (SIGMA), 'YYNDD' (TAURUS) OR 'VALUE'(TAURUS)
*        VALUE FROM EBCDIC TO HEX.. IF TAURUS = 0, CONVERT AS SIGMA
*        'YYNDD'. IF TAURUS = 1, CONVERT AS TAURUS 'YYNDD' OR 'VALUE',
*        THAT IS, 'YYNDD' IF R5 = 3, & 'VALUE'   IF R5 = 4.
*
*    ENTER :
*             R5  = # CHAR.TO CONVERT
*             R13 = 3 OR 4 EBCDIC CHAR.(LEFT JUSTIFIED,BLANK FILLED)
*
*    EXIT :
*             R14 = CONVERTED VALUE RIGHT JUSTIFIED & ZERO FILLED
*
*    CALLED :
*             R10 = LINK
*
*****************
         SPACE    3
HEXEHEX  EQU      %          <---   ENTER
         LI,R14   0
         MTW,0    SPECNVRT
         BNEZ     TAUCNVT     YES-- SPECIAL CONVERSION REQUESTED
         MTW,0    M:TAURUS    NO---
         BNEZ     TAUCNVT     YES-- TAURUS TYPE CONVERSION
         CI,R5    3           NO--- SIGMA
         BNE      NAMERR      EEEE  SIGMA 'NDD' REQUIRES 3 DIGITS
         LB,R14   R13
         AI,R14   -'A'
         BLZ      NAMERR      EEEE  MUST BE CHANNEL LETTER  'A' - 'P'
         CI,R14   X'16'             CHECK FOR >'P' OR '0' - 'F' DIGIT
         BG       NAMERR      EEEE  NOT 'A' - 'P'
         CI,R14   8                 CONVERT
         BLE      %+2                 'A' = 0, 'B' = 1, THRU
         AI,R14   -7                  'P' = F
         AI,R5    -1                # CHAR.LEFT
         SLS,R13  8                 REMOVE EBCDIC 'N' FROM 'NDD'
NXTDGTE  EQU      %
         LB,R15   R13               CONVERT
         AI,R15   -'0'                A
         BGEZ     %+2                 CHAR.
         AI,R15   X'39'               TO HEX.
         CI,R15   X'F'
         BG       NAMERR      EEEE  NOT HEX.NUMBER
         CI,R15   0
         BLZ      NAMERR      EEEE  BAD DIGIT
         SCS,R15  -4
         SLD,R14  4                 FORM RESULT
         SCS,R13  8                 TO NEXT DIGIT
         BDR,R5   NXTDGTE     NO--- DONE CONVERSION
         B        *R10        YES-- RETURN
*----------------
TAUCNVT  EQU      %
         CI,R5    4
         BE       NXTDGTE     YES-- 'VALUE' TYPE
*                             NO--- 'YYNDD' TYPE
         CI,R5    3
         BNE      NAMERR      EEEE  'NDD' REQUIRES 3 DIGITS
         LB,R14   R13               GET 'N'
         LI,R15   #CLUNT            MATRIX SIZE
         LI,R1    0
NXTCLUNT EQU      %
         CB,R14   CLUSUNT,R1        SEARCH FOR 'N'
         BE       FNDCLUNT    YES-- FIND 'N'
         AI,R1    2           NO--- TO NEXT MATRIX ENTRY
         BDR,R15  NXTCLUNT    NO--- DONE SEARCH
*                             YES--
         B        NAMERR      EEEE
*----------------
FNDCLUNT EQU      %
         AI,R1    1                 TO CLUSTER/UNIT CODE
         LB,R14   CLUSUNT,R1        GET CLUSTER/UNIT PER 'N'
         SLS,R13  8                 POSITION TO 'DD'
         AI,R5    -1                # CHAR.TO CONVERT -1
         B        NXTDGTE           FORMS A 'VALUE' TYPE FROM 'NDD'
*----------------
         PAGE
*****************
*  HEXHEXE ROUTINE
*
*        CONVERT A VALUE IN HEX. TO AN EBCDIC #
*
*    ENTER :
*             R5  = # CHAR.TO CONVERT
*             R13 = CHAR., LEFT JUSTIFIED
*
*    EXIT :
*             R14 = CONVERTED VALUE RIGHT JUSTIFIED & ZERO FILLED
*
*    CALLED :
*             R10 = LINK
*
*****************
         SPACE    3
HEXHEXE  EQU      %           <---  ENTER
         PSW,R12  STK               SAVE INFO
         LW,R14   L(C'0000')
NXTDGTH  EQU      %
         SLS,R14  8                 MAKE ROOM FOR NEXT EBCDIC CHAR.
         LI,R12   0
         SLD,R12  4                 GET NEXT DIGIT
         AI,R12   '0'               CONVERT
         CI,R12   '9'                 A
         BLE      %+2                 CHAR.
         AI,R12   -X'39'              TO EBCDIC
         OR,R14   R12
         BDR,R5   NXTDGTH     NO--- DONE CONVERSION
         PLW,R12  STK         YES-- RESTORE INFO
         B        *R10        --->  RETURN
*----------------
         PAGE
*****************
*  MVTOMSG ROUTINE
*  MVNDD ROUTINE
*
*        MVTOMSG FORMS A MESSAGE BY MOVING ONE TO ANOTHER
*        MVNDD, ADD 'NDD' TO MESSAGE & RETURN RESULTS
*
*    ENTER :
*             R6  = MESSAGE ADDR.OF SOURCE(TEXTC FORM)
*             R13 = DEVICE ADDRESS
*
*    EXIT :
*             R6  = EBCDIC NDD LEFT JUSTIFIED BLANK FILLED
*
*    CALLED :
*             R11 = LINK
*
*****************
         SPACE    3
MVTOMSG  EQU      %           <---  ENTER
         LI,R9    CPSZ              DESTINATION LENGTH
         LI,R4    CP1               DESTINATION ADDR.(BYTE)
         LI,R10   ' '               BLANK
BLNK     EQU      %
         STB,R10  0,R4              BLANKS
         AI,R4    1                   TO DESTINATION
         BDR,R9   BLNK                AREA
         LI,R3    1
         LB,R5    *R6               SOURCE LENGTH
         LI,R4    CP1
MVEINFO  EQU      %
         LB,R10   *R6,R3            MOVE SOURCE
         STB,R10  0,R4                INFO
         AI,R3    1                   INTO
         AI,R4    1                   DESTINATION
         BDR,R5   MVEINFO             AREA
********
         SPACE    3
********
*  MVNDD ENTRY (SUB-ENTRY TO MVTOMSG ROUTINE)
********
         SPACE    3
MVNDD    EQU      %           <---  ENTER
         SCS,R13  -8
         MTW,0    M:TAURUS
         BNEZ     TARUSMD     YES-- TAURUS SYSTEM
         STB,R13  R6          NO--- SIGMA SYSTEM, 'N'
         LB,R6    R6                GET 'N' IN R6
         AI,R6    'A'
         CI,R6    'I'
         BLE      %+2               <= 'H'
         AI,R6    7                 > 'H', <= 'P'
         B        GOT:N
*----------------
TARUSMD  EQU      %
         LI,R5    #CLUNT            MATRIX SIZE
         LI,R4    1
NXT:N    EQU      %
         CB,R13   CLUSUNT,R4        SEARCH FOR 'N'
         BE       GET:N       YES-- FIND 'N'
         AI,R4    2           NO--- TO NEXT MATRIX ENTRY
         BDR,R5   NXT:N       NO--- DONE SEARCH
         LI,R6    ' '         YES-- DEFAULT = BLANK
         B        GOT:N
*----------------
GET:N    EQU      %                 FOUND 'N', GET EBCDIC
         AI,R4    -1                TO CLUSTER/UNIT CHAR.
         LB,R6    CLUSUNT,R4        GET CLUSTER/UNIT CHAR. 'N'
GOT:N    EQU      %
         LI,R5    2
         BAL,R10  HEXHEXE     ****  CONVERT 'DD'
*
*  R14 = CONVERTED VALUE
*
         STH,R14  R6
         SCS,R6   16                FORM 'NDD'
         SLS,R6   8                 PUT 'NDD'
         AI,R6    ' '                 INTO
         STW,R6   NDD                 MESSAGE
         B        *R11        --->  RETURN
*----------------
         PAGE
*****************
*  PRIVPACK ROUTINE
*
*        DETERMINE IF DEVICE REFERENCE IS TO A DISK PACK, & IF SO,
*        DISK PACK MUST BE PRIVATE
*
*    ENTER :
*             R1  = DCT INDEX
*
*    EXIT :
*             R4  = AVR TABLE INDEX
*
*    RETURN IF :
*
*        1. DEVICE NOT DISK PACK
*        2. DEVICE IS PRIVATE DISK PACK
*
*    OTHERWISE, NO RETURN
*
*    CALLED :
*             R11 = LINK
*
*****************
         SPACE    3
PRIVPACK EQU      %           <---  ENTER
         LW,R4    R1                DETERMINE
         AI,R4    -BATAPE             AVR TABLE INDEX
         BLZ      *R11        --->  RETURN - NOT DISK PACK (IS DEVICE)
         CI,R4    AVRTBLSIZ
         BL       *R11        --->  RETURN - NOT DISK PACK (IS TAPE)
         CI,R4    AVRTBLNE
         BGE      *R11        --->  RETURN - NOT DISK PACK (IS OTHER)
         LD,R8    AVRTBL,R4         DISK PACK,
         CI,R9    0                   DETERMINE IF PUBLIC OR PRIVATE
*                             YES-- PRIVATE PACK
         BGEZ     *R11        --->  RETURN - IS PRIVATE DISK PACK
*                             NO--- PUBLIC
         LI,R6    NOPRVPCK          'ITEM NOT PRIVATE PACK'
         B        BILDMSG     --->  RETURN & GET NEXT COMMAND
*----------------
         PAGE
*****************
*  AUTOCNFIG ROUTINE
*
*    AUTOCNFIG IS THE DRIVER FOR THE AUTOMATIC RECONFIGURATOR
*
*    CALLED:
*        R11 =    LINK
*
*****************
         SPACE    3
         DO       AUTO=1
AUTOCNFG EQU      %           <---  ENTER
         LCI      0
         PSM,R0   STK               SAVE ALL
CHKNXTAD EQU      %
         LW,R10   AUTOADD           GET NEXT HARDWARE ADDR.TO CHECK
         CW,R10   MAXADDR
         BG       CHKMODE     YES-- AT END OF HARDWARE ADDRESSES
         LW,R0    B:R11       NO--- SET LOC.0 = 'B *R11' WHEN IOPCNFG=0
         BAL,R11  IOPCNFG     ****  GO TO AUTO.RECNFIG.ANNALYZER
         BCR,8    FNDIT       YES-- FIND THIS ADDRESS
NXTAUTO  EQU      %           NO---
         MTW,1    AUTOADD           TO NEXT DEVICE ADDRESS
         LW,R10   AUTOADD
         CI,R10   MUC
         BAZ      CHKSUC      YES-- SINGLE UNIT CONTROLLER
         MTW,0    MUCFLG      NO--- MULTI-UNIT
         BNEZ     CHKNXTAD    YES-- IN MUC MODE
         LI,R10   MUC         NO--- THEN MUST MAKE
         AWM,R10  AUTOADD             ADDR.A SUC TYPE
         B        CHKNXTAD
*----------------
CHKSUC   EQU      %
         MTW,0    MUCFLG
         BEZ      CHKNXTAD    YES-- IN SUC MODE YET
         LI,R10   MUC         NO--- THEN MUST MAKE
         AWM,R10  AUTOADD             ADDR.AN MUC TYPE
         B        CHKNXTAD
*----------------
CHKMODE  EQU      %
         MTW,0    MUCFLG
         BEZ      CHNGMODE    NO--- DONE WITH AUTO.RECONFIG.
         LCI      0           YES--
         PLM,R0   STK               RESTORE ALL
         B        *R11        --->  RETURN
*----------------
CHNGMODE EQU      %
         MTW,1    MUCFLG            SET MUC MODE
         LI,R10   MUC               INITIALIZE
         STW,R10  AUTOADD             HARDWARE ADDRESS TO MUC TYPE
         LI,R12   DIAL              'DIAL TAPES/PACK-----'
         BAL,R11  MSGOC       ****  OUTPUT TO OC
         LI,R0    DA(CPINOC)
         :SIO,0   *OCNDD      IIOO
WAITOCIN EQU      %
         :TIO,0   *OCNDD      IIOO
         BCS,12   WAITOCIN          WAIT FOR RESPONSE
         B        CHKNXTAD
*----------------
FNDIT    EQU      %
*
*  HARDWARE ADDRESS IS FOUND
*
*    BUILD CONFIGURATION TABLE ENTRY
*
         B        NXTAUTO
*----------------
         FIN
         PAGE
*****************
*  ERROR ROUTINES
*****************
BADCMND  EQU      %           <---  ENTER
NAMERR   EQU      %           <---  ENTER
         BAL,R10  MSG%LL      ****  OUTPUT '%' TO LL
         LI,R12   BADINFO           'UNKNOWN INFO-----'
ERRCMN   EQU      %           <---  ENTER
         BAL,R11  MSGLL       ****  OUTPUT TO LL
         B        XIT         --->  EXIT
*----------------
TERMERR  EQU      %           <---  ENTER
         BAL,R10  MSG%LL      ****  OUTPUT '%' TO LL
         LI,R12   BADTERM           'INVALID TERMINATOR'
         B        ERRCMN      --->  EXIT
*----------------
DONTMIX  EQU      %           <---  ENTER
         BAL,R10  MSG%LL      ****  OUTPUT '%' TO LL
         LI,R12   NOMIX             'DUAL/SINGLE ACCESS MIXTURE'
         B        ERRCMN      --->  EXIT
*----------------
CANTADD  EQU      %           <---  ENTER
         LW,R1    RELCHAR           CHAR.POSITION OF TYPE MNEMONIC FIELD
         AI,R1    1                 ALLOW FOR TEXTC FORMAT
         LI,R12   '%'
         STB,R12  %MSG%,R1          PUT '%' INTO BLANK MESSAGE
         STB,R1   %MSG%             MESSAGE SIZE (TEXTC TYPE)
         PSW,R1   STK               SAVE INDEX
         BAL,R10  MSG%LL      ****  OUTPUT '%' TO LL
         PLW,R1   STK               RESTORE INDEX
         LI,R12   ' '
         STB,R12  %MSG%,R1          REPLACE '%' WITH BLANK
         LI,R12   NOADD             '***TTTT---VVVV CANNOT BE ADDED'
         B        ERRCMN      --->  EXIT
*----------------
BADUAL   EQU      %           <---  ENTER
         LI,R12   DUALSAME          'DUAL ACCESS DEFINED BAD----'
         B        ERRCMN      --->  EXIT
*----------------
NOAREA   EQU      %           <---  ENTER
         BAL,R10  MSG%LL      ****  OUTPUT '%' TO LL
         LI,R12   AREAGONE          '***NO SPACE LEFT FOR CONFIG.INFO'
         B        ERRCMN      --->  EXIT
*----------------
CONTINU  EQU      %           <---  ENTER
         LW,R14   R11               SAVE RETURN
         BAL,R10  MSG%LL      ****  OUTPUT '%' TO LL
         LI,R12   NOCONT            'CONTINUATION ILLEGAL'
         BAL,R11  MSGLL       ****  OUTPUT TO LL
         B        *R14        --->  RETURN
*----------------
         PAGE
*****************
*  MSG%LL ROUTINE
*
*    PUT '%' INTO MESSAGE WHICH IDENTIFIES WHERE ERROR WAS FOUND
*
*    CALLED:
*        R10 =    LINK
*
*    CHAR.SCAN PLIST CONTAINS LAST RELATIVE CHAR.POSITION LOOKED
*    AT WHEN COMMANDS ERROR WAS FOUND. WORD 'CCP' CONTAINS VALUE.
*
*****************
         SPACE    3
MSG%LL   EQU      %           <---  ENTER
         LW,R1    SCNPLST+CCP       GET REL.CHAR.POS.
         AI,R1    1                 ALLOW FOR TEXTC FORMAT
         LI,R2    '%'
         STB,R2   %MSG%,R1          PUT '%' INTO BLANK MESSAGE
         STB,R1   %MSG%             MESSAGE SIZE (TEXTC TYPE)
         PSW,R1   STK               SAVE INDEX
         LI,R12   %MSG%             '   %   '
         PSW,R10  STK               SAVE RETURN
         BAL,R11  MSGLL       ****  OUTPUT TO LL
         PLW,R10  STK               RESTORE RETURN
         PLW,R1   STK               RESTORE INDEX
         LI,R2    ' '
         STB,R2   %MSG%,R1          REPLACE '%' WITH BLANK
         B        *R10        --->  RETURN
*----------------
         PAGE
*****************
*  MSGOC ROUTINE
*
*    OUTPUT A MESSAGE TO OC DEVICE
*
*    ENTER:
*        R12 =    MESSAGE ADDRESS (TEXTC TYPE)
*
*    CALLED:
*        R11 =    LINK
*
*****************
         SPACE    3
         DO       AUTO=1
MSGOC    EQU      %           <---  ENTER
         DO1      TEST=1            DO ONLY IF IN TEXT MODE
         B        MSGUC       --->  EXIT
*----------------
         PSW,R11  STK               SAVE RETURN
         LCI      R2-R1+1
         PSM,R1   STK               SAVE INFO
         LI,R1    CPOUTOC           CHAN.PROG.ADDR.
         LI,R2    RECNFGOC          ROUTINE ADDR.FOR DISPLAY ON OC
         BAL,R9   MSGOUT      ****  DISPLAY MESSAGE
         LCI      R2-R1+1
         PLM,R1   STK               RESTORE INFO
         PLW,R11  STK               RESTORE RETURN
         B        *R11        --->  RETURN
*----------------
         FIN
         PAGE
*****************
*  MSGLL ROUTINE
*
*    OUTPUT A MESSAGE TO LL DEVICE
*
*    ENTER:
*        R12 =    MESSAGE ADDRESS (TEXTC TYPE)
*
*    CALLED:
*        R11 =    LINK
*
*****************
         SPACE    3
MSGLL    EQU      %           <---  ENTER
         DO       TEST=1            DO ONLY IF IN TEST MODE
MSGUC    EQU      %           <---  ENTER
         LB,R13   *R12              MESSAGE SIZE
*                             ****  OUTPUT TO LL
,DISPUC  M:WRITE  M:UC,(BUF,*R12),(SIZE,*R13),(BTD,1),(WAIT)
         LI,R12   NEWLINE2          2 NEW LINES
         LB,R13   *R12              MESSAGE SIZE
*                             ****  OUTPUT N NEW LINES TO LL
         M:WRITE,E  DISPUC
         B        *R11        --->  RETURN
*----------------
         FIN                        END OF TEST MODE CODE
         PSW,R11  STK               SAVE RETURN
         LCI      R2-R0+1
         PSM,R0   STK               SAVE INFO
         LI,R1    CPOUTLL           CHAN.PROG.ADDR
         LI,R2    RECNFGLL          ROUTINE ADDR.FOR DISPLAY ON LL
         BAL,R9   MSGOUT      ****  DISPLAY MESSAGE
         LCI      R2-R0+1
         PLM,R0   STK               RESTORE INFO
         PLW,R11  STK               RESTORE RETURN
         B        *R11        --->  RETURN
*----------------
         PAGE
*****************
*  MSGOUT ROUTINE
*
*    DISPLAY MESSAGE ON OC OR LL DEVICE
*
*    ENTER:
*        R1  =    CHANNEL PROGRAM ADDR.
*        R2  =    OUTPUT ROUTINES ADDR.(RECNFGOC/RECNFGLL)
*        R12 =    MESSAGE ADDRSS (TEXTC TYPE)
*
*    CALLED:
*        R9  =    LINK
*
*****************
         SPACE    3
MSGOUT   EQU      %           <---  ENTER
         LB,R13   *R12              MESSAGE SIZE
         SLS,R12  2                 MAKE BYTE ADDRESS
         AI,R12   1                 BTD = 1
         STW,R13  1,R1              SET SIZE
         LW,R13   M24
         STS,R12  0,R1              SET ADDRESS
         LW,R0    R1
         SLS,R0   -1                DA(IOCDW)
         BAL,R10  *R2         ****  MESSAGE TO OC OR LL
         B        *R9         --->  RETURN
*----------------
         PAGE
*****************
*  M E S S A G E S
*****************
BADINFO  EQU      %
         DATA,1   BADSZ-1,' '
         DATA,15  'UNKNOWN COMMAND'
         DATA,12  ', FIELD, OR '
         DATA,5   'VALUE'
BADSZ    EQU      BA(%)-BA(BADINFO)
         BOUND    4
********
BADTERM  EQU      %
         DATA,1   BDTERMSZ-1,' '
         DATA,8   'INVALID '
         DATA,10  'TERMINATOR'
BDTERMSZ EQU      BA(%)-BA(BADTERM)
         BOUND    4
********
NOCONT   EQU      %
         DATA,1   NOCONTSZ-1,' '
         DATA,13  'CONTINUATION '
         DATA,7   'ILLEGAL'
NOCONTSZ EQU      BA(%)-BA(NOCONT)
         BOUND    4
********
         DO       TEST=1
NEWLINE2 EQU      %
         DATA,1   2
         DATA,2   X'1515'           2 NEW LINES
         BOUND    4
********
         FIN                        END OF TEST MODE CODE
NO:TYPE  EQU      %
         DATA,1   NO:TYPSZ-1,' '
         DATA,9   'ALL :TYPE'
         DATA,9   '/:REMOVE '
         DATA,9   'COMMANDS '
         DATA,7   'IGNORED'
NO:TYPSZ EQU      BA(%)-BA(NO:TYPE)
         BOUND    4
********
KEEPDVAD EQU      %
         DATA,1   KEEPSZ-1,' '
         DATA,15  '**KEEP ALL DEV.'
         DATA,11  'ADDR.AS IS '
         DATA,11  'EXCEPT FOR '
         DATA,14  ':TYPE/:REMOVE '
         DATA,7   'CHANGES'
KEEPSZ   EQU      BA(%)-BA(KEEPDVAD)
         BOUND    4
********
NOADD    EQU      %
         DATA,1   NOADDSZ-1,' '
         DATA,2   '**'
DEVTYP   DATA,8   'TTTTTT ,'
DEVADDR  DATA,4   'VVVV'
         DATA,12  '  CANNOT BE '
         DATA,15  'ADDED TO SYSTEM'
NOADDSZ  EQU      BA(%)-BA(NOADD)
         BOUND    4
********
NORCNFG  EQU      %
         DATA,1   NORCNFGS-1,' '
         DATA,3   'NO '
         DATA,16  'RECONFIGURATION '
         DATA,9   'PERFORMED'
NORCNFGS EQU      BA(%)-BA(NORCNFG)
         BOUND    4
********
DUALMIX  EQU      %
         DATA,1   DUALMIXS-1,' '
         DATA,12  'DUAL ACCESS '
         DATA,11  'DEFINITION '
         DATA,9   'CONFLICTS'
         DATA,2   ' ('
1STNDDS  EQU      %
         DATA,4   'NDD,'
         DATA,4   'NDD)'
2NDNDDS  EQU      %
         DATA,4   '(NDD'
         DATA,4   ',NDD'
         DATA,1   ')'
DUALMIXS EQU      BA(%)-BA(DUALMIX)
         BOUND    4
********
DUALSAME EQU      %
         DATA,1   DUALSAMS-1,' '
         DATA,12  'DUAL ACCESS '
         DATA,8   'DEFINED '
         DATA,10  'ILLEGAL   '
BAD:NDDS EQU      %
         DATA,4   'NDD,'
         DATA,4   'NDD '
DUALSAMS EQU      BA(%)-BA(DUALSAME)
         BOUND    4
********
NOMIX    EQU      %
         DATA,1   NOMIXSZ-1,' '
         DATA,12  'DUAL/SINGLE '
         DATA,14  'ACCESS MIXTURE'
NOMIXSZ  EQU      BA(%)-BA(NOMIX)
         BOUND    4
********
AREAGONE EQU      %
         DATA,1   A:GONESZ-1,' '
         DATA,12  '***NO SPACE '
         DATA,9   'LEFT FOR '
         DATA,11  'CONFIG.INFO'
A:GONESZ EQU      BA(%)-BA(AREAGONE)
         BOUND    4
********
         DO       AUTO=1
DIAL     EQU      %
         DATA,1   DIALSZ-1
         DATA,1   X'15'             1 NEW LINE
         DATA,16  'DIAL TAPES/PACKS'
         DATA,15  ' TO UNIQUE #''S '
         DATA,13  'BY CONTROLLER'
         DATA,1   X'15'             1 NEW LINE
         DATA,14  'TYPE NEW LINE '
         DATA,10  'WHEN READY'
DIALSZ   EQU      BA(%)-BA(DIAL)
         BOUND    4
         FIN
********
TOP      EQU      %
         DATA,1   TOPSZ-1
         DATA,1   '1'               TOP OF PAGE
TOPSZ    EQU      BA(%)-BA(TOP)
         BOUND    4
********
ASTER    EQU      %
         DATA,1   ASTERSZ-1,' '
         DO1      20
         DATA,4   '****'
         DATA,2   '**'
ASTERSZ  EQU      BA(%)-BA(ASTER)
         BOUND    4
********
DASH     EQU      %
         DATA,1   ASTERSZ-1,' '
         DO1      20
         DATA,4   '----'
         DATA,2   '--'
         BOUND    4
********
TITL1    EQU      %
         DATA,1   TITL1SZ-1,' '
         DATA,12  '            '
         DATA,14  'D E V I C E   '
         DATA,16  'R E S O U R C E '
         DATA,14  '  C O N F I G '
         DATA,13  'U R A T I O N'
TITL1SZ  EQU      BA(%)-BA(TITL1)
         BOUND    4
********
TITL2    EQU      %
         DATA,1   TITL2SZ-1,' '
         DATA,10  'DEV-TYP : '
         DATA,9   'DEV-ID : '
         DATA,11  'DEV-ADDR : '
         DATA,8   'DCT-I : '
         DATA,11  'PUB/PRIV : '
         DATA,7   'TYPE : '
         DATA,7   'RTOT : '
         DATA,8   'GENERAL '
         DATA,11  'INFORMATION'
TITL2SZ  EQU      BA(%)-BA(TITL2)
         BOUND    4
********
BLANK    EQU      %
         DATA,1   BLNKSZ-1,' '
         DATA,2   '  '
BLK      EQU      %
         DATA,4   '    '
BLNKSZ   EQU      BA(%)-BA(BLANK)
         BOUND    4
********
IMG      EQU      %
         DATA,1   IMGSZ-1,' '
         DATA,1   ' '
DVTP     EQU      BA(%)
         DATA,10  'YYMMMM    '
DVID     EQU      BA(%)
         DATA,10  'YYNDD     '
DVAD     EQU      BA(%)
         DATA,10  'AAAA      '
DCTI     EQU      BA(%)
         DATA,9   'II       '
PBPRV    EQU      BA(%)
         DATA,10  'XXXX      '
TP       EQU      BA(%)
         DATA,7   'YY     '
TOT      EQU      BA(%)
         DATA,7   'TT     '
GENINFO  EQU      BA(%)
         DATA,10  'XXXXXXXXXX'
         DATA,7   'XXXXXXX'
GENINFSZ EQU      BA(%)-GENINFO
:SYM     EQU      BA(%)
         DATA,1   ' '
IMGSZ    EQU      BA(%)-BA(IMG)
         BOUND    4
********
IMGX     DATA,1   IMGSZ-1,' ',' ',' '
         BOUND    4
********
PERMDWNM EQU      %
         TEXTC    'NOT PRESENT'
********
NOPARTM  EQU      %
         TEXTC    'NON-PARTITIONABLE'
********
ALREDPTM EQU      %
         TEXTC    'ALREADY PARTITIONED'
********
NOPRVPCK EQU      %
         TEXTC    'NOT PRIVATE PACK'
********
DEVCNST  TEXT     ',DEV.'
CONTCNST TEXT     ',CONT.'
REMVCNST TEXT     '  REMOVE  '
PARTCNST TEXT     ' PARTITION'
NTPRTM   TEXT     'NOT-PARTITIONABLE'
NOPRTDM  TEXT     'NO-PART-DEV      '
NOPRTCM  TEXT     'NO-PART-CONT     '
SYMBM    TEXT     'SYMBIONT         '
********
CANTPART EQU      %
         DATA,1   CANTSZ-1,' '
         DATA,6   'CANNOT'
PRTMV    EQU      HA(%)
         DATA,10  'XXXXXXXXXX'
PRTMVSZ  EQU      BA(%)-BA(PRTMV)
CNT      EQU      HA(%)
         DATA,6   ',XXXXX'
CNTSZ    EQU      BA(%)-BA(CNT)
NDD      EQU      %
         DATA,4   'NDD '
CP1      EQU      BA(CANTPART)+28
         DATA,12  'XXXXXXXXXXXX'
         DATA,8   'XXXXXXXX'
CPSZ     EQU      BA(%)-CP1         # POSITIONS IN 'XXX--XX' PART
CANTSZ   EQU      BA(%)-BA(CANTPART)
         BOUND    4
********
DEVALU   DATA,1   PARTMSZ-1,' '
         DATA,8   '   DEV. '
         BOUND    4
****
CONTVALU DATA,1   PARTMSZ-1,' '
         DATA,8   '  CONT. '
         BOUND    4
********
PARTM    EQU      %
         DATA,1   PARTMSZ-1,' '
         DATA,8   '  XXXXXX'
PRTMSZ   EQU      BA(%)-BA(PARTM)
NDDPARTM EQU      %
         DATA,4   'NDD '
         DATA,11  'PARTITIONED'
PARTMSZ  EQU      BA(%)-BA(PARTM)
         BOUND    4
********
TAPE     TEXT     'TAPE'
PACK     TEXT     'PACK'
********
PKTP:PRT EQU      %
         DATA,1   PKTPSZ-1,' '
         DATA,2   '**'
PKTP1    EQU      %
         DATA,4   'XXXX'
         DATA,2   '  '
PKTP2    EQU      HA(PKTP:PRT)+5
         DATA,2   'YY'
PKTP3    EQU      %
         DATA,4   'XXXX'
         DATA,14  ' PARTITIONED, '
         DATA,6   'DIAL  '
PKTP4    EQU      %
         DATA,4   'XXXX'
         DATA,14  ' NOT AVAILABLE'
PKTPSZ   EQU      BA(%)-BA(PKTP:PRT)
         BOUND    4
*****************
         PAGE
*****************
*  D A T A
*****************
         BOUND    8
STKSZ    EQU      75
STK      PZE      %+1
         GEN,16,16  STKSZ,0
         RES      STKSZ
********
%MSG%    EQU      %                 BLANK BUFFER FOR '%'
         DO1      21
         TEXT     '    '
********
1ST:FLG  DATA     0                 =0 1-ST ':' CMND., >0 N-TH ':' CMND.
GOFLG    DATA     0                 =0 NO :GO, >0 :GO FOUND
TYPINDX  DATA     0                 CONTAINS DEV.TYPE MNEMONIC INDEX
SUPRPART DATA     0                 =0 PROCESSING :PART COMMAND
*                                   =Y14 PROCESSING :REMOVE COMMAND
REM:PART DATA     0                 =Y1 PROCESSING :PART INFO
*                                   =Y04 PROCESSING :REMOVE INFO
REMVFLG  DATA     0                 =0 :PART, >0 :REMOVE
RELCHAR  DATA     0                 REL.CHAR.POS.FROM SCANNER OF A FIELD
DEV#MSK  DATA,2   -1,MIOPCNTM       DEV.ADDR.& FLAGS MASK
SNGLFLG  DATA     0                 SINGLE ACCESS FLAG >0
DUALFLG  DATA     0                 DUAL ACCESS FLAG >0
M:TAURUS DATA     0                 =0 SIGMA, >0 TAURUS (560)
SPECNVRT DATA     0                 SET =1 WHEN CONVERT AS 'VALUE'
SAVEFLG  DATA     0                 =0 NO :SAVE, >0 :SAVE FOUND
FND:CRD  DATA     0                 =0 NO : CARD, >0 : CARDS FOUND
FND:TYPE DATA     0                 =0 NO :TYPE, >0 :TYPE FOUND
FND:PART DATA     0                 =0 NO :PART, >0 :PART FOUND
FND:REMOVE  DATA  0                 =0 NO :REMOVE, >0 :REMOVE FOUND
         DO       AUTO=1
AUTOADD  DATA     0                 AUTO.RECONFIG.DEV.ADDR.COUNTER
MUCFLG   DATA     0                 =0 SUC MODE, =1 MUC MODE
MAXADDR  DATA     X'3FFF'           MAXIMUM HARDWARE ADDRESS
         FIN
TMPADDR  DATA     0                 TEMP.HOLD OF DEV.ADDR.
OUTRLVL  DATA     0                 =0 CAN BE ADDED, =Y4 CANNOT BE ADDED
CONTRFLG DATA     0                 =0 DEV.PART., >0 CONT.PART.
SAMFLG   DATA     0                 =0 NO LOOK 4 SAME ADDR,>0 LOOK
CONT     TEXT     'CONT'
PRIV     TEXT     'PRIV'
PUB      TEXT     'PUB '
SYMBMX   TEXT     ':SYM'
NOALLOC  DATA     DONTALLO
CPERDWN  DATA     PERDWNC           CONTROLLER DOWN (PRIM/ALT)
NPERDWNC DATA     -PERDWNC-1        CONT.PERM.DOWN MASK
Y5       DATA     X'50000000'
Y14      DATA     X'14000000'
         DO1      AUTO=1
B:R11    B        *R11              SET LOC.0 WHEN SREF NOT DEF'D
********
DEVTYPS  EQU      %                 TYPE MNEMONIC TABLE FLAGS
*                                   FOR UN-ACCEPTABLE DEV.TYPES (PART)
         DATA,2   X'FF'          -0-NULL
         DATA,2   X'30'          -1-NO
         DATA,2   X'73'          -2-TY
         DATA,2   X'C0'          -3-DC
         DATA,2   X'3B'          -4-ME
#DEVTYPS EQU      HA(%)-HA(DEVTYPS)
         BOUND    4
********
TSH:RTOT EQU      %                 SAVED ORIGINAL SH:RTOT COUNT TABLE
         DO1      20
         DATA     0
********
         BOUND    8
DEVMOV   EQU      %
         GEN,8,24 0,BA(DEVCNST)     USED BY
         GEN,8,24 CNTSZ,BA(CNT)       MBS INST.
****
         BOUND    8
CONTMOV  EQU      %
         GEN,8,24 0,BA(CONTCNST)    USED BY
         GEN,8,24 CNTSZ,BA(CNT)       MBS INST.
********
         BOUND    8
REMVMOV  EQU      %
         GEN,8,24 0,BA(REMVCNST)     USED BY
         GEN,8,24 PRTMVSZ,BA(PRTMV)    MBS INST.
****
         BOUND    8
PARTMOV  EQU      %
         GEN,8,24 0,BA(PARTCNST)     USED BY
         GEN,8,24 PRTMVSZ,BA(PRTMV)    MBS INST.
********
         BOUND    8
MV:NT:PT EQU      %
         GEN,8,24 0,BA(NTPRTM)       USED BY
         GEN,8,24 GENINFSZ,GENINFO     MBS INST.
****
         BOUND    8
MV:NT:PD EQU      %
         GEN,8,24 0,BA(NOPRTDM)      USED BY
         GEN,8,24 GENINFSZ,GENINFO     MBS INST.
****
         BOUND    8
MV:NT:PC EQU      %
         GEN,8,24 0,BA(NOPRTCM)      USED BY
         GEN,8,24 GENINFSZ,GENINFO     MBS INST.
****
         BOUND    8
MV:IS:SM EQU      %
         GEN,8,24 0,BA(SYMBM)       USED BY
         GEN,8,24 GENINFSZ,GENINFO    MBS INST.
********
         PAGE
*****************
*  C H A N N E L   P R O G R A M S   -   I O C D 'S
*****************
         BOUND    8
CPOUTLL  EQU      %                 PRINT ON LL DEVICE(FORMAT CONTROL)
         GEN,8,24 X'05',0           ADDR.SET
         GEN,8,24 X'00',0           SIZE SET
********
         DO       AUTO=1
         BOUND    8
CPOUTOC  EQU      %                 TYPE ON OC DEVICE
         GEN,8,24 X'05',0           ADDR.SET
         GEN,8,24 X'00',0           SIZE SET
********
         BOUND    8
CPINOC   EQU      %                 INPUT FROM OC DEVICE
         GEN,8,24 X'86',BA(RELCHAR)
         GEN,8,24 X'00',1
         FIN
*****************
         PAGE
*****************
*  CHARACTER SCAN ROUTINE PLISTS
*****************
SCNPLST  EQU      %
         GEN,8,24 #DEL,BA(DEL)   -0-#D,CLD
         GEN,8,24 1,CONTINU      -1-CNTC,CONTR
         PZE      0              -2-OUTR
CCP      EQU      3                 REL.WORD OF CCP IN SCNPLST
         DATA     0              -3-CCP
FLGS     EQU      4                 REL.WORD OF FLAGS IN SCNPLST
         GEN,8,24 0,0            -4-FLAGS,CBUF
CSL      EQU      5                 REL.WORD OF CSL IN SCNPLST
         DATA     0              -5-CSL
         DATA     0              -6-PCCP
CHSTRG   EQU      7                 REL.WORD OF BUFFER IN SCNPLST
         RES      9              -7-36 CHAR.BUFFER
********
DEL      EQU      %                 LEGITIMATE DELIMITERS
         DATA,1   ','               , COMA
         DATA,1   ' '                 BLANK
         DATA,1   ':'               : COLON
         DATA,1   X'15'               NEW LINE
         DATA,1   X'0D'               RETURN
         DATA,1   X'08'               END-OF-MESSAGE
         DATA,1   X'26'               END-OF-BUFFER
         DATA,1   '('               ( OPEN PARENTHESIS
         DATA,1   ')'               ) CLOSING PARENTHESIS
         DATA,1   '.'               . PERIOD
#DEL     EQU      BA(%)-BA(DEL)     # DELIMITORS
         BOUND    4
*****************
         PAGE
*****************
*  TABLES / VECTORS / CONSTANTS
*****************
V1       EQU      0                 REL.LOC.IN INT:BUF OF CONFIG.TABLE
V2       EQU      X'200'-V1-1       TOTAL SIZE OF CONFIG.TABLE
E0       EQU      INT:BUF+V1+0      REL.WORD IN TABLE OF ENT.WRD.0
E1       EQU      E0+1              REL.WORD IN TABLE OF ENT.WRD.1
E2       EQU      E0+2              REL.WORD IN TABLE OF ENT.WRD.2
MIOPMASK EQU      X'80'             MASK TO CHK.4 MIOP VS.SIOP
MIOPCNTM EQU      X'3FF0'           IOP/CONT.PART OF DEV.ADDR.(MIOP)
SIOPCNTM EQU      X'3F80'           IOP/CONT.PART OF DEV.ADDR.(SIOP)
EOB      EQU      X'26'             END-OF-BUFFER
NL       EQU      X'15'             NEW LINE
CR       EQU      X'0D'             CARRIAGE RETURN
PERIOD   EQU      '.'               PERIOD
BADCONT  EQU      X'FF'             CONTINUATION CARD TERMINATOR
ENDFLG   EQU      :ENDFND
MUC      EQU      X'80'             MULTIPLE UNIT CONTROLLER FLAG BIT
NOU      EQU      X'10000'          AVRTBL NOU FLAG
DUALACS  EQU      X'08'             QUEUING CHANNEL DUAL ACCESS
PERDWNCP EQU      X'08'             PRIM.CONT.PERM.DOWN
PERDWNCA EQU      X'10'             ALT.CONT.PERM.DOWN
PERDWNC  EQU      PERDWNCP+PERDWNCA BOTH PRIM./ALT.CONT.PERM.DOWN
PERDWND  EQU      X'02'             DEV.PERM.DOWN
DOWNC    EQU      X'04'             CONT.DOWN
DOWND    EQU      X'20'             DEV.DOWN
DONTALLO EQU      X'80'             DON'T ALLOCATE FLAG FOR PART.
NOPARTC  EQU      X'20'             CONT.NON-PARTITIONABLE
NOPARTD  EQU      X'01'             DEV.NON-PARTITIONABLE
OUTPUT   EQU      2                 SYMBIONT OUTPUT TYPE
NOTAVAIL EQU      3                 SYMBIONT NOT AVAILABLE
RAD      EQU      X'C0'             TB:FLGS VALUE FOR RAD
*****************
         PAGE
*****************
DCT:FLG1 EQU      %
         LB,R6    DCT24,R1       -0-DEV.
         LB,R6    DCT24,R1       -1-CONT.
********
DCT:FLG2 EQU      %
         LB,R6    DCT3,R1        -0-DEV.
         LB,R6    DCT24,R1       -1-CONT.
********
PRMDWN   EQU      %
         CI,R6    PERDWND        -0-DEV.
         CI,R6    PERDWNC        -1-CONT.
********
NOPARTN  EQU      %
         CI,R6    NOPARTD        -0-DEV.
         CI,R6    NOPARTC        -1-CONT.
********
ALREDWN  EQU      %
         CI,R6    DOWND          -0-DEV.
         CI,R6    DOWNC          -1-CONT.
********
DVCNTMOV EQU      %
         LI,R8    DEVMOV         -0-DEV.
         LI,R8    CONTMOV        -1-CONT.
*****************
PARTREMV EQU      %
         LI,R8    REMVMOV        -0-REMOVE
         LI,R8    PARTMOV        -1-PART
*****************
         PAGE
*****************
NAMES    EQU      %                 COMMAND NAME TABLE
         TEXT     'GO  '         -0-:GO
         TEXT     'TYPE'         -1-:TYPE
         TEXT     'PART'         -2-:PART
         TEXT     'END '         -3-:END
         TEXT     'SAVE'         -4-:SAVE
         TEXT     'REMO'         -5-:REMOVE
#NAMES   EQU      %-NAMES
********
CMNDVECT EQU      %                 ROUTINE ENTRY VECTOR
         B        :GO            -0-GO
         B        :TYPE          -1-TYPE
         B        :PART          -2-PART
         B        :END           -3-END
         B        :SAVE          -4-SAVE
         B        :REMOVE        -5-REMOVE
*****************
         PAGE
*****************
*
*   CSE BRANCH TABLES FOR THE THREE MACHINES
*
S7BRANCH  EQU  %
         B        CSE%1:7
         B        CSE%2:7
         B        CSE%3:7
         B        CSE%4:7
         B        CSE%5:7
         B        CSE%6:7
         B        CSE%7:7
         B        CSE%8:7
         B        CSE%9:7
         B        CSE%A:7
         B        CSE%B:7
         B        CSE%C:7
         B        CSE%D:7
         B        CSE%E:7
         B        CSE%F:7
CSEBRANCH%SIZE EQU %-S7BRANCH
S9BRANCH  EQU %
         B        CSE%1:9
         B        CSE%2:9
         B        CSE%3:9
         B        CSE%4:9
         B        CSE%5:9
         B        CSE%6:9
         B        CSE%7:9
         B        CSE%8:9
         B        CSE%9:9
         B        CSE%A:9
         B        CSE%B:9
         B        CSE%C:9
         B        CSE%D:9
         B        CSE%E:9
         B        CSE%F:9
X560BRANCH  EQU %
         B        CSE%1:560
         B        CSE%2:560
         B        CSE%3:560
         B        CSE%4:560
         B        CSE%5:560
         B        CSE%6:560
         B        CSE%7:560
         B        CSE%8:560
         B        CSE%9:560
         B        CSE%A:560
         B        CSE%B:560
         B        CSE%C:560
         B        CSE%D:560
         B        CSE%E:560
         B        CSE%F:560
*****************
         PAGE
*****************
*  TAURUS (560) CLUSTER/UNIT CONVERSION TABLE
*****************
CLUSUNT  EQU      %                 TAURUS CLUSTER/UNIT CONVERSION FOR N
*                                     THIS TABLE IS A MATRIX OR VECTOR
*                                     GIVING AN INTERNAL DESIGNATION
*                                     CODE FOR CLUSTER/UNIT WHEN GIVEN
*                                     AN EXTERNAL CHARACTER DESIGNATION
         CLUNT    'A',0,0,0
         CLUNT    'B',0,1,0
         CLUNT    'C',0,1,1
         CLUNT    'D',0,1,2
         CLUNT    'E',0,1,3
         CLUNT    'F',0,1,4
         CLUNT    'G',0,1,5
         CLUNT    'H',0,2,0
         CLUNT    'I',0,2,1
         CLUNT    'J',0,2,2
         CLUNT    'K',0,2,3
         CLUNT    'L',0,2,4
         CLUNT    'M',0,2,5
         CLUNT    'N',0,3,0
         CLUNT    'O',0,3,1
         CLUNT    'P',0,3,2
         CLUNT    'Q',0,3,3
         CLUNT    'R',0,3,4
         CLUNT    'S',0,3,5
         CLUNT    'T',0,4,0
         CLUNT    'U',0,4,1
         CLUNT    'V',0,4,2
         CLUNT    'W',0,4,3
         CLUNT    'X',0,4,4
         CLUNT    'Y',0,4,5
         CLUNT    'Z',0,5,0
         CLUNT    '0',0,5,1
         CLUNT    '1',0,5,2
         CLUNT    '2',0,5,3
         CLUNT    '3',0,5,4
         CLUNT    '4',0,5,5
         CLUNT    '5',0,6,0
         CLUNT    '6',0,6,1
         CLUNT    '7',0,6,2
         CLUNT    '8',0,6,3
         CLUNT    '9',0,6,4
         CLUNT    X'6D',0,6,5
         CLUNT    '%',0,0,1
         CLUNT    '#',0,0,2
         CLUNT    '@',0,0,3
         CLUNT    ':',0,0,4
#CLUNT   EQU      HA(%)-HA(CLUSUNT)
         BOUND    4
*****************
         PAGE
*****************
INT:BUF  EQU      %                 INTERNAL BUFFER USED TO HOLD
*                                     :TYPE,:REMOVE,& :PART INFO
         RES      512               1 PAGE IN SIZE
*****************
         PAGE
*****************
*  P A T C H    AREA
*****************
PCHSZ    EQU      100
PCH      EQU      %
         RES      PCHSZ             PATCH AREA
*****************
         SPACE    3
         END

