*DECK     EBL 
          IDENT  EBL,/CTI/EBLLOAD 
          PERIPH
          SST    D0,D1,D2,D3,D4,D5
*CALL,VERS
          TITLE  EBL         CTI EXTERNAL BOOTSTRAP LOADER - "VERS" 
          COMMENT CTI EXTERNAL BOOTSTRAP LOADER - "VERS"
          COMMENT COPYRIGHT CONTROL DATA CORPORATION, 1979
*CALL,CDCCRN
 SAD      SPACE  4,10 
*****     EBL - EXTERNAL BOOTSTRAP LOADER. CTI. 
* 
*         R. A. TURGEON                06/26/78.
* 
*         EBL IS THE CTI MODULE WHICH IS CALLED TO LOAD AN EXTERNAL 
*         BOOTSTRAP.  EBL WILL LOCATE THE BOOTSTRAP IF POSSIBLE,
*         LOAD IT AT LOCATION 6200B, CREATE THE BOOTSTRAP PASS-ON 
*         STATE, AND FINALLY TRANSFER TO ADDRESS 6320B. 
          SPACE  4,10 
***       EBL - EXTERNAL BOOTSTRAP LOADER. CTI. 
* 
* 
*         EBL IS CALLED TO LOAD MODULES EXTERNAL TO CTI, I.E.,
*         A BOOTSTRAP FOR SOME SOFTWARE SYSTEM.  THE MODULE 
*         LOADED DEPENDS ON THE VALUE OF *EBLP*.  THE CURRENTLY 
*         SUPPORTED VALUES AND THEIR ASSOCIATED BOOTSTRAPS ARE
* 
*         0 = OSB 
*         1 = DSB 
*         2 = MSB 
* 
*         THESE BOOTSTRAPS MUST BE NO LONGER THAN ONE DISK SECTOR.
*         BOOTSTRAPS LOADED FROM TAPE ARE LOADED AT 6200B.
*         BOOTSTRAPS LOADED FROM DISK ARE LOADED AT 6176B.
*         EBL TRANSFERS CONTROL TO ALL BOOTSTRAPS AT ADDRESS 6320B. 
*         BEFORE TRANSFERRING CONTROL TO THE BOOTSTRAP, EBL WILL
*         TAKE FINAL STEPS TO CREATE THE BOOTSTRAP PASS-ON STATE. 
*         IF DSB IS BEING LOADED, THE DDSMEM FIELDS ARE SET TO THE
*         APPROPRIATE VALUES. 
* 
*         EBL USES THE COMMON TAPE DRIVER ONLY IF THE DEADSTART WAS 
*         FROM TAPE AND OSB IS TO BE LOADED.  EBL HAS ITS OWN DISK
*         ROUTINES AND DOES NOT USE ANY COMMON DISK DRIVER. 
* 
*         EBL ASSUMES THAT THE CTI INTERNAL STATE EXISTS
*         WHEN IT IS ENTERED. 
          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/885 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 
 LJMC     EQU    0100B             LONG JUMP
 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
 IAMC     EQU    7100B             INPUT MEMORY 
 OAMC     EQU    7300B             OUTPUT MEMORY
 ACNC     EQU    7400B             ACTIVATE CHANNEL 
 DCNC     EQU    7500B             DISCONNECT CHANNEL 
          SPACE  4,10 
          SPACE  4,10 
**        MISCELLANEOUS DEFINITIONS 
* 
* 
 RICHI$   EQU    0       ALLOW SELECTIVE CHANNEL REDEFINITION 
 TIMEOUT  EQU    70000             TIMEOUT COUNT FOR DISK 
 NAME     EQU    5                 OFFSET OF NAME IN PRFX TABLE 
 DSIFT    EQU    0                 885 D.S. SECTOR NOT IN FLAWED TRACK
 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 CHARACTER 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 
 YINCR    EQU    22B               Y INCREMENT PER LINE 
          SPACE  4,10 
*         SCR DEFINITIONS 
 CHSCR    EQU    16B               SCR CHANNEL
 SCR2     EQU    36B               2ND SCR CHANNEL                       DIMA256
          TITLE  DEFINITION COMMON DECKS. 
          SPACE  4,10 
**        DEFINITION COMMON DECKS.
* 
**        ALL SYMBOL AND MACRO DEFINITION COMMON DECKS ARE CALLED HERE. 
*CALL     COMPCTI 
*CALL     COMPMAC 
*CALL     COMPCHI 
*CALL     COMS844 
*CALL     COMS885 
*CALL     COMSSCR 
*CALL     COMSCPA 
*CALL     COMSCTI 
          SPACE  4,10 
 DSLN     EQU    /CPA/DSLN
 PRU      EQU    /CPA/PRU 
 DDSCMRA  EQU    /CPA/DDSMEM
 DDSCMFL  EQU    /CPA/DDSMEM+2
 DDSECRA  EQU    /CPA/DDSMEM+4
 DDSECFL  EQU    /CPA/DDSMEM+6
          SPACE  4,10 
*         DEFINE 885 D.S. SECTOR READ FUNCTION
  
          IFEQ   DSIFT,0
 DSR885   EQU    /885/DRED
          ELSE
 DSR885   EQU    /885/DRFS
          ENDIF 
          TITLE  DIRECT-CELL AND LOW-CORE DEFINITIONS 
**        DIRECT CELL DEFINITIONS 
* 
* 
 REPADDR  EQU    20B
 RETRY    EQU    21B               RETRY COUNTER
 MSGLEN   EQU    23B               WHEN MSG LENGTH .GT. 77B 
 FCNF     EQU    24B               SAVE AREA FOR FCN
 GENSTAT  EQU    25B               GENERAL STATUS SAVE AREA 
 CHAN     EQU    26B               1ST WORD OF QOD COMM AREA
 UNIT     EQU    CHAN+1            2ND WORD OF QOD COMM AREA
 DTYPE    EQU    UNIT+1            0=885, 1=844S, 2=844D
 TRKSPER  EQU    DTYPE+1           TRACKS PER CYLINDER
 SECSPER  EQU    TRKSPER+1         SECTORS PER TRACK
 DSCYL    EQU    SECSPER+1         DEADSTART CYLINDER 
 DSTRK    EQU    DSCYL+1           DEADSTART TRACK
 DSSEC    EQU    DSTRK+1           DEADSTART SECTOR 
 CTICYL   EQU    DSSEC+1           CTI CYLINDER 
 CTITRK   EQU    CTICYL+1          CTI TRACK
 CTISEC   EQU    CTITRK+1          CTI SECTOR 
 EBLPD    EQU    CTISEC+1          DIRECT CELL VERSION
 REDA     EQU    EBLPD+1           WORK CELL FOR RED
          TITLE  MAIN ROUTINE 
          ORG    /CTI/EBLLOAD 
          SPACE  4,10 
 EBL      EQU    *                 ENTRY POINT
*         INITIALIZATION
          LDM    /CTI/EBLP
          STD    EBLPD             MOVE EBLP TO DIRECT CELL 
          SBN    3                 VERIFY THAT EBLP IN RANGE 0-2
          PJN    EBL1                                                    DIMA256
          ADN    3                                                       DIMA256
          PJN    EBL2                                                    DIMA256
 EBL1     RJM    F10               FREE DISPLAY CH                       DIMA256
 EBLL     LDC    MSGDL*1S12+MSGD                                         DIMA256
          RJM    DIS                                                     DIMA256
          UJN    EBLL              LOOP ON DISPLAY                       DIMA256
 EBL2     EQU    *
          LDM    NMTBL1,EBLPD      FIX MESSAGE B
          STM    MSGBNM 
          LDM    NMTBL2,EBLPD 
          STM    MSGBNM+1 
*         DETERMINE WHICH CASE EXISTS 
          LDM    /CPA/DSPNLZ+6                                           DIMA357
          SHN    -6                                                      DIMA357
          LPN    7                                                       DIMA357
          SBN    3                                                       DIMA357
          ZJN    EBL5              IF DSPNL SET UP FOR DISK              DIMA357
          LDD    EBLPD
          ZJN    TOS               IF OSB LOAD
          LJM    TMS               IF DSB/MSB LOAD
 EBL5     LDD    EBLPD
          NJN    EBL6 
          LJM    DOS               IF OSB LOAD
 EBL6     LJM    DMS               IF DSB/MSB LOAD
          SPACE  4,10 
*         HERE IF TAPE OSB
 TOS      LDC    TOSP 
          LJM    /CTI/CDEP         CALL COMMON DRIVER TO LOAD ZZZ 
 TOSP     CON    BUFFER            LOAD ADDRESS 
          CON    TOS7              TRANSFER ADDRESS 
          CON    0
          VFD    18/3LZZZ,6/0      ZZZ
 TOS7     LDC    TOSR 
          LJM    /CTI/CDEP         CALL COMMON DRIVER TO LOAD NEXT
 TOSR     CON    /CTI/BOOTLOD      LOAD ADDRESS 
          CON    TOS50             TRANSFER ADDRESS 
          CON    0,0,0
 TOS50    RJM    CNM               CHECK NAME 
          ZJN    TOS90             IF OK
 TOS60    RJM    F10               FREE DISPLAY 
 TOS65    LDC    MSGAL*1S12+MSGA   HANG. OSB NOT FOUND
          RJM    DIS
          UJN    TOS65
          SPACE  4,10 
*         CREATE DEADSTART PASS-ON STATE
 TOS90    EQU    *
*         IF DSB LOAD, SET UP DDSMEM FIELD
          LDD    EBLPD
          SBN    1
          ZJN    TOS100            IF DSB LOAD
          LJM    TOS200            IF NOT DSB LOAD
 TOS100   LDN    8-1               CLEAR DDSMEM FIRST 
          STD    D1 
 TOS105   LDN    0
          STM    DDSCMRA,D1 
          SOD    D1 
          PJN    TOS105 
          LDM    /CPA/DSPNLZ+D13   GET ORIGINAL D13 
          SHN    -9 
          LPN    7
          SBN    3
          PJN    TOS120            IF I .GE. 3
*         HERE IF I .LT. 3, SET CM ACCORDING TO HDT.
          LDM    /CPA/CMSZ
          STM    DDSCMFL
          LDM    /CPA/CMSZ+1
          STM    DDSCMFL+1
          LJM    TOS160 
*         HERE IF I .GE. 3, USE COMPCMA TO SET CM.
 TOS120   LDC    CMABUF 
          RJM    CMA
*         FIND LARGEST PARTITION
          LDC    CMABUF 
          STD    D1 
 TOS130   LDM    1,D1 
          ZJN    TOS160            IF END OF TABLE REACHED
          LDM    2,D1              TEST UPPER FL BYTE 
          SBM    DDSCMFL
          MJN    TOS150            IF NOT LARGER
          NJN    TOS140            IF LARGER
          LDM    DDSCMFL+1         CHECK LOWER FL BYTE
          SBM    3,D1 
          PJN    TOS150            IF NOT LARGER
 TOS140   LDI    D1                REPLACE WITH NEW MAX 
          STM    DDSCMRA
          LDM    1,D1 
          STM    DDSCMRA+1
          LDM    2,D1 
          STM    DDSCMFL
          LDM    3,D1 
          STM    DDSCMFL+1
 TOS150   LDN    4                 ADVANCE TABLE POINTER
          RAD    D1 
          LJM    TOS130            CONTINUE SEARCH
*         SET UP ECS FIELDS.
 TOS160   EQU    *
          IF     DEF,CE.ECSRA 
          LDC    CE.ECSRA 
          SHN    6                 TIMES 100B 
          STM    DDSECRA+1
          SHN    -12
          STM    DDSECRA
          LDC    CE.ECSFL 
          SHN    6                 TIMES 100B 
          STM    DDSECFL+1
          SHN    -12
          STM    DDSECFL
          ENDIF 
          SPACE  4,10 
*         SET CHANNELS AS REQUIRED. 
 TOS200   EQU    *
          LDD    EBLPD
          ZJN    TOS250            IF OSB LOAD
          ACN    12B+40B
          ACN    13B+40B
          ACN    32B+40B
          ACN    33B+40B
          LDC    /CPA/PPP0
          RJM    ACH
          LDC    20B*1S12+/CPA/PPP1 
          RJM    ACH
*         IF OSB LOAD, LEAVE DEVICE CONNECTED 
 TOS250   LDD    EBLPD
          NJN    TOS300            IF NOT OSB LOAD
          RJM    CONLD             CONNECT LOAD DEVICE
          SPACE  4,10 
*         SCR BIT PROCESSING
 TOS300   IJM    NOSCR,CHSCR       IF NO SCR
          LDD    EBLPD
          ZJN    TOS310      IF OS LOAD 
          LJM    JUMP        IF NOT OS LOAD 
 TOS310   BSS    0
          LDC    FCSB+PPPE         STOP ON PP MEM ERROR 
          OAN    CHSCR+40B
          IAN    CHSCR+40B
          LDC    FCSB+PPCM         STOP ON CM READ ERROR
          OAN    CHSCR+40B
          IAN    CHSCR+40B
          LDC    FCSB+PPCT         2X PP SPEED
          OAN    CHSCR+40B
          IAN    CHSCR+40B
          LDM    /CPA/PPP1                                               DIMA256
          LMC    1777B                                                   DIMA256
          ZJN    TIX76             JUMP IF CH36 NOT PRESENT              DIMA256
          LDC    FCSB+PPPE         STOP ON PP MEM ERROR                  DIMA256
          OAN    SCR2+40B                                                DIMA256
          IAN    SCR2+40B                                                DIMA256
          LDC    FCSB+PPCM         STOP ON CM READ ERROR                 DIMA256
          OAN    SCR2+40B                                                DIMA256
          IAN    SCR2+40B                                                DIMA256
          LDC    FCSB+PPCT         2X PP SPEED                           DIMA256
          OAN    SCR2+40B                                                DIMA256
          IAN    SCR2+40B                                                DIMA256
 TIX76    LDM    /CPA/OPTN         TEST IF CYBER X76                     DIMA256
          LPC    3000B                                                   DIMA256
          ZJN    NOTX76            JUMP IF NOT CYBER X76                 DIMA256
          LDC    FCSB+SPUM         SELECT STOP ON PPU MEMORY PARITY ERRO SCRR5A0
          OAN    CHSCR+40B
          IAN    CHSCR+40B
 NOTX76   EQU    *
 NOSCR    EQU    *
 JUMP     LJM    /CTI/BOOTTRN 
          SPACE  4,10 
*         HERE IF TAPE DSB/MSB
 TMS      LDC    MSGCL*1S12+MSGC
          RJM    CQOD              CALL QOD 
          LJM    DMS60             JOIN COMMON LOGIC
          SPACE  4,10 
*         HERE IF DISK OSB
 DOS      EQU    *
          LDM    /CPA/OSDP+3       CHECK OSDP FLAG
          SHN    17-11
          MJN    DOS20             IF FLAG SET
*         READ SPECIFIED SECTOR FROM DEADSTART DEVICE 
 DOS10    LDM    /CPA/DSPNLZ+D10
          LPN    37B
          STD    CHAN              STORE D.S. CHANNEL 
          LDM    /CPA/DSPNLZ+D6 
          LPN    77B
          STD    UNIT              STORE D.S. UNIT
          LDC    /CPA/OSDP
          RJM    RED               READ DISK
          NJN    DOS40             IF SOME ERROR
          UJN    DOS30             IF GOOD READ 
*         READ SPECIFIED SECTOR FROM SPECIFIED DEVICE 
 DOS20    LDM    /CPA/OSDP+3
          LPN    77B
          STD    CHAN              STORE DEVICE CHANNEL 
          LDM    /CPA/OSDP+4
          STD    UNIT              STORE DEVICE UNIT
          LDC    /CPA/OSDP
          RJM    RED               READ DISK
          NJN    DOS40             IF SOME ERROR
 DOS30    RJM    CNM               CHECK IF NAME CORRECT
          NJN    DOS40             IF NOT OSB 
          RJM    MDSP              MODIFY D.S. PANEL
          LJM    TOS90             JOIN COMMON LOGIC
 DOS40    LDC    MSGBL*1S12+MSGB
          RJM    CQOD              CALL QOD 
          LDN    0                 SET DEADSTART-SECTOR READ
          RJM    RED               READ DISK
          NJN    DOS40             IF SOME ERROR
 DOS60    LDM    DSSBUF+/CPA/OSDP+3-/CTI/IPLA  GET FLAG WORD
          SHN    17-11
          MJN    DOS40             IF FLAG SET                           DIMA256
 DOS80    LDM    DSSTBL,EBLPD      REPLACE OS POINTER WORDS WITH
          STD    D1                  SAME FROM DEADSTART SECTOR 
          LDM    CPATBL,EBLPD 
          STD    D2 
          LDN    10 
          STD    D3 
 DOS85    LDM    DSSBUF,D1
          STI    D2 
          AOD    D1 
          AOD    D2 
          SOD    D3 
          NJN    DOS85
          LJM    DOS20
          SPACE  4,10 
*         HERE IF DISK DSB/MSB
 DMS      EQU    *
*         READ SECTOR POINTED AT BY DSB/MSB POINTER 
 DMS20    LDM    CPATBL,EBLPD 
          STD    D1 
          LDM    /CPA/DSPNLZ+D10
          LPN    37B         DEADSTART DEVICE CHANNEL NUMBER
          STD    CHAN 
          STM    3,D1        MODIFY CPA 
          LDM    /CPA/DSPNLZ+D6 
          LPN    77B         DEADSTART DEVICE UNIT NUMBER 
          STD    UNIT 
          STM    4,D1        MODIFY CPA 
          LDD    D1                ADDR(MSB/DSB DISK POINTER) 
          RJM    RED               READ DISK
          NJN    DMS40             IF SOME ERROR
          RJM    CNM               CHECK NAME 
          NJN    DMS40             IF WRONG 
          RJM    MDSP              MODIFY D.S PANEL 
          LJM    TOS90             JOIN COMMON LOGIC
 DMS40    LDC    MSGBL*1S12+MSGB
          RJM    CQOD              CALL QOD 
 DMS60    LDN    0                 SET DEADSTART SECTOR READ
          RJM    RED               READ DISK
          NJN    DMS40             IF SOME ERROR
 DMS80    LDM    DSSTBL+2          REPLACE MSB/DSB POINTER WITH          DIMA357
          STD    D1                  SAME FROM DEADSTART SECTOR 
          LDM    CPATBL+2                                                DIMA357
          STD    D2 
          LDN    20                                                      DIMA357
          STD    D3 
 DMS85    LDM    DSSBUF,D1
          STI    D2 
          AOD    D1 
          AOD    D2 
          SOD    D3 
          NJN    DMS85
          RJM    MDSP              MODIFY DEADSTART PANEL                DIMA357
          LJM    DMS20
          TITLE  SUBROUTINES
          SPACE  4,10 
**        ACH - ACTIVATE CHANNELS 
* 
*         ACH WILL EXAMINE A PPP-X AND RELATED LPP-X WORD 
*         OF THE HDT.  IF FOR PP-N, THE LPP BIT IS SET AND
*         THE PPP BIT IS NOT SET, THEN CHANNEL-N IS ACTIVATED.
* 
*         ENTRY  (A) = PPAAAA WHERE 
*                      PP = PP NUMBER CORRESPONDING TO
*                           LEAST SIGNIFICANT BIT.
*                      AAAA = ADDRESS OF PPP WORD.
 ACH      ENM    X                 ENTRY/EXIT 
          STD    D1                SAVE ADDRESS OF PPP WORD 
          SHN    -12
          STD    CHAN 
          LDI    D1 
          LMC    7777B
          STM    ACHA 
          LDM    /CPA/LPP0-/CPA/PPP0,D1 
          LPC    ** 
 ACHA     EQU    *-1
          SHN    1
          STD    D4                STORE SHIFTED LOGICAL PRODUCT
 ACH2     LDD    D4 
          SHN    -1 
          STD    D4 
          ZJN    ACHX              RETURN,NO MORE SET 
          LPN    1
          ZJN    ACH8              IF NOT SET 
          LDC    ACHT 
          RJM    ICN               INSERT CHANNEL NUMBER
 ACHE     IJM    ACHF,**           IF NOT ACTIVE
          RJM    F10               FREE DISPLAY CH                       DIMA256
 ACHL     LDC    MSGEL*1S12+MSGE                                         DIMA256
          RJM    DIS                                                     DIMA256
          UJN    ACHL              LOOP ON DISPLAY                       DIMA256
 ACHF     ACN    **                ACTIVATE CHANNEL 
 ACH8     AOD    CHAN              BUMP CHANNEL 
          UJN    ACH2              LOOP 
 ACHT     CON    ACHE,ACHF,0
          SPACE  4,10 
**        CNM - CHECK NAME
* 
*         CNM WILL CHECK THE NAME IN THE PRFX TABLE TO SEE
*         IF IT IS AS IT SHOULD BE DEPENDING ON EBLP. 
* 
*         EXIT   (A) = 0 IF CORRECT NAME
*              (A) .NE. 0 IF WRONG. 
 CNM      ENM    X                 ENTRY/EXIT 
          LDM    /CTI/BOOTLOD+NAME
          LMM    CNMTA,EBLPD
          NJN    CNMX              RETURN,WRONG 
          LDM    /CTI/BOOTLOD+NAME+1
          LMM    CNMTB,EBLPD
          UJN    CNMX              RETURN 
 CNMTA    DATA   H*OSDSMS*
 CNMTB    CON    1RB*100B,1RB*100B,1RB*100B 
          SPACE  4,10 
**        CQOD - CALL QOD FOR CONNECT CODE
* 
*         CQOD WILL FREE THE DISPLAY CHANNEL, SET UP AND CALL QOD,
*         RESET THE DISPLAY CHANNEL.
* 
*         ENTRY  (A) = LLAAAA 
*                      LL = LENGTH OF THE HEADER MSG
*                      AAAA = ADDRESS OF HEADER MSG 
* 
*         EXIT   (CHAN) = CHANNEL ENTERED BY OPERATOR 
*              (UNIT) = EQUIP/UNIT ENTERED BY OPERATOR. 
 CQOD     ENM    X                 ENTRY/EXIT 
          STM    CQODLO            SAVE A-REG 
          SHN    -12
          STM    CQODHI 
          RJM    F10               FREE DISPLAY CHANNEL 
          LDN    0
          STD    CHAN 
          STD    UNIT 
          LDN    CHAN 
          STD    REPADDR
          LDM    CQODHI            RESET A-REG
          SHN    12 
          LMM    CQODLO 
          RJM    /QOD/QOD          CALL QOD 
          RJM    R10               RESET DISPLAY CHANNEL
          UJN    CQODX             RETURN 
 CQODHI   CON    0
 CQODLO   CON    0
          SPACE  4,10 
**        DIS - DISPLAY MESSAGE ON DD60 
* 
*         DIS OUTPUTS A SPECIFIED BUFFER TO THE DISPLAY.
* 
*         ENTRY  (A) = LLAAAA WHERE 
*                      LL = LENGTH OF MESSAGE BUFFER
*                      AAAA = FWA OF MESSAGE BUFFER.
*                      IF LL = 0, THEN MSGLEN HAS LENGTH
 DIS      ENM    X                 ENTRY/EXIT 
          STM    DISB              STORE FWA OF MSG 
          SHN    6
          LPN    77B               ISOLATE LENGTH 
          NJN    DIS4 
          LDD    MSGLEN 
 DIS4     FNC    F.SEL+F.SLS+F.CHR+F.CHM,CHD
          ACN    CHD
          OAM    **,CHD            OUTPUT MSG 
 DISB     EQU    *-1
          FJM    *,CHD       WAIT FOR TRANSFER TO COMPLETE               IPLR5A0
          DCN    CHD
          SBN    40B         DISPLAY REFRESH DELAY
          MJN    *-1
          UJN    DISX              RETURN 
          SPACE  4,10 
**        F10 - FREE CHANNEL 10 
* 
*         F10 HANGS PP 10 ON CHANNEL 12 
 F10      ENM    X                 ENTRY/EXIT 
          IJM    F10X,CHD          IF CHANNEL 10 NOT ACTIVE 
          ACN    12B+40B
          LDN    F10L 
          OAM    F10A,CHD          SEND IDLE PROGRAM
          FJM    *,CHD
          DCN    CHD
          UJN    F10X              RETURN 
 F10A     CON    0                 IDLE PROGRAM 
          LDN    0
          IAM    0,12B
 F10L     EQU    *-F10A 
          SPACE  4,10 
**        MDSP - MODIFY DEADSTART PANEL 
* 
*         MDSP PLUGS (CHAN) AND (UNIT) INTO 
*         DEADSTART PANEL WORDS 5, 6, 7, 10.
  
 MDSP     ENM    X                 ENTRY/EXIT 
          LDD    CHAN 
          ADC    7100B
          STM    /CPA/DSPNLZ+D10
          ADC    7400B-7100B
          STM    /CPA/DSPNLZ+D7 
          ADC    7700B-7400B
          STM    /CPA/DSPNLZ+D5 
          LDD    UNIT 
          ADC    0300B             DEADSTART FUNCTION 
          STM    /CPA/DSPNLZ+D6 
          UJN    MDSPX             RETURN 
          SPACE  4,10 
**        R10 - RESET CHANNEL 10
* 
*         R10 RETURNS PP 10 TO THE DEADSTART STATE
 R10      ENM    X                 ENTRY/EXIT 
          FNC    0,CHD             GET DISPLAY OFF OF CHANNEL 10
          LDN    77B
          SBN    1
          NJN    *-1
          IJM    R103,CHD 
          DCN    CHD
 R103     IJM    R10X,12B          IF 12B INACTIVE
          ACN    CHD
          LDN    R10L 
          OAM    R10A,12B          SEND IDLE PROGRAM
          FJM    *,12B
          DCN    12B
          UJN    R10X              RETURN 
 R10A     CON    0                 IDLE PROGRAM 
          LDN    0
          IAM    0,CHD
 R10L     EQU    *-R10A 
          SPACE  4,10 
 ICN      SPACE  4,10 
**        ICN - INSERT CHANNEL NO.
* 
*         ICN INSERTS CHANNEL NO.S IN INSTRUCTIONS GIVEN
*         IN A LIST TERMINATED WITH A ZERO. 
* 
*         ENTRY  (A) = FWA OF CHANNEL LIST. 
*                (CHAN) = CHANNEL NO. 
* 
*         USES   D2, D3.
 ICN      ENM    X                 ENTRY/EXIT 
          STD    D2 
 ICN1     LDI    D2 
          ZJN    ICNX              IF LIST COMPLETE 
          STD    D3 
          LDI    D3 
          SCN    37B
          ADD    CHAN              ADD IN NEW CHANNEL NO. 
          STI    D3 
          AOD    D2 
          UJN    ICN1              CONTINUE PROCESSING
          SPACE  4,10 
          TITLE  DISK SUBROUTINES 
          SPACE  4,10 
          RICHI                    ENABLE CHANNEL MACROES 
 ART      SPACE  4,10 
**        ART - ADJUST RETRY COUNTER
* 
*         DECREMENT COUNTER AND 
*         RETURN TO CALLER IF COUNTER .GE. 0
*         ELSE GOTO ERROR IF ARTEC = 0
*                   RDSSERR IF ARTEC .NE. 0 
* 
 ART      ENM    X                 ENTRY/EXIT 
          SOD    RETRY
          PJN    ARTX              EXIT IF MORE RETRIES AVAILABLE 
          LDM    ARTEC             CHECK EXIT CODE
          NJN    ART5              IF SPECIAL EXIT
          RJM    F10               FREE DISPLAY CH                       DIMA256
 ARTL     LDC    MSGFL*1S12+MSGF                                         DIMA256
          RJM    DIS                                                     DIMA256
          UJN    ARTL              LOOP ON DISPLAY                       DIMA256
 ART5     LJM    0
 ARTEC    EQU    *-1
 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 
          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 
          SPACE  4,10 
**        CONLD - CONNECT TO LOAD DEVICE
* 
  
 CONLD    ENM    X                 ENTRR/EXIT 
          LDM    /CTI/CDTYPE
          SBN    /CTI/D844
          PJN    CONLD6            IF D.S. DEVICE IS DISK 
  
          LDC    CONLDC 
          LJM    /CTI/CDEP         CALL COMMON DRIVER TO CONNECT
  
 CONLDC   CON    0
          CON    CONLD2 
          CON    0
          CON    7777B,0           CONNECT REQUEST
  
 CONLD2   UJN    CONLDX            RETURN 
  
 CONLD6   LDM    /CPA/DSPNLZ+D10   HERE FOR DISK
          LPN    37B
          STD    CHAN 
          LDC    CHTB 
          RJM    ICN
          RJM    MDC               MOVE DEVICE CHANNEL PP 
          LJM    CONLDX            RETURN 
 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 
          STD    FCNF              SAVE FUNCTION CODE 
 FCN3     LDD    FCNF              GET FUNCTION CODE
          FAN    40B               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
          SPACE  4,10 
**        GDS - GET DETAIL STATUS 
* 
*         GDS GETS DETAIL STATUS INTO BUFFER *DETAIL* 
* 
*         EXIT   (DETAIL) = DETAIL STATUS 
 GDS      ENM    X                 ENTRY/EXIT 
 GDS2     LDN    /844/DDSS
          RJM    FCN
          RJM    AWD
          NJN    GDS5              IF DATA ON CHANNEL 
          RJM    ART
          UJN    GDS2 
 GDS5     LDN    DETAILL
          IAM    DETAIL,0 
          DCN    40B
          UJN    GDSX              RETURN 
 DETAIL   BSSZ   /844/SLNS
 DETAILL  EQU    *-DETAIL 
 GGS      SPACE  4,10 
**        GGS - GET GENERAL STATUS. 
* 
*         GGS ISSUES THE GENERAL STATUS FUNCTION  AND UPDATES 
*         THE DIRECT CELL *GENSTAT*.  THE STATUS IS ALSO RETURNED 
*         IN (A). 
* 
*         EXIT   (GENSTAT) = GENERAL STATUS REPLY.
*                (A) = GENERAL STATUS REPLY.
* 
 GGS2     RJM    ART               ASK TO RETRY 
          UJN    GGS3              TRY AGAIN
 GGS      ENM    X                 ENTRY/EXIT 
 GGS3     LDN    /844/DGST
          RJM    FCN               FUNCTION DEVICE
          RJM    AWD               ACTIVATE CHAN AND WAIT FOR DATA
          ZJN    GGS2              IF NO DATA COMING
          IAN    0                 READ STATUS
          DCN    40B
          STD    GENSTAT
          UJN    GGSX              RETURN 
          SPACE  4,10 
**        CON  - CONNECT DISK DRIVE 
* 
*         CON CONNECTS TO THE DISK UNIT AND WAITS FOR 
*         DRIVE NOT RESERVED. 
* 
*         ENTRY  (UNIT) = UNIT NUMBER 
*         EXIT   (A)    = GENERAL STATUS WORD 
* 
*         CALLS  FCN,GGS. 
  
  
 CON      ENM    X                 ENTRY/EXIT 
 CON2     LDN    /844/DCON
          RJM    FCN               ISSUE CONNECT FUNCTION 
          ACN    0
          LDD    UNIT 
          OAN    0                 CONNECT UNIT 
          FJM    *,0
          DCN    40B
          RJM    GGS               GET GENERAL STATUS 
          LPN    /844/MP.GSDR 
          NJN    CON2              IF DRIVE RESERVED
          LDD    GENSTAT
          UJN    CONX 
          SPACE  4,10 
**        WNB  - WAIT NOT BUSY
* 
*         WNB WAITS FOR DRIVE NOT BUSY STATUS.
* 
*         ENTRY  (A) = GENERAL STATUS WORD
*         EXIT   (A) = GENERAL STATUS WORD
* 
*         CALLS  GGS,CON. 
  
  
 WNB2     LDD    GENSTAT
 WNB      ENM    X                 ENTRY/EXIT 
          RJM    GGS
 WNB4     ZJN    WNBX              IF NOT BUSY AND NO ERRORS
          LPN    /844/MP.GSBS 
          ZJN    WNB2              IF NOT BUSY
          RJM    CON
          UJN    WNB4 
          SPACE  4,10 
**        MDC - MOVE DEVICE CHANNEL PP
* 
*         IF THE DEVICE CHANNEL IS ACTIVE,
*           MOVE PP(DEVICE CHAN) OVER TO CHANNEL 12B. 
* 
 MDC      ENM    X                 ENTRY/EXIT 
          IJM    MDCX,0            IF DEVICE CHAN INACTIVE
          ACN.   12B               ACTIVATE CHAN 12B
          LDN    MDCL              OUTPUT PROG TO PP(DEVICE 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 DEVICE CHANNEL PP 
* 
*         IF CHANNEL 12B ACTIVE,
*           MOVE PP ON CHAN 12B BACK TO DEVICE CHAN.
* 
 RDC      ENM    X                 ENTRY/EXIT 
          IJM.   RDCX,12B          IF CHAN 12B INACTIVE 
          ACN    0                 ACTIVATE DEVICE 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 
          SPACE  4,10 
**        RED - READ DISK 
* 
*         ENTRY  (A) = ADDR(CYL,TRK,SEC) TO READ INTO /CTI/BOOTLOD-2
*                (A) = 0 IF TO READ DEADSTART SECTOR INTO DSSBUF
*                (CHAN) = CHANNEL WHERE DEVICE IS 
*                (UNIT) = EQUIP/UNIT WHERE DEVICE IS. 
* 
*         RED WILL
*         FREE THE DEVICE CHANNEL,
*         INSERT THE CHANNEL NUMBER INTO THE DISK I/O INSTRUCTIONS, 
*         RESERVE THE CONTROLLER, 
*         GET GENERAL AND DETAIL STATUS,
*         DETERMINE AND SAVE THE DEVICE CHARACTERISTICS,
*         EITHER READ THE DEADSTART SECTOR OR BOOTSTRAP SECTOR, 
*         CHECK FOR ERRORS, 
*         RESET THE DEVICE CHANNEL PP,
*         AND RETURN TO THE CALLER. 
* 
*         EXIT   (A) = 0 IF GOOD READ ELSE NONZERO. 
 RED      ENM    X                 ENTRY/EXIT 
          STD    REDA              SAVE (A) 
          LDC    CHTB 
          RJM    ICN               INSERT CHANNEL NUMBER
          RJM    MDC               FREE DEVICE CHANNEL
          LDC    REDERR            SET ART EXIT ADDRESS 
          STM    ARTEC
  
          LDN    10B
          STD    RETRY       INITIALIZE RETRY COUNTER 
 RED2     RJM    GGS               GET GENERAL STATUS 
          SHN    17-10
          MJN    RED2 
 RED4     RJM    CON         WAIT FOR UNIT NOT RESERVED 
          SHN    17-11
          PJN    RED15
          RJM    ART
          UJN    RED4 
  
 RED15    RJM    GDS               GET DETAIL STATUS
*         DETERMINE DEVICE TYPE 
          LDM    DETAIL+/844/DSWRV
          SHN    17-10
          MJN    RED45            IF 885 OR 844-DOUBLE
          LDM    DETAIL+/844/DSWUD
          SHN    17-5 
          MJN    RED50            IF 844-DOUBLE 
          LDC    D44SD             HERE IF 844-SINGLE 
          UJN    RED70
 RED45    SHN    10-5 
          MJN    RED60            IF 885
 RED50    LDC    D44DD             HERE IF 844-DOUBLE 
          UJN    RED70
 RED60    LDC    D885              HERE IF 885
 RED70    STM    RED75A           MOVE DISK ATTRIBUTES INTO PLACE 
          LDN    D44DD-D44SD-1
          STD    D1 
 RED75    LDM    **,D1
 RED75A   EQU    *-1
          STM    DTYPE,D1 
          SOD    D1 
          PJN    RED75
          LDD    REDA 
          NJN    RED150 
          LJM    RED250            IF DEADSTART SECTOR READ 
 RED150   LDD    REDA 
          RJM    SEK               SEEK 
          LDN    /844/DRED
          RJM    FCN               ISSUE READ 
          ACN    40B
          LDC    DSLN 
          IAM    /CTI/BOOTLOD-2,0  READ ONE SECTOR
          DCN    40B
          RJM    WNB         GET GENERAL STATUS AND WAIT NOT BUSY 
          RJM    GDS               GET DETAIL STATUS
          LDD    GENSTAT
          ZJN    RED170            IF OK
          RJM    ART               ASK TO RETRY 
          UJN    RED150            TRY AGAIN
 RED170   LDN    /844/DOPC         RELEASE DISK CONTROLLER
          ERRNZ  /844/DOPC-/885/DOPC
          RJM    FCN
          RJM    RDC               RESET DEVICE CHANNEL 
          LDN    0                 SET GOOD 
          STM    ARTEC             RESET ART EXIT ADDR
          LJM    REDX              RETURN 
          SPACE  4,10 
*         HERE FOR DEADSTART SECTOR READ
 RED250   LDN    DSCYL
          RJM    SEK               SEEK 
          LDM    RDFTBL,DTYPE 
          RJM    FCN               READ OR READ-FLAWED
          ACN    40B
          LDC    DSLN 
          IAM    DSSBUF,0 
          DCN    40B
          RJM    WNB         GET GENERAL STATUS AND WAIT NOT BUSY 
          RJM    GDS
          LDD    GENSTAT
          NJN    RED260            IF ERROR 
          LJM    RED170            IF OK
 RED260   RJM    ART
          UJN    RED250            TRY AGAIN
          SPACE  4,10 
*         HERE IF SOME UNRECOVERABLE ERROR HAS OCCURRED.
 REDERR   LDN    0
          STM    ARTEC             RESET ART EXIT ADDR
          RJM    RDC               RESET DEVICE CHANNEL PP
          LDN    1                 SET BAD
          LJM    REDX              RETURN 
          SPACE  4,10 
 RDFTBL   CON    /885/DRED,/844/DRFS,/844/DRFS
 ADDR0    BSSZ   3
          SPACE  4,10 
 D44SD    CON    1,/844/MTKS,/844/MSRS
          CON    /844/CSDD,/844/TSDD,/844/SSDD
          CON    /844/DSSC,0,0
 D44DD    CON    2,/844/MTKS,/844/MSRS
          CON    /844/CDDS,/844/TDDD,/844/SDDD
          CON    /844/DSDC,0,0
 D885     CON    0,/885/MTKS,/885/MSRS
          CON    /885/CSDD,/885/TSDD,/885/SSDD
          CON    /885/DSSC,0,0
 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) = UNIT NUMBER 
*                (A) = ADDRESS OF CYL/TRACK/SECTOR VECTOR 
* 
*         RETURNS TO CALLER IF NO ERRORS
*         ELSE GO TO ERROR PROCESSOR
 SEK      ENM    X                 ENTRY/EXIT 
          STM    SEKB              STORE ADDRESS OF DISK ADDRESS
 SEK1     LDN    /844/D2SK
          RJM    FCN               SEEK 2:1 
          ACN    40B
          LDD    UNIT 
          OAN    0                 OUTPUT UNIT
          LDN    3
          OAM    **,0              OUTPUT CYL/TRACK/SECTOR
 SEKB     EQU    *-1
          FJM    *,0         WAIT FOR TRANSFER TO COMPLETE               IPLR5A0
          DCN    40B
          RJM    GGS               GET GENERAL STATUS 
          ZJN    SEKX              IF ON CYLINDER 
          LPN    /844/MP.GSBS 
          NJN    SEK1              IF BUSY
          RJM    ART               ASK TO RETRY 
          UJN    SEK1              TRY AGAIN
          SPACE  4,10 
          RSTC                     DISABLE CHANNEL INSTRUCTIONS 
          TITLE  DISPLAYS 
          SPACE  4,10 
 MSGA     EQU    *
 LINE     SET    5
          CON    YSET+762B-LINE*YINCR 
          CON    XSET+0 
          DATA   H*OSB NOT FOUND ON TAPE* 
 LINE     SET    LINE+3 
          CON    YSET+762B-LINE*YINCR 
          CON    XSET+0 
          DATA   H*DEADSTART ABORTED* 
 MSGAL    EQU    *-MSGA 
          SPACE  4,10 
 MSGB     EQU    *
 LINE     SET    5
          CON    YSET+762B-LINE*YINCR 
          CON    XSET+0 
 MSGBNM   DATA   H*XXX NOT FOUND ON DEVICE* 
 LINE     SET    LINE+3 
          CON    YSET+762B-LINE*YINCR 
          CON    XSET+0 
          DATA   H*ENTER ALTERNATE DEVICE LOCATION* 
 MSGBL    EQU    *-MSGB 
          SPACE  4,10 
 MSGC     EQU    *
 LINE     SET    5
          CON    YSET+762B-LINE*YINCR 
          CON    XSET+0 
          DATA   H*ENTER LOCATION*
 LINE     SET    LINE+3 
          CON    YSET+762B-LINE*YINCR 
          CON    XSET+0 
          DATA   H*OF CMSE/DDS DEVICE*
 MSGCL    EQU    *-MSGC 
                                                                         DIMA256
                                                                         DIMA256
                                                                         DIMA256
                                                                         DIMA256
 MSGD     EQU    *                                                       DIMA256
 LINE     SET    5                                                       DIMA256
          CON    YSET+762B-LINE*YINCR                                    DIMA256
          CON    XSET+0                                                  DIMA256
          DATA   H*EBLP OUT OF RANGE*                                    DIMA256
 MSGDL    EQU    *-MSGD                                                  DIMA256
                                                                         DIMA256
                                                                         DIMA256
                                                                         DIMA256
                                                                         DIMA256
 MSGE     EQU    *                                                       DIMA256
 LINE     SET    5                                                       DIMA256
          CON    YSET+762B-LINE*YINCR                                    DIMA256
          CON    XSET+0                                                  DIMA256
          DATA   H*CHANNEL ACTIVE ERROR*                                 DIMA256
 MSGEL    EQU    *-MSGE                                                  DIMA256
                                                                         DIMA256
                                                                         DIMA256
                                                                         DIMA256
                                                                         DIMA256
 MSGF     EQU    *                                                       DIMA256
 LINE     SET    5                                                       DIMA256
          CON    YSET+762B-LINE*YINCR                                    DIMA256
          CON    XSET+0                                                  DIMA256
          DATA   H*DISK RETRY COUNT ERROR*                               DIMA256
 MSGFL    EQU    *-MSGF                                                  DIMA256
          TITLE  BUFFERS
          SPACE  4,10 
*         CHTB - TABLE OF REDEFINED CHANNEL INSTRUCTIONS
 CHTB     CHTB
          SPACE  4,10 
*         TABLE OF OFFSETS OF POINTERS IN DEADSTART SECTOR
 DSSTBL   CON    /CPA/OSDP-/CTI/IPLA
          CON    /CPA/DSDP-/CTI/IPLA
          CON    /CPA/MSDP-/CTI/IPLA
          SPACE  4,10 
*         TABLE OF ADDRESSES OF POINTERS IN HIGH-CORE 
 CPATBL   CON    /CPA/OSDP,/CPA/DSDP,/CPA/MSDP
          SPACE  4,10 
*         TABLE OF NAMES TO PLUG MESSAGE B
 NMTBL1   DATA   H*OSDSMS*
 NMTBL2   DATA   H*B B B *
          SPACE  4,10 
**        CALL COMPQOD HERE.
*CALL     COMPQOD 
          SPACE  4,10 
*         CALL COMPCMA HERE 
          BASE    M 
          XTEXT  COMPCMA
          BASE    * 
          SPACE  4,10 
*         BUFFER USED WITH COMPCMA
 CMABUF   BSSZ   27*4 
          CON    0,0               END OF TABLE MARKER
          SPACE  4,10 
*         GENERAL I/O BUFFER
 BUFFERX  BSSZ   2                 EXTRA FOR LINKAGE BYTES
 BUFFER   EQU    *
 DSSBUF   EQU    BUFFER            DEADSTART SECTOR INPUT BUFFER
          END 
