RNH TITLE 'DMKRNH (CP) VM/370 - RELEASE 6' 00001000 ISEQ 73,80 VALIDATE SEQUENCING OF INPUT @V200820 00002000 COPY OPTIONS @V200820 00003000 COPY LOCAL OPTIONS @V200820 00004000 SPACE 2 00005000 *. 00006000 * MODULE NAME - 00007000 * 00008000 * DMKRNH 00009000 * 00010000 * CONTENTS - 00011000 * 00012000 * DMKRNHIN - SECOND LEVEL INTERRUPT HANDLER FOR 3704, 3705 00013000 * DMKRNHIC - CONTASK INITIALIZATION AND SCHEDULING 00014000 * DMKRNHND - SCHEDULE CONTROL AND/OR RESET FUNCTIONS 00015000 *. 00016000 SPACE 2 00017000 DMKRNH START 00018000 SPACE 00019000 USING PSA,0 @V200820 00020000 USING CONTASK,R6 @V200820 00021000 USING RDEVBLOK,R8 @V200820 00022000 USING NICBLOK,R9 @V200820 00023000 USING IOBLOK,R10 @V200820 00024000 USING VMBLOK,R11 @V200820 00025000 SPACE 00026000 EXTRN DMKIOSQR,DMKSTKCP,DMKCVTBH @V200820 00027000 EXTRN DMKQCNCL,DMKQCNET,DMKQCNTO @V200820 00028000 EXTRN DMKCNSED,DMKSCNRU,DMKERMSG @V200820 00029000 EXTRN DMKSCNAU,DMKVSPRT,DMKCVTDT @V200820 00030000 EXTRN DMKCFMBK,DMKCFMAT,DMKBLDVM @V200820 00031000 EXTRN DMKIOERN,DMKNLEMP,DMKNLDR @V407508 00032100 EXTRN DMKCPVAE,DMKRIORN @VM01040 00033000 EXTRN DMKQCNWT @V407508 00033100 SPACE 00034000 ENTRY DMKRNHIC,DMKRNHIN,DMKRNHND @V200820 00035000 ENTRY DMKRNHTG REQUEST TAG SOURCE FIELD @V200820 00036000 ENTRY DMKRNHTR USERID FOR BTU TRACE OUTPUT @V200820 00037000 ENTRY DMKRNHCT STATISTICAL COUNTER BLOCK @V200820 00038000 EJECT 00039000 *. 00040000 * SUBROUTINE NAME - 00041000 * 00042000 * DMKRNHIC 00043000 * 00044000 * FUNCTION - 00045000 * 00046000 * TO INITIALIZE THE CONTASK FIELDS WHICH COMPRISE THE 00047000 * 370X NETWORK CONTROL PROGRAM BASIC TRANSMISSION HEADER 00048000 * 00049000 * ATTRIBUTES - 00050000 * 00051000 * SERIALLY REUSEABLE, RESIDENT, ENTERED VIA GOTO 00052000 * 00053000 * ENTRY CONDITIONS - 00054000 * 00055000 * GR 12 = ADDRESS OF DMKRNHIC 00056000 * GR 11 = ADDRESS OF A VALID VMBLOK 00057000 * GR 8 = ADDRESS OF THE 370X RDEVBLOK 00058000 * 00059000 * EXIT CONDITIONS - 00060000 * 00061000 * EXIT IS MADE VIA GOTO DMKDSPCH 00062000 * 00063000 * CALLS TO OTHER ROUTINES - 00064000 * 00065000 * DMKFREE - TO ALLOCATE FREE STORAGE FOR CONTASK'S 00066000 * 00067000 * EXTERNAL REFERENCES - NONE 00068000 * 00069000 * TABLES / WORK AREAS - NONE 00070000 * 00071000 * NOTES - 00072000 * 00073000 * DMKRNHIC IS ENTERED VIA CPEXBLOK OR GOTO WHENEVER 00074000 * DMKQCN HAS STACKED A CONTASK ON THE 370X RDEVBLOK, 00075000 * AND THE CONTASK CHAIN WAS PREVIOUSLY EMPTY, OR IF 00076000 * THE CONTASK HAD THE 'PRIORITY' FLAG SET. 00077000 * 00078000 * REGISTER USAGE - 00079000 * 00080000 * GR14,15 LINKAGE REGISTERS 00081000 * GR12,13 MODULE BASE REGISTERS 00082000 * GR11 = VMBLOK ADDRESSABILITY 00083000 * GR10 = IOBLOK ADDRESSABILITY 00084000 * GR 9 = NICBLOK ADDRESSABILITY 00085000 * GR 8 = RDEVBLOK ADDRESSABILITY 00086000 * GR 7 = INTERNAL LINKAGE REGISTER 00087000 * GR 6 = CONTASK ADDRESSABILITY 00088000 * GR0-5= WORK REGISTERS 00089000 * 00090000 EJECT 00091000 * OPERATION - 00092000 * 00093000 * 1. IF THE 370X IS NOT AVAILABLE, EXIT. 00094000 * 00095000 * 2. IF THERE ARE NO MORE CONTASK'S TO BE PROCESSED, 00096000 * ATTEMPT TO START OUTPUT TO THE 370X VIA RNSTART. 00097000 * 00098000 * 3. IF THE RESOURCE SPECIFIED BY THE VMTRMID FIELD IN 00099000 * THE VMBLOK (FROM 'CONUSER') IS NOT AVAILABLE, SET 00100000 * RETURN CODE 12 IN THE RESPONSE SAVEAREA (IF ANY), 00101000 * AND RETURN THE CONTASK VIA CALL DMKQCNET. 00102000 * 00103000 * 4. WRITE TASK - SET CONTCMD TO WRITNRM, SET WRTSTPR 00104000 * IN CONDFLG. IF LOGDROP OR LOGHOLD SPECIFIED, OR IF 00105000 * CONRESP OR CONSPLT IS SET, TURN OFF WRTSTPR. IF 00106000 * LOGDROP IS SET, CHANGE COMMAND TO WRITEOT. FOR 00107000 * LOGHOLD, SET COMMAND TO WRITDSC. 00108000 * 00109000 * 5. READ TASK - SET CONTCMD TO READNRM. IF INHIBIT 00110000 * WAS SPECIFIED, AND NICPSUP IS NOT SET, OR NICTYPE 00111000 * IS NICTELE, BUILD A CONTASK TO WRITE A MASKING 00112000 * STRING PRIOR TO ISSUING THE READ. INITIALIZE BOTH 00113000 * THE READ TASK AND THE WRITE MASK TASK. 00114000 * IF NICPSUP IS SET, BUILD A CONTASK TO SEND BYPASS 00115000 * CHARACTER (X'24'), THEN READ, THEN SEND RESTORE 00116000 * CHARACTER (X'14'). INITIALIZE ALL THREE TASKS. 00117000 * 00118000 * 6. ATTEMPT TO START OUTPUT TO THE 370X. IF THE 370X 00119000 * IS EITHER NOT READY OR ALREADY BUSY, EXIT. 00120000 * OTHERWISE, SCAN THE ENTIRE NICLIST LOOKING FOR 00121000 * CONTASK'S TO BE SENT TO THE 370X. AS MANY CONTASK'S 00122000 * AS POSSIBLE ARE SENT WITH A SINGLE CALL TO DMKIOSQR. 00123000 *. 00124000 EJECT 00125000 USING DMKRNHIC,R12 @V200820 00126000 DMKRNHIC DS 0D WAKE-UP ENTRY FROM DMKQCN @V200820 00127000 LM R12,R13,RNHBASE SETUP MODULE ADDRESSABILITY @V200820 00128000 USING DMKRNH,R12,R13 @V200820 00129000 SPACE 00130000 TM RDEVSTAT,RDEVDED+RDEVDISA+RDEVNRDY AVAILABLE ?@V200820 00131000 BNZ GODSPCH NO -- JUST GO AWAY FOR NOW @V200820 00132000 SLR R10,R10 CLEAR IOBLOK REGISTER (NO IOBLOK)@V200820 00133000 NEXTASK EQU * PROCESS ONE OR MORE CONTASK'S @V200820 00134000 L R6,RDEVCON PICK UP POINTER TO CONTASK @V200820 00135000 LTR R6,R6 ANYTHING THERE ? @V200820 00136000 BZ RNSTART NO -- TRY TO START THE DEVICE @V200820 00137000 L R1,CONPNT REMOVE FIRST CONTASK FROM CHAIN @V200820 00138000 ST R1,RDEVCON ... @V200820 00139000 SPACE 00140000 L R1,CONUSER GET ADDRESS OF CONTASK OWNER @V407508 00141100 BAL R7,SWITCHVM SWITCH TO THIS VMBLOK @V407508 00142100 SPACE 00144000 LA R7,NEXTASK RETURN ADDRESS IF LINE BREAK @V200820 00145000 LH R9,VMTRMID GET RESOURCE ID OF USER TERMINAL @V200820 00146000 N R9,F4095 CLEAR THE DEVICE CODE PORTION @V200820 00147000 CH R9,RDEVMAX VALIDATE IT FOR SAFETY @V200820 00148000 BH LINEBRK ASSUME HIS TERMINAL DIED @V200820 00149000 LTR R9,R9 CHECK THE LOWER BOUND ALSO @V200820 00150000 BNP LINEBRK RESOURCE ZERO IS SPECIAL @V200820 00151000 SPACE 00152000 MH R9,=AL2(NICSIZE*8) COMPUTE NICBLOK LIST INDEX @V200820 00153000 AL R9,RDEVNICL INDEX TO THE ACTUAL NICBLOK @V200820 00154000 TM NICSTAT,NICDISA+NICDED+NICEPMD AVAILABLE ? @V200820 00155000 BNZ LINEBRK NO -- LINE BREAK @V200820 00156000 L R1,NCONTSK NUMBER OF TASKS FROM DMKQCN @V200820 00157000 AL R1,F1 INCREMENT . . . @V200820 00158000 ST R1,NCONTSK . . . @V200820 00159000 TM CONSTAT,CONCNTL IS THIS A CONTROL TASK ? @V200820 00160000 BO RNCNTRL YES - SHOULD BE ALL SET @V200820 00161000 TM CONSTAT,CONOUTPT IS THIS AN OUTPUT CONTASK ? @V200820 00162000 BO RNWRITE YES - GO FIGURE OUT COMMAND @V200820 00163000 SLR R0,R0 @V200820 00164000 STH R0,CONDCNT NO DATA SENT WITH READ REQUEST @V200820 00165000 LA R1,READNRM NORMAL READ COMMAND + MODIFIER @V200820 00166000 TM CONPARM,INHIBIT SUPPRESS TYPEOUT ? @V200820 00167000 BZ RNCOMND NO -- JUST LET IT GO AS IS @V200820 00168000 STH R1,CONTCMD SET THE COMMAND FOR THIS TASK @V200820 00169000 LA R5,NEXTASK BRANCH ADDRESS AFTER MASK SETUP @VM08679 00170000 MASKING EQU * HERE TO RETRY AN INHIBIT READ @VM08679 00171000 BAL R7,TAGTASK FILL IN OTHER BTU FIELDS @V200820 00172000 LR R4,R6 CONTASK ADDRESS TO GR4 @V200820 00173000 TM NICTYPE,NICTELE TELEGRAPH TERMINAL ? @V200820 00174000 BO MASKTTY YES - TYPE A MASK FIRST @V200820 00175000 TM NICFLAG,NICPSUP PRINT SUPPRESS AVAILABLE ? @V200820 00176000 BZ MASKIBM NO -- TYPE 1050, 2741 MASK @V200820 00177000 EJECT 00178000 BYPREST EQU * SEND BYPASS, READ, SEND RESTORE @V200820 00179000 LA R0,CONTSIZE+1 GET ANOTHER CONTASK @V200820 00180000 BAL R3,INHTASK ...WITHOUT CHAINING IT @V200820 00181000 MVI CONDCNT+1,1 DATA COUNT = ONE @V200820 00182000 MVC CONDATA(8),ZEROES CLEAR THE BUFFER @V200820 00183000 MVI CONDATA,X'24' BYPASS CHARACTER @V200820 00184000 BAL R7,TAGTASK FILL IN THE BTU @V200820 00185000 BAL R7,TASKENQ CHAIN THE WRITE BYPASS TASK @V200820 00186000 LR R6,R4 ORIGINAL READ CONTASK TO GR6 @V200820 00187000 BAL R7,TASKENQ CHAIN IN THE READ SECOND @V200820 00188000 LA R0,CONTSIZE+1 GET A THIRD CONTASK @V200820 00189000 BAL R3,INHTASK . . . @V200820 00190000 MVI CONDCNT+1,1 DATA COUNT = ONE @V200820 00191000 MVC CONDATA(8),ZEROES CLEAR THE BUFFER @V200820 00192000 MVI CONDATA,X'14' RESTORE CHARACTER @V200820 00193000 LA R1,WRITNRM WRITE COMMAND @V200820 00194000 B RNCOMND USE THE NORMAL PATH NOW @V200820 00195000 SPACE 00196000 MASKTTY EQU * TYPE READ MASK FOR TELETYPE @V200820 00197000 LA R0,CONTSIZE+(TTYMASL+7)/8 TASK SIZE NEEDED @V200820 00198000 BAL R3,INHTASK GET AN ISOLATED CONTASK @V200820 00199000 MVI CONDCNT+1,TTYMASL DATA LENGTH @V200820 00200000 MVC CONDATA(TTYMASL),TTYMASK MOVE IN THE MASK @V200820 00201000 B MASKWRT GO QUEUE THE TASKS FOR EXECUTION @V200820 00202000 SPACE 00203000 MASKIBM EQU * TYPE MASK FOR 1050, 2741 @V200820 00204000 LA R0,CONTSIZE+(IBMMASL+7)/8 CONTASK SIZE @V200820 00205000 BAL R3,INHTASK GET AN ISOLATED CONTASK @V200820 00206000 MVI CONDCNT+1,IBMMASL DATA LENGTH @V200820 00207000 MVC CONDATA(IBMMASL),IBMMASK MOVE IN THE MASK @V200820 00208000 MASKWRT EQU * QUEUE THE TASKS FOR EXECUTION @V200820 00209000 BAL R7,TAGTASK FILL IN THE BTU @V200820 00210000 TM CONSTAT-CONTASK(R4),CONRTRY RETRY OPERATION ? @VM08679 00211000 BZ *+8 NO -- O.K. AS IS @VM08679 00212000 OI CONSTAT,CONRTRY SET RETRY IN MASK WRITE @VM08679 00213000 BAL R7,TASKENQ QUEUE THE MASK WRITE FIRST @V200820 00214000 LR R6,R4 @V200820 00215000 BAL R7,TASKENQ THEN QUEUE IN THE READ @V200820 00216000 L R4,CONRETN RESPONSE SAVEAREA ADDRESS @VM08679 00217000 SLR R0,R0 @VM08679 00218000 ST R0,SAVER2-SAVEAREA(,R4) SET RETURN CODE ZERO @VM08679 00219000 BR R5 RETURN AND CONTINUE @VM08679 00220000 EJECT 00221000 INHTASK EQU * ALLOCATE CONTASK FOR READ INHIBIT@V200820 00222000 BAL R7,CTLTASZ GET A CONTROL CONTASK @V200820 00223000 L R1,CONPNT PULL IT BACK OFF THE CHAIN @V200820 00224000 ST R1,NICQPNT . . . @V200820 00225000 MVI CONSTAT,CONOUTPT THIS IS REALLY OUTPUT @V200820 00226000 MVI CONPARM,NOAUTO+INHIBIT SET IDENTITY FLAGS @V200820 00227000 LA R0,WRITNRM NORMAL WRITE COMMAND @V200820 00228000 STH R0,CONTCMD SET FOR THE NCP @V200820 00229000 BR R3 RETURN @V200820 00230000 SPACE 2 00231000 RNWRITE EQU * FIGURE OUT COMMAND FOR OUTPUT @V200820 00232000 LH R1,CONCNT MESSAGE DATA LENGTH @V200820 00233000 LA R14,CONDATA(R1) POINT PAST LAST CHARACTER @VM08816 00234000 TM CONPARM,NOAUTO AUTO CARRIAGE RETURN ? @VM08816 00235000 BZ RNWRTAU YES - INSERT CORRECT CHARS @VM08816 00236000 TM NICTYPE,NICTELE TELEGRAPH TERMINAL ? @VM08816 00237000 BO RNTBELL YES - CHECK FOR ALARM @VM08816 00238000 B RNWRTNA WRITE WITHOUT CARRIAGE RETURN @VM08816 00239000 RNWRTAU EQU * INSERT CHARS FOR NEW-LINE @VM08816 00240000 MVI 0(R14),X'15' MOVE IN NEW-LINE CHARACTER @V200820 00241000 LA R1,1(0,R1) INCLUDE 'CR' IN DATA COUNT @V200820 00242000 TM NICTYPE,NICTELE TELEGRAPH TERMINAL ? @VM08772 00243000 BZ RNWRTNA NO -- ALL SET @VM08772 00244000 MVC 0(2,R14),=X'0D25' SEPARATE 'CR,LF' FOR TWX @VM08772 00245000 LA R1,1(0,R1) ADD ONE MORE TO THE COUNT @VM08772 00246000 LA R14,2(0,R14) POINT PAST NEW LAST CHARACTER @VM08816 00247000 RNTBELL EQU * CHECK FOR TELEGRAPH ALARM @VM08816 00248000 TM CONPARM,ALARM SHOULD WE RING THE BELL ? @VM08816 00249000 BZ RNWRTNA NO -- O.K. AS IS @VM08816 00250000 LA R1,4(0,R1) ADD FOUR TO THE COUNT @VM08816 00251000 MVC 0(4,R14),=X'2F2F2F2F' FOUR RINGS ON THE BELL @VM08816 00252000 RNWRTNA EQU * @V200820 00253000 STH R1,CONDCNT SET IN BTU TEXT LENGTH FIELD @V200820 00254000 LA R1,WRITNRM NORMAL WRITE COMMAND @V200820 00255000 TM CONPARM,LOGHOLD+LOGDROP IF EITHER IS ON... @V200820 00256000 BZ RNCOMND ...WE NEED A DISCONNECT@V200820 00257000 LA R1,WRITEOT WRITE END OF TRANSMISSION @V200820 00258000 RNCOMND EQU * @V200820 00259000 STH R1,CONTCMD SET BTU COMMAND AND MODIFIER @V200820 00260000 BAL R7,TAGTASK FINISH SETTING UP CONTASK BTU @V200820 00261000 RNCNTRL EQU * ENQUEUE CONTROL CONTASK @V200820 00262000 BAL R7,TASKENQ QUEUE CONTASK ON THE NICBLOK @V200820 00263000 B NEXTASK PROCESS NEXT CONTASK, IF ANY @V200820 00264000 EJECT 00265000 *. 00266000 * SUBROUTINE NAME - 00267000 * 00268000 * DMKRNHND 00269000 * 00270000 * FUNCTION - 00271000 * 00272000 * TO EXECUTE CONTROL FUNCTIONS FOR THE 370X NCP. 00273000 * 00274000 * ATTRIBUTES - 00275000 * 00276000 * SERIALLY REUSEABLE, RESIDENT, CALLED VIA SVC 00277000 * 00278000 * ENTRY CONDITIONS - 00279000 * 00280000 * GR13 = ADDRESS OF A STANDARD SAVEAREA 00281000 * GR12 = ADDRESS OF DMKRNHND 00282000 * GR11 = ADDRESS OF A USER VMBLOK 00283000 * GR 9 = ADDRESS OF THE NICBLOK 00284000 * GR 8 = ADDRESS OF THE 370X RDEVBLOK 00285000 * GR 2 = BTU DATA FIELD LENGTH, AND 'NORET' PARAMETER 00286000 * GR 1 = ADDRESS OF DATA ASSOCIATED WITH THE BTU (IF ANY) 00287000 * GR 0 = COMMAND AND MODIFIER TO BE EXECUTED 00288000 * 00289000 * EXIT CONDITIONS - 00290000 * 00291000 * CC = 0 -> REQUEST WAS SUCCESSFUL 00292000 * 00293000 * IF NORET NOT SPECIFIED, GR1 CONTAINS THE ADDRESS OF 00294000 * A MINI-CONTASK CONTAINING THE RESPONSE BTU RETURNED 00295000 * BY THE 370X NCP. THIS BLOCK IS IN THE FORMAT OF THE 00296000 * CONTASK FIELDS CONCCW3 THRU CONDATA. THE FIRST HALFWORD 00297000 * (CONCCW3) CONTAINS THE SIZE OF THE BLOCK IN DOUBLE-WORDS. 00298000 * 00299000 * CC = 2 -> EITHER THE SPECIFIED RESOURCE WAS INVALID, 00300000 * THE 370X WAS NOT AVAILABLE, THE RESOURCE WAS 00301000 * NOT AVAILABLE, OR A 370X FAILURE OCCURRED. 00302000 * 00303000 * CALLS TO OTHER ROUTINES - 00304000 * 00305000 * DMKSTKCP - TO STACK A CPEXBLOK FOR A LATER EXIT. 00306000 * DMKFREE - TO ALLOCATE STORAGE FOR THE CONTASK. 00307000 * DMKRNHIC - TO INITIATE I/O TO THE 370X. 00308000 * 00309000 * EXTERNAL REFERENCES - NONE 00310000 * 00311000 * TABLES / WORK AREAS - NONE 00312000 * 00313000 * NOTES - NONE 00314000 * 00315000 EJECT 00316000 * REGISTER USAGE - 00317000 * 00318000 * GR14,15 LINKAGE REGISTERS 00319000 * GR13 = SAVEAREA ADDRESSABILITY 00320000 * GR12 = DMKRNH BASE REGISTER (HALF-MODULE LIMIT) 00321000 * GR11 = VMBLOK ADDRESSABILITY 00322000 * GR10 = IOBLOK ADDRESSABILITY (NOT USED) 00323000 * GR 9 = NICBLOK ADDRESSABILITY 00324000 * GR 8 = RDEVBLOK ADDRESSABILITY 00325000 * GR 7 = INTERNAL LINKAGE REGISTER 00326000 * GR 6 = CONTASK ADDRESSABILITY 00327000 * GR0-5= WORK REGISTERS 00328000 * 00329000 * OPERATION - 00330000 * 00331000 * 1. IF THE 370X IS NOT AVAILABLE, OR IF THE RESOURCE 00332000 * SPECIFIED IS NOT VALID, SET R2 = 12, CC = 2, EXIT. 00333000 * 00334000 * 2. IF THE COMMAND IS CDISPLY, ALLOCATE A CONTASK WITH 00335000 * ONE EXTRA DBL-WD FOR DATA, STORE CALLER'S GR3 AS 00336000 * THE DATA, SET THE DATA LENGTH TO FOUR. 00337000 * 00338000 * 3. BUILD A CONTROL CONTASK, FILL IN THE BTU FIELDS, 00339000 * USING CALLER'S COMMAND, MODIFIER, AND DESTINATION 00340000 * RESOURCE I.D. 00341000 * 00342000 * 4. IF NORET WAS NOT SPECIFIED, SET CONRESP AND PUT THE 00343000 * ADDRESS OF THE SAVEAREA IN CONRETN FOR A LATER EXIT. 00344000 * 00345000 * 5. IF NORET WAS SPECIFIED, AND THE 370X IS ALREADY 00346000 * ACTIVE, EXIT. IF THE 370X IS NOT ACTIVE, BUILD AND 00347000 * STACK A CPEXBLOK TO RETURN TO CALLER AS SOON AS 00348000 * POSSIBLE, AND THEN ATTEMPT TO START THE 370X. 00349000 *. 00350000 EJECT 00351000 USING SAVEAREA,R13 @V200820 00352000 USING DMKRNHND,R12 @V200820 00353000 DMKRNHND DS 0D ENTRY TO SCHEDULE A CONTROL CONTASK @V200820 00354000 ENTER , @V200820 00355000 L R12,RNHBASE USE HALF-STANDARD ADDRESSABILITY @V200820 00356000 USING DMKRNH,R12 ... @V200820 00357000 SPACE 00358000 USING RDEVBLOK,R8 @V200820 00359000 LA R2,12(0) RETURN CODE IF INVALID CALL @V200820 00360000 TM RDEVSTAT,RDEVDED+RDEVDISA+RDEVNRDY O.K. TO USE ?@V200820 00361000 BNZ RNDEXIT NO -- SET CC = 2 @V200820 00362000 TM RDEVFLAG,RDEVLNCP IS THERE AN ACTIVE NCP ? @V200820 00363000 BZ RNDEXIT NO -- CALLER MADE AN ERROR @V200820 00364000 SWITCH CONTINUE ON THE I/O PROCESSOR @V407593 00364500 OI RDEVSTAT,RDEVRSVD 370X IN USE BY THE SYSTEM @V200820 00365000 SPACE 00366000 SLR R10,R10 CLEAR IOBLOK REGISTER (NO IOBLOK)@V200820 00367000 SLR R2,R2 @V240820 00368000 IC R2,SAVER2+3 GR2 = BTU DATA LENGTH (IF ANY) @V240820 00369000 LA R0,CONTSIZE*8+7(0,R2) CONTASK SIZE IN BYTES @V240820 00370000 SRL R0,3(0) CONVERT TO DOUBLE-WORDS @V240820 00371000 BAL R7,CTLTASZ ALLOCATE AND INITIALIZE CONTASK @V240820 00372000 STH R2,CONDCNT SET BTU DATA LENGTH IN CONTASK @V240820 00373000 LTR R2,R2 WAS ANY DATA PROVIDED ? @V240820 00374000 BNP RNHNDTK NO -- ALL SET AS IS @V240820 00375000 BCTR R2,0 DECREMENT LENGTH FOR MOVE @V240820 00376000 L R1,SAVER1 POINTER TO CALLER'S DATA FIELD @V240820 00377000 EX R2,MOVECTL MOVE DATA INTO THE CONTASK @V240820 00378000 SPACE 00379000 RNHNDTK EQU * COMPLETE CONTASK INITIALIZATION @V240820 00380000 NI NICSTAT,255-NICNTRL LET THIS TASK EXECUTE @V240820 00381000 L R1,SAVER0 CALLER'S COMMAND, MODIFIER @V200820 00382000 STH R1,CONTCMD SET IN THE CONTASK BTU @V200820 00383000 L R1,NTSKCTL NUMBER OF CALLS TO DMKRNHND @V200820 00384000 AL R1,F1 INCREMENT . . . @V200820 00385000 ST R1,NTSKCTL . . . @V200820 00386000 TM SAVER2+2,NORET/256 IS A RESPONSE DESIRED ? @V200820 00387000 BO RNHNDST NO -- SCHEDULE TASK AND EXIT@V200820 00388000 SLR R2,R2 CLEAR RETURN CODE IN SAVE-AREA @V200820 00389000 ST R2,SAVER2 ... @V200820 00390000 OI CONSTAT,CONRESP RESPONSE IS REQUESTED @V200820 00391000 ST R13,CONRETN ...VIA A LATER EXIT @V200820 00392000 BAL R7,TAGTASK COMPLETE FILLING IN THE BTU @V200820 00393000 B RNSTART START UP THE NCP WITH A BTU @VM01034 00394000 SPACE 2 00395000 MOVECTL MVC CONDATA(*-*),0(R1) EXECUTED MOVE @V240820 00396000 EJECT 00397000 RNHNDST EQU * EXIT IS REQUIRED AFTER START @V200820 00398000 BAL R7,TAGTASK FILL IN BTU FIELDS FOR LATER @V200820 00399000 SLR R2,R2 SET RETURN CODE ZERO @V200820 00400000 TM RDEVFLAG,RDEVWAIT+RDEVSLOW ALREADY BUSY ? @V200820 00401000 BNZ RNDEXIT YES - JUST EXIT @V200820 00402000 LA R4,RNDEXIT EXECUTION ADDRESS @V200820 00403000 BAL R7,STKCPEX STACK A CPEXBLOK TO DO THE 'EXIT'@V200820 00404000 B RNSTART START UP THE NCP @VM01034 00405000 SPACE 2 00406000 RNDEXIT EQU * @V200820 00407000 ST R2,SAVER2 PASS BACK RETURN CODE IN GR2 @V200820 00408000 LTR R2,R2 SET CONDITION CODE ACCORDINGLY @V200820 00409000 EXIT , RETURN TO CALLER @V200820 00410000 DROP R13 @V200820 00411000 SPACE 3 00412000 *---------------------------------------------------------------------* 00413000 * THE THREE SUBROUTINES 'CTLTASK', 'STKCPEX', AND 'TAGTASK' * 00414000 * MUST NOT ADDRESS ANY FIELDS IN THE SECOND 4096 BYTES OF * 00415000 * DMKRNH. THESE ARE USED BY 'DMKRNHND' WHICH HAS LIMITED * 00416000 * ADDRESSABILITY RANGE DUE TO THE SAVEAREA REGISTER, GR13. * 00417000 *---------------------------------------------------------------------* 00418000 SPACE 00419000 CTLTASK EQU * ALLOCATE AND QUEUE CONTROL TASK @V200820 00420000 LA R0,CONTSIZE SIZE OF A BASIC CONTASK @V200820 00421000 CTLTASZ EQU * ENTER HERE FOR A LARGER TASK @V200820 00422000 CALL DMKFREE GET SOME FREE STORAGE @V200820 00423000 XC 0(CONTSIZE*8,R1),0(R1) CLEAR THE HEADER @V200820 00424000 LR R6,R1 ADDRESS VIA GR6 @V200820 00425000 STH R0,CONTSKSZ SET THE TASK SIZE FOR LATER FRET @V200820 00426000 L R1,NICUSER VMBLOK OF RESOURCE OWNER @V200820 00427000 ST R1,CONUSER . . . @V200820 00428000 MVI CONSTAT,CONCNTL THIS IS A CONTROL TASK @V200820 00429000 L R1,NICQPNT CURRENT CONTASK CHAIN @V200820 00430000 ST R6,NICQPNT PUT THIS TASK FIRST @V200820 00431000 ST R1,CONPNT . . . @V200820 00432000 BR R7 RETURN @V200820 00433000 EJECT 00434000 TAGTASK EQU * FILL IN CONRTAG, CONSRID FIELDS @V200820 00435000 LH R1,CONSTAT PICK UP STATUS AND PARM FLAGS @V200820 00436000 STH R1,CONSRID RECORD THEM IN THE BTU ITSELF @V200820 00437000 LA R1,CONSRID START FOR DATA TRANSFER @V200820 00438000 ST R1,CONADDR SET FOR CCW BUILD @V200820 00439000 LH R1,NICNAME RESOURCE I.D. FROM NICBLOK @V200820 00440000 STH R1,CONDEST ...SET FOR THE NCP @V200820 00441000 LH R1,CONDCNT DATA LENGTH . . . @V200820 00442000 LA R1,CONDATA-CONSRID(,R1) ADD LENGTH OF THE BTU @V200820 00443000 STH R1,CONCNT SET FOR CCW BUILD @V200820 00444000 L R1,DMKRNHTG REQUEST TAG FOR RESPONSE BTU'S @V200820 00445000 LA R1,1(0,R1) @V200820 00446000 N R1,XRIGHT16 USE ONLY 16 BITS @V200820 00447000 BNZ *+8 NEVER LET THE TAG BE ZERO @V200820 00448000 LA R1,1(0,0) ... @V200820 00449000 ST R1,DMKRNHTG @V200820 00450000 STH R1,CONRTAG TAG CONTASK FOR LATER RETRIEVAL @V200820 00451000 BR R7 @V200820 00452000 SPACE 2 00453000 STKCPEX EQU * BUILD AND STACK A CPEXBLOK @V200820 00454000 LA R0,CPEXSIZE @V200820 00455000 CALL DMKFREE GET SOME FREE STORAGE @V200820 00456000 USING CPEXBLOK,R1 @V200820 00457000 XC CPEXBLOK(16),CPEXBLOK CLEAR THE HEADER @V200820 00458000 LR R15,R4 EXECUTION ADDRESS TO GR15 @V200820 00459000 STM R15,R14,CPEXADD SET CPEXADD, REGISTERS @V200820 00460000 CALL DMKSTKCP STACK THE BLOCK FOR LATER @V200820 00461000 BR R7 RETURN @V200820 00462000 ********************************************************************* 00463100 * SUBROUTINE TO SWITCH FROM VMBLOK(R11) TO VMBLOK(R1) 00463200 * INCLUDES VMTTIME AND VMBLOK-LOCK MANIPULATION FOR APU-SUPPORT 00463300 * CALLED BY BAL R7 AND MODIFIES R-0,14, AND 15 00463400 ********************************************************************* 00463500 SWITCHVM EQU * @V407593 00463600 SWTCHVM @V407593 00463700 BR R7 AND RETURN TO CALLER. @V407593 00463800 SWITCH2 DS 0H @V407508 00463900 SWTCHVM OPT=UNLOCK @V407508 00464000 BR R7 RETURN TO CALLER @V407508 00464100 DMKRNHTG DC F'0' BTU REQUEST TAG SOURCE FIELD @V200820 00466000 LTORG LOCAL LITERAL POOL FOR DMKRNHND @V200820 00467000 EJECT 00468000 USING DMKRNH,R12,R13 RE-ESTABLISH ADDRESSABILITY @V200820 00469000 RNSTART DS 0H SEND REQUESTS TO THE 370X NCP @VM01034 00470000 LM R12,R13,RNHBASE GET FULL ADDRESSABILITY @VM01034 00471000 TM RDEVSTAT,RDEVNRDY+RDEVBUSY+RDEVSCED O.K. ? @VM01034 00472000 BNZ STARTED NO -- @VM01034 00473000 TM RDEVFLAG,RDEVWAIT+RDEVSLOW ACTIVE OR SLOW ? @VM01034 00474000 BNZ STARTED YES -- EXIT NOW @VM01034 00475000 L R9,RDEVNICL START OF NICBLOK LIST @V200820 00476000 LA R2,NICSIZE*8 INCREMENT @V200820 00477000 LH R3,RDEVMAX HIGHEST VALID RESOURCE I.D. @V200820 00478000 MH R3,=AL2(NICSIZE*8) HIGHEST INDEX @V200820 00479000 ALR R3,R9 GR3 = END ADDRESS LIMIT @V200820 00480000 RNICLST EQU * SEARCH FOR WAITING CONTASK'S @V200820 00481000 L R6,NICQPNT POINTER TO CONTASK CHAIN @V200820 00482000 LTR R6,R6 ARE THERE ANY ? @V200820 00483000 BNP RNEXLST NO -- @V200820 00484000 TM NICSTAT,NICNTRL CONTROL OPERATION ACTIVE ? @V200820 00485000 BZ RNCHAIN NO -- CHECK ACTIVE CONTASK @V200820 00486000 RNEXLST EQU * ADVANCE THROUGH THE NICLIST @V200820 00487000 BXLE R9,R2,RNICLST . . . @V200820 00488000 SPACE 00489000 LTR R10,R10 DO WE HAVE AN IOBLOK ? @V200820 00490000 BZ STARTED NO -- OBVIOUSLY NOTHING TO DO @VM01034 00491000 LH R1,IOBRCNT COUNT OF TASKS ON THIS IOBLOK @V200820 00492000 AL R1,NTSKOUT ADD TO NUMBER OF TASKS SENT @V200820 00493000 ST R1,NTSKOUT . . . @V200820 00494000 SLR R9,R9 NO IOBLOK AFTER THE START @V200820 00495000 STH R9,IOBRCNT CLEAR THE RETRY COUNT FOR I/O @V200820 00496000 BAL R7,RNGORED START I/O VIA DMKIOSQR @VM01034 00497000 STARTED EQU * EXIT TO THE DISPATCHER @VM01034 00498000 GOTO DMKDSPCH . . . @VM01034 00499000 SPACE 00500000 RNGORED EQU * @V200820 00501000 LR R2,R7 SAVE RETURN ACROSS NEXT CALL @V200820 00502000 BAL R7,FRETIOER RELEASE ANY EXISTING IOERBLOK @V200820 00503000 LR R7,R2 RECOVER RETURN ADDRESS @V200820 00504000 LA R2,DMKRNHIN INTERRUPT RETURN ADDRESS @V200820 00505000 ST R2,IOBIRA SET IN IOBLOK @V200820 00506000 L R2,ASYSVM SYSTEM VMBLOK IS THE USER @V200820 00507000 ST R2,IOBUSER ... @V200820 00508000 MVI IOBSTAT,X'00' CLEAR OUT IOBLOK STATUS BYTE @V200820 00509000 MVI IOBSPEC,X'00' NO SPECIAL REQUESTS @V240820 00510000 NI IOBFLAG,IOBCP+IOBRSTRT LEAVE ONLY THESE BITS @V200820 00511000 SWITCH CONTINUE ON I/O PROCESSOR @V407508 00511100 OI RDEVFLAG,RDEVWAIT DEVICE IS NOW ACTIVE @V200820 00512000 CALL DMKIOSQR QUEUE REAL I/O FOR SYSTEM @V200820 00513000 LR R10,R9 SET IOBLOK REG FROM GR9 @V200820 00514000 BR R7 RETURN @V200820 00515000 EJECT 00516000 RNCHAIN EQU * CHECK FOR ACTIVE TASKS @V200820 00517000 TM NICSTAT,NICERLK IS THE ERROR LOCK SET ? @V200820 00518000 BZ RNICHN0 NO -- CHECK FOR ACTIVE TASKS@V200820 00519000 NI NICSTAT,255-NICERLK ERROR LOCK WILL BE RESET @VA01914 00520000 TM NICTYPE,NICTERM IS THIS A DEVICE RESOURCE ? @VA01914 00521000 BZ RNICHN0 NO -- NO BTU IS REQUIRED @VA01914 00522000 BAL R7,CTLTASK GET A CONTASK @V200820 00523000 LA R0,CRESERL ...TO RESET THE ERROR LOCK @V200820 00524000 STH R0,CONTCMD . . . @V200820 00525000 BAL R7,TAGTASK FILL IT IN. . . @V200820 00526000 B RNICHN1 CHAIN IT IN RIGHT NOW @V200820 00527000 SPACE 00528000 RNICHN0 EQU * @V200820 00529000 TM CONSTAT,CONACTV IS THE TOP TASK ACTIVE ? @V200820 00530000 BZ RNICHN1 NO -- SEND IT OVER NOW @V200820 00531000 TM CONSTAT,CONOUTPT+CONCNTL INPUT TASK ACTIVE ? @V200820 00532000 BNZ RNEXLST NO -- SKIP THIS LINE @V200820 00533000 L R1,CONPNT CHECK THE NEXT TASK @V200820 00534000 LTR R1,R1 MAKE SURE THERE IS ONE @V200820 00535000 BNP RNEXLST NO -- CONTINUE @V200820 00536000 TM CONPARM-CONTASK(R1),PRIORITY BREAK NEEDED ? @V200820 00537000 BZ RNEXLST NO -- SKIP @V200820 00538000 BAL R7,CTLTASK GET A CONTROL TASK @V200820 00539000 LA R0,CRESCND RESET CONDITIONAL @V200820 00540000 STH R0,CONTCMD ...TO FORCE TERMINAL BREAK @V200820 00541000 BAL R7,TAGTASK ...SEND IT OVER NOW @V200820 00542000 B RNICHN2 ... @V200820 00543000 SPACE 00544000 RNICHN1 EQU * CHAIN CONTASK'S VIA CCW STRING @V200820 00545000 TM CONSTAT,CONSYNC SYNCHRONIZATION CONTASK ? @V200820 00546000 BZ RNICHN2 NO -- @V200820 00547000 L R1,CONPNT REMOVE IT FROM THE CHAIN @V200820 00548000 ST R1,NICQPNT . . . @V200820 00549000 XC CONPNT(4),CONPNT CLEAR THE FORWARD POINTER @V200820 00550000 CALL DMKQCNET RETURN IT TO DMKQCN @V200820 00551000 B RNICLST RETRY FROM THE TOP @V200820 00552000 SPACE 00553000 RNICHN2 EQU * @V200820 00554000 LTR R10,R10 DO WE ALREADY HAVE AN IOBLOK ? @V200820 00555000 BP RNICHN3 YES -- @V200820 00556000 LA R0,IOBSIZE @V200820 00557000 CALL DMKFREE GET FREE STORAGE FOR AN IOBLOK @V200820 00558000 LR R10,R1 @V200820 00559000 XC 0(IOBSIZE*8,R10),0(R10) CLEAR IT @V200820 00560000 L R1,NWRITES NUMBER OF WRITE IOBLOK'S BUILT @V200820 00561000 AL R1,F1 INCREMENT . . . @V200820 00562000 ST R1,NWRITES . . . @V200820 00563000 * B RNICHN3 @V200820 00564000 EJECT 00565000 RNICHN3 EQU * BUILD CCW STRING FOR WRITE @V200820 00566000 MVI IOBMISC2,X'01' FLAG IOBLOK AS WRITE STRING @V200820 00567000 MVI CONCOMND,WRITBRK USE WRITBRK FOR LAST TASK @V200820 00568000 MVI CONFLAG,CC+SILI CHAIN, NO IL @V200820 00569000 MVC CONCCW2(8),NOPCCW END WITH A NO-OP @V200820 00570000 OI CONSTAT,CONACTV THIS TASK IS ACTIVE @V200820 00571000 LA R1,CONCCW1 START OF CCW STRING @V200820 00572000 L R4,IOBMISC POINTER TO LAST TASK, IF ANY @V200820 00573000 LTR R4,R4 ARE THERE ANY ? @V200820 00574000 BP RNICHN4 YES -- ADD TO THE STRING @V200820 00575000 ST R1,IOBCAW SET THE CAW @V200820 00576000 MVI IOBRCNT+1,1 ...AND THE TASK COUNT @V200820 00577000 B RNICHN5 CONTINUE WITH THIS NICBLOK @V200820 00578000 SPACE 2 00579000 RNICHN4 EQU * ADD TO EXISTING CCW STRING @V200820 00580000 MVI CONCOMND-CONTASK(R4),X'01' WRITBRK TO WRITE @V200820 00581000 ST R1,CONCCW2-CONTASK(,R4) DATA ADDRESS TO NO-OP @V200820 00582000 MVI CONCCW2-CONTASK(R4),X'08' MAKE IT A 'TIC' @V200820 00583000 LH R1,IOBRCNT ADJUST THE TASK COUNT @V200820 00584000 LA R1,1(0,R1) . . . @V200820 00585000 STH R1,IOBRCNT RESET TASK COUNTER @V200820 00586000 SPACE 00587000 RNICHN5 EQU * CHECK FOR OTHERS ON THIS BLOCK @V200820 00588000 ST R6,IOBMISC THIS IS NOW THE LAST TASK @V200820 00589000 B RNEXLST . . . @VM08791 00590000 EJECT 00591000 *. 00592000 * SUBROUTINE NAME - 00593000 * 00594000 * DMKRNHIN 00595000 * 00596000 * FUNCTION - 00597000 * 00598000 * DMKRNHIN IS THE SECONDARY INTERRUPT HANDLER FOR THE 00599000 * 3704 AND 3705 COMMUNICATIONS CONTROLLERS, PRIMARILY 00600000 * WHEN THEY ARE OPERATING IN NETWORK CONTROL PROGRAM 00601000 * OR PARTITIONED EMULATION PROGRAM MODE. 00602000 * 00603000 * ATTRIBUTES - 00604000 * 00605000 * RE-ENTRANT, RESIDENT, ENTERED VIA IOBLOK UNSTACK 00606000 * 00607000 * ENTRY CONDITIONS - 00608000 * 00609000 * GR12 = ADDRESS OF DMKRNHIN 00610000 * GR11 = ADDRESS OF THE SYSTEM VMBLOK 00611000 * GR10 = ADDRESS OF THE UNSTACKED IOBLOK 00612000 * 00613000 * EXIT CONDITIONS - 00614000 * 00615000 * EXIT IS MADE VIA GOTO DMKDSPCH 00616000 * 00617000 * CALLS TO OTHER ROUTINES - 00618000 * 00619000 * DMKFREE - TO ALLOCATE FREE STORAGE FOR CONTASK'S 00620000 * DMKFRET - TO RETURN PREVIOUSLY ALLOCATED STORAGE 00621000 * DMKIOSQR - TO INITIATE I/O TO THE 370X 00622000 * DMKCVTBH - TO CONVERT REAL ADDRESSES FOR MESSAGES 00623000 * DMKSCNRU - TO LOCATE RCHBLOK, RCUBLOK, RDEVBLOK 00624000 * DMKQCNCL - TO FLUSH CONTASK STACK IN CASE OF ERROR 00625000 * DMKQCNET - TO RETURN COMPLETED CONTASK'S TO DMKQCN 00626000 * DMKQCNTO - TO FORCE A DISCONNECT IN CASE OF LINE ERROR 00627000 * DMKQCNWT - TO WRITE ERROR MESSAGES TO THE OPERATOR 00628000 * DMKCNSED - TO PERFORM EDITING AND TRANSLATION ON INPUT 00629000 * DMKERMSG - TO SEND ERROR MESSAGES TO THE OPERATOR 00630000 * DMKCVTDT - TO TIME-STAMP TRACE OUTPUT 00631000 * DMKVSPRT - TO SPOOL TRACE OUTPUT TO A VIRTUAL PRINTER 00632000 * DMKSCNAU - TO INSURE THAT THE TRACING USER IS CORRECT 00633000 * DMKCFMBK - TO PLACE A V.M. IN CONSOLE FUNCTION MODE 00634000 * DMKCFMAT - TO SIMULATE A VIRTUAL CONSOLE STTENTION 00635000 * DMKBLDVM - TO BUILD A VMBLOK FOR A NEW USER 00636000 * DMKNLEMP - TO TAKE A STORAGE DUMP OF THE 370X 00637100 * DMKNLDR - TO RE-LOAD THE 370X FOLLOWING THE DUMP 00638000 * DMKIOERN - TO RECORD ERROR RECORDS FROM THE 370X NCP 00639000 * DMKSTKCP - TO STACK CPEXBLOK'S FOR SERIALIZING REQUESTS 00640000 * 00641000 * EXTERNAL REFERENCES - 00642000 * 00643000 * DMKSYSVM - ADDRESS OF THE SYSTEM VMBLOK 00644000 * DMKRIORN - TABLE OF 370X CONTROLLER'S 00645000 * 00646000 * TABLES / WORK AREAS - NONE 00647000 * 00648000 * NOTES - 00649000 * 00650000 * THIS MODULE HAS BEEN CREATED TO SUPPORT THE NETWORK 00651000 * CONTROL PROGRAM FOR OS/VS, RELEASE 2.1, AS WELL AS 00652000 * THE NETWORK CONTROL PROGRAM INTERFACE OF THE PARTITIONED 00653000 * EMULATION PROGRAM OF THE SAME LEVEL. ANY OTHER LEVEL 00654000 * OF THE 370X CONTROL PROGRAM WILL NOT OPERATE CORRECTLY. 00655000 * 00656000 * REGISTER USAGE - 00657000 * 00658000 * GR14,15 LINKAGE REGISTERS 00659000 * GR12,13 MODULE BASE REGISTERS 00660000 * GR11 = ADDRESS OF THE SYSTEM VMBLOK (DMKSYSVM) 00661000 * GR10 = ADDRESS OF THE ACTIVE IOBLOK 00662000 * GR 9 = ADDRESS OF THE AFFECTED NICBLOK (IF ANY) 00663000 * GR 8 = RDEVBLOK ADDRESSABILITY 00664000 * GR 7 = INTERNAL LINKAGE REGISTER 00665000 * GR 6 = CONTASK ADDRESSABILITY 00666000 * GR0-5= WORK REGISTERS 00667000 * 00668000 * OPERATION - 00669000 * 00670000 * 1. IF THE INTERRUPTING DEVICE IS NOT A 370X, EXIT. 00671000 * 00672000 * 2. IF ANY CHANNEL-LEVEL ERRORS WERE INCLUDED IN THE 00673000 * STATUS, DO THE FOLLOWING: 00674000 * PCI, IL, PRGC, PRTC, CHC -> RNH001 ABEND 00675000 * CDC - READ - RETRY SIXTEEN TIMES, THEN: 00676000 * ALL OTHERS - ATTEMPT TO DUMP AND RE-LOAD THE 370X 00677000 * 00678000 * 3. IF A UNIT CHECK WAS PRESENTED, AND IPLREQ OR INTREQ 00679000 * WAS INCLUDED IN THE STATUS, ATTEMPT TO DUMP AND/OR 00680000 * RE-LOAD THE 370X CONTROL PROGRAM. 00681000 * 00682000 * 4. IF THE 370X WAS NOT LOADED BY VM/370 (I.E. IF 00683000 * 'RDEVRSVD' IS NOT SET), IGNORE THE INTERRUPT AND EXIT. 00684000 * 00685000 * 5. IF ATTENTION WAS INCLUDED IN THE STATUS, SCHEDULE 00686000 * AND START A READ CHANNEL PROGRAM. 00687000 * 00688000 * 6. WRITE ENDING - IF UNIT EXCEPTION, RE-QUEUE REJECTED 00689000 * CONTASK'S FOR LATER RE-SEND, SET RDEVSLOW (BUFFER 00690000 * SLOWDOWN MODE), AND RETURN AND FINISHED TASKS TO 00691000 * DMKQCNET, AS BELOW. 00692000 * 00693000 * IF WRITE COMPLETED O.K., RETURN TO DMKQCNET ALL 00694000 * CONTASK'S WHICH DO NOT HAVE LOGDROP, LOGHOLD, 00695000 * CONSPLT, OR CONRESP SET. RETAIN OTHERS ON THE NICBLOK. 00696000 * 00697000 EJECT 00698000 * 7. READ ENDING - IF NO BTU RESPONSES WERE RECEIVED, 00699000 * RELEASE THE BUFFERS AND EXIT. 00700000 * 00701000 * FOR EACH RESPONSE BTU, DECODE ACCORDING TO THE 00702000 * COMMAND VALUE, AS FOLLOWS: 00703000 * 00704000 * READ - X'01' - FINAL RESPONSE, MOVE DATA FROM THE INPUT 00705000 * BUFFERS TO CALLER'S BUFFER (SPECIFIED IN SAVER0, 00706000 * SAVER1 OF THE RESPONSE SAVEAREA). IF ATTENTION HIT 00707000 * DURING READ, PERFORM ATTENTION HANDLING BEFORE 00708000 * RETURNING THE TASK TO DMKQCNET. CALL DMKCNSED TO 00709000 * PERFORM ANY EDITING OR TRANSLATION ON THE INPUT DATA. 00710000 * IF EDITING REDUCES THE INPUT COUNT TO ZERO, RETRY 00711000 * THE READ OPERATION. IF A NULL LINE IS ENTERED IN 00712000 * RESPONSE TO AN INHIBIT READ, TURN OFF NICPSUP, TYPE 00713000 * A MASKING STRING, AND RE-ISSUE THE READ TASK. 00714000 * 00715000 * WRITE - X'02' - FINAL RESPONSE, RETURN THE TASK TO 00716000 * DMKQCNET. IF ATTENTION WAS HIT DURING THE WRITE, 00717000 * PERFORM ATTENTION HANDLING FIRST, SETTING THE 00718000 * APPROPRIATE RETURN CODE IN THE SAVEAREA (IN ANY). 00719000 * IF THE COMMAND MODIFIER WAS WRITEOT, BUILD A CONTROL 00720000 * CONTASK TO ISSUE DISCEOC COMMAND. IF THE MODIFIER 00721000 * WAS WRITDSC, BUILD A CONTROL TASK TO RE-ENABLE THE 00722000 * TERMINAL. 00723000 * 00724000 * TEST, RESTART, INVITE - NOT USED -> RNH002 ABEND 00725000 * 00726000 * CONTACT - X'06' - INITIAL RESPONSE (MTA DEVICE IDEN- 00727000 * TIFIED), SET NICTYPE ACCORDING TO FLAG RETURNED, 00728000 * WAIT FOR FINAL RESPONSE. FINAL RESPONSE, BUILD A 00729000 * CONTROL CONTASK TO WRITE 'VM/370 ONLINE' MESSAGE. 00730000 * BUILD ANOTHER CONTROL TASK AHEAD OF THE WRITE TO 00731000 * ISSUE CCDESMD COMMAND. 00732000 * 00733000 * DISCONNECT - X'07' - FINAL RESPONSE, RE-ENABLE THE 00734000 * DEVICE UNLESS NICDISB IS SET. 00735000 * 00736000 * CONTROL - X'08' - DECODE ACCORDING TO MODIFIER: 00737000 * CRESERL - TURN OFF NICERLK, CONTINUE. 00738000 * CCDESMD - BUILD CONTASK TO ISSUE CSETDSM TO ENABLE 00739000 * MONITOR MODE HANDLING (ATTENTIONS). 00740000 * CACTDEV - IF NICENAB IS SET, ISSUE RE-ENABLE. 00741000 * ALL OTHERS - ASSUME COMMAND IS COMPLETE. 00742000 * 00743000 EJECT 00744000 * UNSOLICITED RESPONSES - COMMAND = X'77': 00745000 * 00746000 * ENTER SLOWDOWN MODE - TURN ON RDEVSLOW. 00747000 * EXIT SLOWDOWN MODE - TURN OFF RDEVSLOW. 00748000 * DEVICE ASSOCIATION - IGNORE 00749000 * HOST LOGGING - IGNORE 00750000 * MISC. DATA RECORD - STACK CPEXBLOK TO CALL DMKIOERN. 00751000 * IPL COMPLETE - TURN OFF RDEVRSVD, RDEVNRDY, RDEVRCVY, 00752000 * RDEVSLOW, RDEVWAIT. IF A CKPBLOK EXISTS, RE-ENABLE 00753000 * ALL DEVICES WHICH WERE PREVIOUSLY ENABLED. 00754000 * ATTENTION - EITHER CALL DMKCFMBK, DMKCFMAT, OR DMKBLDVM 00755000 * ACCORDING TO SETTINGS IN VMMLEVEL OR NICUSER. 00756000 * TERMINAL POWER-OFF - CLEAN UP CONTASK CHAIN, CALL 00757000 * DMKQCNTO TO DISCONNECT ANY ACTIVE USER, RE-ENABLE. 00758000 * ALL OTHERS - CONSIDERED FATAL - DUMP AND RE-LOAD 370X. 00759000 * 00760000 * ERROR MESSAGES - 00761000 * 00762000 * DMKRNH454I DEV XXXX DISABLED 00763000 * DMKRNH462I CTLR XXX UNIT CHECK; IPL REQUIRED 00764000 * DMKRNH463I CTLR XXX UNIT CHECK; RESTART IN PROGRESS 00765000 * DMKRNH464I CTLR XXX CC = 3; DEPRESS 370X "LOAD" BUTTON 00766000 * DMKRNH465I LINE TRACE TERMINATED DUE TO ERROR 00767000 * DMKRNH468I CTLR XXX COMMUNICATIONS SCANNER FAILURE 00768000 *. 00769000 EJECT 00770000 DROP R13 @V200820 00771000 USING DMKRNHIN,R12 @V200820 00772000 DMKRNHIN DS 0D INTERRUPT ENTRY FOR 3704/3705 I/O@V200820 00773000 LM R12,R13,RNHBASE SETUP MODULE ADDRESSABILITY @V200820 00774000 USING DMKRNH,R12,R13 @V200820 00775000 SPACE 00776000 LH R1,IOBRADD REAL DEVICE ADDRESS OF 3705 @V200820 00777000 CALL DMKSCNRU GET THE RDEVBLOK ADDRESS @V200820 00778000 LA R1,CLASSPEC*256+TYP3705 DEVICE CLASS, TYPE @V200820 00779000 CH R1,RDEVTYPC IS THIS A 3705 ? @V200820 00780000 BNE RNIGNOR NO -- THROW AWAY INTERRUPT @V200820 00781000 SPACE 00782000 SWITCH CONTINUE ON I/O PROCESSOR @V407508 00782100 CLI IOBCSW+5,X'00' ANY CHANNEL STATUS PRESENT ?@V200820 00783000 BNE RNIOERR YES - THAT IS UNUSUAL @V200820 00784000 TM IOBCSW+4,UC WAS THERE A UNIT CHECK ? @V200820 00785000 BZ RNOUNIT NO -- THAT'S JUST AS WELL @V200820 00786000 L R1,IOBIOER PICK UP THE IOERBLOK ADDRESS @V200820 00787000 USING IOERBLOK,R1 @V200820 00788000 TM IOERDATA,INTREQ+IPLREQ IS NCP STILL ALIVE ? @V200820 00789000 BNZ RNFATAL NO -- CONVULSE A BIT @V200820 00790000 TM IOERDATA,ABORT THIS SHOULD BE IT @V200820 00791000 BZ RNIOEUC OOPS -- GO TAKE ANOTHER LOOK@V200820 00792000 CLI IOBMISC2,X'01' WAS THIS A WRITE STRING ? @V200820 00793000 BNE RNFATAL NO -- FATAL FOR A READ @V200820 00794000 TM IOBCSW+4,ATTN ATTENTION INCLUDED WITH WRITE ? @V200820 00795000 BZ RNSLOWDN NO -- JUST ENTER SLOWDOWN MODE @VM01040 00796000 BAL R7,SCHREAD SCHEDULE A READ SEQUENCE FIRST @V200820 00797000 B RNSLOWDN THEN ENTER BUFFER SLOWDOWN MODE @V200820 00798000 DROP R1 @V200820 00799000 EJECT 00800000 RNOUNIT EQU * NO UNIT CHECK PRESENT @V200820 00801000 TM RDEVSTAT,RDEVRSVD 370X IN USE BY VM/370 ? @VM08593 00802000 BZ RNCLEAN NO -- CLEAN UP AND EXIT @VM08593 00803000 TM IOBCSW+4,ATTN READ REQUESTED BY THE NCP ? @V200820 00804000 BZ RNOREAD NO -- JUST CONTINUE @V200820 00805000 LA R7,GODSPCH RETURN FROM READ IF UNSOLICITED @V200820 00806000 TM IOBSPEC,IOBUNSL UNSOLICITED ATTENTION ? @V200820 00807000 BO SCHRCCW YES - RE-USE THIS IOBLOK @V200820 00808000 BAL R7,SCHREAD BUILD SEPARATE IOBLOK FOR READ @V200820 00809000 SPACE 2 00810000 RNOREAD EQU * INTERPRET INTERRUPT STATUS @V200820 00811000 CL R10,IOBLINK IS THIS A COPIED IOBLOK ? @VM08788 00812000 BNE RNIGNOR YES - WAIT FOR FINAL INTERRUPT @VM08788 00813000 TM IOBSPEC,IOBUNSL UNSOLICITED INTERRUPT ? @V240820 00814000 BO RNIGNOR YES - FORGET IT @V240820 00815000 CLI IOBMISC2,X'02' IS THIS A READ CCW STRING ? @V200820 00816000 BE PROCREAD YES - PROCESS FINAL STATUS @V200820 00817000 TM IOBCSW+4,UE HAS 3705 ENTERED SLOWDOWN MODE ? @V200820 00818000 BO RNSLOWDN YES - REQUEUE CONTASK'S FOR LATER@V200820 00819000 TM IOBSTAT,IOBCC1 CC = 1 ON THE START I/O ? @V200820 00820000 BZ RNWRTOK NO -- SHOULD BE NORMAL END @V200820 00821000 CLI IOBCSW+4,ATTN+BUSY ATTN CLEARED BY START I/O ? @V200820 00822000 BNE RNIOERR NO -- I DON'T UNDERSTAND @V200820 00823000 B RNABORT RE-QUEUE CONTASKS FOR LATER @VM08809 00824000 EJECT 00825000 RNSLOWDN EQU * RE-QUEUE CONTASK'S FOR RETRY @V200820 00826000 OI RDEVFLAG,RDEVSLOW NOW IN SLOWDOWN MODE @V200820 00827000 RNABORT EQU * @VM08809 00828000 L R2,IOBCAW INITIALIZE JUST IN CASE @V200820 00829000 SLR R6,R6 . . . @V200820 00830000 TM IOBSTAT,IOBCC1 STATUS ON THE START I/O ? @V200820 00831000 BO RNRETRY YES - REQUEUE ALL OF THEM @V200820 00832000 L R1,IOBCSW CCW ADDRESS FROM CSW @V200820 00833000 SL R1,F8 BACK UP ONE CCW (KEY IS ZERO) @V200820 00834000 CL R1,IOBCAW STOP ON THE FIRST TASK ? @V200820 00835000 BE RNRETRY YES - RESET ALL OF THE TASKS @V200820 00836000 * NOTE: CSW WILL ALWAYS POINT TO EITHER 'TIC' OR 'NO-OP' CCW 00837000 LA R6,IOBCAW-(CONCCW2-CONCCW1) SEARCH START @V200820 00838000 RNPARTL EQU * CHECK FOR SOME ACCEPTED, SOME NOT@V200820 00839000 CLM R1,B'0111',CONCCW2+1-CONCCW1(R6) NEXT REJECTED ?@V200820 00840000 BE RNPARTS YES --- @V200820 00841000 ICM R6,B'0111',CONCCW2+1-CONCCW1(R6) NEXT TASK @V200820 00842000 B RNPARTL CHAIN VIA THE TIC CCW'S @VM08809 00843000 RNPARTS EQU * FOUND THE END OF ACCEPTED TASKS @V200820 00844000 SH R6,=AL2(CONCCW1-CONTASK) BACK UP TO TASK START @V200820 00845000 L R2,CONCCW2 POINTER TO NEXT CONTASK CCW @V200820 00846000 MVC CONCCW2(8),NOPCCW MAKE THIS THE END @V200820 00847000 LA R2,0(0,R2) STRIP OFF THE OP-CODE @V200820 00848000 RNRETRY EQU * ALLOW RE-SCHEDULE FOR REJECTED TASKS @V200820 00849000 L R0,NTSKREJ NUMBER OF TASKS REJECTED @V200820 00850000 AL R0,F1 INCREMENT . . . @V200820 00851000 ST R0,NTSKREJ . . . @V200820 00852000 SH R2,=AL2(CONCCW1-CONTASK) BACK UP TO START @V200820 00853000 NI CONSTAT-CONTASK(R2),255-CONACTV NOT ACTIVE @V200820 00854000 ICM R2,B'0111',CONCCW2+1-CONTASK(R2) NEXT TASK @V200820 00855000 BNZ RNRETRY CONTINUE UNTIL WE HIT 'NO-OP' CCW@V200820 00856000 LTR R6,R6 WERE ANY ACCEPTED ? @V200820 00857000 BP RNWRTOK YES - PROCESS FINISHED WRITE @VM08788 00858000 SPACE 2 00859000 RNIGNOR EQU * HERE TO IGNORE AN INTERRUPT @V200820 00860000 BAL R7,FRETIOB RELEASE IOBLOK, IOERBLOK @V200820 00861000 SPACE 00862000 GODSPCH EQU * EXIT TO THE VM/370 DISPATCHER @V200820 00863000 GOTO DMKDSPCH GO AWAY @V200820 00864000 SPACE 2 00865000 RNHBASE DS 0F MODULE BASE REGISTER VALUES @V200820 00866000 DC A(DMKRNH,DMKRNH+4096) @V200820 00867000 EJECT 00868000 RNWRTOK EQU * WRITE HAS BEEN ACCEPTED BY 3705 @V200820 00869000 NI RDEVFLAG,255-RDEVWAIT LET 370X START UP AGAIN@V200820 00870000 SLR R0,R0 @V200820 00871000 ST R0,IOBMISC USE IOBMISC FOR CHAIN ANCHOR @VM08809 00872000 LA R7,IOBMISC-(CONPNT-CONTASK) . . . @VM08809 00873000 L R6,IOBCAW START FOR CONTASK CHAIN SEARCH @V200820 00874000 RNOUTPT EQU * PROCESS HALF-DONE CONTASK'S @V200820 00875000 SH R6,=AL2(CONCCW1-CONTASK) BACK UP TO TASK START @V200820 00876000 LH R9,CONDEST RESOURCE I.D. FOR THIS TASK @V200820 00877000 MH R9,=AL2(NICSIZE*8) NICLIST INDEX @V200820 00878000 AL R9,RDEVNICL GR9 = NICBLOK ADDRESS @V200820 00879000 BAL R14,RNTRACE CHECK TRACING STATUS FOR THE BTU @VM01040 00880000 TM CONSTAT,CONCNTL CONTROL CONTASK ? @VM08791 00881000 BZ RNREQUE NO -- HANG ONTO ORIGINAL @VM08791 00882000 OI NICSTAT,NICNTRL CONTROL TASK IS ACTIVE @VM01000 00883000 TM CONSTAT,CONRESP+CONSPLT LEAVE IT ON NICBLOK ? @V200820 00884000 BNZ RNREQUE YES --- @V200820 00885000 L R1,CONPNT NEXT CONTASK FOR THIS INTERFACE @V200820 00886000 ST R1,NICQPNT TAKE FIRST ONE OFF CHAIN @V200820 00887000 ST R0,CONPNT CLEAR THE FORWARD TASK POINTER @V200820 00888000 ST R6,CONPNT-CONTASK(,R7) CHAIN FOR RETURN @V200820 00889000 LR R7,R6 . . . @V200820 00890000 RNREQUE EQU * FOLLOW 'TIC' CHAIN FROM IOBCAW @V200820 00891000 ICM R6,B'0111',CONCCW2+1 ADDRESS OF NEXT TASK @V200820 00892000 BNZ RNOUTPT CONTINUE UNTIL WE HIT 'NO-OP' @V200820 00893000 L R6,IOBMISC START OF RETURN CHAIN @VM08809 00894000 RNRETRN EQU * RETURN FINISHED TASKS TO DMKQCN @V200820 00895000 LTR R6,R6 WERE THERE ANY AT ALL ? @V200820 00896000 BZ RNRESTR NO -- JUST TRY RESTART @V200820 00897000 CALL DMKQCNET PROCESS FINISHED CONTASK'S @V200820 00898000 RNRESTR EQU * RESTART WITH NEXT BATCH @V200820 00899000 BAL R7,FRETIOB RELEASE THE CURRENT IOBLOK @VM01020 00900000 B RNSTART START UP THE NCP AND EXIT @VM01034 00901000 EJECT 00902000 SCHREAD EQU * BUILD A READ PROGRAM AND START IT UP @V200820 00903000 LR R9,R10 SAVE CURRENT GR10 VALUE @V200820 00904000 LA R0,IOBSIZE @V200820 00905000 CALL DMKFREE GET FREE STORAGE FOR AN IOBLOK @V200820 00906000 LR R10,R1 @V200820 00907000 SCHRCCW EQU * BUILD CCW BUFFER AND STRING @V200820 00908000 XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR IT @V200820 00909000 LA R0,RDBUFNO+1 GET SPACE FOR READS + NO-OP @V200820 00910000 CALL DMKFREE ... @V200820 00911000 ST R1,IOBCAW SET CCW STRING START IN IOBLOK @V200820 00912000 LA R0,(RDBUFLN/8)*RDBUFNO SIZE OF BUFFER BLOCK @VM08790 00913000 CALL DMKFREE GET CONTIGUOUS BUFFER SPACE @VM08790 00914000 L R2,IOBCAW START OF CCW BUFFER TO GR2 @VM08790 00915000 L R3,=AL1(SILI+CC,0,0,RDBUFLN) SECOND CCW WORD @V200820 00916000 LA R4,RDBUFNO GET THE RIGHT NO. OF BUFFERS @V200820 00917000 SCHRBUF EQU * GET BUFFERS AND CONNECT TO CCW'S @V200820 00918000 ST R1,0(0,R2) SET FIRST CCW DATA ADDRESS @V200820 00919000 ST R3,4(0,R2) SET FLAGS, COUNT @V200820 00920000 MVI 0(R2),X'02' SET OP-CODE @V200820 00921000 LA R2,8(0,R2) NEXT CCW POSITION @V200820 00922000 LA R1,RDBUFLN(0,R1) POINT TO NEXT BUFFER SLOT @VM08790 00923000 BCT R4,SCHRBUF DO IT FOR SIX BUFFERS TOTAL @V200820 00924000 MVC 0(8,R2),NOPCCW MOVE IN THE NO-OP CCW @V200820 00925000 MVI IOBMISC2,X'02' FLAG THIS AS A READ IOBLOK @V200820 00926000 L R1,NMREADS NUMBER OF READ IOBLOK'S BUILT @V200820 00927000 AL R1,F1 INCREMENT . . . @V200820 00928000 ST R1,NMREADS . . . @V200820 00929000 B RNGORED SET IOBIRA, IOBUSER, START I/O @V200820 00930000 EJECT 00931000 PROCREAD EQU * PROCESS INCOMING BTU'S @V200820 00932000 L R7,IOBCAW PICK UP POINTER TO CCW PACKAGE @V200820 00933000 ST R7,IOBRCAW ...SET FOR LOOP PROCESSING @V200820 00934000 LA R9,RNFATAL VECTOR IN CASE OF ERROR @V200820 00935000 TM IOBSTAT,IOBCC3 IF THIS IS INITIAL STATUS...@V200820 00936000 BNZ READFRT ...WE DID SOMETHING WRONG @V200820 00937000 TM IOBCSW+4,UE+DE END OF READ SEQUENCE ? @V200820 00938000 BO PROCRFIN YES - PROCESS INCOMING BTU'S@V200820 00939000 TM IOBCSW+4,ATTN IF NOT THOSE, MUST BE AN ATTN @V200820 00940000 BZ RNIOERR NO -- I DON'T UNDERSTAND @V200820 00941000 PROCRFIN EQU * @V200820 00942000 ICM R2,15,IOBCSW LOAD AND TEST FOR CCW ADDRESS @VM01034 00943000 BZ RNIGNOR NO -- IGNORE THIS INTERRUPT @V200820 00944000 SLR R2,R2 CLEAR COMPLETED TASK POINTER @V200820 00945000 ST R2,IOBMISC ... @V200820 00946000 LA R1,IOBMISC-(CONPNT-CONTASK) MAKE CHAINING EASY@V200820 00947000 ST R1,IOBMISC2 ... @V200820 00948000 SPACE 00949000 READBUF EQU * HANDLE BTU'S INDIVIDUALLY @V200820 00950000 LA R9,RNRETRN RETURN FROM 'READFRT' @V200820 00951000 L R7,IOBRCAW PTR TO NEXT CCW FOR PROCESSING @V200820 00952000 CLM R7,B'0111',IOBCSW+1 REACHED END OF CHAIN ? @V200820 00953000 BNL READFRT YES - RELEASE BUFFERS @V200820 00954000 L R1,NTASKRD NUMBER OF RESPONSES RECEIVED @V200820 00955000 AL R1,F1 INCREMENT . . . @V200820 00956000 ST R1,NTASKRD . . . @V200820 00957000 L R6,0(0,R7) LOAD POINTER TO DUMMY CONTASK @V200820 00958000 LA R6,0(0,R6) STRIP OFF THE CCW OP-CODE @VM01034 00959000 LH R9,CONDEST RESOURCE ID FROM RETURNED BTU @V200820 00960000 MH R9,=AL2(NICSIZE*8) COMPUTE NICLIST INDEX @V200820 00961000 AL R9,RDEVNICL INDEX TO THE NICBLOK ITSELF @V200820 00962000 TM CONSYSR,ERROR IS THIS AN ERROR RESPONSE ? @VM01040 00963000 BZ *+8 NO -- CONTINUE @VM01040 00964000 OI NICSTAT,NICERLK ERROR LOCK IS NOW SET @VM01040 00965000 TM CONSRID,CONCNTL CONTROL TASK RESPONSE ? @VM01040 00966000 BZ *+8 NO -- CONTINUE @VM01040 00967000 NI NICSTAT,255-NICNTRL ASSUME TASK IS COMPLETE@VM01040 00968000 BAL R14,RNTRACE CHECK TRACING STATUS FOR THE BTU @VM01040 00969000 SPACE 00970000 SLR R5,R5 CLEAR ORIGINAL CONTASK POINTER @VM01040 00971000 CLI CONTCMD,X'77' UNSOLICITED RESPONSE FROM NCP ? @V200820 00972000 BE UNSOLIT YES - PROCESS IT DIRECTLY @V200820 00973000 LH R0,CONRTAG GET REQUEST TAG OF RETURNED TASK @V200820 00974000 LA R2,NICQPNT-(CONPNT-CONTASK) SETUP FOR SEARCH @V200820 00975000 L R5,NICQPNT FOR ORIGINAL TASK @V200820 00976000 SPACE 00977000 READRCV EQU * SEARCH NICBLOK LIST FOR MATCHING TASK @V200820 00978000 LTR R5,R5 HAVE WE REACHED THE END ? @V200820 00979000 BZ READNOM YES - THERE IS NO MATCH @V200820 00980000 CH R0,CONRTAG-CONTASK(,R5) IS THIS THE ONE ? @V200820 00981000 BE READCHN YES - PROCESS @V200820 00982000 LR R2,R5 SAVE A BACK POINTER @V200820 00983000 L R5,CONPNT-CONTASK(,R2) PICK UP NEXT TASK @V200820 00984000 B READRCV @V200820 00985000 EJECT 00986000 READCHN EQU * @V200820 00987000 L R1,CONPNT-CONTASK(,R5) REMOVE IT FROM CHAIN @V200820 00988000 ST R1,CONPNT-CONTASK(,R2) ... @V200820 00989000 NI CONSTAT-CONTASK(R5),255-(CONACTV+CONRTRY) @V200820 00990000 SPACE 00991000 *---------------------------------------------------------------------* 00992000 * AT THIS POINT IN TIME: * 00993000 * GR5 = ORIGINAL CONTASK BLOCK (IF AVAILABLE) * 00994000 * GR6 = DUMMY CONTASK CONTAINING RESPONSE BTU * 00995000 * GR7 = READ CCW FOR THIS BUFFER * 00996000 * GR8 = RDEVBLOK ADDRESS * 00997000 * GR9 = NICBLOK ADDRESS * 00998000 *---------------------------------------------------------------------* 00999000 SPACE 01000000 READNOM EQU * PROCESS BTU ACCORDING TO COMMAND @V200820 01001000 SLR R1,R1 @V200820 01002000 IC R1,CONTCMD PICK UP BTU COMMAND FIELD @V200820 01003000 SLL R1,2(0) CONVERT TO FULL-WORD INDEX @V200820 01004000 ACTIONS B ACTIONS(R1) PROCESS ACCORDING TO COMMAND TYPE@V200820 01005000 B CMPREAD '01' -- READ @V200820 01006000 B CMPWRIT '02' -- WRITE @V200820 01007000 B RNH2 '03' -- TEST - NOT USED @V200820 01008000 B RNH2 '04' -- RESTART - NOT USED @V200820 01009000 B RNH2 '05' -- INVITE - NOT USED @V200820 01010000 B CMPCONT '06' -- CONTACT @V200820 01011000 B DVCENAB '07' -- DISCONNECT @VM01040 01012000 B CMPCNTL '08' -- CONTROL @V200820 01013000 SPACE 3 01014000 DMKRNHCT DS 0D STATISTICAL COUNTER BLOCK @V200820 01015000 NWRITES DC F'0' NUMBER OF WRITE IOBLOK'S BUILT @V200820 01016000 NTSKOUT DC F'0' NUMBER OF CONTASKS SENT TO 370X @V200820 01017000 NTSKREJ DC F'0' NUMBER OF CONTASKS REJECTED @V200820 01018000 NCONTSK DC F'0' NUMBER OF CONTASKS FROM DMKQCN @V200820 01019000 NMREADS DC F'0' NUMBER OF READ IOBLOK'S BUILT @V200820 01020000 NTASKRD DC F'0' NUMBER OF BTU RESPONSES READ @V200820 01021000 NTSKCTL DC F'0' NUMBER OF CALLS TO DMKRNHND @V200820 01022000 NMDRCRD DC F'0' NUMBER OF MDR RECORDS RECEIVED @V200820 01023000 EJECT 01024000 READFRT EQU * RELEASE READ BUFFERS, CCW'S @V200820 01025000 L R7,IOBCAW FIRST CCW IN STRING @V200820 01026000 L R1,0(0,R7) ADDRESS OF BUFFER BLOCK @VM08790 01027000 LA R1,0(0,R1) ...MINUS THE OP-CODE @VM08790 01028000 LA R0,(RDBUFLN/8)*RDBUFNO SIZE OF THE BLOCK @VM08790 01029000 CALL DMKFRET RELEASE THE BUFFERS @VM08790 01030000 LA R0,RDBUFNO+1 SIZE OF CCW PACKAGE @V200820 01031000 LR R1,R7 START OF CCW PACKAGE FOR FRET @VM08790 01032000 CALL DMKFRET @V200820 01033000 L R6,IOBMISC PICK UP COMPLETED TASK POINTER @V200820 01034000 NI RDEVFLAG,255-RDEVWAIT LET THE 3705 START NOW @V200820 01035000 BR R9 GO WHERE INDICATED @V200820 01036000 SPACE 2 01037000 *>>>>>>>> INVALID I/O STATUS RECEIVED FROM THE 3705 01038000 ABEND 1 DIVE ! DIVE ! DIVE ! @V200820 01039000 *>>>>>>>> 01040000 SPACE 2 01041000 *>>>>>>>> INVALID OR IMPOSSIBLE BTU RESPONSE 01042000 ABEND 2 YOU HAVE BEEN ASSESSED FOR STREET REPAIRS @V200820 01043000 *>>>>>>>> 01044000 SPACE 2 01045000 BTUFRET EQU * IGNORE THIS BTU ENTIRELY @V200820 01046000 L R7,IOBRCAW POINTER TO CURRENT CCW @V200820 01047000 L R6,0(0,R7) ADDRESS OF FIRST BUFFER @V200820 01048000 LA R7,8(0,R7) SKIP AT LEAST ONE CCW @V200820 01049000 ST R7,IOBRCAW . . . @V200820 01050000 LA R3,RDBUFLN-(CONDATA-CONTASK) FIRST DATA LENGTH @V200820 01051000 BTUFREE EQU * @V200820 01052000 CH R3,CONDCNT WAS MORE THAN ONE BUFFER USED ? @V200820 01053000 BNL READBUF NO -- THIS ONE WILL BE FRET'ED LATER@V200820 01054000 LA R3,RDBUFLN(0,R3) KEEP ADDING UNTIL WE HIT IT @V200820 01055000 LA R7,8(0,R7) KEEP SKIPPING, ALSO @V200820 01056000 ST R7,IOBRCAW . . . @V200820 01057000 B BTUFREE @V200820 01058000 EJECT 01059000 CMPREAD EQU * PROCESS READ RESPONSES @V200820 01060000 TM CONSRID,CONCNTL CONTROL READ (2741 BYPASS) ?@VM01034 01061000 BO CTLREAD YES - SPECIAL HANDLING @VM01034 01062000 LTR R5,R5 IS THERE AN ORIGINAL CONTASK ? @VA01977 01063000 BNP BTUFRET NO -- IGNORE INVALID RESPONSE @VA01977 01064000 TM CONSYSR,ERROR ERROR RESPONSE INDICATED ? @V200820 01065000 BO READERR YES - CHECK IT OUT @V200820 01066000 SLR R4,R4 SET ATTENTION COUNT TO ZERO @V200820 01067000 BAL R14,CMPMOVE MOVE DATA, SET RETURN CODE @V200820 01068000 OI CONSTAT,CONACTV+CONESCP SET FLAGS FOR CR,LF @VM08772 01069000 LTR R0,R0 WERE ANY CHARACTERS RECEIVED ? @VM08772 01070000 BNP CMPRD06A NO -- SEND NEW-LINE SEQUENCE @VM08809 01071000 CLI 0(R1),X'15' LAST CHARACTER = NEW-LINE ? @VM08772 01072000 BNE CMPRD04 NO -- CHECK FOR TWX ENDING CHARS @VM08772 01073000 MVI 0(R1),X'00' CLEAR OUT THE NEW-LINE CHAR @VM08772 01074000 BCTR R0,0 DECREMENT THE COUNT @VM08772 01075000 NI CONSTAT,255-(CONACTV+CONESCP) CR,LF BOTH SEEN @VM08772 01076000 B CMPRD06A GO SETUP FOR EDITING, ETC. @VM08772 01077000 SPACE 01078000 CMPRD04 EQU * CHECK FOR CR OR LF (CPT-TWX) @VM08772 01079000 CLI 0(R1),X'25' LAST CHARACTER = LINE FEED ? @VM08772 01080000 BNE CMPRD05 NO -- CHECK FOR 'CR' @VM08772 01081000 NI CONSTAT,255-CONESCP LINE FEED PRESENT @VM08772 01082000 MVI 0(R1),X'00' CLEAR IT FROM THE BUFFER @VM08772 01083000 BCTR R1,0 BACK UP IN THE BUFFER @VM08772 01084000 BCT R0,CMPRD05 DECREMENT AND TEST COUNT @VM08772 01085000 B CMPRD06A ALL DONE IF COUNT = ZERO @VM08772 01086000 SPACE 01087000 CMPRD05 EQU * CHECK FOR STAND-ALONE 'CR' @VM08772 01088000 CLI 0(R1),X'0D' LAST CHARACTER = CARRIER RETURN @VM08772 01089000 BNE CMPRD06 NO -- GO SEE WHERE WE STAND @VM08772 01090000 NI CONSTAT,255-CONACTV CARRIER RETURN DONE @VM08772 01091000 MVI 0(R1),X'00' CLEAR IT FROM THE BUFFER @VM08772 01092000 BCTR R1,0 BACK UP IN THE BUFFER @VM08772 01093000 BCT R0,CMPRD04 SEARCH FOR 'CR,LF' OR 'LF,CR' @VM08772 01094000 B CMPRD06A ALL DONE IF ZERO COUNT @VM08772 01095000 SPACE 01096000 CMPRD06 EQU * SEND ENDING CHARS IF NEEDED @VM08772 01097000 CLI 0(R1),X'3C' TRANSLATED 'XOFF' CHARACTER ? @VM08772 01098000 BNE CMPRD06A NO -- @VM08772 01099000 MVI 0(R1),X'00' REMOVE CHARACTER FROM BUFFER @VM08772 01100000 BCTR R1,0 BACK UP ONE IN THE BUFFER @VM08772 01101000 BCT R0,CMPRD04 DECREMENT AND TEST COUNT @VM08772 01102000 EJECT 01103000 CMPRD06A EQU * FINAL SUMMARY OF ENDING CHARS @VM08772 01104000 STH R0,CONCNT RESET INPUT DATA COUNT @VM08772 01105000 TM CONSTAT,CONACTV+CONESCP ANYTHING EXTRA TO DO ? @VM08772 01106000 BZ CMPEDIT NO -- JUST DO EDITING @VM08772 01107000 LR R5,R6 SAVE READ CONTASK ADDRESS @VM08772 01108000 LA R0,CONTSIZE+1 CONTROL CONTASK WITH DATA @VM08772 01109000 BAL R7,CTLTASZ . . . @VM08772 01110000 MVI CONSTAT,CONOUTPT+CONRTRY FIXED ORDER OUTPUT@VM08772 01111000 LA R0,WRITNRM NORMAL WRITE COMMAND @VM08772 01112000 STH R0,CONTCMD . . . @VM08772 01113000 MVI CONDCNT+1,2 ASSUME BOTH CR,LF NEEDED @VM08772 01114000 MVC CONDATA(2),=X'0D25' CPT-TWX 'CR', 'LF' @VM08772 01115000 TM CONSTAT-CONTASK(R5),CONACTV+CONESCP BOTH ? @VM08772 01116000 BO CMPRD07 YES - O.K. @VM08772 01117000 MVI CONDCNT+1,1 ONLY ONE IS REQUIRED @VM08772 01118000 TM CONSTAT-CONTASK(R5),CONACTV 'CR' NEEDED ? @VM08772 01119000 BO CMPRD08 YES - IT'S FIRST @VM08772 01120000 MVI CONDATA,X'25' SEND ONLY A LINE-FEED @VM08772 01121000 B CMPRD08 @VM08772 01122000 SPACE 01123000 CMPRD07 EQU * @VM08772 01124000 TM NICTYPE,NICTELE TELEGRAPH TERMINAL ? @VM08772 01125000 BO CMPRD08 YES - CORRECT AS IS @VM08772 01126000 MVI CONDCNT+1,1 ONLY ONE CHARACTER NEEDED @VM08772 01127000 MVI CONDATA,X'15' SELECTRIC CARRIAGE RETURN @VM08772 01128000 SPACE 01129000 CMPRD08 EQU * SETUP FOR EDITING, ETC. @VM08772 01130000 BAL R7,TAGTASK FILL IN BTU FIELDS, CCW DATA @VM08772 01131000 LR R6,R5 READ TASK TO GR6 AGAIN @VM08772 01132000 NI CONSTAT,255-(CONACTV+CONESCP) RESET FLAG BITS @VM08772 01133000 B CMPEDIT GO HANDLE EDITING & TRANSLATION @VM08772 01134000 SPACE 2 01135000 CTLREAD EQU * CONTROL READ FOR NON-MTA LINES @VM01034 01136000 CLI CONSYSR,X'F3' ATTENTION HIT ON INPUT ? @VM01034 01137000 BE CMPCON2 YES - THAT'S FINE BY ME @VM01034 01138000 TM CONSYSR,ERROR ANY OTHER ERROR RESPONSE ? @VM01034 01139000 BO PWROFFS YES - DISCONNECT AND TRY AGAIN @VM01034 01140000 TM CONSYSR,PHASE3 IS THIS THE LAST RESPONSE ? @VM01034 01141000 BO CMPCON2 YES - CONTINUE WITH 'VM/370' MSG @VM01034 01142000 B BTUFRET WAIT FOR THE FINAL RESPONSE @VM01034 01143000 EJECT 01144000 CMPMOVE EQU * MOVE READ DATA TO CALLER'S BUFFER@V200820 01145000 * SINCE IT IS A READ, THERE IS A SAVE-AREA @V200820 01146000 L R15,CONRETN-CONTASK(,R5) SAVEAREA ADDRESS @VM08790 01147000 USING SAVEAREA,R15 @VM08790 01148000 L R0,SAVER1 CALLER'S BUFFER ADDRESS @VM08790 01149000 L R1,SAVER0 CALLER'S BUFFER LENGTH @VM08790 01150000 ST R4,SAVER2 PASS BACK RETURN CODE @VM08790 01151000 LA R2,CONDATA START OF RECEIVED DATA @VM08790 01152000 LH R3,CONDCNT COUNT OF RECEIVED DATA @VM08790 01153000 TM CONSTAT-CONTASK(R5),CONSPLT SUB-BLOCKED READ? @VM08790 01154000 BZ CMPMOVA NO -- O.K. @VM01040 01155000 L R0,CONADDR-CONTASK(,R5) LOAD RESIDUAL POINTER @VA04714 01156100 LH R1,CONCNT-CONTASK(,R5) LOAD RESIDUAL LENGTH @VA04714 01156200 CMPMOVA EQU * @VM01040 01158000 LR R7,R1 SAVE DESTINATION COUNT @VM08790 01159000 CR R1,R3 SOURCE OR DESTINATION CONTROL ? @VM08790 01160000 BNH *+6 DESTINATION -- O.K. @VM08790 01161000 LR R1,R3 USE THE SMALLER COUNT @VM08790 01162000 MVCL R0,R2 MOVE DATA TO CALLER'S BUFFER @VM08790 01163000 TM CONSYSR,PHASE3 WAS THAT THE LAST RESPONSE? @VM08790 01164000 BO CMPMOVR YES - FILL IN CONTASK @VM08790 01165000 SH R7,CONDCNT COMPUTE RESIDUAL COUNT @VM08790 01166000 BP *+6 O.K. IF NOT NEGATIVE @VM08790 01167000 SLR R7,R7 FORCE RESIDUAL COUNT TO ZERO @VM08790 01168000 LR R6,R5 ORIGINAL CONTASK TO GR6 @VM08790 01169000 STH R7,CONCNT SAVE THE RESIDUAL BUFFER COUNT @VM08790 01170000 ST R0,CONADDR SAVE NEXT BUFFER POSITION @VM08790 01171000 OI CONSTAT,CONACTV+CONRTRY+CONSPLT SUB-BLOCKING @VM08790 01172000 BAL R7,TASKENQ RE-QUEUE THE ORIGINAL CONTASK @VM08790 01173000 B BTUFRET WAIT FOR FINAL RESPONSE @VM08790 01174000 SPACE 01175000 CMPMOVR EQU * FINAL RESPONSE RECEIVED @VM08790 01176000 LR R6,R5 ORIGINAL CONTASK TO GR6 @VM08790 01177000 NI CONSTAT,255-CONSPLT TURN OFF SUB-BLOCKING @VM08790 01178000 L R2,SAVER1 START OF USER'S BUFFER @VM08790 01179000 ST R2,CONADDR PASS BACK FOR EDITING AND DMKQCN @VM08790 01180000 LR R1,R0 GR1 = RESIDUAL BUFFER POINTER @VM08790 01181000 SR R0,R2 GR0 = TOTAL COUNT RECEIVED @VM08790 01182000 STH R0,CONCNT RETURN INPUT COUNT IN CONTASK @VM08790 01183000 BNPR R14 RETURN IF NO DATA RECEIVED @VM08790 01184000 BCTR R1,0 BACK UP TO LAST CHARACTER READ @VM08790 01185000 BR R14 RETURN @V200820 01186000 DROP R15 @VM08790 01187000 EJECT 01188000 CMPEDIT EQU * EDIT AND TRANSLATE IF DESIRED @V200820 01189000 TM CONPARM,EDIT+UCASE ANY EDIT-TYPE STUFF TO DO ? @V200820 01190000 BZ CMPRETN NO -- JUST RETURN TO DMKQCN @V200820 01191000 LH R1,CONCNT CHECK FOR ZERO COUNT @V200820 01192000 LTR R1,R1 ? ? ? @V200820 01193000 BNP CMPEDIN YES - CHECK SPECIAL HANDLING @VM08679 01194000 L R1,CONUSER SWITCH TO CONTASK OWNER VMBLOK @V407593 01195500 BAL R7,SWITCH2 GO SWITCH IT @V407593 01196500 CALL DMKCNSED EDIT THE TASK, AND/OR TRANSLATE @V200820 01198000 CHARGE SWITCH,ASYSVM SWITCH TO THE SYSTEM VMBLOK @V407508 01199500 TM CONSTAT,CONACTV ATTENTION HIT ON READ ? @VM08679 01202000 BO CMPRETN YES - JUST RETURN THE TASK @VM08679 01203000 LTR R3,R3 ZERO COUNT AFTER EDITING ? @VM08679 01204000 BNZ CMPRETN NO -- RETURN TASK TO DMKQCN @V200820 01205000 SPACE 01206000 REPETRD EQU * REPEAT THE READ OPERATION @V200820 01207000 BAL R7,TAGTASK REFRESH BTU FIELDS IN CONTASK @V200820 01208000 OI CONSTAT,CONRTRY THIS IS A RETRY OPERATION @V200820 01209000 BAL R7,TASKENQ RE-QUEUE THE CONTASK @V200820 01210000 B BTUFRET PROCESS NEXT BTU, IF ANY @VM08790 01211000 SPACE 2 01212000 CMPEDIN EQU * TEST FOR INHIBIT MASK REQUEST @VM08679 01213000 TM CONPARM,INHIBIT READ WITH INHIBIT ? @VM08679 01214000 BZ CMPRETN NO -- JUST RETURN THE TASK @VM08679 01215000 NI NICFLAG,255-NICPSUP PRINT SUPPRESS UNAVAILABLE @VM08679 01216000 BAL R5,MASKING REBUILD TASKS FOR MASK WRITE @VM08679 01217000 B BTUFRET CONTINUE . . . @VM08790 01218000 SPACE 2 01219000 READERR EQU * ERROR RESPONSE FROM READ COMMAND @V200820 01220000 CLI CONSYSR,X'F3' ATTENTION ON THE READ ? @V200820 01221000 BE READATN YES - SAVE THE INPUT DATA @V240820 01222000 NI CONSTAT-CONTASK(R5),255-CONSPLT RESET FLAG @VA01913 01223000 B BTUERRS CHECK OUT ERROR RESPONSE CODES @V240820 01224000 SPACE 01225000 READATN EQU * PROCESS ATTENTION ON INPUT @V240820 01226000 BAL R14,TESTENV SET GR4 FOR ATTN HANDLING @V200820 01227000 BAL R14,CMPMOVE MOVE ANY DATA TO CALLER'S BUFFER @V200820 01228000 * B NCPATTN GO TYPE EXCLAMATION POINT, ETC. @V200820 01229000 EJECT 01230000 NCPATTN EQU * GENERAL ATTENTION PROCESSING @V200820 01231000 OI NICFLAG,NICATTN NOW IN ATTENTION HANDLING @V200820 01232000 LA R4,WRITNRM ASSUME NORMAL WRITE COMMAND @VM01015 01233000 LTR R6,R5 IS THERE AN ORIGINAL TASK ? @V200820 01234000 BNP NCPATTL NO -- JUST CONTINUE @V200820 01235000 L R1,NICQPNT PUT THE ORIGINAL ON THE TOP @V200820 01236000 ST R6,NICQPNT . . . @V200820 01237000 ST R1,CONPNT WE WILL NEED THE TASK LATER @V200820 01238000 OI CONSTAT,CONACTV IDENTIFY IT AS INTERRUPTED @V200820 01239000 TM CONPARM,LOGDROP+LOGHOLD ATTN ON LAST WRITE ? @VM08673 01240000 BZ NCPATTL NO -- O.K. @VM08673 01241000 LA R4,WRITEOT WRITE END OF TRANSMISSION @VM01015 01242000 NCPATTL EQU * BUILD TASK TO WRITE EXCLAMATION @V200820 01243000 LA R0,CONTSIZE+1 SIZE NEEDED FOR CONTASK @VM01040 01244000 BAL R7,CTLTASZ GET A CONTASK @V200820 01245000 OI CONSTAT,CONSPLT HANG ONTO THE ORIGINAL @V200820 01246000 STH R4,CONTCMD SET APPROPRIATE COMMAND @VM01015 01247000 BAL R14,TESTENV SET ATTENTION CODE IN GR4 @VM08844 01248000 STH R4,CONCCW3 SAVE THE ATTENTION CODE @V200820 01249000 MVI CONDCNT+1,6 LENGTH FOR IDLES ONLY @V200820 01250000 MVC CONDATA(6),=X'171717171717' SIX IDLES @V200820 01251000 TM NICFLAG,NICATOF IS THIS STRING CORRECT ? @V200820 01252000 BO NCPATTM YES - SET IT UP @V200820 01253000 TM NICFLAG,NICSESN IS USER LOGGED ON YET ? @VM08593 01254000 BZ NCPATTM NO -- SUPPRESS EXCLAMATION @VM08593 01255000 MVI CONDCNT+1,8 LONGER STRING NEEDED @VM01040 01256000 MVC CONDATA(8),=X'145A171717171517' @VM01040 01257000 TM NICTYPE,NICTELE TELEGRAPH TERMINAL ? @V200820 01258000 BZ NCPATTM NO -- O.K. AS IS @V200820 01259000 MVC CONDATA(8),=X'5A171717170D2517' @VM01040 01260000 NCPATTM EQU * @V200820 01261000 BAL R7,TAGTASK FILL OUT THE TASK FOR LATER @V200820 01262000 B BTUFRET CONTINUE FOR NOW @VM08790 01263000 EJECT 01264000 CMPWRIT EQU * OUTPUT TASK HAS COMPLETED @V200820 01265000 TM CONSYSR,ERROR ERROR RESPONSE INDICATED ? @V200820 01266000 BO WRITERR YES - CHECK IT OUT @V200820 01267000 LTR R6,R5 WAS THERE AN ORIGINAL TASK ? @VM08790 01268000 BNP BTUFRET NO -- @VM08790 01269000 TM NICFLAG,NICATTN ATTENTION HANDLING NOW ? @V200820 01270000 BZ CMPWRT1 NO -- CHECK FOR LOGDROP @VM08673 01271000 NI NICFLAG,255-NICATTN ATTN HANDLING COMPLETE @V200820 01272000 LH R4,CONCCW3 PICK UP ATTENTION CODE (4 OR 8) @V200820 01273000 BAL R14,RETTASK DISPOSE OF THE ATTENTION TASK @V200820 01274000 L R6,NICQPNT NEXT TASK ON THE CHAIN @V200820 01275000 TM CONSTAT,CONACTV WAS A TASK INTERRUPTED ? @V200820 01276000 BZ CNSATTN NO -- CHECK PROCEDURE @V200820 01277000 L R1,CONPNT NEXT TASK AFTER INTERRUPTED ONE @V200820 01278000 ST R1,NICQPNT REMOVE THE FINISHED TASK @V200820 01279000 L R1,CONRETN THERE WILL BE A SAVEAREA @V200820 01280000 ST R4,SAVER2-SAVEAREA(,R1) SET RETURN CODE @V200820 01281000 TM CONSTAT,CONOUTPT+CONCNTL INPUT CONTASK ? @VM08679 01282000 BZ CMPEDIT YES - CHECK FOR EDITING @VM08679 01283000 LR R5,R6 MAKE SURE GR5 IS CORRECT @VM08809 01284000 SPACE 01285000 CMPWRT1 EQU * SCHEDULE DISCONNECT FOR LOGOFF @VM08673 01286000 TM CONPARM,LOGDROP+LOGHOLD LAST WRITE MESSAGE ? @VM08673 01287000 BZ CMPRETN NO -- JUST COMPLETE @VM08673 01288000 LA R4,DISCEOC DISCON, END OF CALL (LOGDROP) @VM08673 01289000 TM CONPARM,LOGDROP DROP THE PHONE LINE ? @VM08673 01290000 BO CMPWRT2 YES - ALL SET @VM08673 01291000 TM NICFLAG,NICDISB DROP THE LINE ANYWAY ? @VM08673 01292000 BO CMPWRT2 YES -- @VM08673 01293000 LA R4,DISCNCT SIMPLE DISCONNECT (LOGHOLD) @VM08673 01294000 CMPWRT2 EQU * USER IS LOGGING OFF @VM08673 01295000 L R7,RDEVCON GET CURRENT STACK POINTER @VA04253 01295100 ST R5,RDEVCON LOGOFF CONTASK @VA04253 01295200 L R1,NICQPNT ... REMAINING CONTASKS @VA04253 01295300 ST R1,CONPNT-CONTASK(,R5) @VA04253 01295400 SLR R1,R1 @VA04253 01295500 ST R1,NICQPNT CLEAR NICBLOK STACK @VA04253 01295600 CALL DMKQCNCL CLEAR CONTASKS @VA04253 01295700 ST R7,RDEVCON RESTORE OLD STACK @VA04253 01295800 ST R11,NICUSER RESET NICUSER TO SYSTEM VMBLOK @VM08673 01296000 NI NICFLAG,255-(NICSESN+NICATOF+NICATTN) RESET @VA04272 01297500 BAL R7,CTLTASK GET A CONTROL CONTASK @VM08673 01298000 STH R4,CONTCMD SET DISCONNECT COMMAND @VM08673 01299000 BAL R7,TAGTASK SETUP FOR EXECUTION @VM08673 01300000 B BTUFRET @VA04253 01301500 SPACE 01302000 CMPRETN EQU * RETURN FINISHED TASK, CONTINUE @V200820 01303000 BAL R14,RETTASK DISPOSE OF THE TASK @V200820 01304000 XC NICRCNT(2),NICRCNT CLEAR NICBLOK RETRY COUNT @VM01003 01305000 B BTUFRET @VM08790 01306000 EJECT 01307000 WRITERR EQU * ERROR RESPONSE ON OUTPUT @V200820 01308000 CLI CONSYSR,X'F3' ATTENTION ? @V200820 01309000 BNE BTUERRS NO -- FIGURE OUT THE OTHERS @V200820 01310000 TM NICFLAG,NICATTN IN ATTENTION HANDLING NOW ? @V200820 01311000 BO WRITATN YES -- PROCESS DIFFERENTLY @V200820 01312000 LTR R6,R5 IS THERE AN ORIGINAL TASK ? @V200820 01313000 BNP NCPATTN NO -- JUST DO ATTENTION LOGIC @V200820 01314000 TM CONSTAT,CONRESP IS A RESPONSE EXPECTED ? @VM08809 01315000 BO NCPATTN YES - PROCESS ATTENTION @VM01015 01316000 BAL R14,RETTASK RETURN THE FIRST TASK @V200820 01317000 SLR R5,R5 ASSUME NO INTERRUPTED TASK @VM08809 01318000 TM CONSTAT,CONSPLT SPLIT TASKS TO FLUSH ? @VM08809 01319000 BZ NCPATTN NO -- GO HANDLE ATTENTION @VM08809 01320000 WRITER1 EQU * FLUSH ALL SPLIT TASKS @V200820 01321000 L R6,NICQPNT NEXT TASK ON CHAIN @V200820 01322000 LTR R5,R6 KEEP R5 CORRECT, STILL HAVE ONE? @VA04487 01322700 BNP NCPATTN NOPE, BR. @VA04487 01323400 L R2,CONPNT . . . @V200820 01324000 ST R2,NICQPNT REMOVE THE NEXT TASK @V200820 01325000 TM CONSTAT,CONRESP RESPONSE EXPECTED ? @V200820 01326000 BO NCPATTN YES - STOP FLUSHING HERE @VM01015 01327000 BAL R14,RETTASK RETURN THE SPLIT TASK @V200820 01328000 SLR R5,R5 DONT PUT THIS BACK ON CHAIN @VA03582 01329000 TM CONSTAT,CONSPLT WAS THAT THE LAST ONE ? @V200820 01330000 BO WRITER1 NO -- KEEP FLUSHING @V200820 01331000 B NCPATTN GO HANDLE ATTENTIONS @V200820 01332000 SPACE 01333000 WRITATN EQU * MULTIPLE ATTENTIONS @V200820 01334000 LR R6,R5 RECOVER ORIGINAL TASK @V200820 01335000 MVI CONCCW3+1,X'08' CODE FOR MULTIPLE ATTN'S @V200820 01336000 B BTUEREQ RE-QUEUE FOR ANOTHER GO @V200820 01337000 EJECT 01338000 BTUERRS EQU * ERROR RESPONSE FROM I/O CONTASK @V200820 01339000 TM CONSYSR,PHASE3 PHASE ZERO ERROR ? @V200820 01340000 BNZ BTUERR5 NO -- CHECK FOR OTHERS @V200820 01341000 NI CONSYSR,255-ERROR TURN OFF ERROR BIT @V200820 01342000 CLI CONSYSR,X'05' INACTIVE DEVICE ? @V200820 01343000 BNE BTUERR3 NO -- @V200820 01344000 BAL R7,CTLTASK GET A CONTROL TASK @V200820 01345000 LA R0,CACTDEV ACTIVATE THE DEVICE @V200820 01346000 STH R0,CONTCMD . . . @V200820 01347000 BAL R7,TAGTASK @V200820 01348000 B BTUEREQ GO RE-QUEUE ERROR TASK FOR LATER @V200820 01349000 SPACE 01350000 BTUERR3 EQU * @V200820 01351000 CLI CONSYSR,X'1A' BUFFER DEPLETION CONDITION ? @V200820 01352000 BNE BTUERR4 NO -- @V200820 01353000 OI RDEVFLAG,RDEVSLOW GO TO SLOWDOWN MODE @V200820 01354000 SPACE 01355000 BTUEREQ EQU * RE-QUEUE FAILING CONTASK @V200820 01356000 LTR R6,R5 WAS THERE AN ORIGINAL TASK ? @V200820 01357000 BNP BTUFRET NO -- DON'T WORRY ABOUT IT @V200820 01358000 LH R1,NICRCNT RETRY COUNT FOR ERRORS @VM01003 01359000 LA R1,1(0,R1) . . . @VM01003 01360000 STH R1,NICRCNT . . . @VM01003 01361000 CL R1,F16 HAVE WE RETRIED ENOUGH ? @VM01003 01362000 BH PWROFFL YES - DROP THE CONNECTION @VM01034 01363000 B REPETRD SETUP TO RETRY THE CONTASK @VM01040 01364000 SPACE 01365000 BTUERR4 EQU * @V200820 01366000 CLI CONSYSR,X'1E' COMMAND RESET ? @V200820 01367000 BNE PWROFFL NO - ALL OTHERS => DROP THE LINE @VM01034 01368000 CLI CONTCMD,READNRM/256 INPUT REQUEST ? @VM01034 01369000 BE BTUERR7 YES - CHECK FOR 'WNG', ETC. @VM01034 01370000 LTR R6,R5 ORIGINAL STILL AROUND @VM08513 01371000 BNZ CMPRETN YES - CALL IT COMPLETE @VM08513 01372000 B BTUFRET NO - IGNORE RESPONSE @VM08513 01373000 SPACE 01374000 BTUERR7 EQU * CHECK FOR PRIORITY WRITE @VM08513 01375000 ICM R1,15,NICQPNT IS THERE ANOTHER CONTASK ? @VM01040 01376000 BZ PWROFFL NO -- NOT BREAK - DROP THE LINE @VM01034 01377000 TM CONPARM-CONTASK(R1),PRIORITY BREAK-IN ? @VM01040 01378000 BZ PWROFFL NO -- LINE DROP @VM01034 01379000 LTR R6,R5 MAKE SURE WE HAVE THE ORIGINAL @VM01034 01380000 BNP RNH2 THEORETICALLY IMPOSSIBLE (SIC) @VM01034 01381000 BAL R7,TAGTASK REFRESH BTU FIELDS IN CONTASK @VM01040 01382000 BAL R7,TASKENQ LET QUEUEING SORT THIS OUT @V200820 01383000 B BTUFRET . . . @V200820 01384000 EJECT 01385000 BTUERR5 EQU * PHASE 1, 2, OR 3 ERRORS @V200820 01386000 NI CONSYSR,255-(ERROR+PHASE3) TURN OFF BITS @V200820 01387000 CLI CONSYSR,X'01' DATA CHECK OR POSSIBLE INTREQ ? @V240820 01388000 BH BTUERR6 NO -- CHECK OTHER RESPONSES @V240820 01389000 TM CONSRID,CONOUTPT OUTPUT CONTASK ? @V200820 01390000 BO BTUEREQ YES - JUST RETRY @V200820 01391000 LA R0,CONTSIZE+(DATCHKL+7)/8 TASK SIZE @VM08772 01392000 BAL R7,CTLTASZ @V200820 01393000 MVI CONSTAT,CONOUTPT+CONRTRY OUTPUT, FIXED ORDER @VM01034 01394000 MVC CONDATA(DATCHKL),DATCHKM 'READ ERROR' MSG @VM08772 01395000 MVI CONDCNT+1,DATCHKL SET BTU DATA COUNT @VM08772 01396000 LA R0,WRITNRM NORMAL WRITE COMMAND @VM08737 01397000 STH R0,CONTCMD ... @V200820 01398000 BAL R7,TAGTASK FILL IN THE CONTASK @V200820 01399000 TM NICTYPE,NICTELE TELEGRAPH TERMINAL ? @VM08772 01400000 BZ BTUEREQ NO -- ALL READY TO GO @VM01034 01401000 MVC CONDATA(DATCHKL),DATCHKT TWX 'READ ERROR' MSG @VM08772 01402000 B BTUEREQ RE-QUEUE THE READ CONTASK @VM01034 01403000 SPACE 01404000 BTUERR6 EQU * CHECK FOR LINE FAILURE @V200820 01405000 CLI CONSYSR,X'02' INTERVENTION REQUIRED ? @V200820 01406000 BNE BTUERR3 NO -- CONTINUE CHECKING @V240820 01407000 CLI CONEXTR,X'8A' LOST DATA ? 01408000 BE BTUEREQ YES..RETRY OR IGNORE... 01409000 B PWROFFL DROP THE CONNECTION @VM01034 01410000 EJECT 01411000 CNSATTN EQU * ATTENTION HANDLING LOGIC @V200820 01412000 OI NICSTAT,NICNTRL DO NOT START THIS INTERFACE @V200820 01413000 TM NICFLAG,NICSESN ANYONE LOGGED ON? @VA07851 01414250 BO CNSATN2 YES - CHECK HIM OUT @VA07851 01414500 CALL DMKBLDVM CREATE A VMBLOK FOR THIS LINE @V200820 01416000 OI NICFLAG,NICSESN USER IS NOW LOGGED ON @VM08593 01417000 B CNSATN3 GO PUT HIM IN C.F. MODE @V200820 01418000 SPACE 01419000 CNSATN2 EQU * FIGURE OUT CORRECT APPROACH @V200820 01420000 L R1,NICUSER SWITCH TO NICUSERS VM-BLOK @V407593 01421500 BAL R7,SWITCHVM GO SWITCH IT @V407593 01422500 TM VMRSTAT,VMCFWAIT+VMLOGON IN LOGON OR SLEEPING ? @V240820 01424000 BNZ CNSATN3 YES - MUST CALL BREAK @V240820 01425000 CL R4,F4 SINGLE OR MULTIPLE CODE ? @V200820 01426000 BH CNSATN3 MULTIPLE -- @V200820 01427000 CALL DMKCFMAT ATTENTION TO THE VIRTUAL MACHINE @V200820 01428000 BZ CNSATNR TOOK O.K. - CONTINUE @V200820 01429000 SPACE 01430000 CNSATN3 EQU * PUT VIRTUAL MACHINE IN C.F. MODE @V200820 01431000 TM VMOSTAT,VMSLEEP+VMVIRCF COMING OUT OF SLEEP? @VA04784 01431100 BNO CNSATN3A NO, NORMAL PROCESSING @VA04784 01431200 CL R4,F4 SINGLE OR MULT. ATTN ?? @VA04784 01431300 BH CNSATN3A MULTIPLE, DON'T DISPATCH @VA04784 01431400 LA R4,GODSPCH CPEXBLOK RETURN ADDRESS @VA04784 01431500 BAL R7,STKCPEX BUILD AND STACK CPEXBLOK @VA04784 01431600 CNSATN3A EQU * @VA04784 01431700 L R4,NICQPNT PICK UP THE CONTASK CHAIN @V200820 01432000 SLR R0,R0 @V200820 01433000 ST R0,NICQPNT CLEAR THE CHAIN FOR A MOMENT @V200820 01434000 CALL DMKCFMBK LET CFM GET HIS TASKS IN FIRST @V200820 01435000 LA R1,NICQPNT-(CONPNT-CONTASK) CHAIN START @V200820 01436000 CNSATN4 EQU * FIND THE END OF THE CHAIN @V200820 01437000 L R2,CONPNT-CONTASK(,R1) NEXT CONTASK @V200820 01438000 LTR R2,R2 IS THERE ONE ? @V200820 01439000 BNP CNSATN5 NO -- PUT OLD CHAIN HERE @V200820 01440000 LR R1,R2 CONTINUE UNTIL WE FIND THE END @V200820 01441000 B CNSATN4 . . . @V200820 01442000 SPACE 01443000 CNSATN5 EQU * RE-CONNECT OLD CONTASK CHAIN @V200820 01444000 ST R4,CONPNT-CONTASK(,R1) . . . @V200820 01445000 CNSATNR EQU * RESET TO SYSTEM VMBLOK, CONTINUE @V200820 01446000 L R1,ASYSVM SWITCH BACK TO SYSTEM VM-0BLOCK @V407593 01447500 BAL R7,SWITCH2 GO SWITCH IT @V407593 01448500 SWITCH CONTINUE ON THE I/O PROCESSOR @V407508 01449500 NI NICFLAG,255-NICATTN ATTN HANDLING COMPLETE @V200820 01450000 NI NICSTAT,255-NICNTRL CONTROL TASK COMPLETE @V200820 01451000 B BTUFRET @VM08790 01452000 EJECT 01453000 CMPCONT EQU * PROCESS RESPONSE FROM 'CONTACT' COMMAN@V200820 01454000 CLI CONSYSR,X'04' MTA DEVICE IDENTIFIED ? @V200820 01455000 BNE CMPCON1 NO -- CHECK FOR COMPLETION @V200820 01456000 OI NICSTAT,NICNTRL CONTROL TASK STILL ACTIVE @VM01040 01457000 MVI NICTYPE,NICTERM+NICCIBM ASSUME NOT TELETYPE @V200820 01458000 OI NICFLAG,NICPSUP+NICMTA MTA LINE, PRT INHIBIT @VM01034 01459000 CLI CONDATA,MTA1050 1050 TERMINAL ? @VM08830 01460000 BNE *+8 NO -- O.K. @VM08830 01461000 NI NICFLAG,255-NICPSUP MASK REQUIRED FOR 1050 @VM08830 01462000 CLI CONDATA,MTATELE TELEGRAPH TERMINAL ? @V200820 01463000 BNE BTUFRET NO -- ALL SET AS IS @V200820 01464000 MVI NICTYPE,NICTERM+NICTELE SET TYPE ACCORDINGLY @V200820 01465000 NI NICFLAG,255-NICPSUP NO PRINT SUPPRESS @V200820 01466000 B BTUFRET CONTINUE @V200820 01467000 SPACE 01468000 CMPCON1 EQU * WRITE 'VM/370 ONLINE' MESSAGE @V200820 01469000 CLI CONSYSR,X'A9' SESSION NOT STARTED (HDW) ? @VM01040 01470000 BE DVCENAB THAT'S RIGHT - RETRY THE CONTACT @VM01040 01471000 CLI CONSYSR,X'9E' WAS THE CONTACT COMMAND RESET ? @VM01034 01472000 BE DVCENAB YES - GO AND CLEAN UP @VM01034 01473000 TM CONSYSR,ERROR IS THIS AN ERROR RESPONSE ? @VM01040 01474000 BO PWROFFS YES - DISCONNECT AND RETRY IT @VM01040 01475000 TM NICFLAG,NICMTA IS THIS AN MTA TERMINAL ? @VM01034 01476000 BO CMPCON2 YES - PROCEED IMMEDIATELY @VM01034 01477000 BAL R7,CTLTASK BUILD A CONTROL CONTASK @VM01034 01478000 LA R0,READNRM CONTROL READ FOR 2741 BYPASS @VM01034 01479000 STH R0,CONTCMD . . . @VM01034 01480000 BAL R7,TAGTASK . . . @VM01034 01481000 B BTUFRET LET THE READ EXECUTE FIRST @VM01034 01482000 SPACE 01483000 CMPCON2 EQU * WRITE 'VM/370 ONLINE' MESSAGE @VM01034 01484000 XC NICRCNT(2),NICRCNT CLEAR THE RETRY COUNT @VM01034 01485000 LA R0,CONTSIZE+(ONLINEL+7)/8 SIZE NEEDED FOR TASK @V200820 01486000 BAL R7,CTLTASZ GET A LARGE 'CONTROL' CONTASK @V200820 01487000 MVI CONSTAT,CONOUTPT MAKE IT LOOK LIKE OUTPUT @V200820 01488000 MVI CONPARM,PRIORITY FORCE CHAINING ORDER @VM01040 01489000 MVC CONDATA(ONLINEL),ONLINEM MOVE IN MSG @V200820 01490000 MVI CONDCNT+1,ONLINEL SET BTU DATA COUNT @VM08772 01491000 TM NICTYPE,NICTELE TELEGRAPH TERMINAL ? @VM08772 01492000 BZ CMPCON3 NO -- ALL SET @VM08772 01493000 MVC CONDATA(ONLINEL),ONLINET TWX VM/370 ONLINE @VM08772 01494000 CMPCON3 EQU * @VM08772 01495000 LA R1,WRITNRM COMMAND = WRITE @V200820 01496000 STH R1,CONTCMD ... @V200820 01497000 BAL R7,TAGTASK FILL OUT THE CONTASK @V200820 01498000 BAL R7,CTLTASK STICK A CONTROL TASK ON TOP @V200820 01499000 LA R0,CCDESMD COPY DESTINATION MODE COMMAND @V200820 01500000 STH R0,CONTCMD . . . @V200820 01501000 BAL R7,TAGTASK FILL OUT THIS TASK @V200820 01502000 B BTUFRET CONTINUE - WILL WORK OUT @V200820 01503000 EJECT 01504000 CMPCNTL EQU * PROCESS FINISHED CONTROL TASKS @V200820 01505000 TM CONSRID,CONRESP IS A RESPONSE EXPECTED ? @V200820 01506000 BZ CMPCTL1 NO -- CHECK COMMAND MODIFIER@V200820 01507000 LTR R5,R5 WAS ORIGINAL TASK RECOVERED ? @V200820 01508000 BNP RNH2 NO -- THEORETICALLY IMPOSSIBLE @V200820 01509000 BAL R7,PASSBTU BUILD SMALL BUFFER AND MOVE DATA @V200820 01510000 L R2,CONRETN-CONTASK(,R5) SAVEAREA POINTER @V200820 01511000 ST R1,SAVER1-SAVEAREA(,R2) PASS BTU VIA GR1 @V200820 01512000 LR R6,R5 ORIGINAL TASK TO GR6 @V200820 01513000 BAL R14,RETTASK CHAIN IT FOR RETURN TO DMKQCN @V200820 01514000 B BTUFRET SKIP OVER BUFFER FOR THIS TASK @V200820 01515000 SPACE 01516000 CMPCTL1 EQU * CONTROL TASK - NO RESPONSE @V200820 01517000 CLI CONTCMD+1,CRESERL-CNTLBTU RESET ERROR LOCK ?@V200820 01518000 BE CMPCTLK YES -- RESET NICBLOK FLAGS @V200820 01519000 CLI CONTCMD+1,CCDESMD-CNTLBTU COPY DEST MODE ? @V200820 01520000 BE CMPCDES YES - SETUP FOR 'ATTN' @V200820 01521000 CLI CONTCMD+1,CRESIMD-CNTLBTU RESET IMMEDIATE ? @VM01016 01522000 BE CMPCRIM YES -- @VM01016 01523000 CLI CONTCMD+1,CACTLTR-CNTLBTU ACTIVATE TRACE ? @VM01016 01524000 BNE *+8 IF YES, IT MUST HAVE FAILED @VM01016 01525000 NI NICSTAT,255-NICLTRC TURN OFF TRACING FLAG @VM01016 01526000 CLI CONTCMD+1,CACTDEV-CNTLBTU ACTIVATE DEVICE ? @V200820 01527000 BNE BTUFRET NO -- JUST IGNORE OTHERS @V200820 01528000 TM NICFLAG,NICENAB IS THE INTERFACE ENABLED ? @V200820 01529000 BZ BTUFRET NO -- JUST IGNORE RESPONSE @V200820 01530000 B DVCENAB GO ISSUE THE 'CONTACT' @V200820 01531000 EJECT 01532000 CMPCRIM EQU * NETWORK HALT COMMAND WAS ISSUED @VM08788 01533000 NI NICSTAT,255-(NICNTRL+NICERLK+NICDISA+NICLTRC) @VM08788 01534000 NI NICFLAG,255-NICATTN RESET INTERFACE FLAGS @VM08788 01535000 L R1,NICQPNT CHECK THE FIRST CONTASK @VM08788 01536000 LTR R1,R1 . . .IF THERE IS ONE @VM08788 01537000 BNP BTUFRET . . .NONE - CONTINUE @VM08788 01538000 NI CONSTAT-CONTASK(R1),CONACTV NOT ACTIVE @VM08788 01539000 B BTUFRET CONTINUE PROCESSING @VM08788 01540000 SPACE 2 01541000 CMPCDES EQU * COPY DESTINATION MODE FOR 'ATTN' @V200820 01542000 L R4,CONDATA PICK UP THREE BYTES OF FLAGS @V200820 01543000 LA R0,CONTSIZE+1 GET A CONTROL CONTASK @V200820 01544000 BAL R7,CTLTASZ ...WITH ROOM FOR DATA @V200820 01545000 STCM R4,B'1110',CONDATA DESTINATION MODE IN NEW TASK @V200820 01546000 OI CONDATA+1,X'02' SET BIT 14 FOR MONITOR @V200820 01547000 MVI CONDCNT+1,3 DATA COUNT = THREE @V200820 01548000 LA R1,CSETDSM SET DESTINATION MODE @V200820 01549000 STH R1,CONTCMD . . . @V200820 01550000 BAL R7,TAGTASK FILL OUT THE TASK FIELDS @V200820 01551000 B BTUFRET WILL BE EXECUTED WHEN POSSIBLE @V200820 01552000 EJECT 01553000 CMPCTLK EQU * RESET DEVICE ERROR LOCK @V200820 01554000 CLI CONSYSR,X'EC' POWER OFF AFTER ATTENTION ? @V200820 01555000 BNE BTUFRET NO -- ASSUME EVERYTHING IS O.K. @V200820 01556000 PWROFFL EQU * TERMINAL HAS DIED - CLEAN UP @V200820 01557000 LTR R6,R5 IS THERE AN ORIGINAL CONTASK ? @VM01034 01558000 BNP PWROFFT NO -- NOTHING EXTRA TO DO @VM01034 01559000 MVC CONPNT(4),NICQPNT RE-CHAIN THE ORIGINAL TASK @VM01034 01560000 ST R6,NICQPNT . . .SO WE DON'T LOSE IT @VM01034 01561000 PWROFFT EQU * FLUSH ANY PENDING CONTASK'S @VM01034 01562000 L R5,RDEVCON CURRENT RDEVBLOK CONTASK CHAIN @V200820 01563000 L R2,NICQPNT CONTASK CHAIN FROM THE NICBLOK @V200820 01564000 ST R2,RDEVCON MOVE IT TO THE RDEVBLOK @V200820 01565000 SLR R0,R0 @V200820 01566000 ST R0,NICQPNT CLEAR THE NICBLOK CHAIN @V200820 01567000 L R1,NICUSER SWITCH TO NICUSERS VMBLOK @V407593 01568050 SWTCHVM OPT=STAY SWITCH TO THIS VMBLOK @V407508 01569050 CALL DMKQCNCL CLEAR THE CONTASK CHAIN @V200820 01571000 ST R5,RDEVCON RESTORE PREVIOUS CHAIN, IF ANY @V200820 01572000 CL R11,ASYSVM IS THERE AN ACTIVE USER ? @V200820 01573000 BE PWROFFS NO -- JUST RE-CONTACT TERMINAL @VM01040 01574000 CALL DMKQCNTO,AFFINITY FORCE DISC. FOR THIS USER @V407593 01575050 PWROFFS EQU * CLEAN UP AND DISCONNECT @VM01040 01576000 L R1,ASYSVM SWITCH BACK TO SYSTEM VM-BLOK @V407593 01577050 BAL R7,SWITCH2 GO SWITCH IT @V407593 01578050 ST R11,NICUSER MAKE SYSTEM EQUAL OWNER @VA07851 01579400 NI NICSTAT,255-(NICNTRL+NICLTRC+NICDISA) RESET @V200820 01581000 NI NICFLAG,255-(NICSESN+NICATOF+NICATTN) FLAGS @V200820 01582000 BAL R7,CTLTASK BUILD A CONTROL TASK @VM01040 01583000 LA R0,DISCEOC DISCONNECT END OF CALL @VM01040 01584000 STH R0,CONTCMD . . . @VM01040 01585000 BAL R7,TAGTASK . . . @VM01040 01586000 B BTUFRET GO LET IT HAPPEN @VM01040 01587000 EJECT 01588000 DVCENAB EQU * RE-ESTABLISH TERMINAL SESSION @VM01040 01589000 TM NICFLAG,NICDISB DISABLE THIS INTERFACE ? @V200820 01590000 BZ DVCENB1 NO -- SETUP TO ISSUE CONTACT@V200820 01591000 NI NICFLAG,255-(NICENAB+NICDISB) LEAVE IT IDLE @V200820 01592000 XC NICRCNT(2),NICRCNT CLEAR THE RETRY COUNT @VM01040 01593000 B BTUFRET @V200820 01594000 SPACE 2 01595000 DVCENB1 EQU * RE-ENABLE THE LINE @V200820 01596000 TM NICFLAG,NICENAB IS IT ENABLED NOW ? @V200820 01597000 BZ BTUFRET NO -- LEAVE IT IDLE @V200820 01598000 LH R1,NICRCNT PICK UP ENABLE RETRY COUNT @VM01040 01599000 LA R1,1(0,R1) INCREMENT . . . @VM01040 01600000 STH R1,NICRCNT . . . @VM01040 01601000 CL R1,F16 ARE WE READY TO LOOP ON IT ? @VM01040 01602000 BH DVCDISA YES -- BUT DON'T @VM01040 01603000 BAL R7,CTLTASK GET A CONTROL CONTASK @V200820 01604000 LA R0,CONTACT @V200820 01605000 STH R0,CONTCMD @V200820 01606000 BAL R7,TAGTASK SETUP FOR LATER EXECUTION @V200820 01607000 B BTUFRET @V200820 01608000 EJECT 01609000 DVCDISA EQU * DMKRNH454I DEV XXXX DISABLED @VM01040 01610000 NI NICFLAG,255-(NICENAB+NICDISB) LEAVE IT IDLE @VM01040 01611000 XC NICRCNT(2),NICRCNT CLEAR FOR THE NEXT TIME @VM01040 01612000 LH R1,IOBRADD REAL ADDRESS OF THE 370X @VM01040 01613000 L R2,=A(DMKRIORN) ADDRESS OF THE CTLR TABLE @VM01040 01614000 L R3,0(0,R2) NUMBER OF TABLE ENTRIES @VM01040 01615000 DVCDISB EQU * FIND THIS CTLR IN THE TABLE @VM01040 01616000 CH R1,6(0,R2) IS THIS THE RIGHT ENTRY ? @VM01040 01617000 BE DVCDISC YES -- @VM01040 01618000 LA R2,4(0,R2) NEXT ENTRY @VM01040 01619000 BCT R3,DVCDISB CONTINUE @VM01040 01620000 DVCDISC EQU * COMPUTE RESOURCE REFERENCE @VM01040 01621000 S R2,=A(DMKRIORN) ZERO-BASED DISPLACEMENT @VM01040 01622000 SLL R2,10(0) ENTRY NUMBER TIMES 4096 @VM01040 01623000 LH R1,NICNAME RESOURCE I.D. FROM THE NICBLOK @VM01040 01624000 OR R2,R1 GR2 = RESOURCE REF. IN BINARY @VM01040 01625000 LA R0,4(0) GET A MESSAGE BUFFER @VM01040 01626000 CALL DMKFREE . . . @VM01040 01627000 MVC 24(8,R1),BLANKS CLEAR THE TAIL END OF IT @VM01040 01628000 MVC 0(28,R1),=C'DMKRNH454I DEV .... DISABLED' @VM01040 01629000 LR R3,R1 SAVE THE BUFFER ADDRESS @VM01040 01630000 LR R1,R2 RESOURCE REFERENCE TO GR1 @VM01040 01631000 CALL DMKCVTBH CONVERT IT FOR OUTPUT @VM01040 01632000 STCM R1,15,15(R3) STUFF IT INTO THE MESSAGE @VM01040 01633000 LR R1,R3 BUFFER BACK INTO GR1 FOR QCNWT @VM01040 01634000 LA R0,28(0) MESSAGE LENGTH @VM01040 01635000 LA R3,4(0) NO. DBL-WDS FOR 'DFRET' @VM01040 01636000 CALL DMKQCNWT,PARM=NORET+DFRET+OPERATOR+ALARM,AFFINITY 01637050 B BTUFRET CONTINUE PROCESSING @VM01040 01638000 EJECT 01639000 UNSOLIT EQU * UNSOLICITED RESPONSE FROM NCP @V200820 01640000 CLI CONSYSR,X'03' DEVICE ASSOCIATION RESPONSE ? @V200820 01641000 BL RNFATAL NO -- FATAL SITUATION @V200820 01642000 BE BTUFRET YES - IGNORE IT @V200820 01643000 CLI CONSYSR,X'07' ENTERING SLOWDOWN MODE ? @V200820 01644000 BL RNFATAL NO -- FATAL SITUATION @V200820 01645000 BE BTUSLOW YES - DO IT @V200820 01646000 CLI CONSYSR,X'09' INITIALIZATION COMPLETE RESPONSE @V200820 01647000 BE IPLCOMP YES - CHECK SCANNER BITS @V200820 01648000 BL BTUFAST NO -- EXIT FROM SLOWDOWN MODE @V200820 01649000 CLI CONSYSR,X'0A' MISC DATA RECORDING RECORD ? @V200820 01650000 BE MDRECRD YES - PASS IT TO ERROR RECORDING @V200820 01651000 CLI CONSYSR,X'1E' HOST LOGGING RESPONSE ? @V200820 01652000 BE BTUFRET YES - ****** TEMPORARILY IGNORE @V200820 01653000 TM CONSYSR,ERROR IS THIS AN ERROR RESPONSE ? @VM01013 01654000 BZ RNH2 NO -- OTHERS ARE FATAL @VM01013 01655000 CLI CONSYSR,X'F3' ATTENTION TO IDLE TERMINAL ? @VM01013 01656000 BNE BTUERRS NO -- SORT OUT THE OTHERS @VM01013 01657000 B NCPATTN PROCESS UNSOLICITED ATTENTION @V200820 01658000 SPACE 2 01659000 BTUSLOW EQU * ENTER NCP BUFFER SLOWDOWN MODE @V200820 01660000 OI RDEVFLAG,RDEVSLOW ENTER BUFFER SLOWDOWN MODE @V200820 01661000 B BTUFRET RELEASE THIS BTU, CONTINUE @V200820 01662000 SPACE 01663000 BTUFAST EQU * EXIT FROM NCP BUFFER SLOWDOWN @V200820 01664000 NI RDEVFLAG,255-RDEVSLOW EXIT BUFFER SLOWDOWN @V200820 01665000 B BTUFRET RELEASE THIS BTU, CONTINUE @V200820 01666000 SPACE 01667000 IPLCOMP EQU * NCP INITIALIZATION COMPLETE @V200820 01668000 TM CONDATA,X'F8' DID THE SCANNERS ENABLE O.K. ? @V200820 01669000 BNZ SCNFAIL NO -- WARN THE OPERATOR @V200820 01670000 NI RDEVSTAT,255-(RDEVNRDY+RDEVRSVD) 370X IS READY@V200820 01671000 NI RDEVFLAG,255-(RDEVSLOW+RDEVRCVY+RDEVWAIT) @V200820 01672000 B CHECKPT GO TRY TO RE-ENABLE DEVICES @V200820 01673000 SPACE 2 01674000 SCNFAIL EQU * COMMUNICATIONS SCANNER FAILURE @V200820 01675000 LA R2,468(0) MSG= DMKRNH468I SCANNER FAILURE @V200820 01676000 BAL R7,CALLERM GO SETUP AND TYPE ERROR MESSAGE @V200820 01677000 B BTUFRET LEAVE THE DEVICE NOT READY @V200820 01678000 EJECT 01679000 RNIOERR EQU * STANDARD 370X ERROR RECOVERY @V200820 01680000 TM IOBCSW+5,PCI+IL+PRGC+PRTC+CHC PROGRAM ERROR? @V200820 01681000 BNZ RNH1 YES - CRASH CP @V200820 01682000 TM IOBCSW+5,CDC CHANNEL DATA CHECK ? @V200820 01683000 BZ RNIOERD NO -- CHECK DEVICE STATUS @V200820 01684000 CLI IOBMISC2,X'02' IS THIS A READ ? @V200820 01685000 BNE RNFATAL NO -- CDC IS FATAL FOR WRITE @V200820 01686000 RNIOERT EQU * RETRY THE OPERATION 16 TIMES @V200820 01687000 LH R1,IOBRCNT COUNT OF PREVIOUS RETRIES @V200820 01688000 LA R1,1(0,R1) INCREMENT @V200820 01689000 STH R1,IOBRCNT . . . @V200820 01690000 CL R1,F16 CHECK FOR A RESONABLE LIMIT @V200820 01691000 BH RNFATAL NOPE - BOUNCE THE NCP @V200820 01692000 BAL R7,RNGORED RESTART THIS IOBLOK @V200820 01693000 B GODSPCH EXIT TO DMKDSPCH @V200820 01694000 SPACE 01695000 RNIOERD EQU * CHECK FOR DEVICE-LEVEL ERRORS @V200820 01696000 TM IOBCSW+4,UC WAS IT A UNIT CHECK ? @V200820 01697000 BZ RNFATAL NO -- BOUNCE IT @V200820 01698000 RNIOEUC EQU * @V200820 01699000 L R1,IOBIOER ADDRESS OF THE IOERBLOK @V200820 01700000 USING IOERBLOK,R1 @V200820 01701000 TM IOERDATA,CMDREJ WAS IT MY FAULT ? @V200820 01702000 BO RNH1 APPARENTLY - DIE @V200820 01703000 TM IOERDATA,BUSOUT BUS-OUT CHECK ? @V200820 01704000 BZ RNFATAL NO -- OTHERS = BOUNCE NCP @V200820 01705000 CLI IOBMISC2,X'02' WAS THIS A READ STRING ? @V200820 01706000 BE RNIOERT YES - RETRY FROM THE BEGINNING @V200820 01707000 CLI IOBMISC2,X'01' WAS THIS A WRITE STRING ? @V200820 01708000 BNE RNFATAL NO -- VERY STRANGE STATUS @V200820 01709000 L R1,IOBCSW BACK UP TO FAILING CCW @V200820 01710000 S R1,F8 (KEY IS ZERO) @V200820 01711000 BNP RNIOERT RETRY FROM THE BEGINNING @V200820 01712000 ST R1,IOBRCAW SET THE IOBLOK RESTART CAW @V200820 01713000 OI IOBFLAG,IOBRSTRT RESTART IN THE MIDDLE @V200820 01714000 B RNIOERT . . . @V200820 01715000 EJECT 01716000 MDRECRD EQU * MISCELLANEOUS DATA RECORDING BTU @V200820 01717000 L R1,NMDRCRD NUMBER OF MDR RECORDS RECEIVED @V200820 01718000 AL R1,F1 INCREMENT . . . @V200820 01719000 ST R1,NMDRCRD . . . @V200820 01720000 LH R2,CONDCNT LENGTH OF THE MDR DATA @V240820 01721000 LA R2,12(0,R2) ALLOW FOR ACCESS METHOD DATA @V240820 01722000 BAL R7,PASTBTU BUILD A MINI-CONTASK FOR DMKIOE @V240820 01723000 LR R5,R1 MINI-CONTASK ADDRESS TO GR5 @V240820 01724000 DROP R6 TEMPORARILY @V240820 01725000 USING CONCCW3,R5 . . . @V240820 01726000 LH R1,IOBRADD 370X NATIVE SUBCHANNEL ADDRESS @V240820 01727000 STH R1,CONDATA PASS IT ALONG FOR CPEREP @V240820 01728000 L R1,NICUSER VMBLOK POINTER FOR THIS RESOURCE @V240820 01729000 MVC CONDATA+2(8),VMUSER-VMBLOK(R1) USERID @V240820 01730000 LH R1,CONDEST FAILING RESOURCE I.D. @V240820 01731000 STH R1,CONDATA+10 PASS IT ALONG IN THE RECORD @V240820 01732000 LA R1,CONDATA+12 POINT TO LOCATION OF MDR DATA @V240820 01733000 DROP R5 @V240820 01734000 USING CONTASK,R6 NORMAL ADDRESSABILITY @V240820 01735000 LH R2,CONDCNT ORIGINAL MDR DATA LENGTH @V240820 01736000 BCTR R2,0 DECREMENT FOR EXECUTE @V240820 01737000 LA R3,CONDATA POINT TO SOURCE OF THE DATA @V240820 01738000 EX R2,MVCR1R3 MOVE MDR DATA INTO THE BUFFER @V240820 01739000 LA R2,13(0,R2) RESTORE LENGTH + ADD HEADER @V240820 01740000 STH R2,CONDCNT-CONCCW3(,R5) . . . @V240820 01741000 LR R6,R5 PASS BTU ADDRESS IN GR6 @V240820 01742000 LA R4,CALLIOER CPEXADD FOR LATER CALL TO DMKIOE @V200820 01743000 BAL R7,STKCPEX STACK CPEXBLOK FOR LATER @V200820 01744000 B BTUFRET CONTINUE NORMALLY FOR NOW @V200820 01745000 EJECT 01746000 CHECKPT EQU * RE-ENABLE LINES AFTER 370X BOUNCE@V200820 01747000 BAL R9,READFRT RELEASE READ BUFFERS, CCW STRING @V200820 01748000 ICM R5,15,RDEVCKPT LOAD AND TEST FOR CKPBLOK @VM01034 01749000 BZ RNIGNOR NOT THERE - JUST EXIT @VM01034 01750000 BAL R7,FRETIOB RELEASE THE IOBLOK ANYWAY @V200820 01751000 USING CKPBLOK,R5 @V200820 01752000 CLC CKPNAME(8),RDEVNCP SAME CONTROL PROGRAM NOW ? @V200820 01753000 BNE CHEKFRT NO -- EXIT GRACEFULLY @V200820 01754000 L R9,RDEVNICL START OF THE NICBLOK LIST @V200820 01755000 LH R7,RDEVMAX SETUP TO BXLE THROUGH IT @V200820 01756000 MH R7,=AL2(NICSIZE*8) . . . @V200820 01757000 ALR R7,R9 . . . @V200820 01758000 LA R6,NICSIZE*8 . . . @V200820 01759000 LA R10,CKPBITS START OF THE CKPBLOK BIT MAP @V200820 01760000 LA R3,1(0,0) START WITH A SINGLE SHIFT @V200820 01761000 LR R4,R3 ...INCREMENT @V200820 01762000 LA R5,8(0,0) ...LIMIT @V200820 01763000 DROP R5 @V200820 01764000 SPACE 2 01765000 CHECKEM EQU * CHECK FOR ACTIVE OR ENABLED @V200820 01766000 L R1,F256 GET A SINGLE BIT @V200820 01767000 SRL R1,0(R3) SHIFT APPROPRIATELY @V200820 01768000 EX R1,TESTBIT SEE IF THE BIT IS SET @V200820 01769000 BZ CHECKNX NO -- SKIP THIS NICBLOK ENTIRELY @V200820 01770000 TM NICTYPE,NICLINE IS THIS A LINE ? @V200820 01771000 BZ CHECKDV NO -- CHECK FOR TERMINALS @V200820 01772000 TM NICSTAT,NICDISA IS IT ALREADY ACTIVE ? @V200820 01773000 BZ CHECKNX YES - NOTHING MORE TO DO @V200820 01774000 NI NICSTAT,255-NICDISA WILL BE ACTIVE SOON @V200820 01775000 LH R1,NICNAME RESOURCE I.D. @V200820 01776000 LA R0,CACTLIN ACTIVATE LINE @V200820 01777000 CALL DMKRNHND,PARM=0 *** WAIT FOR THE RESPONSE **@V200820 01778000 BNZ GODSPCH EXIT IMMEDIATELY IF BAD RETURN @VM01034 01779000 LH R0,0(0,R1) NO. OF DBL-WDS FOR FRET @V200820 01780000 CALL DMKFRET RELEASE THE "MINI-CONTASK" @V200820 01781000 B CHECKNX ADVANCE THRU THE BLOCKS @V200820 01782000 EJECT 01783000 CHECKDV EQU * TEST FOR ENABLED TERMINALS @V200820 01784000 TM NICTYPE,NICTERM IS THIS A TERMINAL ? @V200820 01785000 BZ CHECKNX NO -- IGNORE THE ONE BIT @V200820 01786000 TM NICFLAG,NICENAB ALREADY ENABLED ? @V200820 01787000 BO CHECKNX YES - SKIP IT @V200820 01788000 OI NICFLAG,NICENAB WILL BE ENABLED @V200820 01789000 LH R1,NICNAME RESOURCE I.D. @V200820 01790000 LA R0,CONTACT CONTACT COMMAND @V200820 01791000 CALL DMKRNHND,PARM=NORET DON'T WAIT FOR THIS ONE@V200820 01792000 BNZ GODSPCH QUIT FAST IF BAD RETURN CODE @VM01034 01793000 CHECKNX EQU * @V200820 01794000 BXLE R3,R4,CHECKNC BUMP THE SHIFT COUNT @V200820 01795000 LR R3,R4 RESTART AT ONE @V200820 01796000 LA R10,1(0,R10) NEXT BYTE IN THE BIT MAP @V200820 01797000 CHECKNC EQU * ADVANCE THROUGH THE NICBLOK'S @V200820 01798000 BXLE R9,R6,CHECKEM . . . @V200820 01799000 SPACE 01800000 CHEKFRT EQU * RELEASE THE CKPBLOK ITSELF @V200820 01801000 L R1,RDEVCKPT @V200820 01802000 LH R0,CKPSIZE-CKPBLOK(,R1) SIZE IN DBL-WDS @V200820 01803000 CALL DMKFRET RETURN CKPBLOK TO FREE STORAGE @V200820 01804000 SLR R1,R1 @V200820 01805000 ST R1,RDEVCKPT CLEAR OUT THE RDEVBLOK @V200820 01806000 B GODSPCH EXIT @V200820 01807000 SPACE 2 01808000 RNCLEAN EQU * CLEAN UP IOBLOK, EXIT @VM08593 01809000 TM IOBSPEC,IOBUNSL UNSOLICITED INTERRUPT ? @VM08593 01810000 BO RNIGNOR YES - FRET IOBLOK + EXIT @VM08593 01811000 CLI IOBMISC2,X'02' IS THIS A READ CHANNEL PROGRAM @VM08593 01812000 BNE RNIGNOR NO --- @VM08593 01813000 BAL R9,READFRT RELEASE BUFFERS, CCW STRING @VM08593 01814000 B RNIGNOR FRET IOBLOK + EXIT @VM08593 01815000 EJECT 01816000 RNFATAL EQU * THE 3705 IS GOING TO BOUNCE @V200820 01817000 TM RDEVFLAG,RDEVRCVY ALREADY IN RECOVERY ? @V200820 01818000 BO RNIGNOR YES - GET OUT OF HERE @V200820 01819000 TM RDEVFLAG,RDEVLNCP IS THERE AN NCP ACTIVE ? @VM08838 01820000 BZ RNRDUMP NO -- JUST DUMP + RE-LOAD @VM08838 01821000 TM RDEVFLAG,RDEVWAIT WAS I BUSY JUST NOW ? @V200820 01822000 BZ RNFDISC NO -- @V200820 01823000 CLI IOBMISC2,X'02' READ CCW STRING ? @V200820 01824000 BNE RNFDISC NO -- NOTHING TO CLEAN UP @V200820 01825000 BAL R9,READFRT RELEASE READ BUFFERS, ETC. @V200820 01826000 RNFDISC EQU * @V200820 01827000 TM RDEVSTAT,RDEVNRDY WAS THE DEVICE BUSY YET ? @V200820 01828000 BO RNRDUMP NO -- JUST TRY THE RE-LOAD @V200820 01829000 OI RDEVSTAT,RDEVNRDY SET THE DEVICE NOT READY @V200820 01830000 L R9,RDEVNICL START OF THE NICBLOK LIST @V200820 01831000 LH R7,RDEVMAX SETUP TO BXLE THROUGH IT @V200820 01832000 MH R7,=AL2(NICSIZE*8) . . . @V200820 01833000 ALR R7,R9 . . . @V200820 01834000 LA R6,NICSIZE*8 . . . @V200820 01835000 ICM R1,15,RDEVCKPT DO WE ALREADY HAVE A CKPBLOK ? @VM01034 01836000 BNZ RNFNICS YES - DON'T BUILD ANOTHER ONE @V200820 01837000 LH R2,RDEVMAX MAX RESOURCE I.D. AGAIN @V200820 01838000 LA R2,1(0,R2) BUMP ONE FOR RESOURCE COUNT @V200820 01839000 LA R3,7(0,R2) ROUND UP TO EIGHT-BIT BOUNDARY @V200820 01840000 SRL R3,3(0) . . . @V200820 01841000 LA R3,7(0,R3) ROUND UP TO EIGHT-BYTE BOUNDARY @V200820 01842000 SRL R3,3(0) . . . @V200820 01843000 LA R0,CKPBKSZ(0,R3) ADD LENGTH OF CKPBLOK HEADER@V200820 01844000 CALL DMKFREE ALLOCATE CKPBLOK @V200820 01845000 ST R1,RDEVCKPT CONNECT IT TO THE RDEVBLOK @V200820 01846000 USING CKPBLOK,R1 @V200820 01847000 STH R0,CKPSIZE SAVE BLOCK SIZE IN DBL-WDS @V200820 01848000 STH R2,CKPRMAX SAVE NUMBER OF RESOURCES @V200820 01849000 LA R2,CKPBITS POINT TO START OF BIT MAP @V200820 01850000 SLL R3,3(0) GR3 = LENGTH OF BIT MAP @V200820 01851000 SR R15,R15 ZERO LENGTH, ZERO PAD @V200820 01852000 MVCL R2,R14 CLEAR THE BIT MAP @V200820 01853000 MVC CKPNAME(8),RDEVNCP SAVE THE CONTROL PROGRAM NAM@V200820 01854000 LA R2,CKPBITS START OF BIT MAP AGAIN @V200820 01855000 DROP R1 @V200820 01856000 LA R3,1(0,0) SHIFT COUNT START @V200820 01857000 LR R4,R3 . . .AND INCREMENT @V200820 01858000 LA R5,8(0,0) . . .AND LIMIT @V200820 01859000 EJECT 01860000 RNFBITS EQU * SETUP TO REMEMBER STATUS @V200820 01861000 TM NICTYPE,NICLINE IS THIS A LINE ? @V200820 01862000 BZ RNLBITS NO -- CHECK ENABLED @V200820 01863000 TM NICSTAT,NICDISA IS THE LINE ACTIVE ? @V200820 01864000 BZ RNSBITS YES - SET THE BIT @V200820 01865000 B RNDBITS MOVE TO NEXT BIT + NICBLOK @V200820 01866000 RNLBITS EQU * @V200820 01867000 TM NICFLAG,NICENAB IS THE DEVICE ENABLED ? @V200820 01868000 BZ RNDBITS NO -- NEXT BIT + NICBLOK @V200820 01869000 RNSBITS EQU * SET A BIT IN THE MAP @V200820 01870000 L R1,F256 GET A SINGLE BIT @V200820 01871000 SRL R1,0(R3) SHIFT APPROPRIATELY @V200820 01872000 EX R1,SETCBIT OR IT INTO THE MAP @V200820 01873000 RNDBITS EQU * @V200820 01874000 BXLE R3,R4,RNNBITS BUMP THE SHIFT COUNT @V200820 01875000 LR R3,R4 RESTART AT ONE @V200820 01876000 LA R2,1(0,R2) NEXT BYTE IN THE BIT MAP @V200820 01877000 RNNBITS EQU * @V200820 01878000 BXLE R9,R6,RNFBITS CONTINUE @V200820 01879000 L R9,RDEVNICL RESET TO START OF NICBLOK LIST @V200820 01880000 RNFNICS EQU * START FORCED DISCONNECTS @V200820 01881000 CALL DMKQCNCL CLEAR ANY 'RDEVCON' STACK @V200820 01882000 L R5,ASYSVM SYSTEM VMBLOK WILL BE NEEDED @V200820 01883000 RNFNICB EQU * @V200820 01884000 L R1,NICQPNT CONTASK CHAIN @V200820 01885000 LTR R1,R1 ANYTHING THERE ? @V200820 01886000 BNP RNFNICC NO -- @V200820 01887000 ST R1,RDEVCON PUT IT ON THE RDEVBLOK @V200820 01888000 CALL DMKQCNCL GET RID OF THE CONTASK'S @V200820 01889000 SLR R1,R1 @V200820 01890000 ST R1,NICQPNT CLEAR NICBLOK CHAIN ANCHOR @V200820 01891000 RNFNICC EQU * @V200820 01892000 CL R5,NICUSER IS THERE AN ACTIVE USER ? @V200820 01893000 BE RNFNNIC NO -- @V200820 01894000 L R1,NICUSER SWITCH TO HIS VMBLOK @V407593 01895050 SWTCHVM OPT=STAY @V407508 01896050 CALL DMKQCNTO,AFFINITY FORCE DISCONNECT @V407593 01897050 CALL DMKQCNTO FORCED DISCONNECT @V200820 01898000 ST R5,NICUSER SET NICUSER = A(DMKSYSVM) @V200820 01899000 RNFNNIC EQU * @V200820 01900000 BXLE R9,R6,RNFNICB DO THEM ALL @V200820 01901000 LR R1,R5 BACK TO THE SYSTEM VMBLOK @V407593 01902050 BAL R7,SWITCH2 GO SWITCH IT @V407593 01903050 EJECT 01905000 RNRDUMP EQU * START RECOVERY PROCESS @V200820 01906000 NI RDEVSTAT,255-RDEVRSVD NO LONGER IN USE @VM08809 01907000 TM IOBSTAT,IOBCC3 WAS THAT A HARD-STOP ? @V200820 01908000 BO HARDSTP YES - OPERATOR MESSAGE @V200820 01909000 TM RDEVFLAG,RDEVAUTO AUTOMATIC DUMP/LOAD ? @V200820 01910000 BZ OPMSGAC NO -- GIVE ACTION MESSAGE @V200820 01911000 LA R2,463(0) DMKRNH463I RESTART IN PROGRESS @V200820 01912000 BAL R7,CALLERM SETUP AND TYPE ERROR MESSAGE @V200820 01913000 TM RDEVFLAG,RDEVLNCP+RDEVLCEP LOADED NOW ? @VM08809 01914000 BZ RNRLOAD NO -- JUST RE-LOAD IT @V200820 01915000 CALL DMKNLEMP,PARM=SYSTEM DUMP THE 370X @V407508 01916100 LTR R2,R2 WAS THE DUMP SUCCESSFUL ? @VM01005 01917000 BNZ RNIGNOR NO -- DON'T TRY TO RE-LOAD @VM01005 01918000 RNRLOAD EQU * RE-LOAD AFTER SUCCESSFUL DUMP @V200820 01919000 CALL DMKNLDR,PARM=SYSTEM RE-LOAD @V200820 01920000 TM RDEVFLAG,RDEVLCEP EMULATOR LINES DEFINED ? @VM08809 01921000 BZ RNIGNOR NO -- CLEAN UP & EXIT @VM08809 01922000 CALL DMKCPVAE AUTOMATIC RE-ENABLE OF LINES @VM08809 01923000 B RNIGNOR CLEAN UP AND EXIT @VM08838 01924000 SPACE 2 01925000 HARDSTP EQU * SEND OPERATOR PANIC MESSAGE @V200820 01926000 LA R2,464(0) DMKRNH464I MUST HIT 370X "LOAD" @V200820 01927000 BAL R7,CALLERM FORMAT AND TYPE MESSAGE @V200820 01928000 B RNIGNOR WAIT FOR SOMETHING TO HAPPEN @V200820 01929000 SPACE 2 01930000 OPMSGAC EQU * SEND OPERATOR ACTION MESSAGE @V200820 01931000 LA R2,462(0) DMKRNH462I IPL REQUIRED @V200820 01932000 BAL R7,CALLERM SETUP AND TYPE ERROR MESSAGE @V200820 01933000 B RNIGNOR FRET THE IOBLOK, EXIT @V200820 01934000 EJECT 01935000 RNTRACE EQU * TRACE FILTER FOR 370X ACTIVITY @VM01040 01936000 AIF (NOT &TRACE(9)).RNOTRAC **AIF** 01937000 TM TRACFLG2,TRAC11 TRACING ACTIVE FOR BTU'S ? @VA01914 01938000 BZ RNOTRAC NO -- CHECK NETWORK TRACE @VA01914 01939000 TRACE CODE=TRCNCP,R15,R1,R2 GET CURRENT TRACE ENTRY @V407508 01940100 MVI 1(R15),X'00' CLEAR THE SECOND BYTE @VA01914 01942000 MVC 2(14,R15),CONSRID MOVE IN THE ENTIRE BTU @VA01914 01943000 RNOTRAC EQU * TEST FOR NETWORK TRACE @VA01914 01949000 .RNOTRAC ANOP **ANOP** 01950000 TM RDEVFLAG,RDEVTBTU BTU TRACING ACTIVE ? @VM01040 01951000 BO RNTRAC1 YES - SAVE THE BTU @VM01040 01952000 TM NICSTAT,NICLTRC RESOURCE TRACING ACTIVE ? @VM01040 01953000 BZR R14 NO -- JUST RETURN @VM01040 01954000 RNTRAC1 EQU * COPY THE BTU FOR LATER TRACING @VM01040 01955000 STM R0,R15,BALRSAVE SAVE THE CURRENT REGISTERS @VM01040 01956000 LH R2,CONDCNT DATA COUNT ON THE RESPONSE @VM01040 01957000 CLI CONTCMD,X'77' UNSOLICITED BTU RESPONSE ? @VM01040 01958000 BE RNTRAC2 YES - PASS ALL THE DATA @VM01040 01959000 TM CONSYSR,X'07' LINE TRACE RESPONSE ? @VM01040 01960000 BO RNTRAC2 YES - PASS ALL THE DATA @VM01040 01961000 LA R2,4(0,0) PASS A MAXIMUM OF FOUR BYTES @VM01040 01962000 RNTRAC2 EQU * BUILD SMALL BTU BUFFER @VM01040 01963000 LA R0,6+7+CONDATA-CONSRID(,R2) PTR+SIZE+BTU+DATA @VM01040 01964000 SRL R0,3(0) CONVERT TO DOUBLE-WORDS @VM01040 01965000 CALL DMKFREE GET SOME FREE STORAGE @VM01040 01966000 LR R3,R1 SAVE THE BUFFER ADDRESS @VM01040 01967000 STH R0,4(0,R3) SAVE THE BUFFER SIZE FOR LATER @VM01040 01968000 XC 0(4,R3),0(R3) CLEAR THE POINTER WORD @VM01040 01969000 LA R2,CONDATA-CONSRID-1(0,R2) SIZE OF MOVE @VM01040 01970000 LA R1,4(0,R3) POINT TO 'MINI-CONTASK' START @VM01040 01971000 EX R2,MVCNTRL MOVE THE BTU AND DATA @VM01040 01972000 LA R2,TRACENQ POINT TO QUEUE OF TRACE REQUESTS @VM01040 01973000 RNTRAC3 EQU * QUEUE FOR LATER TRACING @VM01040 01974000 ICM R1,15,0(R2) NEXT ONE ON THE CHAIN @VM01040 01975000 BZ RNTRAC4 FOUND THE END @VM01040 01976000 LR R2,R1 CONTINUE SEARCH @VM01040 01977000 B RNTRAC3 . . . @VM01040 01978000 RNTRAC4 EQU * @VM01040 01979000 ST R3,0(0,R2) ENQUEUE FOR TRACING LATER ON @VM01040 01980000 CL R3,TRACENQ WAS THE QUEUE EMPTY ? @VM01040 01981000 BNE RNTRAC5 NO -- TRACER IS ALREADY ACTIVE @VM01040 01982000 LA R4,TRACERS TRACER SUBROUTINE ENTRY @VM01040 01983000 BAL R7,STKCPEX BUILD + STACK A CPEXBLOK @VM01040 01984000 RNTRAC5 EQU * RESTORE REGS AND CONTINUE @VM01040 01985000 LM R0,R15,BALRSAVE . . . @VM01040 01986000 CLI CONTCMD,X'77' UNSOLICITED BTU RESPONSE ? @VM01040 01987000 BER R14 YES - CONTINUE NORMALLY @VM01040 01988000 TM CONSYSR,X'07' LINE TRACE RESPONSE ? @VM01040 01989000 BO BTUFRET YES - PROCESSING COMPLETE @VM01040 01990000 BR R14 RETURN @VM01040 01991000 SPACE 2 01992000 CALLIOER EQU * INDEPENDENT ERROR RECORDING CALL @V200820 01993000 * POINTER TO "MINI-CONTASK" IS GR6 @V200820 01994000 LR R1,R6 PASS MDR RECORD TO DMKIOERN @V200820 01995000 CALL DMKIOERN RECORD THE DATA FROM THE NCP @V200820 01996000 GOTO DMKDSPCH EXIT TO THE DISPATCHER @V200820 01997000 EJECT 01998000 TRACERS EQU * INDEPENDENT TRACING SUBROUTINE @V200820 01999000 USING CONCCW2+4,R6 ADDRESSABILITY FOR BTU BUFFER @VM01040 02000000 ICM R6,15,TRACENQ PICK UP NEXT BUFFER ADDRESS @VM01040 02001000 BZ TRACEXT ALL DONE - EXIT TO DMKDSPCH @VM01040 02002000 MVC TRACENQ(4),0(R6) DEQUEUE THE FIRST BUFFER @VM01040 02003000 CLC DMKRNHTR(8),BLANKS IS TRACING STILL ACTIVE ? @V200820 02004000 BE TRACFIN NO -- CLEAN UP AND EXIT @V200820 02005000 LA R1,DMKRNHTR POINT TO THE RECEVIER'S USERID @V200820 02006000 LA R0,8 . . . LENGTH @V200820 02007000 CALL DMKSCNAU MAKE SURE HE'S STILL AROUND @V200820 02008000 BNZ TRACFIN NOPE - FORCED TRACE END @V200820 02009000 BAL R7,SWITCHVM @V407508 02010050 LA R0,TRBUFSZ SIZE OF MY OUTPUT BUFFER @V200820 02013000 CALL DMKFREE . . . @V200820 02014000 LR R7,R1 ADDRESS THE BUFFER BY GR7 @V200820 02015000 MVC 0(8,R7),BLANKS @V200820 02016000 MVC 8((TRBUFSZ-1)*8,R7),0(R7) CLEAR THE BUFFER @V200820 02017000 LR R2,R7 POINT TO LOCATION FOR TIME-STAMP @V200820 02018000 SLR R1,R1 WE DON'T WANT THE DATE @V200820 02019000 CALL DMKCVTDT TIME-STAMP THIS OUTPUT LINE @V200820 02020000 MVC 9(4,R7),=C'READ' ASSUME IT'S A RESPONSE @VM01040 02021000 CLI CONSYSR,X'00' IS THIS AN OUTPUT TRACE ? @VM01040 02022000 BNE *+10 NO -- ALL SET @VM01040 02023000 MVC 9(4,R7),=C'SENT' THIS WAS SENT TO THE NCP @VM01040 02024000 MVI 13(R7),C'=' MINOR FRILL CHARACTER @V200820 02025000 LA R4,15(0,R7) LOCATION FOR FIRST HALFWORD @V200820 02026000 LA R3,7(0,0) NUMBER OF HALFWORDS IN BTU HDR @V200820 02027000 LA R2,CONSRID FIRST HEADER HALFWORD @V200820 02028000 EJECT 02029000 TRACEHD EQU * FORMAT BTU HEADER FOR OUTPUT@V200820 02030000 SLR R1,R1 @V200820 02031000 ICM R1,2+1,0(R2) LOAD TWO BYTES OF DATA @V200820 02032000 CALL DMKCVTBH CONVERT @V200820 02033000 STCM R1,15,0(R4) MOVE INTO THE OUTPUT BUFFER @V200820 02034000 LA R2,2(0,R2) NEXT DATA HALFWORD @V200820 02035000 LA R4,5(0,R4) NEXT OUTPUT SLOT @V200820 02036000 BCT R3,TRACEHD FORMAT THE ENTIRE HEADER @VA04487 02036100 LH R2,CONDCNT DATA COUNT FROM THE BTU @V200820 02037000 LTR R2,R2 IS THERE ANY ? @VA04487 02037100 BNP TRACECK NO -- LEAVE DATA FIELD BLANK @VM01040 02038000 TM CONSRID+1,INHIBIT PROTECTED READ DATA ? @VA04487 02038100 BO TRACEIT YES - DO NOT TRACE THE DATA @V240820 02039000 L R1,CONDATA FIRST WORD OF BTU DATA @VA04487 02039100 CALL DMKCVTBH CONVERT @V200820 02040000 STCM R0,15,51(R7) FIXED PLACE IN THE BUFFER @VA04487 02040100 STCM R1,15,55(R7) . . . @V200820 02041000 S R2,F4 FORMATTED THIS MUCH SO FAR @VA04487 02041100 BNP TRACEIT NO MORE TO DO - PRINT THE LINE @V200820 02042000 TM CONSYSR,X'07' LINE TRACE RESPONSE BTU ? @VA04487 02042100 BNO TRACEIT NO -- ONLY FOUR BYTES AVAILABLE @V200820 02043000 SRL R2,2(0) CONVERT DATA COUNT TO WORD COUNT @VA04487 02043100 CH R2,TRACMAX MORE THAN ONE LINE WORTH ? @V200820 02044000 BNH *+8 NO -- FORMAT ALL OF IT @VA04487 02044100 LH R2,TRACMAX YES - FORMAT ONLY EIGHT WORDS @V200820 02045000 LA R4,61(0,R7) START FOR SECOND DATA WORD @VA04487 02045100 LA R3,CONDATA+4 . . . @V200820 02046000 TRACELN EQU * FORMAT LINE TRACE RESPONSE DATA @V200820 02047000 L R1,0(0,R3) NEXT DATA WORD @V200820 02048000 CALL DMKCVTBH CONVERT @V200820 02049000 STCM R0,15,0(R4) . . . @V200820 02050000 STCM R1,15,4(R4) . . . @V200820 02051000 LA R3,4(0,R3) NEXT DATA WORD @V200820 02052000 LA R4,10(0,R4) NEXT OUTPUT SLOT @V200820 02053000 BCT R2,TRACELN CONTINUE . . . @V200820 02054000 B TRACEIT GO PRINT THE OUTPUT LINE @VM01040 02055000 EJECT 02056000 TRACECK EQU * NO DATA RETURNED WITH THE BTU @VM01040 02057000 TM CONSYSR,X'47' LINE TRACE RESPONSE ? @VM01040 02058000 BO TRACEFT YES - DON'T TRACE EMPTY ONES @VM01040 02059000 TRACEIT EQU * PRINT TRACE DATA FOR CLASS F USER@V200820 02060000 SR R0,R0 @V200820 02061000 LH R2,TRCLNCT LINE COUNT FOR PAGE-EJECT @V200820 02062000 LA R2,1(0,R2) . . . @V200820 02063000 STH R2,TRCLNCT SAVE COUNT FOR NEXT TIME THROUGH @V200820 02064000 C R2,F60 DO WE SKIP A PAGE ? @V200820 02065000 BNH TRACEWR NO -- @V200820 02066000 STH R0,TRCLNCT RESET LINE COUNT TO ZERO @V200820 02067000 CALL DMKVSPRT GR0 = 0 MEANS PAGE EJECT @V200820 02068000 TRACEWR EQU * @V200820 02069000 LR R1,R7 BUFFER ADDRESS TO GR1 @V200820 02070000 LA R0,TRACLLN LINE LENGTH FOR PRINT @V200820 02071000 CALL DMKVSPRT PRINT THE TRACE OUTPUT @V200820 02072000 TRACEFT EQU * @VM01040 02073000 LR R1,R7 BUFFER AGAIN @V200820 02074000 LA R0,TRBUFSZ SIZE FOR DMKFRET @V200820 02075000 CALL DMKFRET RETURN BUFFER TO FREE STORAGE @V200820 02076000 NI CONSYSR,255-PHASE3 TURN OFF PHASE BITS @V200820 02077000 CLI CONSYSR,X'87' LINE TRACE TERMINATED ? @V200820 02078000 BNE TRACEPR NO -- O.K. AS IS @V200820 02079000 NI NICSTAT,255-NICLTRC TURN OFF LINE TRACE FLAG @V200820 02080000 MSG 'DMKRNH465I LINE TRACE TERMINATED DUE TO ERROR' @V200820 02081000 CALL DMKQCNWT,PARM=NORET+ERRMSG TELL THE USER @V200820 02082000 B TRACFIN DISABLE TRACING @V200820 02083000 EJECT 02084000 TRACEPR EQU * @V200820 02085000 CL R2,F8 FATAL ERROR FROM DMKVSPRT ? @V200820 02086000 BNE TRACEFR NO -- FRET MINI-CONTASK + EXIT @V200820 02087000 TRACFIN EQU * TRACE HAS BEEN TERMINATED @V200820 02088000 SWITCH SWITCH CONTROL TO I/O PROCESSOR @V407593 02088500 NI RDEVFLAG,255-RDEVTBTU TURN OFF BTU TRACE @V200820 02089000 MVC DMKRNHTR(8),BLANKS CLEAR OUT USERID @V200820 02090000 MVC TRACEAD(4),ZEROES CLEAR OUT ADDRESS FIELDS @VM01040 02091000 L R0,F60 RESET LINE COUNT FOR NEXT TIME @V200820 02092000 STH R0,TRCLNCT . . .(PAGE EJECT FIRST TIME) @V200820 02093000 TM NICSTAT,NICLTRC LINE TRACE ACTIVE ? @V200820 02094000 BZ TRACEFR NO -- JUST FRET MIN-CONTASK @V200820 02095000 NI NICSTAT,255-NICLTRC TURN OFF TRACING FLAG @V200820 02096000 TM NICTYPE,NICLINE IS THIS A LINE RESOURCE ? @VM01040 02097000 BZ TRACEFR NO -- NO NEED TO RESET IT @VM01040 02098000 LH R1,NICNAME RESOURCE I.D. @V200820 02099000 LA R0,CTRMLTR TERMINATE LINE TRACE @V200820 02100000 CALL DMKRNHND,PARM=NORET TURN OFF NCP TRACE @V200820 02101000 TRACEFR EQU * @V200820 02102000 LH R0,CONCCW3 SIZE OF "MINI-CONTASK" @V200820 02103000 LR R1,R6 . . . @V200820 02104000 CALL DMKFRET RETURN BUFFER TO FREE STORAGE @V200820 02105000 B TRACERS LOOP BACK FOR ANOTHER BUFFER @VM01040 02106000 SPACE 02107000 TRACEXT EQU * RETURN TO THE DISPATCHER @VM01040 02108000 GOTO DMKDSPCH EXIT TO THE DISPATCHER @V200820 02109000 SPACE 2 02110000 TRBUFSZ EQU 17 BUFFER = 136 BYTES TOTAL @V200820 02111000 TRACLLN EQU 132 OUTPUT LENGTH = 132 BYTES @V200820 02112000 SPACE 02113000 TRACMAX DC H'7' MAX = 32 BYTES LINE TRACE OUTPUT @V200820 02114000 TRCLNCT DC H'60' LINE COUNT ACCUMULATION @V200820 02115000 TRACENQ DC F'0' QUEUE OF TRACE BUFFERS @VM01040 02116000 DS 0D @V200820 02117000 DMKRNHTR DC CL8' ' USERID RECEIVING TRACE OUTPUT @V200820 02118000 TRACEAD DC H'0' ADDRESS OF 370X BEING TRACED @VM01040 02119000 TRACRID DC H'0' RESOURCE I.D. BEING TRACED @VM01040 02120000 USING CONTASK,R6 RESET NORMAL ADDRESSABILITY @V200820 02121000 EJECT 02122000 PASSBTU EQU * MOVE BTU RESPONSE TO FREE STORAGE@V200820 02123000 LH R2,CONDCNT NUMBER OF BYTES OF DATA @V200820 02124000 PASTBTU EQU * MOVE BTU WITH FIXED DATA LENGTH @V200820 02125000 LA R0,CONDATA-CONCCW3+7(,R2) ALLOW FOR BTU, ALSO @V200820 02126000 SRL R0,3(0) SHIFT FOR DOUBLE-WORD COUNT @V200820 02127000 CALL DMKFREE GET A SMALL BUFFER FOR CALLER @V200820 02128000 STH R0,0(0,R1) INCLUDE THE BUFFER SIZE FOR FRET @V200820 02129000 LA R2,CONDATA-CONSRID-1(,R2) LENGTH FOR MOVE @V200820 02130000 EX R2,MVCNTRL MOVE BTU AND DATA TO SMALL BUFFER@V200820 02131000 BR R7 RETURN @V200820 02132000 SPACE 2 02133000 CALLERM EQU * SETUP FOR OPERATOR MESSAGE @V200820 02134000 LH R1,IOBRADD REAL ADDRESS FROM IOBLOK @V200820 02135000 CALL DMKCVTBH GET EBCDIC DATA IN GR1 @V200820 02136000 ICM R1,8,BLANKS . . .PLUS A HIGH-ORDER BLANK @V200820 02137000 L R0,MSGHEAD MODULE I.D., LENGTH = ZERO @V200820 02138000 O R2,=X'B8C90000' OPERATOR, ALARM, RETURN @V200820 02139000 CALL DMKERMSG,AFFINITY SEND MSG. WITH THE HEADER @V407593 02140100 BR R7 RETURN @V200820 02141000 EJECT 02142000 LINEBRK EQU * LINE CONNECTION FAILURE @V200820 02143000 TM CONSTAT,CONRESP IS THERE A SAVE-AREA ? @V200820 02144000 BZ LINERTN NO -- RETURN TASK TO DMKQCN @V200820 02145000 L R1,CONRETN PICK UP SAVE-AREA ADDRESS @V200820 02146000 LA R2,12(0) LINE BREAK RETURN CODE @V200820 02147000 ST R2,SAVER2-SAVEAREA(0,R1) SET IN CALLER'S GR2 @V200820 02148000 LINERTN EQU * RETURN FINISHED CONTASK TO DMKQCN@V200820 02149000 SLR R1,R1 CLEAR CONTASK FORWARD POINTER @V200820 02150000 ST R1,CONPNT ...TO AVOID TROUBLE WITH DMKQCN @V200820 02151000 CALL DMKQCNET RETURN TASK FOR PROCESSING @V200820 02152000 BR R7 RETURN @V200820 02153000 SPACE 1 02154000 FRETIOER EQU * FRET AN IOERBLOK FROM AN IOBLOK @V200820 02155000 L R1,IOBIOER PICK UP IOERBLOK @V200820 02156000 LTR R1,R1 MAKE SURE THERE IS ONE @V200820 02157000 BCR 8,R7 NOPE - JUST RETURN @V200820 02158000 LA R0,IOERSIZE @V200820 02159000 AH R0,IOEREXT-IOERBLOK(,R1) EXTENSION, IF ANY @V200820 02160000 CALL DMKFRET RETURN THE BLOCK TO FREE STORAGE @V200820 02161000 SLR R1,R1 @V200820 02162000 ST R1,IOBIOER CLEAR OUT THE IOBLOK FIELD @V200820 02163000 BR R7 ...AND RETURN @V200820 02164000 SPACE 02165000 FRETIOB EQU * FRET AN IOBLOK @V200820 02166000 LTR R10,R10 DO WE HAVE AN IOBLOK NOW ? @V200820 02167000 BCR 8,R7 NO -- JUST RETURN @V200820 02168000 ST R7,TEMPSAVE SAVE THIS FOR A MOMENT @V200820 02169000 BAL R7,FRETIOER RELEASE IOERBLOK, IF ANY @V200820 02170000 L R7,TEMPSAVE ... @V200820 02171000 LR R1,R10 @V200820 02172000 LA R0,IOBSIZE @V200820 02173000 CALL DMKFRET RETURN IOBLOK TO FREE STORAGE @V200820 02174000 SLR R10,R10 CLEAR FOR LATER TESTS @VM08513 02175000 BR R7 RETURN @V200820 02176000 EJECT 02177000 TASKENQ EQU * QUEUE CONTASK FOR LATER EXECUTION@V200820 02178000 LA R1,NICQPNT-(CONPNT-CONTASK) INITIAL BACK PTR @V200820 02179000 TASKCHN EQU * FIND WHERE TO PUT THIS CONTASK @V200820 02180000 LR R2,R1 SAVE A BACK POINTER @V200820 02181000 L R1,CONPNT-CONTASK(,R2) NEXT CONTASK, IF ANY @V200820 02182000 LTR R1,R1 HIT THE END OF THE CHAIN ? @V200820 02183000 BNP TASKINS YES - INSERT HERE @V200820 02184000 TM CONSTAT-CONTASK(R1),CONRTRY FIXED TASK ? @V200820 02185000 BNZ TASKCHN YES - CANNOT INSERT HER@V200820 02186000 TM CONSTAT,CONRTRY NEW TASK = RETRY ? @V200820 02187000 BO TASKINS YES - PUT IT HERE @V200820 02188000 TM CONSTAT-CONTASK(R1),CONSPLT SPLIT TASK ? @V200820 02189000 BO TASKCHN YES - CANNOT INSERT HER@V200820 02190000 TM CONPARM-CONTASK(R1),PRIORITY+INHIBIT FIXED ? @V200820 02191000 BNZ TASKCHN YES -- @V240820 02192000 TM CONPARM,PRIORITY NEW TASK = PRIORITY ? @V200820 02193000 BZ TASKCHN NO -- CONTINUE SEARCH @V200820 02194000 CL R1,NICQPNT AT THE BEGINNING NOW ? @V200820 02195000 BE TASKCHN YES - DO NOT PREEMPT FIRST TASK @V200820 02196000 TASKINS EQU * INSERT NEW TASK IN CHAIN @V200820 02197000 ST R6,CONPNT-CONTASK(,R2) PATCH INTO THE CHAIN @V200820 02198000 ST R1,CONPNT . . . @V200820 02199000 BR R7 RETURN @V200820 02200000 SPACE 2 02201000 TESTENV EQU * SET GR4 FOR ATTENTION HANDLING @V200820 02202000 LA R4,4(0,0) ASSUME SINGLE-ATTENTION CODE @V200820 02203000 L R1,NICUSER VMBLOK OF INTERFACE OWNER @V200820 02204000 TM VMMLEVEL-VMBLOK(R1),VMMCPENV CP MODE ? @V200820 02205000 BCR 8,R14 NO -- ALL SET AS IS @V200820 02206000 LA R4,8(0,0) MULTIPLE ATTENTION CODE @V200820 02207000 BR R14 ...RETURN @V200820 02208000 SPACE 2 02209000 RETTASK EQU * CHAIN TASK FOR RETURN TO DMKQCN @V200820 02210000 L R1,IOBMISC2 LAST TASK ON RETURN CHAIN NOW @V200820 02211000 ST R6,CONPNT-CONTASK(,R1) ADD THIS ONE TO CHAIN @V200820 02212000 ST R6,IOBMISC2 THIS IS NOW THE LAST ONE @V200820 02213000 SLR R1,R1 @V200820 02214000 ST R1,CONPNT CLEAR THE FORWARD POINTER @V200820 02215000 BR R14 RETURN @V200820 02216000 EJECT 02217000 * EQUATES USED FOR RESPONSE CHECKING FROM THE NCP: 02218000 * 02219000 ERROR EQU B'10000000' ERROR RESPONSE INDICATION @V200820 02220000 PHASE3 EQU B'01100000' PHASE 3 (FINAL) RESPONSE @V200820 02221000 MTA2741 EQU X'00' MTA RESPONSE FOR 2741 @V200820 02222000 MTATELE EQU X'22' MTA RESPONSE FOR CPT-TWX @VM08772 02223000 MTA2740T EQU X'06' MTA RESPONSE FOR 2740 XMIT CTL @VM08772 02224000 MTA1050 EQU X'1C' MTA RESPONSE FOR 1050 @VM08772 02225000 MTA2740B EQU X'02' MTA RESPONSE FOR 2740 BASIC @VM08772 02226000 SPACE 02227000 MVCNTRL MVC 2(*-*,R1),CONSRID EXECUTED FOR CONTROL DATA @V200820 02228000 MVCR1R3 MVC 0(*-*,R1),0(R3) EXECUTED MOVE CHARACTERS @V200820 02229000 SETCBIT OI 0(R2),*-* EXECUTED FOR BUILDING CKPBLOK @V200820 02230000 TESTBIT TM 0(R10),*-* EXECUTED FOR READING CKPBLOK @V200820 02231000 DS 0F @V200820 02232000 MSGHEAD DC C'RNH',X'00' GR0 HEADER INFO FOR DMKERMSG @V200820 02233000 SPACE 02234000 NOPCCW DC X'0300000020000001' UTILITY NO-OP CCW @V200820 02235000 SPACE 02236000 TTYMASK DC C'HHHHHHHH',X'0D' @V200820 02237000 DC C'SSSSSSSS',X'0D' @V200820 02238000 DC C'********',X'0D' @V200820 02239000 TTYMASL EQU *-TTYMASK LENGTH OF MASKING STRING @V200820 02240000 SPACE 02241000 IBMMASK DC X'14',C'HHHHHHHH',8X'16' @VM08679 02242000 DC C'SSSSSSSS',4X'1616' @V200820 02243000 DC C'********',4X'1616' @V200820 02244000 IBMMASL EQU *-IBMMASK LENGTH OF MASKING STRING @V200820 02245000 SPACE 02246000 ONLINET DC X'0D25E5D461F3F7F040D6D5D3C9D5C5400D2517' @VM08772 02247000 ONLINEM DC X'1517A59461F3F7F04096959389958540151717' @V200820 02248000 ONLINEL EQU *-ONLINEM MESSAGE LENGTH @V200820 02249000 SPACE 02250000 DATCHKT DC X'0D2517D9C5C1C440C5D9D9D6D90D2517' @VM08772 02251000 DATCHKM DC X'15171799858184408599999699151717' @VM08772 02252000 DATCHKL EQU *-DATCHKM LENGTH OF READ ERROR MESSAGE @VM08772 02253000 EJECT 02254000 LTORG @V200820 02255000 COPY NETWORK @V200820 02257000 COPY IOBLOKS @V200820 02259000 COPY IOER @V200820 02261000 COPY RBLOKS @V200820 02263000 COPY VMBLOK @V200820 02265000 COPY SAVE @V200820 02267000 COPY BTUCMD @V200820 02269000 COPY EQU @V200820 02271000 COPY DEVTYPES @V200820 02273000 PSA @V200820 02275000 SPACE 2 02276000 END DMKRNH @V200820 02277000