TITLE 'IGG019UP - ASYNCHRONOUS READY PROCESSOR 05/01/73' 00050002 IGG019UP CSECT 00100002 * 00110000 *********************************************************************** 00112000 * * 00120000 * MAINTENANCE ACTIVITY * 00130000 * * 00140000 * ZA00537 (12/19/74) ZA00549 (12/19/74) * 00142000 * ZA08050 (01/30/76) ZA08056 (01/30/76) * 00144000 * ZA14028 (09/14/76) * 00146000 *********************************************************************** 00148000 * 00148400 * /* START OF SPECIFICATIONS **** 00150002 * 00200002 *01* MODULE-NAME = IGG019UP (OS/360 CQ513) 00250002 *01* COPYRIGHT = NONE 00300002 *01* STATUS = 00 00350002 *01* CHANGE-ACTIVITY = NONE 00400002 *01* DESCRIPTIVE-NAME = LOCAL 3270 READY ROUTINE 00450002 *01* FUNCTION = PROCESS ASYNCHRONOUS DE INTERRUPTS FROM 3270 LOCAL 00500002 * DEVICES. ROUTINE IS ASYNCHRONOUSLY SCHEDULED BY FIRST LEVEL 00550002 * ATTENTION ROUTINE (IECTATEN) IF: 1) THE USER SPECIFIED 'READYQ=0' 00600002 * IN A DCB MACRO INSTRUCTION FOR A LOCAL 3270 LINE GROUP, 2) THE 00650002 * USER HAS ATTEMPTED TO OPEN THE PREVIOUSLY MENTIONED LINE GROUP, 00700002 * 3) AND THE DEVICE FROM WHICH AN UNSOLICITED DEVICE END INTERRUPT 00750002 * IS RECEIVED WAS NOT READY (INTERVENTION REQUIRED) AT OPEN TIME; 00800002 * OR AN INTERVENTION REQUIRED CONDITION HAS PREVIOUSLY BEEN 00850002 * DETECTED BY LOCAL 3270 ERP'S FOR A DEVICE WHICH HAD BEEN IN USE 00900002 * AND AN UNSOLICITED DEVICE END INTERRUPT IS RECEIVED. 00950002 *01* NOTES = STANDARD CODING PRACTICES, AS DESCRIBED BY SDD 01000002 * PROGRAMMING STANDARDS, ARE FOLLOWED. 01050002 *02* DEPENDENCIES = NONE 01100002 *02* PERFORMANCE = NOT APPLICABLE 01150002 *02* RESTRICTIONS = NONE 01200002 *02* REGISTER-CONVENTIONS = SEE EQUATES IMMEDIATLY FOLLOWING THIS 01250002 * PROLOG 01300002 *02* PATCH-LABEL = MAINPTCH 01350002 *01* MODULE-TYPE = MODULE 01400002 *02* PROCESSOR = ASSEMBLER 01450002 *02* MODULE-SIZE = 200 BYTES 01500002 *02* ATTRIBUTES = REENTERABLE 01550002 *01* ENTRY = IGG019UP 01600002 *02* PURPOSE = ENTERED AT FIRST EXECUTABLE INSTRUCTION VIA 01650002 * SCHEDULING OF IRB 01700002 *02* LINKAGE = BALR 01750002 *02* INPUT = REGISTER ONE CONTAINS THE RLN OF THE DEVICE WHICH CAME 01800002 * READY IN THE HIGH BYTE AND THE ADDRESS OF THE DEB FOR THE LINE 01850002 * GROUP. THIS COMES FROM THE IQE PARAMETER FIELD WHERE IT WAS 01900002 * PLACED BY IECTATEN BEFORE BRANCHING TO THE ASYNCHRONOUS EXIT 01950002 * EFFECTOR STAGE 2 TO SCHEDULE THIS ROUTINE. 02000002 *02* OUTPUT = IF A READ INITIAL WAS PENDING FOR THE LINE GROUP, A 02050002 * RESETPL WILL HAVE BEEN DONE. OTHERWISE, THE UCBGRAF FIELD WILL 02100002 * HAVE BEEN SET SUCH THAT THE NEXT READ INITIAL FOR THIS LINE 02150002 * GROUP WILL RESULT IN A RESETPL TYPE COMPLETION. THE DECB WILL 02200002 * HAVE BEEN MODIFIED AS FOLLOWS (IN EITHER CASE): 1) DECFLAGS 02250002 * WILL CONTAIN A X'F0', 2) DECPOLPT WILL CONTAIN THE RLN OF THE 02300002 * DEVICE WHICH CAME READY. IN THE EVENT OF MULTIPLE DEVICES IN 02350002 * THE SAME LINE GROUP COMING READY, THEY WILL BE PROCESSED 02400002 * SIMILARLY TO ATTENTIONS. THAT IS TO SAY, ONE WILL BE PROCESSED 02450002 * FOR EACH READ INITIAL ISSUED TO THE LINE GROUP, THE SEARCH FOR 02500002 * A READY DEVICE BEGINNING WITH THE RLN SPECIFIED IN THE READ 02550002 * INSTRUCTION. 02600002 *02* EXIT-NORMAL = BRANCH RETURN ON THE ENTRY CONTENTS OF REGISTER 02650002 * 14 02700002 *02* EXIT-ERROR = NONE 02750002 *01* EXTERNAL-REFERENCES = SEE FOLLOWING: 02800002 *02* ROUTINES = NONE 02850002 *02* DATA-SETS = NONE 02900002 *02* DATA-AREA = UCB, DEB, DCB, DECB, IOB 02950002 *01* TABLES = NONE 03000002 *01* MACROS = RESETPL IECTUCBX IECTIOBX IECTDEBX IECTDECB 03050002 * 03100002 **** END OF SPECIFICATIONS ***/ 03150002 * 03200002 * EQUATE THE GENERAL REGISTERS 03250002 * 03300002 RPARM0 EQU 0 PARAMETER REGISTER 0 03350002 RPARM1 EQU 1 PARAMETER REGISTER 1 03400002 REVN EQU 2 EVEN OF ARITHMETIC PAIR 03450002 RODD EQU 3 ODD OF ARITHMETIC PAIR 03500002 RRLN EQU 4 RLN SAVE REGISTER 03550002 RDEB EQU 5 DEB SAVE REGISTER 03600002 RSAVE EQU 6 RETURN POINT SAVE REGISTER 03650002 RUCB EQU 7 UCB ADDRESS REGISTER 03700002 RDECB EQU 8 DECB ADDRESS REGISTER 03750002 RWORK1 EQU 9 WORK REGISTER 03800002 RWORK2 EQU 10 WORK REGISTER 03850002 RIC EQU 11 CHARACTER REGISTER 03900002 RBASE EQU 12 BASE REGISTER 03950002 RWORKD EQU 13 UTILITY REGISTER 04000002 RRTRN EQU 14 LINK REGISTER 04050002 REP EQU 15 ENTRY POINT REGISTER 04100002 RROUTE EQU 15 ROUTING REGISTER FOR SVC 116 04150002 * 04200002 SPACE 3 04250002 * 04300002 * EQUATE THE CONSTANTS 04350002 * 04400002 ONE EQU 1 NUMBER 1 04450002 TWO EQU 2 NUMBER 2 04500002 THREE EQU 3 NUMBER 3 04550002 FOUR EQU 4 NUMBER 4 04600002 FIVE EQU 5 NUMBER 5 04650002 SIX EQU 6 NUMBER 6 04700002 SEVEN EQU 7 NUMBER 7 04750002 EIGHT EQU 8 NUMBER 8 04800002 NINE EQU 9 NUMBER 9 04850002 TEN EQU 10 NUMBER 10 04900002 * 04950002 * GRAPHICS STATUS FIELD FLAGS 05000002 * 05050002 OPENINIT EQU X'80' OPEN IS IN PROGRESS 05100002 OPENRDY EQU X'40' DEVICE CAME READY DURING OPEN 05150002 DVCRDY EQU X'20' DEVICE CAME READY - NOT IN OPEN 05200002 BTAMROUT EQU X'10' USING IGG019UP 05250002 USERROUT EQU X'08' USING USER WRITTEN EXIT 05300002 * NOTE: THIS FLAG SHOULD NEVER BE 05350002 * ON UPON ENTRY TO IGG019UP 05400002 RDYNDONE EQU X'04' PROCESSING OF 'DEVICE CAME READY 05450002 * CONDITION' NOT COMPLETE 05500002 DVCNRDY EQU X'02' DEVICE HAS RETURNED INTERVENTION 05550002 * REQUIRED (SET BY IGG0194P IF 05600002 * DETECTED DURING OPEN OR 05650002 * IGE0210E IF SUBSEQUENT TO OPEN) 05700002 RSVED EQU X'01' FLAG RESERVED FOR BTAM'S USE 05750002 * 05800002 * GRAPHICS CONTROL BYTE FLAGS 05850002 * 05900002 ONLINTST EQU X'80' ONLINE TEST CURRENTLY HAS THE 05950002 * DEVICE 06000002 DEERR EQU X'40' DEVICE END WITH ERROR 06050002 * IN IECTATEN 06100002 RDTIACTV EQU X'08' READ TI ACTIVE FLAG (SET BY 06150002 * IECTSVC FOR DURATION OF READ 06200002 * INITIAL) 06250002 RDTIPEND EQU X'04' READ TI PENDING (SET BY IECTSVC 06300002 * IF NO ATTENTIONS AT INITIATION 06350002 * OF READ INITIAL, RESET BY 06400002 * IECTATEN WHEN IGG019PG IS 06450002 * SCHEDULED TO ACTUALLY PERFORM 06500002 * THE EXCP FOR THE READ) 06550002 SKIP EQU X'02' DO NOT HONOR ATTENTIONS FROM 06600002 * DEVICE FOR READ TI'S 06650002 ATTEN EQU X'01' ATTENTION RECEIVED FROM DEVICE 06700002 * 06750002 * OTHER EQUATES 06800002 * 06850002 ALLON EQU X'FF' ALL BITS IN A BYTE 06900002 NOBITS EQU X'00' ALL BITS OFF IN A BYTE 06950002 READY EQU X'F0' DECFLAGS FOR READY DEVICE 07000002 SADENERR EQU X'80' IOBINCAM OPEN FAIL BIT 07050002 EJECT 07100002 BALR RBASE,0 ESTABLISH BASE REGISTER 07150002 USING *,RBASE AND ASSEMBLER ADDRESSABILITY 07200002 B PASTID BRANCH AROUND ID NOW 07250002 DC C'IGG019UP' TO LOCATE IN DUMP 07300000 DC C'** MVS *' 07303000 DC C'&SYSDATE' ASSEMBLY DATE 07306000 PATCH DC 48XL1'00' PATCH AREA 07320000 PASTID DS 0H AROUND ID 07350002 LR RSAVE,RRTRN SAVE RETURN ADDRESS 07400002 XR RRLN,RRLN CLEAN RLN REGISTER 07450002 LR RDEB,RPARM1 SAVE DEB AND RLN 07500002 SLDL RRLN,EIGHT PLUG RLN 07550002 SRL RDEB,EIGHT PUT DEB ADDRESS BACK 07600002 USING IECTDEB+36,RDEB ESTABLISH DEB ADDRESSABILITY 07650002 LR RODD,RRLN GET THE RLN 07700002 BCTR RODD,0 REDUCE BY ONE 07750002 LA REVN,FOUR GET LENGTH OF EXTENT 07800002 MR REVN,REVN RODD CONTAINS DISPLACEMENT 07850002 * FROM DEB EXTENT LIST TO 07900002 * EXTENT FOR THIS DEVICE 07950002 L RUCB,DEBUCBAD(RODD) GET THE UCB ADRESS 08000002 LA RUCB,0(RUCB) INSURE HIGH BYTE CLEAR 08050002 L RWORK1,DEBUCBAD GET MASTER UCB ADDRESS 08100002 LA RWORK1,0(RWORK1) INSURE HIGH BYTE CLEAR 08150002 USING UCB,RUCB ESTABLISH UCB ADDRESSABILITY 08200002 USING MSTRUCB,RWORK1 ESTABLISH MASTER ADDRESSABILITY 08250002 TM UCBGRAF,DVCRDY THIS DEVICE COME READY ? 08300002 BNO CANTDO NO, CAN'T PROCESS THIS DEVICE 08350002 CLI MTRINRLN,NOBITS INITIALIZED ? 08400002 BE CANTDO NO, NO IOB TO USE 08450002 XR RWORKD,RWORKD CLEAR REG 08500002 IC RWORKD,MTRINRLN GET INIT RLN 08550002 L RWORK2,MTRDEBAD GET THE DEB ADDRESS 08600002 LA RWORK2,0(RWORK2) INSURE HIGH BYTE CLEAR 08650002 CR RDEB,RWORK2 DEB SAME AS PASSED ? 08700002 BNE CANTDO NO, CONTROL BLOCKS MESSED UP 08750002 OI MTRGRAF,RDYNDONE SET READY NOT DONE 08800002 DROP RWORK1 DON'T NEED MASTER ANY MORE 08850002 L RWORK1,DEBPROTG GET THE DCB ADDRESS 08900002 LA RWORK1,0(RWORK1) INSURE HIGH BYTE CLEAR 08950002 USING IHADCB,RWORK1 ESTABLISH DCB ADDRESSABILITY 09000002 L RWORK2,DCBIOBAD GET ADDRESS OF IOB POOL 09050002 LR RODD,RWORKD GET RLN 09100002 XR REVN,REVN CLEAN EVEN REGISTER 09150002 IC REVN,DCBEIOBX GET SIZE OF IOB 09200002 LR RWORKD,RWORK1 SAVE DCB ADDRESS 09250002 DROP RWORK1 DON'T NEED DCB ANYMORE 09300002 MR REVN,REVN RODD CONTAINS DISPLACEMENT 09350002 * FROM TOP OF IOB POOL TO 09400002 * IOB FOR THIS DEVICE 09450002 LA RWORK1,0(RODD,RWORK2) GET IOB ADDRESS 09500002 USING IECTIOB,RWORK1 ESTABLISH IOB ADDRESSABILITY 09550002 L RWORK2,IOBECBPT GET DECB ADDRESS 09600002 LA RWORK2,0(RWORK2) INSURE HIGH BYTE CLEAR 09650002 USING IECTDECB,RWORK2 ADDRESS DECB 09700002 STC RRLN,DECRLN UPDATE RLN TO READY DEVICE 09750002 DROP RWORK1 DON'T NEED IOB ANYMORE 09850002 B RESETPL BRANCH TO RESETPL LD YA02128 09900002 CONTINUE EQU * LD YA02128 09910002 LTR REP,REP RETURN ZERO ? 09950002 BNZ OPENOF NO, DON'T RESET FLAGS 10000002 USING IECTDECB,RWORK2 ESTABLISH DECB ADDRESSABILITY 10050002 NI DECFLAGS,NOBITS RESET THE FLAGS 10100002 OI DECFLAGS,READY SET DEVICE CAME READY 10150002 STC RRLN,DECPOLPT+THREE PLUG THE RLN LD YA03233 10200002 OPENOF EQU * RESET SAD/ENABLE FAILED IN IOB 10250002 USING IHADCB,RWORKD ESTABLISH DCB ADDRESSABILITY 10300002 L RWORK2,DCBIOBAD GET ADDRESS OF IOB POOL 10350002 LR RODD,RRLN GET RLN 10400002 XR REVN,REVN CLEAR EVEN REG 10450002 IC REVN,DCBEIOBX GET SIZE OF IOB 10500002 DROP RWORKD DON'T NEED DCB ANY MORE 10550002 MR REVN,REVN RODD CONTAINS DISPLACEMENT 10600002 * FROM TOP OF IOB POOL TO 10650002 * IOB FOR THIS DEVICE 10700002 LA RWORK1,0(RODD,RWORK2) GET IOB ADDRESS 10750002 USING IECTIOB,RWORK1 ESTABLISH IOB ADDRESSABILITY 10800002 NI IOBINCAM,ALLON-SADENERR TURN OFF SAD ENABLE FAILED 10850002 DROP RWORK1 DON'T NEED IOB ANYMORE 10900002 CANTDO EQU * PROCESSING COMPLETE 10950002 LR RRTRN,RSAVE PICK UP RETURN POINT 11000002 BR RRTRN RETURN TO AEE2 11050002 EJECT 11200002 * 11210002 * 11220002 * THIS SUBROUTINE WILL SIMULATE RESETPL MACRO LD YA02128 11230002 * EXPANSION. (RESETPL MACRO EXPANSION IS NOT LD YA02128 11240002 * RE-ENTRANT.) LD YA02128 11242002 * 11244002 * 11246002 SPACE 4 11248002 * REGISTER EQUATONS LD YA02128 11248402 * 11248802 EXTREG EQU 0 NO. OF EXT LD YA02128 11249602 RLNREG EQU 1 RELATIVE LINE NUMBER REG LD YA02128 11253002 WORKREG EQU 1 WORK REG LD YA02128 11256402 DEBREG EQU 2 DEB ADDRESS LD YA02128 11259802 IOBREG EQU 3 IOB ADDRESS LD YA02128 11263202 UCBREG EQU 7 UCB ADDRESS LD YA02128 11266602 UCBPTR EQU 9 UCB POINTER LD YA02128 11276602 DECBREG EQU 10 DECB ADDRESS LD YA02128 11278602 DCBREG EQU 14 DCB ADDRESS LD YA02128 11280602 CODEREG EQU 15 RETURN CODE REG LD YA02128 11282602 * 11283002 SPACE 4 11283102 * 11283202 * MISCELANEOUS EQUATIONS LD YA02128 11288802 * 11290802 ZERO EQU 0 LD YA02128 11292802 SIXTEEN EQU 16 LD YA02128 11293202 TWENTY4 EQU 24 LD @ZA00537 11293303 X01 EQU X'01' LD YA02128 11293602 RDINT EQU X'01' LD YA02128 11294002 X0C EQU X'0C' LD YA02128 11294102 OPCOMPLT EQU X'40' LD YA02128 11294202 X58 EQU X'58' LD YA02128 11294302 XBF EQU X'BF' LD YA02128 11308202 SVC116 EQU 116 LD YA02128 11318202 * 11320202 SPACE 4 11320602 RESETPL EQU * LD YA02128 11321002 XR RLNREG,RLNREG CLEAR REG 1 LD YA02128 11321402 IC RLNREG,DECRLN GET RLN FROM DECB LD YA02128 11321802 L DCBREG,DECDCBAD GET DCB ADDRESS LD YA02128 11321902 USING IHADCB,DCBREG DCB ADDRESSABILITY LD YA02128 11322002 TM DCBOFLGS,DCBOFOPN HAS DCB BEEN OPENED LD YA02128 11322102 BO RESETPL0 IF SO, CONTINUE LD YA02128 11326702 LA CODEREG,X0C IF NOT,SET RETURN CODE LA YA02128 11328702 B RESETPL7 AND EXIT LD YA02128 11330702 RESETPL0 EQU * LD YA02128 11331102 L DEBREG,DCBDEBAD GET ADDR OF DEB LD YA02128 11331202 LA DEBREG,ZERO(DEBREG) CLEAR HIGH-ORDER BYTE LD YA02128 11331302 SLA RLNREG,TWO MULTIPLY RLN BY 4 LD YA02128 11331402 L UCBREG,DEBUCBAD-FOUR(RLNREG) UCB ADDR LD YA02128 11336002 CLI UCBTBYT3,UCB3DISP DEVICE CLASS=GRAPHICS LD YA02128 11338002 BNE RESETPL6 NO, DEVICE IS NOT ANR LD YA02128 11340002 CLI DECTYPE+ONE,RDINT IS OP. READ INITIAL LD YA02128 11340402 BNE RESETPL5 NO, GIVE RC=10 AND EXIT LD YA02128 11340500 TM DECSDECB,OPCOMPLT IS THIS OP COMPLETED LD YA02128 11340602 BO RESETPL4 YES, GIVE RC=4 AND EXIT LD YA02128 11340702 LR RPARM0,DECBREG DECB ADDR IN REG 0 LD YA02128 11352502 LR RPARM1,UCBREG UCB ADDR IN REG 1 LD YA02128 11362502 LA CODEREG,FOUR ROUTING CODE IN REG 15 LD YA02128 11364502 SVC SVC116 ISSSUE SVC 116 LD YA02128 11368402 SLL CODEREG,TWENTY4 MAKE SURE THAT ONLY... LD @ZA00537 11368803 SRL CODEREG,TWENTY4 ...RC IN REG 15 LD @ZA00537 11369203 LA WORKREG,FOUR ESTABLISH COMPARANT LD YA02128 11370402 CR CODEREG,WORKREG IS RC 0 OR 4 LD YA02128 11372402 BH RESETPL8 NO, CHECK RC=16 @ZA14028 11376300 L IOBREG,DCBIOBAD GET IOB ADDRESS LD YA02128 11378302 USING IECTIOB,IOBREG IOB ADDRESSABILITY LD YA02128 11378702 LA IOBREG,X58(IOBREG) GET ADDR OF FIRST IOB LD YA02128 11380302 XR EXTREG,EXTREG CLEAR REG 0 LD YA02128 11384202 IC EXTREG,DEBNMEXT GET NO. OF EXTENT LD YA02128 11386202 * AND USE AS LOOP COUNTER LD YA02128 11388202 LA UCBPTR,DEBUCBAD ADDR OF 1ST DEB UCB PTR LD YA02128 11398502 RESETPL1 EQU * LD YA02128 11408602 OI IOBFLAG2,X01 SET RESETPL ISSUED FLAG LD YA02128 11408702 TM IOBINCAM,X01 RFT IN PROGRESS LD YA02128 11412102 BO RESETPL3 YES, ADJUST RC LD YA02128 11414102 L UCBREG,ZERO(UCBPTR) ADDRESS OF UCB LD YA02128 11414502 TM UCBFLA,UCBPST OUTSTANDING I/O OP. LD YA02128 11414902 BO RESETPL2 YES, KEEP IOB BUSY LD YA02128 11415302 NI IOBINCAM,XBF TURN OFF IOB BUSY FLAG LD YA02128 11415402 RESETPL2 EQU * LD YA02128 11415502 LA IOBREG,X58(IOBREG) STEP TO NEXT IOB LD YA02128 11415602 LA UCBPTR,FOUR(UCBPTR) STPE TO NEXT UCB PTR LD YA02128 11419002 BCT EXTREG,RESETPL1 LOOP IF NOT FINISHED LD YA02128 11421002 B RESETPL7 EXIT LD YA02128 11421402 RESETPL3 EQU * LD YA02128 11421802 XR CODEREG,CODEREG SET RC TO ZERO LD YA02128 11422202 B RESETPL2 @ZA08056 11422300 RESETPL4 EQU * LD YA02128 11422402 LA CODEREG,FOUR SET RC TO 4 LA YA02128 11422502 B RESETPL7 EXIT LD YA02128 11425902 RESETPL5 EQU * LD YA02128 11427902 LA CODEREG,SIXTEEN SET RC TO X'10' LD YA02128 11428300 B RESETPL7 EXIT LD YA02128 11428700 RESETPL6 EQU * LD YA02128 11429102 LA CODEREG,EIGHT SET RC TO 8 LD YA02128 11429202 RESETPL7 EQU * LD YA02128 11429302 B CONTINUE LD YA02128 11429402 RESETPL8 EQU * @ZA14028 11429800 LA WORKREG,SIXTEEN ESTABLISH COMPARAND @ZA14028 11430800 CR CODEREG,WORKREG IS RC=16 @ZA14028 11431800 BNE RESETPL7 NO - EXIT WITH ORIG RC @ZA14028 11432800 TM DECSDECB,OPCOMPLT IS OPERATION COMPLETE @ZA14028 11433800 BO RESETPL4 YES - GIVE RC=4 AND EXIT @ZA14028 11434800 B RESETPL7 EXIT WITH ORIG RC @ZA14028 11435800 DROP IOBREG 11441302 EJECT 11443002 UCB DSECT 11444702 IEFUCBOB 11446402 EJECT 11448102 MSTRUCB DSECT LD YA02128 11449802 MTRGRAF EQU MSTRUCB+(UCBGRAF-UCBOB) LD YA02128 11451502 MTRINRLN EQU MSTRUCB+(UCBINRLN-UCBOB) 11453202 MTRRLN EQU MSTRUCB+(UCBRLN-UCBOB) 11454902 MTRDEBAD EQU MSTRUCB+(UCBCTLNK-UCBOB) 11456602 EJECT 11458302 IECTIOBX 11460002 EJECT 11462002 IECTDEBX 11470002 EJECT 11472002 IECTDECB 11480002 EJECT 11482002 DCBD DSORG=BX 11490002 EJECT 11492002 END IGG019UP 11500002