0CT 
          IDENT  0CT,/REL/LCCX
          PERIPH J
          BASE   MIXED
          SST 
*COMMENT  0CT - LOAD CTS/CCC CONTROLWARE. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          TITLE  0CT - LOAD CTS/CCC CONTROLWARE 
          SPACE  4,10 
***       0CT - LOAD CTS/CCC CONTROLWARE. 
* 
*         P. C. SMITH.       92/04/21.
          SPACE  4,10 
***              *0CT* IS A LOCATION FREE ROUTINE CALLED BY *1MT* 
*         TO LOAD CTS/CCC CONTROLWARE ON *MAGNET* INTITIATION, AND
*         DURING TAPE ERROR RECOVERY. 
          SPACE  4,10 
***       ENTRY CONDITIONS. 
* 
*         (CN) = CHANNEL NUMBER.
*         (CN+1) = ADDRESS OF 100B CM WORD BUFFER.
* 
* 
*         USES   CM - CM+4, CN - CN+4, T1 - T1+4. 
          SPACE  4,10 
***       EXIT CONDITIONS.
* 
*         (CN) = 0 IF NO ERROR. 
*         (CN) = ERROR CODE IF ERROR. 
*         (CN) = 7777 IF MICROCODE NOT FOUND. 
*         (CN+1) = LAST FUNCTION ISSUED TO CCC. 
*         (CN+2) = MICROCODE REVISION.
          SPACE  4,10 
****      DIRECT LOCATION ASSIGNMENTS.
  
  
 DS       EQU    24          DEVICE STATUS
 CN       EQU    62 - 66     CM BUFFER
          SPACE  4,10 
*         ASSEMBLY CONSTANTS. 
  
  
 CH       EQU    13          CHANNEL NUMBER 
 F0012    EQU    0012        GENERAL STATUS FUNCTION
 F0414    EQU    0414        AUTOLOAD FUNCTION
  
****
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMPMAC 
          QUAL   MTX
*CALL     COMSMTX 
          QUAL   *
*CALL     COMSZOL 
 REL$     SET    1           DEFINE FULL RELOCATION 
*CALL     COMPRLI 
*CALL     COMPCHM 
          TITLE  MAIN PROGRAM.
 LCC      SPACE  4,10 
**        LCC - MAIN ROUTINE. 
  
  
 LCC      SUBR               ENTRY/EXIT 
 REL$     EQU    1           SET FULL RELOCATION
          RJM.   REL,LA      RELOCATE ADDRESSES 
          RJM    MCI         MODIFY CHANNEL INSTRUCTIONS
          LDD    CN+1        SET CONTROLWARE BUFFER ADDRESS 
          STM    LCCA 
          STM    LCCB 
 LCC1     DELAY 
          LDK    PLDP        CHECK PERIPHERAL DIRECTORY POINTER 
          CRD    CM 
          LDD    CM 
          ADD    CM+1 
          ZJN    LCC1        IF SYSEDIT IN PROGRESS 
  
*         FIND CCC MICROCODE. 
  
          LDN    ZERL 
          CRD    CM 
          LDD    MA          PUT CONTROLWARE ID IN MESSAGE BUFFER 
          CWM    LCCE,ON
          MONITOR  SCDM      SEARCH CENTRAL DIRECTORY 
          LDD    CM+3 
          SHN    14 
          LMD    CM+4 
          CRD    CM          READ *PST* ENTRY 
          LDD    CM+1 
          SHN    21-12
          PJP    LCC5        IF NOT CM RESIDENT 
          LDD    CM+3        GET ADDRESS OF *RCL* ENTRY 
          SHN    14 
          LMD    CM+4 
          ADN    1
          CRD    CN          READ 5200 RECORD HEADER
          ADN    6
          CRD    T1 
          SBN    5           SET FWA OF 5200 RECORD DATA
          STD    CM+4 
          SHN    -14
          STD    CM+3 
          LCN    1           ADJUST WORD COUNT FOR HEADER 
          RAD    CN+4 
          LDD    T3 
          STD    CN+2        SAVE MICROCODE REVISION
  
*         LOAD CCC MICROCODE. 
  
          LDC    F0414       AUTOLOAD FUNCTION
          RJM    ICF         ISSUE CTS FUNCTION 
          NJP    LCC6        IF FUNCTION TIMEOUT
          ACN    CH 
          LDD    CN+4 
 LCC2     SBD    HN 
          MJN    LCC3        IF LESS THAN 100B WORDS LEFT 
          LDN    0
 LCC3     ADD    HN 
          STD    T1 
          LDD    CM+3 
          SHN    14 
          LMD    CM+4 
          CRM.   **,T1       READ FROM CM 
 LCCA     EQU    *-1         (ADDRESS OF CONTROLWARE BUFFER)
          STD    CM+4        UPDATE CM ADDRESS
          SHN    -14
          STD    CM+3 
          LDD    T1          SET BYTES TO TRANSFER
          SHN    2
          ADD    T1 
          OAM    **,CH       LOAD BLOCK OF CONTROLWARE TO CCC 
 LCCB     EQU    *-1         (ADDRESS OF CONTROLWARE BUFFER)
          FJM    *,CH        IF TRANSFER NOT COMPLETE 
 LCCC     EQU    *-1         (ADDRESS TO BE RELOCATED)
          NJN    LCC4        IF INCOMPLETE TRANSFER 
          LDD    CN+4 
          SBD    T1 
          STD    CN+4 
          NJN    LCC2        IF MORE WORDS TO TRANSFER
          LDN    F0012       GENERAL STATUS FUNCTION
          RJM    ICF         ISSUE FUNCTION 
          NJN    LCC6        IF FUNCTION TIMEOUT
          ACN    CH 
          LDN    1
          IAM    DS,CH       INPUT GENERAL STATUS 
          NJN    LCC4        IF WORD NOT RECEIVED 
          SFM    LCC4,CH     IF ERROR FLAG SET
 LCCD     EQU    *-1         (ADDRESS TO BE RELOCATED)
          LDD    DS 
          SHN    0-13 
          ZJN    LCC6        IF NO ERROR
 LCC4     LDN    /MTX/CMF    CHANNEL MALFUNCTION
          UJN    LCC6        SAVE ERROR CODE
  
 LCC5     LCN    0           INDICATE MICROCODE NOT FOUND 
 LCC6     STD    CN 
          LJM    LCCX        RETURN 
  
  
 LCCE     VFD    30/0LMB468,30/0
 ICF      SPACE  4,10 
**        ICF - ISSUE CCC/CTS FUNCTION. 
* 
*         ENTRY  (A) = FUNCTION.
* 
*         EXIT   (A) = 0 IF NO ERROR. 
*                (A) = ERROR CODE IF ERROR. 
*                (CN+1) = FUNCTION THAT WAS ISSUED. 
  
  
 ICF2     LDN    0
  
 ICF      SUBR               ENTRY/EXIT 
          DCN    CH          ENSURE CHANNEL IS INACTIVE 
          STD    CN+1        SAVE FUNCTION
          FAN    CH          ISSUE THE FUNCTION 
          LCN    0
 ICF1     IJM    ICF2,CH     IF FUNCTION REPLY RECEIVED 
 ICFA     EQU    *-1         (ADDRESS TO BE RELOCATED)
          SBN    1
          NJN    ICF1        IF TIMEOUT NOT EXPIRED 
          LDN    /MTX/FRJ    FUNCTION REJECT
          UJN    ICFX        RETURN 
 MCI      SPACE  4,10 
**        MCI - MODIFY CHANNEL INSTRUCTIONS.
* 
*         ENTRY  (CN) = CHANNEL NUMBER. 
*                (LA) = LOAD ADDRESS. 
* 
*         USES   T3.
  
  
 MCI      SUBR               ENTRY/EXIT 
          LDC.   MCIA 
          STD    T3          ADDRESS OF CHANNEL TABLE 
 MCI1     LDI    T3          GET ADDRESS OF CHANNEL INSTRUCTION 
          ZJN    MCIX        IF END OF CHANNEL TABLE
          ADD    LA          RELOCATE ADDRESS 
          STD    T0 
          LDI    T0 
          SCN    37 
          LMD    CN          SET CHANNEL NUMBER 
          STI    T0 
          AOD    T3 
          UJN    MCI1        CONTINUE MODIFYING CHANNEL INSTRUCTIONS
  
          LIST   G
  
 MCIA     CHTB   CH          CHANNEL TABLE
          SPACE  4,10 
*         ASSEMBLE RELOCATION CODE. 
* 
*         NOTE - DUE TO THE INTERACTION OF COMMON DECKS *COMPRLI* AND 
*                *COMPCHM*, THE ADDRESS OF ANY INSTRUCTION WHICH
*                SPECIFIES BOTH A CHANNEL NUMBER AND A RELOCATABLE
*                ADDRESS MUST BE MANUALLY ADDED TO THE FOLLOWING TABLE. 
  
  
          HERE
          CON    LCCC 
          CON    LCCD 
          CON    ICFA 
          CON    0
          SPACE  4,10 
*         CHECK FOR OVERFLOW. 
  
  
          ERRPL  *-ZCTL      *0CT* OVERFLOWS CALLING PROGRAM
  
          END 
