          EJECT
*         CTEXT  CTP$DFT_REQUESTS_DUAL_I4
*
*         NOTE:  IF HCM$ IS DEFINED THE CPUS WILL BE HALTED BEFORE ANY
*                MEMORY REGISTERS ARE WRITTEN.
*         THIS DECK CONTAINS O.S. REQUESTS MADE ON DUAL I4 IOU SYSTEMS
 LDS      SPACE  4,15
**        LDS - LOAD DFT INTO SECONDARY IOU.
*
*         CALLS  IIB, LRP, MPB, SPB, SRS.
*
*         NOTE   LOADING OF *DFT* INTO THE SECONDARY IOU IS SEPARATED INTO
*                THREE PHASES:
*                PHASE 0:  A PACKET IS SENT TO LOAD A BOOT PROGRAM INTO
*                          IOU1.  THIS BOOT PROGRAM WILL LOAD DFT-S.
*                PHASE 1:  A PACKET IS SENT TO START EXECUTION OF THE LOADED
*                          PROGRAM.
*                PHASE 2:  *DFT* WAITS FOR DFT-S TO SIGNAL ITS COMPLETION OF
*                          PRESET BY CLEARING A BIT IN *D8ST*.


          ROUTINE  LDS

          LDML   DI4CW
          SHN    21-16
          PJN    LDS2        IF NO TIME OUT
          LDC    0#8000+PKETO
          STML   LDSQ
          LJM    LDS50       PERFORM ERROR EXIT PROCESSING

 LDS2     SHN    21-17-21+16+22
          PJP    LDS4        IF NO RESPONSE PENDING
          RJM    CRS         CHECK RESPONSE STATUS
          ZJP    LDSX        IF NO RESPONSE PACKET

*         RECEIVE RESPONSE PACKET.

          LDML   DI4CW       CLEAR RESPONSE PENDING
          LPC    0#7FFF
          STML   DI4CW
          LDN    40          REQUEST = RECEIVE PACKET
          STM    CALB+0
          LDC    TOIP        BUFFER ADDRESS = *2AP* BUFFER (AT 2000)
          STML   CALB+2
          LDN    MX          GET CHANNEL 15 INTERLOCK
          RJM    SCF         SET CHANNEL FLAG
          FNC    MXPT,MX     SELECT PORT
          AJM    *,MX
          CALL   PFC         CALL *2AP*
          FNC    MXDM,MX     DESELECT MUX
          AJM    *,MX
          CCF    *,MX        RELEASE CHANNEL 15 INTERLOCK
          CALL   CER         CHECK ERROR RESPONSE
          LDML   PES1
          STML   LDSQ
          LPC    PKWRP       RESET RESPONSE PENDING IF MISMATCH ON SEQUENCE NUMBER
          STDL   T1
          RAML   DI4CW
          LDDL   T1
          NJP    LDSX        IF MISMATCH ON SEQUENCE NUMBER
          LDM    LDSQ
          NJP    LDS50       IF ERROR ON REQUEST
          LDN    1           ADVANCE TO NEXT PHASE
          RAML   DI4CW
          LJM    LDSX        RETURN

 LDS4     LDM    DI4CW       CHECK CONTROL WORD (12 BITS - IGNORE RESPONSE PENDING)
          STD    T1
          SBN    LDSPL       CHECK VALIDITY OF PHASE
          PJP    ERR         IF NOT IN RANGE
          LDM    LDSP,T1     SET PHASE PROCESSOR
          STD    T2
          LJM    0,T2        EXECUTE PHASE

*         PHASE 0 - LOAD BOOT TO PP IN OTHER IOU.

 LDS10    LDN    VER6
          RJM    VCK         CHECK VERSION
          PJN    LDS15       IF VERSION 6 OR GREATER
          LDC    RCVI*0#100  VERSION NOT AT CORRECT LEVEL
          LJM    ERR10       RETURN NON-STANDARD RESPONSE

 LDS15    LDC    PKWIU       SET IN-USE FLAG
          RAML   DI4CW
          LDML   PKTCW
          LPC    PKWRP
          NJP    LDSX        IF RESPONSE IS PENDING FOR GENERAL REQUEST
          AOML   PKCT        INCREMENT RETRY COUNT
          RJM    LRP         LOAD REQUEST POINTER
          CRDL   W0          READ REQUEST
          LDDL   W2          GET PP NUMBER
          LPC    0#FF00
          RAML   LDSB
          LDN    IOSB        *READMR RDATA,IOCC,IOSB*
          STDL   RN
          LDM    I0CC
          RJM    RMR         READ MAINTENANCE REGISTER
          LDML   RDATA+5     SAVE OS BOUNDS
          STML   LDSD+OB
          LDML   RDATA+6
          STML   LDSD+OB+1
          LDML   RDATA+7
          STML   LDSD+OB+2
          LRD    DH+1        DFT WITHIN THE CIP DIRECTORY
          LDD    DH
          ADC    RR+1
          STML   LDSD+SC     SAVE A
          CRML   T3+LDSD,ON  READ DIRECTORY ENTRY
          LDDL   DH+1
          STML   LDSD+SC+1
          LDDL   DH+2
          STML   LDSD+SC+2
          LDN    DSEBP
          RJM    IIB         INDEX INTERFACE BLOCK
          CRML   LDSD+CD,ON  FETCH CIP DIRECTORY POINTER
          LDC    LDSAL*10000B+LDSA
          RJM    MPB         MOVE PACKET TO BUFFER

*         COMPLETE REQUEST.

          LDK    2*LDSAL-1   SET LENGTH OF PACKET IN 8-BIT BYTES
          STML   RTP2
          LDC    0*0#200+PKFTD  SET SEQUENCE LOCATION AND FUNCTION
          LJM    LDS70       ISSUE PACKET REQUEST

*         PHASE 1 - START BOOT EXECUTING IN SECOND IOU.

 LDS20    BSS    0           ENABLE THE MEMORY PORT TO SECONDARY IOU
          IF     DEF,HCM$
          RJM    HAC         HALT ALL CPUS
          ENDIF
          LOCKMR SET
          READMR RDATA,CMCC,ECMR
          LDM    RDATA+4
          SCN    20
          STM    RDATA+4
          WRITMR RDATA,CMCC,ECMR
          LOCKMR CLEAR
          IF     DEF,HCM$
          LDN    0
          RJM    SAC         START ALL CPUS
          ENDIF
          LDN    D8ST        SET DEADSTART DFT-S FLAG
          RJM    IIB         INDEX INTERFACE BLOCK
          CRDL   W0
          RJM    SPB         SET PP BOUNDS
          LDDL   W3
          LPC    0#F7FF
          LMC    0#800
          STDL   W3
          LDN    D8ST
          RJM    IIB         INDEX INTERFACE BLOCK
          CWDL   W0
          RJM    LRP         LOAD REQUEST POINTER
          CRDL   W0          READ REQUEST
          LDDL   W2          GET PP NUMBER
          LPC    0#FF00
          RAML   LDSG
          LDC    LDSFL*10000B+LDSF
          RJM    MPB         MOVE PACKET TO BUFFER
          LDK    2*LDSFL     SET LENGTH OF PACKET IN 8-BIT BYTES
          STML   RTP2
          LDC    1*0#200+PKFEP  SET SEQUENCE LOCATION AND FUNCTION
          LJM    LDS70       ISSUE PACKET REQUEST

*         PHASE 2 - VERIFY DFT-S PRESET COMPLETE.

 LDS30    LDN    D8ST
          RJM    IIB         INDEX INTERFACE BLOCK
          CRDL   W0
          LDN    0           NO ERROR
          STM    LDSQ
          LDDL   W3
          SHN    21-13
          PJN    LDS40       IF DFT-S PRESET COMPLETE
          LJM    LDSX        RETURN

*         COMPLETE REQUEST PROCESSING.

 LDS40    LDML   LDSQ
          NJN    LDS50       IF ERROR ON REQUEST
          LDN    0
          STML   DI4CW       CLEAR CONTROL WORD
          STML   PKTIM       CLEAR PACKET TIMING WORD
          LDC    0#100       SET REQUEST COMPLETE
          STM    JOBF
          RJM    SRS         RESPOND TO VE REQUEST
          LJM    LDSX        RETURN

*         COMMON ERROR EXIT PROCESSING.

 LDS50    LDM    DI4CW
          SBN    1
          MJP    LDS60       IF PHASE 1 HAS NOT BEEN PROCESSED
          IF     DEF,HCM$
          RJM    HAC         HALT ALL CPUS
          ENDIF
          LOCKMR SET         DISABLE THE SECONDARY IOU MEMORY PORT
          READMR RDATA,CMCC,ECMR
          LDM    RDATA+4
          SCN    20
          LMN    20
          STM    RDATA+4
          WRITMR RDATA,CMCC,ECMR
          LOCKMR CLEAR
          IF     DEF,HCM$
          LDN    0
          RJM    SAC         START ALL CPUS
          ENDIF
 LDS60    LDN    0
          STML   DI4CW       CLEAR CONTROL WORD
          STML   PKTIM       CLEAR PACKET TIMING WORD
          LDML   LDSQ
          LPC    0#FF
          LMN    PKETO       TIMEOUT ERROR
          ZJP    ERR         IF NOT RETRYABLE
          LDC    RCRR*0#100  RETRYABLE ERROR
          LJM    ERR10       RETURN NON-STANDARD RESPONSE

 LDS70    ADC    DI4CW*0#400-TPKT*0#400+1*0#400  START TIMING *DI4CW* REQUEST
          STML   RTP1
          CALL   PKT         PROCESS CONSOLE PACKETS VIA *2AP*
          LDC    PKWRP       SET RESPONSE PENDING
          RAML   DI4CW
          LDML   CALB+1
          STML   LDSQ        SAVE ERROR RESPONSE
          NJP    LDS40       IF ERROR ON REQUEST
 LDS80    LJM    LDSX        RETURN

*         PACKET FOR TRANSMITTING BOOT TO OTHER IOU.

 LDSA     CON    **          8/SOURCE PP, 8/SOURCE IOU
 LDSB     CON    1           8/DESTINATION PP, 8/DESTINATION IOU
 LDSC     CON    0           LOAD ADDRESS
 LDSD     BSS    0           START OF PROGRAM
          LOC    0
          CON    BTS-1
          BSS    2
 T3       CON    0,0,0,0     DIRECTORY ENTRY

 BTS      LDD    T3
          STD    BTSA
          LDD    SC
          ADC    RR+1
          LRD    SC+1
          CRML   **,T3+1
 BTSA     EQU    *-1         LOAD ADDRESS OF PROGRAM
          LDN    1           *DFT* IOU NUMBER
          STD    70
          LJM    100         START RUNNING PROGRAM

 RF       CON    0           *DFT* RESTART FLAG
          ERRNZ  RF-23       *DFT* PRESET MUST BE CHANGED
 OB       CON    0,0,0       OS BOUNDS
          ERRNZ  OB-24
          BSS    30-*
 SC       CON    0,0,0       ADDRESS OF PROGRAM DIRECTORY ENTRY
          CON    0           (UNUSED)
 CD       CON    0,0,0,0     POINTER TO CIP DIRECTORY
 LDSDL    BSS    0
          LOC    *O
 LDSE     CON    **          8/0, 8/SEQUENCE BYTE
 LDSAL    EQU    *-LDSA      LENGTH OF PACKET IF PP WORDS

*         PACKET FOR STARTING EXECUTION OF DFT-S.

 LDSF     CON    0           8/SOURCE PP, 8/SOURCE IOU
 LDSG     CON    1           8/DESTINATION PP, 8/DESTINATION IOU
 LDSH     CON    BTS         EXECUTION ADDRESS
 LDSI     CON    **          8/SEQUENCE BYTE, 8/EXECUTION TYPE
 LDSFL    EQU    *-LDSF      LENGTH OF PACKET IN PP WORDS

*         PHASE PROCESSORS.

 LDSP     BSS    0
          LOC    0
          CON    LDS10       PHASE 0 - LOAD BOOT
          CON    LDS20       PHASE 1 - START EXECUTION
          CON    LDS30       PHASE 2 - VERIFY DFT-S PRESET COMPLETE

 LDSPL    BSS    0           MAXIMUM PHASE + 1
          LOC    *O
 LDSQ     CON    0           ERROR INDICATOR
 MPB      SPACE  4,10
**        MPB - MOVE PACKET TO BUFFER.
*
*         ENTRY  (A) = 6/LENGTH, 12/FWA OF PACKET.
*
*         USES   T1 - T3.


 MPB      SUBR               ENTRY/EXIT
          STD    T1          FWA
          SHN    -14
          ADD    T1          LWA + 1 OF PACKET
          STD    T2
          LDC    TOIP        FWA OF BUFFER
          STD    T3
 MPB10    LDIL   T1
          STIL   T3
          AOD    T3
          AOD    T1
          SBD    T2
          MJN    MPB10       IF TRANSFER NOT COMPLETE
          UJP    MPBX        RETURN

*         END    CTP$DFT_REQUESTS_DUAL_I4
