*DECK     CD6 
          IDENT  CD6,IPLTRAN
          PERIPH
*CALL,VERS
          TITLE  CD6         CTI 66X (MTS) TAPE DRIVER - "VERS" 
          COMMENT CTI 66X (MTS) TAPE DRIVER - "VERS"
          COMMENT COPYRIGHT CONTROL DATA CORPORATION, 1979
*CALL,CDCCRN
 CD6      SPACE  4,10 
*****     CD6 - 66X (MTS) TAPE DRIVER -CTI-.
* 
*         R. A. MATTHEWS.          12/23/77.
*         R. A. TURGEON             6/8/78. 
* 
*         CD6 PROVIDES A BASIC TAPE DRIVER FOR 66X (MTS) TAPE DRIVES
*         WHEN USED AS THE DEADSTART DEVICE WITHIN THE COMMON TEST/ 
*         INITIALIZATION (CTI) PACKAGE. CD6 MOVES ITSELF OVER THE IPL 
*         PREFIX TABLE AND PROGRAM BODY TO ALLOW SUBSEQUENT READS TO
*         USE THE IPL BUFFER AREA.
          SPACE  4,10 
***       CD6 - 66X (MTS) TAPE DRIVER -CTI-.
* 
*         CD6 IS THE SECOND RECORD FOLLOWING IPL ON A DEADSTART TAPE
*         AND IS NOT PRESENT IN THE DISK DEADSTART SEQUENCE. 66X, 
*         THROUGH THE COMMON DRIVER INTERFACE, PROVIDES A DEVICE
*         READER THAT WILL LOAD GIVEN ROUTINES AND HAND OFF CONTROL 
*         IF SO SPECIFIED. THE DEVICE READER WILL PROCESS RECORDS UP
*         TO 511 (DECIMAL) CM WORDS LONG. 
          TITLE  DEFINITIONS. 
**        DEADSTART PANEL WORDS.
* 
*         WORDS 5 - 20B OF THE DEADSTART PANEL MUST REMAIN INTACT 
*         DURING CTI EXECUTION. WORDS 0 - 4 MAY BE USED AS SCRATCH
*         DIRECT CELLS. 
  
  
 D0       EQU    0                 SCRATCH
 D1       EQU    1                 SCRATCH
 D2       EQU    2                 SCRATCH
 D3       EQU    3                 SCRATCH
 D4       EQU    4                 SCRATCH
 D5       EQU    5                 ZERO IF TAPE DEADSTART 
 D6       EQU    6                 FUNCTION WORD
*         (D6) = WARMSTART FUNCTION, IF MTS/ATS.
*              = DEADSTART FUNCTION, IF 844 DISK. 
 D7       EQU    7                 RESERVED 
*         (D7) = 1400B IF 3000 TYPE TAPE. 
 D10      EQU    10B               RESERVED 
 D11      EQU    11B               RESERVED 
 D12      EQU    12B               MSL PARAMETERS 
 D13      EQU    13B               OS PARAMETERS
 D14      EQU    14B               OS PARAMETERS
 D15      EQU    15B               UNUSED 
 D16      EQU    16B               C80/A170 RESERVED
 D17      EQU    17B               RESERVED 
 D20      EQU    20B               RESERVED 
 INS      SPACE  4,10 
**        INSTRUCTION EQUATES.
* 
  
  
 PSNC     EQU    0000B             PASS 
 UJNC     EQU    0300B             UNCONDITIONAL JUMP 
 ZJNC     EQU    0400B             ZERO JUMP
 SHNC     EQU    1000B             SHIFT
 LCNC     EQU    1500B             LOAD COMPLEMENT
 SBNC     EQU    1700B             SUBTRACT NO-ADDRESS
 LDCC     EQU    2000B             LOAD CONSTANT
 ADCC     EQU    2100B             ADD CONSTANT 
 LMCC     EQU    2300B             LOGICAL MINUS CONSTANT 
 LDDC     EQU    3000B             LOAD DIRECT
 AJMC     EQU    6400B             ACTIVE JUMP
 OAMC     EQU    7300B             OUTPUT MEMORY
 ACNC     EQU    7400B             ACTIVATE CHANNEL 
 DCNC     EQU    7500B             DISCONNECT CHANNEL 
 MSC      SPACE  4,10 
**        MISCELLANEOUS DEFINITIONS.
* 
* 
  
  
 NAME     EQU    5                 OFFSET OF NAME IN PRFX TABLE 
 TIMEOUT  EQU    70000             TIMEOUT COUNT
 RETRY    EQU    10D               NO. OF RETRIES IN ERROR PROCESSING 
 FWDL$    EQU    0                 DEFINE FORWARD LINK FOR CHANNEL INST.
 QUAL$    EQU    0                 DON-T QUALIFY COMMON DECKS 
 DEBUG    EQU    0
 DSP      SPACE  4,10 
**        DISPLAY CONTROLLER DEFINITIONS. 
* 
* 
  
  
 CHD      EQU    10B               DISPLAY CHANNEL
  
*         DISPLAY FUNCTION CODES. 
  
 F.SEL    EQU    7000B             SELECT CONSOLE DISPLAY 
  
 F.SLS    EQU    0000B             SELECT CONSOLE LEFT SCREEN 
 F.SRS    EQU    0100B             SELECT CONSOLE RIGHT SCREEN
 F.SBS    EQU    0200B             SELECT CONSOLE BOTH SCREEN 
  
 F.CHR    EQU    0000B             SELECT DOT MODE
 F.DOT    EQU    0010B             SELECT DOT MODE
 F.KEY    EQU    0020B             SELECT KEYBOARD INPUT
  
 F.CHS    EQU    0000B             SET CHARACTER SIZE SMALL 
 F.CHM    EQU    0001B             SET CHARACTER SIZE MEDIUM
 F.CHL    EQU    0002B             SET CHARACTER SIZE LARGE 
  
*         COORDINATE DESIGNATION. 
  
 XSET     EQU    6000B             SET X COORDINATE 
 YSET     EQU    7000B             SET Y COORDINATE 
          TITLE  DEFINITION COMMON DECKS. 
          SPACE  4,10 
**        DEFINITION COMMON DECKS.
* 
**        ALL SYMBOL AND MACRO DEFINITION COMMON DECKS ARE CALLED HERE. 
  
  
*CALL     COMPCTI 
*CALL     COMSMTS 
*CALL     COMPCHL 
*CALL     COMSCPA 
*CALL     COMSCTI 
 NFMAX    EQU    CDNFMAX           NOFIND MAXIMUM 
          TITLE  MAIN ROUTINE.
          ORG    IPLTRAN
 CD6      SPACE  4,10 
***       INI - CD6 INITIALIZATION. 
* 
*         INI MOVES THE TAPE DRIVER INTO THE COMMON DRIVER AREA,
*         INITIALIZES THE CHANNEL INSTRUCTIONS AND LOADS THE FIRST
*         DISPLAY ROUTINE.
* 
*         ENTRY  CPA AREA INTACT. 
*                DEADSTART PANEL CELLS INTACT.
* 
*         USES   D1, D2, D3, D4.
  
  
 INI      BSS    0                 ENTRY POINT
  
*         MOVE THE COMMON DRIVER FOR TAPE, *CTD*, INTO THE COMMON 
*         DRIVER AREA.
  
          LDC    TCTDL
          STD    D4                LENGTH OF MOVE BLOCK 
 INI1     LDM    TCTD-1,D4
          STM    CDEP-1,D4         MOVE DRIVER CODE 
          SOD    D4 
          NJN    INI1              IF MORE DRIVER CODE TO MOVE
          LDD    D6 
          LPN    17B
          RAM    CTD1        PUT UNIT NO. IN CONNECT CODE 
          LDD    D6 
          LPC    7000B
          STM    FCNA              EQUIPMENT NO. * 1000B
  
          LDD    D6 
          LPN    17B               ISOLATE CHANNEL NO.
          RAM    FMUD              FIX FORMAT UNIT DATA 
          LPN    17B               ISOLATE CHANNEL NO.
          RAM    FMUN              FIX 9-TRK FMT UNIT DATA
  
*         PICK UP CHANNEL NUMBER AND STUFF CHANNELS INTO CODE USING 
*         THE CHANNEL INSTRUCTION LINK. 
  
          LDC    AWDZ              FIRST CHANNEL INSTRUCTION
          STD    D2 
          LDD    D10               GET CHANNEL NO. FROM D/S PANEL 
          LPN    37B
          STD    D3 
          LDN    0
 INI2     RAD    D2                CHANNEL INST. POINTER + BIAS 
          LDI    D2                GET INSTRUCTION
          LPN    37B
          STD    D4                SAVE FOR NEXT INSTRUCTION
          LDD    D3                GET CHANNEL NO.
          SBD    D4                SUBTRACT LINK FROM CHANNEL NO. 
          RAI    D2                ADD CHANNEL NO. - LINK TO OLD INST.
          LDD    D4                CHECK FOR ZERO LINK (LAST INST.) 
          NJN    INI2              CONTINUE PROCESSING INSTRUCTIONS 
          SPACE  4,10 
*         CODE TO CREATE CTI INTERNAL STATE 
  
          DCN.   13B+40B           DISCONNECT 13B 
          DCN.   33B+40B           DISCONNECT 33B 
  
          IJM.   INI7,12B          IF CHAN 12B IS D.S CHANNEL 
          LDN    0                 OUTPUT 0000 TO CH 12B
          OAN.   12B
          AOM    D0                WAIT A WHILE 
          SOM    D0 
          FJM.   INI7,12B          IF FULL (NO PP ON CH 12B)
  
          LDD    D3                ACTIVATE DEADSTART CHANNEL 
          RAM    INIA 
 INIA     ACN.   40B
  
          LDD    D3                MOVE PP BACK TO D.S. CHAN
          RAM    INIC 
          LDN    INIL 
          OAM.   INIB,12B 
          FJM.   *,12B
  
 INI7     DCN.   12B+40B           DISCONNECT 12B 
          DCN.   32B+40B           DISCONNECT 32B 
          UJN    INI9 
  
 INIB     LDN    0
 INIC     IAM.   0,** 
 INIL     EQU    *-INIB 
  
  
*         CALL THE COMMON DRIVER TO LOAD IOQ
*          AND GIVE CONTROL TO IOQ. 
  
 INI9     LDC    INIR               A = ADDRESS OF PARAMS 
          LJM    CDEP               GOTO COMMON DRIVER
  
*         PARAMETER BLOCK FOR COMMON DRIVER TO LOAD IOQ 
  
 INIR     CON    IOQB               LOAD ADDRESS
          CON    IOQTRAN               TRANSFER ADDRESS 
          CON    0                  NO REWIND FIRST 
          VFD    18/3LIOQ,6/0       NAME CHECK FIELD
          TITLE  CTD - COMMON TAPE DRIVER.
***       CTD - COMMON TAPE DRIVER. 
* 
  
  
 TCTD     EQU    *                 FWA OF DRIVER AREA 
  
          LOC    CDEP              BEGINNING OF COMMON DRIVER AREA
  
 CTD      EQU    *                  ENTRY POINT 
          UJN    ENDCONS
          CON    D66X 
 ENDCONS  EQU    *
          STD    D1                 SAVE ADDRESS OF PARAMS. 
  
          RJM    MDC                SEIZE D.S. CHANNEL. 
  
          LDI    D1                INPUT BUFFER FWA 
          STD    D2 
          STM    PREB               PRFX READ 
          STM    REDB               FULL READ 
          STM    REDC 
          ADN    NAME+2 
          STM    PREC               PRE BYPASS-READ 
          LDM    CDTA,D1            TRANSFER ADDRESS
          STM    CTDZ 
          LDM    CDNC,D1            NAME CHECK FIELD
          STM    NFNM 
          LDM    CDNC+1,D1
          STM    NFNM+1 
          LDN    RETRY
          STM    ARTC               INIT ERROR RETRY COUNTER
          LDN    NFMAX
          STM    NFCT               NO FIND COUNT LIMIT 
 CTD1     LDN    20B         THIS INST MODIFIED FOR CONNECT CODE
          RJM    FCN
          RJM    FMU                FORMAT UNIT 
          LDM    CDNC,D1
          LMC    7777B
          NJN    *+3
          LJM    JUMP 
          LDM    CDRW,D1
          ZJN    CTD2               IF NO REWIND FIRST
          LDN    MREW 
          RJM    RBT                REWIND TAPE 
  
 CTD2     LDM    CDNC,D1
          NJN    CTD3               IF READ NAMED RECORD
          LDD    D2                 ELSE READ NEXT RECORD 
          ADC    LE77*BPW+LE6P*BPW
          STM    REDC 
          LJM    CTD7 
  
 CTD3     RJM    PRE                READ PRFX TO GET NAME 
  
*         TEST IF NAMES MATCH 
  
          LDM    NAME,D2
          SBM    NFNM 
          NJN    CTD5 
          LDM    NAME+1,D2
          SBM    NFNM+1 
          ZJN    CTD6               IF NAMES MATCH
  
*         HERE IF NO MATCH. CHECK IF ZZZ. 
  
 CTD5     SOM    NFCT               CHECK NOFIND COUNT
          ZJN    CTD55              IF RUNAWAY TAPE 
          LDM    NAME,D2
          LMC    2RZZ 
          NJN    CTD3 
          LDM    NAME+1,D2
          LMC    1RZ*100B 
          NJN    CTD3 
 CTD55    LJM    ERNF               IF ZZZ REACHED
  
*         HERE TO BACKSPACE TAPE ONE RECORD.
  
 CTD6     LDC    MBCK 
          RJM    RBT                BACKSPACE TAPE
  
*         HERE TO READ DESIRED RECORD 
  
 CTD7     RJM    RED                FULL READ 
  
          LDN    1           RELEASE UNIT 
          RJM    FCN
          RJM    RDC                RESTORE D.S. CHANNEL. 
  
  
 JUMP     LJM    **                 GO TO TRANSFER ADDRESS
 CTDZ     EQU    *-1
          TITLE  SUBROUTINES
 AWD      SPACE  4,10 
**        AWD - ACTIVATE CHANNEL AND WAIT FOR DATA. 
* 
*         AWD ACTIVATES THE FUNCTIONED CHANNEL AND TIMES OUT A FULL 
*         CONDITION.
* 
*         EXIT   (A) .NE. 0, DATA ON CHANNEL. 
*                (A) = 0, NO DATA RECEIVED, CHANNEL DISCONNECTED. 
  
  
 AWD      ENM    X                 ENTRY/EXIT 
          LDC    TIMEOUT
  
****
*         THE FOLLOWING IS THE FIRST CHANNEL INSTRUCTION IN *CD6* AND 
*         IS USED IN DEFINING THE LINKED CHANNEL LIST.  IF THE FIRST
*         CHANNEL INSTRUCTION IS MOVED, BE SURE TO ADJUST THE CHANNEL 
*         REPLACEMENT SECTION IN *INI*. 
  
 AWDZ     BSS    0                 FIRST CHANNEL INSTRUCTION
  
          ACN    40B               ACTIVATE CHANNEL 
  
****
  
 AWD1     FJM    AWDX,0            IF FULL, RETURN
          SBN    1
          NJN    AWD1              IF TIME OUT NOT EXPIRED
          DCN    40B               DISCONNECT 
          UJN    AWDX              RETURN 
 PRE      SPACE  4,10 
**        PRE - READ ENOUGH TO GET THE NAME 
* 
*         RETURN TO CALLER IF NO ERRORS 
*         ELSE GO TO ERROR PROCESSING 
  
 PRE1     RJM    ART               ASK TO RETRY 
          UJN    PRE3              TRY AGAIN
  
 PRE      ENM    X                 ENTRY/EXIT 
 PRE3     LDN    MRFW              READ FORWARD 
 PRE4     RJM    FCN               ISSUE FUNCTION 
          RJM    AWD               ACTIVATE AND WAIT FOR DATA 
          ZJN    PRE1              IF NO DATA COMING
          LDN    NAME+2            LENGTH TO INCLUDE NAME 
          IAM    **,0              READ TABLES
 PREB     EQU    *-1
  
 PRE5     LDN    77B               BYPASS REST OF RECORD
          IAM    **,0 
 PREC     EQU    *-1
          ZJN    PRE5 
          DCN    40B
          RJM    CHK               CHECK STATUS AFTER READ
          MJN    PRE3              IF TO RETRY READ 
          NJN    PREX              IF NO ERRORS 
          LDN    MRRF              REREAD FORWARD FUNCTION
          UJN    PRE4 
 RED      SPACE  4,10 
**        RED - READ FULL RECORD
* 
*         RETURN TO CALLER IF NO ERRORS 
*         ELSE GO TO ERROR PROCESSING 
  
 RED1     RJM    ART               ASK TO RETRY 
          UJN    RED3              TRY AGAIN
  
 RED      ENM    X                 ENTRY/EXIT 
 RED3     LDN    MRFW              READ FORWARD 
 RED4     RJM    FCN               ISSUE FUNCTION 
          RJM    AWD               ACTIVATE AND WAIT FOR DATA 
          ZJN    RED1              IF NO DATA COMING
          LDC    LE77*BPW+LE6P*BPW TABLES LENGTH
          IAM    **,0              READ TABLES
 REDB     EQU    *-1
          LDN    0
          IAM    **,0              READ REST OF RECORD
 REDC     EQU    *-1
          DCN    40B
          RJM    CHK               CHECK STATUS AFTER READ
          MJN    RED3              IF OK TO RETRY 
          NJN    REDX              IF NO ERRORS 
          LDN    MRRF              REREAD FORWARD FUNCTION
          UJN    RED4 
 FCN      SPACE  4,10 
**        FCN - FUNCTION DEVICE.
* 
*         ENTRY  (A) = FUNCTION CODE. 
*                (FCNA) = EQUIPMENT NO. * 1000B.
* 
*         RETURNS TO CALLER IF NO ERRORS
*         ELSE GO TO ERROR PROCESSOR. 
  
  
 FCN      ENM    X                 ENTRY/EXIT 
          STM    FCNF              SAVE FUNCTION CODE 
 FCN3     LDC    *
 FCNF     EQU    *-1
          ADC    0                 ADD IN EQUIPMENT NO. 
 FCNA     EQU    *-1               EQUIPMENT NO. * 1000B
          FAN    0                 ISSUE FUNCTION 
  
          LDC    TIMEOUT
 FCN1     IJM    FCNX,0            IF FUNCTION ACCEPTED, RETURN 
          SBN    1
          NJN    FCN1              IF TIMEOUT NOT EXPIRED 
          DCN    40B
          RJM    ART               ASK TO RETRY 
          UJN    FCN3              TRY AGAIN
  
 GDS      SPACE  4,10 
**        GDS - GET DETAIL STATUS.
* 
*         GDS GETS DETAIL STATUS FROM MTS EQUIPMENT.
* 
*         CALLS  FCN, AWD.
* 
  
  
 GDS2     RJM    ART               ASK TO RETRY 
          UJN    GDS3              TRY AGAIN
  
 GDS      ENM    X                 ENTRY/EXIT 
 GDS3     LDC    MDST              MTS DETAIL STATUS FUNCTION 
          RJM    FCN               FUNCTION DEVICE
          RJM    AWD               ACTIVATE AND WAIT FOR DATA 
          ZJN    GDS2              IF NO DATA COMING
          LDN    MDBL              BLOCK LENGTH 
          IAM    GDSA,0            INPUT STATUS FROM CONTROLLER 
          DCN    40B               DISCONNECT CHANNEL 
          UJN    GDSX              RETURN 
  
 GDSA     BSSZ   MDBL 
 GUS      SPACE  4,10 
**        GUS - GET GENERAL/UNIT STATUS.
* 
*         GUS ISSUES THE MTS GENERAL STATUS FUNCTION AND UPDATES
*         THE  FIELD *CDGS*. THE STATUS IS ALSO RETURNED IN (A).
* 
*         EXIT   (CDGS) = GENERAL/UNIT STATUS REPLY.
*                (A) = GENERAL/UNIT STATUS REPLY. 
*                IF STATUS = 0, NO ERRORS.
* 
  
 GUS2     RJM    ART               ASK TO RETRY 
          UJN    GUS3              TRY AGAIN
  
 GUS      ENM    X                 ENTRY/EXIT 
 GUS3     LDN    MGST 
          RJM    FCN               FUNCTION DEVICE
          RJM    AWD               ACTIVATE AND WAIT FOR DATA 
          ZJN    GUS2              IF NO DATA COMING
          IAN    0                 READ STATUS
          STM    CDGS 
          DCN    40B                                                     CD4R5A0
          UJN    GUSX              RETURN 
  
 CDGS     CON    0                 GENERAL STATUS WORD
 FMU      SPACE  4,10 
**        FMU - FORMAT UNIT 
* 
*         RETURNS TO CALLER IF NO ERRORS
*         ELSE GO TO ERROR PROCESSOR
* 
  
 FMU      ENM    X                 ENTRY/EXIT 
          RJM    GUS               GET GENERAL STATUS 
          SHN    SL.GSUT           ISOLATE 9-TRACK BIT
          PJN    FMU2              IF 7-TRACK 
          LDC    4260B             FUNCTION PACKED MODE 
 FMUN     EQU    *-1
          STM    FMUD              REPLACE FORMAT FUNCTION
 FMU2     LDN    MFMT              FORMAT UNIT FUNCTION 
          RJM    FCN               ISSUE FUNCTION 
          LDN    2                 WORD COUNT 
          ACN    0                 ACTIVATE CHANNEL 
          OAM    FMUD,0            OUTPUT FORMAT DATA 
          LDC    TIMEOUT
 FMU3     EJM    FMU5,0            WAIT FOR EMPTY 
          SBN    1
          NJN    FMU3              IF NOT TIMED OUT YET 
 FMU4     RJM    ART               ASK FOR RETRY PERMISSION 
          UJN    FMU2              RETRY
 FMU5     DCN    0
          RJM    GUS               GET GENERAL STATUS 
          SHN    SL.GSAL
          PJN    FMUX              IF FORMAT OK 
          UJN    FMU4              ELSE RETRY 
  
 FMUD     CON    FW0V              UNIT MUST BE ADDED IN
          CON    FW1V 
          SPACE  4,10 
**        MDC - MOVE DEADSTART CHANNEL PP 
* 
*         IF THE DEADSTART CHANNEL IS ACTIVE, 
*           MOVE PP(D.S. CHAN) OVER TO CHANNEL 12B. 
* 
  
 MDC      ENM    X                 ENTRY/EXIT 
          IJM    MDCX,0            IF D.S. CHAN INACTIVE
          LDN    0                                                       DIMA357
          OAN    0                 OUTPUT ZERO WORD                      DIMA357
          LDI    0                 DELAY 3 MEMORY CYCLES                 DIMA357
          EJM    MDC1A,0           IF WORD PICKED UP                     DIMA357
          DCN    0                 CLEAR CHANNEL OF DATA                 DIMA357
          UJN    MDCX              RETURN TO CALLER                      DIMA357
 MDC1A    BSS    0                                                       DIMA357
          ACN.   12B               ACTIVATE CHAN 12B
          LDN    MDCL              OUTPUT PROG TO PP(D.S. CHAN) 
          OAM    MDCA,0 
          FJM    *,0
          DCN    0
          UJN    MDCX              RETURN 
  
 MDCA     CON    DEBUG
          BSSZ   DEBUG
          LDN    0
          IAM.   0,12B
          IFGT   DEBUG,0,3
          STM    DEBUG+20B
          LDC    *
          UJN    *
 MDCL     EQU    *-MDCA 
          SPACE  4,10 
**        RDC - RESET DEADSTART CHANNEL PP
* 
*         IF CHANNEL 12B ACTIVE,
*           MOVE PP ON CHAN 12B BACK TO D.S. CHAN.
* 
  
 RDC      ENM    X                 ENTRY/EXIT 
          IJM.   RDCX,12B          IF CHAN 12B INACTIVE 
          ACN    0                 ACTIVATE D.S. CHANNEL
          LDN    RDCL              OUTPUT PROG TO CHANNEL 12B 
          OAM.   RDCA,12B 
          FJM.   *,12B
          DCN.   12B
          UJN    RDCX              RETURN 
  
 RDCA     CON    DEBUG
          BSSZ   DEBUG
          LDN    0
          IAM    0,0
          IFGT   DEBUG,0,3
          STM    DEBUG+20B
          LDC    *
          UJN    *
 RDCL     EQU    *-RDCA 
 RBT      SPACE  4,10 
**        RBT - REWIND/BACKSPACE TAPE 
* 
*         ENTRY  (A) = FUNCTION CODE
* 
*         CALLS FCN 
  
 RBT      ENM    X                 ENTRY/EXIT 
          RJM    FCN
 RBT1     RJM    GUS               GET GENERAL STATUS 
          LPN    MP.GSUB
          NJN    RBT1              IF STILL BUSY
          UJN    RBTX              RETURN 
          SPACE  4,10 
**        CHK - CHECK RESULTS/STATUS AFTER A READ OPERATION 
* 
*         RETURNS TO CALLER IF NO ERRORS
*         ELSE IF RECOVERABLE ERROR BACKSPACE AND RETURN
*              ELSE GO TO ERROR PROCESSING
* 
*         (A) .GT. 0 IF NO ERRORS 
*         (A) .EQ. 0 IF NOISE RECORD JUST READ. CALLER SHOULD 
*                    ISSUE REREAD FUNCTION AND CONTINUE.
*         (A) .LT. 0 IF ERROR BUT CALLER SHOULD RETRY READ. 
* 
  
 CHK1     LDN    0                 SET RETURN CODE FOR NOISE RECORD 
  
 CHK      ENM    X                 ENTRY/EXIT 
          RJM    GUS               GET GENERAL STATUS 
          SHN    SL.GSNO
          MJN    CHK1              IF NOISE RECORD
          SHN    18+SL.GSAL-SL.GSNO 
          MJN    CHK3              IF ALERT SET 
 CHK2     LDN    1                 IF NO ERRORS 
          UJN    CHKX 
 CHK3     RJM    GDS               GET DETAILED STATUS
          LDM    GDSA+MDAC         1ST WORD OF D.S. 
          LPC    5077B                                                   CD7R5A0
          ZJN    CHK2              IF 0, BLOCK PROBABLY OK
 CHK5     RJM    ART               ASK TO RETRY 
          LDC    MBCK 
          RJM    RBT               BACKSPACE TAPE 
          LCN    0
          UJN    CHKX              RETURN 
 ART      SPACE  4,10 
**        ART - ADJUST RETRY COUNTER
* 
*         DECREMENT COUNTER AND 
*         RETURN TO CALLER IF COUNTER .GE. 0
*         ELSE GO TO ERROR PROCESSOR
* 
  
 ART      ENM    X                 ENTRY/EXIT 
          SOM    ARTC 
          PJN    ARTX              EXIT IF MORE RETRIES AVAILABLE 
          LJM    ERIO              IF NO MORE RETRIES AVAILABLE 
  
 ARTC     CON    0                 RETRY COUNTER
  
 NFCT     CON    0                 NOFIND COUNTER 
          EJECT 
**        ERROR PROCESSING
* 
*         ERIO IS ENTERED IF AN UNRECOVERABLE I/0 ERROR 
*         HAS OCCURRED.  ERNF IS ENTERED IF A REQUEST TO
*         READ A NAMED RECORD WAS MADE BUT THE RECORD 
*         COULD NOT BE FOUND.  FOR EITHER ERROR, A MESSAGE
*         IS PUT ON THE DISPLAY AND THE PP IS HUNG IN A LOOP
*         OUTPUTTING THE ERROR MESSAGE. 
  
 ERIO     EQU    *                 BUILD ERROR MSG
          LDM    CDGS              GENERAL STATUS 
          RJM    CTO
          STM    IOMGS+1
          LDM    CDGS 
          SHN    -6 
          RJM    CTO
          STM    IOMGS+0
          LDC    2RGS 
          STM    NFMB              CHANGE 1ST BYTE OF MSG TO *GS* 
  
 ERNF     EQU    *                 ENTRY WHEN NOFIND
  
*         IDLE PP 10
          FJM.   IDLEDCN,CHD
          LDN    IDLL 
          OAM.   IDLA,CHD          SEND IDLE PROGRAM
 IDLEDCN  DCN.   CHD+40B           FREE DISPLAY CHANNEL 
  
*         PAINT DISPLAY 
  
          FNC.   F.SEL+F.SLS+F.CHR+F.CHL,CHD
          ACN.   CHD
  
 ERR8     LDN    NFML 
          OAM.   NFM,CHD           OUTPUT ERROR MSG 
 ERR9     SBN    40B
          MJN    ERR9 
          UJN    ERR8              HANG IN OUTPUT LOOP
  
 IDLA     CON    0                 PP 10 IDLE PROGRAM 
          CON    UJNC              HANG 
 IDLL     EQU    *-IDLA            LENGTH OF IDLE PROGRAM 
  
 DOPLS    EQU    22B               LINE (Y COOR) INCREMENT VALUE
  
  
 NFM      EQU    *                 NOFIND ERROR MESSAGE 
  
          CON    7400B
          CON    XSET 
 NFMB     DATA   H*NM= NNNN*
 NFNM     EQU    NFMB+2 
 IOMGS    EQU    NFNM 
  
 NFML     EQU    *-NFM             MESSAGE LENGTH 
          SPACE  4,10 
**        CTO - CONVERT TO OCTAL DISPLAY
* 
*         ENTRY  (A) LOWER 6 BITS ARE VALUE TO BE CONVERTED 
* 
*         EXIT   LOWER 12 BITS OF (A) ARE RESULT. 
* 
*         USES   D2 
  
 CTOX     LJM    0                 EXIT 
 CTO      EQU    *-1               ENTRY
          LPN    77B               ISOLATE LOWER 6 BITS 
          STD    D2 
          SHN    3
          LMD    D2 
          SCN    70B
          ADC    2R00 
          UJN    CTOX              RETURN 
           SPACE 4,10 
**        END OF COMMON TAPE DRIVER AND SUBROUTINES.
* 
*         THE FOLLOWING SYMBOLS ARE DEFINED FOR MOVING *CTD* INTO THE 
*         COMMON DRIVER AREA. 
* 
*         TCTD   FWA OF COMMON TAPE DRIVER. 
*         LCTD   LWA+1 OF COMMON TAPE DRIVER. 
*         TCTDL  LENGTH OF COMMON TAPE DRIVER.
* 
  
  
          ERRNG  CPAFWA-*          OVERFLOWED INTO POINTER AREA 
  
          LOC    *O 
  
 LCTD     EQU    *
 TCTDL    EQU    LCTD-TCTD         LENGTH OF DRIVER 
          SPACE  4,10 
*         OVERFLOW CHECK. 
  
          ERRNG  IPLFWA-*          OVERFLOWED INTO IPL
  
          END 
