DataMuseum.dk

Presents historical artifacts from the history of:

IBM System/3

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about IBM System/3

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦54ac5e798⟧ s3xseg

    Length: 43434 (0xa9aa)
    Types: s3xseg
    Names: »S$E040«

Derivation

└─⟦827b5bd03⟧ Bits:30009184 5702-sc1.V16.ccp
    └─⟦f17e99db6⟧ 
        └─⟦this⟧ »S$E040« 

TextSegment

       MACRO                                                            00010000                
       $E040                                                            00020000                
       GBLB  &D45                      5445 DEVICE SUPPORT              00030000                
       GBLB  &MTK                      MULTI-TASKING USERS              00040000                
       GBLB  &DPF                      DUAL PROGRAMMING FEATURE         00050000                
       GBLB  &SHR                      DISK FILE SHARING                00060000                
       GBLB  &MIN                      MINIMUM CORE OPTIONS             00070000                
       GBLB  &MOD4                     MODEL 4 SYSTEM                   00072000                
       GBLB  &UR41                     3741   SUPPORT                   00075000                
       LCLC  &#                                                         00080000                
       LCLC  &C                        CHARACTER LOCAL                  00090000                
       TEXT                                                             00100000                
&#     SETC  ' '                                                        00110000                
       TITLE 'TASK&#.DISPATCHER&#.--&#.$CC4DP'                          00120000                
*                                      MACRO $E040 1/7/73               00130000                
       SPACE 2                                                          00140000                
*********************************************************************** 00150000                
*                                                                     * 00160000                
* NAME -- $CC4DP                                                      * 00170000                
*                                                                     * 00180000                
* TITLE -- TASK DISPATCHER + I/O SCHEDULER                            * 00190000                
*                                                                     * 00200000                
* FUNCTION--                                                          * 00210000                
*                                                                     * 00220000                
*    . DISPATCH ANY READY SYSTEM OR USER TASK.                        * 00230000                
*    . ALLOW A USER TASK TO EXIT THE MUST-COMPLETE STATE.             * 00240000                
*    . ROUTE CONTROL FOLLOWING A TELEPROCESSING OR CONSOLE            * 00250000                
*      INTERRUPT TO A CCP TASK TO PROCESS THAT INTERRUPT.             * 00260000                
*    . GIVE CONTROL BACK TO AN INTERRUPTED USER TASK FOLLOWING        * 00270000                
*      INTERRUPT PROCESSING.                                          * 00280000                
*    . DETERMINE WHICH DISK IOB'S SHOULD BE SCHEDULED INTO            * 00290000                
*      EITHER THE DISK I/O DISPATCHER OR DISK I/O WAIT                * 00300000                
*      ROUTINE OF THE DISK SYSTEM MONITOR.                            * 00310000                
*    . CAUSE THE CCP TO WAIT WHEN NO WORK CAN BE PERFORMED.           * 00320000                
*                                                                     * 00330000                
* ENTRY POINT -- $CC4DP                                               * 00340000                
*                                                                     * 00350000                
* INPUT -- VARIABLE FIELDS AND FLAG BYTES IN $CCCOM TO INDICATE WHAT  * 00360000                
*          ACTIONS ARE TO BE TASKED BY THE DISPATCHER.                * 00370000                
*                                                                     * 00380000                
*    . THE ADDRESS OF THE RETURNING (OR CURRENT TASK)                 * 00390000                
*      CURRENTLY RUNNING UNDER THE CCP IN THE $CCCOM FIELDS           * 00400000                
*      @CURTB AND @LASTB.                                             * 00410000                
*    . $CCCOM FIELD $DPFLH WHICH INDICATES THE TYPE OF ENTRY          * 00420000                
*      BEING MADE TO THE DISPATCHER.  THIS CAN BE EITHER A            * 00430000                
*      NORMAL EXIT FROM A TASK (NO INDICATORS ARE SET), OR IT         * 00440000                
*      CAN BE AN ENTRY FROM ONE OF THE INTERRUPT LEVELS CAUSED        * 00450000                
*      BY AN INTERRUPT LEVEL ROUTINE RESETTING THE CCP                * 00460000                
*      INSTRUCTION ADDRESS REGISTER TO WREST CONTROL FROM THE         * 00470000                
*      CURRENT TASK AND FORCING CONTROL TO RESUME IN THE CCP          * 00480000                
*      DISPATCHER.                                                    * 00490000                
*    . AN INDICATION IN THE $CCCOM FIELD $DPFLG AS TO WHETHER         * 00500000                
*      THE EXITING TASK IS RELINQUISHING CONTROL AS IT MUST           * 00510000                
*      WAIT FOR SOME EVENT OR IT IS ONLY EXITING THE                  * 00520000                
*      MUST-COMPLETE STATE.                                           * 00530000                
*                                                                     * 00540000                
*      WHEN A TASK IS EXITING THE MUST-COMPLETE STATE, THE CCP        * 00550000                
*      DISPATCHER WILL ALLOW ANY OF THE SYSTEM TASKS                  * 00560000                
*      (COMMUNICATION, TERMINATION, OR COMMAND PROCESSOR) TO RUN      * 00570000                
*      AND THEN GIVE CONTROL IMMEDIATELY BACK TO THE TASK THAT        * 00580000                
*      LAST EXITED THE MUST-COMPLETE STATE IF THAT TASK IS            * 00590000                
*      STILL DISPATCHABLE.                                            * 00600000                
*                                                                     * 00610000                
* EXT REF --                                                          * 00620000                
*                                                                     * 00630000                
*    . DISK SYSTEM MONITOR NCEIOS + NCEIOW ENTRY POINTS, $CCCOM,      * 00640000                
*      CCP REGISTER SAVE AND RESTORE ROUTINE, CCP WAIT AND POST       * 00650000                
*      ROUTINES.                                                      * 00660000                
*                                                                     * 00670000                
* EXIT, NORMAL --                                                     * 00680000                
*                                                                     * 00690000                
*    . TO THE INSTRUCTION ADDRESSED BY THE TCB ARR FIELD OF           * 00700000                
*      THE TO BE DISPATCHED TCB.                                      * 00710000                
*    . IF NO READY TASKS EXIST BUT DISK IOBS ARE IN PROCESS,          * 00720000                
*      THEN $CC4DP WILL BRANCH TO DSMS DIODWT ENTRY.                  * 00730000                
*    . IF NEITHER OF THE ABOVE ARE APPLICABLE, THE DISPATCHER         * 00740000                
&C     SETC  'APL'                     MINSYS                           00750000                
       AIF   (&MIN).ISMIN              MINSYS?                          00760000                
&C     SETC  'HPL'                     NON-MINSYS                       00770000                
.ISMIN ANOP                                                             00780000                
*      WILL &C  ALLOWING, IN A DPF SYSTEM, THE OTHER PROGRAM          * 00790000                
*      LEVEL TO GAIN CONTROL OF THE CPU.                              * 00800000                
*                                                                     * 00810000                
* EXIT, ERROR -- NONE                                                 * 00820000                
*                                                                     * 00830000                
* TABLES --                                                           * 00840000                
*                                                                     * 00850000                
*    . TCB CHAINS, $CCCOM, DISPATCHER WORKAREA IN $CCCOM,             * 00860000                
*      DISK IOBS                                                      * 00870000                
*                                                                     * 00880000                
* ATTRIBUTES -- RESIDENT, SERIALLY REUSEABLE, MUST COMPLETE.          * 00890000                
*                                                                     * 00900000                
*********************************************************************** 00910000                
TCBREG EQU   XR1                       TASK CONTROL BLOCK REGISTER      00920000                
COMREG EQU   XR2                       CCP COMMUNICATION AREA REGISTER  00930000                
       EJECT                                                            00940000                
*---------------------------------------------------------------------* 00950000                
*      INITIAL ENTRY LOGIC OF THE DISPATCHER....                      * 00960000                
*      WILL SAVE THE REGISTERS IN THE TCB IF REQUIRED AND WILL SAVE   * 00970000                
*      ADDRESS OF THE LAST RETURNING TASK.  WILL ALSO DETERMINE       * 00980000                
*      IF THE LAST TASK WAS A USER OR SYSTEM TASK, AND WILL SET       * 00990000                
*      THE DISPATCHABILITY BIT OF THE TCB ACCORDING TO THE VALUES     * 01000000                
*      IN THE DISPATCHER CONTROL FLAG IN CCPCOM.                      * 01010000                
*---------------------------------------------------------------------* 01020000                
       SPACE 2                                                          01030000                
$CC4DP ST    CCXR2,XR2                 SAVE INPUT REG TWO               01040000                
       LA    $CCCOM,COMREG             SET UP COMM AREA BASE REG        01050000                
       ST    $CCXR1(,COMREG),XR1       SAVE INPUT REG ONE               01060000                
       ST    $CCARR(,COMREG),ARR       SAVE INPUT ARR                   01070000                
       SPACE 2                                                          01080000                
       L     @CURTB(,COMREG),TCBREG    SET @ OF LAST ACTIVE TASK TCB    01090000                
       ST    TCBPSR(,TCBREG),PSR       SAVE ENTRY PSR IN TCB            01100000                
       SPACE 1                                                          01110000                
       BC    $CC4TT,BR97               INVOKE TRACE AT THIS POINT       01120000                
*                                      AND RESET THE FALSE BIT          01130000                
       DC    AL1(TTDPA)                GO TO TRACE FOR INITIAL $CC4DP   01140000                
       SPACE 1                                                          01150000                
       AIF   (&MOD4 NE '1').MD410                                       01150600                
*  INCREMENT THE FIELD LIGHTS FOR A MOD 4 SYSTEM                        01151200                
       SPACE 1                                                          01151800                
       L     @KMWK(,COMREG),XR1        XR1 --> CONSOLE WORK AREA        01152400                
       MZZ   DPLITE,#KMLIT(,XR1)       HI ORDER BITS IN WORK AREA       01153000                
       ALC   DPLITE(1),DPLITE          ADD IT TO ITSELF                 01153600                
       MZZ   #KMLIT(,XR1),DPLITE       PUT RESULT IN WORK AREA          01154200                
       MVI   DPLITE,NOBIT              INIT TO ZIP FOR NEXT PASS        01154800                
       JNOL  DPLIO                     IF NO OVERFLOW - JUMP            01155400                
       SBN   #KMLIT(,XR1),BIT2         FIELD LIGHT = #3                 01156000                
DPLIO  EQU   *                         *                                01156600                
       DC    XL2'3112'                 SIO AND Q CODE FOR FIELD LIGHTS  01157200                
       DC    AL2($CCCOM+$KMWK+#KMLIT)  ADDRESS OF LIGHT MASK            01157800                
       L     @CURTB(,COMREG),TCBREG    XR1 --> LAST ACTIVE TCB          01158400                
.MD410 ANOP                                                             01159000                
DPAAA  TBN   $DPFLH(,COMREG),DPINT     IS THIS AN ENTRY FOLLOWING AN    01160000                
*                                      INTERRUPT LEVEL PROCESS          01170000                
       JF    DPAA                      NO, DON'T SET THE RESUME TCB @   01180000                
       ST    @RITCB(,COMREG),TCBREG    YES, SET ADDR OF TCB TO USE      01190000                
*                                      FOR RESUME INTERRUPTED TASK      01200000                
       J     DPAAB                     + SKIP SAVING $DPFLG AS THE      01210000                
*                                      INTERRUPT HANDLER DID IT         01220000                
DPAA   MVC   TCBFLG(1,TCBREG),$DPFLG(,COMREG)  SAVE $DPFLG IN THE TCB   01230000                
*                                      OF THE RETURNING TASK            01240000                
DPAAB  TBN   TCBTSK(,TCBREG),TCBSYT    IS THE RETURNING TASK A SYSTEM   01250000                
*                                      TASK                             01260000                
       JT    DPAB                      YES, SKIP NSI                    01270000                
       ST    @LUSTB(,COMREG),TCBREG    SET @ OF LAST USER TCB TO RUN    01280000                
DPAB   TBN   $DPFLG(,COMREG),DPREG     ARE THE TCB REGISTERS TO BE SAVD 01290000                
       JF    DPABA                     NO, DON'T SAVE REGISTERS         01300000                
       SBN   TCBTSK(,TCBREG),TCBDSV    SET DISPATCHER SAVED REGISTERS   01310000                
*                                       INDICATOR FOR TCBXIT ROUTINE    01320000                
       B     CCPSV2                    GO TO STANDARD REGISTER SAVE RTN 01330000                
*                                      ALTERNATE ENTRY POINT            01340000                
DPABA  TBN   $DPFLG(,COMREG),DPDSP     IS THE TCB TO BE MARKED AS NON-  01350000                
*                                       DISPATCHABLE /I.E. WAITING FOR  01360000                
*                                       SOME EVENT/                     01370000                
       JF    DPAC                      NO, KEEP IT DISPATCHABLE         01380000                
       SBF   TCBTSK(,TCBREG),TCBDSP    YES, SET TCBDSP TO ZERO          01390000                
DPAC   SBF   $DPFLH(,COMREG),DPINT         TURN OFF THE DISPATCHER      01400000                
*                                      INTERRUPT ENTRY INDICATOR        01410000                
       SPACE 2                                                          01420000                
*********************************************************************** 01430000                
*            END OF DISPATCHER INITIAL ENTRY LOGIC                    * 01440000                
*********************************************************************** 01450000                
       EJECT                                                            01460000                
*---------------------------------------------------------------------* 01470000                
*      DETERMINE IF ANY INTERRUPTS HAVE TO BE PROCESSED AND IF THE    * 01480000                
*      INTERRUPT PROCESSING TASKS CAN BE DISPATCHED                   * 01490000                
*---------------------------------------------------------------------* 01500000                
       SPACE 3                                                          01510000                
*********************************************************************** 01520000                
*            THIS IS ALSO THE INTERNAL ENTRY POINT FOR RECURSION      * 01530000                
*********************************************************************** 01540000                
       SPACE 1                                                          01550000                
DPACA  L     @CMTCB(,COMREG),TCBREG    GET @ OF FIRST CCP SYSTEM TCB    01560000                
       SPACE 1                                                          01570000                
*------SEE IF COMM TASK WAITING ON DISK I/O---------------------------* 01580000                
       SPACE 1                                                          01590000                
       TBN   TCBWMK(,TCBREG),WPADIO    COMM TASK WAITING ON DISK I/O    01600000                
       JF    DPCKCM                    NO, CHECK FOR TP INTERRUPT       01610000                
       SPACE 1                                                          01620000                
       TBN   TCBPMK(,TCBREG),WPADIO    HAS DISK WAIT BEEN POSTED        01630000                
       BT    DPXIT                     YES, GO TO COMMUNICATIONS TASK   01640000                
       J     DPNOGO                    NO, MAKE WHOLE SYSTEM WAIT       01650000                
       SPACE 1                                                          01660000                
*---------------------------------------------------------------------* 01670000                
*      IF THE COMMUNICATIONS TASK IS WAITING FOR WORK, SEE IF THERE   * 01680000                
*      ARE INTERRUPTS PENDING TO BE PROCESSED                         * 01690000                
*---------------------------------------------------------------------* 01700000                
       SPACE 1                                                          01710000                
DPCKCM TBN   TCBWMK(,XR1),WPAAII       IS COMMUNICATIONS TASK WAITING   01720000                
*                                      FOR WORK TO DO??                 01730000                
       JF    DPAD                      NO, SKIP TO DISPATCHABILITY TEST 01740000                
*                                      OF SYSTEM TASKS                  01750000                
       SPACE 1                                                          01760000                
*------COMM. TASK CAN HANDLE INTERRUPTS, ARE THERE ANY?---------------* 01770000                
       SPACE 1                                                          01780000                
       CLI   #OPEND(,COMREG),NOBIT     ANY PENDING INTERRUPTS ??        01790000                
       TBF   $DPFLH(,COMREG),DPCI      ANY CONSOLE INTERRUPT ??         01800000                
       BC    DPXIT,ANY+HI+LO+FALSE     YES, EXIT TO COMM. TASK          01810000                
       EJECT                                                            01820000                
*********************************************************************** 01830000                
*      NO INTERRUPT OCCURRED, THEREFORE SCAN THE SYSTEM TASK QUEUE TO * 01840000                
*      SEE IF ANY OF THEM ARE DISPATCHABLE ANYWAY                     * 01850000                
*********************************************************************** 01860000                
       SPACE 2                                                          01870000                
       SPACE 1                                                          01880000                
*********************************************************************** 01890000                
*            AT ENTRY TCBREG-@ OF COMM. TASK TCB                      * 01900000                
*********************************************************************** 01910000                
       SPACE 1                                                          01920000                
DPAD   B     DPTEST                    SEE IF TASK CAN BE DISPATCHED    01930000                
       CLI   TCBNXT-1(,TCBREG),0       ARE WE AT THE END OF THE SYSTEM  01940000                
*                                       TASK QUEUE                      01950000                
*******NOTE THE ASSUMPTION THAT HIGH BYTE OF ZERO /I.E. NO TCB IN 1ST   01960000                
*******X'100' OF MAIN STORAGE*****************************************  01970000                
       SPACE 1                                                          01980000                
       JE    DPAE                      YES, END OF CHAIN REACHED, GO    01990000                
*                                       TO RESUME INTERRUPTED TASK RTN  02000000                
       L     TCBNXT(,TCBREG),TCBREG    STEP TO NEXT SYSTEM TASK TCB     02010000                
       B     DPAD                      AND SEE IF NEXT TCB IS READY     02020000                
       EJECT                                                            02030000                
*********************************************************************** 02040000                
*      END OF TESTING FOR DISPATCHABILITY OF CCP SYSTEM TASKS.  NOW   * 02050000                
*      SEE IF THERE IS AN INTERRUPTED USER TASK WHICH CAN BE RESUMED  * 02060000                
*********************************************************************** 02070000                
       SPACE 2                                                          02080000                
DPAE   TBN   $DPFLH(,COMREG),DPSMC     IS A SMC FUNCTION IN EFFECT      02090000                
       JT    DPBA                      YES, SKIP RESUME INTERRUPTED     02100000                
*                                      TASK LOGIC                       02110000                
       TBN   $DPFLH(,COMREG),DPRIT     NO, IS THE INT. TASK BIT ON      02120000                
       JF    DPBA                      NO, FORGET THIS PATH             02130000                
       SPACE 1                                                          02140000                
*---------------------------------------------------------------------* 02150000                
*      IF THERE IS AN INTERRUPTED USER TASK, IT COULD BE IN AN        * 02160000                
*      ENDLESS LOOP.  IF SO IT CAN'T BE RESUMED IF THE COMMAND        * 02170000                
*      PROCESSOR IS WAITING FOR THE TRANSIENT AREA OR DISK I/0.       * 02180000                
*---------------------------------------------------------------------* 02190000                
       SPACE 1                                                          02200000                
       L     @CPTCB(,COMREG),XR1       GET CMD PROC TCB @               02210000                
       SPACE 1                                                          02220000                
       AIF   (&MTK).DPJOE              MULTI-TASKING??                  02230000                
       TBF   TCBWMK(,XR1),WPADIO+WPATA IS C.P. WAITING ON DISK OR T.A.  02240000                
       JT    DPAEB                     NO, ALLOW INT. TASK TO RESUME    02250000                
       SPACE 1                                                          02260000                
       TBF   TCBPMK(,XR1),WPADIO+WPATA YES, IS EITHER EVENT COMPLETE ?  02270000                
       JT    DPNOGO                    NO, HOLD THE SYSTEM UNTIL C.P.   02280000                
*                                      CAN RUN                          02290000                
       SPACE 1                                                          02300000                
       AGO   .DPJGF                                                     02310000                
.DPJOE ANOP                                                             02320000                
       SPACE 1                                                          02330000                
       TBN   TCBWMK(,XR1),WPADIO       IS C.P. WAITING ON DISK I/0 ?    02340000                
       TBF   TCBPMK(,XR1),WPADIO       AND NOT YET POSTED ?             02350000                
       JT    DPNOGO                    YES, HOLD THE SYSTEM FOR C.P.    02360000                
       SPACE 1                                                          02370000                
       TBN   TCBWMK(,XR1),WPATA        IS C.P. WAITING FOR XSIENT AREA  02380000                
       TBF   TCBPMK(,XR1),WPATA        AND NOT YET POSTED ?             02390000                
       JF    DPAEB                     NO, O.K. TO RESUME INT. TASK     02400000                
       SPACE 1                                                          02410000                
       EXTRN TACTCB                                                     02420000                
       L     TACTCB,XR1                LOAD @ OF TCB WHO OWNS T.A.      02430000                
       B     DPTEST                    GO SEE IF HE'S READY TO RUN      02440000                
       J     DPNOGO                    NOT READY, WAIT FOR HIM          02450000                
.DPJGF ANOP                                                             02460000                
       SPACE 2                                                          02470000                
*------O.K. TO RESUME INT. TASK---------------------------------------* 02480000                
       SPACE 1                                                          02490000                
DPAEB  L     @RITCB(,COMREG),TCBREG    GET USER TCB @ TO RESUME         02500000                
       SPACE 1                                                          02510000                
       SPACE 1                                                          02520000                
*********************************************************************** 02530000                
*      ENTRY FOR RESUMING A SUSPENDED TASK BY OPERATOR COMMAND        * 02540000                
*********************************************************************** 02550000                
       SPACE 1                                                          02560000                
DPAEA  MVC   DPAF+3(2),TCBSAV(,TCBREG) GET THE @ OF THE TCB REGISTER    02570000                
*                                      SAVE AREA LAST USED              02580000                
       ALC   DPAF+3(2),X$0002(,COMREG) STEP THE ADDRESS UP TO THE ARR   02590000                
DPAF   L     ####,ARR                  SET THE ARR FROM THE TCB         02600000                
       MVC   DPAG+3(2),DPAF+3          GET THE TCBSAV ADDRESS TO REUSE  02610000                
DPAG   MVC   ####(2),TCBIAR(,TCBREG)   SINCE THE RESUME ADDRESS IS      02620000                
*                                       ACCESSED FROM THE TCBARR FIELD, 02630000                
*                                       SET THE TCBARR FROM THE TCBIAR  02640000                
       SPACE 2                                                          02650000                
       SBF   $DPFLH(,COMREG),DPRIT     TURN OFF THE RESUME TASK BIT     02660000                
       SPACE 1                                                          02670000                
       L     DP@XTA,IAR                GO TO TASK INVOKE BEYOND ARR     02680000                
*                                      RESET INSTRUCTION                02690000                
DP@XTA DC    AL2(DPXITA)               @ OF INSTRUCTION AFTER ARR RESET 02700000                
       SPACE 1                                                          02710000                
*********************************************************************** 02720000                
*      END OF RESUME INTERRUPTED TASK ROUTINE                         * 02730000                
*********************************************************************** 02740000                
       SPACE 1                                                          02750000                
       SPACE 1                                                          02760000                
*********************************************************************** 02770000                
*                    PUSH THROUGH ANY PENDING DISK I/O                * 02780000                
*********************************************************************** 02790000                
       SPACE 1                                                          02800000                
DPBA   LA    DPIOB,XR1                 SET UP REG FOR DIODWT ENTRY      02810000                
@DWT2  EQU   *+3                       *S* PLUGGED BY INITIALIZATION    02820000                
       B     ####                      *S* GO TO NCEIOW WITH A COMPLETE 02830000                
*                                       IOB TO ALLOW HIM TO START WHAT  02840000                
*                                       EVER CAN BE STARTED             02850000                
       J     DPBAA                                                      02860000                
DPIOB  EQU   *                         DUMMY IOB FOR DISK WAIT          02870000                
       DC    XL2'0000'                                                  02880000                
       DC    XL1'40'                   ALWAYS POSTED                    02890000                
       DC    XL1'A0'                   DEVICE Q-BYTE (5444)             02900000                
       ORG   DPIOB+IOBFLG                                               02910000                
       DC    AL1(NODTF)                INDICATE NO DTF IN THIS IOB      02920000                
       ORG   DPIOB+IOBXR2+1                                             02930000                
       EJECT                                                            02940000                
*********************************************************************** 02950000                
*      DISPATCH ANY READY USER TCB                                    * 02960000                
*********************************************************************** 02970000                
       SPACE 1                                                          02980000                
DPBAA  L     @LUSTB(,XR2),XR1          GET @ OF LAST USER TCB TO RUN    02990000                
       AIF   (&MTK EQ '0').DP1A        SKIP IF SINGLE TASK SYSTEM       03000000                
       TBN   TCBFLG(,XR1),DPXSMC       IS TASK EXITING A CCP FUNCTION?  03010000                
.DP1A  ANOP                            BYPASS INSTRUCTION IF ONE-TASK   03020000                
       SBF   TCBFLG(,XR1),DPXSMC       RESET EXIT MUST COMPLETE BIT     03030000                
       AIF   (&MTK NE '1').DP1         MULTI-TASKING VERSION?           03040000                
       BT    DPTEST                    YES, SEE IF IT CAN STILL RUN     03050000                
       SPACE 1                                                          03060000                
*------TASK IS NOT EXITING, CHECK USER TCB CHAIN FOR A READY TCB------* 03070000                
       SPACE 1                                                          03080000                
DPBAB  L     TCBNXT(,XR1),XR1          GET @ OF USER TCB FOLLOWING      03090000                
*                                      THE LAST ONE TO RUN              03100000                
       B     DPTEST                    SEE IF IT CAN RUN                03110000                
       CLC   TCBNXT(2,XR1),@LUSTB(,XR2) HAVE ALL TCB'S BEEN CHECKED     03120000                
       BNE   DPBAB                     NO, GO TO NEXT USER TCB          03130000                
       SPACE 1                                                          03140000                
*------------ALL USER TCB'S HAVE BEEN CHECKED--SEE IF LAST ONE--------* 03150000                
*------------TO EXIT IS STILL READY-----------------------------------* 03160000                
       SPACE 1                                                          03170000                
       L     TCBNXT(,XR1),XR1          GET @ OF LAST USER TCB TO RUN    03180000                
.DP1   ANOP                                                             03190000                
       B     DPTEST                    GO SEE IF IT CAN RUN             03200000                
       J     DPNOGO                    MUST NOT HAVE BEEN ELIGIBLE,     03210000                
       SPACE 1                                                          03220000                
*------EXIT THE TEST OF USER TCB DISPATCHABILITY----------------------* 03230000                
       SPACE 1                                                          03240000                
       SPACE 3                                                          03250000                
*---------------------------------------------------------------------* 03260000                
*      DETERMINE IF A TCB IS ELIGIBLE TO RUN--COMMON SUBROUTINE       * 03270000                
*---------------------------------------------------------------------* 03280000                
       SPACE 3                                                          03290000                
DPTEST ST    DPTRET+3,ARR              SAVE THE ARR FOR RETURN          03300000                
       TBN   $DPFLH(,XR2),DPSMC        IS A MUST COMPLETE FUNCTION      03310000                
*                                      CURRENTLY IN EFFECT              03320000                
       JF    DPT001                    NO, CONTINUE                     03330000                
       SPACE 1                                                          03340000                
*------A MUST COMPLETE FUNCTION IS IN PROGRESS, DISPATCH ONLY---------* 03350000                
*------THE TASK WHO CAUSED THE FUNCTION TO START----------------------* 03360000                
       SPACE 1                                                          03370000                
       CLI   TCBID(,XR1),C'C'          IS THIS CM TASK??                03380000                
       JE    DPT001                    YES, BYPASS LOCK TEST            03390000                
       SPACE 1                                                          03400000                
       TBN   TCBFLG(,XR1),DPFSMC       IS THIS THE CORRECT TASK         03410000                
       JT    DPT001                    YES - CHECK DISPATCHABILITY      03420000                
       TBN   TCBTSK(,XR1),TCBDSM       THIS TASK IN DSM ?               03423000                
       JF    DPTRET                    NO - DON'T DISPATCH IT           03426000                
       SPACE 1                                                          03430000                
*------DETERMINE IF THIS TCB CAN BE DISPATCHED------------------------* 03440000                
       SPACE 1                                                          03450000                
DPT001 TBN   TCBTSK(,XR1),TCBDSP+TCBATV IS THIS TCB READY TO RUN        03460000                
       AIF   (&SHR).J1                 FILE SHARING??                   03470000                
       JT    DPBAC                     YES, GO TO INVOKE THE TASK       03480000                
       AGO   .NJ1                                                       03490000                
.J1    BT    DPBAC                     YES, GO INVOKE THE TASK          03500000                
.NJ1   ANOP                                                             03510000                
DPTRET B     ####                      NO, EXIT TO SCAN OF TCB'S        03520000                
       EJECT                                                            03530000                
*********************************************************************** 03540000                
*      ALL TCBS HAVE BEEN CHECKED FOR DISPATCHABILITY AND NONE FOUND  * 03550000                
*      TO BE READY.  CHECK FOR BUSY I/O TO DETERMINE WHETHER TO GO TO * 03560000                
*      DISK I/O WAIT OF DSM OR APL AND LET THE OTHER LEVEL RUN        * 03570000                
*                                                                     * 03580000                
*      ENTRY WILL COME TO THIS LABEL IF ONE OF THE INTERRUPT          * 03590000                
*      DRIVEN SYSTEM TASKS IS WAITING FOR DISK I/O COMPLETION.        * 03600000                
*********************************************************************** 03610000                
       SPACE 2                                                          03620000                
*---------------------------------------------------------------------* 03630000                
*      DISK I/O WAIT SCHEDULING ROUTINE--WILL SEND WAIT REQUESTS ON   * 03640000                
*      TO DISK WAIT IN PRIORITY ORDER OF CCP SYSTEM TASKS OR          * 03650000                
*      FOR USER TASKS FOR THE OLDEST ONE WAITING FOR DISK I/O         * 03660000                
*---------------------------------------------------------------------* 03670000                
       SPACE 2                                                          03680000                
DPNOGO L     @CMTCB(,XR2),XR1          GET @ OF HIGHEST PRIORTY SYS TASK03690000                
DPNA   TBN   TCBWMK(,XR1),WPADIO       IS THIS TCB WAITING ON DISK      03700000                
       JF    DPNAA                     NO, GO TO NEXT TCB               03710000                
       TBN   TCBPMK(,XR1),WPADIO       YES, IS IT POSTED YET            03720000                
       JF    DPWAIT                    NO, GO TO DISK I/O WAIT OF DSM   03730000                
       SPACE 1                                                          03740000                
*------THIS TASK NOT WAITING, ANY MORE SYSTEM TASKS TO DO-------------* 03750000                
       SPACE 1                                                          03760000                
DPNAA  CLI   TCBNXT-1(,XR1),NOBIT      END OF SYSTEM TASK CHAIN         03770000                
       L     TCBNXT(,XR1),XR1          GET NEXT TCB @ IN CASE           03780000                
       BNE   DPNA                      NOT LAST, GO CHECK NEXT TCB      03790000                
       SPACE 2                                                          03800000                
*------END OF SYSTEM TASK CHECKS, SEE IF ANY USER TCB IS WAITING ON I/O 03810000                
       SPACE 2                                                          03820000                
       L     @LUSTB(,XR2),XR1          GET @ OF LAST USER TO HAVE CPU   03830000                
       SPACE 1                                                          03840000                
       AIF   (&MTK NE '1').DP2         MULTI-TASKING????                03850000                
DPNAAB L     TCBNXT(,XR1),XR1          GET @ OF OLDEST USER TASK TO     03860000                
.DP2   ANOP                                                             03870000                
*                                      NOT HAVE CPU                     03880000                
       SPACE 1                                                          03890000                
       TBN   TCBWMK(,XR1),WPADIO       IS HE WAITING ON DISK I/O        03900000                
       TBF   TCBJOB(,XR1),TCBTRM       AND NOT BEING TERMINATED?        03910000                
       AIF   (&MTK).DP3                MULTI-TASKING?                   03920000                
       TBF   TCBPMK(,XR1),WPADIO       AND NOT YET POSTED ?             03930000                
       JF    DPURCK                    NOT WAITING FOR DISK I/O,  GO    03940000                
*                                      CHECK U.R. WAIT                  03950000                
       AGO   .DP5                                                       03960000                
.DP3   ANOP                                                             03970000                
       JF    DPNAAA                    NO, SEE IF MORE TCB'S TO TEST    03980000                
       SPACE 1                                                          03990000                
       TBN   TCBPMK(,XR1),WPADIO       YES, IS IT POSTED YET            04000000                
       JF    DPWAIT                    NO, GO TO DISK I/O WAIT FOR THIS 04010000                
*                                      USER TASK                        04020000                
       SPACE 1                                                          04030000                
*------THIS TASK NOT WAITING ON DISK I/O, SEE IF ANY MORE TCB'S-------* 04040000                
*------NEED TO BE CHECKED---------------------------------------------* 04050000                
       SPACE 1                                                          04060000                
DPNAAA ST    DPN@A,XR1                 SAVE TCB @                       04070000                
       CLC   DPN@A(2),@LUSTB(,XR2)     ARE WE CURRENTLY LOOKING AT THE  04080000                
*                                      LAST TASK WHICH HAD THE CPU      04090000                
       BNE   DPNAAB                    NO, GO TO NEXT TCB IN CHAIN      04100000                
       SPACE 1                                                          04110000                
*------ALL USER TASKS HAVE BEEN CHECKED, EXIT THIS ROUTINE------------* 04120000                
       SPACE 1                                                          04130000                
       J     DPURCK                    GO TO UNIT RECORD CHECK ROUTINE  04140000                
.DP5   ANOP                                                             04150000                
       EJECT                                                            04160000                
*---------------------------------------------------------------------* 04170000                
*      GO  TO DISK I/O WAIT ROUTINE OF DSM                            * 04180000                
*      INPUT IS  XR2=$CCCOM, XR1=TCB FOR WAIT                         * 04190000                
*---------------------------------------------------------------------* 04200000                
       SPACE 2                                                          04210000                
DPWAIT EQU   *                         PREPARE TO ENTER NCEIOW    S4146 04220000                
       ST    @CURTB(,XR2),XR1          SET AS TCB OF CURRENT TASK       04230000                
       LA    0(,XR1),XR2               PUT TCB @ INTO XR2 FOR LATER     04240000                
       L     TCBIOB(,XR1),XR1          GET @ OF IOB FOR WAIT            04250000                
       ST    IOBTCB(,XR1),XR2          SAVE @ OF TCB FOR CCP TRACE      04260000                
       SPACE 1                                                          04270000                
       B     $CC4TT                    GO TO TRACE FOR THIS WAIT        04280000                
       DC    AL1(TTDPW)                DISPATCHER DISK WAIT TRACE ID    04290000                
       SPACE 1                                                          04300000                
       TBN   IOBCMP(,XR1),BIT1         IS THE IOB COMPLETE ALREADY?     04310000                
       TBF   IOBCMP(,XR1),BIT0+BIT2+BIT3  AND BEEN WAITED UPON ?        04320000                
       JT    DPIOPS                    YES, BYPASS INVOKING NCEIOW      04330000                
       SPACE 1                                                          04340000                
DPGOWT B     ####                      GO TO DSM DISK I/O WAIT (NCEIOW) 04350000                
@DWT1  EQU   *-1                       @ OF WAIT PLUGGED BY CCP STARTUP 04360000                
       SPACE 1                                                          04370000                
*------POST THE TCB THAT THE DISK OPERATION HAS COMPLETED-------------* 04380000                
       SPACE 1                                                          04390000                
DPIOPS ST    DPPOSS,XR2                SAVE @ OF TCB FOR POST     S4146 04400000                
       SBN   TCBTSK(,XR2),TCBDSV       SET REGS SAVED BIT IN CASE S4146 04410000                
*                                      RE-ENTERED AFTER DISK ERP  S4146 04420000                
       AIF   (&MOD4 NE '1').MD499                                       04421000                
       SPACE 1                                                          04422000                
       L     NCSYS@,XR2                XR2 --> SYSCOM           S310336 04423000                
       SBF   NCMBSV(,XR2),NCDERP       TURN OFF CCP/DLOG        S310336 04424000                
*                                      JUST IN CASE             S310336 04425000                
       L     DPPOSS,XR2                RE LOAD XR2 TO @ OF TCB  S310336 04426000                
.MD499 ANOP                                                             04427000                
       B     $CC4PS                    POST DISK I/O COMPLETED    S4146 04430000                
       DC    AL2(256*WPADIO)           DISK I/O POST MASK               04440000                
DPPOSS DS    XL2                       *M* @ OF TASK TO POST DISK I/O   04450000                
DPN@A  EQU   DPPOSS                    @ OF TCB BEING TESTED            04460000                
       AIF   (&SHR NE '1').NSHR                                         04470000                
       SPACE 1                                                          04480000                
*---------------------------------------------------------------------* 04490000                
*      SEE IF THIS IOB OWNED AN SQB WHICH CAN NOW BE RELEASED         * 04500000                
*---------------------------------------------------------------------* 04510000                
       SPACE 1                                                          04520000                
       SPACE 1                                                          04530000                
*---------------------------------------------------------------------* 04540000                
*      EQUATES USED FOR FIELD + BIT TESTING IN FILE SHARING SYSTEMS   * 04550000                
*---------------------------------------------------------------------* 04560000                
       SPACE 1                                                          04570000                
DTFATR EQU   3                         DTF ATTRIBUTE BYTES              04580000                
DIRECT EQU   BIT2                      DIRECT ORGANIZATION              04590000                
UPDATE EQU   BIT6                      UPDATE DTF                       04600000                
RANDOM EQU   BIT2                      RANDOM PROCESSING                04610000                
       SPACE 1                                                          04620000                
WRITE  EQU   BIT6                      IOB OP BIT - WRITE               04630000                
READ   EQU   BIT7                      IOB OP BIT - READ                04640000                
       SPACE 1                                                          04650000                
       TBN   IOBQB(,XR1),WRITE         WAS A WRITE OP JUST COMPLETED    04660000                
       TBF   IOBQB(,XR1),READ                    AND                    04670000                
       TBF   IOBFLG(,XR1),NODTF        IS THERE A RELATED DTF ?         04680000                
       JF    DPRCIR                    NO, JUMP                         04690000                
       SPACE 1                                                          04700000                
       L     TCBSAV(,XR2),XR2          LOAD CURRENT TCB REGS            04710000                
       CLC   IOBDTF(2,XR1),TCBXR2-TCBSAV(,XR2) INDEX IOB ?              04720000                
       JNE   DPRCIR                    YES, FORGET SQB DEQUEUE          04730000                
       SPACE 1                                                          04740000                
       L     TCBXR2-TCBSAV(,XR2),XR1   LOAD @ OF THE DTF                04750000                
       SPACE 1                                                          04760000                
       TBN   DTFATR-1(,XR1),UPDATE     IS THIS AN UPDATE DTF            04770000                
       JF    DPRCIR                    NO, JUMP                         04780000                
       SPACE 1                                                          04790000                
       TBF   DTFATR-1(,XR1),DIRECT     IS THIS A DIRECT FILE ?          04800000                
       TBF   DTFATR(,XR1),RANDOM       OR A RANDOM FILE ?               04810000                
       JT    DPRCIR                    JUMP IF NEITHER                  04820000                
       SPACE 1                                                          04830000                
*------ IF THE FILE HAS AN SQB, IT MAY NOW BE RELEASED  --------------* 04840000                
       SPACE 1                                                          04850000                
       L     DPPOSS,XR1                PUT THE TCB @ IN XR1             04860000                
       LA    $CCCOM,XR2                LOAD @ OF $CCCCOM                04870000                
       L     @SQB(,XR2),XR2            LOAD @ OF THE FIRST SQB          04880000                
       SPACE 1                                                          04890000                
DPCSQB TBN   SQBFLG(,XR2),SQBFRE       IS THIS SQB FREE ?               04900000                
       JT    DPNXSQ                    YES, TRY THE NEXT                04910000                
       SPACE 1                                                          04920000                
       CLC   SQBIOB(2,XR2),TCBIOB(,XR1) IS THIS SQB OWNED BY THE        04930000                
*                                      IOB JUST COMPLETED ?             04940000                
       JE    DPFRSQ                    YES, GO RELEASE IT               04950000                
       SPACE 1                                                          04960000                
DPNXSQ TBN   SQBFLG(,XR2),SQBLST       IS THIS THE LAST SQB ?           04970000                
       LA    SQBLN(,XR2),XR2           LOAD @ OF NEXT SQB ANYWAY        04980000                
       BF    DPCSQB                    NO, GO TEST THIS ONE             04990000                
       J     DPRCIR                    NO SQB FOUND FOR THIS IOB, JUMP  05000000                
       SPACE 1                                                          05010000                
*------ THE COMPLETED IOB OWNED AN SQB WHICH MAY NOW BE FREED --------* 05020000                
       SPACE 1                                                          05030000                
DPFRSQ B     RQDPFR                    GO TO SQB RELEASE ROUTINE        05040000                
*                                      TO FREE THIS SQB AND POST        05050000                
*                                      ANY TASKS WAITNG FOR THE         05060000                
*                                      ENQUEUED RECORDS                 05070000                
       SPACE 1                                                          05080000                
       L     TCBIOB(,XR1),XR2          LOAD @ OF COMPLETED IOB          05090000                
       AIF   (&D45 NE '1').N45         IS 5445 SUPPORTED ?              05100000                
       SPACE 1                                                          05110000                
DEV45  EQU   X'40'                     5445 Q-BYTE BIT                  05120000                
       SPACE 1                                                          05130000                
       TBN   IOBQB(,XR2),DEV45         IS THIS A 5445 ?                 05140000                
       JT    DPZCHR                    YES, JUMP                        05150000                
       SPACE 1                                                          05160000                
.N45   ANOP                                                             05170000                
       MVI   IOBSB(,XR2),X'FF'         PUT BAD SECTOR @ IN IOB          05180000                
       AIF   (&D45 NE '1').O45         SKIP IF NO 5445 SUPPORT          05190000                
       J     DPRCIR                    JUMP OVER NSI                    05200000                
       SPACE 1                                                          05210000                
DPZCHR MVI   IOBHH(,XR2),X'FF'         PUT BAD HEAD @ IN IOB            05220000                
.O45   ANOP                                                             05230000                
       SPACE 1                                                          05240000                
DPRCIR L     DPPOSS,XR2                LOAD TCB @                       05250000                
       SPACE 1                                                          05260000                
       SPACE 2                                                          05270000                
.NSHR  ANOP                                                             05280000                
       SPACE 1                                                          05290000                
       MVI   TCBIOB-1(,XR2),NOBIT      RESET TCBIOB @ HIGH BYTE TO ZERO 05300000                
       SPACE 1                                                          05310000                
*------END OF DISK I/O WAIT INVOKING ROUTINE, RECURSE  THROUGH DISPATCH 05320000                
       SPACE 1                                                          05330000                
       LA    $CCCOM,XR2                RESET THE @ OF $CCCOM            05340000                
       B     DPACA                     GO TO INTERNAL ENTRY POINT       05350000                
       SPACE 1                                                          05360000                
*---------------------------------------------------------------------* 05370000                
*      END OF DISPATCHERS DISK I/O WAIT TESTING ROUTINE               * 05380000                
*---------------------------------------------------------------------* 05390000                
       SPACE 1                                                          05400000                
       EJECT                                                            05410000                
       SPACE 1                                                          05420000                
*------POST ANY TASKS THAT MIGHT BE AWAITING UNIT RECORD DEVICE ------* 05430000                
*------TO BECOME READY/NOT BUSY---------------------------------------* 05440000                
       SPACE 1                                                          05450000                
DPURCK EQU   *                         UNIT RECORD CHECKING ROUTINE     05460000                
       SBN   $DPFLH(,COMREG),DPNTRC+DPPOST INDICATE NO TRACE AND TURN   05470000                
*                                      'OFF' THE POST-DISPATCHABLE      05480000                
*                                      TASK-BIT                         05490000                
       BC    $CC4PS,BR97               GO POST ALL WAITOR'S FOR READY   05500000                
       DC    AL2(WPBTIO)               TIO STATUS BIT MASK              05510000                
       DC    XL2'00FF'                 GENERAL POST MASK                05520000                
       SPACE 1                                                          05530000                
       TBN   $DPFLH(,COMREG),DPPOST    DID POST MAKE ANY TASK READY?    05540000                
       AIF   (&MIN NE '1').NMIN1       MIN SYS ??                       05550000                
       SPACE 1                                                          05560000                
       JF    DPRCUR                    SKIP THE APL AND RECURSE         05570000                
       APL   0,0                       NO, LET OTHER LEVEL RUN          05580000                
       SPACE 1                                                          05590000                
.NMIN1 ANOP                                                             05600000                
       AIF   (&MIN).MIN1                                                05610000                
       JF    DPRSET                    YES, RECURSE THRU DISPATCHER     05620000                
       SPACE 1                                                          05630000                
*------INDICATE DISPATCHER IN FINAL HALT PREPARATION LOGIC -----------* 05640000                
       SPACE 1                                                          05650000                
       SBN   $DPFLH(,COMREG),DPHALT    TURN ON HALT PREPARATION BIT     05660000                
       SPACE 1                                                          05670000                
*------DON'T HALT IF ANY INTERRUPTS SINCE LAST TESTS------------------* 05680000                
       SPACE 1                                                          05690000                
       TBF   #OPEND(,COMREG),ALLBIT    ANY OP-ENDS SINCE LAST TESTING?  05700000                
       TBF   $DPFLH(,COMREG),DPCI      OR ANY CONSOLE INTERRUPT?        05710000                
       JF    DPRSET                    YES, DON'T HALT                  05720000                
       SPACE 1                                                          05730000                
*------NO INTERRUPTS, PREPARE TO HALT---------------------------------* 05740000                
       SPACE 1                                                          05750000                
       SPACE 1                                                          05760000                
* PREPARE FOR DISPATCHER'S "NO WORK" HALT                               05770000                
       SPACE 1                                                          05780000                
       AIF   (&MOD4 NE '1').MD430                                       05781000                
*  ISSUE THE NO WORK HALT ( A BLANK HPL )                               05782000                
       SPACE 1                                                          05783000                
DP@HPL HPL   0,0                       BLANK HPL (NO HALT LIGHTS)       05784000                
DPLITE EQU   *-1                       USE HPL AS WORK FIELD            05785000                
       AGO   .MD440                                                     05786000                
.MD430 ANOP                                                             05787000                
       LA    DPHTBL,XR1                XR1 -> FIRST BYTE OF HALT CODES  05790000                
       SLC   DPMVCH+4(1),X$0001(,COMREG) DECR HALT-CODE POINTER BY 1    05800000                
       JNL   DPMVCH                    IF POINTER > 0, GO MOVE CODE IN  05810000                
       SPACE 1                                                          05820000                
       MVI   DPMVCH+4,9                HALT-CODE PTR=0 -- RESET TO 9    05830000                
       SPACE 1                                                          05840000                
DPMVCH MVC   DP@HPL+2(1),##+9(,XR1)    MOVE IN RIGHT HALT CODE          05850000                
       SPACE 1                                                          05860000                
DPENAB JC    DP@HPL,BRNOP              SET TO SIO IF CCP PRIORITY       05870000                
       SPACE 1                                                          05880000                
* ISSUE THE "NO WORK" HALT -- BLITZ FOLLOWED BY SEQUENTIALLY ADVANCING  05890000                
*   DECIMAL DIGIT                                                       05900000                
       SPACE 1                                                          05910000                
DP@HPL HPL   ##,X'19'                  HALT -- NO WORK TO DO            05920000                
       SPACE 1                                                          05930000                
DPDISA JC    DPRSET,BRNOP              SET TO SIO IF CCP PRIORITY       05940000                
.MD440 ANOP                                                             05945000                
       SPACE 1                                                          05950000                
DPRSET SBF   $DPFLH(,COMREG),DPHALT        TURN OFF HALT PREP.          05960000                
*                                      FLAG BIT IN $CCCOM               05970000                
.MIN1  ANOP                                                             05980000                
DPRCUR B     DPACA                     ENTRY HERE WHEN OTHER LEVEL      05990000                
*                                       WAITS--RECURSE THROUGH DISPATCH 06000000                
       AIF   (&MOD4).MD460                                              06005000                
@DPACA EQU   DPRCUR+3                  EQUATE FOR LOAD INSTRUCTION      06010000                
       AIF   (&MIN).NMIN2              MIN-SYS???                       06020000                
       SPACE 1                                                          06030000                
* TABLE OF HALT CODES -- SEQUENCED 6 5 4 3 2 1 0 9 8 7                  06040000                
       SPACE 1                                                          06050000                
DPHTBL EQU   *                         HI-ORDER ADDRESS OF TABLE        06060000                
       DC    XL10'7D5D1B5776036F5F7F07' TABLE OF HALT CODES 6543210987  06070000                
.NMIN2 ANOP                                                             06080000                
.MD460 ANOP                                                             06085000                
       EJECT                                                            06090000                
*********************************************************************** 06100000                
*      INVOKE A READY USER TASK                                       * 06110000                
*********************************************************************** 06120000                
       SPACE 2                                                          06130000                
DPBAC  TBN   TCBTSK(,TCBREG),TCBRSM    IS THIS A SUSPENDED USER TASK    06140000                
*                                       TO BE RESUMED BY OPERATOR       06150000                
*                                       COMMAND.                        06160000                
       JF    DPXIT                     NO, INVOKE IT NORMALLY           06170000                
       SBF   TCBTSK(,TCBREG),TCBRSM    YES, TURN OFF THE SUSPENDED TASK 06180000                
*                                       RESUME BIT AND INVOKE TASK VIA  06190000                
*                                       THE RESUME INTERRUPTED TASK RTN 06200000                
       B     DPAEA                     GO TO R.I.T. ROUTINE             06210000                
       SPACE 2                                                          06220000                
*********************************************************************** 06230000                
*      EXIT TO THE TASK TO BE INVOKED--INPUT TCBREG HAS THE TCB       * 06240000                
*      ADDRESS IN IT                                                  * 06250000                
*********************************************************************** 06260000                
       SPACE 2                                                          06270000                
DPXIT  L     X$0000(,COMREG),ARR       ZERO THE ARR FOR POSSIBLE COBOL  06280000                
*                                      PROGRAM INITIAL ENTRY            06290000                
       SPACE 1                                                          06300000                
DPXITA ST    @CURTB(,COMREG),TCBREG    SET @ OF CURRENT TCB             06310000                
       SPACE 2                                                          06320000                
*---------------------------------------------------------------------* 06330000                
*      BECAUSE AN INTERRUPT HANDLING TASK CAN BE BE INVOKED DUE TO    * 06340000                
*      AN INTERRUPT, IT MAY NOT HAVE IT'S DISPATCHABILITY BIT ON.     * 06350000                
*      THEREFORE TURN IT ON PRIOR TO INVOKING THE TASK                * 06360000                
*---------------------------------------------------------------------* 06370000                
       SPACE 2                                                          06380000                
       SBN   TCBTSK(,TCBREG),TCBDSP    TURN ON DISPATCHABLE BIT         06390000                
       SPACE 1                                                          06400000                
       SPACE 1                                                          06410000                
       MVC   $DPFLG(1,COMREG),TCBFLG(,TCBREG)  RESTORE THE DISPATCHERS  06420000                
*                                      FIRST CONTROL BYTE IN $CCCOM     06430000                
*                                      FROM THIS TASKS $DPFLG SAVE BYTE 06440000                
       SPACE 1                                                          06450000                
       TBN   TCBTSK(,TCBREG),TCBDSV    DID DISPATCHER SAVE REGISTERS    06460000                
       JF    DPXITB                    NO, DON'T DECREMENT SAVE ADDRESS 06470000                
       SLC   TCBSAV(2,TCBREG),LTCBSV   DECREMENT THE TCB SAVE @         06480000                
       SBF   TCBTSK(,TCBREG),TCBDSV    SET SAVED INDICATOR OFF          06490000                
DPXITB L     TCBPSR(,TCBREG),PSR       RELOAD THE USER'S PSR            06500000                
       L     TCBSAV(,TCBREG),XR1       GET SAVE AREA @                  06510000                
       LA    TCBXR2-TCBSAV+2(,XR1),XR1 STEP TO @ OF RESUME FIELD        06520000                
       ST    DPLIAR+3,XR1              INITIALIZE THE RESUME INST.      06530000                
       L     TCBXR2-TCBARR(,XR1),XR2   RELOAD REGISTER 2                06540000                
       L     TCBXR1-TCBARR(,XR1),XR1   RELOAD REGISTER 1                06550000                
       SPACE 1                                                          06560000                
DPLIAR L     ####,IAR                  RELOAD THE IAR TO GIVE CONTROL   06570000                
*                                       TO THE TASK                     06580000                
       TITLE 'DISK&#.I/O&#.INTERCEPT&#.ROUTINE&#.--&#.$CC4IO'           06590000                
*---------------------------------------------------------------------* 06600000                
*                                                                     * 06610000                
* TITLE -- CCP DISK I/O INTERCEPT ROUTINE                             * 06620000                
*                                                                     * 06630000                
* NAME -- $CC4IO                                                      * 06640000                
*                                                                     * 06650000                
* FUNCTION --                                                         * 06660000                
*                                                                     * 06670000                
*    . TO INTERCEPT ALL ENTRIES TO LOCATION EIGHT WITHIN DSM AND TO   * 06680000                
*      ROUTE THEM TO DISK IOS AND BACK TO THE INVOKER THROUGH         * 06690000                
*      THE CCP DISPATCHER                                             * 06700000                
*                                                                     * 06710000                
* OPERATION --                                                        * 06720000                
*                                                                     * 06730000                
*    . IF DISK ERP IS IN PROCESS ALLOW THE DISK IOS ENTRY TO CONTINUE * 06740000                
*      WITH NO ACTION TAKEN BY THIS ROUTINE                           * 06750000                
*                                                                     * 06760000                
*    . TRACE THE DISK IOS ENTRY VIA CCP TRACE (ID=02)                 * 06770000                
*                                                                     * 06780000                
       AIF   (&DPF EQ '0').NPDF1       SKIP IF NON-DPF                  06790000                
*    . DETERMINE IF THE ENTRY IS FROM THE NON-CCP PROGRAM LEVEL AND   * 06800000                
*      TAKE NO ACTION IF IT IS                                        * 06810000                
*                                                                     * 06820000                
.NPDF1 ANOP                                                             06830000                
*    . SAVE THE INVOKERS REGISTERS IN THE CURRENT TCB                 * 06840000                
*                                                                     * 06850000                
       AIF   (&SHR EQ '0').NSHR1       SKIP IF NOT FILE SHARING GEN     06860000                
*    . IF THE SYSTEM IS A MULTI-TASKING SYSTEM AND THE INPUT IOB      * 06870000                
*      HAS AN ASSOCIATED DTF, GO TO THE FILE SHARING ROUTINE          * 06880000                
*                                                                     * 06890000                
.NSHR1 ANOP                                                             06900000                
*    . ALLOW THE DISK IOS REQUEST TO BE SCHEDULED BY INVOKING NCEIOS  * 06910000                
*      BUT FORCING IT TO RETURN TO THIS ROUTINE                       * 06920000                
*                                                                     * 06930000                
       AIF   (&SHR EQ '0').NSHR2       SKIP IF NOT FILE SHARING         06940000                
*    . FORCE A DISK WAIT IF THERE IS AN ASSOCIATED DTF                * 06950000                
*                                                                     * 06960000                
.NSHR2 ANOP                                                             06970000                
*    . EXIT THROUGH THE DISPATCHER BACK TO THE INVOKER                * 06980000                
*                                                                     * 06990000                
* ENTRY POINT -- $CC4IO                                               * 07000000                
*                                                                     * 07010000                
* INPUT -- THE DISK IOB ADDRESS IN REGISTER ONE                       * 07020000                
*                                                                     * 07030000                
* OUTPUT -- THE APPROPRIATE BITS SET IN $CCCOM $DPFLG TO INDICATE     * 07040000                
*      WHAT ACTION THE DISPATCHER IS TO TAKE WITH THE TASK            * 07050000                
*                                                                     * 07060000                
* EXTERNAL REFERENCES --                                              * 07070000                
*                                                                     * 07080000                
*    . CCP TRACE ROUTINE $CC4TT                                       * 07090000                
*                                                                     * 07100000                
       AIF   (&DPF EQ '0').NDPF3                                        07110000                
*    . IAR DETERMINATION ROUTINE (DPTIAR)                             * 07120000                
*                                                                     * 07130000                
.NDPF3 ANOP                                                             07140000                
*    . CCP REGISTER SAVE ROUTINE (CCPSAV)                             * 07150000                
*                                                                     * 07160000                
*    . CURRENT TCB ADDRESS (@CURTB IN $CCCOM)                         * 07170000                
*                                                                     * 07180000                
*    . CURRENT TCB TCBTSK BYTE                                        * 07190000                
*                                                                     * 07200000                
*    . DSM DISK IOS (NCEIOS)                                          * 07210000                
*                                                                     * 07220000                
       AIF   (&SHR EQ '0').NSHR4       SKIP IF NOT FILE SHARING         07230000                
*    . CCP FILE SHARING ENQUEUE ROUTINE ($CC4DI)                      * 07240000                
*                                                                     * 07250000                
.NSHR4 ANOP                                                             07260000                
*    . CCP DISPATCHER ($CC4DP)                                        * 07270000                
*                                                                     * 07280000                
* EXITS --                                                            * 07290000                
*                                                                     * 07300000                
*    . TO DISK I/O WAIT (NCEIOW) IF DISK ERP IS IN PROGRESS           * 07310000                
*                                                                     * 07320000                
*    . TO DISK IOS (NCEIOS) IF DISK ERP IS IN PROGRESS                * 07330000                
*                                                                     * 07340000                
       AIF   (&DPF EQ '0').NDPF5       SKIP IF NON-DPF                  07350000                
*    . TO DISK IOS (NCEIOS) IF THE CURRENT IAR IS NOT THE CCP IAR     * 07360000                
*                                                                     * 07370000                
.NDPF5 ANOP                                                             07380000                
*    . CCP DISPATCHER AFTER SCHEDULING THE DISK I/O                   * 07390000                
*                                                                     * 07400000                
* ATTRIBUTES --                                                       * 07410000                
*    . RESIDENT, SERIALLY REUSEABLE, GENERATED CODE                   * 07420000                
*                                                                     * 07430000                
*---------------------------------------------------------------------* 07440000                
       EJECT                                                            07450000                
$CC4IO JC    IOGOA,BR97                RESET THE FALSE BIT FOR TEST     07460000                
       SPACE 1                                                          07470000                
*---------------------------------------------------------------------* 07480000                
*      AT ENTRY TO THE CCP INTERCEPT ROUTINE, DETERMINE IF DISK       * 07490000                
*      ERROR RECOVERY PROCEDURES ARE IN PROGRESS.  IF YES THEN EXIT   * 07500000                
*---------------------------------------------------------------------* 07510000                
       SPACE 2                                                          07520000                
IOGOA  TBF   ####,NCDERP               IS DISK ERP IN PROGRESS          07530000                
       AIF   (&DPF).DP8                DPF SYSTEM??                     07540000                
       JT    IONERR                    NO, CONTINUE                     07550000                
       L     SSDIOD,IAR                YES, CONTINUE WITHOUT INTERCEPT  07560000                
IONERR EQU   *                                                          07570000                
       AGO   .DP9                                                       07580000                
.DP8   ANOP                                                             07590000                
       JF    IOEXBC                    YES, EXIT TO DISK IOS            07600000                
.DP9   ANOP                                                             07610000                
       SPACE 1                                                          07620000                
*------DISK ERP NOT ACTIVE, CONTINUE WITH INTERCEPT HANDLING----------* 07630000                
       SPACE 1                                                          07640000                
       ST    CCARR,ARR                 STORE THE ARR FOR TRACE + USER   07650000                
       AIF   (&DPF NE '1').DP10                                         07700000                
       SPACE 1                                                          07710000                
       B     DPTIAR                    DETERMINE IF THIS IS CCP         07720000                
       JE    IOA                       YES, IS CCP CALLING              07730000                
       SPACE 1                                                          07740000                
*------NOT CCP ENTERING OR DISK ERP NOT IN PROGRESS, PROCEED WITH ----* 07750000                
*------OTHER LEVEL I/O REQUEST IF BOTH CCP TRANSIENT AREAS FREE. IF---* 07760000                
*------DISK I/O REQUEST IS FOR PROGRAM SPINDLE AND CCP IS NOT IN DSM--* 07770000                
*------APL BACK TO CCP TO PREVENT DISK ARM CONTENTION ----------------* 07780000                
       SPACE 1                                                          07790000                
       L     CCARR,ARR                 RESTORE THE INPUT ARR            07800000                
       SPACE 1                                                      @10 07801000                
* **** BEFORE DEFERRING NON-CCP I/O, CHECK TO SEE IF STARTED IN     @10 07802000                
* **** SUPERVSIOR. IF IT IS, DO NOT DEFER, BUT START IMMEDIATELY.   @10 07803000                
       SPACE 1                                                      @10 07804000                
       CLC   CCARR(2),####             I/O REQUEST FROM SUPERVISOR? @10 07805000                
SUPEND EQU   *-1                       BEGINNING OF PLCA 1.         @10 07806000                
       JL    IOEXBC                    YES, GO START THE I/O REQUEST@10 07807000                
       SPACE 1                                                      @10 07808000                
       EXTRN TACBF1                    EXTERN FOR TRANSIENT AREA CHECK  07810000                
       EXTRN TACBF2                    EXTERN FOR TRANSIENT AREA CHECK  07820000                
TAVAIL EQU   BIT0                      IF ON, T.A. IS AVAILABLE         07830000                
       MZZ   IOQSTS+1,IOBQB(,XR1)      OBTAIN Q-CODE OF I/O REQUEST     07840000                
       MZZ   IOQTST+1,IOBQB(,XR1)      OBTAIN Q-CODE OF I/O REQUEST     07850000                
IOAGIN APL   0                         GO TO CCP LEVEL                  07860000                
       SPACE 1                                                          07870000                
       TBN   CCDPFH,DPDSX              DOES CCP NEED DSM T.A. ?         07880000                
       JF    IOCTAT                    NO, JUMP                         07890000                
       SPACE 1                                                          07900000                
IOTAST TBN   ####,##                   DOES OTHER LEVEL OWN DSM T.A?    07910000                
       JT    IOEXBC                    YES, LET I/O REQUEST PASS        07920000                
       SPACE 1                                                          07930000                
IOQSTS CLI   IOSYSQ,##                 ARM CONTENTION FOR SYS PACK ?    07940000                
       JE    IONOLQ                    YES, HOLD REQUEST UNTIL CCP THRU 07950000                
       SPACE 1                                                          07960000                
IOCTAT TBN   TACBF1,TAVAIL             Q-THIS CCP TRANSIENT AREA FREE?  07970000                
       TBN   TACBF2,TAVAIL             Q-THIS CCP TRANSIENT AREA FREE?  07980000                
       JT    IOEXBC                    GO TO IOS ONLY IF BOTH ARE FREE  07990000                
       SPACE 1                                                          08000000                
IOQTST CLI   IOPGMQ,##                 ARM CONTENTION FOR PGM PACK ?    08010000                
       JNE   IOEXBC                    NO, LET I/O REQUEST PASS         08020000                
       SPACE 1                                                          08030000                
IONOLQ L     IOLOOP,IAR                SET IAR FOR LOOP BACK            08040000                
       SPACE 1                                                          08050000                
IOPGMQ DC    AL1(##)                   STORAGE FOR Q BYTE CHECK         08060000                
IOSYSQ DC    AL1(##)                   STORAGE FOR Q BYTE CHECK         08070000                
IOLOOP DC    AL2(IOAGIN)               SET UP FOR RETURN LOOP           08080000                
       SPACE 1                                                          08090000                
IOEXBC L     SSDIOD,IAR                PROCEED TO DISK IOS ROUTINE      08100000                
       SPACE 1                                                          08110000                
*------IS CCP ROUTINE THAT HAS BEEN INTERCEPTED-----------------------* 08120000                
.DP10  ANOP                                                             08130000                
IOA    EQU   *                                                          08131000                
       AIF   (&UR41 EQ '0').DP15       3741 SUPPORT?                    08132000                
       TBN   IOBQB(,XR1),X'40'         3741 IOB?                        08133000                
       TBF   IOBQB(,XR1),X'B8'         YES?                             08134000                
       JF    IOA41                     NO, GO AROUND                    08135000                
       L     CCARR,ARR                 YES, DO NOT PROCESS              08136000                
       L     SSDIOD,IAR                         THIS REQUEST            08137000                
IOA41  EQU   *                                                          08138000                
.DP15  ANOP                                                             08139000                
       SPACE 1                                                          08140000                
       B     $CC4TT                    INVOKE CCP TRACE                 08142000                
       DC    AL1(TTIOD)                TRACE ID FOR DISK I/O DISPATCH   08144000                
*                                      ENTRY                            08146000                
       B     CCPSAV                    SAVE INPUT REGISTERS             08150000                
       SPACE 1                                                          08160000                
       AIF   (&SHR NE '1').DP20        FILE SHARING SYSTEM???           08170000                
       SPACE 1                                                          08180000                
*------GO TO FILE SHARE IF DTF EXISTS FOR THE IOB---------------------* 08190000                
       SPACE 1                                                          08200000                
       TBF   IOBFLG(,XR1),NODTF        ANY DTF FOR THIS IOB?            08210000                
       BT    $CC4DI                    GO TO FILE SHARE MODULE IF YES   08220000                
       SPACE 1                                                          08230000                
*------------END OF FILE SHARING LOGIC--------------------------------* 08240000                
.DP20  ANOP                                                             08250000                
       SPACE 1                                                          08260000                
       L     CCURTB,XR2                CCP LEVEL, GET CURRENT TCB @     08270000                
       SBN   TCBTSK(,XR2),TCBDSV       SET DISPATCHER SAVED REGS BIT-1  08280000                
       SPACE 1                                                          08290000                
IOAA   B     ####                      GO TO DISK IOS                   08300000                
SSDIOD EQU   IOAA+3                    *S* @ OF DSM IOS EPA             08310000                
       SPACE 1                                                          08320000                
       AIF   (&SHR).DP22               FILE SHARING SUPPORT ?           08330000                
       J     IORET                     RETURN TO INVOKER                08340000                
       AGO   .DP23                                                      08350000                
.DP22  ANOP                                                             08360000                
       TBN   IOBFLG(,XR1),NODTF        ANY DTF FOR THIS IOB??           08370000                
       JT    IORET                     YES, SKIP FORCING A WAIT         08380000                
       J     DWTRCW                    GO FORCE TASK TO WAIT            08390000                
.DP23  ANOP                                                             08400000                
       SPACE 2                                                          08410000                
*********************************************************************** 08420000                
*            END OF DIODSP ROUTINE                                    * 08430000                
*********************************************************************** 08440000                
       TITLE 'DISK&#.WAIT&#.INTERCEPT&#.ROUTINE&#.--&#.$CC4IW'          08450000                
*---------------------------------------------------------------------* 08460000                
*                                                                     * 08470000                
* TITLE -- CCP DISK I/O WAIT INTERCEPT ROUTINE                        * 08480000                
*                                                                     * 08490000                
* NAME -- $CC4IW                                                      * 08500000                
*                                                                     * 08510000                
* FUNCTION --                                                         * 08520000                
*                                                                     * 08530000                
*    . TO INTERCEPT ALL ENTRIES TO LOCATION TWELVE  WITHIN DSM AND TO * 08540000                
*      ROUTE THEM TO DISK I/O WAIT AND BACK TO THE INVOKER THROUGH    * 08550000                
*      THE CCP DISPATCHER                                             * 08560000                
*                                                                     * 08570000                
* OPERATION --                                                        * 08580000                
*                                                                     * 08590000                
*    . IF DISK ERP IS IN PROCESS ALLOW THE WAIT ENTRY TO CONTINUE     * 08600000                
*      WITH NO ACTION TAKEN BY THIS ROUTINE                           * 08610000                
*                                                                     * 08620000                
*    . IF THE IOB IS MARKED COMPLETE, DON'T TRACE THE ENTRY           * 08630000                
*                                                                     * 08640000                
*    . TRACE THE DISK WAIT ENTRY VIA CCP TRACE (ID=03)                * 08650000                
*                                                                     * 08660000                
       AIF   (&DPF EQ '0').NPDF6       SKIP IF NON-DPF                  08670000                
*    . DETERMINE IF THE ENTRY IS FROM THE NON-CCP PROGRAM LEVEL AND   * 08680000                
*      TAKE NO ACTION IF IT IS                                        * 08690000                
*                                                                     * 08700000                
.NPDF6 ANOP                                                             08710000                
*    . SAVE THE INVOKERS REGISTERS IN THE CURRENT TCB                 * 08720000                
*                                                                     * 08730000                
*    . IF THE IOB IS MARKED COMPLETE, DON'T CAUSE THE TASK TO WAIT,   * 08740000                
*      ELSE INDICATE TO THE DISPATCHER THAT THE TASK IS TO WAIT       * 08750000                
*      FOR DISK I/O COMPLETE                                          * 08760000                
*                                                                     * 08770000                
*    . EXIT TO THE CCP DISPATCHER VIA WAIT ($CC4WT)                   * 08780000                
*                                                                     * 08790000                
* ENTRY POINT -- $CC4IW                                               * 08800000                
*                                                                     * 08810000                
* INPUT -- THE DISK IOB ADDRESS IN REGISTER ONE                       * 08820000                
*                                                                     * 08830000                
* OUTPUT -- THE APPROPRIATE BITS SET IN $CCCOM $DPFLG TO INDICATE     * 08840000                
*      WHAT ACTION THE DISPATCHER IS TO TAKE WITH THE TASK            * 08850000                
*                                                                     * 08860000                
* EXTERNAL REFERENCES --                                              * 08870000                
*                                                                     * 08880000                
*    . CCP TRACE ROUTINE $CC4TT                                       * 08890000                
*                                                                     * 08900000                
       AIF   (&DPF EQ '0').NDPF7                                        08910000                
*    . IAR DETERMINATION ROUTINE (DPTIAR)                             * 08920000                
*                                                                     * 08930000                
.NDPF7 ANOP                                                             08940000                
*    . CCP REGISTER SAVE ROUTINE (CCPSAV)                             * 08950000                
*                                                                     * 08960000                
*    . CURRENT TCB ADDRESS (@CURTB IN $CCCOM)                         * 08970000                
*                                                                     * 08980000                
*    . CURRENT TCB TCBTSK BYTE                                        * 08990000                
*                                                                     * 09000000                
* EXITS --                                                            * 09010000                
*                                                                     * 09020000                
*    . DSM DISK I/O WAIT ROUTINE (NCEIOW)                             * 09030000                
*                                                                     * 09040000                
*    . CCP DISPATCHER ($CC4DP)                                        * 09050000                
*                                                                     * 09060000                
       AIF   (&DPF EQ '0').NDPF8       SKIP IF NON-DPF                  09070000                
*    . TO DISK I/O WAIT (NCEIOW) IF THE CURRENT IAR IS NOT THE CCP IAR* 09080000                
*                                                                     * 09090000                
.NDPF8 ANOP                                                             09100000                
*    . CCP DISPATCHER TO CAUSE THE TASK TO WAIT/EXIT                  * 09110000                
*                                                                     * 09120000                
* ATTRIBUTES --                                                       * 09130000                
*                                                                     * 09140000                
*    . RESIDENT, SERIALLY REUSEABLE, GENERATED CODE                   * 09150000                
*                                                                     * 09160000                
*---------------------------------------------------------------------* 09170000                
       EJECT                                                            09180000                
$CC4IW JC    IWGOA,BR97                RESET THE FALSE BIT FOR TEST     09190000                
       SPACE 1                                                          09200000                
*---------------------------------------------------------------------* 09210000                
*      AT ENTRY TO THE CCP INTERCEPT ROUTINE, DETERMINE IF DISK       * 09220000                
*      ERROR RECOVERY PROCEDURES ARE IN PROGRESS.  IF YES THEN EXIT   * 09230000                
*---------------------------------------------------------------------* 09240000                
       SPACE 2                                                          09250000                
IWGOA  TBF   ####,NCDERP               IS DISK ERP IN PROGRESS          09260000                
       AIF   (&DPF).DP30               DPF SYSTEM??                     09270000                
       JT    IWNERR                    NOT IN DISK ERP                  09280000                
       L     @DWT1,IAR                 IS IN DISK ERP, CONTINUE TO IOS  09290000                
IWNERR EQU   *                         NOT IN DISK ERP                  09300000                
       AGO   .DP31                                                      09310000                
.DP30  ANOP                                                             09320000                
       JF    IWEXC                     YES, EXIT TO DISK IOS            09330000                
.DP31  ANOP                                                             09340000                
       SPACE 1                                                          09350000                
*------DISK ERP NOT ACTIVE, CONTINUE WITH INTERCEPT HANDLING----------* 09360000                
       SPACE 1                                                          09370000                
       ST    CCARR,ARR                 SAVE INPUT ARR                   09380000                
       SPACE 1                                                          09470000                
IWNTRC EQU   *                         EQUATE FOR NO TRACE JUMP         09510000                
       SPACE 1                                                          09520000                
       AIF   (&DPF NE '1').DP35        DPF SYSTEM ??                    09530000                
       B     DPTIAR                    GO SEE IF THIS IS CCP ENTERING   09540000                
       JE    DWTA                      YES                              09550000                
       SPACE 1                                                          09560000                
*------NOT CCP IAR, EXIT AND PROCEED TO DPF'S DISK WAIT REQUEST-------* 09570000                
       SPACE 1                                                          09580000                
       L     CCARR,ARR                 RESTORE THE ARR FOR CONTINUATION 09590000                
       APL   0                         LET CCP LEVEL RUN                09600000                
IWEXC  L     @DWT1,IAR                 PROCEED TO DISK IOS WAIT ROUTINE 09610000                
       SPACE 1                                                          09620000                
.DP35  ANOP                                                             09630000                
       SPACE 2                                                          09640000                
*********************************************************************** 09650000                
*            CCP ENTRY PROCESS                                        * 09660000                
*********************************************************************** 09670000                
       SPACE 2                                                          09680000                
DWTA   EQU   *                                                          09680700                
       AIF   (&UR41 EQ '0').DP37       3741 SUPPORT?                    09681400                
       TBN   IOBQB(,XR1),X'40'         YES, IS THIS A 3741 IOB?         09682100                
       TBF   IOBQB(,XR1),X'B8'         IS IT READ OR WRITE?             09682800                
       JF    DW3741                    NO, JUMP AROUND                  09683500                
       L     CCARR,ARR                 YES, DONT PROCESS THIS           09684200                
       L     @DWT1,IAR                               REQUEST            09684900                
DW3741 EQU   *                                                          09685600                
.DP37  ANOP                                                             09686300                
       B     $CC4TT                    INVOKE CCP TRACE                 09687000                
       DC    AL1(TTIOW)                TRACE ID FOR DISK WAIT INTERCEPT 09687700                
       SPACE 1                                                          09688400                
       B     CCPSAV                    GO SAVE REGISTERS IN TCB         09690000                
       SPACE 1                                                          09700000                
       L     CCURTB,XR2                GET @ OF CURRENT TCB             09710000                
       SBN   TCBTSK(,XR2),TCBDSV       INDICATE THAT DISPATCHER SAVED   09720000                
*                                      SO THAT THEY WILL BE RESTORED    09730000                
       TBN   IOBCMP(,XR1),BIT1         IS THIS IOB MARKED COMPLETE      09740000                
       TBF   IOBCMP(,XR1),BIT0+BIT2+BIT3 WAS THE IOB WAITED ?           09750000                
       JF    DWTACA                    NO, PUT INTO WAIT                09760000                
       SPACE 1                                                          09770000                
*------END OF INTERCEPT FOR DISK IOS, RETURN TO USER PROGRAM----------* 09780000                
       SPACE 2                                                          09790000                
IORET  SBN   CCDPFL,DPXSMC             SET EXIT INTERCEPT BIT           09800000                
IORETA SBF   CCDPFL,DPREG+DPDSP        SET REG + DISP BITS OFF          09810000                
       SBN   CCDPFH,DPNTRC             DON'T HAVE THIS DISP. ENTRY      09820000                
*                                      TRACED                           09830000                
       B     $CC4DP                    EXIT VIA DISPATCHER              09840000                
       SPACE 1                                                          09850000                
       SPACE 1                                                          09860000                
       SPACE 1                                                          09870000                
DWTACA SBN   CCDPFH,DPNTRC             DON'T TRACE WAIT ENTRY TO $CC4DP 09880000                
DWTRCW ST    TCBIOB(,XR2),XR1          SAVE THE @ OF THE WAITED ON IOB  09890000                
       SBF   CCDPFL,DPREG              MAKE SURE THAT REGS AREN'T SAVED 09900000                
       SPACE 2                                                          09910000                
*------GO TO CCP WAIT ROUTINE TO WAIT ON DISK I/O COMPLETION----------* 09920000                
       SPACE 2                                                          09930000                
DWTAC  B     $CC4WT                    EXIT VIA CCP WAIT ROUTINE        09940000                
       DC    AL2(256*WPADIO)           DISK WAIT MASK DEFINITION        09950000                
       DC    IL1'1'                    WAIT COUNT OF ONE                09960000                
DWWTFL DC    AL1(DPDSP)                TURN ON TO FORCE A WAIT FOR THIS 09970000                
*                                      TASK CONTROL BLOCK               09980000                
       SPACE 2                                                          09990000                
       AIF   (&DPF NE '1').DP40        DPF SYSTEM ??                    10000000                
       TITLE 'CCP&#.-&#.NON&#.CCP&#.IAR&#.DETERMINATION&#.ROUTINE'      10010000                
*---------------------------------------------------------------------* 10020000                
*      ROUTINE TO DETERMINE IF THE CURRENT IAR IS FOR CCP OR NOT      * 10030000                
*      IF YES, THE ROUTINE WILL SET THE EQUAL BIT OF THE PSR ON       * 10040000                
*      IF NOT, THE EQUAL BIT OF THE PSR WILL BE OFF                   * 10050000                
*---------------------------------------------------------------------* 10060000                
       SPACE 2                                                          10070000                
       SPACE 2                                                          10080000                
DPTIAR ST    DPTIEX+3,##               STORE CCP'S IAR VALUE            10090000                
DPIARQ EQU   DPTIAR+1                  EQUATE FOR Q-BYTE EXTRN          10100000                
DPTIMY CLC   DPTIEX+3(2),DPTICI        IS THIS THE CCP ENTERING         10110000                
       ST    DPTIEX+3,ARR              SAVE RETURN ADDRESS              10120000                
DPTIEX B     ####                      RETURN TO INVOKER                10130000                
*            EQUAL IF CCP IS ACTIVE PROGRAM LEVEL                       10140000                
*            NOT EQUAL IF NOT CCP ACTIVE                                10150000                
       SPACE 1                                                          10160000                
DPTICI DC    AL2(DPTIMY)               @ OF COMPARE INSTRUCT FOR        10170000                
*                                      ACTIVE IAR VALUE                 10180000                
       SPACE 1                                                          10190000                
*------END OF CCP IAR DETERMINATION ROUTINE---------------------------* 10200000                
       SPACE 2                                                          10210000                
.DP40  ANOP                                                             10220000                
*                                      END MACRO $E040 1/7/73           10230000                
*                                      END OF CCP DISPATCHER $CC4DP     10240000                
       MEND                                                             10250000