*DECK     CD4 
          IDENT  CD4,IPLTRAN
          PERIPH
*CALL,VERS
          TITLE  CD4         CTI 844 DISK DRIVER - "VERS" 
          COMMENT CTI 844 DISK DRIVER - "VERS"
          COMMENT COPYRIGHT CONTROL DATA CORPORATION, 1979
*CALL,CDCCRN
 CD4      SPACE  4,10 
*****     CD4 - 844 DISK DRIVER -CTI-.
* 
*         R. A. MATTHEWS.          02/28/78.
*         R. A. TURGEON            6/13/78. 
* 
*         CD4 PROVIDES A BASIC DISK DRIVER FOR 844 DISK DRIVES
*         WHEN USED AS THE DEADSTART DEVICE WITHIN THE COMMON TEST/ 
*         INITIALIZATION (CTI) PACKAGE. CD4 MOVES ITSELF OVER THE IPL 
*         PREFIX TABLE AND PROGRAM BODY TO ALLOW SUBSEQUENT READS TO
*         USE THE IPL BUFFER AREA.
          SPACE  4,10 
***       CD4 - 844 DISK DRIVER -CTI-.
* 
*         CD4 IS THE FOURTH RECORD FOLLOWING IPL ON A DEADSTART 
*         TAPE AND IS THE FIRST RECORD IN THE CTI AREA FOR DISK 
*         DEADSTART. CD4, 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 A MAXIUMIM OF 510 DECIMAL CM WORDS OF INFORMATION.
          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.
 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
 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 
 QUAL$    EQU    0                 DON-T QUALIFY COMMON DECKS 
 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     COMS844 
*CALL     COMPCHI 
*CALL     COMSCPA 
*CALL     COMSCTI 
 NFMAX    EQU    CDNFMAX           NOFIND MAXIMUM 
          TITLE  MAIN ROUTINE.
          ORG    IPLTRAN
 CD4      SPACE  4,10 
***       INI - CD4 INITIALIZATION. 
* 
*         INI MOVES THE DISK DRIVER INTO THE COMMON DRIVER AREA,
*         AND INITIALIZES CHANNEL INSTRUCTIONS
*         AND LOADS THE FIRST DISPLAY ROUTINE.
* 
*         ENTRY  CPA AREA INTACT. 
*                DEADSTART PANEL CELLS INTACT.
* 
*         USES   D2, D3, D4.
 INI      BSSZ   1                 ENTRY POINT
*         MOVE THE COMMON DRIVER FOR DISK, *CDD*, INTO THE COMMON 
*         DRIVER AREA.
          LDC    TCDDL
          STD    D4                LENGTH OF MOVE BLOCK 
 INI1     LDM    TCDD-1,D4
          STM    CDEP-1,D4         MOVE DRIVER CODE 
          SOD    D4 
          NJN    INI1              IF MORE DRIVER CODE TO MOVE
*         INITIALIZE DISK POINTERS AND CHANNEL INSTRUCTIONS.
          RJM   REW                USE DRIVER ROUTINE 
          LDC    CHT               FWA OF CHANNEL TABLE 
          STD    D3 
          LDD    D10
          LPN    37B
          STD    D4                CHANNEL NO.
          LDI    D3 
 INI4     STD    D2                INSTRUCTION ADDRESS
          LDI    D2 
          SCN    37B
          ADD    D4 
          STI    D2 
          AOD    D3                NEXT LIST ENTRY
          LDI    D3 
          NJN    INI4              IF NOT END OF LIST 
          AOD    D3 
          LDD    D6                FUNCTION WORD
          LPN    77B
          STI    D3                UNIT NO. 
          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    0                 WAIT A WHILE 
          SOM    0
          FJM.   INI7,12B          IF FULL (NO PP ON CH 12B)
          LDD    D4                ACTIVATE DEADSTART CHANNEL 
          RAM    INIA 
 INIA     ACN.   40B
          LDD    D4                MOVE PP BACK TO D.S. CHAN
          RAM    INIC 
          LDN    INIL 
          OAM.   INIB,12B 
          FJM.   *,12B             WAIT FOR EMPTY 
 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  CDD - COMMON DISK DRIVER.
***       CDD - COMMON DISK DRIVER. 
* 
 TCDD     EQU    *                 FWA OF DRIVER AREA 
          LOC    CDEP              BEGINNING OF COMMON DRIVER AREA
 CDD      EQU    *
          UJN    ENDCONS
          CON    D844 
 ENDCONS  EQU    *
          STD    D1                SAVE ADDRESS OF PARAMS 
          RJM    MDC               SEIZE D.S. CHANNEL 
          LDI    D1 
          STD    D2                D2 = INPUT BUFFER ADDRESS
          STM    RRRA 
          LDM    CDTA,D1
          STM    CDDZ              STORE TRANSFER ADDRESS 
          LDM    CDNC,D1
          STM    NFNM 
          LDM    CDNC+1,D1
          STM    NFNM+1 
          LDN    RETRY
          STM    ARTC              INIT RETRY COUNTER 
          LDN    NFMAX
          STM    NFCT              INIT NOFIND COUNTER
          LDM    CDRW,D1
          ZJN    CDD2              IF NO REWIND FIRST 
          RJM    REW
 CDD2     RJM    GGS               GET GENERAL STATUS 
          SHN    17-10
          MJN    CDD2              IF COUPLER RESERVED
          LDM    CDNC,D1
          NJN    CDD3              IF READ NAMED RECORD 
          RJM    RCS               ELSE READ CURRENT SECTOR 
          LJM    CDD7              JOIN COMMON CODE 
 CDD2A    RJM    RRR               BYPASS REST OF RECORD
          LDM    RRRA 
          STD    D2                RESET D2 TO ORIGINAL 
 CDD3     RJM    RCS               READ CURRENT SECTOR
*         TEST IF NAMES MATCH 
          LDM    RRRA 
          STD    D2                SET D2 TO INPUT BUFFER ADDR
          LDM    NAME,D2
          SBM    NFNM 
          NJN    CDD5 
          LDM    NAME+1,D2
          SBM    NFNM+1 
          ZJN    CDD6              IF NAMES MATCH 
*         HERE IF NO MATCH. CHECK IF ZZZ. 
 CDD5     SOM    NFCT              CHECK NOFIND COUNTER 
          ZJN    CDD55             IF TOO MANY NOFINDS
          LDM    NAME,D2
          LMC    2RZZ 
 CDD52    NJN    CDD2A             JUMP IF NOT ZZZ
 CDD53    LDM    NAME+1,D2
          LMC    1RZ*100B 
          NJN    CDD52             IF NOT ZZZ 
 CDD55    LJM    ERNF              IF ZZZ REACHED 
*         STRIP OFF PRFX AND 6PPM TABLES
 CDD6     LDC    LE77*BPW+LE6P*BPW
          RJM    MVE
*         READ IN REST OF RECORD IF MORE THAN ONE SECTOR
 CDD7     LDN    0
          RJM    RRR
          LDN    DOPC              OPERATION COMPLETE 
          RJM    FCN
          RJM    RDC               RESTORE D.S. CHANNEL.
          LJM    **                GO TO TRANSFER ADDRESS 
 CDDZ     EQU    *-1
          TITLE  SUBROUTINES. 
 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 
 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 RECIEVED, CHANNEL DISCONNECTED. 
 AWD      ENM    X                 ENTRY/EXIT 
          ACN    40B               ACTIVATE CHANNEL 
          LDC    TIMEOUT
 AWD1     FJM    AWDX,0            IF FULL, RETURN
          SBN    1
          NJN    AWD1              IF TIME OUT NOT EXPIRED
          DCN    40B               DISCONNECT 
          UJN    AWDX              RETURN 
 BDA      SPACE  4,10 
**        BDA - BUMP DISK ADDRESSES.
* 
*         BDA ADJUSTS THE CURRENT DISK ADDRESS BY THE OFFSET READ 
*         IN THE LINKAGE BYTES. 
* 
*         ENTRY  (DADR - DADR+2) = DISK ADDRESS.
* 
*         EXIT   (DADR - DADR+2) = NEW DISK ADDRESS.
 BDA1     STM    DADR+2 
          AOM    DADR+1            BUMP TRACK BY ONE
 BDA2     LDM    DADR+2 
          SBN    MSRS              MAX. NO OF SECTORS 
          PJN    BDA1              IF MORE THAN ONE TRACK 
 BDA      ENM    X                 ENTRY/EXIT 
          LDM    LINKAGE+1         PRU OFFSET 
          SHN    18-1 
          PJN    BDA3              IF EVEN, NOT END OF CYLINDER 
          SHN    1
          STM    DADR+2 
          LDN    0
          STM    DADR+1            CLEAR TRACK NO.
          UJN    BDA2 
 BDA3     SHN    1
          RAM    DADR+2 
          UJN    BDA2 
 FCN      SPACE  4,10 
**        FCN - FUNCTION DEVICE.
* 
*         ENTRY  (A) = FUNCTION CODE. 
* 
*         RETURNS TO CALLER IF NO ERRORS
*         ELSE GO TO ERROR PROCESSOR. 
 FCN      ENM    X                 ENTRY/EXIT 
          STM    FCNF              SAVE FUNCTION CODE 
 FCN3     FNC    0,0               ISSUE FUNCTION 
 FCNF     EQU    *-1
          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
 GGS      SPACE  4,10 
**        GGS - GET GENERAL STATUS. 
* 
*         GGS ISSUES THE GENERAL STATUS FUNCTION  AND UPDATES 
*         THE COMMON DRIVER FIELD *CDGS*. THE STATUS IS ALSO RETURNED 
*         IN (A). 
* 
*         EXIT   (CDGS) = GENERAL STATUS REPLY. 
*                (A) = GENERAL STATUS REPLY.
* 
 GGS2     IAN    0                 READ STATUS
          STM    CDGS 
          DCN    40B
 GGS      ENM    X                 ENTRY/EXIT 
 GGS3     LDN    DGST 
          RJM    FCN               FUNCTION DEVICE
          RJM    AWD               ACTIVATE CHAN AND WAIT FOR DATA
          NJN    GGS2              IF DATA COMING 
          RJM    ART               ASK TO RETRY 
          UJN    GGS3              TRY AGAIN
  
 CDGS     CON    0
 MVE      SPACE  4,10 
**        MVE - MOVE DATA BLOCK.
* 
*         MVE MOVES DOWN A SPECIFIED PORTION OF THE LAST
*         SECTOR THAT WAS READ AND ADJUSTS THE REMAINING
*         LENGTH. D2 IS ADVANCED ACCORDINGLY. 
* 
*         ENTRY  (A) = NO. OF BYTES TO MOVE DOWN. 
*                (D2) = FWA OF BUFFER.
* 
*         EXIT   (D2) = FWA FOR NEXT READ.
* 
 MVE      ENM    X                 ENTRY/EXIT 
          STM    MVEA              STORE MOVE OFFSET
          LDM    LENGTH            COMPUTE MOVE LENGTH
          SBM    MVEA 
          STD    D3 
          STM    LENGTH            ADJUST LENGTH REMAINING
 MVE1     LDM    **,D2
 MVEA     EQU    *-1
          STI    D2 
          AOD    D2                ADVANCE INDEX
          SOD    D3                ADJUST COUNT 
          NJN    MVE1              IF MORE TO MOVE
          UJN    MVEX              RETURN 
          SPACE  4,10 
**        REW - LOGICALLY REWIND DISK FILE
* 
*         REW MOVES THE CTI ADDRESS BYTES OF THE COMMON 
*         POINTER AREA TO OUR CURRENT DISK ADDRESS *DADR*.
* 
 REW      ENM    X                 ENTRY/EXIT 
          LDN    2
          STD    D4 
 REW1     LDM    CIRP,D4           MOVE 
          STM    DADR,D4
          SOD    D4 
          PJN    REW1 
          UJN    REWX              RETURN 
          SPACE  4,10 
**        RCS - READ CURRENT SECTOR 
* 
*         RCS DOES A SEEK TO THE CURRENT SECTOR,
*         READS IN THE TWO LINKAGE BYTES TO DETERMINE THE 
*         TRUE LENGTH OF THE USEFUL DATA IN THE SECTOR. 
*         SEEKS AGAIN TO THE CURRENT SECTOR,
*         READS IN THE AMOUNT DETERMINED BY THE PRIOR READ, 
*         STRIPS OFF THE LINKAGE BYTES, 
*         AND ADJUSTS THE CURRENT DISK ADDRESS *DADR*.
* 
*         ENTRY  (D2) = FWA FOR READ
*                (DADR) = DISK ADDRESS FOR READ 
*                (RRRT) = DISK LOAD TYPE
* 
*         EXIT   (D2) = FWA FOR AN ADDITIONAL READ
*                (DADR) = DISK ADDRESS FOR NEXT READ
*                (RRRT) = DISK LOAD TYPE
* 
  
 RCS      ENM    X
 RCS1     RJM    SEK               SEEK TO CURRENT DISK ADDRESS 
          LDN    DRED 
          RJM    FCN               ISSUE READ FUNC
          ACN    40B
          LDN    2
          IAM    LINKAGE,0         READ LINKAGE BYTES 
          DCN    40B
          ZJN    RCS2              IF COUNTED DOWN
          RJM    GGS               CLEAR SHORT READ ERRORS
          RJM    ART               ASK TO RETRY 
          UJN    RCS1              TRY AGAIN
 RCS2     LDM    LINKAGE           GET LENGTH BYTE
          NJN    RCS3 
          LDC    500B 
 RCS3     ADN    2
          STM    LENGTH            STORE TRUE LENGTH
          RJM    GGS               CLEAR SHORT READ ERRORS
          LDM    RRRT              LOAD TYPE
          NJN    RCS9              IF ADDITIONAL SECTORS TO BE IGNORED
 RCS5     RJM    SEK               SEEK AGAIN TO SAME SECTOR
          LDD    D2 
          STM    RCSB              STORE INPUT BUFFER ADDRESS 
          LDN    DRED 
          RJM    FCN               ISSUE READ FUNC
          ACN    40B
          LDC    ** 
 LENGTH   EQU    *-1
          IAM    **,0              READ AMOUNT INDICATED
 RCSB     EQU    *-1
          DCN    40B
          ZJN    RCS7              IF COUNTED DOWN
          RJM    GGS               CLEAR SHORT READ ERRORS
          RJM    ART               ASK TO RETRY 
          UJN    RCS5              TRY AGAIN
 RCS7     RJM    GGS               CLEAR ERRORS 
          LDN    2
          RJM    MVE               STRIP OFF LINKAGE BYTES
 RCS9     RJM    BDA               BUMP DISK ADDRESS
          LJM    RCSX              RETURN 
  
 LINKAGE  BSSZ   3                 PLACE TO READ IN LINKAGE BYTES 
          SPACE  4,10 
**        RRR - READ REST OF LOGICAL RECORD 
* 
*         RRR READS IN THE REST OF A LOGICAL RECORD IF THE RECORD 
*         CONSISTS OF MORE THAN ONE SECTOR. 
* 
*         ENTRY  (A) = 0 IF ADDITIONAL SECTORS ARE TO BE APPENDED 
*                        TO THE FIRST SECTOR ALREADY IN MEMORY. 
*                (A) .NE. 0 IF ADDITIONAL SECTORS ARE TO BE IGNORED.
* 
*         USES   RRRT,D2. 
* 
*         CALLS  RCS. 
* 
 RRR5     LDN    0
          STM    RRRT              RESET DISK LOAD TYPE 
 RRR      ENM    X                 ENTRY/EXIT 
          STM    RRRT              SAVE TYPE
 RRR2     LDM    LINKAGE           LENGTH OF SECTOR JUST READ 
          LMC    PRU
          NJN    RRR5              IF ALL SECTORS HAVE BEEN READ
          LDM    RRRT 
          ZJN    RRR4              IF SECTOR TO BE APPENDED 
          LDC    **                ELSE RESET D2 = ORIGINAL CDIB
 RRRA     EQU    *-1
          STD    D2 
 RRR4     RJM    RCS               READ CURRENT SECTOR
          UJN    RRR2              LOOP 
 RRRT     CON    0                 HOLDS TYPE 
 SEK      SPACE  4,10 
**        SEK - SEEK DISK ADDRESS.
* 
*         SEK ISSUES A SEEK FUNCTION, AND WILL CONTINUE TO ISSUE AS LONG
*         AS THE DRIVE HEADS ARE IN MOTION. 
* 
*         ENTRY  (UNIT - DADR+2) = SEEK PARAMETER ARRAY.
* 
*         EXIT   (A) .NE. 0, ERROR ON SEEK. 
* 
*         CALLS  FCN, GGS.
 SEK      ENM    X                 ENTRY/EXIT 
 SEK1     LDN    D2SK 
          RJM    FCN               SEEK 2:1 
          LDN    4
          ACN    40B
          OAM    UNIT,0 
          FJM    *,0                                                     IPLR5A0
          DCN    40B
          RJM    GGS               GET GENERAL STATUS 
          ZJN    SEKX              IF ON CYLINDER 
          LPN    12B               CHECK FOR BUSY OR RESERVED 
          NJN    SEK1              IF DRIVE RESERVED OR BUSY
          RJM    ART               ASK TO RETRY 
          UJN    SEK1              TRY AGAIN
          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    MDC1,0            IF WORD PICKED UP                     DIMA357
          DCN    0                 CLEAR CHANNEL OF DATA                 DIMA357
          UJN    MDCX              RETURN TO CALLER                      DIMA357
 MDC1     BSS    0                                                       DIMA357
          ACN.   12B               ACTIVATE CHAN 12B
          LDN    MDCL              OUTPUT PROG TO PP(D.S. CHAN) 
          OAM    MDCA,0 
          FJM    *,0
          DCN    40B
          UJN    MDCX              RETURN 
 MDCA     CON    0
          LDN    0
          IAM.   0,12B
 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    0                 PP PROGRAM 
          LDN    0
          IAM    0,0
 RDCL     EQU    *-RDCA 
 CHT      SPACE  4,10 
**        CHT - CHANNEL INSTRUCTION TABLE.
* 
*         CHT IS A LIST OF ADDRESSES THAT CONTAIN CHANNEL INSTRUCTIONS
*         FOR CHANNEL STUFFING. THE LIST IS TERMINATED BY A ZERO ENTRY. 
* 
*         FOR FURTHER DETAILS, SEE *COMPCHI*. 
 CHT      CHTB                     CHANNEL INSTRUCTION ADDRESS LIST 
 UNIT     CON    0                 UNIT NO. 
 DADR     CON    0,0,0             SEEK PARAMETER ARRAY 
          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
          EJM.   IDLE10,CHD 
          DCN.   CHD+40B
 IDLE10   ACN.   CHD+40B
          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 DISK DRIVER AND SUBROUTINES.
* 
*         THE FOLLOWING SYMBOLS ARE DEFINED FOR MOVING *CDD* INTO THE 
*         COMMON DRIVER AREA. 
* 
*         TCDD   FWA OF COMMON DISK DRIVER. 
*         LCDD   LWA+1 OF COMMON DISK DRIVER. 
*         TCDDL  LENGTH OF COMMON DISK DRIVER.
* 
          ERRNG  CPAFWA-*          OVERFLOWED INTO POINTER AREA 
          LOC    *O 
 LCDD     EQU    *
 TCDDL    EQU    LCDD-TCDD         LENGTH OF DRIVER 
*         OVERFLOW CHECK. 
 LCD4     EQU    *-IPLTRAN         LENGTH OF CD4
          ERRNG  IPLFWA-*          OVERFLOWED INTO IPL
          END 
