 TITLE   'IGG019KY - EXTENDED SEARCH FOR WRITE ADD MODULE,SELF FORMAT'  00060002
IGG019KY CSECT                                                        * 00070002
*                                                                     * 00080000
*MODULE NAME - IGG019KY                                               * 00090002
*                                                                     * 00092002
*DESCRIPTIVE NAME - BDAM CHAN PGM MOD FOR EXTENDED SEARCH, WRITE ADD  * 00094002
*                                                                     * 00096002
*COPYRIGHT - NONE                                                     * 00098002
*                                                                     * 00098402
*CHANGE ACTIVITY                                                      * 00098802
*                                                                       00099202
*        VS2 RELEASE 2                                                  00099602
*                                                                Y02072 00104702
*                                                                YM3029 00109802
*                                                                       00111802
*                                                                       00113802
*FUNCTION/OPERATION- THIS ROUTINE IS ENTERED FROM 19KM/19KN WHEN A NEW* 00114902
*   BLOCK IS TO BE ADDED BUT WILL NOT FIT ON THE CURRENT TRACK. THIS  * 00120000
*   ROUTINE INCREMENTS THE DEVICE ADDRESS TO THE NEXT TRACK, AND CHECK* 00140000
*   FOR A VALID ADDRESS, ADDRESS WITHIN THE EXTENT AND WITHIN THE     * 00160000
*   SEARCH LIMITS.                                                    * 00180000
*                                                                     * 00200000
*ENTRY POINT- 'IGG019KY' (BEGIN) IS ENTERED FROM 19KM/19KN BY THE     * 00220002
*   CALLING SEQUENCE,   L    15,DCBDFOR                               * 00240000
*                       L    15,4(15)                                 * 00260000
*                       BALR 12,15                                    * 00280000
*                                                                     * 00300000
*INPUT- THE FOLLOWING REGISTERS ARE LOADED BY IGG019KM/IGG019KN       * 00320002
*   1 - IOB ADDRESS                                                   * 00340000
*   11- ADDRESS OF THE CORRECT ENTRY IN THE DIRECT ACCESS DEVICE TABLE* 00360000
*                                                                     * 00380000
*OUTPUT- THE NEW TRACK ADDRESS WILL BE PLACED IN IOBSEEK FIELD AND    * 00400000
*   AN 'EXCP' GIVEN TO RESTART THE CHANNEL PROGRAM. IF NO TRACK       * 00420000
*   ADDRESS CAN BE ASSIGNED, THIS ROUTINE RETURNS TO 19KM/19KN TO SET * 00440002
*   THE ABNORMAL COMPLETION INDICATION.                               * 00460000
*                                                                     * 00480000
*EXTERNAL ROUTINE- 'IGG019LC' (END-OF-EXTENT APPENDAGE) IS ENTERED IF * 00500000
*   THE NEW TRACK ADDRESS IS NOT WITHIN THE CURRENT EXTENT.           * 00520000
*                                                                     * 00540000
*EXIT-NORMAL- 'EXIT3' IS THE POINT AT WHICH AN 'EXCP' IS GIVEN AND    * 00560000
*   A RETURN TO SUPERVISOR EFFECTED BY USE OF THE 'EXIT' SVC.         * 00580000
*                                                                     * 00600000
*EXIT-ERROR- 'EXIT2' IS THE RETURN TO 19KM/19KN WHEN THE SEARCH LIMIT * 00620002
*   HAS BEEN REACHED. 19KM/19KN WILL SET INDICATIONS OF ABNORMAL      * 00640002
*   COMPLETION, NO-SPACE-FOUND.                                       * 00660000
*                                                                     * 00680000
*TABLES/WORK AREAS- THE DIRECT ACCESS DEVICE TABLE (DADT) IS USED TO  * 00700000
*   DETERMINE THE PHYSICAL CHARACTERISTICS OF THE CURRENT DEVICE.     * 00720000
*                                                                     * 00740000
*ATTRIBUTES- THIS ROUTINE IS REUSABLE, EXECUTED ENABLED WITH THE      * 00760002
*   PROTECT KEY OF THE PROBLEM PROGRAM.                               * 00780000
*                                                                     * 00800000
*                                                                     * 00820000
*                                                                       00840000
         EJECT                                                          00860000
*                                                                       00880000
*  REGISTER USAGE                                                       00900000
*                                                                       00920000
         USING IGG019KY,EPREG                                           00940000
         USING IOBDEF,IOBREG                                            00960000
         USING DEBDEF,DEBREG                                            00980000
*                                                                       01000000
WKREG    EQU   1                        WORK REGISTER                   01020000
WKREG1   EQU   7                        DADT ENTRY FOR THIS DEVICE      01040000
DEBREG   EQU   8                        DEB ADDRESS                     01060000
WKREG2   EQU   9                        WORK REGISTER/CCHH INDEX        01080000
WKREG3   EQU   11                       WORK REGISTER                   01100000
IOBREG   EQU   12                       IOB ADDRESS                     01120000
INTRET   EQU   14                      INTERNAL LINKAGE REGISTER        01140000
EPREG    EQU   15        ENTRY POINT/BASE                               01160000
*                                                                       01180000
EXIT     EQU   3         SVC CODE FOR 'EXIT'                            01200000
*                                                                       01220000
*                                                                       01240000
BEGIN    MVC   IOBCSW(4),MAXCC(WKREG1)  MOVE TOTAL CCHH VALUES TO IOB   01260000
         MVC   IOBCSW+4(4),IOBSEEK+3    MOVE CCHH FOR ALIGNMENT         01280000
         MVI   IOBSEEK+7,0             ZERO OUT R OF IOBSEEK            01300000
         L     DEBREG,IOBDCBPT          SET POINTER TO                  01320000
         L     DEBREG,DCBDEBAD(0,DEBREG) THE DEB AND TO THE             01340000
         SR    WKREG3,WKREG3             CURRENT                        01360000
         IC    WKREG3,IOBSEEK            EXTENT                         01380000
         SLL   WKREG3,4                  IN THE DEB                     01400000
         AR    WKREG3,DEBREG                                            01420000
*                                                                       01440000
         LA    IOBREG,0(0,IOBREG)      CLEAR THE HI-ORDER BYTE TO ZERO  01460000
         LA    WKREG2,3(0,IOBREG)       SET CCHH INDEX TO LAST H        01480000
         L     WKREG,IOBCSW+4           LOAD SEEK ADDRESS CCHH TO AN    01500000
         TM    BYTEDEV(WKREG1),BYTE     ARE ADDRESS BYTES CONTIGUOUS    01520000
         BZ    DOWNONE                  BRANCH IF CONTIG ADDRESS BYTES  01540000
*                                                          ACCUMULATOR  01560000
ADDONE   AH    WKREG,ONE                ADD ONE TO SOME BYTE OF CCHH    01580000
         TM    BYTEDEV(WKREG1),BYTE     IF THIS DEVICE HAS NON-         01600000
         BC    1,USEBYTE                 CONTIGUOUS BYTES, BRANCH       01620000
         STH   WKREG,IOBCSW-IOBDEF+4(0,WKREG2) STORE NEW CC OR HH VALUE 01640000
         CLC   IOBCSW-IOBDEF+4(2,WKREG2),IOBCSW-IOBDEF(WKREG2)          01660000
*                                      IS THE NEW CC OR HH VALID VALUE  01680000
         BC    4,TSTEXT                  IF OK, GO TEST EXTENT LIMIT    01700000
         SRL   WKREG,16                 SHIFT TO NEXT VALUES            01720000
         MVC   IOBCSW-IOBDEF+4(2,WKREG2),ZERO  ZERO THESE TWO BYTES     01740000
         BCTR  WKREG2,0                 DECREMENT INDEX TO              01760000
DOWNONE  BCTR  WKREG2,0                  THE NEXT VALUE                 01780000
         CR    WKREG2,IOBREG            HAS ALL OF CCHH BEEN INCREMENTD 01800000
         BC    10,ADDONE                 NO, REPEAT LOOP                01820000
*                                                                       01840000
EXIT1    L     EPREG,DEBAPPAD           LOCATE END-OF-EXTENT MODULE     01860000
         L     EPREG,EOE(0,EPREG)        FROM THE APPENDAGE LIST        01880000
         BC    15,4(0,EPREG)            AND GO THERE                    01900000
*                                                                       01920000
USEBYTE  EQU   *                                                        01940000
         STC   WKREG,IOBCSW-IOBDEF+4(0,WKREG2)  STORE NEW BYTE OF CCHH  01960000
         SRL   WKREG,8                  SHIFT TO THE NEXT VALUE         01980000
         CLC   IOBCSW-IOBDEF+4(1,WKREG2),IOBCSW-IOBDEF(WKREG2)          02000000
*                                      CHECK VALIDITY OF NEW BYTE       02020000
         BC    4,TSTEXT                 IF OK, GO TEST EXTENT LIMIT     02040000
         MVI   IOBCSW-IOBDEF+4(WKREG2),0  ZERO THIS BYTE OF CCHH        02060000
         BC    15,DOWNONE               GO SEE IF ALL BYTES PROCESSED   02080000
*                                                                       02100000
TSTEXT   MVC   IOBSEEK+3(4),IOBCSW+4    MOVE NEW CCHH BACK TO SEEK ADDR 02120000
         CLC   IOBSEEK+3(4),DEBENDCC-DEBDEF(WKREG3)  IF THE NEW CCHH    02140000
*                                       IS OUTSIDE OF THE CURRENT       02160000
         BC    2,EXIT1                  EXTENT, GO TO THE END-OF-EXTENT 02180000
*                                       MODULE.                         02200000
         CLC   IOBSEEK,IOBUPLIM         HAS SEARCH LIMIT BEEN REACHED   02220000
EXIT2    BC    8,4(0,INTRET)           YES, RETURN TO SET NO-SPACE-     02240000
*                                        FOUND BIT                      02260000
EXIT3    EQU   *                                                        02280000
         BR    INTRET                                                   02300000
*                                                                       02320000
*                                                                       02340000
*                                                                       02360000
ONE      DC    H'1'      ONE                                            02380000
ZERO     DC    H'0'      ZEROS                                          02400000
MAXCC    EQU   0         TOTAL CYLINDERS AND TRACKS(CCHH) IN DADT       02460000
BYTEDEV  EQU   9         OFFSET IN DADT TO THE FLAG BYTE                02480000
BYTE     EQU   2         DADT FLAG- BYTES OF CCHH ARE NON-CONTIGUOUS    02500000
*                                                                       02520000
EOE      EQU   0         OFFSET TO EOE ADDRESS IN APPENDAGE LIST        02540000
*                                                                       02560000
DCBDEBAD EQU   44        OFFSET TO DEB ADDRESS IN THE DCB               02580000
DCBDFOR  EQU   92        OFFSET TO SELF-FORMAT MODULE ADDRESS IN DCB    02600000
MODID    DC    C'IGG019KY'              MODULE ID                Y02072 02610002
PATCH    DC    XL50'0'                  PATCH AREA               Y02072 02612002
         EJECT                                                          02620000
*      I/O BLOCK (IOB) DEFINITION                                       02640000
*                                                                       02660000
*              STANDARD IOB                                             02680000
         DS    0F                                                       02700000
IOBDEF   DSECT                                                          02720000
IOBFLAG1 DS    CL1            STATUS FLAG                               02740000
IOBFLAG2 DS    CL1            ERROR FLAG                                02760000
IOBSENSE DS    CL2            SENSE BYTES 0 AND 1                       02780000
IOBECBPT DS    CL4            ECB POINTER                               02800000
IOBCSW   DS    0CL8           CHANNEL STATUS WORD                       02820000
IOBCSWCA DS    0CL4           COMMAND ADDRESS                           02840000
         DS    CL1                                                      02860000
         DS    CL3                                                      02880000
IOBCSWST DS    CL2            STATUS BYTES                              02900000
IOBCSWCT DS    CL2            REMAINING COUNT                           02920000
IOBSTART DS    0CL4           CHANNEL PROGRAM POINTER                   02940000
IOBSIOCC DS    CL1            SIO CONDITION CODE                        02960000
         DS    CL3                                                      02980000
IOBDCBPT DS    0CL4           DCB POINTER                               03000000
IOBWGHT  DS    CL1            CHANNEL WEIGHT                            03020000
         DS    CL3                                                      03040000
IOBRESTR DS    0CL4           RESTART POINTER                           03060000
         DS    CL1                                                      03080000
         DS    CL3                                                      03100000
IOBINCAM DS    CL2            BLOCK COUNT INCREMENT AMOUNT              03120000
IOBERRCT DS    CL2            ERROR COUNTER                             03140000
IOBSEEK  DS    CL8            SEEK ADDRESS                              03160000
*        BDAM EXTENDED IOB                                              03180000
*                                                                       03200000
IOBDBYTR DS    CL2            BYTES REMAINING ON TRACK                  03220000
IOBDIOBS DS    CL2            SIZE OF THIS IOB                          03240000
IOBDPLAD DS    0CL4           IOB POOL LINK ADDRESS                     03260000
IOBDAVLI DS    CL1            IOB AVAILABILITY INDICATOR                03280000
         DS    CL3                                                      03300000
IOBDTYPE DS    CL2            TYPE FIELD                                03320000
IOBDSTAT DS    CL2            IOB STATUS                                03340000
IOBDCPND DS    CL4            CHANNEL PROGRAM NORMAL END ADDRESS        03360000
IOBDBYTN DS    CL2            BYTES NEEDED BY NEW RECORD                03380000
         DS    CL2                                                      03400000
IOBDQPTR DS    CL4            LINK FIELD FOR QUEUED IOB'S               03420000
IOBUPLIM DS    CL8            LIMIT MBBCCHHR FOR EXTENDED SEARCH        03440000
IOBDNRCF DS    CL8            COUNT FIELD FOR NEW RECORD                03460000
IOBCP    DS    CL8            FIRST CCW IN CHANNEL PROGRAM              03480000
         EJECT                                                          03500000
*                                                                       03520000
*      DATA EXTENT BLOCK (DEB) DEFINITION                               03540000
*                                                                       03560000
DEBDEF   DSECT                                                          03580000
         DS    0F                                                       03600000
DEBNMSUB DS    0CL1      NO. OF SUBR. LOADED BY OPEN                    03620000
DEBTCBAD DS    CL4       ADDRESS OF THE TCB FOR THIS DEB                03640000
DEBAMLNG DS    0CL1      NO. OF BYTES IN THE ACCESS MTHD. DPDT. SECTION 03660000
DEBDEBAB DS    CL4       ADDRESS OF THE PREVIOUS DEB IN THE SAME TASK   03680000
DEBOFLGS DS    0CL1      DATA SET STATUS FLAGS                          03700000
DEBIRBAD DS    CL4       IRB ADDRESS                                    03720000
DEBOPATB DS    0CL1      TYPE OF FILES                                  03740000
DEBSYSPG DS    CL4       ADDRESS OF FIRST IOB IN THE SYSTEM PURGE CHAIN 03760000
DEBNMEXT DS    0CL1      NUMBER OF EXTENTS SPECIFIED IN THE DSCB        03780000
DEBUSRPG DS    CL4       ADDRESS OF FIRST IOB IN THE USER PURGE CHAIN   03800000
DEBPRIOR DS    0CL1      ALWAYS ZERO                                    03820000
DEBECBAD DS    CL4       ECB ADDRESS FOR SVC PURGE REQUEST              03840000
DEBPROTG DS    0CL1      RESERVED FOR FUTURE USE (FIRST 4 BITS)         03860000
DEBDEBID DS    0CL1      HEX 'F' TO IDENTIFY THIS BLOCK AS A DEB        03880000
DEBDCBAD DS    CL4       ADDRESS OF THE DCB ASSOCIATED WITH THIS DEB    03900000
DEBEXSCL DS    0CL1      EXTENT SCALE                                   03920000
DEBAPPAD DS    CL4       ADDRESS OF I/O APPENDAGE VECTOR TABLE          03940000
DEBDVMOD DS    0CL1      DEVICE MODIFIER FILE MASK                      03960000
DEBUCBAD DS    CL4       ADDR OF UCB ASSOCIATED WITH THIS DATA EXTENT   03980000
DEBBINUM DS    CL2       RESERVED FOR FUTURE USE-ALWAYS ZERO            04000000
DEBSTRCC DS    CL2       STARTING CYLINDER NUMBER FOR EXTENT            04020000
DEBSTRHH DS    CL2       STARTING HEAD NUMBER FOR EXTENT                04040000
DEBENDCC DS    CL2       ENDING CYLINDER NUMBER FOR EXTENT              04060000
DEBENDHH DS    CL2       ENDING HEAD NUMBER FOR EXTENT                  04080000
DEBNMTRK DS    CL2       NUMBER OF TRACKS ALLOCATED TO A GIVEN EXTENT   04100000
DEBSUBID EQU   0         SUBROUTINE ID'S                                04120000
         END                                                            04140000
