*DECK     IPL 
          IDENT  IPL,IPLFWA 
          PERIPH
*CALL,VERS
          TITLE  IPL         CTI INITIAL PROGRAM LOADER - "VERS"
          COMMENT CTI INITIAL PROGRAM LOADER - "VERS" 
          COMMENT COPYRIGHT CONTROL DATA CORPORATION, 1979
*CALL,CDCCRN
 IPL      SPACE  4,10 
*****     IPL - INITIAL PROGRAM LOADER -CTI-. 
* 
*         R. A. MATTHEWS.          12/15/77.
* 
*         IPL IS THE INITIAL PROGRAM IN THE COMMON TEST/INITIALIZATION
*         PACKAGE (CTI) FOR TAPE AND DISK DEADSTART.  IPL 
*         INITIATES THE CTI SEQUENCE AND READS IN A MORE ADEQUATE 
*         DEVICE DRIVER FOR THE REST OF CTI PROCESSING. 
          SPACE  4,10 
***       IPL - INITIAL PROGRAM LOADER -CTI-. 
* 
*         IPL IS THE FIRST PROGRAM LOADED FROM THE COMMON TEST/INITIAL
*         -IZATION PACKAGE (CTI). IPL CHECKS THE DEADSTART DEVICE TYPE
*         FROM THE DEADSTART PANEL SETTING AND READS IN THE APPROPRIATE 
*         DRIVER. IF THE DEVICE IS TAPE, IPL READS A GIVEN NO. OF 
*         RECORDS BEFORE TRANSFERING CONTROL TO THE DRIVER. FOR 67X 
*         (ATS) TAPE, THE FIRST RECORD AFTER IPL IS LOADED AND EXECUTED 
*         FOR 66X (MTS) TAPE, THE SECOND RECORD AFTER IPL IS LOADED.
*         FOR 3000 TYPE TAPE DRIVES, THE THIRD RECORD IS LOADED.
*         FOR DISK DEADSTARTS, THE DRIVER IS LOADED FROM THE CTI AREA 
*         ON THE DISK (SEE INSTALL UTILITY) BY ABSOLUTE DISK ADDRESS
*         FOUND IN THE COMMON POINTER AREA. 
          TITLE  DEFINITIONS. 
 DSP      SPACE  4,10 
**        DEADSTART PANEL WORDS.
* 
*         WORDS 5 - 20B OF THE DEADSTART PANEL MUST REMAIN INTACT 
*         DURING IPL 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 
 SCR      SPACE  4,10 
**        STATUS AND CONTROL REGISTER CHANNEL DEFINITIONS.
* 
 CHSCR    EQU    16B
 F.CLR    EQU    2000B             CLEAR SCR BIT
 F.SET    EQU    4000B             SET SCR BIT
 B.2XSP   EQU    124B              2X PPU SPEED 
 MSC      SPACE  4,10 
**        MISCELLANEOUS DEFINITIONS.
* 
* 
 FWDL$    EQU    0                 DEFINE FORWARD LINK FOR CHANNEL INST.
          TITLE  DEFINITION COMMON DECKS. 
          SPACE  4,10 
**        DEFINITION COMMON DECKS.
* 
**        ALL SYMBOL AND MACRO DEFINITION COMMON DECKS ARE CALLED HERE. 
*CALL     COMPCTI 
*CALL     COMSCPA 
*CALL     COMSCTI 
*CALL     COMS844 
*CALL     COMS885 
*CALL     COMSMTS 
*CALL     COMSATS 
*CALL     COMS3TP 
*CALL     COMPCHL 
 CPAFWA   EQU    /CTI/CPAFWA
 IPLFWA   EQU    /CTI/IPLFWA
          TITLE  IPL - MAIN PROGRAM.
          ORG    IPLFWA 
IPL       SPACE  4,10 
***       IPL - INITIAL PROGRAM LOADER. 
* 
*         IPL FIRST STUFFS THE APPROPRIATE DEADSTART CHANNEL NO. INTO 
*         IT-S AND IT-S SUBROUTINES CHANNEL INSTRUCTIONS. THEN IPL
*         DETERMINES THE DEADSTART DEVICE TYPE FROM THE D/S PANEL 
*         SETTING AND SETS UP THE DRIVER RECORD NO. TO BE LOADED. THIS
*         RECORD NUMBER IS ONLY USED WHEN READING FROM TAPE, FROM DISK
*         THE DRIVER POINTER WORD CONTAINS THE EXACT ADDRESS OF THE 
*         DISK DRIVER. IPL THEN READ N RECORDS (N = DRIVER RECORD NO.)
*         AND TRANSFERS CONTROL TO THIS BLOCK OF CODE.
* 
*         VALUES FOR THE DRIVER TYPE (DRIVER RECORD NO.) ARE AS FOLLOWS:  
* 
*         EQUIPMENT TYPE           DRIVER TYPE
* 
*         67X TAPE                      01B 
*         66X TAPE                      02B 
*         65X/607 TAPE                  03B 
*         844 DISK                      11B 
*         885 DISK                      12B 
 IPL      IJM.   IPL01,CHSCR       IF NOT CYBER 170 
          LDC    F.SET+B.2XSP 
          OAN.   CHSCR             SET 2X SPEED 
          IAN.   CHSCR
 IPL01    LDC    IPLZ              FIRST CHANNEL INSTRUCTION
          STD    D2                POINTER TO CHANNEL INST. 
          LDD    D10               GET CHANNEL INST. FROM D/S PANEL 
          LPN    37B
          STD    D3                SAVE FOR CHANNEL STUFFING
          LDN    0
 IPL02    RAD    D2                CHANNEL INST. POINTER + BIAS 
          LDI    D2                GET INSTRUCTION
          LPN    37B               MASK FOR LINK TO NEXT INST.
          STD    D4                SAVE FOR UPDATE
          LDD    D3                GET CHANNEL NO.
          SBD    D4                SUBRACT LINK FROM CHANNEL NO.
          RAI    D2                ADD CHANNEL NO. - LINK TO OLD INST.
          LDD    D4                CHECK FOR ZERO 
          NJN    IPL02             CONTINUE PROCESSING INSTRUCTIONS 
*         CHANNEL INSTRUCTIONS ARE NOW READY FOR USE. A CHECK IS MADE 
*         TO DETERMINE THE DEADSTART MEDIUM.
          LDD    D5                D/S PANEL WORD 5 
          ZJN    IPL03             IF TAPE DEADSTART
          LJM    IPL10             IF DISK DEADSTART
 IPL03    LDD    D7 
          SHN    6
          PJN    IPL07             IF 3000 TYPE TAPE
*         IT HAS BEEN DETERMINED THAT THE DEADSTART DEVICE IS EITHER
*         ATS OR MTS TAPE. THE READ AND ERROR CHECKING IS DONE NEXT.
          LDD    D6                FUNCTION WORD
          LPC    7000B
          STM    FCNA              SAVE EQUIPMENT NO. 
          LDD    D6 
          SHN    -6 
          LPN    5                 MASK OUT DENSITY AND EQP. NO 
          NJN    IPL04             IF ATS, SET TO SKIP REREAD CHECK 
          STM    IPLA              MTS/ATS TYPE DESIGNATOR (0 = MTS)
          AOD    D4                SET NO. OF RECORDS TO SKIP FOR MTS 
          ERRNZ  /CTI/D66X-/CTI/D67X-1
 IPL04    LDN    /MTS/MRFW         READ FORWARD FUNCTION
          ERRNZ  /MTS/MRFW-/ATS/ARFW
 IPL05    RJM    FAI               FUNCTION AND READ
          LDN    /MTS/MGST         GENERAL STATUS 
          ERRNZ  /MTS/MGST-/ATS/AGST
          RJM    STS               GET GENERAL STATUS 
 IPLA     UJN    IPL06             IF ATS, SKIP NOISE CHECK 
*         PSN                      (IF MTS) 
          SHN    /MTS/SL.GSNO      CHECK IF NOISE READ
          PJN    IPL06             IF NOT NOISE RECORD
          LDN    /MTS/MRRF         REREAD FORWARD 
          UJN    IPL05             REPROCESS
 IPL06    SOD    D4                DECREMENT SKIP COUNT 
          PJN    IPL04             IF MORE RECORDS TO READ
          UJN    IPL09             EXIT 
*         DEADSTART DEVICE IS A 3000 TYPE TAPE DRIVE, AND A SIMPLE READ 
*         IS DONE NEXT. 
 IPL07    LDN    /CTI/D3TP         3000 TAPE RECORD NO. 
          STD    D4                DRIVER RECORD NO.
 IPL08    LDC    /3TP/CIEI+/3TP/CMDA  READ ONE BINARY RECORD
          RJM    FAI               FUNCTION AND INPUT 
          SBN    /3TP/MBLN         MIN. NO. OF BYTES TO ACCEPT
          MJN    IPL08             IF NOISE RECORD, REREAD
          SOD    D4                DECREMENT DRIVER RECORD NO.
          NJN    IPL08             IF MORE RECORDS TO READ
*         ALL RETURNS ARE PROCESSED THROUGH THIS ADDRESS. 
 IPL09    LJM    /CTI/IPLTRAN      JUMP TO FIRST EXEC. INST.
*         THE DEADSTART DEVICE IS A DISK, SO PROCESS READ FROM DISK.
 IPL10    LDM    /CPA/CIDP+2       SAVE DISK ADDRESS
          STM    IPLB 
          LDD    D6 
          LPN    77B
          STM    /CPA/CIDP-1       UNIT NO. FOR SEEK
 IPL11    LDN    /844/D2SK         SEEK 2:1 
          ERRNZ  /844/D2SK-/885/D2SK
          RJM    FCN
          ZJN    IPL11             IF FUNCTION REJECTED 
****
*         THE FOLLOWING SYMBOL, *IPLZ*, MUST DEFINE THE LOCATION OF 
*         THE FIRST CHANNEL INSTRUCTION USING THE DEADSTART DEVICE
*         CHANNEL.  THIS SYMBOL IS USED TO MARK THE INSTRUCTION IN
*         WHICH THE FIRST FORWARD LINK IS DEFINED.
*         SUCH A MEASURE IS NECCESARY TO ENSURE PROPER CHANNEL
*         DEFINITION WHEN USING *COMPCHL*.
 IPLZ     BSS    0                 FIRST CHANNEL INSTRUCTION
****
          ACN    40B               ACTIVATE CHANNEL 
          LDN    4
          OAM    /CPA/CIDP-1,0     OUTPUT SEEK PARAMETER ARRAY
          FJM    *,0                                                     IPLR5A0
          DCN    40B
          LDN    /844/DGST
          ERRNZ  /844/DGST-/885/DGST
          RJM    STS               GET GENERAL STATUS 
          LPN    /844/MP.GSBS+/844/MP.GSDR                               DIMA206
          ERRNZ  /844/MP.GSBS-/885/MP.GSBS
          NJN    IPL11             IF DRIVE BUSY
          LDN    /844/DRED         READ FUNCTION
          ERRNZ  /844/DRED-/885/DRED
          RJM    FAI
          RJM    CLS               CHECK FOR LAST SECTOR
          PJN    IPL11             IF MORE TO READ
          LDM    IPLB 
          STM    /CPA/CIDP+2       RESTORE DISK ADDRESS 
          LJM    IPL09
 IPLB     CON    0
          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 RECIEVED, CHANNEL DISCONNECTED. 
 AWD      ENM    X                 ENTRY/EXIT 
          LCN    0
          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 
 FAI      SPACE  4,10 
**        FAI - FUNCTION AND INPUT. 
* 
*         FAI FUNCTIONS THE DEVICE WITH THE FUNCTION CODE PASSED
*         IN THE A REGISTER. IT THEN ACTIVATES THE CHANNEL AND WAITS FOR
*         DATA ON THE CHANNEL. IF NO DATA IS SENT, FAI REISSUES THE 
*         FUNCTION AND TRIES AGAIN.  IF DATA IS PRESENT, FAI READS
*         FROM THE CHANNEL TO THE PP STARTING AT THE LOCATION SPECIFIED 
*         BY *FAIA*.
* 
*         ENTRY  (A) = FUNCTION CODE. 
*                (D5) = 0, IF TAPE DEADSTART. 
*                (FAIA) = ADDRESS FOR BUFFER. 
* 
*         EXIT   (A) = NO. OF BYTES TRANSFERRED.
*                (CLSA - CLSA+1) = LINKAGE BYTES, IF DISK DEADSTART.
* 
*         USES   D2.
* 
*         CALLS  FCN, AWD.
 FAI      ENM    X                 ENTRY/EXIT 
          STD    D2                SAVE FUNCTION
 FAI1     LDD    D2 
          RJM    FCN               FUNCTION DEVICE
          ZJN    FAI1              IF FUNCTION REJECT 
          ACN    40B
          LDN    0
 FAI2     IAM    /CTI/IPLB,0       READ (SET UP FOR READ FROM TAPE) 
 FAIA     EQU    *-1
          LMC    777777B
          ADN    1                 NO. OF BYTES READ
          UJN    FAIX              RETURN 
 FCN      SPACE  4,10 
**        FCN - FUNCTION DEVICE.
* 
*         ENTRY  (A) = FUNCTION CODE. 
*                (FCNA) = EQUIPMENT NO. * 1000B.
* 
*         EXIT   (A) .NE. 0, FUNCTION ACCEPTED. 
*                (A) = 0, FUNCTION REJECTED.
 FCN      ENM    X                 ENTRY/EXIT 
          ADC    0                 ADD IN EQUIPMENT NO. 
 FCNA     EQU    *-1               EQUIPMENT NO. * 1000B
          FAN    40B               ISSUE FUNCTION 
          LCN    0
 FCN1     IJM    FCNX,0            IF FUNCTION ACCEPTED, RETURN 
          SBN    1
          NJN    FCN1              IF TIMEOUT NOT EXPIRED 
          DCN    40B         NO HANG ON SECOND FUNCTION 
          UJN    FCNX              RETURN 
 STS      SPACE  4,10 
**        STS - STATUS DEVICE.
* 
*         ENTRY  (A) = STATUS FUNCTION CODE.
* 
*         EXIT   (A) = STATUS RETURNED. 
* 
*         CALLS  FCN, AWD.
* 
*         USES   D2.
 STS1     IAN    40B               INPUT STATUS 
          STM    STSA 
          DCN    40B               DISCONNECT CHANNEL 
 STS      ENM    X                 ENTRY/EXIT 
          STD    D2                SAVE FOR REISSUE 
 STS2     RJM    FCN               ISSUE STATUS FUNCTION
          ZJN    STSX              IF NOT ACCEPTED, RETURN
          RJM    AWD               ACITVATE AND WAIT FOR DATA 
          NJN    STS1              IF STATUS ON CHANNEL 
          LDD    D2                GET FUNCTION FOR REISSUE 
          UJN    STS2              REISSUE FUNCTION 
 STSA     CON    0
 CLS      SPACE  4,10 
**        CLS - CHECK FOR LAST SECTOR.
* 
*         CLS CHECKS TO SEE IF THE LAST INPUT READ THE LAST SECTOR FROM 
*         DISK BY CHECKING THE LINKAGE BYTES. CLS ALSO MOVES THE DATA 
*         BLOCK OVER THE LINKAGE BYTES. 
* 
*         ENTRY  (FAIA) = INPUT FWA.
* 
*         EXIT   (A) NEGATIVE, IF LAST SECTOR.
*                (FAIA) = INPUT FWA + 500B. 
*                (/CPA/CIDP+2) = NEW SECTOR NUMBER. 
* 
*         USES   D0, D2, D3,D4. 
 CLS      ENM    X                 ENTRY/EXIT 
          LDN    /844/DGST
          ERRNZ  /844/DGST-/885/DGST
          RJM    STS               GET GENERAL STATUS 
          LDC    /CPA/PRU 
          STD    D2 
          RAM    FAIA              BUMP READ ADDRESS
          SBD    D2 
          STD    D4                SAVE OLD FWA 
          ADN    2
          STM    CLSA              FWA OF DATA BLOCK
          LDM    1,D4 
          RAM    /CPA/CIDP+2       BUMP DISK ADDRESS
          LDI    D4 
          STD    D0                SAVE SECTOR LENGTH 
          LDN    0
          STD    D3 
 CLS1     LDM    **,D3
 CLSA     EQU    *-1
          STI    D4 
          AOD    D4 
          AOD    D3 
          SBD    D2 
          NJN    CLS1              IF MOVE NOT COMPLETE 
          LDD    D0 
          SBD    D2 
          LJM    CLSX              RETURN 
          SPACE  4,10 
          ERRNG  /CPA/IPLLWA-*+1     IPL OVERFLOWED 
          TITLE  COMMON POINTER AREA. 
          ORG    CPAFWA 
 CPA      SPACE  4,10 
***       CPA - COMMON POINTER AREA.
* 
*         THE COMMON POINTER AREA (CPA) DEFINES THE POINTER AREA USAGE
*         FOR BOTH DEADSTART FROM DISK AND TAPE. IN GENERAL, THE
*         POINTER WORD IS ONE CM WORD LONG. IF DEADSTART IS FROM TAPE,
*         THE WORD CONTAINS A THREE CHARACTER, LEFT JUSTIFIED AND 
*         ZERO FILLED NAME WHICH IS SEARCHED FOR BY READING RECORDS 
*         INTO THE PP AND CHECKED FOR !Y COMPARING ON THE NAME FIELD IN 
*         THE PREFIX TABLE. IF THE DEADSTART IS FROM DISK, THE FIRST
*         THREE 12-BIT BYTES OF THE WORD CONTAI THE CYLINDER, TRACK 
*         AND SECTOR NO-S. RESPECTIVILY.
 CTI      SPACE  4,10 
**        DRIVER POINTER. 
* 
*         THIS WORD CONTAINS THE DISK ADDRESS OF THE
*         APPROPRIATE DISK DRIVER WHEN THE DEADSTART
*         HAS OCCURRED FROM DISK. 
 CIDP     BSS    /CPA/CIDP-*
          VFD    18/3LCD4,42/0
 IOQ      SPACE  4,10 
**        CTI CYLINDER POINTER. 
* 
*         THIS WORD CONTAINS THE DISK ADDRESS OF THE
*         FIRST CTI MODULE (IPL) IN THE CTI CYLINDER. 
 CIRP     BSS    /CPA/CIRP-*
          VFD    18/3LIPL,42/0
 CMS      SPACE  4,10 
**        CMSE POINTER ADDRESS. 
*         THE CMSE POINTER ADDRESS HAS THE ADDRESS OF THE CMSE SUPPLIED 
*         BOOTSTRAP LOADER. 
 MSDP     BSS    /CPA/MSDP-*
          VFD    60/0 
 DDS      SPACE  4,10 
**        DIAGNOSTIC SEQUENCER POINTER ADDRESS. 
* 
*         THE DIAGNOSTIC SEQUENCER POINTER ADDRESS HAS THE ADDRESS OF 
*         THE BOOTSTRAP FOR THE DEADSTART DIAGNOSTIC SEQUENCER. 
 DSDP     BSS    /CPA/DSDP-*
          VFD    60/0 
 OSB      SPACE  4,10 
**        OPERATING SYSTEM POINTER ADDRESS. 
* 
*         THE OPERATING SYSTEM POINTER HAS THE NAME OR THE ADDRESS OF 
*         THE OPERATING SYSTEM BOOTSTRAP ROUTINE. 
 OSDP     BSS    /CPA/OSDP-*
          VFD    18/3LOSB,42/0
 LOAD     SPACE  4,10 
**        SET UP DEADSTART TRANSFER ADDRESS.
          BSS    10000B-* 
          CON    IPLFWA-1          FWA -1 OF EXECUTABLE CODE
          END 
