          OVERLAY  (DUAL I4 PRESET FOR IOU1),4200

*         CTEXT  CTP$DFT_PRESET_DUAL_I4_OVL
*
*         THIS DECK CONTAINS A PRESET OVERLAY USED IN DUAL
*         IOU APPLICATIONS.
 BSB      SPACE  4,10
**        BSB - BUILD SECONDARY DFT BUFFER.
*
*         USES   T7, W0 - W7.
*
*         CALLS  IDA, IIB, SPB, *ERRH*.


          ROUTINE  BSB

*         RETRIEVE INFORMATION FROM PRIMARY *DFT* BUFFER.

          LDN    DSCM+3      READ POINTER TO PRIMARY *DFT* BUFFER
          RJM    IIB
          CRDL   W0
          LRD    W1          SET R-REGISTER
          LDDL   W0          READ *START OF TABLE* WORD
          ADC    RR
          SBN    1
          CRML   BSBA,ON
          CRML   BSBB,ON     READ CONTROL WORD
          ADK    MECP-1
          CRML   BSBM,ON     READ *DFT* MAINFRAME ELEMENTS COUNTER POINTER
          ADK    ECRP-MECP-1
          CRML   BSBN,ON     READ *DFT* ERROR CONTROL RECORD POINTER
          ADK    SSBP-ECRP-1
          CRDL   W4          READ *DFT* SUPPORTIVE STATUS BUFFERS POINTER
          ADK    NRSP-SSBP
          CRML   BSBK,ON     READ *DFT* NON REGISTER STATUS BUFFER POINTER
          ADK    DCMP-NRSP-1
          CRML   BSBE,ON     READ *DFT* CENTRAL MEMORY RESIDENT AREA POINTER
          ADK    PRDP-DCMP-1
          CRML   BSBL,ON     READ *DFT* PP REGISTER SAVE AREA POINTER
          LDML   BSBB        GET NUMBER OF POINTER WORDS
          SHN    -10
          STML   BSBG
          ADDL   W0          READ *END OF TABLE* WORD
          ADC    RR
          CRML   BSBF,ON
          LRD    W5          READ SUPPORTIVE STATUS HEADER WORD
          LDDL   W4
          ADC    RR
          CRML   BSBI,ON

*         CONSTRUCT NEW CONTROL WORD.

          LDML   BSBB        NUMBER OF POINTER WORDS
          LPC    0#FF00      START SEQUENCE AT ZERO
          STML   BSBB
          LDML   //PPNO      EXTRACT PP NUMBER
          LPC    0#FF
          STDL   T7
          LDML   BSBB+1      EXTRACT REVISION LEVEL
          LPC    0#FF00
          ADD    T7          ADD ASSIGNED PP NUMBER
          STML   BSBB+1
          LDML   BSBB+2      EXTRACT *LBUF*
          LPC    0#FF00
          LMN    1           SET NUMBER OF BUFFERS TO 1
          STML   BSBB+2
          LDN    0           SET ALL FLAGS TO ZERO
          STML   BSBB+3

*         CONSTRUCT NEW SUPPORTIVE STATUS HEADER WORD.

          LDN    1           NUMBER OF SUPPORTIVE STATUS BUFFERS
          STML   BSBI+2

*         CONSTRUCT POINTER WORDS.

          LDN    DSCM+3      GET POINTER TO SECONDARY *DFT* BUFFER
          RJM    IIB
          CRDL   W4
          LRD    W5
          LDDL   W4
          ADC    RR+SDBP
          CRDL   W4
          CRML   BSBC,ON
          SBN    1
          CRML   BSBD,ON
          SBN    1
          CRML   BSBJ,ON
          LDML   BSBG        NUMBER OF POINTER WORDS
          ADK    2           OFFSET FOR END/START TABLE WORDS
          RAML   BSBD        BUFFER CONTROL WORD POINTER OFFSET
          ADK    1+2         OFFSET FOR CONTROL WORD/END/START TABLE WORDS
          STML   BSBC        MAINTENANCE REGISTER BUFFER POINTER
          LDN    1           BUFFER CONTROL WORD POINTER LENGTH
          STML   BSBD+3
          LDML   BSBB+2      BUFFER LENGTH
          SHN    -10
          STML   BSBC+3      MAINTENANCE REGISTER BUFFER POINTER LENGTH
          STML   BSBH
          ADML   BSBC        OFFSET FOR MAINTENANCE REGISTER BUFFER
          ADK    2           OFFSET FOR END/START TABLE WORDS
          STML   BSBJ        SUPPORTIVE STATUS OFFSET
          LDML   BSBI+3      SUPPORTIVE STATUS ENTRY LENGTH
          ADK    1           ACCOUNT FOR HEADER WORD
          STML   BSBJ+3      SUPPORTIVE STATUS POINTER LENGTH

*         ENSURE THAT ENOUGH SPACE WAS ALLOCATED.

          ADML   BSBJ        LAST OFFSET
          SBDL   W4          OFFSET TO BUFFER START
          STDL   T7
          LDDL   W7          ALLOCATED SIZE
          SBDL   T7          NEEDED SIZE
          PJP    BSB1        IF ALLOCATED SIZE >= NEEDED SIZE

*         RESET THE DFT BUFFER POINTER TO THE PRIMARY CONTROL BLOCK.

          LDN    DSCM+3
          RJM    IIB         INCREMENT INTERFACE BLOCK
          CRDL   DP
          SETDAN (EPUN,DASB) SECONDARY BUFFER TOO SMALL
          LDD    T7
          STM    BSBER+3
          LDD    W7
          STM    BSBER+2
          LDN    NRSP        NON REGISTER STATUS BUFFER
          RJM    IDA         INCREMENT DFT ADDRESS
          CRDL   W0
          LRD    W1
          LDDL   W0
          ADC    RR+NRSBL+1  BASE SIZE + HEADER WORD
          CWML   BSBER,ON     WRITE ERROR CODE TO SCRATCH SUPPORTIVE STATUS
          LDN    NRSBL
          STM    LLOG        LENGTH TO LOG
          LDC    DASB+TDFT
          STML   RTP1
          CALL   ERRH        LOG THE ERROR

*         ZERO OUT SECONDARY DFT BUFFER.

 BSB1     LDN    CM          ZERO OUT *CM - CM+3*
          RJM    CLR         CLEAR DIRECT CELLS
          LDN    0           COUNT OF WORDS ZEROED OUT
          STDL   T1
 BSB2     LDD    T1          ZERO NEXT WORD
          RJM    IDA         INCREMENT DFT ADDRESS
          CWDL   CM
          AODL   T1
          SBDL   T7
          MJN    BSB2        IF MORE WORDS TO ZERO OUT

*         WRITE STRUCTURE TO MEMORY.

          LRD    W5
          RJM    SPB         SET PP BOUNDS
          LDN    HDRP        WRITE CONTROL WORD
          RJM    IDA
          CWML   BSBB,ON     WRITE CONTROL WORD
          ADK    MRBP-HDRP-1 WRITE MRB POINTER
          CWML   BSBC,ON
          ADK    BCWP-MRBP-1 WRITE MRB CW POINTER
          CWML   BSBD,ON
          ADK    MECP-BCWP-1 WRITE MAINFRAME ELEMENT COUNTERS POINTER
          CWML   BSBM,ON
          ADK    ECRP-MECP-1 WRITE ERROR CONTROL RECORD POINTER
          CWML   BSBN,ON
          ADK    SSBP-ECRP-1 WRITE SUPPORTIVE STATUS BUFFER POINTER
          CWML   BSBJ,ON
          ADK    NRSP-SSBP-1 WRITE NON REGISTER STATUS BUFFER POINTER
          CWML   BSBK,ON
          ADK    DCMP-NRSP-1 WRITE CENTRAL MEMORY RESIDENT AREA POINTER
          CWML   BSBE,ON
          ADK    PRDP-DCMP-1 WRITE PP SAVE AREA POINTER
          CWML   BSBL,ON
          ADK    SDBP-PRDP-1+1  SKIP SECONDARY DFT BUFFER POINTER
          CWML   BSBF,ON     WRITE *END OF TABLE*
          CWML   BSBA,ON     WRITE *START OF TABLE*
          ADK    1
          CWML   BSBF,ON     WRITE *END OF TABLE*
          CWML   BSBA,ON     WRITE *START OF TABLE*
          ADML   BSBH
          CWML   BSBF,ON     WRITE *END OF TABLE*
          CWML   BSBA,ON     WRITE *START OF TABLE*
          CWML   BSBI,ON     WRITE SUPPORTIVE STATUS HEADER WORD
*         ADML   BSBI+3
*         CWML   BSBF,ON     WRITE *END OF TABLE*
          UJP    BSBX        RETURN

 BSBER    BSSZ   4           BUFFER FOR ERROR
 BSBA     BSSZ   4           *START OF TABLE*
 BSBB     BSSZ   4           CONTROL WORD
 BSBC     BSSZ   4           MRB POINTER
 BSBD     BSSZ   4           MRB CW POINTER
 BSBE     BSSZ   4           CENTRAL MEMORY RESIDENT AREA
 BSBF     BSSZ   4           *END OF TABLE*
 BSBG     CON    0           NUMBER OF POINTER WORDS
 BSBH     CON    0           LENGTH OF MRB
 BSBI     BSSZ   4           SUPPORTIVE STATUS HEADER WORD
 BSBJ     BSSZ   4           SUPPORTIVE STATUS POINTER
 BSBK     BSSZ   4           NON RESIDENT STATUS BUFFER POINTER
 BSBL     BSSZ   4           PP REGISTER SAVE AREA POINTER
 BSBM     BSSZ   4           MAINFRAME ELEMENT COUNTERS POINTER
 BSBN     BSSZ   4           ERROR CONTROL RECORD POINTER
 IAD      SPACE  4,15
**        IAD - IDLE ALL I/O DRIVERS IN IOU1.
*
*         EXIT   FOR IOU1, ALL PPS IN THE MAP IDLED AND CHANNELS
*                DCN-D.
*
*         NOTE   ON AN S0, CHANNELS IN CLUSTER 2 ARE *NOT* DCN-D.
*
*         CALLS  IVP.
*
*         USES   T1 - T4, W0 - W3.


          ROUTINE  IAD

          RJM    IDI         IDLE IOU1
          LJM    IADX        RETURN
          SPACE  4,10
**        COMMON DECKS.


*copy     ctp$dft_idle_iou1
*copy     dsi$dump_load_idle_pp
          SPACE  4,10
          OVERFLOW  5700

*         END    CTP$DFT_PRESET_DUAL_I4_OVL
