1HY 
          IDENT  1HY,HYDD 
          TITLE  1HY - HYDRA (887) DRIVER.
          CIPPU  ,S 
          BASE   M
          SST 
*COMMENT  1HY - HYDRA (887) DRIVER. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4,10 
***       1HY - HYDRA (887) DRIVER. 
* 
*         P. D. HAAS.        85/12/16.
          SPACE  4,10 
***       *1HY* IS THE DRIVER FOR THE 887 DISK STORAGE SUBSYSTEM. 
* 
*         THE 887 DISK DRIVES ARE SUPPORTED AS BUFFERED I/O 
*         DEVICES.  REQUESTS THAT ARE PROCESSED BY *1HY* ARE
*         POSTED BY *CPUMTR* IN THE BUFFERED I/O TABLES IN *CMR*. 
*         *1HY* INTERLOCKS UNITS, DELINKS BUFFERS, AND COMPLETES
*         SAID REQUESTS BY ISSUING APPROPRIATE *BIOM* FUNCTIONS.
* 
*         EACH COPY OF *1HY* WILL SUPPORT ONE CONCURRENT CHANNEL AND
*         IS THE SOLE DRIVER FOR ALL HYDRA DISKS ON THAT CHANNEL. 
*         *1HY* MUST BE LOADED INTO A CONCURRENT PP, IN THE SAME
*         BANK AS THE CHANNEL IT IS TO SERVICE. 
* 
*         *1HY* SCANS THROUGH THE *PUT* ENTRIES IN A CIRCULAR FASHION 
*         LOOKING FOR REQUESTS TO PROCESS.  ONCE A REQUEST IS FOUND,
*         *1HY* USES THE PHYSICAL DISK AND UEM ADDRESSES IN THE 
*         CORRESPONDING *CBT* ENTRY TO DETERMINE THE ACTION TO BE 
*         TAKEN.  *1HY* WILL ATTEMPT TO PROCESS CONSECUTIVE REQUESTS
*         ON THE CURRENT UNIT UNTIL THE END OF THE UNIT I/O QUEUE,
*         OR A CONSECUTIVE REQUEST WAS NOT FOUND.  AT THIS POINT
*         *1HY* WILL RESUME ITS SEARCH THROUGH THE *PUT* WITH THE 
*         *PUT* ENTRY IMMEDIATELY FOLLOWING THE ONE JUST PROCESSED. 
          SPACE  4,10 
***       CALL. 
* 
*T        18/ *1HY*, 6/ CP, 6/ CO, 18/, 7/ 1, 5/ CH 
* 
*         CP     CONTROL POINT NUMBER (MUST BE SYSTEM CP).
*         CO     CHANNEL TABLE ORDINAL (SET BY *CPUMTR*). 
*         CH     CHANNEL NUMBER BEING SERVICED BY THIS PP.
          SPACE  4,10 
***       DAYFILE MESSAGES. 
* 
*         1HY - UNAUTHORIZED CALL.
* 
*         *1HY* WILL ISSUE THIS MESSAGE AND ABORT IF
*         NOT ASSIGNED TO THE SYSTEM CONTROL POINT. 
          SPACE  4,10 
***       ERRLOG MESSAGES.
* 
*         EQORD,TKNNNN, MEDIA DEFECT ENCOUNTERED. 
* 
*         A MEDIA DEFECT HAS BEEN ENCOUNTERED ON EQUIPMENT WITH EST 
*         ORDINAL ORD, LOGICAL TRACK NNNN.  A REQUEST HAS BEEN ISSUED 
*         TO AUTOMATICALLY FLAW THIS TRACK WHEN IT IS DROPPED.
          SPACE  4,10 
***       OPERATOR MESSAGES.
* 
*         EQORD, DIAGNOSTICS RUNNING. 
* 
*         EQORD, SPIN UP PENDING. 
          SPACE  4,10 
***       ORGANIZATION OF THE 887 (MEASUREMENTS IN DECIMAL).
* 
*         EQUIPMENT TYPE                    *DF*
* 
*         UNITS/LOGICAL DEVICE (N)         1 - 3
* 
*         PHYSICAL ORGANIZATION:  
* 
*           WORDS/PHYSICAL SECTOR            512
*           PHYSICAL SECTORS/TRACK            38
*           PHYSICAL TRACKS/CYLINDER           4
*           CYLINDERS/DEVICE                 884 * N
*           WORDS/DEVICE              68,796,416 * N
* 
*         LOGICAL ORGANIZATION: 
* 
*           WORDS/LOGICAL SECTOR              64
*           LOGICAL SECTORS/PHYSICAL SECTOR    8
*           LOGICAL SECTORS/LOGICAL TRACK    608 * N
*           LOGICAL TRACKS/CYLINDER            2
*           LOGICAL TRACKS/DEVICE           1768
* 
*         MAXIMUM SUSTAINED DATA RATE        983 K WORDS/SECOND 
* 
* 
*         EQUIPMENT TYPE                    *DH*
* 
*         UNITS/LOGICAL DEVICE (N)         1 - 2
* 
*         PHYSICAL ORGANIZATION:  
* 
*           WORDS/PHYSICAL SECTOR           2048
*           PHYSICAL SECTORS/TRACK            11
*           PHYSICAL TRACKS/CYLINDER           4
*           CYLINDERS/DEVICE                 884 * N
*           WORDS/DEVICE              79,659,008 * N
* 
*         LOGICAL ORGANIZATION: 
* 
*           WORDS/LOGICAL SECTOR              64
*           LOGICAL SECTORS/PHYSICAL SECTOR   32
*           LOGICAL SECTORS/LOGICAL TRACK    704 * N
*           LOGICAL TRACKS/CYLINDER            2
*           LOGICAL TRACKS/DEVICE           1768
* 
*         MAXIMUM SUSTAINED DATA RATE       1122 K WORDS/SECOND 
          SPACE  4,10 
***       DISK ERROR PROCESSING DONE BY *1HY*.
* 
*         FOR EACH REQUEST THAT IS PROCESSED, *1HY* KEEPS A COUNTER 
*         WHICH CONTAINS THE NUMBER OF RETRIES THAT HAVE BEEN 
*         ATTEMPTED WHILE TRYING TO SUCCESSFULLY PROCESS THE REQUEST. 
*         WHEN A REQUEST IS COMPLETED *1HY* CHECKS TO SEE IF THE
*         ERROR COUNT IS NON-ZERO.  *1HY* WILL LOG A BML MESSAGE
*         AND INCREMENT THE RECOVERED ERROR COUNT IN THE MST IF THE 
*         ERROR COUNT IS NON-ZERO.
* 
*         IF THE ERROR COUNT REACHES *MERC* BEFORE THE REQUEST IS 
*         SUCCESSFULLY COMPLETED, *1HY* WILL SET THE ERROR FLAGS IN 
*         THE *CBT*, LOG A FATAL ERROR IN THE BML, AND INCREMENT THE
*         UNRECOVERED ERROR COUNT IN THE MST. 
          SPACE  4,10 
***       SPECIAL PROGRAMMING NOTES.
* 
*         THE FOLLOWING IS A LIST OF SPECIAL NOTES THAT SHOULD BE 
*         READ AND UNDERSTOOD BEFORE ANY MODIFICATIONS ARE MADE TO
*         THIS PROGRAM. 
* 
* 
*         1)  WHERE POSSIBLE, *CMR* POINTERS HAVE BEEN PLUGGED BY THE 
*             PRESET ROUTINE TO IMPROVE THE EXECUTION SPEED OF THE
*             PROGRAM AND TO MINIMIZE THE AMOUNT OF CODE. 
* 
*         2)  THIS PROGRAM EXCHANGES *CPUMTR* WITHOUT WAITING FOR 
*             THE REQUEST TO COMPLETE.  ROUTINE *CMC* SHOULD BE CALLED
*             IF THE *MONITOR* MACRO IS TO BE USED WHILE THERE IS A 
*             POSSIBILITY OF AN OUTSTANDING MONITOR REQUEST.
* 
*         3)  THE DEVICE STATE TABLE IS BUILT AT LOCATION *EXR* IN
*             PP RESIDENT, THEREFORE IT IS NOT POSSIBLE TO USE THE
*             *EXR* AND *SMS* ROUTINES. 
          SPACE  4,10 
  
**        COMMON DECKS. 
  
  
*CALL     COMPMAC 
 RICHI$   EQU    1           SELECT DEFERRED INSTRUCTION MODIFICATION 
*CALL     COMPCHI 
*CALL     COMSCPS 
 QUAL$S   SET    0           REMOVE QUALIFICATION OF COMSDFS CONSTANTS
*CALL     COMSDFS 
          LIST   X
*CALL     COMSHIO 
          LIST   *
          QUAL   IOU
*CALL     COMSIOU 
          QUAL   *
*CALL     COMSLSD 
*CALL     COMSMSC 
*CALL     COMSMSP 
*CALL     COMSPIM 
*CALL     COMS1DS 
          TITLE  CONSTANTS AND DEFINITIONS. 
          SPACE  4,10 
****      DIRECT CELL ALLOCATION. 
  
  
 NR       EQU    15 - 21     NEXT REQUEST 
 WB       EQU    22 - 26     CM WORD BUFFER 
  
*         THE NEXT FIVE LOCATIONS ARE ORDER DEPENDENT.
  
 PB       EQU    27          PREVIOUS CONTROL BUFFER ORDINAL
 CB       EQU    30          CURRENT CONTROL BUFFER ORDINAL 
 NB       EQU    31          NEXT CONTROL BUFFER ORDINAL
 EO       EQU    32          EST ORDINAL
 UN       EQU    33          UNIT NUMBER
  
 UA       EQU    34 - 35     UEM ADDRESS / 100
 RC       EQU    36          REQUEST COUNT
 DT       EQU    37          DEVICE TYPE
 SS       EQU    40          SLAVE STATUS FLAGS 
 PO       EQU    41          CURRENT *PUT* ORDINAL
 TO       EQU    42          COMMAND TIMEOUT
 SF       EQU    43          DEVICE SELECTED FLAG 
 UC       EQU    44          UNIT ACTIVITY COUNT
          ERRNZ  SF+1-UC     CODE DEPENDS ON VALUE
 RW       EQU    45          READ / WRITE FLAG
 PA       EQU    46          PROCESSOR ADDRESS
 DI       EQU    47          DEVICE INDEX 
 CR       EQU    57          CHANNEL RESERVED STATUS
 ML       EQU    60          MESSAGE LENGTH 
 FC       EQU    61          FAULT CODE 
 CD       EQU    62          CHANNEL DATA 
 RF       EQU    63          SPECIAL REQUEST FLAGS
  
****
          SPACE  4,10 
**        ISI ADAPTOR FUNCTION CODES. 
  
  
 FCMC     EQU    0#000       MASTER CLEAR 
 FCRC     EQU    0#100       READ CONTROL REGISTER
 FCWC     EQU    0#101       WRITE CONTROL REGISTER 
 FCRM     EQU    0#200       READ MASK REGISTER 
 FCWM     EQU    0#201       WRITE MASK REGISTER
 FCRE     EQU    0#300       READ ERROR STATUS
 FCRO     EQU    0#400       READ OPERATIONAL STATUS
 FCIS     EQU    0#500       REQUEST IDLE STATUS
 FCRT     EQU    0#600       READ *T* REGISTERS 
 FCWT     EQU    0#601       WRITE *T* REGISTERS
 FCRS     EQU    0#700       READ TEST SEED 
 FCWS     EQU    0#701       WRITE TEST SEED
 FCCH     EQU    0#800       CLEAR SELECT HOLD
 FCSH     EQU    0#801       SET SELECT HOLD
 FCCS     EQU    0#900       CLEAR COMMAND SEQUENCE 
 FCSS     EQU    0#901       SET COMMAND SEQUENCE 
 FCSO     EQU    0#A00       FORCE SYNC OUT 
 FCPM     EQU    0#B00       SET PP MODE
 FCCD     EQU    0#C00       CLEAR DMA MODE 
 FCSD     EQU    0#C01       SET DMA MODE 
 FCCE     EQU    0#D00       CLEAR ECHO MODE
 FCSE     EQU    0#D01       SET ECHO MODE
 FCCT     EQU    0#E00       CLEAR *T* REGISTERS
          SPACE  4,10 
**        FUNCTION WORD OPTION FLAGS. 
  
  
 FOBS     EQU    1S8         BUS SLAVE (IHD) SELECT 
 FONI     EQU    1S9         NON-INTERLOCKED MODE 
 FOTT     EQU    1S10        TERMINATE I/O TRANSFER 
 FOZI     EQU    1S11        ZERO-FILL INHIBIT
 FOCA     EQU    1S12        CLEAR ATTENTION
 FODE     EQU    1S13        DATA EXCHANGE
 FOSR     EQU    1S14        SELECTIVE RESET
 FOWR     EQU    1S15        WRITE SELECT 
          SPACE  4,10 
**        *IHD* FUNCTION WORDS. 
  
  
 FWSB     EQU    0#80                  READ STATUS BLOCK
 FWDS     EQU    0#90                  READ DEVICE STATUS 
 FWBS     EQU    FOBS                  BUS SLAVE (IHD) SELECT 
 FWCA     EQU    FOCA                  CLEAR ATTENTION
 FWSN     EQU    FOCA+FOTT+0#D0        READ SERIAL NUMBER 
 FWRL     EQU    FOCA+FOTT+0#FA        READ REVISION LEVEL
 FWEP     EQU    FODE+FOCA+FOTT        ERROR PROCESSING 
 FWEL     EQU    FODE+FOCA+FOTT        READ ERROR LOG 
 FWER     EQU    FODE+FOCA+FOTT        READ ERROR REGISTER
 FWRE     EQU    FODE+FOTT+FONI+FOCA   READ EXCHANGE
 FWSR     EQU    FOSR+FOCA             SELECTIVE RESET
 FWCB     EQU    FOWR+FOCA             WRITE COMMAND BLOCK
 FWWE     EQU    FOWR+FWRE+FOZI        WRITE EXCHANGE 
          SPACE  4,10 
**        *IHD* COMMAND CODES.
  
  
 CCRL     EQU    0#01+1S15   READ ERROR LOG 
 CCRI     EQU    0#02+1S15   READ ERROR REGISTER IMAGE
 CCNO     EQU    0#05+1S15   NO OPERATION 
 CCSD     EQU    0#12+1S15   SPIN-DOWN DRIVE
 CCSU     EQU    0#13+1S15   SPIN-UP DRIVE
 CCOW     EQU    0#23+1S15   INITIATE OPEN-ENDED WRITE
 CCOR     EQU    0#35+1S15   INITIATE OPEN-ENDED READ 
 CCLM     EQU    0#53+1S15   LOAD OPERATING MODE PARAMETERS 
 CCLD     EQU    0#54+1S15   LOAD ATTENTION DELAY PARAMETERS
 CCD2     EQU    0#70+1S15   EXECUTE LEVEL 2 DIAGNOSTICS
 CCRT     EQU    0#78+1S15   EXECUTE READ TEST
 CCWT     EQU    0#79+1S15   EXECUTE WRITE TEST 
 CCD1     EQU    0#7A+1S15   EXECUTE LEVEL 1 DIAGNOSTICS
          SPACE  4,10 
**        *IHD* COMMAND EXECUTION STATUS. 
  
  
 ESUI     EQU    00          *IHD* UNIT IDLE
 ESRD     EQU    10          READ DATA AVAILABLE
 ESBS     EQU    20          BUFFER SPACE AVAILABLE 
 ESCB     EQU    40          COMMAND BLOCK INDEPENDENT
 ESUA     EQU    60          UNSOLICITED ATTENTION
 ESCC     EQU    70          COMMAND COMPLETE 
          SPACE  4,10 
**        *IHD* COMMAND BLOCK PARAMETER WORD VALUES.
  
  
 PWIT     EQU    0#0000      INTEGRITY TEST 
 PWWT     EQU    0#0005      WRITE TEST 
 PWRT     EQU    0#0006      READ TEST
 PWADDF   EQU    0#0401      ATTENTION DELAY (4KB SECTOR) 
 PWADDH   EQU    0#0101      ATTENTION DELAY (16KB SECTOR)
 PWOM     EQU    0#3D02      OPERATING MODE 
          SPACE  4,10 
**        MAINTENANCE REGISTER REQUEST CODE SYMBOLS.
  
  
 MR       EQU    /IOU/MR     MAINTENANCE CHANNEL
 IOUC     EQU    /IOU/IOUC+/IOU/MRRD   READ CONNECT CODE
 RMRF     EQU    /IOU/MRRD-/IOU/MRRD   READ REGISTER
 WMRF     EQU    /IOU/MRWT-/IOU/MRRD   WRITE REGISTER 
  
 RFMR     EQU    RMRF*10000+/IOU/FMCR  READ FAULT MASK REGISTER 
 RCSR     EQU    RMRF*10000+/IOU/C0CR  READ CHANNEL STATUS REGISTER 
 WFMR     EQU    WMRF*10000+/IOU/FMCR  WRITE FAULT MASK REGISTER
          SPACE  4,10 
**        FAULT ANALYSIS CODES. 
  
  
 ECPE     EQU    1           CHANNEL PARITY ERROR 
  
 ECER     EQU    4           CHANNEL DETECTED ERROR 
 ECCM     EQU    5           CHANNEL DETECTED CM ERROR
 ECIE     EQU    6           ISI CHANNEL ERROR
 ECHF     EQU    7           CHANNEL HUNG FULL
  
 ETAT     EQU    10          ATTENTION TIMEOUT
 ETFN     EQU    11          CHANNEL FUNCTION TIMEOUT 
  
 EDPE     EQU    14          DATA PARITY ERROR
  
 EDNR     EQU    20          DEVICE NOT READY 
 EOTC     EQU    21          OVER TEMP CONDITION
  
 EIDT     EQU    24          INCOMPLETE DATA TRANSFER 
  
 EIRQ     EQU    30          *IHD* FAILURE
 ECBN     EQU    31          COMMAND BLOCK NUMBER 
 EICU     EQU    32          INCORRECT UNIT SELECTED
 ETSL     EQU    33          SELECT TIMEOUT 
  
 ESUF     EQU    34          SPIN-UP FAILURE
 ESDF     EQU    35          SPIN-DOWN FAILURE
 ETTC     EQU    36          TRANSFER COMPLETE TIMEOUT
 EUES     EQU    37          UNEXPECTED EXECUTION STATUS
  
 ETCB     EQU    40          COMMAND BLOCK TIMEOUT
 EUDS     EQU    41          UNEXPECTED DELAY STATUS
 ELOP     EQU    42          LOAD OPERATING PARAMETERS FAILURE
 EDSA     EQU    43          SELECT ACTIVE DROPPED
  
 ETTR     EQU    44          *T* REGISTER EMPTY TIMEOUT 
 EIOS     EQU    45          I/O INITIATION ERROR 
 EIOC     EQU    46          I/O COMPLETE ERROR 
  
 EDTF     EQU    50          DIAGNOSTIC FAULT 
  
 EDRA     EQU    54          DRIVE RESERVED TO ALTERNATE ACCESS 
          SPACE  4,10 
**        DEVICE STATE TABLE DEFINITIONS. 
  
  
          LOC    0
 PUTO     BSS    1           *PUT* ORDINAL
 CREG     BSS    1           CONTROL REGISTER IMAGE 
 ADDR     BSS    1           PROCESSOR ADDRESS
 RADD     BSS    1           RETURN ADDRESS 
 ATTN     BSS    1           ATTENTION RETURN 
 EEST     BSS    1           EXPECTED EXECUTION STATUS
 RWST     BSS    1           READ / WRITE STATUS
 RQIN     BSS    1           REQUEST QUEUE INDEX
 RQLN     EQU    10          REQUEST QUEUE LENGTH 
 IORQ     BSS    RQLN        I/O REQUEST QUEUE
 CBCT     BSS    1           CUMULATIVE BUFFER COUNT
 CYLN     BSS    1           CYLINDER ON SEEK 
 TKSN     BSS    1           TRACK + SECTOR ON SEEK 
 ERCT     BSS    1           ERROR COUNT
 ELEN     BSS    1           ERROR LOG ENTRY NUMBER 
 ELRC     BSS    1           ERROR LOG REPETITION COUNT 
 EREN     BSS    1           ERROR REGISTER ENTRY NUMBER
 SREQ     BSS    1           SPECIAL REQUEST
 IPPS     BSS    1           I/O PREPROCESSING STATUS 
 LCMD     BSS    1           LAST *IHD* COMMAND 
 ESAD     BSS    1           ERROR STEP ADDRESS 
  
 DSTBE    BSS    0           LENGTH OF STATE TABLE ENTRY
          LOC    0
          SPACE  4,15 
****      ASSEMBLY CONSTANTS. 
  
  
 CH       EQU    16          CHANNEL NUMBER 
 MXND     EQU    10*2        MAXIMUM NUMBER OF UNITS / DRIVER 
 DSTB     EQU    EXR         START OF DEVICE STATE TABLES 
 DSTBL    EQU    DSTB+DSTBE*MXND  LWA+1 OF DEVICE STATE TABLES
 OHYD     MAX    PPFW,DSTBL  DRIVER ORIGIN
  
*         THE FOLLOWING SYMBOLS DEFINE LOCATIONS IN THE I/O 
*         REQUEST QUEUE (IORQ) OF THE DEVICE STATE TABLE. 
*         THESE LOCATIONS MAY BE USED ONLY DURING ERROR AND 
*         SPECIAL REQUEST PROCESSING (NOT DURING I/O PROCESSING). 
  
 ENAD     EQU    IORQ+RQLN-1 ERROR NEXT ADDRESS 
 CACT     EQU    ENAD-1      CLEAR ATTENTION COUNT
 SIST     EQU    CACT-1      SYSTEM INTERVENTION STATUS 
 MIST     EQU    SIST-1      MANUAL INTERVENTION STATUS 
 GSST     EQU    MIST-1      GENERAL SLAVE STATUS 
 IOST     EQU    GSST-1      READ WRITE STATUS
 ERAD     EQU    IOST-1      ERROR RETURN ADDRESS 
          ERRNG  ERAD-IORQ   CODE DEPENDS ON VALUE
  
*         THE FOLLOWING VALUE IS USED AS A SHIFT COUNT
*         TO DETERMINE THE FUNCTION TIMEOUT DELAY (2**N). 
  
 FTOS     EQU    0           1 MILLISECOND
          ERRNG  8D-FTOS     VALUE TOO LARGE
 .2       DECMIC FTOS+2 
 FTOD     EQU    370S".2"    FUNCTION TIMEOUT DELAY 
  
 DRFM     EQU    1000        DIRECTION FLAG MASK
 ILFM     EQU    4000        INTERLOCK FLAG MASK
 MERC     EQU    7           ERROR PROCESSING RETRY COUNT 
 CSRC     EQU    MERC/2+1    CHANNEL SWITCH RETRY COUNT 
 FTRC     EQU    3           FUNCTION TIMEOUT RETRY COUNT 
 DSRC     EQU    20D         DEVICE SELECT RETRY COUNT
 ERLGL    EQU    48D         ERROR LOG LENGTH 
 ERRGL    EQU    48D         ERROR REGISTER LENGTH
 SLSTL    EQU    7           SLAVE STATUS BLOCK LENGTH
 DVSTL    EQU    10          DEVICE STATUS BLOCK LENGTH 
 STSBL    EQU    SLSTL+DVSTL COMBINED STATUS BLOCK LENGTH 
 DBUFL    MAX    ERLGL,ERRGL DATA BUFFER LENGTH 
 EBUFL    EQU    5*10D       ERROR MESSAGE BUFFER LENGTH
  
****
          SPACE  4,10 
*         THE FOLLOWING SYMBOL DEFINITION CONTROLS WHICH (IF ANY) 
*         OF THE DIAGNOSTICS ARE USED FOR DEVICE VERIFICATION.
  
  
*CCVD     EQU    CCNO        NO DIAGNOSTICS 
*CCVD     EQU    CCD1        LEVEL 1 DIAGNOSTICS
*CCVD     EQU    CCD2        LEVEL 2 DIAGNOSTICS
  
 CCVD     EQU    CCD2        LEVEL 2 DIAGNOSTICS
          TITLE  MACROS.
          SPACE  4,10 
**        MACRO DEFINITIONS.
 TBLM     SPACE  4,10 
**        TBLM - CREATE TABLE ENTRY MACRO.
* 
*NAM      TBLM
* 
*         ENTRY  NAM = TABLE NAME.
* 
*         EXIT   NAM_E MACRO DEFINED. 
  
  
          PURGMAC  TBLM 
  
          MACRO  TBLM,NAM 
          PURGMAC  NAM_E
 NAM_E    MACRO  ADDR 
          LOCAL  A
          MACREF NAM_E
          NOREF  A
 A        EQU    ADDR 
 T_NAM    RMT 
          CON    A
          RMT 
 TBLM     ENDM
 CBTE     SPACE  4,10 
**        CBTE - CONTROL BUFFER TABLE ENTRY.
* 
*         THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TCBT* 
*         THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH 
*         REQUIRES THE FWA OF THE CONTROL BUFFER TABLE. 
* 
*         CBTE   ADDR 
* 
*         ENTRY  (ADDR) = ADDRESS OF INSTRUCTION. 
* 
*         EXIT   ADDRESS IS ADDED TO THE REMOTE BLOCK *TCBT*. 
  
  
 CBT      TBLM
 CCTE     SPACE  4,10 
**        CCTE - CHANNEL CONTROL TABLE ENTRY. 
* 
*         THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TCCT* 
*         THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH 
*         REQUIRES THE FWA OF THE CHANNEL CONTROL TABLE.
* 
*         CCTE   ADDR 
* 
*         ENTRY  (ADDR) = ADDRESS OF INSTRUCTION. 
* 
*         EXIT   ADDRESS IS ADDED TO THE REMOTE BLOCK *TCCT*. 
  
  
 CCT      TBLM
 CHTE     SPACE  4,10 
**        CHTE - CHANNEL TABLE ENTRY. 
* 
*         THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TCHT* 
*         THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH 
*         REQUIRES THE FWA OF THE CHANNEL TABLE.
* 
*         CHTE   ADDR 
* 
*         ENTRY  (ADDR) = ADDRESS OF INSTRUCTION. 
* 
*         EXIT   ADDRESS IS ADDED TO THE REMOTE BLOCK *TCHT*. 
  
  
 CHT      TBLM
 EMBE     SPACE  4,10 
**        EMBE - ERROR MESSAGE TABLE ENTRY. 
* 
*         THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TEMB* 
*         THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH 
*         REQUIRES THE FWA OF THE ERROR MESSAGE TABLE.
* 
*         EMBE   ADDR 
* 
*         ENTRY  (ADDR) = ADDRESS OF INSTRUCTION. 
* 
*         EXIT   ADDRESS IS ADDED TO THE REMOTE BLOCK *TEMB*. 
  
  
 EMB      TBLM
 EXPE     SPACE  4,10 
**        EXPE - EXCHANGE PACKAGE ADDRESS ENTRY.
* 
*         THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TEXP* 
*         THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH 
*         REQUIRES THE FWA OF THE PP EXCHANGE PACKAGE.
* 
*         EXPE   ADDR 
* 
*         ENTRY  (ADDR) = ADDRESS OF INSTRUCTION. 
* 
*         EXIT   ADDRESS IS ADDED TO THE REMOTE BLOCK *TEXP*. 
  
  
 EXP      TBLM
 FTTE     SPACE  4,10 
**        FTTE - FUNCTION TIMEOUT TABLE ENTRY.
* 
*         THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TFTT* 
*         THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH 
*         REQUIRES THE FWA OF THE FUNCTION TIMEOUT TABLE. 
* 
*         FTTE   ADDR 
* 
*         ENTRY  (ADDR) = ADDRESS OF INSTRUCTION. 
* 
*         EXIT   ADDRESS IS ADDED TO THE REMOTE BLOCK *TFTT*. 
  
  
 FTT      TBLM
 PUTE     SPACE  4,10 
**        PUTE - PHYSICAL UNIT TABLE ENTRY. 
* 
*         THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TPUT* 
*         THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH 
*         REQUIRES THE FWA OF THE PHYSICAL UNIT TABLE.
* 
*         PUTE   ADDR 
* 
*         ENTRY  (ADDR) = ADDRESS OF INSTRUCTION. 
* 
*         EXIT   ADDRESS IS ADDED TO THE REMOTE BLOCK *TPUT*. 
  
  
 PUT      TBLM
          TITLE  MAIN PROGRAM.
 HYD      SPACE  4,10 
**        HYD - MAIN PROGRAM. 
  
  
          ORG    OHYD 
          RICHI              BEGIN CHANNEL INSTRUCTION MODIFICATION 
  
 HYDD     LJM    PRS         PRESET DRIVER
 HYD      EQU    *-1
          LDM    HYD         PRESERVE RETURN ADDRESS
          STM    ADDR,DI
 HYD1     LDD    SF 
          ZJN    HYD3        IF DEVICE NOT SELECTED 
          LDC    FCCH 
          RJM    FCN         CLEAR SELECT HOLD
          SOD    SF 
 HYD3     BSS    0
          LDC    0           CHECK ERROR PROCESSING 
 UNSW     EQU    *-1
          NJN    HYD5        IF UNIT SWITCH DISABLED
          LDN    DSTBE
          RAD    DI          ADVANCE DEVICE INDEX 
          LMC    DSTBL
 HYDA     EQU    *-1
          NJN    HYD5        IF NOT END OF STATUS BLOCK 
          RJM    CCR
          ZJN    HYD7        IF CHANNEL DOWN
 HYD4     LDC    DSTB 
          STD    DI          RESET START OF STATUS BLOCK
 HYD5     RJM    CFR
          UJN    HYD3        CHECK NEXT DEVICE
  
 HYD7     UJN    *+2         FIRST PASS 
 HYDB     EQU    HYD7 
          UJN    HYD8        DROP PP ON SECOND PASS 
          SOM    HYDB 
          LDN    0           ENABLE UNIT SWITCH 
          STM    UNSW 
          LDN    PSNI        CHANGE PATH THRU *CFR* 
          STM    CFRA 
          LDC    CMP7        RELEASE *PUT* INTERLOCKS 
          STM    CFRB 
          UJN    HYD4        LOOP THRU DEVICE STATE TABLE 
  
 HYD8     MONITOR  DPPM      DROP PP
          LJM    PPR         EXIT TO PPR
          TITLE  READ / WRITE PROCESSING. 
 PIO      SPACE  4,10 
**        PIO - READ / WRITE PROCESSING.
  
  
 PIO      BSS    0
          LDML   PIOB,RW     ISSUE SEEK COMMAND 
          LMC    1S17 
          RJM    WCB         WRITE COMMAND BLOCK
  
*         WAIT UNTIL *IHD* HAS RAISED ATTENTION.
  
          LDM    PIOC,RW     PROCESS ATTENTION
          RJM    ATT
          ZJN    PIO2        IF EXPECTED STATUS 
          LDN    EIOS 
 PIO1     RJM    ERR         PROCESS ERROR
  
*         INITIATE DATA TRANSFER. 
  
 PIO2     LDN    1           SET CHANNEL ACTIVE FOR *CPD* 
          RJM    SCD
          LDML   PIOD,RW     SELECT INFORMATION EXCHANGE
          RJM    WFW
          LDC    FCSD        SET DMA MODE 
          RJM    FCN
          LDM    PIOE,RW     SET PROCESSOR ADDRESS
          STM    PIOA 
 PIO3     RJM    0           PROCESS I/O REQUEST
 PIOA     EQU    *-1
 PIO6     NJN    PIO1        IF TIMEOUT ERROR 
  
*         WAIT - TRANSFER COMPLETE. 
  
 PIO7     LCN    1           CHECK OPERATIONAL STATUS 
          RJM    COS
          ZJN    PIO8        IF TRANSFER COMPLETE 
          LDN    ETTC 
          UJN    PIO1        TRANSFER IN PROGRESS TIMEOUT 
  
 PIO8     RJM    SFR         CHECK FOR CONSECUTIVE REQUEST
          STD    CB 
          NJN    PIO3        IF ONE MORE REQUEST
  
*         COMPLETE READ / WRITE OPERATIONS. 
  
          LDC    FCCS        CLEAR COMMAND SEQUENCE 
          RJM    FCN
          LDN    0           CLEAR CHANNEL ACTIVE 
          RJM    SCD
          LDN    ESCC        PROCESS ATTENTION
          RJM    ATT
          ZJN    PIO9        IF *COMMAND COMPLETE*
          LDN    EIOC 
          UJN    PIO6        ERROR IN I/O COMPLETE STATUS 
  
 PIO9     LDD    SS          CHECK FOR DELAY STATUS 
          LPN    1
          ZJN    PIO11       IF NO DELAY STATUS 
          LDD    RW 
          STM    IPPS,DI     SAVE READ / WRITE STATUS 
          LDN    0
          STD    RW          SELECT *IHD* ERROR LOG 
          STM    RWST,DI
          LDC    PIO10       SET RETURN ADDRESS 
          STM    ESAD,DI
          LJM    LGE1        DUMP ERROR LOG 
  
 PIO10    LDM    IPPS,DI     RESTORE READ / WRITE STATUS
          STD    RW 
          STM    RWST,DI
          LDN    0           ENABLE ERROR PROCESSING
          STM    ESAD,DI
 PIO11    LJM    CMP         COMPLETE PROCESSING
  
  
 PIOB     BSS    0           COMMAND CODES
          CONL   CCOR 
          CONL   CCOW 
  
 PIOC     BSS    0           EXPECTED EXECUTION STATUS
          CON    ESRD 
          CON    ESBS 
  
 PIOD     BSS    0           INFORMATION EXCHANGE FUNCTION WORDS
          CONL   FWRE 
          CONL   FWWE 
  
 PIOE     BSS    0           PROCESSOR ADDRESSES
          CON    RBD
          CON    WBD
          TITLE  DOCUMENT UNIT CHARACTERISTICS. 
 DUC      SPACE  4,10 
**        DUC - DAYFILE UNIT CHARACTERISTICS. 
  
  
 DUC      BSS    0
          LDN    ZERL        CLEAR MESSAGE HEADER 
          CRD    WB 
          LDN    MLDY        SET DAYFILE CODE 
          STD    WB+4 
          LDC    FWSN 
          RJM    WFW         REQUEST SERIAL NUMBER
          LDN    2
          STD    T7          SET BLOCK SIZE 
          ACN    CH 
          IAM    DBUF,CH     READ SERIAL NUMBER 
          RJM    CFE
          LDC    FWRL        REQUEST OTHER CHARACTERISTICS
          RJM    WFW
          LDN    6           READ CHARACTERISTICS 
          ACN    CH 
          IAM    DBUF+2,CH   READ REVISION LEVEL
          RJM    CFE
          LDC    SBUF        SET MESSAGE ADDRESS
          STM    MAD1 
          ADN    2*5         ASSEMBLY BUFFER ADDRESS
          STD    T3 
          LDC    10S12+DBUF  UNPACK HEX DATA
          RJM    UHD
          ADN    2           SET MESSAGE LENGTH 
          STD    WB+3 
          LDM    MSGL        RESIDUAL BYTE COUNT
          STD    WB+2 
          LDC    DM0401      MESSAGE ID 
          STD    PB 
          LDC    HI0107      SET SYMPTOM CODE 
          STD    PB+1 
          LDD    DT          DEVICE TYPE
          SHN    1
          ERRNZ  PB+3-EO     CODE DEPENDS ON VALUE
          ADC    2RDF 
          ERRNZ  PB+4-UN     CODE DEPENDS ON VALUE
          STD    PB+2 
          LDD    MA          MOVE BASIC MESSAGE DATA
          CWM    WB,T7
          ERRNZ  WB+5-PB     CODE DEPENDS ON VALUE
          SBN    2
          CRM    SBUF,T7
          LDN    0
          STD    RW          ISSUE BML MESSAGE
          RJM    IBM
          LJM    CSR         CLEAR SPECIAL REQUEST FLAG 
          TITLE  LOG *IHD* ERRORS.
 LGE      SPACE  4,10 
**        LGE - LOG *IHD* ERRORS. 
* 
*         ENTRY  (RW) = 0 TO LOG ERROR LOG. 
*                     = 1 TO LOG ERROR REGISTER.
  
  
 LGE      BSS    0
          LDC    CMP         SET RETURN ADDRESS 
 LGE1     STM    RADD,DI
          LDN    3           SET TIMEOUT VALUE = 3 SECONDS
          STD    TO 
          LDML   LGEA,RW     REQUEST LOG / REGISTER DUMP
          RJM    WCB
  
*         WAIT UNTIL *IHD* HAS RAISED ATTENTION.
  
          LDN    ESRD        PROCESS ATTENTION
          RJM    ATT
          ZJN    LGE3        IF EXPECTED RESPONSE 
          LDN    EIOS 
          RJM    ERR         PROCESS ERROR
  
*         INITIATE DATA TRANSFER. 
  
 LGE3     LDML   LGEB,RW     WRITE FUNCTION WORD
          RJM    WFW
          ACN    CH 
          LDM    LGEC,RW     SET DUMP LENGTH
          STD    T7 
          IAM    DBUF,CH     INPUT ERROR DATA 
          RJM    CFE
          LCN    0           PRESET SEARCH INDEX
          STD    T6 
          LDD    RW 
          ZJN    LGE5        IF DUMPING ERROR LOG 
          LDML   DBUF 
          SBML   EREN,DI
          ZJN    LGE7        IF NO CHANGE IN ERROR REGISTER 
          RAML   EREN,DI
          UJN    LGE9        PROCESS ERROR REGISTER DATA
  
*         SCAN ERROR LOG DATA FOR NEW ENTRIES.
  
 LGE4     SHN    -12         POSITION ERROR COUNT 
          LMM    ELEN,DI
          ZJN    LGE10       IF END OF NEW ENTRIES
 LGE5     AOD    T6 
          SHN    2           ADVANCE INDICES
          STD    T7 
          ERRNZ  ERLGL-ERLGL/4*4  CODE DEPENDS ON VALUE 
          LMK    ERLGL
          ZJN    LGE8        IF END OF ERROR LOG
          LDML   DBUF,T7
          NJN    LGE4        IF NOT EMPTY ENTRY 
 LGE6     LDD    T6 
          NJN    LGE8        IF NEW ENTRIES FOUND 
 LGE7     LJM    LGE12       CLEAR COMMAND SEQUENCE 
  
 LGE8     LDML   DBUF 
          SHN    -12         RESET ENTRY NUMBER 
          STM    ELEN,DI
          LDML   DBUF+3      SET REPETITION COUNT 
          STML   ELRC,DI
 LGE9     UJN    LGE11       PROCESS ERROR DATA 
  
 LGE10    LDML   DBUF+3,T7   CHECK REPEAT COUNT 
          SBML   ELRC,DI
          ZJN    LGE6        IF NO CHANGE IN REPETITION COUNT 
          STML   DBUF+3,T7
          RAML   ELRC,DI     UPDATE ERROR LOG REPEAT COUNT
          LDN    4
          RAD    T7          INCLUDE THIS ERROR LOG ENTRY 
  
*         PROCESS ERROR INFORMATION.
  
 LGE11    LDC    MBUF        SET MESSAGE BUFFER ADDRESS 
          STD    T3 
          LDD    T7          ERROR DATA BYTE COUNT
          SHN    14 
          LMC    DBUF 
          RJM    UHD         UNPACK HEX DATA
          SHN    14 
          LMM    LGED,RW     ISSUE BML MESSAGE
          RJM    IBM
 LGE12    LDC    FCCS        CLEAR COMMAND SEQUENCE 
          RJM    FCN
          LDN    ESCC        PROCESS ATTENTION
          RJM    ATT
          ZJN    LGE13       IF *COMMAND COMPLETE*
          LDN    EIOC 
          RJM    ERR         ERROR IN I/O COMPLETE STATUS 
  
 LGE13    LDC    FWCA        CLEAR ATTENTION
          RJM    WFC
          LDM    RADD,DI     SET RETURN ADDRESS 
          STD    PA 
          LJM    0,PA        RETURN TO CALLER 
  
  
 LGEA     BSS    0           LOG / REGISTER SELECT OPTIONS
          CONL   CCRL 
          CONL   CCRI 
  
 LGEB     BSS    0           DUMP FUNCTION WORDS
          CONL   FWEL 
          CONL   FWER 
  
 LGEC     BSS    0           DUMP LENGTHS 
          CON    ERLGL
          CON    ERRGL
  
 LGED     BSS    0           BML SYMPTOM CODES
          CON    HD0104 
          CON    HD0103 
          TITLE  LOAD OPERATING PARAMETERS. 
 LOP      SPACE  4,10 
**        LOP - LOAD OPERATING PARAMETERS.
* 
*         ENTRY  (RW) = 0 TO LOAD ATTENTION DELAY PARAMETERS. 
*                     = 1 TO LOAD OPERATING MODE PARAMETERS.
  
  
 LOP      BSS    0
          LDC    CMP         SET RETURN ADDRESS 
 LOP1     STM    RADD,DI
          LDD    RW 
          NJN    LOP2        IF SETTING OPERATING MODE
          LDML   LOPA,DT
          UJN    LOP3        SET ATTENTION DELAY PARAMETERS 
  
 LOP2     LDC    PWOM        SET OPERATING MODE PARAMETERS
 LOP3     STML   WCBA+4 
          LDN    3           SET TIMEOUT VALUE = 3 SECONDS
          STD    TO 
          LDML   LOPB,RW     LOAD PARAMETERS
          RJM    WCB
  
*         WAIT UNTIL *IHD* HAS RAISED ATTENTION.
  
          LDN    ESCC        PROCESS ATTENTION
          RJM    ATT
          ZJN    LOP4        IF NORMAL COMPLETION 
          LDN    ELOP 
          RJM    ERR         PROCESS ERROR
  
 LOP4     LDM    RADD,DI     SET RETURN ADDRESS 
          STD    PA 
          LJM    0,PA        RETURN TO CALLER 
  
  
 LOPA     BSS    0           ATTENTION DELAY PARAMETER WORDS
          CONL   PWADDF 
          CONL   PWADDH 
  
 LOPB     BSS    0           COMMAND CODES
          CONL   CCLD 
          CONL   CCLM 
          TITLE  DIAGNOSTIC PROCESSING. 
 RND      SPACE  4,10 
**        RND - RUN DIAGNOSTICS.
* 
*         ENTRY  (RW) = 0 TO EXECUTE READ TEST. 
*                     = 1 TO EXECUTE WRITE TEST.
*                     = 2 TO RUN VERIFICATION DIAGNOSTICS.
  
  
 RND      BSS    0
          LDC    CSR         SET RETURN ADDRESS 
 RND1     STM    RADD,DI
          LDC    RNDD        ISSUE OPERATOR MESSAGE 
          RJM    IOM
          LDML   RNDA,RW     SET PARAMETER WORD 
          STML   WCBA+4 
          LDM    RNDB,RW     SET TIMEOUT VALUE
          STD    TO 
          LDML   RNDC,RW     INITIATE TEST
          RJM    WCB
  
*         WAIT UNTIL *IHD* HAS RAISED ATTENTION.
  
          LDN    0           PROCESS ATTENTION
          RJM    ATT
 RND2     LDC    MBUF        SET ASSEMBLY BUFFER ADDRESS
          STD    T3 
          LDC    SLSTL*10000+SLST  UNPACK HEX DATA
          RJM    UHD
          SHN    14          ISSUE BML MESSAGE
          LMC    HD0106 
          ADD    RW 
          ERRNZ  HD0106+1-HD0107  CODE DEPENDS ON VALUE 
          ERRNZ  HD0107+1-HD0110  CODE DEPENDS ON VALUE 
          RJM    IBM
          LDD    RW          CHECK OPERATION
          SBN    2
          ZJN    RND3        IF VERIFICATION DIAGNOSTICS
          LDD    SS 
          LMN    ESCC 
          LPN    70 
          ZJN    RND3        IF NORMAL COMPLETION 
          LDN    EDTF 
          RJM    ERR         PROCESS ERROR
  
*RND3     LDN    0           CLEAR OPERATOR MESSAGE 
 RND3     RJM    IOM
          LDM    RADD,DI     SET RETURN ADDRESS 
          STD    PA 
          LJM    0,PA        RETURN TO CALLER 
  
  
 RNDA     BSS    0           PARAMETER WORDS
          CONL   PWRT 
          CONL   PWWT 
          CONL   PWIT 
  
 RNDB     BSS    0           TIMEOUT VALUES (IN SECONDS)
          CON    1*60D
          CON    1*60D
          CON    4*60D+20D
  
 RNDC     BSS    0           COMMAND CODES
          CONL   CCRT 
          CONL   CCWT 
          CONL   CCVD 
  
 RNDD     DATA   C* EQ000, DIAGNOSTIC RUNNING.* 
          TITLE  SPIN-DOWN PROCESSING.
 SPD      SPACE  4,10 
**        SPD - SPIN DOWN DRIVE.
  
  
 SPD      BSS    0
          LDN    1*60D       SET TIMEOUT VALUE = 1 MINUTE 
          STD    TO 
          LDC    CCSD        SPIN-DOWN DRIVE
          RJM    WCB
  
*         WAIT UNTIL *IHD* HAS RAISED ATTENTION.
  
          LDN    ESCC        PROCESS ATTENTION
          RJM    ATT
          ZJP    CSR         IF NORMAL COMPLETION 
          LDN    ESDF 
          RJM    ERR         PROCESS ERROR
          TITLE  SPIN-UP PROCESSING.
 SPU      SPACE  4,10 
**        SPU - SPIN UP DRIVE.
  
  
 SPU      BSS    0
          LDC    CSR         SET RETURN ADDRESS 
 SPU1     STM    ERAD,DI
          LDN    0           GET SLAVE STATUS 
          RJM    GSS
          LDML   SLST+5      CHECK DEVICE READY 
          SHN    0-17 
          ZJN    SPU2        IF DISK NOT SPINNING 
          LDN    SPU5-SPU4
 SPU2     ADC    SPU4        PROCESS SELECTIVE RESET
          LJM    SRS1 
  
 SPU3     RJM    HYD         RETURN TO MAIN LOOP
  
*         CHECK TIME INTERVAL SINCE LAST SPIN-UP. 
  
 SPU4     RJM    CMC         CHECK MONITOR COMPLETE 
          LDK    HSUEI
          STD    CM+4        SET SPIN-UP INTERVAL 
          SHN    -14
          STD    CM+3 
          LDN    UHSS        UPDATE EVENT TIME
          STD    CM+1 
          MONITOR  EATM      CHECK EVENT TIME 
          LDD    CM+1 
          NJN    SPU3        IF EVENT INTERVAL NOT ELAPSED
  
*         WRITE COMMAND BLOCK TO POWER UP SPINDLE.
  
          RJM    SSD
          LDC    3*60D       SET TIMEOUT VALUE = 3 MINUTES
          STD    TO 
          LDC    SPUA        ISSUE OPERATOR MESSAGE 
          RJM    IOM
          LDC    CCSU        SPIN-UP DRIVE
          RJM    WCB
  
*         WAIT UNTIL *IHD* HAS RAISED ATTENTION.
  
          LDN    ESCC        PROCESS ATTENTION
          RJM    ATT
          ZJN    SPU5        IF NORMAL COMPLETION 
          LDN    ESUF 
          RJM    ERR         PROCESS ERROR
  
 SPU5     LDN    1           SELECT LOAD OF MODE PARAMETERS 
          STM    RWST,DI
 SPU6     STD    RW          SET PROCESSOR INDEX
          LDC    SPU7 
          LJM    LOP1        LOAD OPERATING PARAMETERS
  
 SPU7     SOM    RWST,DI
          PJN    SPU6        IF YET TO LOAD DELAY PARAMETERS
          LDM    SREQ,DI
          ZJN    SPU8        IF SPIN-UP INITIATED BY DRIVER 
          LDN    DUNF 
          RJM    CPF         CLEAR DEVICE UNAVAILABLE 
  
*         COMPLETE DEVICE INITIALIZATION. 
  
 SPU8     LDM    ERAD,DI     SET RETURN ADDRESS 
          STD    PA 
          LDN    0           CLEAR OPERATOR MESSAGE 
          RJM    IOM
          LJM    0,PA        RETURN TO CALLER 
  
 SPUA     DATA   C* EQ000, SPIN UP PENDING.*
          TITLE  SELECTIVE RESET PROCESSING.
 SRS      SPACE  4,10 
**        SRS - PROCESS SELECTIVE RESET.
  
  
 SRS      BSS    0
          LDC    CMP4        SET RETURN ADDRESS 
 SRS1     STM    RADD,DI
          LDC    FWSR        ISSUE SELECTIVE RESET
          RJM    WFW
          LDN    6           SET TIMEOUT TO 6 SECONDS 
          RJM    STO
          LDN    ESCB        PROCESS ATTENTION
          RJM    ATT
          ZJN    SRS3        IF *COMMAND BLOCK INDEPENDENT* 
          LDN    EUES 
 SRS2     RJM    ERR         PROCESS ERROR
  
 SRS3     LDD    SS          CHECK DELAY STATUS PRESENT 
          LPN    1
          ZJN    SRS4        IF NO DELAY STATUS 
          LDM    SLST+3 
          LPC    377         CHECK DELAY STATUS 
          LMC    0#83 
          ZJN    SRS5        IF HOST GENERATED RESET
 SRS4     LDN    EUDS 
          UJN    SRS2        UNEXPECTED DELAY STATUS
  
 SRS5     STM    ELEN,DI
          STM    ELRC,DI     CLEAR INTERNAL ERROR COUNTERS
          STM    EREN,DI
          LDM    RADD,DI     SET RETURN ADDRESS 
          STD    PA 
          LJM    0,PA        RETURN TO CALLER 
          TITLE  SUBROUTINES. 
 ACE      SPACE  4,10 
**        ACE - ANALYZE CHANNEL ERROR.
* 
*         ENTRY  (RBUF) = CHANNEL STATUS REGISTER.
  
  
 ACE3     LDN    ECCM        SET CHANNEL DETECTED CM ERROR
 ACE4     STM    FALT 
  
 ACE      SUBR               ENTRY/EXIT 
          LDM    RBUF+5 
          LPN    2
          ZJN    ACEX        IF NO CHANNEL ERROR
          LDM    RBUF 
          LPN    76 
          NJN    ACE3        IF ERROR IN MEMORY 
          LDM    RBUF+1 
          SHN    -5 
          ZJN    ACE2        IF NOT PARITY / ISI CHANNEL ERROR
          LPN    2
          ZJN    ACE1        IF NOT PARITY ERROR
          LDN    ECPE&ECIE
 ACE1     LMN    ECIE&ECER   FAULT ANALYSIS CODE
 ACE2     LMN    ECER 
          UJN    ACE4        SAVE FAULT CODE
 AME      SPACE  4,10 
**        AME - ATTEMPT MONITOR EXCHANGE. 
* 
*         EXIT   (A) = 0. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS EXPE.
  
  
 AME      SUBR               ENTRY/EXIT 
          EXPE   *
 AME1     LDC    6           CHECK FOR (MA) NON-ZERO
          CRD    CM 
          LDD    CM 
          ADD    CM+1 
          NJN    AME1        IF EXCHANGE PACKAGE NOT READY
          EXPE   *
 AME2     LDC    0           SET (B0) NON-ZERO
          CWM    AMEA,ON
          SBN    1           EXCHANGE MONITOR 
          MXN    0
          CRD    CM 
          LDD    CM+4 
          ZJN    AMEX        IF EXCHANGE TAKEN
          LDN    28D
          SBN    1           WAIT 20 MICROSECONDS ELAPSED 
          NJN    *-1
          UJN    AME2        RETRY EXCHANGE 
  
  
 AMEA     VFD    24/0        (P)
          VFD    18/0        (A0) 
          VFD    18/0        (B0) 
 AMR      SPACE  4,15 
**        AMR - ACCESS MAINTENANCE REGISTER.
* 
*         ENTRY  (A) = 6/ OC, 12/ RN
*                      OC = *RMRF* TO READ REGISTER.
*                         = *WMRF* TO WRITE REGISTER. 
*                      RN = *IOU* REGISTER NUMBER.
* 
*         EXIT   (A) = 0 IF NO CHANNEL ERROR. 
*                (RBUF) = REGISTER CONTENTS.
* 
*         USES   T4.
* 
*         CALLS  WMC. 
  
  
 AMR1     ACN.   MR 
          LDN    0           OUTPUT NULL PARAMETER
          OAN.   MR 
          LDD    T4          TRANSMIT REGISTER NUMBER 
          OAN.   MR 
          LDN    0           WAIT CHANNEL EMPTY 
          RJM    WMC
          DCN.   MR+40
          NJN    AMRX        IF CHANNEL HUNG FULL 
          ACN.   MR 
          LDN    10          READ / WRITE REGISTER
 AMRA     IAM.   RBUF,MR
  
 AMR      SUBR               ENTRY/EXIT 
          STD    T4 
          SHN    -14         POSITION OP CODE 
          LMD    HN 
          ERRNZ  IOUC-100    CODE DEPENDS ON VALUE
          FAN.   MR 
          LPN    20 
          ERRNZ  RMRF+20-WMRF CODE DEPENDS ON VALUE 
          SHN    3
          LMC    IAMI+MR     FORM I/O INSTRUCTION 
          STM    AMRA 
          UJP    AMR1        ACCESS MAINTENANCE REGISTER
 ATT      SPACE  4,15 
**        ATT - PROCESS ATTENTION.
* 
*         ENTRY  (A) = EXPECTED EXECUTION STATUS. 
* 
*         EXIT   (A) = 0 IF EXPECTED EXECUTION STATUS.
*                (SS) = SLAVE STATUS (SET BY *GSS*).
* 
*         ERROR  TO *ERR* IF TIMEOUT. 
* 
*         USES   PA.
* 
*         CALLS  CTO, GSS, HYD, R1B, SSD. 
  
  
 ATT      CON    0           ENTRY
          STM    EEST,DI
          LDM    ATT         SAVE RETURN ADDRESS
          STM    ATTN,DI
 ATT1     RJM    HYD         RETURN TO MAIN LOOP
          LDC    FCIS 
          RJM    R1B         REQUEST IDLE STATUS
          STML   IDST 
          LPML   TMSK,UN
          ZJN    ATT2        IF ATTENTION NOT SET 
          LDM    ATTN,DI
          STD    PA 
          RJM    SSD         SELECT SLAVE DEVICE
  
*         RETURN TO CALLER WITH *IHD* STATUS. 
  
          LDM    EEST,DI
          RJM    GSS         GET SLAVE STATUS 
          LMM    EEST,DI
          LJM    0,PA        RETURN TO CALLER 
  
 ATT2     RJM    CTO
          MJN    ATT1        IF NOT TIMEOUT 
          LDN    ETAT 
          RJM    ERR         PROCESS ERROR
 CCR      SPACE  4,15 
**        CCR - CHECK FOR CHANNEL REQUEST.
* 
*         ENTRY  (UC) = UNIT ACTIVITY COUNT.
*                (IR+4) = CHANNEL NUMBER. 
* 
*         EXIT   (A) = 0 IF CHANNEL DOWN. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  DCR, RCT, SRF. 
* 
*         MACROS DELAY, MONITOR.
  
  
 CCR3     RJM    SRF         SET DRIVER RELOAD FLAG 
 CCR4     LDD    CR 
  
 CCR      SUBR               ENTRY/EXIT 
          RJM    RCT         READ CHANNEL TABLE 
          SHN    21-5 
          MJN    CCR3        IF CHANNEL GLOBALLY DOWN 
          LPN    40 
          ZJN    CCR4        IF CHANNEL NOT REQUESTED 
          STM    CHRQ        DISABLE NEW ACTIVITY 
          LDD    UC 
          NJN    CCRX        IF CURRENT ACTIVITY
          RJM    DCR         DROP CHANNEL RESERVATION 
*         LDN    0
          STM    CHRQ        ENABLE NEW ACTIVITY
 CCR1     LDD    CR 
          NJN    CCRX        IF CHANNEL RESERVED
 CCR2     DELAY 
          LDD    IR+4 
          STD    CM+1        ATTEMPT TO RESERVE CHANNEL 
          MONITOR  CCHM 
          LDD    CM+2        SET RESERVATION STATUS 
          STD    CR 
          RJM    RCT         READ CHANNEL TABLE 
          LPN    40 
          ZJN    CCR1        IF CHANNEL NOT DOWN
          LJM    CCR3        SET DRIVER RELOAD FLAG 
 CFE      SPACE  4,10 
**        CFE - CHECK FOR I/O ERROR.
* 
*         EXIT   (A) = 0. 
* 
*         ERROR  TO *ERR*.
  
  
 CFE3     LDC    FCRE        ACCESS ERROR REGISTER
          RJM    FCN
          ACN    CH          SIMULATE REGISTER READ 
          DCN    CH+40
          CFM    *+2,CH      CLEAR CHANNEL ERROR FLAG 
          LDD    T1 
 CFE4     NJN    CFE2        IF INCOMPLETE DATA TRANSFER
  
 CFE      SUBR               ENTRY/EXIT 
          DCN    CH+40
          CFM    CFE4,CH     IF CHANNEL ERROR FLAG CLEAR
          STD    T1 
          LDML   WFWA        CHECK OPERATION IN PROGRESS
          LMC    FWSR 
          ZJN    CFE3        IF SELECTIVE RESET 
          LDN    ECIE 
 CFE1     RJM    ERR         PROCESS CHANNEL ERROR
  
 CFE2     STM    RBCT        SAVE RESIDUAL BYTE COUNT 
          LDN    EIDT 
          UJN    CFE1        PROCESS ERROR
 CFR      SPACE  4,10 
**        CFR - CHECK *PUT* FOR REQUEST.
* 
*         ENTRY  (DI) = DEVICE STATUS BLOCK ADDRESS.
* 
*         USES   T2, CM - CM+4. 
* 
*         CALLS  CSD, IIO, ISR, SAP.
* 
*         MACROS PUTE, SFA. 
  
  
 CFR3     LDD    WB          EXTRACT UNIT NUMBER
          LPN    77 
          STD    UN 
          LDD    WB+1 
          STD    EO          SET EST ORDINAL
          SFA    EST
          ADK    EQDE        READ EST ENTRY 
          CRD    CM 
          LDD    CM+3 
          LPN    77 
          SBN    1RF         SET DEVICE TYPE
          SHN    0-1
          STD    DT 
          LDD    WB+3        SET *CBT* ORDINAL
          STD    CB 
          LDD    PA 
          ZJN    CFR4        IF NO REQUEST IN PROGRESS
          RJM    SAP         SELECT ADAPTOR PORT
          LDM    RWST,DI
          STD    RW          SET READ / WRITE STATUS
          UJN    CFR6        RETURN TO PROCESSOR
  
 CFR4     LDD    T2 
          ZJN    CFR7        IF NO SPECIAL REQUEST
          RJM    ISR         IDENTIFY SPECIAL REQUEST 
          ZJN    CFRX        IF UNKNOWN REQUEST 
          LDN    0
          STD    CB 
 CFR5     RJM    CSD         CONNECT TO *IHD* 
          ZJN    CFRX        IF UNIT UNAVAILABLE
  
*         EXIT TO PROCESSOR AS APPLICABLE WITH -
*                (PO) = *PUT* ORDINAL.
*                (CB) = *CBT* ORDINAL.
*                (EO) = EST ORDINAL.
*                (RW) = READ / WRITE STATUS.
*                (DT) = DEVICE TYPE.
*                (UN) = UNIT NUMBER.
*                (RF) = SPECIAL REQUEST FLAGS.
*                (WB - WB+4) = *UNCT* WORD OF *PUT* ENTRY.
  
 CFR6     LJM    0,PA        RETURN TO PROCESSOR
  
 CFR7     LDD    CB          INITIATE I/O 
          RJM    IIO
          NJN    CFR5        IF I/O ENABLED ON THIS ACCESS
  
 CFR      SUBR               ENTRY/EXIT 
          LDI    DI 
          ERRNZ  PUTO        CODE DEPENDS ON VALUE
          STD    PO 
          SHN    PUTLS       READ *PUT* ENTRY 
          PUTE   *
          ADC    PILL        GET INTERLOCK STATUS 
          CRD    CM 
          SBN    PILL-UNCT   FETCH UNIT CONTROL WORD
          CRD    WB 
          LDM    ADDR,DI     CHECK REQUEST PRESENT
          STD    PA 
          NJN    CFR2        IF REQUEST IN PROGRESS 
          LDD    CM+3 
          STD    RF          SET SPECIAL REQUESTS 
 DVRF     BITSET DVDF-DVDF/12D*12D
          LPN    77&DVRF     EXTRACT OPERATOR REQUESTS
          STD    CM+3 
          SCN    1           CLEAR DEVICE UNAVAILABLE 
          STD    T2 
          NJN    CFR1        IF SPECIAL REQUEST PRESENT 
          LMD    CM+3 
          NJN    CFRX        IF DEVICE UNAVAILABLE FOR I/O
          ADD    WB+3 
          ZJN    CFRX        IF NO I/O REQUEST
 CFR1     LDD    CM+4 
 CFRA     ZJN    CFR2        IF UNIT NOT INTERLOCKED
          LMD    OA 
          NJN    CFRX        IF NOT INTERLOCKED BY THIS DRIVER
 CFR2     LJM    CFR3 
 CFRB     EQU    *-1         (MODIFIED FOR TERMINATION PROCESSING)
 CMC      SPACE  4,10 
**        CMC - CHECK MONITOR COMPLETE. 
* 
*         EXIT   (A) = (CM) = 0.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  AME. 
* 
*         MACROS DELAY. 
  
  
 CMC      SUBR               ENTRY/EXIT 
 CMC1     LDD    OA 
          CRD    CM 
          LDD    CM 
          ZJN    CMCX        IF NO REQUEST WAITING FOR RESPONSE 
          SHN    21-13
          PJN    CMC2        IF NOT TO RETRY REQUEST
          SHN    13-21
          LPC    177         CLEAR FLAGS
          STD    CM 
          LDD    OA          UPDATE OUTPUT REGISTER 
          CWD    CM 
          RJM    AME         REISSUE REQUEST
 CMC2     DELAY 
          UJN    CMC1        RECHECK OUTPUT REGISTER
 CMP      SPACE  4,15 
**        CMP - COMPLETE PROCESSING.
* 
*         ENTRY  (SF) = DEVICE SELECTED STATUS. 
*                (UC) = UNIT ACTIVITY COUNT.
*                (RW) = READ / WRITE STATUS.
* 
*         EXIT   TO *HYD3*. 
*                (SF) = 0.
*                (UC) = UNIT ACTIVITY COUNT DECREMENTED.
* 
*         USES   WB+4.
* 
*         CALLS  CMC, DCB, FCN, IEM, WFC. 
  
  
 CMP      LDM    ERCT,DI
          ZJN    CMP3        IF NO ERRORS 
          AOM    ERCT,DI
 CMP1     LDN    HD0111-HD0100
          RJM    IEM         ISSUE FINAL MESSAGE
*         LDN    0
 CMP2     STM    ERCT,DI     CLEAR ERROR COUNT
 CMP3     STM    IPPS,DI
 CMP4     LDD    SF 
          ZJN    CMP5        IF DEVICE NOT SELECTED 
          LDC    FWCA 
          RJM    WFC         CLEAR ATTENTION
          LDC    FCCH 
          RJM    FCN         CLEAR SELECT HOLD
          SOD    SF 
 CMP5     LDD    RW          SET DATA TRANSFER DIRECTION
          SHN    13-0 
          LMM    CBCT,DI     APPEND CUMULATIVE BUFFER COUNT 
          STD    WB+4 
          LDM    RQIN,DI     SET UP *CBT* LIST
          LMC    4000 
          RJM    DCB         DELINK BUFFERS / RELEASE UNIT INTERLOCK
          LDD    WB+3 
          SHN    0-13 
          ZJN    CMP6        IF UNIT INTERLOCK NOT RELEASED 
          SOD    UC 
          LDN    0           CLEAR REQUEST IN PROGRESS
 CMP6     STM    ADDR,DI
          STM    CBCT,DI     CLEAR *CBT* COUNT
          STM    RQIN,DI
          STM    SREQ,DI
          RJM    CMC
          LJM    HYD3        RETURN 
 CMPA     EQU    *-1
  
 CMP7     LDN    0           SET REQUEST QUEUE EMPTY
          STM    RQIN,DI
          UJP    CMP5        RELEASE UNIT INTERLOCK 
 COS      SPACE  4,10 
**        COS - CHECK OPERATIONAL STATUS. 
* 
*         ENTRY  (A) = POSITIVE MASK TO RETURN ON BIT(S) SET. 
*                    = NEGATIVE MASK TO RETURN ON BIT(S) CLEAR. 
* 
*         EXIT   (A) = 0 IF CONDITION SET.
*                    .LT. 0 IF TIMEOUT. 
* 
*         ERROR  TO *ERR* IF ADAPTOR DROPPED SELECT ACTIVE. 
* 
*         USES   T2, T3.
* 
*         CALLS  CTO, R1B.
  
  
 COS3     SHN    12 
          LPDL   T2          CHECK CONDITION MET
          LMDL   T3 
          ZJN    COSX        IF CONDITION SET 
          RJM    CTO
          MJN    COS2        IF NOT TIMEOUT 
          LCN    0
  
 COS      SUBR               ENTRY/EXIT 
          STDL   T2 
          PJN    COS1        IF RETURN ON BIT(S) SET
          LMC    -0 
          STDL   T2          COMPLEMENT MASK
          LDN    0
 COS1     STDL   T3 
 COS2     LDC    FCRO        GET OPERATIONAL STATUS 
          RJM    R1B
          SHN    21-11
          MJN    COS3        IF *SELECT* ACTIVE 
          LDN    EDSA 
          RJM    ERR         PROCESS ERROR
 CPF      SPACE  4,10 
**        CLEAR *PUT* FLAG. 
* 
*         ENTRY  (A) = BIT NUMBER TO CLEAR IN *PILL* WORD.
* 
*         EXIT   (A) = 0. 
* 
*         USES   T6, T7, CM - CM+4. 
* 
*         CALLS  CMC. 
* 
*         MACROS MONITOR, PUTE. 
  
  
 CPF      SUBR               ENTRY/EXIT 
          SHN    6
          STD    T7          SET BIT NUMBER 
          LDC    PILL*100+1 
          STD    T6          WORD OFFSET + FIELD WIDTH
          RJM    CMC
*         LDN    0           CLEAR UNUSED BYTE
          STD    CM+2 
          LDD    MA          STORE MESSAGE BUFFER PARAMETERS
          CWD    T6 
          LDN    1           PARAMETER WORD COUNT 
          STD    CM+1 
          LDD    PO 
          SHN    PUTLS
          PUTE   *
          ADC    0           SET BASE *PUT* ENTRY ADDRESS 
          STD    CM+4 
          SHN    -14
          STD    CM+3 
          MONITOR  UTEM      CLEAR *PUT* FLAG 
*         LDN    0
          UJN    CPFX        RETURN 
 CSD      SPACE  4,15 
**        CSD - CONNECT TO SLAVE DEVICE.
* 
*         ENTRY  (UN) = UNIT NUMBER.
*                (CB) = *CBT* ORDINAL IF I/O REQUEST. 
*                (CM - CM+4) = EST ENTRY. 
* 
*         EXIT   (A) .NE. 0 IF UNIT CONNECTED.
* 
*         USES   T2, T7, CM - CM+4. 
* 
*         ERROR  TO *ERR* IF SELECT REJECT. 
* 
*         CALLS  R1B, SSD, SUI. 
* 
*         MACROS CBTE.
  
  
 CSD      SUBR               ENTRY/EXIT 
          LDC    0
 CHRQ     EQU    *-1
          NJN    CSD4        IF CHANNEL REQUESTED 
          STM    LCMD,DI
  
*         CHECK EST ENTRY FOR CHANNEL DOWN. 
  
          LDD    CM+1        EXTRACT CHANNEL
          LMD    IR+4 
          LPN    77 
          ZJN    CSD1        IF PATH SERVICED BY THIS DRIVER
          LDN    1
 CSD1     ADN    CM+1        SET CHANNEL BYTE ADDRESS 
          STD    T2 
          LDI    T2          CHECK CHANNEL STATE
          SHN    -11
          LMN    4
          ZJN    CSD6        IF CHANNEL UP AND AVAILABLE
          SCN    1
          NJN    CSD4        IF CHANNEL DOWN OR NOT ENABLED 
          LDD    CB 
          ZJN    CSDX        IF NOT I/O REQUEST 
          SHN    CBTLS
          CBTE   *
          ADC    PAD4        GET CHANNEL FROM CBT ENTRY 
          CRD    T7 
          ADN    HSLK-PAD4   GET CHANNEL SELECT STATUS
          CRD    CM 
          LDD    CM          CHECK ERROR FLAGS
          SHN    0-12 
          ZJN    CSDX        IF NOT CHANNEL SPECIFIC REQUEST
          LDD    T7          CHECK CHANNEL
          SHN    -6 
          LMD    IR+4 
          ZJN    CSD6        IF REQUEST FOR THIS DRIVER 
 CSD4     LDN    0
 CSD5     UJP    CSDX        RETURN 
  
 CSD6     RJM    SUI         SET UNIT INTERLOCK 
          NJN    CSD4        IF ASSIGNED ELSEWHERE
          LDC    FCIS 
          RJM    R1B         READ IDLE STATUS 
          STML   IDST 
          RJM    SSD         SELECT *IHD* 
  
*         READ BIT SIGNIFICANT RESPONSE.
  
          LDC    FCSO        FORCE SYNC OUT 
          RJM    R1B
          STML   BSRN        SAVE RESPONSE
          LPML   TMSK,UN
          NJN    CSD5        IF CORRECT UNIT SELECTED 
          LDN    EICU 
          RJM    ERR         PROCESS ERROR
 CSR      SPACE  4,10 
**        CSR - CLEAR SPECIAL REQUEST.
* 
*         EXIT   TO *CMP*.
* 
*         CALLS  CPF. 
  
  
 CSR      BSS    0           ENTRY
          LDM    SREQ,DI
          ZJN    CSR1        IF REQUEST SELECTED BY DRIVER
          RJM    CPF
 CSR1     LJM    CMP         COMPLETE PROCESSING
 CTO      SPACE  4,10 
**        CTO - CHECK TIMEOUT.
* 
*         ENTRY  (PO) = *PUT* ORDINAL.
* 
*         EXIT   (A) .LT. 0 IF NOT TIMEOUT. 
* 
*         USES   T6, T7, CM - CM+4. 
* 
*         MACROS FTTE.
  
  
 CTO      SUBR               ENTRY/EXIT 
          LDD    PO 
          SHK    FTTLS       READ *FTT* ENTRY 
          FTTE   *
          ADC    0
          CRD    CM 
          LDC    RTCL        FETCH CURRENT CLOCK VALUE
          CRD    T6 
          LDD    T6          CHECK ELAPSED TIME 
          SBD    CM+3 
          MJN    CTOX        IF NOT TIMEOUT 
          SHN    14 
          ADD    T7 
          SBD    CM+4 
          UJN    CTOX        RETURN 
 DCB      SPACE  4,15 
**        DCB - DELINK CONTROL BUFFERS. 
* 
*         ENTRY  (A) = VALUE FOR BYTE 3 OF *BIOM* REQUEST.
*                (RW) = READ / WRITE STATUS.
* 
*         EXIT   (A) = 0. 
*                (WB+3) = BYTE 3 OF *BIOM* REQUEST. 
* 
*         USES   RC, T2, T3, WB+3.
* 
*         CALLS  IMR, SLB.
  
  
 DCB1     LDM    IORQ,DI     EXTRACT *CBT* ORDINAL
          STD    PB 
          RJM    SLB         SET LINKAGE BITS 
          SOM    RQIN,DI
          ZJN    DCB3        IF QUEUE NOW EMPTY 
          STD    T3 
          LDD    DI          ADDRESS OF FIRST QUEUE ENTRY 
          ADN    IORQ+1 
          STD    T2 
 DCB2     LDI    T2          MOVE STACK DOWN
          STM    -1,T2
          AOD    T2          ADVANCE LIST ADDRESS 
          SOD    T3 
          NJN    DCB2        IF NOT END OF MOVE 
          SOD    RC 
          NJN    DCB1        IF BUFFER COUNT NOT SATISFIED
 DCB3     LDN    DCBS 
          RJM    IMR         INITIATE MONITOR REQUEST 
*         LDN    0
  
 DCB      SUBR               ENTRY/EXIT 
          STD    WB+3 
          ZJN    DCBX        IF NULL REQUEST
          LPN    77 
          ZJN    DCB3        IF NO BUFFERS TO PROCESS 
          STD    RC 
          LDD    RW 
          ZJN    DCB1        IF READ OPERATION
          LDN    0
          SBD    RC          ADJUST REQUEST QUEUE ENTRY COUNT 
          RAM    RQIN,DI
          UJN    DCB3        ISSUE MONITOR REQUEST
 DCR      SPACE  4,10 
**        DCR    DROP CHANNEL RESERVATION.
* 
*         ENTRY  (CR) = 1 IF CHANNEL RESERVED.
*                (IR+4) = CHANNEL NUMBER. 
* 
*         EXIT   (A) = (CR) = 0.
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 DCR      SUBR               ENTRY/EXIT 
          LDD    CR 
          ZJN    DCRX        IF CHANNEL NOT RESERVED
          LDD    IR+4 
          STD    CM+1        DROP CHANNEL 
          MONITOR  DCHM 
*         LDN    0           SET CHANNEL NOT RESERVED 
          STD    CR 
          UJN    DCRX        RETURN 
 EIO      SPACE  4,10 
**        EIO - ENTER I/O REQUEST QUEUE.
* 
*         ENTRY  (A) = *CBT* ORDINAL. 
*                (RW) = READ / WRITE STATUS.
* 
*         EXIT   (PB) = *CBT* ORDINAL.
* 
*         USES   T5.
* 
*         CALLS  DCB, SLB.
  
  
 EIO1     RJM    SLB         SET LINKAGE BITS 
 EIO2     AOM    CBCT,DI
          AOM    RQIN,DI     ADVANCE ENTRY COUNT
          SBM    EIOA,RW
          MJN    EIOX        IF QUEUE NOT FULL
          LDN    1
          RJM    DCB         DELINK 1ST BUFFER IN LIST
  
 EIO      SUBR               ENTRY/EXIT 
          STD    PB 
          LDD    RW 
          NJN    EIO1        IF WRITE OPERATION 
          LDM    RQIN,DI
          ADD    DI          ADDRESS OF NEXT AVAILABLE SLOT 
          STD    T5 
          LDD    PB          ENTER *CBT* ORDINAL IN QUEUE 
          STM    IORQ,T5
          UJN    EIO2        ADVANCE ENTRY COUNT
  
  
 EIOA     BSS    0           DELINKING CRITERIA 
          CON    3
          CON    10 
 ERR      SPACE  4,15 
**        ERR - PROCESS ERRORS. 
* 
*         ENTRY  (A) = FAULT ANALYSIS CODE. 
*                (CR) = CHANNEL RESERVATION STATUS. 
* 
*         EXIT   TO *CMP*.
* 
*         USES   PA, T2, T3, T5, CM - CM+4, WB - WB+4.
* 
*         CALLS  ACE, AMR, GDS, GSS, IEM, IMR, ISF, RCR, SCD, SET,
*                SRS, STF, STO, UHD, WFC. 
  
  
 ERR      CON    0           ENTRY
          STD    FC 
          LDM    ESAD,DI
          ZJN    ERR1        IF NEW PASS THRU PROCESSOR 
          STD    PA 
          LJM    0,PA        CONTINUE 
  
 ERR1     STD    T5          CLEAR CHANNEL ACTIVE 
          RJM    SCD
          AOM    UNSW        DISABLE UNIT SWITCH
          LDC    ERR5 
          STM    ESAD,DI     SET ERROR STEP ADDRESS 
  
*         GENERATE BML ERROR MESSAGE. 
  
          LDD    FC          SET INITIAL FAULT CODE 
          STM    CODE 
          STM    FALT 
          LDD    DT          SET SECTORS TRANSFERED COUNT 
          SHN    21-0 
          LMM    CBCT,DI
          MJN    ERR2        IF LARGE SECTOR DEVICE 
          SHN    2
          ERRNZ  PSBFDH*4-PSBFDF  CODE DEPENDS ON VALUE 
 ERR2     STM    STCT 
          LDM    CYLN,DI     SET SEEK ADDRESS - CYLINDER
          STM    ICYL 
          LDM    TKSN,DI     SEEK ADDRESS - TRACK AND SECTOR
          STM    ITAS 
 ERR3     LCN    0           PRESET INTERMEDIATE FAULT CODES
          STM    FCS1 
          STM    FCS2 
          STM    FCS3 
          LDML   LCMD,DI     SET LAST *IHD* COMMAND 
          STML   LSCC 
          LDM    FCNA        MOVE LAST CHANNEL FUNCTION 
          STM    LCFN 
          SCF.   ERR3,MR     ACQUIRE MAINTENANCE REGISTER ACCESS
          CON    LDCI 
          IAN    CH          (FORCE CHANNEL TABLE ENTRY)
          ORG    *-1
          CON    RCSR+CH
          RJM    AMR         READ CHANNEL STATUS REGISTER 
          DCN.   MR+40
          CCF.   *+2,MR      CLEAR CHANNEL FLAG 
          LDN    0
          STD    T2          CLEAR INDICES
          STD    T3 
          RJM    ACE         ANALYZE CHANNEL ERROR
 ERR4     LDM    RBUF,T2
          SHN    10          PACK 8-BIT DATA
          LMM    RBUF+1,T2
          STML   RBUF,T3
          AOD    T3          ADVANCE INDEX
          SHN    1
          STD    T2          SET INDEX
          LMN    10 
          NJN    ERR4        IF MORE REGISTER DATA
          LDN    ZERL 
          CRM    RBUF+4,ON   CLEAR UNUSED BYTES 
          LDD    CR 
          ZJN    ERR6        IF FUNCTION TIMEOUT
          LDN    0
          STD    FC          CLEAR PRESENT FAULT CODE 
          LDC    FCRT 
          RJM    FCN         ISSUE READ *T* REGISTER FUNCTION 
          ACN    CH 
          LDN    3           INPUT REGISTER CONTENTS
          IAM    RBUF+7,CH
          DCN    CH+40
 ERR5     LDD    FC          SET INTERMEDIATE FAULT CODE
          STM    FCS1 
 ERR6     LDC    EBUF+2*5    SET MESSAGE ASSEMBLY ADDRESS 
          STD    T3 
          LDC    17S12+DBUF  UNPACK HEX DATA
          RJM    UHD
          ADN    2           APPEND LENGTH OF NON-HEX DATA
          STD    ML 
          LDC    ERR28       SET NEXT ERROR STEP
          STM    ESAD,DI
          LDN    0           CLEAR CHECK ATTENTION COUNT
          STM    CACT,DI
          STM    RSVD        CLEAR RESERVED FIELD 
          STD    FC 
          LDM    RWST,DI     SAVE READ / WRITE STATUS 
          STM    IOST,DI
          LDD    CR 
          ZJP    ERR51       IF FUNCTION TIMEOUT
          RJM    RCR
          LDM    LCMD,DI
          ZJN    ERR14       IF NO ACTIVE COMMAND 
 ERR10    AOM    CACT,DI     ADVANCE CHECK ATTENTION COUNT
          LMN    6
          ZJN    ERR14       IF DEVICE LOCKED UP
          LDN    3
          RJM    STO         SET TIMEOUT = 3 SECONDS
          LDN    0
          RJM    ATT         PROCESS ATTENTION
 ERR11    SHN    -3 
          STD    PA 
          LDM    ERRB,PA     SET PROCESSOR ADDRESS
 ERR12    STD    PA 
          LJM    0,PA        EXIT TO PROCESSOR
  
 ERR13    LDC    FWEP        CLEAR ATTENTION
          RJM    WFC
          UJN    ERR10       LOOP FOR NEXT ATTENTION
  
 ERR14    RJM    SSD         SELECT SLAVE DEVICE
          LDC    ERR51
          LJM    SRS1        PROCESS SELECTIVE RESET
  
 ERR16    LDC    ERR51
          UJN    ERR20       SET POST PROCESSING ADDRESS
  
 ERR17    LDC    ERR38
          UJN    ERR20       SET POST PROCESSING ADDRESS
  
 ERR18    LDN    0           CLEAR INTERMEDIATE FAULT CODE
          STM    FCS2 
          LDM    ENAD,DI
          UJN    ERR12       EXIT TO POST PROCESSOR 
  
 ERR19    LDC    ERR30       SET POST PROCESSING ADDRESS
 ERR20    STM    ENAD,DI
          LDM    SLST+1      SAVE SYSTEM INTERVENTION CODE
          STM    SIST,DI
          LDM    SLST+2      SAVE MANUAL INTERVENTION CODE
          STM    MIST,DI
          LDD    SS          SAVE EXECUTION STATUS
          STM    GSST,DI
          RJM    GDS         GET DEVICE STATUS
          LDC    FWCA 
          RJM    WFC         CLEAR ATTENTION
          LDC    EBUF+6*5 
          STD    T3          SET DESTINATION DATA ADDRESS 
          LDC    STSBL*10000+SLST 
          RJM    UHD         UNPACK HEX DATA
          RAD    ML 
          LDN    1           SELECT DUMP OF ERROR REGISTER
          STM    RWST,DI
 ERR24    STD    RW          SET PROCESSOR INDEX
          LDC    ERR25
          LJM    LGE1        LOG *IHD* ERRORS 
  
 ERR25    SOM    RWST,DI
          PJN    ERR24       IF YET TO DUMP ERROR LOG 
          LJM    ERR18       EXIT TO POST PROCESSOR 
  
 ERR28    LDD    FC          SET INTERMEDIATE FAULT CODE
          STM    FCS2 
          LDC    ERR50       SET ERROR STEP 
          STM    ESAD,DI
          LJM    ERR14       PROCESS SELECTIVE RESET
  
 ERR30    LDM    GSST,DI     CHECK EXECUTION STATUS 
          LPN    6
          ZJP    ERR51       IF NO INTERVENTION FLAGS 
  
*         ANALYZE INTERVENTION STATUS.
  
          SHN    -2          SET LIST INDEX 
          STD    T2 
          ADN    MIST        SET STATUS WORD ADDRESS
          ADD    DI 
          STD    T3 
          LDM    ERRE,T2     SET LIST ADDRESS 
          STD    T2 
 ERR31    LDN    2           ADVANCE LIST ADDRESS 
          RAD    T2 
          LDI    T2 
          ZJN    ERR32       IF END OF LIST 
          LMI    T3 
          LPC    377
          NJN    ERR31       IF NOT MATCHING INTERVENTION CODE
  
*         ATTEMPT ERROR SPECIFIC RECOVERY.
  
 ERR32    LDM    1,T2        SET PROCESSOR ADDRESS
          STD    T2 
          LDC    ERR50       SET NEXT ERROR STEP
          STM    ESAD,DI
          LDN    0
          LJM    0,T2        EXIT TO PROCESSOR
  
 ERR36    LDN    EDNR        SET NOT READY ERROR
          STM    FALT 
          LDML   SLST+5      CHECK SLAVE STATUS 
          SHN    0-17 
          NJN    ERR50       IF DISK SPINNING 
          LDM    ERCT,DI
          ZJN    ERR38       IF INITIAL RETRY 
          LMN    CSRC 
          NJN    ERR50       IF NOT FIRST ALTERNATE RETRY 
 ERR38    LDC    ERR50
          LJM    SPU1        PROCESS SPIN UP
  
 ERR40    LDM    IOST,DI     RESTORE READ / WRITE STATUS
          STM    RWST,DI
          STD    RW 
          LDC    ERR44       RUN DIAGNOSTIC 
          LJM    RND1 
  
 ERR44    RJM    STF         PROCESS MEDIA ERROR
          LDN    EDPE&EOTC
*         UJN    ERR46       SET DATA PARITY ERROR
  
 ERR46    LMN    EOTC&ECPE
*         UJN    ERR47       SET OVER-TEMP CONDITION ERROR
  
 ERR47    LMN    ECPE&EDTF
*         UJN    ERR48       SET CHANNEL PARITY ERROR 
  
 ERR48    LMN    EDTF        SET DIAGNOSTIC TIMEOUT ERROR 
 ERR49    STM    FALT 
  
*         COMPLETE ERROR PROCESSING.
  
 ERR50    LDD    FC          SET INTERMEDIATE FAULT CODE
          STM    FCS3 
 ERR51    LDM    IOST,DI     RESTORE READ / WRITE STATUS
          STD    RW 
          LDN    0           CLEAR ERROR STEP 
          STM    ESAD,DI
          STM    UNSW        ENABLE UNIT SWITCH 
          AOM    ERCT,DI     ADVANCE ERROR COUNT
          LMN    MERC 
          NJN    ERR53       IF NOT RETRY LIMIT 
 ERR52    AOM    MISC 
          RJM    SEC         SET ERROR CODE IN *CBT*
          LJM    CMP1        COMPLETE PROCESSING
  
 ERR53    LDN    HD0100-HD0100
          RJM    IEM         ISSUE ERROR MESSAGE
          LDM    FALT 
          LMN    ETFN 
          ZJN    ERR52       IF FUNCTION TIMEOUT ERROR
          LMN    EDTF&ETFN
          ZJN    ERR52       IF DIAGNOSTIC FAILURE
          LDM    SREQ,DI
          NJN    ERR54       IF NOT I/O PROCESSING
          LDM    ERCT,DI
          LMN    CSRC 
          ZJN    ERR56       IF TIME FOR CHANNEL SWAP 
          LMN    1&CSRC 
          NJN    ERR54       IF NOT FIRST RETRY 
          LDM    RQIN,DI
          STD    WB+3 
          LDN    IDSS        INHIBIT DATA STREAMING 
          RJM    IMR
 ERR54    LDC    4000        DISABLE RELEASE OF UNIT INTERLOCK
          STM    RQIN,DI
          LJM    CMP4        RETRY REQUEST
  
 ERR56    RJM    SEC         FORCE ALTERNATE CHANNEL SELECTION
          LDN    SSES 
          RJM    ISF         SET SUSPECT STATE
*         LDN    0
          LJM    CMP2        COMPLETE PROCESSING
  
  
 ERRB     BSS    0
          CON    ERR14       (IHD IDLE) 
          CON    ERR13       READ DATA AVAILABLE
          CON    ERR13       BUFFER SPACE AVAILABLE 
          CON    ERR14       (UNDEFINED)
          CON    ERR16       COMMAND BLOCK INDEPENDENT
          CON    ERR14       (UNDEFINED)
          CON    ERR17       UNSOLICITED ATTENTION
          CON    ERR19       COMMAND COMPLETE 
  
 ERRC     BSS    0           MANUAL INTERVENTION CODES
          CON    0#C1,ERR36  DISK NOT READY 
          CON    0#63,ERR47  ISI I/O PARITY ERROR 
          CON    0#6A,ERR48  DIAGNOSTIC FAILURE 
          CON    0#6B,ERR46  TEMPERATURE FAULT
          CON    0000,ERR51 
  
 ERRD     BSS    0           SYSTEM INTERVENTION CODES
          CON    0#41,ERR40  UNABLE TO READ HEADER
          CON    0#42,ERR40  HEADER ERROR 
          CON    0#43,ERR40  UNABLE TO READ DATA
          CON    0#A6,ERR48  DIAGNOSTIC FAILURE 
          CON    0000,ERR51 
  
 ERRE     BSS    0           LIST ADDRESSES 
          CON    ERRC-2      MANUAL INTERVENTION CODES
          CON    ERRD-2      SYSTEM INTERVENTION CODES
 FCN      SPACE  4,10 
**        FCN - ISSUE FUNCTION. 
* 
*         ENTRY  (A) = FUNCTION CODE. 
* 
*         ERROR  TO *ERR*.
* 
*         CALLS  RCS. 
  
  
 FCN      SUBR               ENTRY/EXIT 
          STM    FCNA 
          LDN    FTRC        SET INTERNAL REPEAT COUNT
          STD    T0 
 FCN1     FNC    0,CH        ISSUE FUNCTION 
 FCNA     EQU    *-1
          LDC    FTOD 
 FCN2     IJM    FCNX,CH     IF FUNCTION ACCEPTED 
          SBN    1
          NJN    FCN2        IF NOT TIMED OUT 
          DCN    CH+40
          SOD    T0 
          NJN    FCN1        IF RETRY COUNT NOT SATISFIED 
          STD    SF 
*         LDN    0
          RJM    RCS         GLOBALLY DOWN CHANNEL
          LDN    ETFN 
          RJM    ERR         PROCESS ERROR
 GDS      SPACE  4,10 
**        GDS - GET DEVICE STATUS.
* 
*         CALLS  CFE, FCN, WFW. 
  
  
 GDS      SUBR               ENTRY/EXIT 
          LDC    FWDS 
          RJM    WFW         WRITE FUNCTION WORD
          ACN    CH 
          LDN    DVSTL       INPUT DEVICE STATUS
          IAM    DVST,CH
          RJM    CFE
          LDC    FCCS        CLEAR COMMAND SEQUENCE 
          RJM    FCN
          UJN    GDSX        RETURN 
 GSS      SPACE  4,15 
**        GSS - GET SLAVE STATUS. 
* 
*         ENTRY  (A) = 0 TO IGNORE INTERVENTION STATUS. 
* 
*         EXIT   (A) = EXECUTION STATUS.
*                (SS) = STATUS FLAGS. 
* 
*         ERROR  TO *ERR* IF *INTERVENTION REQUIRED*. 
* 
*         USES   T2.
* 
*         CALLS  CFE, WFW.
  
  
 GSS5     LMN    ESCC        RESTORE EXECUTION STATUS 
  
 GSS      SUBR               ENTRY/EXIT 
          STD    T2 
          LDC    FWSB 
          RJM    WFW         WRITE FUNCTION WORD
          ACN    CH 
          LDN    SLSTL       INPUT STATUS BLOCK 
          IAM    SLST,CH
          RJM    CFE
          LDML   SLST        CHECK COMMAND BLOCK NUMBER 
          LPN    17 
          NJN    GSS4        IF INVALID BLOCK NUMBER
          LDML   SLST 
          STML   EXST 
          SHN    0-10        EXTRACT STATUS FLAGS 
          STD    SS 
          LPN    70          CHECK EXECUTION STATUS 
          LMN    ESCC 
          NJN    GSS5        IF NOT *COMMAND COMPLETE*
          LDD    T2 
 GSS1     ZJN    GSS5        IF NO INTERVENTION STATUS ANALYSIS 
          LDD    SS 
          LPN    6
          ZJN    GSS5        IF NO INTERVENTION FLAGS 
 GSS2     LDN    EIRQ 
 GSS3     RJM    ERR         PROCESS ERROR
  
 GSS4     LDN    ECBN 
          UJN    GSS3        COMMAND BLOCK NUMBER 
 IBM      SPACE  4,20 
**        IBM - ISSUE BML MESSAGE.
* 
*         ENTRY  (A) = 6/ ML, 12/ SC
*                      ML = MESSAGE LENGTH (CM WORD COUNT). 
*                      SC = MESSAGE SYMPTOM CODE. 
*                (RW) = READ / WRITE FLAG.
*                (DT) = DEVICE TYPE.
*                (EO) = EST ORDINAL.
*                (UN) = UNIT NUMBER.
*                (MISC) = 1 IF UNRECOVERED ERROR. 
* 
*         EXIT   (A) = (MISC) = 0.
* 
*         USES   T2, T3.
* 
*         CALLS  CMC, IMB, UEC. 
  
  
 IBM      SUBR               ENTRY/EXIT 
          LMC    D1HY*400 
          STM    BMLM+1 
          SHN    -14         SET MESSAGE LENGTH 
          STD    T2 
          ZJN    IBM1        IF BASIC MESSAGE ONLY
          LDN    1
 IBM1     STD    T3 
          LDD    DT 
          ADC    RM0120      SET MESSAGE ID 
          STM    BMLM 
          LDML   CREG,DI     SET PORT NUMBER
          SHN    6-16 
*         LPC    100
          STM    PORT 
          LDD    UN          SET UNIT NUMBER
          STM    UNIT 
          LDD    EO          SET EST ORDINAL
          STM    ESTO 
          LDM    ERCT,DI     SET RETRY COUNT
          SHN    5
          LMD    RW          MERGE READ / WRITE FLAG
          SHN    1
          RAM    MISC 
          RJM    CMC         CHECK MONITOR COMPLETE 
          LDM    MAD1 
          NJN    IBM3        IF HEADER NOT REQUIRED 
          LDD    T2          PARTIAL MESSAGE LENGTH 
          ADN    3           HEADER LENGTH
          STM    MSGL+1      COMPLETE MESSAGE LENGTH
          LDM    MAD2        MESSAGE ADDRESS
          STD    T0 
          LDN    3*5-1
          STD    T3 
 IBM2     SOD    T0          MOVE HEADER TO MESSAGE 
          LDM    MSGP,T3
          STI    T0 
          SOD    T3 
          PJN    IBM2        IF MOVE NOT COMPLETE 
          LDD    T0 
 IBM3     RJM    IMB         ISSUE MESSAGE TO BUFFER
          RJM    UEC         UPDATE MST ERROR COUNT 
          LDC    MBUF 
          STM    MAD2        RESTORE MESSAGE ADDRESS
          LDN    0
          STM    MAD1 
          STM    MISC        CLEAR UNRECOVERED ERROR STATUS 
*         LDN    0
          LJM    IBMX        RETURN 
  
  
 MAD1     CON    0           MESSAGE ADDRESS IF MESSAGE HAS HEADER. 
 MAD2     CON    MBUF        MESSAGE ADDRESS IF HEADER MUST BE ADDED. 
  
 MSGP     CON    0           MESSAGE PREFIX 
          CON    0
 MSGL     CON    0,0         MESSAGE LENGTH 
          CON    MLDY        MESSAGE TYPE 
  
 BMLM     BSS    0           BML MESSAGE PREFIX 
          VFD    12/RM0120   887 MESSAGE ID 
          VFD    12/         SYMPTOM CODE 
          VFD    6/,6/       CPP NUMBER, CHANNEL NUMBER 
 UNIT     VFD    6/0,6/      UNUSED, UNIT NUMBER
 PORT     VFD    6/,6/0      PORT NUMBER, UNUSED
  
 ESTO     VFD    12/         EST ORDINAL
 MISC     VFD    6/,4/0,2/   RETRY COUNT, UNUSED, WRITE + REC FLAGS 
          VFD    12/0        UNUSED 
 MFID     VFD    12/         MAINFRAME ID 
          VFD    12/0        UNUSED 
 IEM      SPACE  4,10 
**        IEM - ISSUE BML ERROR MESSAGE.
* 
*         ENTRY  (A) = SYMPTOM CODE OFFSET FROM *HD0100*. 
*                (ML) = MESSAGE LENGTH (CM WORD COUNT). 
* 
*         EXIT   (A) = (ML) = 0.
* 
*         CALLS  IBM. 
  
  
 IEM      SUBR               ENTRY/EXIT 
          ADD    HN 
          ERRNZ  HD0100-100  CODE DEPENDS ON VALUE
          STD    T0 
          LDC    EBUF        SET MESSAGE ADDRESS
          STM    MAD2 
          LDD    ML          MESSAGE LENGTH 
          SHN    14 
          LMD    T0 
          RJM    IBM         ISSUE ERROR MESSAGE
*         LDN    0
          STD    ML 
          UJN    IEMX        RETURN 
 IIO      SPACE  4,15 
**        IIO - INITIATE I/O. 
* 
*         ENTRY  (A) = (CB) = *CBT* ORDINAL.
* 
*         EXIT   (A) = 0 IF I/O DISABLED ON THIS CHANNEL. 
*                (RW) = READ / WRITE STATUS.
*                (PA) = PROCESSOR ADDRESS.
*                (TO) = SEEK TIMEOUT VALUE. 
*                (NR - NR+4) = PHYSICAL ADDRESS OF REQUEST. 
* 
*         USES   T1 - T7. 
* 
*         CALLS  PEF. 
* 
*         MACROS CBTE.
  
  
 IIO3     STD    PA 
          SCN    77          SET I/O DISABLED STATUS
  
 IIO      SUBR               ENTRY/EXIT 
          SHN    CBTLS
          CBTE   *
          ADC    PAD1        FETCH SEEK PARAMETERS FROM *CBT* 
          CRD    NR 
          ADN    PAD4-PAD1   GET CHANNEL FROM CBT ENTRY 
          CRD    T1 
          ADN    HSLK-PAD4   GET CHANNEL SELECT STATUS
          CRD    T2 
          SBN    HSLK-IOLK   GET READ / WRITE FLAG
          CRD    T3 
          LDD    T2          CHECK ERROR FLAGS
          SHN    0-12 
          ZJN    IIO2        IF NO FLAGS
          SHN    -1 
          STD    RW          PROCESS ERROR FLAGS
          RJM    PEF
 IIO1     NJN    IIO3        IF I/O PREPROCESSING INDICATED 
 IIO2     LDD    NR+1 
          STM    WCBA+5      SET CYLINDER IN COMMAND BLOCK
          STM    CYLN,DI
          LDD    NR+2 
          STM    TKSN,DI     TRACK + SECTOR 
          SCN    77 
          SHN    2
          LMD    NR+2        SEPARATE INTO 8 BIT FIELDS 
          SCN    77 
          LMD    NR+2        SET IN COMMAND BLOCK 
          STML   WCBA+6 
          LDD    T3 
          SHN    22-11       EXTRACT WRITE DATA FLAG
          LPN    1
          STM    RWST,DI     SET READ / WRITE STATUS
          STD    RW 
          LDN    3
          STD    TO          SEEK TIMEOUT = 3 SECONDS 
          LDC    PIO
          UJN    IIO1        SET PROCESSOR ADDRESS
 IMR      SPACE  4,15 
**        IMR - INITIATE MONITOR REQUEST. 
* 
*         ENTRY  (A) = *BIOM* SUBFUNCTION.
*                (PO) = *PUT* ORDINAL.
*                (WB+3 - WB+4) = *BIOM* PARAMETERS. 
* 
*         EXIT   (A) = 0. 
* 
*         USES   WB - WB+2. 
* 
*         CALLS  AME, CMC.
  
  
 IMR2     RJM    AME         ATTEMPT MONITOR EXCHANGE 
*         LDN    0
  
 IMR      SUBR               ENTRY/EXIT 
          STD    WB+1 
          LDD    PO          SET *PUT* ORDINAL
          STD    WB+2 
          LDN    BIOM        SET MONITOR FUNCTION 
          STD    WB 
          RJM    CMC         CHECK MONITOR COMPLETE 
          LDD    OA 
          CWD    WB 
          UJN    IMR2        ATTEMPT EXCHANGE 
IOM       SPACE  4,10 
**        IOM - ISSUE OPERATOR MESSAGE. 
* 
*         ENTRY  (A) = ADDRESS OF MESSAGE.
*                    = 0 TO CLEAR MESSAGE.
*                (EO) = EST ORDINAL.
* 
*         USES   T1.
* 
*         CALLS  C2D. 
  
  
 IOM1     LDD    CP          CLEAR THE MESSAGE
          ADN    MS2W 
          CWD    T1 
  
 IOM      SUBR               ENTRY/EXIT 
          STD    T1 
          ZJN    IOM1        IF CLEAR MESSAGE CALL
          STM    IOMA 
          LDD    EO          CONVERT EST ORDINAL
          RJM    C2D
          STM    2,T1        SET IN MESSAGE 
          LDD    EO 
          SHN    -6 
          LMC    2RQ0 
          STM    1,T1 
          LDD    CP          STORE OPERATOR MESSAGE 
          ADN    MS2W 
          CWM    **,TR
 IOMA     EQU    *-1
          UJN    IOMX        RETURN 
 ISF      SPACE  4,15 
**        ISF - ISSUE *SEQM* FUNCTION.
* 
*         ENTRY  (A) = *SEQM* SUBFUNCTION.
*                (EO) = EST ORDINAL.
*                (IR+4) = CHANNEL NUMBER. 
* 
*         EXIT   (A) = 0. 
* 
*         USES   T2, CM - CM+4. 
* 
*         CALLS  CMC. 
* 
*         MACROS MONITOR. 
  
  
 ISF      SUBR               ENTRY/EXIT 
          STD    T2 
          RJM    CMC         CHECK MONITOR COMPLETE 
          LDD    EO 
          STD    CM+1        SET EST ORDINAL
          LDD    T2 
          STD    CM+2        SET *SEQM* SUBFUNCTION 
          LDD    IR+4 
          STD    CM+3        SET CHANNEL NUMBER 
          MONITOR  SEQM 
*         LDN    0
          UJN    ISFX        RETURN 
 ISR      SPACE  4,10 
**        ISR - IDENTIFY SPECIAL REQUEST. 
* 
*         ENTRY  (A) = SPECIAL REQUEST FLAGS. 
* 
*         EXIT   (A) = 0 IF UNIDENTIFIED FLAG.
*                (PA) = PROCESSOR ADDRESS.
*                (RW) = SPECIAL REQUEST INDEX.
  
  
 ISR2     LDM    ISRA,RW     SET SPECIAL REQUEST PROCESSOR
          STD    PA 
  
 ISR      SUBR               ENTRY/EXIT 
          SHN    -1 
          STD    T0          SAVE FLAGS 
          LCN    0
          ERRNZ  DUNF+1-SPDF CODE DEPENDS ON VALUE
          STD    RW 
 ISR1     AOD    RW          ADVANCE INDEX
          LDD    T0 
          SHN    21-0        CHECK NEXT FLAG
          STD    T0 
          PJN    ISR1        IF NOT SET 
          LDD    RW 
          STM    RWST,DI     SET INDEX FOR DIAGNOSTICS
          ADN    SPDF 
          STM    SREQ,DI     SET SPECIAL REQUEST FLAG 
          SBN    DUCF+1 
          MJN    ISR2        IF VALID REQUEST 
          LDN    0
          UJN    ISRX        RETURN 
  
  
 ISRA     BSS    0           SPECIAL REQUEST PROCESSORS 
          CON    SPD         SPIN-DOWN DRIVE
          CON    SPU         SPIN-UP DRIVE
          CON    DUC         DAYFILE UNIT CHARACTERISTICS 
 PEF      SPACE  4,15 
**        PEF - PROCESS ERROR FLAGS.
* 
*         ENTRY  (RW) = ERROR INDEX.
*                (CB) = *CBT* ORDINAL.
*                (T1) = BYTE 0 OF *PAD4* WORD OF CBT ENTRY. 
*                (RF) = SPECIAL REQUEST FLAGS.
*                (NR - NR+4) = *PAD1* WORD OF *CBT* ENTRY.
* 
*         EXIT   (A) = 0 IF OK TO INITIATE I/O. 
*                    = I/O PREPROCESSOR ADDRESS.
* 
*         USES   RW, PA.
* 
*         CALLS  CPF, IIO, WFC. 
  
  
 PEF6     LDN    0           INDICATE I/O IN ORDER
  
 PEF      SUBR               ENTRY/EXIT 
          LDD    T1 
          SHN    -6 
          LMD    IR+4        CHECK CHANNEL NUMBER 
          NJN    PEFX        IF I/O DISABLED ON THIS ACCESS 
          LDM    ERCT,DI
          NJN    PEF1        IF PATH VERIFICATION INITIATED 
          LDM    PEFA,RW
          STM    ERCT,DI     SET INITIAL ERROR COUNT
 PEF1     LDM    IPPS,DI
          NJN    PEF6        IF I/O PREPROCESSING COMPLETE
          LDD    RW 
          SHN    14-0 
          NJN    PEF2        IF NOT *1MV* DEVICE VERIFICATION 
  
*         CHECK DISK ADDRESS AT BEGINNING OF MAINTENANCE CYLINDER.
  
          LDD    NR+1        CHECK CURRENT CYLINDER 
 .CY      SET    MCLTDF-4000
          ERRNZ  MCLTDH-MCLTDF  CODE DEPENDS ON VALUE 
          LMC    .CY/2
          NJN    PEF6        IF NOT MAINTENANCE CYLINDER
          LDD    NR+2 
          NJN    PEF6        IF DEVICE VERIFICATION IN PROGRESS 
          LDD    RF 
          LPN    DVRF 
          ZJN    PEFX        IF NO VERIFICATION DIAGNOSTICS 
          LCN    PEF4-PEF3
 PEF2     ADC    PEF4 
          UJP    PEFX        RETURN 
  
 PEF3     LDN    DVDF        CLEAR DIAGNOSTICS REQUESTED FLAG 
          RJM    CPF
 PEF4     LDM    PEFB,RW     SET I/O PREPROCESSOR ADDRESS 
          STD    PA 
          LDN    2           SELECT VERIFICATION DIAGNOSTICS
          STD    RW 
          STM    RWST,DI     SAVE AS READ / WRITE STATUS
          LDC    PEF5 
          LJM    0,PA        EXIT TO PREPROCESSOR 
  
 PEF5     LDC    FWCA        CLEAR ATTENTION
          RJM    WFC
          LDD    CB          INITIATE I/O 
          STM    IPPS,DI
          RJM    IIO
          LJM    0,PA        EXIT TO PROCESSOR
  
  
 PEFA     BSS    0           INITIAL ERROR COUNT
          CON    0
          CON    CSRC 
  
 PEFB     BSS    0           I/O PREPROCESSOR 
          CON    RND1 
          CON    SRS1 
 RBD      SPACE  4,10 
**        RBD - READ BUFFERED DISK. 
* 
*         ENTRY  (CB) = CURRENT *CBT* ORDINAL.
* 
*         EXIT   (A) = *ETTC* IF TRANSFER COMPLETE TIMEOUT. 
* 
*         CALLS  COS, EIO, SFR, WTR.
  
  
 RBD      SUBR               ENTRY/EXIT 
 RBD1     RJM    WTR         WRITE *T* REGISTER 
          LDD    CB 
          RJM    EIO         ENTER REQUEST IN I/O QUEUE 
          RJM    SFR
          ZJN    RBDX        IF NO CONSECUTIVE REQUEST FOUND
          STD    CB 
          LCN    1           CHECK OPERATIONAL STATUS 
          RJM    COS
          ZJN    RBD1        IF TRANSFER COMPLETE 
          LDN    ETTR 
          UJN    RBDX        RETURN ERROR 
 RCR      SPACE  4,10 
**        RCR - RESET CHANNEL REGISTERS.
* 
*         EXIT   (SF) = 0 (DEVICE NOT SELECTED).
* 
*         CALLS  FCN. 
  
  
 RCR      SUBR   HYD4        ENTRY/EXIT 
          DCN    CH+40
          LDK    FCMC        MASTER CLEAR THE ADAPTOR 
          RJM    FCN
          LDN    0           SET DEVICE NOT SELECTED
          STD    SF 
          UJN    RCRX        RETURN 
 RCS      SPACE  4,10 
**        RCS - REMOVE CHANNEL FROM SYSTEM USE. 
* 
*         ENTRY  (A) = EST ORDINAL IF CHANNEL IS TO BE DOWNED ON A
*                      PARTICULAR DEVICE. 
*                    = 0 IF CHANNEL IS TO BE GLOBALLY DOWNED. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS DELAY, EXECUTE, MONITOR. 
  
  
 RCS      SUBR               ENTRY/EXIT 
          LMC    4000        SET DRIVER CALL FLAG, EST ORDINAL
          STM    RCSA+4 
          LDD    MA          WRITE *1DS* CALL IN MESSAGE BUFFER 
          CWM    RCSA,ON
 RCS1     LDN    0           SET NON-PRIORITY REQUEST 
          STD    CM+1 
          EXECUTE  1DS,=
          MONITOR  RPPM 
          LDD    CM+1 
          NJN    RCSX        IF *1DS* STARTED 
          DELAY 
          UJN    RCS1        RETRY CALL 
  
  
 RCSA     VFD    18/3L1DS,6/,12/DWNF,12/0,12/4000 
 RCT      SPACE  4,10 
**        RCT - READ CHANNEL TABLE. 
* 
*         EXIT   (A) = CHANNEL TABLE STATUS BYTE. 
* 
*         USES   NR - NR+4. 
* 
*         MACROS CHTE.
  
  
 RCT      SUBR               ENTRY/EXIT 
          CHTE   *
          LDC    0           READ CHANNEL TABLE ENTRY 
          CRD    NR 
 RCTA     LDD    NR+0 
          UJN    RCTX        RETURN 
 RLB      SPACE  4,15 
**        RLB - READ LINKAGE BITS.
* 
*         ENTRY  (A) = (T6) = ADDRESS FOR LINKAGE IN (CM - CM+4). 
*                (PB) = CONTROL BUFFER ORDINAL. 
*                (T1) = DATA BUFFER ADDRESS.
*                (T2) = CONTROL BUFFER WORD NUMBER. 
*                (CM - CM+4) = *PAD* WORD OF *CBT* ENTRY. 
* 
*         EXIT   SECTOR LINKAGE SET IN *CBT* ENTRY. 
* 
*         USES   T6.
* 
*         MACROS CBTE.
  
  
 RLB1     LDN    10+4        ADVANCE BUFFER ADDRESS 
          RAD    T1 
          LDIL   T1          EXTRACT LINKAGE FROM BUFFER
 RLB2     SHN    -14
          SHN    10          POSITION FOR *CBT* ENTRY 
          STI    T6 
          LDML   4,T1        EXTRACT LINKAGE FROM BUFFER
          SHN    -14
          SHN    4           POSITION FOR *CBT* ENTRY 
          RAI    T6 
          LDML   10,T1       EXTRACT LINKAGE FROM BUFFER
          SHN    -14
*         SHN    0           POSITION FOR *CBT* ENTRY 
          RAI    T6 
          AOD    T6          ADVANCE *CBT* WORD ADDRESS 
          LMN    CM+5 
          NJN    RLB1        IF MORE LINKAGE
          LDD    PB 
          SHN    CBTLS
          CBTE   *
          ADC    0           FWA OF *CBT* 
          ADD    T2 
          CWD    CM          UPDATE CONTROL BUFFER ENTRY
  
 RLB      SUBR               ENTRY/EXIT 
*         LDD    T6 
          UJN    RLB2        MOVE SECTOR LINKAGE
 R1B      SPACE  4,10 
**        R1B - READ ONE BYTE.
* 
*         ENTRY  (A) = FUNCTION CODE. 
* 
*         EXIT   (A) = (CD) = CHANNEL DATA. 
* 
*         CALLS  CFE, FCN.
  
  
 R1B      SUBR               ENTRY/EXIT 
          RJM    FCN
          ACN    CH 
          IAN    CH 
          STDL   CD          SAVE INPUT 
          LDN    0
          RJM    CFE         CHECK FOR ERROR
          LDDL   CD 
          UJN    R1BX        RETURN 
 SAP      SPACE  4,10 
**        SAP - SELECT ADAPTOR PORT.
* 
*         CALLS  FCN, WTC.
  
  
 SAP      SUBR               ENTRY/EXIT 
          LDC    FCWC 
          RJM    FCN         WRITE CONTROL REGISTER 
          ACN    CH 
          LDML   CREG,DI     OUTPUT PORT SELECT 
          OAN    CH 
          LDN    0           WAIT - TRANSMISSION COMPLETE 
          RJM    WTC
          UJN    SAPX        RETURN 
 SCD      SPACE  4,10 
**        SCD - STORE *CPD* DATA. 
* 
*         ENTRY  (A) = 0 TO INDICATE CHANNEL INACTIVE.
*                    = 1 TO INDICATE CHANNEL ACTIVE.
*                (UC) = UNIT ACTIVITY COUNT.
* 
*         USES   T7, CM - CM+4. 
* 
*         MACROS CCTE.
  
  
 SCD      SUBR               ENTRY/EXIT 
          STD    T7 
          LDN    ZERL        CLEAR UNUSED BYTES 
          CRD    CM 
          LDD    UC          INSERT UNIT COUNT
          STD    CM 
          CCTE   *
          LDC    CREQ        STORE *CPD* DATA 
          CWD    T7 
          UJN    SCDX        RETURN 
 SEC      SPACE  4,10 
**        SEC - SET ERROR CODE. 
* 
*         ENTRY  (EO) = EST ORDINAL.
* 
*         USES   T5, WB+3 - WB+4. 
* 
*         CALLS  IMR, RCR, RCS, SES.
  
  
 SEC1     LDN    1           *CBT* COUNT TO BE DELINKED 
          STD    WB+3 
          SHN    13-0        SET INTERLOCK RELEASED (FOR *CMP*) 
          STM    RQIN,DI
          LDM    FALT 
          SHN    -2          CREATE INDEX FROM FAULT CODE 
          STD    T5 
          LDM    TMSE,T5     SET MASS STORAGE ERROR CODE
          STD    WB+4 
          LDN    SETS        INSERT CODE IN *CBT* 
          RJM    IMR
          SOD    UC          DECREMENT UNIT ACTIVITY COUNT
  
 SEC      SUBR               ENTRY/EXIT 
          RJM    RCR         RESET CHANNEL REGISTERS
          LDD    EO 
          STD    T5          EST ORDINAL FOR *SES*
          LDN    STDE 
          RJM    SES         SET ERROR STATUS IN MST
          LDM    SREQ,DI
          ZJN    SEC1        IF I/O PROCESSING
          LDD    EO          DOWN CHANNEL ON THIS DEVICE
          RJM    RCS
          LJM    CMP1        COMPLETE PROCESSING
 SFR      SPACE  4,15 
**        SFR - SEARCH FOR CONSECUTIVE REQUEST. 
* 
*         ENTRY  (CB) = CURRENT *CBT* ORDINAL.
*                (DT) = DEVICE TYPE.
* 
*         EXIT   (A) = 0 IF NO CONSECUTIVE REQUEST FOUND. 
*                    = (NB) = *CBT* ORDINAL OF NEXT REQUEST.
*                (NR - NR+4) = PHYSICAL ADDRESS OF NEXT REQUEST.
* 
*         USES   CM - CM+4, T1 - T6.
* 
*         MACROS CBTE.
  
  
 SFR      SUBR               ENTRY/EXIT 
          LDD    CB 
          SHN    CBTLS       FETCH SEEK PARAMETERS FROM *CBT* 
          CBTE   *
          ADC    PAD1 
          CRD    CM 
          ADN    IOLK-PAD1   (T1) = I/O LINK-UP FLAGS 
          CRD    T1 
          LDD    T1          CHECK STREAMING ENABLED
          LPN    40 
          NJN    SFR1        IF DATA STREAMING DISABLED 
          LDD    T1+2 
          ZJN    SFRX        IF NO REQUEST AVAILABLE
          STD    NB 
          SHN    CBTLS
          CBTE   *
          ADC    PAD1        PHYSICAL ADDRESS OF NEXT REQUEST 
          CRD    NR 
          ADN    IOLK-PAD1   I/O LINK-UP WORD OF NEXT REQUEST 
          CRD    T2 
          LDD    T2          COMPARE LINK-UP FLAGS
          LMD    T1 
          LPC    DRFM+ILFM
          ZJN    SFR3        IF SAME DIRECTION AND INTERLOCKED
 SFR1     LDN    0
          STD    NB 
 SFR2     UJN    SFRX        RETURN 
  
 SFR3     LDD    NR+1        CHECK SEEK PARAMETERS
          SBD    CM+1 
          ZJN    SFR4        IF SAME CYLINDER 
          SBN    1
          NJN    SFR1        IF NOT NEXT CYLINDER 
          LDD    NR+2 
          NJN    SFR1        IF NOT CONSECUTIVE CYLINDER REQUEST
          SBK    PTCYDF*100 
          UJN    SFR5        CHECK NEXT TRACK / SECTOR
  
          ERRNZ  PTCYDH-PTCYDF  CODE DEPENDS ON VALUE 
  
 SFR4     LDD    CM+2        CHECK NEXT SECTOR
          ADM    SFRA,DT
          LMD    NR+2 
          ZJN    SFR6        IF NEXT SECTOR ON SAME TRACK 
          LDN    0
 SFR5     ADD    CM+2        SET NEXT TRACK 
          ADD    HN 
          SBM    SFRB,DT     CHECK NEXT SECTOR
          LMD    NR+2 
          NJN    SFR1        IF NOT NEXT SECTOR ON CONSECUTIVE TRACKS 
 SFR6     LDD    NB 
          UJN    SFR2        RETURN 
  
  
 SFRA     BSS    0           PHYSICAL SECTORS PER I/O BUFFER
          CON    PSBFDF 
          CON    PSBFDH 
  
 SFRB     BSS    0           FACTOR FOR NEXT SECTOR CALCULATION 
          CON    PSPTDF-PSBFDF
          CON    PSPTDH-PSBFDH
 SLB      SPACE  4,15 
**        SLB - SET LINKAGE BITS. 
* 
*         ENTRY  (PB) = *CBT* ORDINAL.
*                (RW) = READ / WRITE STATUS.
* 
*         EXIT   LINKAGE BITS SET IN *CBT* ENTRY / UEM BUFFER.
* 
*         USES   CM - CM+4, T0 - T6, UA - UA+1. 
* 
*         CALLS  RLB, SUA, WLB. 
* 
*         MACROS CBTE.
  
  
 SLB      SUBR               ENTRY/EXIT 
          LDD    PB 
          RJM    SUA         SET UEM ADDRESS
          LDN    PAD1 
          STD    T2 
          SRD    T3 
          LDN    5           UEM WORD COUNT 
          STD    T5 
          LDM    SLBB,RW     SET PROCESSOR ADDRESS
          STM    SLBA 
 SLB1     LRD    UA          LOAD *R* REGISTER
          LDD    PB 
          SHN    CBTLS       READ CONTROL BUFFER WORD 
          CBTE   *
          ADC    0           FWA OF *CBT* 
          ADD    T2 
          CRD    CM 
          LDC    SBUF-4      SET BUFFER ADDRESS 
          STD    T1 
          LDC    1S17        READ START OF BUFFER SEGMENT 
          CRML   SBUF,T5
          LDN    CM+3        SET *CBT* ENTRY ADDRESS
          STD    T6 
          RJM    0           MOVE LINKAGE BITS
 SLBA     EQU    *-1
          LDN    10          ADVANCE *R* REGISTER IMAGE 
          RAD    UA+1 
          SHN    -14
          RAD    UA 
          AOD    T2          ADVANCE CONTROL BUFFER WORD
          LMN    PAD4+1 
          NJN    SLB1        IF NOT COMPLETE
          LRD    T3 
          UJP    SLBX        RETURN 
  
  
 SLBB     CON    RLB
          CON    WLB
 SRF      SPACE  4,10 
**        SRF - SET DRIVER RELOAD FLAG. 
* 
*         EXIT   (A) = 0. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  CMC, DCR.
* 
*         MACROS CHTE, MONITOR. 
  
  
 SRF      SUBR               ENTRY/EXIT 
          RJM    CMC
          RJM    DCR         DROP CHANNEL RESERVATION 
*         LDN    0
          STD    CM+2        CLEAR UNUSED BYTE
          CHTE   *
          LDC    CTALL*2     ADDRESS OF CHANNEL CONTROLWARE TABLE ENTRY 
          STD    CM+4 
          SHN    -14
          STD    CM+3 
          LDN    1           SET NUMBER OF REQUESTS 
          STD    CM+1 
          LDD    MA          STORE REQUEST IN MESSAGE BUFFER
          CWM    SRFA,CM+1
          MONITOR  UTEM      SET RELOAD FLAG
*         LDN    0
          UJN    SRFX        RETURN 
  
  
 SRFA     VFD    1/0,5/0,6/1,6/,42/1
 SSD      SPACE  4,15 
**        SSD - SELECT SLAVE DEVICE.
* 
*         ENTRY  (SF) = 1 IF DEVICE PREVIOUSLY SELECTED.
*                (UN) = UNIT NUMBER.
* 
*         EXIT   (A) .NE. 0 IF DEVICE SELECTED. 
*                (SF) = 1 IF DEVICE SELECTED. 
* 
*         ERROR  TO *ERR* IF SELECT REJECT. 
* 
*         USES   T2.
* 
*         CALLS  FCN, R1B, SAP, WFW.
  
  
 SSD4     AOD    SF          SET DEVICE SELECTED
  
 SSD      SUBR               ENTRY/EXIT 
          LDD    SF 
          NJN    SSDX        IF DEVICE PREVIOUSLY SELECTED
          LDN    DSRC 
          STD    T2 
          RJM    SAP         SELECT ADAPTOR PORT
 SSD1     LDD    UN 
          LMC    FWBS        WRITE FUNCTION WORD
          RJM    WFW
 SSD2     LDC    FCRO        GET OPERATIONAL STATUS 
          RJM    R1B
          SHN    0-11 
          LPN    35          EXTRACT PAUSE, SYNC IN/OUT, SELECT ACTIVE
          LMN    1
          ZJN    SSD4        IF DEVICE SELECTED 
          LDC    FCCH 
          RJM    FCN         CLEAR SELECT HOLD
          SOD    T2 
          NJN    SSD1        IF RETRY COUNT NOT EXHAUSTED 
          LDC    FCIS 
          RJM    R1B         CHECK IDLE STATUS
          SHN    -10
          LPML   TMSK,UN
          ZJN    SSD3        IF DRIVE NOT BUSY
          LDN    EDRA&ETSL
 SSD3     LMN    ETSL 
          RJM    ERR         PROCESS ERROR
 STF      SPACE  4,15 
**        STF - REQUEST TRACK FLAW. 
* 
*         ENTRY  (CB) = CURRENT *CBT* ORDINAL.
*                (EO) = EST ORDINAL.
* 
*         USES   CM - CM+4, T3 - T3+4.
* 
*         CALLS  CMC, C2D, IBM. 
* 
*         MACROS CBTE, MONITOR. 
  
  
 STF      SUBR               ENTRY/EXIT 
          RJM    CMC
          LDD    EO          CONVERT EST ORDINAL
          SHN    -3 
          RJM    C2D
          STM    STFB+1      SET ORDINAL IN MESSAGE 
          LDD    EO 
          STD    CM+1 
          LPN    7
          SHN    6
          ADC    2R0, 
          STM    STFB+2 
          LDD    CB          FETCH *CBT* INFORMATION
          SHN    CBTLS
          CBTE   *
          ADC    PAD1 
          CRD    T3 
          LDD    T3+1        DETERMINE LOGICAL TRACK NUMBER 
          SHN    1
          ERRNZ  LTCYDF-2    CODE DEPENDS ON VALUE
          ADC    4000 
          ERRNZ  LTCYDH-LTCYDF  CODE DEPENDS ON VALUE 
          STD    CM+2 
          LDD    T3+2 
          ERRNZ  PTCYDF-4    CODE DEPENDS ON VALUE
          SHN    -7 
          ERRNZ  PTCYDH-PTCYDF  CODE DEPENDS ON VALUE 
          RAD    CM+2 
          RJM    C2D         CONVERT TRACK NUMBER FOR MESSAGE 
          STM    STFB+5 
          LDD    CM+2 
          SHN    -6 
          RJM    C2D
          STM    STFB+4 
          LDK    SFTS        INSERT SUBFUNCTION 
          STD    CM+3 
          MONITOR  SMDM      SET TRACK FLAW REQUEST IN MST
          LDD    CM+1 
          NJN    STF2        IF THIS FLAW ALREADY REQUESTED 
          LDC    STFA 
          STM    MAD1        ISSUE ERROR LOG MESSAGE
          RJM    IBM
 STF2     LJM    STFX        RETURN 
  
  
 STFA     VFD    24/0        RESERVED 
          VFD    12/1        ERRLOG ALERT FLAG
          VFD    12/STFAL    MESSAGE LENGTH 
          VFD    12/ELDY     ERRLOG DAYFILE 
  
 STFB     DATA   C*EQXXX,TKNNNN, MEDIA DEFECT ENCOUNTERED.* 
  
 .1       SET    *-STFA+4 
 STFAL    EQU    .1/5 
 STO      SPACE  4,10 
**        STO - SET TIMEOUT.
* 
*         ENTRY  (A) = TIMEOUT VALUE (IN SECONDS).
*                (PO) = *PUT* ORDINAL.
* 
*         USES   T5, T6, T7, CM - CM+4. 
* 
*         MACROS FTTE.
  
  
 STO      SUBR               ENTRY/EXIT 
          STD    T6 
          LDC    RTCL        FETCH CURRENT TIME 
          CRD    CM 
          LDD    T6 
          RAD    CM+1        SET TIME LIMIT 
          SHN    -14
          RAD    CM 
          LDM    STO         SET CALLERS ADDRESS
          STD    T7 
          LDN    0
          STD    T5 
          LDD    PO          STORE TABLE ENTRY
          SHK    FTTLS
          FTTE   *
          ADC    0
          CWD    T5 
          UJN    STOX        RETURN 
 SUA      SPACE  4,10 
**        SUA - SET UEM ADDRESS.
* 
*         ENTRY  (A) = *CBT* ORDINAL. 
* 
*         EXIT   (UA - UA+1) = UEM ADDRESS / 100. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS CBTE.
  
  
 SUA      SUBR               ENTRY/EXIT 
          SHN    CBTLS
          CBTE   *
          ADC    IOLK        READ *CBT* ENTRY 
          CRD    CM 
          LDD    CM+4        EXTRACT RELATIVE UEM ADDRESS 
          ADC    0
 SUAA     EQU    *-1
          SHN    -6 
          STD    UA+1        SET ABSOLUTE ADDRESS / 100 
          LDD    CM+3 
          ADC    0
 SUAB     EQU    *-1
          SHN    6
          RAD    UA+1 
          SHN    -14
          STD    UA 
          UJN    SUAX        RETURN 
 SUI      SPACE  4,15 
**        SUI - SET UNIT INTERLOCK. 
* 
*         ENTRY  (PO) = *PUT ORDINAL. 
* 
*         EXIT   (A) = 0 IF *PUT* ENTRY INTERLOCKED.
*                (UC) = UNIT ACTIVITY COUNT INCREMENTED.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  CMC. 
* 
*         MACROS MONITOR. 
  
  
 SUI1     AOD    UC          ADVANCE UNIT ASSIGNED COUNT
          LDN    0
  
 SUI      SUBR               ENTRY/EXIT 
          RJM    CMC
          LDD    PO          SET *PUT* ORDINAL
          STD    CM+2 
          LDN    SUIS        SET SUBFUNCTION
          STD    CM+1 
          MONITOR  BIOM      INTERLOCK DEVICE 
          LDD    CM+1 
          ZJN    SUI1        IF INTERLOCK ACQUIRED
          LMD    OA 
          UJN    SUIX        RETURN 
 TMSE     SPACE  4,10 
**        TMSE - TABLE OF MASS STORAGE ERROR CODES. 
* 
*         INDEXED BY FAULT CODE / 4.
  
  
 TMSE     BSS    0
          LOC    0
  
          CON    CHPE        CHANNEL PARITY 
          CON    CHFE        CHANNEL FAILURE
          CON    FTOE        FUNCTION TIMEOUT 
          CON    PARE        DATA PARITY (MEDIA)
          CON    NRDE        DEVICE NOT READY 
          CON    IDTE        DATA TRANSFER
          CON    DSTE        DEVICE STATUS
          CON    DSTE        DEVICE STATUS
          CON    DSTE        DEVICE STATUS
          CON    DSTE        DEVICE STATUS
          CON    DDFE        DIAGNOSTIC FAILURE 
          CON    DRVE        DRIVE RESERVED 
          LOC    *O 
 TMSK     SPACE  4,10 
**        TMSK - TABLE OF UNIT MASKS. 
* 
*         INDEXED BY UNIT NUMBER. 
  
  
 TMSK     BSS    0
          LOC    0
  
          CON    200
          CON    100
          CON    040
          CON    020
          CON    010
          CON    004
          CON    002
          CON    001
          LOC    *O 
 UEC      SPACE  4,15 
**        UEC - UPDATE MST ERROR COUNT. 
* 
*         ENTRY  (EO) = EST ORDINAL.
*                (BMLM+2) = BML MESSAGE SYMPTOM CODE. 
*                (MISC - BIT 0) = 1 IF UNRECOVERED ERROR. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 UEC      SUBR               ENTRY/EXIT 
          LDM    BMLM+1 
          LMC    D1HY*400+HD0111
          NJN    UECX        IF NOT COMPLETION MESSAGE
          LDD    EO 
          STD    CM+1        SET EST ORDINAL
          LDM    MISC 
          LPN    1           SET BYTE NUMBER
          ADN    3
          STD    CM+2 
          LDN    ICTS        INCREMENT ERROR COUNT
          STD    CM+3 
          MONITOR  SMDM 
          UJN    UECX        RETURN 
 UHD      SPACE  4,15 
**        UHD - UNPACK HEX DATA.
* 
*         ENTRY  (A) = 6/ BC, 12/ SA
*                      BC = BYTE COUNT OF HEX DATA. 
*                      SA = SOURCE DATA ADDRESS.
*                (T3) = DESTINATION DATA ADDRESS. 
* 
*         EXIT   (A) = CM WORD COUNT OF 12 BIT DATA.
* 
*         USES   T2, T4, T5.
* 
*         CALLS  DV5. 
  
  
 UHD3     AOD    T3          SET END OF 12 BIT DATA 
          STM    UHDA 
          LDN    ZERL        ENSURE ZERO FILL TO CM WORD BOUNDARY 
          CRM    *,ON 
 UHDA     EQU    *-1
          LDD    T3          SET BYTE COUNT OF 12 BIT DATA
          SBD    T5 
          RJM    DV5         CONVERT TO CM WORD COUNT 
  
 UHD      SUBR               ENTRY/EXIT 
          STD    T2 
          SHN    -14         SET BYTE COUNT 
          STD    T4 
          LDD    T3          PRESERVE DESTINATION BUFFER ADDRESS
          STD    T5 
 UHD1     LDIL   T2          UNPACK N+3RD BYTE
          SHN    16 
          STI    T3 
          SHN    -6 
          SCN    77 
          STM    1,T3 
          AOD    T3 
          SOD    T4 
 UHD2     ZJN    UHD3        IF END OF HEX DATA 
          AOD    T2 
          LDIL   T2          UNPACK N+4TH BYTE
          SHN    -10
          RAI    T3 
          AOD    T3 
          LDIL   T2 
          SHN    4
          SCN    17 
          STI    T3 
          SOD    T4 
          ZJN    UHD2        IF END OF HEX DATA 
          AOD    T2 
          LDIL   T2          UNPACK N+5TH BYTE
          STM    1,T3 
          SHN    -14
          RAI    T3 
          AOD    T3 
          SOD    T4 
          ZJN    UHD2        IF END OF HEX DATA 
          AOD    T2 
          AOD    T3 
          UJP    UHD1        CONTINUE UNPACK
 WBD      SPACE  4,10 
**        WBD - WRITE BUFFERED DISK.
* 
*         ENTRY  (CB) = CURRENT *CBT* ORDINAL.
* 
*         EXIT   (A) = *ETTR* IF *T* REGISTER EMPTY TIMEOUT.
* 
*         CALLS  COS, EIO, SFR, WTR.
  
  
 WBD2     RJM    WTR         WRITE *T* REGISTER 
          RJM    SFR
          NJN    WBD1        IF CONSECUTIVE REQUEST FOUND 
  
 WBD      SUBR               ENTRY/EXIT 
          LDD    CB 
 WBD1     STD    CB          ENTER REQUEST IN I/O QUEUE 
          RJM    EIO
          LDN    2           CHECK OPERATIONAL STATUS 
          RJM    COS
          ZJN    WBD2        IF *T* REGISTER EMPTY
          LDN    ETTR 
          UJN    WBDX        RETURN ERROR 
 WCB      SPACE  4,15 
**        WCB - WRITE COMMAND BLOCK.
* 
*         ENTRY  (A) = 1/ CA, 1/, 16/ CC
*                      CA = 1 IF NOT CLEARING ATTENTION.
*                      CC = COMMAND CODE. 
*                (TO) = TIMEOUT VALUE FOR *FTT*.
* 
*         USES   T3.
* 
*         CALLS  FCN, R1B, STO, WFW, WTC. 
  
  
 WCB      SUBR               ENTRY/EXIT 
          STML   WCBA+7 
          STML   LCMD,DI
          SHN    0-21        EXTRACT *CLEAR ATTENTION* STATUS 
          SHN    14-0 
          LMC    FWCB        INITIATE COMMAND BLOCK WRITE 
 WCB1     RJM    WFW
          LDN    10          SET LENGTH OF BLOCK
          ACN    CH 
          OAM    WCBA,CH     OUTPUT COMMAND BLOCK 
          RJM    WTC
          LDC    250D        SET LOCAL TIMEOUT
          STD    T3 
 WCB2     LDC    FCRO        GET OPERATIONAL STATUS 
          RJM    R1B
          LPN    1
          NJN    WCB4        IF COMMAND BLOCK TRANSFER INCOMPLETE 
*         LDN    0
          STM    WCBA+4      CLEAR PARAMETER WORD 
          LDC    FCCS 
          RJM    FCN         CLEAR COMMAND SEQUENCE 
          LDD    TO 
          RJM    STO         SET REQUEST TIMEOUT
 WCB3     UJP    WCBX        RETURN 
  
 WCB4     DELAY  7           WAIT AWHILE
          SOD    T3 
          NJN    WCB2        IF NOT TIMEOUT 
          LDN    ETCB 
          RJM    ERR         PROCESS ERROR
  
  
 WCBA     BSS    10          COMMAND BLOCK
 WFC      SPACE  4,10 
**        WFC - WRITE FUNCTION WORD AND CLEAR.
* 
*         ENTRY  (A) = FUNCTION WORD. 
* 
*         CALLS  FCN, WFW.
  
  
 WFC      SUBR               ENTRY/EXIT 
          RJM    WFW         WRITE FUNCTION WORD
          LDC    FCCS        CLEAR COMMAND SEQUENCE 
          RJM    FCN
          UJN    WFCX        RETURN 
 WFW      SPACE  4,10 
**        WFW - WRITE FUNCTION WORD.
* 
*         ENTRY  (A) = FUNCTION WORD. 
* 
*         CALLS  FCN, WTC.
  
  
 WFW      SUBR               ENTRY/EXIT 
          STML   WFWA 
          LDC    FCCS        CLEAR COMMAND SEQUENCE 
          RJM    FCN
          LDC    FCSS        SET COMMAND SEQUENCE / SELECT HOLD 
          RJM    FCN
          LDN    1           SET BYTE COUNT 
          ACN    CH 
          OAM    WFWA,CH     OUTPUT FUNCTION WORD 
          RJM    WTC
          UJN    WFWX        RETURN 
  
  
 WFWA     CON    0           FUNCTION WORD BUFFER 
 WLB      SPACE  4,10 
**        WLB - WRITE LINKAGE BITS. 
* 
*         ENTRY  (A) = (T6) = ADDRESS FOR LINKAGE IN (CM - CM+4). 
*                (T1) = DATA BUFFER ADDRESS.
*                (T5) = NUMBER OF WORDS TO WRITE. 
*                (CM - CM+4) = *PAD* WORD OF *CBT* ENTRY. 
* 
*         EXIT   SECTOR LINKAGE SET IN DATA BUFFER. 
* 
*         USES   T6.
  
  
 WLB1     LDN    10+4        ADVANCE BUFFER ADDRESS 
          RAD    T1 
          LDI    T6          EXTRACT LINKAGE FROM *CBT* ENTRY 
          SHN    -10
*         LPN    17 
          SHN    14          POSITION FOR DATA BUFFER 
          LMI    T1 
          STIL   T1 
 WLB2     LDI    T6          EXTRACT LINKAGE FROM *CBT* ENTRY 
          SHN    -4 
          LPN    17 
          SHN    14          POSITION FOR DATA BUFFER 
          LMM    4,T1 
          STML   4,T1 
          LDI    T6          EXTRACT LINKAGE FROM *CBT* ENTRY 
*         SHN    0
          LPN    17 
          SHN    14          POSITION FOR DATA BUFFER 
          LMM    10,T1
          STML   10,T1
          AOD    T6          ADVANCE *CBT* WORD ADDRESS 
          LMN    CM+5 
          NJN    WLB1        IF MORE LINKAGE
          LDC    1S17 
          CWML   SBUF,T5     UPDATE DATA BUFFER 
  
 WLB      SUBR               ENTRY/EXIT 
*         LDD    T6 
          UJN    WLB2        MOVE SECTOR LINKAGE
 WMC      SPACE  4,10 
**        WMC - WAIT MAINTENANCE CHANNEL EMPTY. 
* 
*         ENTRY  (A) = 0 IF TRANSFER COMPLETE.
*                (T5) = 0 IF INITIAL ENTRY. 
* 
*         EXIT   (A) = 0 IF CHANNEL EMPTY.
*                    = (T5) IF CHANNEL HUNG FULL. 
* 
*         USES   CM - CM+4. 
  
  
 WMC3     LDD    T5 
          ZJN    WMCX        IF NO ERRORS 
          LDN    ZERL 
          CRD    CM          CLEAR BUFFER 
          LDD    CP 
          ADN    MS2W        CLEAR CP MESSAGE 
          CWD    CM 
          LDN    0           INDICATE CHANNEL EMPTY 
  
 WMC      SUBR               ENTRY/EXIT 
          NJN    WMC2        IF INCOMPLETE TRANSFER 
          LDD    TH 
 WMC1     EJM.   WMC3,MR     IF TRANSMISSION COMPLETE 
          SBN    1
          NJN    WMC1        IF NOT TIMED OUT 
 WMC2     DCN.   MR+40
          CCF.   *+2,MR      CLEAR CHANNEL FLAG 
          LDD    CP 
          ADN    MS2W        STORE CP MESSAGE 
          CWM    WMCA,TR
          STD    T5 
          UJN    WMCX        RETURN 
  
  
 WMCA     DATA   C*MR ERROR.* 
 WTC      SPACE  4,10 
**        WTC - WAIT TRANSMISSION COMPLETE. 
* 
*         EXIT   (A) = 0. 
* 
*         ERROR  TO *ERR*.
* 
*         USES   T1.
* 
*         CALLS  CFE. 
  
  
 WTC3     LDD    T1          CHECK FOR I/O ERROR
          RJM    CFE
*         LDN    0           EXIT CONDITION FROM *CFE*
  
 WTC      SUBR               ENTRY/EXIT 
          STD    T1 
          LDN    5           SET TIMEOUT = 5*262 MILLISECONDS 
          STD    T0 
 WTC1     LDN    0
 WTC2     EJM    WTC3,CH     IF LAST BYTE TAKEN OFF CHANNEL 
          SBN    1
          NJN    WTC2        IF NOT TIMED OUT 
          SOD    T0 
          NJN    WTC1        IF NOT TIMEOUT 
          DCN    CH+40
          LDN    ECHF 
          RJM    ERR         PROCESS CHANNEL ERROR
 WTR      SPACE  4,10 
**        WTR - WRITE *T* REGISTER. 
* 
*         ENTRY  (CB) = *CBT* ORDINAL.
*                (TO) = TIMEOUT VALUE FOR *FTT*.
* 
*         CALLS  FCN, STO, SUA, WTC.
  
  
 WTR      SUBR               ENTRY/EXIT 
          LDD    CB 
          RJM    SUA         SET UEM ADDRESS
          LDD    UA+1 
          SHN    11 
          SCN    7
          STML   WTRA+2      FORM ABSOLUTE UEM ADDRESS
          LDD    UA 
          SHN    14 
          LMD    UA+1 
          SHN    11-20       SET IN *T* REGISTER
          STM    WTRA+1 
          LDC    FCWT        ISSUE WRITE *T* REGISTER FUNCTION
          RJM    FCN
          LDN    3           SET BLOCK LENGTH 
          ACN    CH 
          OAM    WTRA,CH     OUTPUT BUFFER PARAMETERS 
          RJM    WTC
          LDD    TO          SET REQUEST TIMEOUT
          RJM    STO
          UJP    WTRX        RETURN 
  
  
 WTRA     BSS    0           *T* REGISTER BUFFER
          CONL   40000       BYTE LENGTH OF I/O TRANSFER
          CONL   0,0         UEM ADDRESS OF BUFFER
          TITLE  MISCELLANEOUS. 
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMPC2D 
 RND$     EQU    0           DEFINE ROUNDING FOR *COMPDV5*
*CALL     COMPDV5 
 M8K$     EQU    1           USE LONG INSTRUCTIONS
*CALL     COMPIMB 
*CALL     COMPSES 
          SPACE  4,10 
**        BUFFERS.
  
  
 SLST     BSS    0           SLAVE STATUS 
 DVST     EQU    SLST+SLSTL  DEVICE STATUS
  
 EHDR     EQU    DVST+DVSTL  ERROR MESSAGE HEADER BUFFER
 EBUF     EQU    EHDR+5*3    ERROR MESSAGE ASSEMBLY BUFFER
 CODE     EQU    EBUF        INITIAL FAULT CODE 
 FCS1     EQU    EBUF+1      FAULT CODE - ERROR STEP 1
 FCS2     EQU    EBUF+2      FAULT CODE - ERROR STEP 2
 FCS3     EQU    EBUF+3      FAULT CODE - ERROR STEP 3
 FALT     EQU    EBUF+4      FINAL FAULT CODE 
 RSVD     EQU    EBUF+5      RESERVED 
 RBCT     EQU    EBUF+6      RESIDUAL BYTE COUNT
 STCT     EQU    EBUF+7      SECTORS TRANSFERED COUNT 
 ICYL     EQU    EBUF+10     CYLINDER ON INITIAL SEEK 
 ITAS     EQU    EBUF+11     TRACK + SECTOR ON INITIAL SEEK 
  
 DBUF     EQU    EBUF+EBUFL  DATA BUFFER
 EXST     EQU    DBUF        EXECUTION STATUS 
 IDST     EQU    DBUF+1      IDLE STATUS
 BSRN     EQU    DBUF+2      BIT SIGNIFICANT RESPONSE 
 LSCC     EQU    DBUF+3      LAST SLAVE COMMAND 
 LCFN     EQU    DBUF+4      LAST CHANNEL FUNCTION
 RBUF     EQU    DBUF+5      REGISTER BUFFER
  
 SBUF     EQU    DBUF+DBUFL  SCRATCH BUFFER 
  
 MBUF     EQU    SBUF+5*3    MESSAGE ASSEMBLY BUFFER
          TITLE  PRESET ROUTINES. 
 CCP      SPACE  4,10 
**        CCP - CHECK CALLING PROGRAM.
* 
*         EXIT   (A) = 0. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  DFM. 
* 
*         MACROS MONITOR. 
  
  
 CCP      SUBR               ENTRY/EXIT 
          LDK    NCPL 
          CRD    CM          GET NUMBER OF CONTROL POINTS 
          AOD    CM+1 
          SHN    7
          LMD    CP 
          ZJN    CCPX        IF DRIVER AT SYSTEM CP 
          LDC    CCPA 
          RJM    DFM         ISSUE DAYFILE MESSAGE
          MONITOR  ABTM 
          LJM    PPR         EXIT TO PP RESIDENT
  
  
 CCPA     DATA   C* 1HY - UNAUTHORIZED CALL.* 
 IST      SPACE  4,15 
**        IST - INITIALIZE DEVICE STATE TABLE.
* 
*         ENTRY  (PO) = 0.
*                (RC) = NUMBER OF ENTRIES IN *PUT*. 
* 
*         EXIT   (A) = 0 IF NO DEVICES FOR THIS DRIVER. 
* 
*         USES   DI, PO, CM - CM+4. 
* 
*         MACROS PUTE, SFA. 
  
  
 IST6     LDD    DI          DEFINE END OF DEVICES
          STM    HYDA 
          LMC    DSTB        SET EXIT CONDITION 
  
 IST      SUBR               ENTRY/EXIT 
          LDC    DSTBL-1
          STD    DI 
 IST1     LDN    0           CLEAR DEVICE STATE TABLE 
          STI    DI 
          SOD    DI 
          LMC    DSTB 
          NJN    IST1        IF MORE TO CLEAR 
 IST2     AOD    PO 
          LMD    RC 
          ZJN    IST6        IF END OF PHYSICAL UNIT TABLE
          LDD    PO 
          SHN    PUTLS       READ *PUT* ENTRY 
          PUTE   *
          ADC    UNCT        GET UNIT CONTROL WORD
          CRD    CM 
          SFA    EST,CM+1    FETCH EST ENTRY
          ADK    EQDE 
          CRD    CM 
          LDN    CM          INITIALIZE CHANNEL BYTE ADDRESS
          STD    CM 
 IST3     AOD    CM          ADVANCE PATH DESCRIPTOR ADDRESS
          LMN    CM+3 
          ZJN    IST2        IF TWO POSSIBLE CHANNELS CHECKED 
          LDI    CM 
          ZJN    IST3        IF NULL ACCESS 
          LMD    IR+4 
          LPN    77 
 IST4     NJN    IST3        IF NOT THIS DRIVERS CHANNEL
  
 IST5     LDD    PO          SET *PUT* ORDINAL IN STATE TABLE 
          STI    DI 
          ERRNZ  PUTO        CODE DEPENDS ON VALUE
          LDI    CM 
          LPC    200         SET PORT SELECT IN CONTROL REGISTER
          SHN    16-7 
          STML   CREG,DI
          LDN    DSTBE       ADVANCE STATE TABLE ADDRESS
          RAD    DI 
          LMC    DSTBL
          NJN    IST4        IF NOT AT BLOCK LIMIT
          LJM    IST6        SET INITIAL STATE TABLE ADDRESS
 MCI      SPACE  4,10 
**        MCI - MODIFY CHANNEL INSTRUCTIONS.
* 
*         ENTRY  (IR+4) = CONCURRENT CHANNEL NUMBER.
* 
*         EXIT   (A) = 0. 
* 
*         USES   T1, T2.
  
  
 MCI1     RAIL   T2          MODIFY CHANNEL INSTRUCTION 
          AOD    T1 
 MCI2     LDM    TCHA,T1     EXTRACT NEXT ADDRESS 
          STD    T2 
          LDD    T0          CHECK END OF LIST
          CHTL   *
          SBN    CH 
          NJN    MCI1        IF MORE INSTRUCTIONS TO MODIFY 
  
 MCI      SUBR               ENTRY/EXIT 
          LDD    IR+4 
          LPN    37          EXTRACT CHANNEL NUMBER 
          STD    T0 
          LDN    0           INITIALIZE REMOTE TABLE INDEX
          STD    T1 
          UJN    MCI2        ENTER LOOP 
 TCHA     SPACE  4,10 
**        TABLE OF CHANNEL INSTRUCTIONS ADDRESSES.
  
  
 TCHA     CHTB
          RSTC               RESTORE CHANNEL INSTRUCTIONS 
 TCBT     SPACE  4,10 
**        TABLE OF INSTRUCTIONS REQUIRING FWA OF *CBT*. 
  
  
 TCBT     BSS    0
 TCBT     HERE
          CON    0           TERMINATE TABLE
 TCCT     SPACE  4,10 
**        TABLE OF INSTRUCTIONS REQUIRING ADDRESS OF *CCT* ENTRY. 
  
  
 TCCT     BSS    0
 TCCT     HERE
          CON    0           TERMINATE TABLE
 TCHT     SPACE  4,10 
**        TABLE OF INSTRUCTIONS REQUIRING FWA OF CHANNEL TABLE. 
  
  
 TCHT     BSS    0
 TCHT     HERE
          CON    0           TERMINATE TABLE
 TEMB     SPACE  4,10 
**        TABLE OF INSTRUCTIONS REQUIRING FWA OF *EMB*. 
  
  
 TEMB     BSS    0
          QUAL   COMPIMB
 TEMB     HERE
          QUAL   *
          CON    0           TERMINATE TABLE
 TEXP     SPACE  4,10 
**        TABLE OF INSTRUCTIONS REQUIRING FWA OF PP EXCHANGE PACKAGE. 
  
  
 TEXP     BSS    0
 TEXP     HERE
          CON    0           TERMINATE TABLE
 TFTT     SPACE  4,10 
**        TABLE OF INSTRUCTIONS REQUIRING FWA OF *FTT*. 
  
  
 TFTT     BSS    0
 TFTT     HERE
          CON    0           TERMINATE TABLE
 TPUT     SPACE  4,10 
**        TABLE OF INSTRUCTIONS REQUIRING FWA OF *PUT*. 
  
  
 TPUT     BSS    0
 TPUT     HERE
          CON    0           TERMINATE TABLE
          SPACE  4,10 
          ERRPL  *-10000     CODE DEPENDS ON VALUE
 PRS      SPACE  4,20 
**        PRS - PRESET *1HY* FOR PROCESSING.
* 
*         EXIT   (UC) = 0.
* 
*         CALLS  CCP, CCR, MCI, IST, PCT, RCR, SPA, STA.
  
  
 PRS      RJM    CCP         CHECK CALLING PROGRAM
*         LDN    0
          STD    UC          SET NO UNITS RESERVED
          STD    PO 
          RJM    MCI         MODIFY CHANNEL INSTRUCTIONS
          STD    CR 
          RJM    SPA         SET PP EXCHANGE PACKAGE ADDRESSES
 PRS1     RJM    SCT         SET CHANNEL TABLE ADDRESSES
          LDK    BIOL 
          CRD    CM          READ BUFFERED I/O POINTERS 
          LDD    CM+1 
          SHN    14 
          LMD    CM+2 
          ADN    FTTP        READ *FTT* POINTER 
          CRD    T6 
          SBN    FTTP-CCTP   READ *CCT* POINTER 
          CRD    T4 
          ADN    PUTP-CCTP   READ *PUT* POINTER 
          CRD    T2 
          ADN    CBTP-PUTP   READ *CBT* POINTER 
          CRD    WB 
          AOD    T2          SET NUMBER OF *PUT* ENTRIES
          STD    RC 
          LDC    T5*10000+TPUT  SET *PUT* ADDRESSES 
          RJM    STA
          LDD    IR+2        ADJUST CHANNEL CONTROL TABLE POINTER 
          SHN    CCTLS-6
          RAD    CM 
          SHN    -14
          RAD    T7 
          LDC    T7*10000+TCCT  SET *CCT* ADDRESSES 
          RJM    STA
 .CM1     EQU    CM+1 
          LDC    .CM1*10000+TFTT  SET *FTT* ADDRESSES 
          RJM    STA
 .WB3     EQU    WB+3 
          LDC    .WB3*10000+TCBT  SET *CBT* ADDRESSES 
          RJM    STA
          LDN    EMBP        FETCH *EMB* POINTER
          CRD    CM 
          LDC    .CM1*10000+TEMB  SET *EMB* ADDRESSES 
          RJM    STA
          LDK    UEML 
          CRD    CM          READ UEM POINTERS
          LDD    CM 
 PRSA     SHN    11 
*         SHN    11+EMSC
          SCN    77 
          STM    SUAA        SET FWA OF UEM 
          LDD    CM 
 PRSB     SHN    -3 
*         SHN    EMSC-3 
          STM    SUAB 
          LDK    MMFL        FETCH MACHINE ID 
          CRD    CM 
          LDD    CM          SET MAINFRAME ID FOR BML MESSAGES
          STM    MFID 
          LDC    PRS3        SET RETURN ADDRESS 
          STM    CCR
          RJM    IST         INITIALIZE DEVICE STATE TABLE
          ZJN    PRS4        IF NO DEVICES FOR THIS DRIVER
          LDN    0           CLEAR RESIDUAL BYTE COUNT
          STM    RBCT 
          LJM    CCR2        RESERVE CHANNEL
  
 PRS3     NJP    RCR+1       IF CHANNEL NOT DOWN
 PRS4     LJM    HYD8        DROP CPP 
 SCT      SPACE  4,10 
**        SCT - SET CHANNEL TABLE ENTRY ADDRESSES.
* 
*         ENTRY  (IR+4) = CHANNEL NUMBER. 
* 
*         USES   T1, T2, CM - CM+4. 
* 
*         CALLS  STA. 
  
  
 SCT      SUBR               ENTRY/EXIT 
          LDD    IR+4 
          STD    T1          SET CHANNEL NUMBER 
          STM    RCSA+3 
          RAM    BMLM+2 
*         SHN    6           SAVE RECOVERY CHANNEL FOR *BML*
*         STM    BMLM+7 
          LCN    0           WORD OFFSET
          STD    T2 
 SCT1     AOD    T2          INCREMENT WORD OFFSET
          LCN    5
          RAD    T1 
          PJN    SCT1        IF CHANNEL NOT IN THIS WORD
          ADN    5
          STD    T1 
          RAM    RCTA        SET BYTE OFFSET
          LDD    T1 
          SHN    1           BYTE OFFSET * 2
          ADD    T1          BYTE OFFSET * 3
          SHN    2           BYTE OFFSET * 12 
          SBN    59D         (BYTE OFFSET * 12) - 59
          LMC    -0          59 - (BYTE OFFSET * 12)
          SBN    2
          SHN    6
          STM    SRFA+1      SET DRIVER FLAG BIT POSITION 
          LDK    CHTP 
          CRD    CM 
          LDD    T2          SET ADDRESS OF WORD IN CHANNEL TABLE 
          RAD    CM+3 
          SHN    -14
          RAD    CM+2 
 .CM2     EQU    CM+2 
          LDC    .CM2*10000+TCHT  SET CHANNEL TABLE ADDRESSES 
          RJM    STA
          LJM    SCTX        RETURN 
 SPA      SPACE  4,10 
**        SPA - SET PP EXCHANGE PACKAGE ADDRESSES.
* 
*         USES   T1 - T5, CM - CM+4.
* 
*         CALLS  STA. 
  
  
 SPA      SUBR               ENTRY/EXIT 
          LDN    PXPP 
          CRD    CM          FETCH FWA OF PP EXCHANGE PACKAGE AREA
          ADN    1
          CRM    AMEA,ON     SET FIRST WORD OF PP EXCHANGE PACKAGE
          ADN    PPCP-PXPP-2
          CRD    T1          READ PP COMMUNICATION AREA POINTER 
          LDD    IA 
          STM    AMEA+4      SET (B0) NON-ZERO FOR EXCHANGE TEST
          SBD    T1+4 
          SHN    -3          (A) = CPP NUMBER 
          SBN    24 
          SHN    6
          STM    BMLM+2      INSERT CPP NUMBER IN BML MESSAGE 
          SHN    -6 
          ADN    24-2 
          STD    T1          CPP NUMBER - 2 
          SHN    4
          ADD    T1          (CPP NUMBER - 2) * 21B 
          RAD    CM+4 
          SHN    -14
          RAD    CM+3 
 .CM3     EQU    CM+3 
          LDC    .CM3*10000+TEXP  SET EXCHANGE PACKAGE ADDRESSES
          RJM    STA
          LJM    SPAX        RETURN 
 STA      SPACE  4,10 
**        STA - SET TABLE ADDRESSES.
* 
*         ENTRY  (A) = 6/ TP, 12/ TA
*                      TP = TABLE POINTER.
*                      TA = INSTRUCTION TABLE ADDRESS.
* 
*         EXIT   (A) = 0. 
* 
*         USES   T1, T2, T3.
  
  
 STA1     STD    T2          SET INSTRUCTION ADDRESS
          LDM    1,T1 
          RAM    1,T2        SET LOWER 12 BITS OF ADDRESS 
          SHN    -14
          ADI    T1          SET UPPER 6 BITS OF ADDRESS
          LPN    37 
          RAI    T2 
          AOD    T3          ADVANCE INSTRUCTION LIST 
 STA2     LDI    T3 
          NJN    STA1        IF NOT END OF TABLE
  
 STA      SUBR               ENTRY/EXIT 
          STD    T3 
          SHN    -14         SET ADDRESS POINTER
          STD    T1 
          UJN    STA2        ENTER LOOP 
  
  
          OVERFLOW  OHYD,20000
  
          END 
