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