DIO 
          IDENT  DIO,0
          PERIPH
          BASE   M
          SST 
          TITLE  DIO - DEADSTART I/O PROCESSOR. 
*COMMENT  DIO - DEADSTART I/O PROCESSOR.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 DIO      SPACE  4,10 
*****     DIO - DEADSTART I/O PROCESSOR.
* 
*         P. D. HAAS.        78/08/04.
 DIO      SPACE  4,10 
***              *DIO* IS THE CENTRALIZED MEANS OF READING DATA FROM
*         THE DEADSTART MEDIUM, BE IT TAPE OR DISK.  THIS ALLOWS THE
*         OTHER DEADSTART TIME ROUTINES TO REMAIN MORE OR LESS
*         UNAWARE OF THE MEDIUM BEING READ.  TO THIS END, 10B DISK
*         SECTORS WILL BE ASSEMBLED, IF DEADSTART IS FROM RMS, INTO 
*         A FACSIMILE OF A TAPE PRU.  COMMANDS ARE ISSUED TO *DIO*
*         VIA AN INTERCOMMUNICATIONS CHANNEL, ACCORDING TO A
*         PROTOCOL RESEMBLING THAT OF A 3000 TYPE TAPE CONTROLLER 
*         AND A 6681.  *DIO* IN THE DISPLAY CHANNEL PP FUNCTIONS AS 
*         THE 6681, READING DATA FROM AN EXTERNAL EQUIPMENT, AND
*         RETURNING SAME TO THE REQUESTING PP.
 DIO      SPACE  4,10 
***       OPERATOR MESSAGES.
* 
*         REFER TO OPERATORS GUIDE FOR INFORMATION AS TO CAUSE
*         OF ERROR AND RECOMMENDED CORRECTIVE ACTION. 
* 
*         *SYSTEM TAPE PARITY ERROR.* 
* 
*         *BLOCK SEQUENCE ERROR.* 
* 
*         *CHXX, UNYY - SZZZZ.* 
 DIO      SPACE  4,10 
*CALL     COMPMAC 
*CALL     COMPCHM 
*CALL     COMSDSL 
*CALL     COMSMSP 
*CALL     COMSPIM 
          TITLE  DIRECT LOCATION ASSIGNMENTS. 
 DIO      SPACE  4,10 
****      DIRECT LOCATION ASSIGNMENTS.
  
  
          ORG    0
          CON    PRS-1       TRANSFER ADDRESS - 1 
          BSS    16-* 
 L1       BSS    1           SCRATCH
 L2       BSS    1           SCRATCH
 DT       CON    0           895 DEADSTART READ FLAG
          ERRNZ  DT-MP       DIRECT CELL LOCATION MUST MATCH IN *OSB* 
 UN       BSS    4           PHYSICAL DISK ADDRESS
 BF       CON    0           TAPE BACKSPACE FUNCTION
 RF       CON    0           TAPE READ FUNCTION 
 SF       CON    0           TAPE STATUS FUNCTION 
 LT       BSS    1           LOGICAL TRACK FOR BACKSPACE
 LS       BSS    1           LOGICAL SECTOR FOR BACKSPACE 
 DM       BSS    1           DEADSTART MEDIUM 
 ST       BSS    1           GENERAL STATUS 
 RC       BSS    1           ERROR RETRY COUNT
 WC       BSS    1           WORD COUNT 
 DH       BSS    1           DEADSTART CHANNEL
 IH       BSS    1           INTERCOMMUNICATIONS CHANNEL
 ZR       CON    0           ZERO BYTE
 TM       CON    0           TAPE MOTION FLAG 
 CN       BSS    5           CM WORD BUFFER 
  
          ERRPL  *-IR        OVERFLOW CELLS DESTROYED BY RESIDENT 
  
          BSS    100-*
 DN       EQU    57          DECK NUMBER
 DP       EQU    60 - 64     CM WORD BUFFER (5 LOCATIONS) 
 BL       EQU    65          PP BUFFER LIMIT
 BC       EQU    66 - 67     BLOCK COUNT (2 LOCATIONS)
****
  
*         IN ORDER TO AVOID CONFLICTS BETWEEN *COMSMSP* AND THE 
*         *CHTB* MACRO, *DC* IS CHANGED TO *DS*.
  
 DS       EQU    DC          DEADSTART CHANNEL
          TITLE  MACRO DEFINITIONS. 
          SPACE  4,10 
**        JMP - THREADED JUMP.
* 
* 
*         JMP    ADDR 
*         ENTRY  *ADDR* = JUMP ADDRESS. 
  
  
 JMP      MACRO  ADDR 
          IF     -DEF,.ADDR,2 
          NOREF  .ADDR
 .ADDR    MAX    ADDR,*-40
          IFGT   .ADDR,*-40 
          UJN    .ADDR
 .ADDR    SET    *-1
          ELSE   2
 .ADDR    SET    *
          LJM    ADDR 
 JMP      ENDM
          TITLE  PRESET.
 PRS      SPACE  4,10 
          ORG    MSFW 
  
 PRS      BSS    0           ENTRY
          RJM    BRP         EXECUTE BUFFER RESIDENT PORTION OF PRESET
  
*         SEARCH FOR *SET* AND TRANSMIT TO PP0. 
  
 PRS2     RJM    RNR         READ NEXT RECORD 
          LDM    BUF+5*1+1   CHECK NAME IN *PRFX* TABLE 
          SHN    6
          LMM    BUF+5*1+0
          LMC    3RTSE
          NJN    PRS2        IF NOT *SET* 
          LDD    DH          PASS CHANNEL DEFINITIONS TO *SET*
          STM    BUF+5*20+T4
          LDD    IH 
          STM    BUF+5*20+T5
          LDD    DN          PASS CONSOLE STATUS TO *SET* 
          STM    BUF+5*20+T2
          LCN    20          TRANSMIT *SET* TO PP0
          RAD    WC 
          SHN    2
          ADD    WC 
          OAM.   BUF+5*20,CH
          LDD    WC 
          LMC    MXRL/5 
          NJN    PRS3        IF *SET* DOES NOT EXCEED ONE TAPE PRU
          RJM    RNR         READ REMAINDER OF *SET*
          LDD    WC 
          ZJN    PRS3        IF ZERO LENGTH PRU 
          SHN    2
          ADD    WC 
          OAM.   BUF,CH      TRANSMIT REMAINDER OF *SET*
 PRS3     FJM.   *,CH        WAIT OUTPUT COMPLETE 
          DCN.   CH 
          RJM    RNR         READ NEXT RECORD 
          LJM    DIO         ENTER IDLE LOOP
 LRO      SPACE  4,10 
**        LRO - LOAD RECOVERY OVERLAY.
  
  
 LRO      BSS    0
*         LDC    LRO         CHECK NEXT RECORD
 LRO1     RJM    CSR
          NJN    LRO1        IF NOT OVERLAY 
          LDM    BUF+5*1+1
          SHN    6
          LMM    BUF+5*1+0
          LMC    3RMRC
          NJN    LRO1        IF NOT *RCM* 
          DCN    PC          INDICATE FUNCTION COMPLETE 
          LJM    DIO         RETURN 
          SPACE  4,10 
          ERRZR  PC-12       ILLEGAL CHANNEL DEFINITION 
          ERRPL  *-PPFW      PRESET OVERFLOWS DRIVER AREA 
          TITLE  MAIN ROUTINE.
          ORG    PPFW 
  
 DIO      IAN    PC          INPUT REQUEST
          STD    L1 
          SBN    MXDF 
          PJN    *           IF ILLEGAL FUNCTION
          LDM    TFPA,L1
          STD    L2 
          LJM    0,L2        PROCESS FUNCTION 
 TFPA     SPACE  4,10 
**        TFPA - TABLE OF FUNCTION PROCESSORS.
  
  
 TFPA     INDEX 
          INDEX  DPPF,DPP    DROP PP
          INDEX  LPRF,LPR    LOAD PP RESIDENT 
          INDEX  IPRF,IPR    INITIALIZE PP RESIDENT 
          INDEX  RTBF,RTB    READ TAPE BLOCK
          INDEX  IPPF,IPP    IDLE PP
          INDEX  LSLF,LSL    LOAD SYSTEM LIBRARY
          INDEX  LNOF,LNO    LOAD NEXT OVERLAY
          INDEX  LTDF,LTD    LOAD SELECTED TEXT DECK
          INDEX  LROF,LRO    LOAD RECOVERY OVERLAY
          INDEX  MXDF 
          TITLE  FUNCTION PROCESSORS. 
 DPP      SPACE  4,10 
**        DPP - DROP PP.
  
  
 DPP      BSS    0
          RJM    RDT         REWIND DEADSTART TAPE
          RJM    RTU         RELEASE TAPE UNIT
          RJM    CRI         CHECK RESIDENT INITIALIZED 
          RJM    WOC         WAIT OUTPUT REGISTER CLEAR 
          LDD    DH          RELEASE DEADSTART CHANNEL
          DCHAN 
 DPPA     DCN    PC          INDICATE FUNCTION ACCEPT 
*         PSN                (SYSTEM LIBRARY LOAD)
          MONITOR  DPPM      DROP PP
          LJM    PPR         EXIT TO PP RESIDENT
 IPP      SPACE  4,10 
**        IPP - IDLE PP UNTIL (IR+4) .NE. 0.
  
  
 IPP      BSS    0
          LDD    IA          CLEAR (IR+4) 
          CRD    IR 
          RJM    CRI         CHECK RESIDENT INITIALIZED 
          STD    IR+4 
          LDD    IA 
          CWD    IR 
          LDD    DH          RELEASE DEADSTART CHANNEL
          DCHAN 
          DCN    PC          INDICATE FUNCTION ACCEPT 
 IPP1     DELAY              WAIT AWHILE
          LDD    IA          CHECK (IR+4) 
          CRD    IR 
          LDD    IR+4 
          ZJN    IPP1        IF IDLE NOT CLEARED
          LDD    DH          RESERVE DEADSTART CHANNEL
          RCHAN 
          JMP    DIO         RETURN 
 IPR      SPACE  4,10 
**        IPR - INITIALIZE PP RESIDENT. 
  
  
 IPR      BSS    0
          DCN    PC          INDICATE FUNCTION ACCEPT 
          LDN    1           SET NO PP DROP 
          STD    T1 
          RJM    MSFW+1      INITIALIZE RESIDENT
          SOM    CRIA        SET RESIDENT INITIALIZED 
          LDD    DH          RESERVE DEADSTART CHANNEL
          RCHAN 
          JMP    DIO         RETURN 
 LNO      SPACE  4,10 
**        LNO - LOAD NEXT OVERLAY.
  
  
 LNO      BSS    0
          LDN    0           CHECK CURRENT RECORD 
 LNO1     RJM    CSR
          NJN    LNO1        IF NOT OVERLAY 
          LJM    RTB         TRANSMIT TAPE BLOCK
 LPR      SPACE  4,10 
**        LPR - LOAD PP RESIDENT. 
  
  
 LPR      BSS    0
          DCN    PC          INDICATE FUNCTION ACCEPT 
          LDN    IR          SKIP DIRECT LOCATIONS BELOW *IR* 
          ACN    PC 
          IAM    IR,PC
          LDC    PPFW-IR     INPUT PP RESIDENT
          IAM    IR,PC
          DCN    PC 
          JMP    DIO         RETURN 
 LSL      SPACE  4,10 
**        LSL - LOAD SYSTEM LIBRARY.
  
  
 LSL      BSS    0
          RJM    RDT         REWIND DEADSTART TAPE
          RJM    CRI         CHECK RESIDENT INITIALIZED 
          STD    BC+1        CLEAR BLOCK COUNT
          STD    BC 
          LDN    DSCP        MOVE TO DEADSTART CONTROL POINT
          STD    CM+1 
          MONITOR  CCAM 
          DCN    PC          INDICATE FUNCTION ACCEPT 
          STM    DPPA 
 LSL2     LDD    RA          READ (RA+2)
          SHN    6
          ADN    2
          CRD    CM 
          LDD    CM+4        SET FET ADDRESS
          STD    IR+4 
          ZJN    LSL2        IF NOT YET DEFINED 
          LDM    BKSC        ENABLE TAPE PARITY ERROR REPORTING 
          STM    BKSA 
 LSL3     RJM    GTS         GET TAPE STATUS
          LPN    3
          LMN    1
          NJN    LSL3        IF REWIND NOT COMPLETE 
  
*         READ SYSTEM TAPE. 
  
          RJM    RST         READ SYSTEM TAPE 
          LDD    RA 
          SHN    6
          ADD    IR+4 
          CRD    CM 
          LDN    33          SET EOF STATUS 
          STD    CM+4 
          LDD    RA          STORE EOF STATUS 
          SHN    6
          ADD    IR+4 
          CWD    CM 
          LJM    DPP         DROP PP
 LTD      SPACE  4,10 
**        LTD - LOAD SELECTED TEXT DECK.
  
  
 LTD      BSS    0
          IAN    PC 
          RJM    C2D         CONVERT DECK NUMBER
          STD    DN 
          LDN    0
          UJN    LTD2        CHECK CURRENT RECORD 
  
 LTD1     LDM    BUF+2       CHECK TEXT DECK NUMBER 
          LMD    DN 
          ZJN    RTB         IF REQUESTED DECK FOUND
 LTD2     RJM    CSR
          NJN    LTD1        IF NOT BINARY RECORD 
          STD    WC 
*         UJN    RTB         INDICATE DECK NOT FOUND
 RTB      SPACE  4,10 
**        RTB - READ TAPE BLOCK.
  
  
 RTB      BSS    0
          DCN    PC          INDICATE FUNCTION ACCEPT 
          IJM    *,PC        IF CALLER NOT READY
          LDD    WC          OUTPUT RECORD LENGTH 
          OAN    PC 
          ZJN    RTB1        IF ZERO LENGTH RECORD
          SHN    2           CONVERT TO BYTE COUNT
          ADD    WC 
          FJM    *,PC        WAIT CHANNEL EMPTY 
          OAM    BUF,PC      TRANSMIT RECORD
 RTB1     FJM    *,PC        WAIT TRANSMISSION COMPLETE 
          DCN    PC 
          RJM    RNR         READ NEXT RECORD 
          JMP    DIO         RETURN 
          TITLE  SUBROUTINES. 
 CBN      SPACE  4,10 
**        CBN - CHECK BLOCK NUMBER. 
* 
*         ENTRY  (WC) = WORD COUNT OF BLOCK.
*                (BC - BC+1) = EXPECTED BLOCK NUMBER OF BLOCK.
* 
*         EXIT   BLOCK COUNT INCREMENTED. 
*                MESSAGE ISSUED IF BLOCK SEQUENCE ERROR.
* 
*         USES   BL.
* 
*         CALLS  WOG. 
  
  
 CBN2     AOD    BC+1        ADVANCE BLOCK COUNT
          SHN    -14
          RAD    BC 
  
 CBN      SUBR               ENTRY/EXIT 
          LDD    WC          SET BLOCK LENGTH IN CONTROL WORD 
          SHN    2
          ADD    WC 
          STM    BUF-1
 CBNA     ADC    BUF         SET PP BUFFER LIMIT
*         UJN    CBNX        (BLOCK CHECKING DISABLED)
          STD    BL 
          LDM    2,BL        CHECK BLOCK NUMBER 
          LMD    BC+1 
          NJN    CBN1        IF NOT CORRECT BLOCK 
          LDM    1,BL 
          LMD    BC 
          ZJN    CBN2        IF CORRECT BLOCK 
 CBN1     LDC    CBNB        *BLOCK SEQUENCE ERROR* 
          RJM    WOG         ISSUE MESSAGE AND WAIT OPERATOR GO 
          LDM    CBNC        DISABLE FURTHER BLOCK CHECKING 
          STM    CBNA 
          UJN    CBNX        EXIT 
  
 CBNB     DATA   C*BLOCK SEQUENCE ERROR.* 
  
 CBNC     BSS    0
          LOC    CBNA 
          UJN    CBNX 
          LOC    *O 
 CDD      SPACE  4,10 
**        CDD - CONNECT DEADSTART DISK. 
* 
*         USES   ST.
* 
*         CALLS  DSM, GDS, POS. 
  
  
 CDD2     RJM    POS         POSITION DISK
  
 CDD      SUBR               ENTRY/EXIT 
 CDD1     RJM    GDS         GET DISK STATUS (CONNECT)
          LPC    2000 
          ZJN    CDD2        IF COUPLER NOT RESERVED
          STD    ST 
          RJM    DSM         DISPLAY STATUS MESSAGE 
          UJN    CDD1        LOOP 
 CRI      SPACE  4,10 
**        CRI - CHECK PP RESIDENT INITIALIZED.
* 
*         EXIT   (A) = 0. 
  
  
 CRI      SUBR               ENTRY/EXIT 
 CRIA     LDN    1
*         LDN    0           (PP RESIDENT INITIALIZED)
          ZJN    CRIX        IF RESIDENT INITIALIZED
          UJN    *           HANG PP
 CSR      SPACE  4,10 
**        CSR - CHECK OR SKIP CURRENT RECORD. 
* 
*         ENTRY  (A) = 0 TO CHECK RECORD. 
*                    .NE. 0 TO SKIP RECORD. 
* 
*         EXIT   (A) = 0 IF BINARY RECORD (OVERLAY) 
* 
*         USES   T4.
* 
*         CALLS  RNR. 
  
  
 CSR      SUBR               ENTRY/EXIT 
          ZJN    CSR2        IF CHECKING CURRENT RECORD 
 CSR1     LDD    WC 
          LMC    TPLN/5      SET EOR STATUS 
          STD    T4 
          RJM    RNR         READ NEXT BLOCK
          LDD    T4 
          ZJN    CSR1        IF NOT NEXT RECORD 
 CSR2     LDM    BUF
          LMC    7700 
          UJN    CSRX        RETURN 
 DSM      SPACE  4,10 
**        DSM - DISPLAY STATUS MESSAGE. 
* 
*         ENTRY  (ST) = GENERAL STATUS. 
* 
*         CALLS  C2D. 
  
  
 DSM      SUBR               ENTRY/EXIT 
          LDD    ST          CONVERT STATUS 
          RJM    C2D
          STM    DSMA+10     SET IN MESSAGE 
          LDD    ST 
          SHN    -6 
          RJM    C2D
          STM    DSMA+7 
          LDC    DSCP*CPAS+MS2W  STORE MESSAGE
          CWM    DSMA,TR
          UJN    DSMX        RETURN 
  
 DSMA     DATA   C*CHXX, UNYY - SZZZZ.* 
 RNR      SPACE  4,10 
**        RNR - READ NEXT RECORD. 
* 
*         EXIT   (BUF) = NEXT RECORD ON DEADSTART FILE. 
* 
*         USES   RC.
* 
*         CALLS  RDR, RTR.
  
  
 RNR      SUBR               ENTRY/EXIT 
          LDN    10          SET RETRY COUNT
          STD    RC 
          RJM    RDR         READ DISK RECORD 
 RNRA     EQU    *-1
*         RJM    RTR         (TAPE DEADSTART) 
          LDC    DSCP*200+MS2W
          CWD    ZR 
          UJN    RNRX        RETURN 
 RST      SPACE  4,10 
**        RST - READ SYSTEM TAPE. 
* 
*         USES   WC, T1, T2, CM - CM+4, CN - CN+4, DP - DP+4. 
* 
*         CALLS  CBN, ITM, RNR, SBP, WOC. 
  
  
 RST      SUBR               ENTRY/EXIT 
          RJM    SRP         SET READ PARAMETERS
 RST1     RJM    WOC         WAIT OUTPUT REGISTER CLEAR 
          PAUSE  NE 
          LDD    RA          READ OUT 
          SHN    6
          ADD    IR+4 
          ADN    3
          CRD    CN 
 RST2     LDD    CN+3        LENGTH = OUT - IN+1
          SBD    DP+3 
          SHN    14 
          ADD    CN+4 
          SBD    DP+4 
          SBN    1
          PJN    RST3        IF IN+1 .GE OUT
 .BSA     ADC    **          (LIMIT - FIRST)
 RST3     ADC    -1002
          MJN    RST1        IF NO ROOM FOR ANOTHER BLOCK 
 RSTA     RJM    ITM         INITIATE TAPE MOTION FOR NEXT READ 
*         UJN    *+2         (READ AHEAD DISABLED)
          LDN    2           INCLUDE CONTROL WORDS IN WORD COUNT
          RAD    WC 
 WCB      SPACE  4,10 
**        WCB - WRITE CENTRAL BUFFER. 
  
  
 WCB      LDD    DP+3        CHECK IN + WORD COUNT
          SHN    14 
          ADD    DP+4 
          ADD    WC 
 .LMA     ADC    -**         (-LIMIT) 
          STD    T2          SET SECOND PART WORD COUNT 
          LMC    -0 
          PJN    WCB3        IF LIMIT NOT REACHED 
  
*         PROCESS WRAP AROUND BLOCK.
  
          ADD    WC          SET FIRST PART WORD COUNT
          STD    T1 
          ZJN    WCB1        IF NO FIRST PART 
          LDD    DP+3        STORE FIRST PART 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    DP+4 
          CWM    BUF-5,T1 
 WCB1     LDD    T2          CHECK SECOND PART LENGTH 
          ZJN    WCB2        IF NO SECOND PART
          LDD    T1          SET PP BUFFER ADDRESS
          SHN    2
          ADD    T1 
          RAM    WCBA 
          LDD    RA          STORE SECOND PART
          SHN    6
 .FTA     ADC    **          STORE SECOND PART (FIRST)
          CWM    BUF-5,T2 
 WCBA     EQU    *-1         (RESET)
 WCB2     LDD    T2          SET IN AFTER SECOND PART 
 .FTB     ADC    **          (FIRST)
          STD    DP+4 
          SHN    -14
          STD    DP+3 
          UJN    WCB4 
  
*         PROCESS NORMAL BLOCK. 
  
 WCB3     LDD    DP+3        STORE BLOCK
          SHN    6
          ADD    RA 
          SHN    6
          ADD    DP+4 
          CWM    BUF-5,WC 
          LDC    BUF-5       RESET (WCBA) 
          STM    WCBA 
          LDD    WC          ADVANCE IN 
          RAD    DP+4 
          SHN    -14
          RAD    DP+3 
 WCB4     LDD    RA          STORE IN 
          SHN    6
 .INA     ADC    **          (ADDRESS OF IN)
          CWD    DP 
          ADN    1           READ OUT 
          CRD    CN 
          LDN    DRCM        RECALL CPU 
          STD    CM 
          LDD    OA 
          CWD    CM 
          RJM    RNR         READ NEXT RECORD 
          RJM    CBN         CHECK BLOCK NUMBER 
          LJM    RST2        LOOP 
 SRP      SPACE  4,10 
**        SRP - SET READ PARAMETERS.
* 
*         EXIT   (DP - DP+4) = IN POINTER.
*                PARAMETERS INITIALIZED.
*                FIRST TAPE BLOCK READ. 
* 
*         USES   CM - CM+5, CN - CN+4, T1 - T1+4. 
* 
*         CALLS  CBN, RNR.
* 
*         MACROS PAUSE. 
  
  
 SRP      SUBR               ENTRY/EXIT 
 SRP1     PAUSE  NE 
          LDD    RA          READ FILE STATUS 
          SHN    6
          ADD    IR+4 
          CRD    CM+1 
          ADN    1           READ FIRST 
          CRD    T1 
          ADN    1           READ IN
          CRD    DP 
          ADN    1           READ OUT 
          CRD    CN 
          ADN    1           READ LIMIT 
          CRD    CM 
          LDD    CM+5 
          NJN    SRP1        IF *SYSEDIT* NOT READY 
          LDD    T1+3 
          LPN    37 
          STD    T1+3 
  
          LDD    CM+3        LIMIT - FIRST
          SBD    T1+3 
          SHN    14 
          ADD    CM+4 
          SBD    T1+4 
          STM    .BSA+1 
          SHN    -14
          LMC    ADCI 
          STM    .BSA 
  
          LDC    ADCI+77     -LIMIT 
          LMD    CM+3 
          STM    .LMA 
          LCN    0
          LMD    CM+4 
          STM    .LMA+1 
  
          LDD    T1+3        FIRST
          LMC    ADCI 
          STM    .FTA 
          STM    .FTB 
          LDD    T1+4 
          STM    .FTA+1 
          STM    .FTB+1 
  
          LDD    IR+3        ADDRESS OF IN
          SHN    14 
          ADD    IR+4 
          ADN    2
          STM    .INA+1 
          SHN    -14
          LMC    ADCI 
          STM    .INA 
  
          LDN    ZERL        CLEAR CONTROL WORD 
          CRM    BUF-5,ON 
          LDD    TH          SET PRU SIZE IN CONTROL WORD 
          STM    BUF-4
          RJM    RNR         READ NEXT RECORD 
          RJM    CBN         CHECK BLOCK NUMBER 
          LJM    SRPX        RETURN 
 WOC      SPACE  4,10 
**        WOC - WAIT OUTPUT REGISTER CLEAR. 
* 
*         USES   CM - CM+4. 
  
  
 WOC      SUBR               ENTRY/EXIT 
 WOC1     LDD    OA          READ OUTPUT REGISTER 
          CRD    CM 
          LDD    CM 
          ZJN    WOCX        RETURN IF CLEAR
          LDN    77          DELAY
          SBN    1
          NJN    *-1
          UJN    WOC1        LOOP 
 WOG      SPACE  4,10 
**        WOG - WAIT FOR OPERATOR GO. 
* 
*         ENTRY  (A) = ADDRESS OF MESSAGE.
* 
*         EXIT   (A) = 0. 
*                OPERATOR ENTERED *GO,.* OR *GO,SYS.*.
* 
*         USES   T3, CM - CM+4. 
* 
*         MACROS PAUSE. 
  
  
 WOG      SUBR               ENTRY/EXIT 
          STM    WOGA        SET MESSAGE ADDRESS
          LDN    NCPL 
          CRD    CM 
          AOD    CM+1        READ SENSE SWITCH WORD AT SYSTEM CP
          SHN    7
          ADN    SNSW 
          STD    T3 
          CRD    CM 
          LDD    CM+3        SET PAUSE BIT
          SCN    1
          LMN    1
          STD    CM+3 
          LDC    DSCP*200+MS2W  STORE MESSAGE 
          CWM    *,TR 
 WOGA     EQU    *-1         MESSAGE ADDRESS
          LDD    T3          STORE PAUSE FLAG 
          CWD    CM 
 WOG1     PAUSE  NE 
          LDD    T3          CHECK PAUSE BIT
          CRD    CM 
          LDD    CM+3 
          LPN    1
          ZJN    WOGX        IF PAUSE BIT CLEAR 
          UJN    WOG1        LOOP 
          TITLE  DISK/TAPE ROUTINES.
 BKS      SPACE  4,10 
**        BKS - BACKSPACE DEADSTART MEDIUM. 
* 
*         ENTRY  (RC) = RETRY COUNT.
* 
*         EXIT   (RC) DECREMENTED.
* 
*         CALLS  DSM, GTS, POS, WOG.
  
  
 BKS4     LDD    LT          RESET DISK ADDRESS 
          STD    T6 
          LDD    LS 
          STD    T7 
          RJM    POS         POSITION MASS STORAGE
  
 BKS      SUBR               ENTRY/EXIT 
          RJM    DSM         DISPLAY STATUS MESSAGE 
          SOD    RC          DECREMENT RETRY COUNT
 BKSA     ZJN    *           IF RETRY COUNT EXHAUSTED 
*         ZJN    BKS3        (TAPE ERROR LOADING SYSTEM FILE) 
          LDD    DM 
          NJN    BKS4        IF DISK DEADSTART
 BKS1     RJM    GTS         GET TAPE STATUS
          LPN    2
          NJN    BKS1        IF UNIT BUSY 
          LDD    BF          BACKSPACE TAPE 
          FAN    DS 
 BKS2     RJM    GTS         GET TAPE STATUS
          LPN    2
          NJN    BKS2        IF BACKSPACE NOT COMPLETE
          UJN    BKSX        RETURN 
  
 BKS3     LDC    BKSB        *SYSTEM TAPE PARITY ERROR.*
          RJM    WOG         WAIT FOR OPERATOR *GO.*
          LJM    RTRX        EXIT TAPE READ ROUTINE 
  
 BKSB     DATA   C*SYSTEM TAPE PARITY ERROR.* 
  
 BKSC     BSS    0
          LOC    BKSA 
          ZJN    BKS3        IF TAPE ERROR LOADING SYSTEM FILE
          LOC    *O 
 GDS      SPACE  4,10 
**        GDS - GET DISK STATUS.
* 
*         EXIT   (A) = (ST) = GENERAL STATUS. 
  
  
 GDS      SUBR               ENTRY/EXIT 
          FNC    12,DS       GET GENERAL STATUS 
          ACN    DS 
          IAN    DS 
          STD    ST 
          UJN    GDSX        RETURN 
 GTS      SPACE  4,10 
**        GTS - GET TAPE STATUS.
* 
*         EXIT   (A) = (ST) = GENERAL STATUS. 
  
  
 GTS1     LDN    70 
 GTS2     FJM    GTS4,DS     IF STATUS READY
          SBN    1
          NJN    GTS2        WAIT STATUS READY
          DCN    DS 
 GTS3     LDD    SF          REQUEST GENERAL STATUS 
          FAN    DS 
          ACN    DS 
          EJM    GTS1,DS     IF CHANNEL EMPTY 
 GTS4     IAN    DS 
          DCN    DS 
          STD    ST          SET GENERAL STATUS 
          SHN    0-13 
          ZJN    GTS5        IF ALERT FLAG NOT SET
          FNC    112,DS      GET DETAILED STATUS
 GTSA     EQU    *-1
          ACN    DS 
          IAN    DS 
          DCN    DS 
          LPC    7077 
 GTSB     EQU    *-1
*         LPC    7777        (ATS TAPE SYSTEM)
          NJN    GTS5        IF NOT ONLY WARNING
          LDD    ST          CLEAR ALERT FLAG 
          LPN    77 
          STD    ST 
 GTS5     LDD    ST 
  
 GTS      SUBR               ENTRY/EXIT 
          UJN    GTS3        GET GENERAL STATUS 
 ITM      SPACE  4,10 
**        ITM - INITIATE TAPE MOTION. 
* 
*         ENTRY  (TM) = 5005 IF TAPE MOTION INITIATED.
* 
*         EXIT   (A) = (TM) = 5005. 
*                CHANNEL ACTIVE.
  
  
 ITM      SUBR               ENTRY/EXIT 
          LDD    TM 
          NJN    ITMX        IF TAPE MOTION ALREADY INITIATED 
          LDD    RF          ISSUE READ FUNCTION
          FAN    DS 
          LDC    TPLN+5      SET TAPE MOTION FLAG 
          STD    TM 
          ACN    DS 
          UJN    ITMX        RETURN 
 POS      SPACE  4,10 
**        POS - POSITION MASS STORAGE.
* 
*         ENTRY  (T6) = LOGICAL TRACK.
*                (T7) = LOGICAL SECTOR. 
*                (UN) = UNIT NUMBER.
*                (POSA) = SEEK FUNCTION.
* 
*         USES   T2.
* 
*         CALLS  DSM, GDS, LDA. 
  
  
 POS      SUBR               ENTRY/EXIT 
          LDN    0
          STD    T2 
          RJM    LDA         CONVERT DISK ADDRESS 
          LDD    DT          SET 895 DEADSTART READ FLAG
          RAD    UN+2 
 POS1     SOD    T2 
          ZJN    POS2        IF BUSY COUNT EXHAUSTED
          FNC    2,DS        SEEK FUNCTION
 POSA     EQU    *-1
*         FNC    1,DS        (1 TO 1 INTERLACE) 
          ACN    DS 
          LDN    4           OUTPUT SEEK PARAMETERS 
          OAM    UN,DS
          FJM    *,DS        IF CHANNEL FULL
          DCN    DS 
          RJM    GDS         GET DISK STATUS
          ZJN    POSX        IF POSITIONING COMPLETE
          LPN    2
          NJN    POS1        IF BUSY
 POS2     RJM    DSM         DISPLAY STATUS MESSAGE 
          UJN    POS1        LOOP 
 RDR      SPACE  4,10 
**        RDR - READ DISK RECORD. 
* 
*         ENTRY  (T6) = CURRENT LOGICAL TRACK.
*                (T7) = CURRENT LOGICAL SECTOR. 
* 
*         EXIT   (A) = 0 IF ERROR.
*                (LT) = (T6) ON ENTRY.
*                (LS) = (T7) ON ENTRY.
*                (WC) = CM WORD COUNT OF RECORD.
* 
*         CALLS  CDD, RNS.
  
  
 RDR      SUBR               ENTRY/EXIT 
          RJM    CDD         CONNECT
 RDR1     LDN    0           CLEAR WORD COUNT 
          STD    WC 
          LDD    T6          SAVE CURRENT DISK ADDRESS
          STD    LT 
          LDD    T7 
          STD    LS 
 RDR2     LDD    WC          READ NEXT SECTOR 
          RJM    RNS
          MJN    RDR1        IF DISK ERROR
          RAD    WC 
          LMC    TPLN/5 
          ZJN    RDR3        IF TAPE PRU ASSEMBLED
          LDD    T2          CHECK SECTOR WORD COUNT
          SHN    -6 
          NJN    RDR2        IF NOT EOR 
 RDR3     FNC    10,DS       RELEASE CONTROLLER / DRIVE 
          AJM    *,DS        IF FUNCTION NOT COMPLETE 
          UJN    RDRX        RETURN 
 RDT      SPACE  4,10 
**        RDT - REWIND DEADSTART TAPE.
  
  
 RDT      SUBR               ENTRY/EXIT 
          LDD    DM 
          NJN    RDTX        IF DISK DEADSTART
 RDT1     RJM    GTS         GET TAPE STATUS
          LPN    2
          NJN    RDT1        IF UNIT BUSY 
          LDD    SF 
          SBN    12-10       REWIND TAPE
          FAN    DS 
          UJN    RDTX        RETURN 
 RNS      SPACE  4,10 
**        RNS - READ NEXT SECTOR. 
* 
*         ENTRY  (A) = BIAS FOR BUFFER ADDRESS. 
* 
*         EXIT   (A) = (T2) = SECTOR WORD COUNT.
*                (T6) = LOGICAL TRACK FOR NEXT READ.
*                (T7) = LOGICAL SECTOR FOR NEXT READ. 
* 
*         EREXIT (A) .LT. 0.
*                DISK BACKSPACED. 
* 
*         USES   T3, L1, L2.
* 
*         CALLS  BKS, GDS, POS. 
  
  
 RNS2.1   LDN    0           ZERO IF *DR* DEADSTART DEVICE
 RNSB     EQU    *-1
          NJN    RNS2.2      IF NOT *DR* DEADSTART DEVICE 
          LDD    T7 
          LMC    1200 
          ZJN    RNS3.1      IF POSSIBLE CYLINDER SWITCH
          LMC    1200&2400
          ZJN    RNS3.1      IF POSSIBLE CYLINDER SWITCH
 RNS2.2   UJN    RNS4        RESTORE LINKAGE CELLS AND RETURN 
  
 RNS3     AOD    T7          ADVANCE LOGICAL SECTOR 
          LMI    T3 
          ZJN    RNS2.1      IF MATCHING SECTOR LINKAGE 
          LDI    T3          SET NEXT TRACK 
          SHN    21-13
          PJN    *           IF NOT TRACK SWITCH
          SHN    13-21
          STD    T6 
          LDN    0           SET FIRST SECTOR 
          STD    T7 
 RNS3.1   RJM    POS         POSITION MASS STORAGE
 RNS4     LDD    L1          RESTORE CELLS OVERLAID BY LINKAGE
          STI    T3 
          AOD    T3 
          LDI    T3 
          STD    T2 
          LDD    L2 
          STI    T3 
          LDD    T2 
  
 RNS      SUBR               ENTRY/EXIT 
          STD    T3          CALCULATE BUFFER ADDRESS 
          SHN    2
          ADC    BUF-2
          RAD    T3 
          STM    RNSA 
          LDI    T3          SAVE LOCATIONS OVERLAID BY LINKAGE 
          STD    L1 
          LDM    1,T3 
          STD    L2 
          FNC    4,DS        READ DISK SECTOR 
 RNS1     LDC    DSLN+2 
          ACN    DS 
          IAM    BUF,DS 
 RNSA     EQU    *-1
          RJM    GDS         GET DISK STATUS
          ZJP    RNS3        IF NO ERRORS 
          SHN    21-13
          PJN    RNS2        IF NOT ABNORMAL TERMINATION
          SHN    21-10-21+13
          PJN    RNS2        IF NOT TO ISSUE CONTINUE 
          FNC    14,DS       ISSUE CONTINUE FUNCTION
          UJN    RNS1        CONTINUE 
  
 RNS2     RJM    BKS         BACKSPACE DISK 
          LCN    0
          LJM    RNSX        RETURN 
 RTR      SPACE  4,10 
**        RTR - READ TAPE RECORD. 
* 
*         EXIT   (WC) = CM WORD COUNT FOR RECORD. 
*                (TM) = 0.
*                TO *RSTX* WHEN EOF ENCOUNTERED.
* 
*         CALLS  BKS, DV5, GTS, ITM.
  
  
 RTR      SUBR               ENTRY/EXIT 
 RTR1     RJM    ITM         INITIATE TAPE MOTION 
          STD    WC 
          IAM    BUF,DS      INPUT TAPE RECORD
          LMC    -0 
          ADD    WC 
          SBN    3
          PJN    RTR2        IF NOT NOISE 
          LDN    0
 RTR2     RJM    DV5         DIVIDE BY FIVE 
          STD    WC 
 RTR3     RJM    GTS         GET TAPE STATUS
          LPN    20 
          NJN    RTR4        IF EOF 
          STD    TM 
          LDD    ST 
          LPC    4010 
          ZJN    RTRX        IF NO ERRORS 
          RJM    BKS         BACKSPACE TAPE 
          UJN    RTR1        RETRY
  
 RTR4     LJM    RSTX        EXIT SYSTEM TAPE LOAD
 RTU      SPACE  4,10 
**        RTU - RELEASE TAPE UNIT.
  
  
 RTU      SUBR               ENTRY/EXIT 
          LDD    DM 
          NJN    RTUX        IF DISK DEADSTART
          LDD    SF 
          SBN    12-1 
 RTU1     FAN    DS          RELEASE UNIT RESERVE 
          UJN    RTUX        RETURN 
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMPC2D 
*CALL     COMPDV5 
          LIST   X
*CALL     COMPLDA 
          LIST   *
          TITLE  BUFFER RESIDENT PRESET.
 BRP      SPACE  4,10 
**        BRP - BUFFER RESIDENT PRESET. 
* 
*         EXIT   CHANNEL INSTRUCTIONS MODIFIED. 
*                DRIVERS PRESET.
*                CONSTANT 3 (TR) DEFINED. 
* 
*         USES   DH, DM, DN, IH, T4, T6, T7.
* 
*         CALLS  C2D, MCI, PSD. 
  
  
 BRP      SUBR               ENTRY/EXIT 
          LDM    MXRL+CM     SET DEADSTART CHANNEL
          STD    T4 
          STD    DH 
          RJM    C2D         CONVERT FOR STATUS MESSAGE 
          STM    DSMA+1 
          LDM    MXRL+LA     PRESERVE DISPLAY CONSOLE STATUS
          STD    DN 
          LDC    CTDS        MODIFY CHANNEL INSTRUCTIONS
          RJM    MCI
          LDN    PC          CHECK DEADSTART CHANNEL
          STD    IH 
          LMD    DH 
          NJN    BRP1        IF NOT PP COMMUNICATIONS CHANNEL 
          LDN    12          SET INTERCOMMUNICATIONS CHANNEL
          STD    IH 
          STD    T4 
          LDC    CTPC        MODIFY PP INTERCOMMUNICATION CHANNELS
          RJM    MCI
 BRP1     LDM    MXRL+T7     DISK SECTOR / DEADSTART FUNCTION 
          STD    T7 
          LDM    MXRL+T6     TRACK / TAPE STATUS
          STD    T6 
          STD    DM 
          RJM    PSD         PRESET DRIVERS 
          LDN    3           DEFINE CONSTANT 3
          STD    TR 
          UJP    BRPX        RETURN 
          TITLE  BUFFER RESIDENT PRESET SUBROUTINES.
 CAU      SPACE  4,10 
**        CAU - CHECK ATS UNIT. 
* 
*         ENTRY  (T7) = WORD 6 OF DEADSTART PANEL.
* 
*         EXIT   TAPE READ LOOP MODIFIED FOR 200 OR 150 IPS 6250
*                DENSITY AT 2X PPU SPEED OR ANY 6250 DENSITY AT 1X PPU
*                SPEED. 
* 
*         USES   T1.
  
  
 CAU2     SBN    2
          PJN    CAUX        IF PP SPEED .GE. 4X
          LDD    T1 
          LPN    7
          LMN    5
          ZJN    CAU1        IF 200 IPS UNIT
          LMN    6&5
          ZJN    CAU1        IF 150 IPS UNIT
  
 CAU      SUBR               ENTRY/EXIT 
          LDD    T7          GET EQUIPMENT (CONTROLLER) NUMBER
          LPC    7000 
          ADC    212         ADD UNIT STATUS FUNCTION 
          FAN    DS 
          ACN    DS 
          IAN    DS 
          DCN    DS 
          STD    T1 
          LPN    30          CHECK UNIT STATUS
          LMN    30 
          NJN    CAUX        IF DENSITY NOT 6250 CPI
          LDM    MXRL+T3
          NJN    CAU2        IF PP SPEED .GT. 1X
 CAU1     LDC    UJNI+2      DISABLE INITIATE TAPE MOTION 
          STM    RSTA 
          UJN    CAUX        RETURN 
 MCI      SPACE  4,10 
**        MCI - MODIFY CHANNEL INSTRUCTIONS.
* 
*         ENTRY  (A) = ADDRESS OF INSTRUCTION LIST. 
*                (T4) = CHANNEL NUMBER. 
* 
*         USES   T1, T2.
  
  
 MCI1     STD    T2          SET INSTRUCTION ADDRESS
          LDI    T2          MODIFY INSTRUCTION 
          SCN    37 
          LMD    T4 
          STI    T2 
          AOD    T1          ADVANCE LIST ADDRESS 
 MCI2     LDI    T1 
          NJN    MCI1        IF NOT END OF LIST 
  
 MCI      SUBR               ENTRY/EXIT 
          STD    T1          SET LIST ADDRESS 
          UJN    MCI2        ENTER LOOP 
 PSD      SPACE  4,10 
**        PSD - PRESET DRIVERS. 
* 
*         ENTRY  (A) = 0 IF TAPE DEADSTART. 
*                (T6) = TRACK / TAPE STATUS.
*                (T7) = DISK SECTOR / DEADSTART FUNCTION. 
* 
*         EXIT   (UN) = UNIT NUMBER (DISK DEADSTART). 
*                (BF) = BACKSPACE FUNCTION (TAPE DEADSTART).
*                (RF) = READ FUNCTION (TAPE DEADSTART). 
*                (SF) = STATUS FUNCTION (TAPE DEADSTART). 
* 
*         CALLS  CAU, C2D, PDA. 
  
  
 PSD3     LDM    MXRL+T5     SET SEEK FUNCTION
          SHN    14 
          STM    POSA 
          SHN    -14         POSITION ALGORITHM INDEX 
          LPN    77 
          LMN    AIDR 
          RAM    RNSB        ZERO FOR CDSS II DEADSTART DEVICE
          LMN    AIDR 
          LPN    77 
          RJM    PDA         PRESET DISK ADDRESS CONVERSION 
          LDM    MXRL+DT     GET 895 DEADSTART READ FLAG
          STD    DT 
          LDM    MXRL+T4     SET UNIT NUMBER
 PSD4     STD    UN 
          RJM    C2D         CONVERT FOR STATUS MESSAGE 
          STM    DSMA+4 
  
 PSD      SUBR               ENTRY/EXIT 
          NJN    PSD3        IF DISK DEADSTART
          LDC    RTR         SET TAPE DRIVER ADDRESS
          STM    RNRA 
          LDD    T7 
          SHN    -6 
          LPN    7
          LMN    1
          NJN    PSD1        IF NOT ATS TAPE SYSTEM 
          LCN    0           SET DETAIL STATUS MASK 
          STM    GTSB 
          RJM    CAU         CHECK ATS UNIT 
 PSD1     LDD    T7          EXTRACT EQUIPMENT (CONTROLLER) NUMBER
          LPC    7000 
          ADN    12          SET GENERAL STATUS FUNCTION
          STD    SF 
          ADN    40-12       SET READ FUNCTION
          STD    RF 
          ADN    112-40      SET DETAILED STATUS FUNCTION 
          STM    GTSA 
          ADN    113-112     SET BACKSPACE FUNCTION 
          STD    BF 
 PSD2     LDD    T7          EXTRACT UNIT NUMBER
          LPN    17 
          LJM    PSD4        CONVERT FOR STATUS MESSAGE 
  
          LIST   G
 PDA      HERE
          LIST   *
          SPACE  4,10 
**        CHANNEL TABLES. 
  
  
          CHTB   PC 
          CHTB   DS 
          SPACE  4,10 
          ERRNG  7777-*      PRESET OVERFLOWS PP MEMORY 
          SPACE  4,10 
**        BUFFER. 
  
  
 BUF      EQU    BRPX+5 
          SPACE  4,10 
          ERRNG  10000-BUF-TPLN-5  BUFFER OVERFLOWS PP MEMORY 
          ERRNG  MXRL-*-5    *DIO* OVERFLOWS ONE TAPE PRU 
  
          END 
