          TITLE  SUBROUTINES.
*         CTEXT  CTP$DFT RESIDENT COMMON.
*
*         THIS COMMON DECK DEFINES RESIDENT ROUTINES COMMON TO ALL
*         VARIANTS OF DFT.
 COL      SPACE  4,10
**        COL - CHECK IF OVERLAY LOAD REQUIRED.
*
*         AN OVERLAY LOAD IS UNNECESSARY IF ANY OF THE FOLLOWING IS TRUE:
*         (1) OVERLAY NUMBER IS 0 (DFT RESIDENT IS ALWAYS LOADED).
*         (2) OVERLAY NUMBER IS 1 (DFT RESIDENT II IS ALWAYS LOADED).
*         (3) OVERLAY NUMBER MATCHES LAST OVERLAY LOADED (CUOV).
*
*         ENTRY  (A) = OVERLAY NUMBER REQUIRED.
*
*         EXIT   SPECIFIED OVERLAY LOADED IF NECESSARY.
*                (CUOV) UPDATED IF OVERLAY WAS ACTUALLY LOADED.
*
*         USES   T0.
*
*         CALLS  LOV.


 COL      SUBR               ENTRY/EXIT
          STD    T0
          SBN    2
          MJN    COLX        IF RESIDENT OR RESIDENT II REQUIRED
          LDD    T0          COMPARE WITH LAST OVERLAY LOADED
          LMM    CUOV
          ZJN    COLX        IF SAME AS LAST OVERLAY LOADED
          LDD    T0          SET OVERLAY TO LOAD
          STM    CUOV        RECORD AS LAST OVERLAY LOADED
          RJM    LOV         LOAD OVERLAY
          UJN    COLX        RETURN
 EXT      SPACE  4,10
**        EXT - EXECUTE TASK.
*
*         ENTRY  (DFTA) = ADDRESS OF TASK TO EXECUTE.
*
*         USES   T1.


 EXT      SUBR               ENTRY/EXIT
          LDM    DFTA
          ZJN    EXTX        NULL LIST
          STD    T1
          LJM    0,T1        JUMP TO NAMED TASK

 EXTR     UJN    EXTX        RETURN
 FMR      SPACE  4,10
**        FMR - FATAL MAINTENANCE REGISTER ERROR HANDLER.
*
*         ENTRY  (A) = DFT ANALYSIS CODE.
*
*         EXIT   MESSAGE WRITTEN TO *EICB* MESSAGE BUFFER.
*                *ERRH* DOES NOT EXIT.
*
*         CALLS  *ERRH*.


 FMR      ADC    TDFT        TERMINATE DFT FLAG
          STML   RTP1
          LMC    0#2000      MAKE UNCORRECTED ERROR PRIORITY
          STDL   BC+1        STORE IN DFT ANALYSIS PART OF SCRATCH ANALYSIS WORD
          CALL   ERRH        ISSUE MESSAGE AND HANG
 FTE      SPACE  4,10
**        FTE - FUNCTION TIME OUT ERROR PROCESSOR.
*
*         ENTRY  (A) = DFT ANAYSIS CODE.


 FTE      EQU    FMR         SAME PROCESSING AS FOR *FMR*
 IDA      SPACE  4,10
**        IDA - INCREMENT DFT ADDRESS.
*
*         ENTRY  (A) = INCREMENT.
*                (DP - DP+2) = R-POINTER DATA.
*
*         EXIT   R-REGISTER LOADED.
*                (A) = (A) + (DP) + 400000.


 IDA      SUBR               ENTRY/EXIT
          LRD    DP+1
          ADDL   DP
          ADC    RR
          UJN    IDAX        RETURN
 IDD      SPACE  4,10
**        IDD -  IDLE DOWN.
*
*         ENTRY  (A) = SOFTWARE ANALYSIS CODE.


 IDD      SUBR               ENTRY
          STML   IDDA        SAVE ANALYSIS CODE
          UJN    *           HANG

 IDDA     CON    0           SOFTWARE ANALYSIS CODE
 IMB      SPACE  4,10
**        IMB - INCREMENT MAINTENANCE BUFFER.
*
*         ENTRY  (A) = INCREMENT.
*                (MP - MP+2) = R-POINTER DATA.
*
*         EXIT   R-REGISTER LOADED.
*                (A) = (A) + (MP) + 400000.


 IMB      SUBR               ENTRY/EXIT
          LRD    MP+1
          ADDL   MP
          ADC    RR
          UJN    IMBX        RETURN
 LNO      SPACE  4,10
**        LNO - LOAD NEXT OVERLAY AND EXECUTE SPECIFIED ROUTINE.
*
*         ENTRY  (A) = 6/ OVL, 12/ ADDRESS.
*                OVL = OVERLAY NUMBER TO LOAD IF NOT ALREADY LOADED.
*                ADDRESS = EXECUTION ADDRESS (ENTERED VIA *LJM*).
*                AT *LNOF* TO RETURN FROM OVERLAY, RELOAD PRIOR OVERLAY,
*                AND RESUME EXECUTION AT LINE FOLLOWING *CALL* MACRO.
*
*         EXIT   OVERLAY LOADED AND *LJM* TO ROUTINE ADDRESS.
*                STACK POPPED AND PRIOR OVERLAY RELOADED IF ENTRY AT *LNOF*.
*                TO *IDD*, IF LOAD ERROR.
*
*         USES   ST, T1, *STKD*.
*
*         CALLS  COL, IDD.


 LNOF     SOD    ST          POP STACK
          SOM    STKD
          PJN    LNO3        IF STACK SIZE IS OK
 LNO2     LDC    DASC        60A - DFT FATAL STACK
          RJM    IDD         IDLE DOWN

 LNO3     LDI    ST          SET OVERLAY NUMBER
          RJM    COL         CHECK IF OVERLAY LOAD REQUIRED
          SOD    ST
          LDIL   ST          GET RETURN ADDRESS
          STDL   T1
          LJM    0,T1        RETURN TO CALLER

 LNO      SUBR               ENTRY/EXIT
          STM    LNOA
          SHN    -14
          STD    T1          OVERLAY NUMBER
          AOM    STKD        CURRENT STACK DEPTH
          SBN    STKL
          PJN    LNO2        IF CALL LIMIT HAS BEEN EXCEEDED
          LDML   LNO         SAVE RETURN ADDRESS ON STACK
          STIL   ST
          AOD    ST
          LDM    CUOV        SAVE OLD OVERLAY NUMBER ON STACK
          STI    ST
          AOD    ST
          LDD    T1          SET OVERLAY NUMBER
          RJM    COL         CHECK IF OVERLAY REQUIRED

*         TO BREAKPOINT ON OVERLAY LOADS, SET THE OVERLAY NUMBER IN
*         THE *LMN* INSTRUCTION, THEN SET A BREAKPOINT FOR THE FIRST
*         *PSN* INSTRUCTION.  WHEN THE BREAKPOINT IS ENCOUNTERED, THE
*         DESIRED OVERLAY HAS BEEN LOADED, SO IT IS POSSIBLE TO LOOK
*         AT AND/OR CHANGE MEMORY, SET BREAKPOINTS, ETC.
*
*         LDD    T1          CHECK FOR REQUESTED OVERLAY
*         LMN    **          *** PLUG DESIRED OVERLAY NUMBER HERE ***
*         NJN    LNO1        IF NOT DESIRED OVERLAY
*         PSN                *** SET BREAKPOINT HERE ***
*         PSN                *** SET BREAKPOINT FOR PREVIOUS WORD ***
*LNO1     BSS    0
          LJM    **          EXECUTE ROUTINE
 LNOA     EQU    *-1
 LOV      SPACE  4,10
**        LOV - LOAD OVERLAY.
*
*         ENTRY  (A) =  OVERLAY NUMBER.
*                (DH - DH+2) = R-POINTER DATA.
*                (DO) = DIRECTORY OFFSET.
*
*         EXIT   OVERLAY LOADED AT ADDRESS SPECIFIED IN HEADER.
*                (OVLS) INCREMENTED.
*
*         USES   CM - CM+3.


 LOV      SUBR               ENTRY/EXIT
          ZJN    LOVX        IF LOAD RESIDENT OVERLAY
          LRD    DH+1
          ADD    DH          OFFSET TO DFT
          ADD    DO          DIRECTORY OFFSET
          ADC    RR
          CRDL   CM          READ IN DIRECTORY ENTRY
          LDDL   CM          STARTING LOAD ADDRESS
          STML   LOVA
          LDDL   CM+3        OFFSET INTO CIP MODULE
          ADD    DH
          ADC    RR+2        FOR DFT HEADER
          CRML   **,CM+1     CM+1 = LENGTH IN DIRECTORY
 LOVA     EQU    *-1
          AOML   OVLS        INCREMENT OVERLAY COUNTER
          UJN    LOVX        RETURN
 LSR      SPACE  4,10
**        LSR - LOAD SECONDARY ROUTINES.
*
*         LOAD AND PRESET THE OVERLAY OF SECONDARY ROUTINES.
*
*         CALLS  LOV, PII.


 LSR      SUBR               ENTRY/EXIT
          LDN    1
          RJM    LOV         LOAD OVERLAY
          RJM    PII         PRESET IOU INFORMATION
          UJN    LSRX        RETURN
 VCK      SPACE  4,10
**        VCK - VERSION CHECK.
*
*         ENTRY (A) = VERSION NECESSARY FOR CODE TO EXECUTE.
*
*         EXIT  (A) < 0 IF NOT CORRECT VERSION.
*


 VCK      SUBR               ENTRY/EXIT
          STM    VCKA        SAVE VERSION
          LDM    VRSN
          SBM    VCKA
          UJN    VCKX        RETURN WITH (A) = RESULT

 VCKA     CON    0
          SPACE  4,10
**        NOTE - PUT NOTHING IN PRESET BEFORE THIS POINT.

          USE    PRESET
          ERRNG  TOIP-*      RESIDENT OF DFT IS TOO LARGE
 OVLA     EQU    TOAP        PRESERVE *2AP* BUFFER AREA
          USE    *

*         END OF CTP$DFT_RESIDENT_COMMON

