ibm:vm370-lib:cp:dmkcfp.assemble_src
Table of Contents
DMKCFP Source
References
- Fixes Applied : 14
- This Source Date : Thursday, December 7, 1978
- Last Fix ID : [HRC065DK]
Source Listing
- DMKCFP.ASSEMBLE.txt
- CFP TITLE 'DMKCFP (CP) VM/370 - RELEASE 6' 00001000
- ISEQ 73,80 VALIDATE SEQUENCING OF INPUT 00002000
- *. 00003000
- * MODULE NAME - 00004000
- * 00005000
- * DMKCFP 00006000
- * 00007000
- * FUNCTION - 00008000
- * 00009000
- * TO SIMULATE THE REAL MACHINES PUSH BUTTONS. 00010000
- * 00011000
- * ATTRIBUTES - 00012000
- * 00013000
- * REENTRANT, PAGEABLE, CALLED VIA SVC 00014000
- * 00015000
- * ENTRY POINTS - 00016000
- * 00017000
- * DMKCFPRR - ENTRY TO HANDLE SYSTEM RESETS FROM OTHER 00018000
- * CP ROUTINES. 00019000
- * DMKCFPRD - ENTRY TO RESET DEVICES FOR OTHER CP ROUTINES. 00020000
- * 00021000
- * ENTRY CONDITIONS - 00022000
- * 00023000
- * GPR9 - ADDRESS OF COMMAND LINE BUFFER 00024000
- * GPR11 - ADDRESS OF VMBLOK 00025000
- * GPR12 - ADDRESS OF ENTRY POINT 00026000
- * GPR13 - ADDRESS OF SAVEAREA 00027000
- * 00028000
- * EXIT CONDITIONS - 00029000
- * 00030000
- * NORMAL - 00031000
- * GPR2 = 0 00032000
- * 00033000
- * ERROR - 00034000
- * GPR2 = ERROR MESSAGE CODE NUMBER 00035000
- * 00036000
- * CALLS TO OTHER ROUTINES - 00037000
- * 00038000
- * DMKSCNFD - TO LOCATE NEXT ARGUMENT IN THE COMMAND LINE 00039000
- * DMKCVTHB - CONVERT HEXADECIMAL ADDRESSES TO BINARY 00040000
- * DMKSCNVU - TO LOCATE ADDRESSES OF THE VIRTUAL DEVICE BLOKS 00041000
- * DMKVDREL - TO RELEASE A VIRTUAL DEVICE 00042000
- * DMKQCNSY - TO SYNCHRONIZE TERMINAL OUTPUT 00043000
- * DMKQCNWT - TO OUTPUT MESSAGES TO THE TERMINAL 00044000
- * DMKVATBC - TO RELEASE SHADOW TABLES FOR V370R 00045000
- * DMKVATMD - TO ENTER VIRTUAL MACHINE IN TRANSLATE MODE 00046000
- * DMKFREE - TO OBTAIN STORAGE FROM FREE STORAGE 00047000
- * DMKFRET - TO RETURN STORAGE TO FREE STORAGE 00048000
- * DMKVSPCR - TO CLOSE VIRTUAL CARD READER 00049000
- * DMKVSPCO - TO CLOSE VIRTUAL PRINTER OR PUNCH 00050000
- * DMKPTRUL - TO UNLOCK A PAGE IN VIRTUAL MACHINE 00051000
- * DMKPGSPO - TO CLEAR VIRTUAL STORAGE TO BINARY ZEROS 00052000
- * DMKERMSG - TO SEND ERROR MESSAGES TO THE TERMINAL. 00053000
- * DMKCFPRR - TO HANDLE SYSTEM RESET FUNCTION 00054000
- * DMKPTRAN - TO BRING A PAGE IN CORE 00055000
- * DMKCVTBH - CONVERT BINARY DATA TO HEXADECMAL 00056000
- * DMKCFPRD - TO RESET A VIRTUAL DEVICE 00057000
- * DMKSCHRT - TO RESET OUTSTANDING TIMER REQUEST 00058000
- * DMKPERT - TO RESET TRACING FUNCTION 00059000
- * DMKSTKCP - TO STACK CPEXBLOK FOR VIRTUAL CTCA RESET 00060000
- * DMKPTRPW - TO WAIT FOR PAGING COMPLETION BEFORE SYSTEM RESET 00061100
- * DMKDIBDR - TO DROP A DIALED LINE 00062000
- * DMKVCARD - TO RESET A NOT-BUSY VIRTUAL CTCA 00063000
- * DMKSTKIO - TO STACK AN I/O BLOCK FOR PROCESSING 00064000
- * DMKUNTFR - TO RELEASE A CCW PACKAGE 00065000
- * DMKRPAGT - TO READ A PAGE IN CORE 00066000
- * DMKSCNVS - TO SEARCH FOR A VOLUME 00067000
- * DMKCVTDB - CONVERT DECIMAL TO BINARY 00068000
- * DMKIOSQR - TO EXECUTE REAL INPUT/OUTPUT REQUESTS 00069000
- * DMKIOSHA - HALT AN ACTIVE REAL DEVICE 00070000
- * DMKTRCPB - PUT BACK INST. ALTERED BY TRACE 00071000
- * DMKVIOIN - PRESENT DE STATUS WHEN RES MDISK IS RELEASED 00072000
- * DMKVMCUA - RESET VIRTUAL MACHINE COMMUNICATIONS 00073000
- * HDKD7CTM - TERMINATE ACTIVE LOGICAL DEVICES HRC065DK 00073100
- * 00074000
- * EXTERNAL REFERENCES - 00075000
- * 00076000
- * DMKSYSVM - LOCATION OF THE SYSTEM VMBLOK 00077000
- * DMKIOSRW - INTRPT RETURN FOR DASD RELEASE IOBLOK 00078000
- * 00079000
- * TABLES/WORKAREAS - 00080000
- * 00081000
- * RDEVBLOK, IOBLOK, VMBLOK, VDEVBLOK, VCUBLOK, VCHBLOK 00082000
- * 00083000
- * REGISTER USAGE - 00084000
- * 00085000
- * GPR0 - ARGUMENT LENGTH (PASSED BACK FROM DMKSCNFD) 00086000
- * GPR1 - ARGUMENT ADDRESS (PASSED BACK FROM DMKSCNFD) 00087000
- * GPR2 -PASS PARAMETERS TO CALLED ROUTINES 00088000
- * GPR3 - WORK REG 00089000
- * GPR4 - WORK REG 00090000
- * GPR5 - WORK REG 00091000
- * GPR6 - VCHBLOK ADDRESS 00092000
- * GPR7 - VCUBLOK ADDRESS 00093000
- * GPR8 - VDEVBLOK ADDRESS 00094000
- * GPR9 - RDEVBLOK ADDRESS 00095000
- * GPR10 - IOBLOK ADDRESS 00096000
- * GPR11 - VMBLOK ADDRESS 00097000
- * GPR12 - BASE REG 00098000
- * GPR13 - SAVEAREA ADDRESS 00099000
- * GPR14 - LINKAGE REG 00100000
- * GPR15 - LINKAGE REG 00101000
- * 00102000
- * OPERATION - 00103000
- * 00104000
- * THE VARIOUS SUBROUTINES IN THIS MODULE ARE CALLED BY DMKCFM. 00105000
- * THE FORMAT AND DESCRIPTION OF EACH COMMAND IS LISTED 00106000
- * 00107000
- *. 00108000
- EJECT 00109000
- COPY OPTIONS 00110000
- COPY LOCAL 00111000
- SPACE 2 00112000
- DMKCFP START 00113000
- SPACE 00114000
- MODID DC CL8'DMKCFP' 00115000
- SPACE 00116000
- USING PSA,R0 00117000
- USING VMBLOK,R11 00118000
- USING SAVEAREA,R13 00119000
- SPACE 00120000
- EXTRN DMKERMSG 00121000
- EXTRN DMKCVTDB 00122000
- EXTRN DMKCVTBH 00123000
- EXTRN DMKVMI 00124000
- EXTRN DMKRPAGT 00125000
- EXTRN DMKCVTHB 00126000
- EXTRN DMKVIOMK 00127000
- EXTRN DMKPGSPO 00128000
- EXTRN DMKPTRUL 00129000
- EXTRN DMKUNTFR 00130000
- EXTRN DMKVDREL,DMKQCNSY @V200820 00131000
- EXTRN DMKSCNFD 00132000
- EXTRN DMKSCNVD,DMKTRCPB @V200820 00133000
- EXTRN DMKVSPCO 00134000
- EXTRN DMKVSPCR 00135000
- EXTRN DMKSNTBL,DMKSCNVS @V304235 00136000
- EXTRN DMKSCNVU 00137000
- EXTRN DMKPERT 00138000
- EXTRN DMKSTKIO,DMKSTKCP 00139000
- EXTRN DMKVATBC 00140000
- EXTRN DMKVATMD 00141000
- EXTRN DMKSCHRT 00142000
- EXTRN DMKDIBDR @VA13704 00143000
- EXTRN DMKIOSRW @VA04026 00144000
- EXTRN DMKIOSHA 00145000
- EXTRN DMKVIOIN @V407438 00146000
- EXTRN DMKSSUCF @VA11455 00146110
- AIF (NOT &ISAM).NOUNTS **AIF** 00147000
- EXTRN DMKUNTIS INTERRUPT RETURN FOR ISAM I/O @VA02130 00148000
- .NOUNTS ANOP 00149000
- EXTRN DMKVCARD 00150000
- EXTRN DMKBLDRT,DMKBLDRL,DMKPGSPP @V304635 00151000
- EXTRN DMKIOSQR 00152000
- EXTRN DMKLOCKQ,DMKLOCKD @VM08908 00153000
- EXTRN DMKPTRPW @VA08037 00154100
- EXTRN DMKVMCUA @V387045 00155000
- EXTRN HDKD7CTM HRC065DK 00155100
- EJECT 00156000
- *. 00157000
- * 00158000
- * SUBROUTINE NAME - 00159000
- * DMKCFPRR 00160000
- * 00161000
- * FUNCTION - 00162000
- * TO HANDLE SYSTEM RESETS FROM OTHER CP ROUTINES 00163000
- * 00164000
- * OPERATION - 00165000
- * IF THE USER IS IN PAGE WAIT WHEN DMKCFPRR IS ENTERED, 00166000
- * A CALL IS MADE TO DMKPGSPW TO STACK A CPEXBLOK 00167000
- * AND EXIT TO THE DISPATCHER. WHEN THE PAGE REQUEST IS 00168000
- * SATISFIED, RETURN IS MADE TO DMKCFP AND EXECUTION RESUMES 00169000
- * WITH THE FOLLOWING STEPS. 00170000
- * 1. BAL R10 TO LABEL RESYSTEM TO RESET THE SYSTEM. 00171000
- * 2. IF USER IS IN LOGOFF, EXIT. 00172000
- * 3. SET UP AN IDLE MESSAGE FOR THE TERMINAL AND SET THE 00173000
- * RETURN TO LABEL RESEXIT WHICH IS AN EXIT. 00174000
- * 4. CALL DMKQCNWT TO SEND THE IDLES. 00175000
- * 5. GOTO DMKDSPCH (DISPATCH) . 00176000
- * 00177000
- * RESPONSES - 00178000
- * NONE 00179000
- * 00180000
- * ERROR MESSAGES - 00181000
- * NONE 00182000
- *. 00183000
- EJECT 00184000
- DMKCFPRR RELOC SYSTEM RESET FROM OTHER CP ROUTINES 00185000
- TM VMRSTAT,VMPGWAIT IS USER IN PAGE WAIT? @VA04369 00186000
- BZ PGCOMP NO - CONTINUE PROCESSING @VA04369 00187000
- CL R11,ASYSVM IS IT SYSTEM VMBLOK? @VA04369 00188000
- BE PGCOMP YES - CONTINUE PROCESSING @VA04369 00189000
- CALL DMKPTRPW @VA08037 00190100
- PGCOMP EQU * @VA04369 00191000
- NI VMPSTAT,X'FF'-(VMNOTRAN+VMPAGEX) RESET 00192000
- NI VMFSTAT,X'FF'-VMFAUTO RESET AUTOPOLL H.S. TOO @V386298 00193000
- LA R1,VMUSER POINT TO THE USERID @VM08908 00194000
- CALL DMKLOCKQ LOCK THE VIRTUAL MACHINE @VM08908 00195000
- BAL R10,RESYSTEM RESET THE VIRTUAL MACHINE 00196000
- CALL DMKQCNSY SYNCHRONIZE THE TERMINAL ACTIVITY@V200820 00197000
- CFPUNLK EQU * @V240820 00198000
- LA R1,VMUSER POINT TO THE USERID @VM08908 00199000
- CALL DMKLOCKD UNLOCK THE VIRTUAL MACHINE @VM08908 00200000
- B RESEXIT EXIT WHEN COMPLETE @V200820 00201000
- EJECT 00202000
- *. 00203000
- * SUBROUTINE NAME - 00204000
- * RESYSTEM 00205000
- * 00206000
- * FUNCTION - 00207000
- * RESET THE COMPLETE VIRTUAL MACHINE. 00208000
- * 00209000
- * OPERATION - 00210000
- * 1. FOR A EC MODE MACHINE, STORE RESET VALUES IN THE CONTROL 00211000
- * REGISTERS AND CALL DMKVATBC TO RELEASE THE SHADOW TABLES. 00212000
- * RELEASE ANY QUEUED PSEUDO PAGE FAULT BLOCKS. 00213000
- * IF IT IS A NON-EC MODE MACHINE, STORE THE RESET 00214000
- * VALUE IN THE CREG 0 FOUND IN THE VMBLOK. 00215000
- * 2. GET THE NEXT SET OF VIRTUAL DEVICE BLOK ADDRESSES. 00216000
- * 3. CALL DMKCFPRD TO RESET THE VIRTUAL DEVICE. 00217000
- * 4. IF IT IS A TERMINAL DEVICE, CALL DMKVDBRL TO RELEASE THE 00218000
- * DEVICE. 00219000
- * 5. CLEAR THE PENDING INTERRURPTS. THEN IF NOT THE LAST 00220000
- * DEVICE, GO BACK TO STEP 2. IF IT IS THE LAST DEVICE, 00221000
- * RETURN ON REG 10. 00222000
- * 00223000
- * RESPONSES - 00224000
- * NONE 00225000
- * 00226000
- * ERROR MESSAGES - 00227000
- * NONE 00228000
- * 00229000
- *. 00230000
- EJECT 00231000
- RESYSTEM DS 0H PERFORM A VIRTUAL SYSTEM RESET 00232000
- TM VMCXSTAT,VMBCAUTH VMCF ACTIVE ? @V387045 00233000
- BZ CFPNVMCF NO..CONTINUE... @V387045 00234000
- CALL DMKVMCUA RESET VIRTUAL MACHINE @V387045 00235000
- * COMMUNICATION 00236000
- CFPNVMCF EQU * @V387045 00237000
- CLC INSTWRD1+1(3),ZEROES Are LDEVs active? HRC065DK 00237100
- BE LDEVDONE No, anchor is zero HRC065DK 00237200
- CALL HDKD7CTM Call rtn to term LDEVs HRC065DK 00237300
- * 00237400
- LDEVDONE EQU * HRC065DK 00237500
- AIF (NOT &TRACE(6)).NTR1 00238000
- TM VMTRCTL,VMTRBRIN ARE WE TRACING BRIN'S? @VA00786 00239000
- BZ TRCNOACT NOT ACTIVE, BR. @VA00786 00240000
- CALL DMKTRCPB CALL PUTBACK ROUTINE TO RESET @V200820 00241000
- TRCNOACT EQU * @VA00786 00242000
- .NTR1 ANOP 00243000
- TM VMPSTAT,VMV370R IS THIS AN EC-MODE MACHINE ??? 00244000
- BZ RESNEX NO 00245000
- L R2,VMECEXT EXTENSION BLOK ADDRESS 00246000
- USING ECBLOK,R2 00247000
- L R9,EXTCPTRQ @V408246 00248000
- USING TRQBLOK,R9 @V408246 00249000
- MVC EXTCR0(8),ZEROES CLEAR C-REGS 0,1 @V240820 00250000
- MVC EXTCR2(8),FFS SET C-REGS 2,3 TO X'FFFF' @V240820 00251000
- MVC EXTCR4(12*4),ZEROES CLEAR C-REGS 4-15 @V240820 00252000
- MVI EXTCR0+3,X'E0' RESET VALUES IN C-REGS 0,14,15 00253000
- MVI EXTCR14,X'C4' ... 00254000
- MVI EXTCR15+2,X'02' ... 00255000
- TM VMDSTAT,VMINQ IN-Q? @V408246 00256000
- BZ NQTMR @V408246 00257000
- LM R3,R4,VMTMOUTQ REMAINING TIME LEFT IN QUEUE @V408246 00258000
- LTR R3,R3 DID IT GO MINUS? @V408246 00259000
- BNM *+8 NO, ITS OK TO USE IT @V408246 00260000
- LM R3,R4,ZEROES MUST NOT BE NEGATIVE @V408246 00261000
- LM R5,R6,TRQBQUE TIME OF LAST VALUE @V408246 00262000
- TM VMTLEVEL,VMCPUTMR TRACKING VIRTUAL CPU TIMER? @V408246 00263000
- BO TRKTMR YES - SPECIAL HANDLING @V408246 00264000
- LR R5,R3 REMAINING TIME TO LEAVE IN QUEUE @V408246 00265000
- LR R6,R4 ..... @V408246 00266000
- B NOTRKTMR @V408246 00267000
- TRKTMR DS 0H HERE IF TRACKING VIRTUAL CPU @V408246 00268000
- * TIMER 00269000
- LM R7,R8,EXTCPTMR USERS VIRTUAL CPU TIMER VALUE @V408246 00270000
- SLR R8,R4 CALCULATE HOW LONG USER @V408246 00271000
- BC 8+2+1,*+8 HAS BEEN RUNNING IN @V408246 00272000
- SL R7,F1 PROBLEM STATE SINCE LAST TIMER @V408246 00273000
- SLR R7,R3 INSTRUCTION ..... @V408246 00274000
- SLR R6,R8 USE THIS FACTOR SO THAT WHEN @V408246 00275000
- BC 8+2+1,*+8 SCHEDULER DROPS HIM @V408246 00276000
- SL R5,F1 WE WON'T FOWL UP VIRTUAL CPU @V408246 00277000
- SLR R5,R7 ..... @V408246 00278000
- NOTRKTMR DS 0H @V408246 00279000
- NI VMTLEVEL,X'FF'-VMCPUTMR NOLONGER TRACKING @V408246 00280000
- STM R5,R6,TRQBQUE SAVE RESULT FOR SCHEDULAR.. @V408246 00281000
- TM CPSTATUS,CPRUN WAS SYSTEM IN PROBLEM STATE? @VA07582 00282000
- BZ NOPROBT NO, CONTINUE NORMALLY @VA07582 00283000
- C R11,RUNUSER IS THIS USER RUNUSER? @VA07582 00284000
- BNE NOPROBT NO, CONTINUE NORMALLY @VA07582 00285000
- * REGS R3 AND R4 CONTAIN VMTMOUTQ 00286000
- LM R7,R8,PROBSTRT GET TIMER AT PROBLEM STATE START @VA07582 00287000
- SLR R8,R4 CALC 2ND HALF OF ELAPSED TIME @VA07582 00288000
- BNM *+6 WAS THERE A CARRY? @VA07582 00289000
- BCTR R7,0 NO CARRY, SIGNIFICANT DIFFERENCE @VA07582 00290000
- SLR R7,R3 CALC 1ST HALF OF ELAPSED TIME @VA07582 00291000
- LM R3,R4,PROBTIME GET TOTAL PROBLEM TIME @VA07582 00292000
- SLR R4,R8 SUBTRCT 2ND HALF OF ELAPSED TIME @VA07582 00293000
- BNM *+6 WAS THERE A CARRY? @VA07582 00294000
- BCTR R3,0 NO CARRY, SIGNIFICANT DIFFERENCE @VA07582 00295000
- SLR R3,R7 SUBTRCT 1ST HALF OF ELAPSED TIME @VA07582 00296000
- STM R3,R4,PROBTIME STORE NEW TOTAL PROBLEM TIME @VA07582 00297000
- STM R5,R6,PROBSTRT SET PROBSTRT FOR DSP CALCULATION @VA07582 00298000
- NOPROBT DS 0H @VA07582 00299000
- STM R5,R6,VMTMOUTQ SAVE TIME TILL QUEUE DROP.. @V408246 00300000
- DROP R9 @V408246 00301000
- NQTMR DS 0H @V408246 00302000
- MVC EXTCPTMR,FFS RESET THE CPU TIMER 00303000
- L R1,EXTCCTRQ POINT TO TRQBLOK FOR CLOCK COMPARATOR 00304000
- USING TRQBLOK,R1 00305000
- ICM R0,15,TRQBFPNT CHECK FOR OUTSTANDING REQUEST @V240820 00306000
- BZ SETCKC NO .. 00307000
- CALL DMKSCHRT CALL THE SCHEDULER TO RESET IT 00308000
- SLR R2,R2 CLEAR TRQBLOK POINTER FOR USOFF 00309000
- ST R2,TRQBFPNT .. BLOCK HAS BEEN DEQUEUED 00310000
- SETCKC MVC TRQBVAL,ZEROES RESET CLOCK COMPARATOR @VA01177 00311000
- DROP R1 00312000
- DROP R2 00313000
- CALL DMKVATBC RELEASE SHADOW TABLES, IF ANY 00314000
- NI VMESTAT,VMMICSVC+VMINVPAG ONLY LEAVE THESE. @VA01198 00315000
- B RESNEX1 CONTINUE 00316000
- RESNEX EQU * RESET VIRTUAL C-REG 0 00317000
- LA R2,X'E0' RESET VALUE FOR C-REG 0 00318000
- ST R2,VMVCR0 SET IN VMBLOK 00319000
- RESNEX1 EQU * CONTINUE SYSTEM RESET 00320000
- NI VMVCR14,X'FF'-VMIOLOG FOR EC AND BCMODE, RESET @VMD0103 00321000
- * VMBLOK COPY OF CREG 14 IOLOG BIT. 00322000
- NI VMPEND,X'FF'-VMPGPND RESET PENDING PAGE FAULTS @V213135 00323000
- LA R0,PGBSIZE GET SIZE OF PAGE FAULT BLOK @V213135 00324000
- L R2,VMPGPNT POINT TO FIRST BLOK ON STACK @V213135 00325000
- USING PGBLOK,R2 ADDRESSABILITY @V213135 00326000
- SPACE 00327000
- PFLOOP LTR R1,R2 ANY MORE BLOKS TO FRET ? @V213135 00328000
- BZ RESNX2 NO -- CONTINUE WITH RESET @V213135 00329000
- L R2,PGPNT POINT TO NEXT BLOK @V213135 00330000
- CALL DMKFRET AND FRET THIS ONE @V213135 00331000
- ST R2,VMPGPNT SAVE POINTER TO NEXT ONE. @V213135 00332000
- B PFLOOP CONTINUE @V213135 00333000
- DROP R2 @V213135 00334000
- SPACE 00335000
- RESNX2 EQU * CONTINUE WITH RESET @V213135 00336000
- MVC VMPSW(8),=AL2(WAIT,0,0,0) DISABLE WAIT PSW @V240820 00337000
- SLR R0,R0 ZERO CONSTANT @V240820 00339000
- SR R1,R1 ZERO VMCHTBL INDEX 00340000
- LA R4,2 LOAD INDEX INCREMENT 00341000
- LA R5,30 LOAD INDEX COMPARAND 00342000
- RESNCH LH R6,VMCHTBL(R1) LOAD NEXT CHANNEL BLOK INDEX 00343000
- LTR R6,R6 DOES CHANNEL EXIST ? 00344000
- BM RESXCH NO, INDEX TO NEXT ONE 00345000
- A R6,VMCHSTRT POINT TO VCHBLOK 00346000
- USING VCHBLOK,R6 @V240820 00347000
- STH R0,VCHCUINT CLEAR PENDING CU INTERRUPT FLAGS 00348000
- NI VCHSTAT,VCHDED DON'T RESET DED. CHANNEL FLAG. 00349000
- SR R2,R2 ZERO VCHCUTBL INDEX 00350000
- RESNCU LH R7,VCHCUTBL(R2) LOAD NEXT CU BLOK INDEX 00351000
- LTR R7,R7 DOES COUNTROL UNIT EXIST 00352000
- BM RESXCU NO, INDEX TO NEXT ONE 00353000
- A R7,VMCUSTRT POINT TO VCUBLOK 00354000
- USING VCUBLOK,R7 @V240820 00355000
- STH R0,VCUDVINT CLEAR PENDING DEVICE INTERRUPT STATUS 00356000
- STH R0,VCUINTS CLEAR CU INTERRUPT STATUS 00357000
- MVI VCUSTAT,X'00' CLEAR CONTROL UNIT STATUS 00358000
- SR R3,R3 ZERO VCUDVTBL INDEX 00359000
- RESNDV LH R8,VCUDVTBL(R3) LOAD NEXT DEVICE BLOK INDEX 00360000
- LTR R8,R8 DOES DEVICE EXIST ? 00361000
- BM RESXDV NO, INDEX TO NEXT ONE 00362000
- A R8,VMDVSTRT POINT TO VDEVBLOK 00363000
- USING VDEVBLOK,R8 @V240820 00364000
- LH R9,VMVTERM INDEX TO THE VIRT. CONS. @VA04020 00365000
- A R9,VMDVSTRT POINT TO VDEVBLOK FOR IT @VA04020 00366000
- CR R8,R9 IS IT THE VIRT. CONSOLE @VA04020 00367000
- BE CFPCALL YES, WE WANT TO FIRST MAKE SURE @VA03351 00368000
- * THAT ALL OUTSTANDING PAGING IS TAKEN 00369000
- * CARE OF BEFORE GOING TO DMKVDREL 00370000
- * TO RESET AND RELEASE THE DEVICE 00371000
- * AND DOING AWAY WITH THE VIRT CONS BLOCKS 00372000
- TM VMRSTAT,VMLOGOFF LOGGING OUT ?? @V200930 00373000
- BO RESLOG YES @V200930 00374000
- CFPCALL EQU * @VA03351 00375000
- CALL DMKCFPRD RESET DEVICE @V200930 00376000
- B RESXDV CONTINUE WITH NEXT DEVICE @V240820 00377000
- RESLOG EQU * RESET AS PART OF LOGOFF PROCESS @VM08908 00378000
- CALL DMKVDREL RESET AND RELEASE THE DEVICE @VM08908 00379000
- L R9,FFS X'FFFFFFFF' @VA01881 00380000
- STH R9,VCUDVTBL(R3) MARK DEVICE DETACHED @VA01881 00381000
- STH R9,VDEVADD @VA01881 00382000
- RESXDV BXLE R3,R4,RESNDV BRANCH IF MORE DEVICES ON THIS CU 00383000
- RESXCU BXLE R2,R4,RESNCU BRANCH IF MORE CONTROL UNITS ON THIS CHAN 00384000
- TM VMRSTAT,VMLOGOFF IS USER LOGGING OFF ? @VA13280 00384100
- BZ RESXCH NO, SKIP DEDICATED CHAN. CHECK @VA13280 00384200
- TM VCHSTAT,VCHDED IS THIS A DEDICATED CHANNEL ? @VA13280 00384300
- BZ RESXCH NO, SKIP DEDICATED CHAN. CHECK @VA13280 00384400
- *-------RESET DEDICATED CHANNEL FLAG IN RCHBLOK-------* 00384500
- L R9,VCHRCHAD GET RCHBLOK ADDRESS @VA13280 00384600
- NI RCHSTAT-RCHBLOK(R9),X'FF'-RCHDED @VA13280 00384700
- *DETACH CHANNEL MSG TO OPERATOR AT LOGOFF IF NO DET CMD ISSUED 00384710
- LR R3,R1 SAVE R1 TEMPORARILY @VA13588 00384720
- LH R1,RCHADD-RCHBLOK(R9) REAL CHANNEL ADDRESS @VA13588 00384730
- CALL DMKCVTBH CONVERT CHAN ADDR TO HEX @VA13588 00384740
- LR R9,R1 SAVE R1 TEMPORARILY @VA13588 00384750
- LA R0,DETDSIZE SEZE OF THE MSG @VA13588 00384760
- CALL DMKFREE GET FREE STORAGE @VA13588 00384770
- USING DETMSG,R1 TEMP ADDRESSABILITY @VA13588 00384780
- MVC DETMSG(DETSIZE1),=C'CHAN X DETACHED ' @VA13588 00384790
- MVC DETUSER(8),VMUSER THE USERID @VA13588 00384800
- STCM R9,B'0100',DETRADD CHANNEL NUMBER @VA13588 00384810
- LA R0,DETSIZE SIZE OF THE MESSAGE @VA13588 00384820
- CALL DMKQCNWT,PARM=NORET+OPERATOR WRITE TO OPERATOR @VA13588 00384830
- LA R0,DETDSIZE SIZE OF THE MSG @VA13588 00384840
- CALL DMKFRET FRET THE MSG STORAGE @VA13588 00384850
- DROP R1 DROP TEMP ADDRESSABILITY @VA13588 00384860
- SLR R0,R0 RESTORE R0 @VA13588 00384870
- LR R1,R3 RESTORE R1 @VA13588 00384880
- RESXCH BXLE R1,R4,RESNCH BRANCH IF MORE CHANNELS ON THIS MACHINE 00385000
- STC R0,VMPEND RESET SUMMARY PENDING FLAGS 00386000
- STH R0,VMIOINT CLEAR IO INTERRUPTS @V200198 00387000
- STH R0,VMIOACTV RESET ACTIVE IO MASK 00388000
- L R1,VMSTOR RESTORE VIRTUAL MEMORY SIZE. @V304635 00389000
- L R2,XRIGHT24 CLEAR TO MAXIMUN MEMORY SIZE. @V304635 00390000
- CL R0,VMSEG IS USER FULLY LOGGED ON @V304635 00391000
- BE NOTLOGED NO - SKIP PAGE RELEASE @V304635 00392000
- CALL DMKPGSPP RELEASE AREA DEFINED IN (R1-R2) @V304635 00393000
- CALL DMKPGSPO RELEASE ALL NAMED SYSTEMS @V304635 00394000
- CLC VMSTOR,VMSIZE WAS VIRTUAL STORAGE EXPANDED ? @V304635 00395000
- BE PASSREL YES - THEN BYPASS PAGE RELEASE @V304635 00396000
- SRL R1,12 DROP OF DISPLACEMENT @V304635 00397000
- L R2,VMSIZE PRESENT SIZE OF VM (EXPANDED) @V304635 00398000
- SRL R2,12 DROP OFF DISPLACEMENT @V304635 00399000
- BCTR R2,0 MINUS 1 PAGE FOR BLD @V304635 00400000
- CLR R1,R2 FIRST ADDR. > LAST ? @V304635 00401000
- BNL SKIPREL YES - SKIP CALL TO RELEASE PAGES @V304635 00402000
- SLL R1,16 POSITION FIRST PAGE TO RELEASE @V304635 00403000
- OR R1,R2 PUT BEGIN/ENDING ADDRESS TOGETHER@V304635 00404000
- CALL DMKBLDRL,PARM=DELPAGES FRET THE ADDRESS RANGE @V304635 00405000
- * IN R1 00406000
- SKIPREL L R1,VMSTOR NOW RESTORE VIRTUAL STORAGE SIZE @V304635 00407000
- ST R1,VMSIZE STORE BACK OLD MEMORY SIZE. @V304635 00408000
- SRL R1,12 DROP OFF DISPLACEMENT FOR BLD.. @V304635 00409000
- BCTR R1,R0 MINUS 1 PAGE @V304635 00410000
- CALL DMKBLDRT,PARM=OLDVMSEG+KEEPSEGS+NEWPAGES+NEWSEGS 00411000
- PASSREL DS 0H HERE IF 'VMSIZE' EQUALED 'VMSTOR'@V304635 00412000
- NOTLOGED DS 0H HERE IF USER NO FULLY LOGGED ON. @V304635 00413000
- NI VMRSTAT,255-VMIOWAIT MAKE SURE USER NOT IN IOWAIT 00414000
- L R2,VMPXINT START OF QUEUE @V200198 00415000
- LA R0,XINTSIZE SIZE OF EXTERNAL INTERRUPT BLOCK @V200198 00416000
- RESLOOP LTR R1,R2 ANYTHING? @V200198 00417000
- BZ RESEND FINIS... @V200198 00418000
- L R2,0(,R1) FETCH FORWARD CHAIN POINTER @V200198 00419000
- CALL DMKFRET RELEASE THE INTERRUPT BLOCK @V240820 00420000
- B RESLOOP AGAIN @V200198 00421000
- SPACE 00422000
- RESEND EQU * SETUP FOR ECMODE PENDING INTRPTS @V240820 00423000
- ST R1,VMPXINT SET CHAIN POINTER TO ZERO @V240820 00424000
- TM VMPSTAT,VMV370R ECMODE OPTION MACHINE ? @V240820 00425000
- BZR R10 NO -- RESET IS COMPLETE @V240820 00426000
- TM VMRSTAT,VMLOGOFF USER LOGGING OFF? @VA04200 00427000
- BOR R10 YES - RESET IS COMPLETE @VA04200 00428000
- LA R0,XINTSIZE STORAGE FOR EXTERNAL INTERRUPTS @V240820 00429000
- CALL DMKFREE ONE FOR TOD CLOCK COMPARATOR @V240820 00430000
- LR R3,R1 SAVE THE ADDRESS @V240820 00431000
- CALL DMKFREE ONE FOR THE CPU TIMER @V240820 00432000
- ST R1,XINTNEXT-XINTBLOK(,R3) CHAIN THE BLOCKS @V240820 00433000
- ST R3,VMPXINT CONNECT TO THE VMBLOK @V240820 00434000
- MVC XINTSORT-XINTBLOK(12,R3),CKCPEND SETUP CKC @V240820 00435000
- MVC XINTSORT-XINTBLOK(12,R1),CPTPEND SETUP CPT @V240820 00436000
- SLR R0,R0 ZERO CONSTANT @V240820 00437000
- ST R0,XINTNEXT-XINTBLOK(,R1) CLEAR POINTER @V240820 00438000
- BR R10 RESET IS NOW COMPLETE @V240820 00439000
- SPACE 00440000
- CKCPEND DC X'10400000',X'10040800',XL4'00' COMPARATOR @V240820 00441000
- CPTPEND DC X'10500000',X'10050400',XL4'00' CPU TIMER @V240820 00442000
- EJECT 00443000
- *. 00444000
- * SUBROUTINE NAME - 00445000
- * DMKCFPRD 00446000
- * 00447000
- * FUNCTION - 00448000
- * 00449000
- * RESET A VIRTUAL DEVICE. 00450000
- * 00451000
- * OPERATION - 00452000
- * 00453000
- * DMKCFPRD IS CALLED TO RESET A VIRTUAL DEVICE. ANY SENSE 00454000
- * BYTES, CSW STATUS, OR IOERBLOKS ARE RELEASED AND SET TO 00455000
- * ZERO. ACTIVE I/O, IF ANY, IS RESET VIA A CALL TO DMKIOSHA 00456000
- * (DEDICATED OR DASD DEVICES ONLY), OR TO THE APPROPRIATE 00457000
- * DEVICE HANDLER (DMKVSP, DMKVCA, DMKDIA, ETC.). 00458000
- * SPECIAL HANDLING IS AS FOLLOWS: 00459000
- * DIALED LINES OR DIALED GRAPHIC DEVICES ARE RELEASED 00460000
- * VIA A CALL TO DMKDIBDR. 00461000
- * VIRTUAL CTCA DEVICES ARE RESET VIA A CALL TO DMKVCARD. 00462000
- * VIRTUAL SPOOL INPUT DEVICES ARE CLOSED VIA A CALL TO 00463000
- * DMKVSPCR (CLOSE READER). 00464000
- * VIRTUAL SPOOL OUTPUT DEVICES ARE CLOSED VIA A CALL TO 00465000
- * DMKVSPCO (CLOSE OUTPUT). 00466000
- * DEDICATED REAL CTCA DEVICES ARE RESET VIA A REAL 'HDV' 00467000
- * ISSUED VIA A CALL TO DMKIOSQR. 00468000
- * DEDICATED DASD DEVICES WHICH SUPPORT RESERVE/RELEASE ARE 00469000
- * RELEASED VIA A CALL TO DMKIOSQR. 00470000
- * MINIDISKS WHICH REQUEST VIRTUAL RESERVE/RELEASE SUPPORT 00471000
- * ARE RELEASED SO THAT OTHER USERS WAITING FOR THE DEVICE 00472000
- * WILL RECEIVE A DEVICE END. 00473000
- * 00474000
- * 00475000
- * RESPONSES - 00476000
- * NONE 00477000
- * 00478000
- * ERROR MESSSAGES - 00479000
- * NONE 00480000
- *. 00481000
- EJECT 00482000
- DMKCFPRD RELOC RESET A VIRTUAL DEVICE 00483000
- USING VCHBLOK,R6 00484000
- USING VCUBLOK,R7 00485000
- USING VDEVBLOK,R8 00486000
- L R1,VDEVIOER GET POINTER TO ERROR BLOK 00487000
- LTR R1,R1 IS THERE ONE ?? 00488000
- BZ RESIOER NO -- GO CLEAR WORK REGISTER 00489000
- TM VDEVSTAT,VDEVDED DEDICATED DEVICE 00490000
- BO GETIOER YES -- SENSE BYTES IN IOERBLOK 00491000
- TM VDEVTYPC,CLASURI+CLASURO UNIT RECORD ?? 00492000
- BNZ RESIOER YES -- SENSE BYTES IN VDEVBLOK 00493000
- CLI VDEVTYPE,TYP3215 CONSOLE ?? 00494000
- BE RESIOER YES -- SENSE BYTES IN VDEVBLOK 00495000
- SPACE 00496000
- GETIOER BAL R5,FRTIOER2 RETURN THE IOERBLOK @VA00884 00497000
- SPACE 00498000
- RESIOER SR R0,R0 CLEAR WORK REGISTER 00499000
- ST R0,VDEVIOER CLEAR ERROR FIELD 00500000
- NI VDEVFLAG,255-VDEVUC TURN OFF UNIT CHECK FLAG 00501000
- ST R0,VDEVCSW ZERO THE VIRTUAL CSW 00502000
- ST R0,VDEVCSW+4 .. 00503000
- SLR R2,R2 CLEAR @VA08629 00503100
- ICM R2,7,VDEVIO ANY PENDING I/O? @VA08629 00503200
- BZ CHKPEND NO, CONTINUE @VA08629 00503300
- LR R1,R2 IOBLOK ADDRESS TO R1 @VA08629 00503400
- CFPRUNQ L R2,IOBFPNT-IOBLOK(R1) ADDRESS OF NEXT ON QUEUE @VA08629 00503500
- LA R0,IOBSIZE PREPARE TO FRET IOBLOKS @VA08629 00503600
- CALL DMKFRET RELEASE BLOCK @VA08629 00503700
- LTR R2,R2 ANY MORE? @VA08629 00503800
- BZ CFPCLR NO @VA08629 00503900
- LR R1,R2 PREPARE TO GO THRU LOOP AGAIN @VA08629 00504000
- B CFPRUNQ REPEAT @VA08629 00504100
- CFPCLR STCM R2,7,VDEVIO CLEAR CHAIN POINTER @VA08629 00504200
- CHKPEND TM VDEVSTAT,VDEVPEND+VDEVCHAN+VDEVCUE ANYTHING @VA08629 00504300
- * PENDING? 00504400
- BNZ RESPEND YES -- CLEAR ALL PENDING INTERRUPTS 00505000
- RESCONT EQU * TEST FOR RESET MSS DEVICE @V60B6B8 00506010
- TM PSAMSS,MSSPRES IS MSS DEFINED IN THIS SYSTEM @V60B6B8 00506020
- BZ NOTVUA CAN'T BE A VUA @V60B6B8 00506030
- TM VDEVTYPC,CLASDASD @VA11970 00506032
- BNO NOTVUA @VA11970 00506034
- L R1,VDEVREAL GET RDEVBLOK @V60B6B8 00506040
- USING RDEVBLOK,R1 ASSEMBLER ADDRESSABILITY @V60B6B8 00506050
- CLI RDEVCLAS,CLASDASD IS THIS A DASD DEVICE @V60B6B8 00506060
- BNE NOTVUA CAN'T BE A VUA @V60B6B8 00506070
- CLI RDEVTYPE,TYP3330 IS IT A 3330 @V60B6B8 00506080
- BNE NOTVUA CAN'T BE A VUA @V60B6B8 00506090
- TM RDEVFTR,VIRTUAL+SYSVIRT IS IT A VUA @V60B6B8 00506100
- BZ NOTVUA NOPE @V60B6B8 00506110
- CALL DMKSSUCF @VA11455 00506121
- NOTVUA EQU * PROCESS OTHER DEVICE STATUS @V60B6B8 00506130
- TM VDEVSTAT,VDEVBUSY IS THE DEVICE BUSY ? @V60B6B8 00506140
- BO RESBUSY BRANCH IF YES 00507000
- TM VDEVSTAT,VDEVDED IS THIS A DEDICATED DEVICE ? 00508000
- BO DEDDEV YUP, GO CHECK IT OUT @V407438 00509000
- TM VDEVTYPC,CLASURI+CLASURO+CLASTERM SPOOLING DEVICE ? 00510000
- BNZ RESSPOL YES 00511000
- CLI VDEVTYPC,CLASSPEC MAYBE VIRTUAL CHAN-TO-CHAN ADAPTER 00512000
- BE RESCTCA IF YES - SPECIAL HANDLING 00513000
- B CHKVRES GO CHECK VIRT RESERVED MDISK @V407438 00514000
- SPACE 00515000
- DEDDEV EQU * NON BUSY DEDICATED DEVICE @V407438 00516000
- TM VDEVTYPC,CLASTERM+CLASGRAF DIAL TYPE DEVICE? @V407438 00517000
- BNZ RESDIAL YUP, GO HANDLE @V407438 00518000
- TM VDEVTYPC,CLASDASD+CLASTAPE IS THIS TAPE OR DASD?@V407438 00519000
- BNZ REALREL YUP, GO HANDLE @V407438 00520000
- LA R0,CLASSPEC*256+TYPCTCA IS IT REAL CTCA?? @V407438 00521000
- CH R0,VDEVTYPC ... @V407438 00522000
- BE RESRCTC YES, GO HANDLE. @V407438 00523000
- LA R0,CLASSPEC*256+TYP3851 IS IT MSC PORT ? @V407466 00524000
- CH R0,VDEVTYPC ... @V407466 00525000
- BE SUSPMSC YES, ISSUE SUSPEND ORDER @V407466 00526000
- B TESTDED NOPE, BR. @V407438 00527000
- EJECT 00528000
- TESTDED EQU * @VA03191 00529000
- SWITCH SWITCH TO MAIN PROCESSOR @V407510 00530000
- L R9,VDEVREAL LOAD REAL DEV BLOK @VA03191 00531000
- USING RDEVBLOK,R9 @VA03191 00532000
- L R10,RDEVAIOB LOAD ACTIVE IOBLOK @VA03191 00533000
- USING IOBLOK,R10 @VA03191 00534000
- LTR R10,R10 IS THERE ACTIVE IOB ON REAL DEV? @VA03191 00535000
- BZ RESEXIT NO--EXIT @VA03191 00536000
- TM IOBSPEC,IOBUNSL IS IT UNSL INT? @VA03191 00537000
- BO RESDED YES--TRY TO HALT THE IO @VA03191 00538000
- RESEXIT EXIT RETURN TO THE CALLER 00539000
- SPACE 2 00540000
- RESDIAL EQU * CHECK TO DROP DIALED LINE 00541000
- TM VDEVFLAG,VDEVDIAL CONNECTED VIA 'DIAL' ? 00542000
- BZ TESTDED NO--NOT HANDLED HERE @VA03191 00543000
- CALL DMKDIBDR DROP THE LINE @VA13704 00544000
- B RESEXIT AND NOW EXIT 00545000
- EJECT 00546000
- SUSPMSC LA R0,SUSPENDL ACQ. IOBLOK PLUS EXTENSION @V407466 00547000
- CALL DMKFREE ... @V407466 00548000
- LR R10,R1 R10 IOBLOK ADDRESSABILITY @V407466 00549000
- USING SUSPEND,R10 00550000
- XC SUSPEND(IOBSIZE*8),SUSPEND CLEAR IOBLOK @V407466 00551000
- MVC MSC87A(MSCL),MSC87B MOVE CCWS TO IOB EXTENSION @V407466 00552000
- LA R1,MSC87A RELOCATE CCW ADDRESSES @V407466 00553000
- L R0,MSC87A ... @V407466 00554000
- ALR R0,R1 ADJUST ADDRESS @V407466 00555000
- ST R0,MSC87A ... @V407466 00556000
- USING IOBLOK,R10 RE-ESTABLISH ADDRESSABILITY 00557000
- ST R1,IOBCAW CHANNEL PROGRAM ADDRESS @V407466 00558000
- MVC IOBUSER,ASYSVM CHARGE IT TO THE SYSTEM @V407466 00559000
- LA R1,SUSPDONE RETURN ADDRESS AFTER I/O @V407466 00560000
- ST R1,IOBIRA ... @V407466 00561000
- LA R0,CPEXSIZE GET A CPEXBLOK @V407466 00562000
- CALL DMKFREE ACQUIRE STORAGE FOR BLOCK @V407466 00563000
- ST R1,IOBMISC2 SAVE CPEXBLOK ADDRESS @V407466 00564000
- USING CPEXBLOK,R1 00565000
- STM R0,R15,CPEXR0 SAVE REGS ACROSS CALL TO IOS @V407466 00566000
- DROP R1 00567000
- L R8,VDEVREAL RDEVBLOK ADDRESS FOR IOS CALL @V407466 00568000
- CALL DMKIOSQR PERFORM I/O REQUEST @V407466 00569000
- GOTO DMKDSPCH DMKDSPCH GO OFF TO DISPATCHER @V407466 00570000
- SPACE 00571000
- SUSPDONE EQU * 00572000
- USING *,R12 00573000
- L R1,IOBMISC2 RESTORE CPEXBLOK ADDRESS @V407466 00574000
- USING CPEXBLOK,R1 ADDRESSABILITY 00575000
- LM R0,R15,CPEXR0 RESTORE CFP'S REGISTERS @V407466 00576000
- DROP R1 00577000
- USING DMKCFP,R12 00578000
- LR R1,R11 GET ADDRESS OF CALLER'S VMBLOK @V4M0007 00579000
- L R11,ASYSVM REPLACE R11 WITH SYSTEM VMBLOK - @V4M0007 00580000
- * R11 VALUE WHEN IOB IS UNSTACKED @V4M0007 00581000
- SWTCHVM SWITCH BACK TO CALLER'S VMBLOK @V4M0007 00582000
- TM IOBSTAT,IOBFATAL+IOBCC3 I/O SUCCESSFUL?? @V407466 00583000
- BZ IOBONLY YES, FRET IOB ONLY @V407466 00584000
- BAL R5,FRETIOER RELEASE IOERBLOK IF THERE IS ONE @V407466 00585000
- IOBONLY LA R0,CPEXSIZE RELEASE CPEXBLOK @V407466 00586000
- L R1,IOBMISC2 ADDRESS OF CPEXBLOK @V407466 00587000
- CALL DMKFRET RELEASE BLOCK @V407466 00588000
- LA R0,SUSPENDL SIZE OF IOB PLUS EXTENSION @V407466 00589000
- LR R1,R10 BLOCK ADDRESS TO R1 @V407466 00590000
- CALL DMKFRET RELEASE STORAGE @V407466 00591000
- B RESEXIT EXIT @V407466 00592000
- EJECT 00593000
- RESPEND STH R0,VDEVINTS CLEAR DEVICE INTERRUPT STATUS 00594000
- TM VDEVSTAT,VDEVCUE CUE PENDING FOR THIS DEVICE ? 00595000
- BZ RESPNDCH NO - CHECK FOR CHANNEL END 00596000
- NI VCUSTAT,255-(VCUCUEPN+VCUACTV) CLEAR OUT FLAGS @VA03150 00597000
- NI VCUINTS,255-CUE ... 00598000
- RESPNDCH TM VDEVSTAT,VDEVCHAN CHANNEL END FOR THIS DEVICE ? 00599000
- BZ RESPNDEV NO - GO CLEAR DEVICE INTERRUPTS 00600000
- NI VCUSTAT,255-(VCUCEPND+VCUACTV) CLEAR OUT FLAGS @VA03818 00601000
- NI VCHSTAT,255-VCHCEPND ... 00602000
- STH R0,VCHCEDEV ... 00603000
- RESPNDEV NI VDEVSTAT,255-(VDEVPEND+VDEVCHAN+VDEVCUE) 00604000
- L R1,=A(DMKVIOMK) LOAD ADDRESS OF INTERRUPT MASKS 00605000
- LH R2,VDEVADD LOAD VIRTUAL DEVICE ADDRESS 00606000
- AR R2,R2 MULTIPLY IT BY 2 00607000
- LA R2,0(R1,R2) POINT TO THE PROPER MASK 00608000
- XC VCUDVINT,0(R2) TURN OFF PENDING FLAG IN VCUBLOK 00609000
- BNZ RESCONT BRANCH IF OTHER INTERRUPTS PENDING 00610000
- LH R2,VCUADD LOAD VIRTUAL CONTROL UNIT ADDRESS 00611000
- SRL R2,3 MULTIPLY IT BY 2 00612000
- LA R2,0(R1,R2) POINT TO THE PROPER MASK 00613000
- XC VCHCUINT,0(R2) TURN OFF PENDING FLAG IN VCHBLOK 00614000
- BNZ RESCONT BRANCH IF OTHER INTERRUPTS PENDING 00615000
- LH R2,VCHADD LOAD VIRTUAL CHANNEL ADDRESS 00616000
- SRL R2,7 MULTIPLY IT BY 2 00617000
- LA R2,0(R1,R2) POINT TO THE PROPER MASK 00618000
- XC VMIOINT,0(R2) TURN OFF CHANNEL PENDING FLAG 00619000
- BNZ RESCONT MORE CHANNELS PENDING 00620000
- NI VMPEND,X'FF'-VMIOPND TURN OFF SUMMARY PENDING FLAG 00621000
- B RESCONT CONTINUE 00622000
- EJECT 00623000
- RELTD TM VDEVTYPC,CLASDASD+CLASTAPE IS THIS TAPE OR DASD?@V407438 00624000
- BZ RESEXIT NOPE, DONE @V407438 00625000
- TM VDEVSTAT,VDEVDED IS IT DEDICATED? @V407438 00626000
- BO REALREL YUP, GO HANDLE DEDICATED CASE @V407438 00627000
- CHKVRES TM VDEVFLG2,VDEVRES MDISK VIRT RESERVED FOR USER @V407438 00628000
- BO REALREL YES, GO DO REAL RELEASE (MAYBE) @V407438 00629000
- NI VDEVFLG2,X'FF'-VDEVODE DON'T OWE ANY DEV END @V407438 00630000
- TM VDEVFLG2,VDEVCPEX WAITING FOR VIRT RELEASE? @V407438 00631000
- BZ RESEXIT NOPE, CONTINUE @V407438 00632000
- CALL DMKSCNVD GET VIRT ADDRESS IN CCU FORM @V407438 00633000
- LR R0,R1 SAVE CCU IN R0 @V407438 00634000
- L R5,VDEVRRB GET VRRBLOK @V407438 00635000
- USING VRRBLOK,R5 ADDRESS THE VRRBLOK @V407438 00636000
- USING CPEXBLOK,R1 ADDRESS THE CPEXBLOK @V407438 00637000
- LA R1,VRRCPEX-(CPEXFPNT-CPEXBLOK) ADDRSS THE ANCHOR@V407438 00638000
- NEXTCPEX LR R2,R1 SAVE THE PREVIOUS CPEXBLOK ADDR @V407438 00639000
- L R1,CPEXFPNT GET NEXT CPEXBLOK ON THE QUEUE @V407438 00640000
- LTR R1,R1 IS THERE ONE? @V407438 00641000
- BNZ CFP1OK YUP, GO CHECK IT OUT @V407438 00642000
- ABEND 1 SOMEBODY GOOFED @V407438 00643000
- CFP1OK CL R11,CPEXR11 IS THIS THE RIGHT USER? @V407438 00644000
- BNE NEXTCPEX NOPE, KEEP LOOKING @V407438 00645000
- CL R0,CPEXMISC IS THIS THE RIGHT VIRT DEVICE? @V407438 00646000
- BNE NEXTCPEX NOPE, KEEP LOOKING @V407438 00647000
- MVC CPEXFPNT-CPEXBLOK(4,R2),CPEXFPNT DEQUE THIS BLOK@V407438 00648000
- OI CPEXADD,X'80' MAKE RETURN ADDR NEG. FOR WAITEE @V407438 00649000
- CALL DMKSTKCP STACK THE CPEXBLOK ON THE DSP Q @V407438 00650000
- LA R0,CPEXSIZE NOW GET ANOTHER CPEXBLOK FOR US @V407438 00651000
- CALL DMKFREE TO SYNCHRONIZE THE ONE WE JUST @V407438 00652000
- STM R0,R15,CPEXR0 STACKED. @V407438 00653000
- LA R0,RESYNCH RETURN ADDRESS @V407438 00654000
- ST R0,CPEXADD FOR WHEN SYNCHRONIZATION COMPLETE@V407438 00655000
- CALL DMKSTKCP STACK THIS CPEX BEHIND THE OTHER @V407438 00656000
- GOTO DMKDSPCH WAIT ON RES/REL RELATED I/O RESET@V407438 00657000
- SPACE 00658000
- RESYNCH NI VMRSTAT,X'FF'-(VMIDLE+VMEXWAIT) ALLOW BACK IN Q @V407438 00659000
- NI VDEVFLG2,X'FF'-(VDEVCPEX+VDEVODE) NO CPEX, NO DE@V407438 00660000
- B RESEXIT DONE. @V407438 00661000
- DROP R1,R5 NO MORE CPEXBLOK OR VRRBLOK @V407438 00662000
- SPACE 00663000
- REALREL EQU * HERE TO DO A REAL RELEASE @V407438 00664000
- TM VDEVFLAG,VDEVRSRL IS RELEASE A VALID CCW? @V407438 00665000
- BZ VIRTREL NOPE, GO DO VIRT RELEASE (MAYBE) @V407438 00666000
- LA R0,IOBSIZE GET AN IOBLOK FOR THE I/O @VA04026 00667000
- CALL DMKFREE . . . FROM FREE STORAGE @VA04026 00668000
- LR R10,R1 NORMAL ADDRESSABILITY @VA04026 00669000
- USING IOBLOK,R10 . . . @VA04026 00670000
- XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR IT OUT @VA04026 00671000
- LA R0,(RCWCCW+8-RCWTASK)/8 RCWTASK SIZE @VA04026 00672000
- CALL DMKFREE GET AN RCWTASK FOR THE CCW @VA04026 00673000
- USING RCWTASK,R1 TEMPORARILY . . . @VA04026 00674000
- XC RCWTASK(RCWCCW-RCWTASK),RCWTASK @VA04026 00675000
- MVC RCWHEAD(2),FFS FILL IN X'FFFF' HEADER FLAG @VA04026 00676000
- MVC RCWCCW(8),=X'9400000030000018' RELEASE CCW @VA04026 00677000
- TM VDEVTYPC,CLASDASD IS THIS A DASD DEVICE? @V407438 00678000
- BO *+8 YUP, ALL SET FOR X'94' RELEASE @V407438 00679000
- MVI RCWCCW,X'D4' NOPE, THEN SET FOR TAPE RELEASE @V407438 00680000
- STH R0,RCWCCNT RCWTASK SIZE IN DBL-WDS @VA04026 00681000
- MVI RCWRCNT+1,X'01' ONE REAL CCW @VA04026 00682000
- LA R1,RCWCCW POINT TO THE RELEASE CCW @VA04026 00683000
- DROP R1 FINISHED FOR NOW @VA04026 00684000
- ST R1,IOBCAW START OF THE CHANNEL PROGRAM @VA04026 00685000
- MVC IOBUSER(4),ASYSVM CHARGE IT TO THE SYSTEM @VA04026 00686000
- L R1,=A(DMKIOSRW) IOS WILL FRET THE STORAGE @VA04026 00687000
- ST R1,IOBIRA . . .WHEN THE I/O IS COMPLETE @VA04026 00688000
- LR R1,R8 SAVE VDEVBLOK ADDRESS @V407438 00689000
- L R8,VDEVREAL LET R8 = RDEVBLOK FOR DMKIOS @VA04026 00690000
- CALL DMKIOSQR RELEASE THE DISK DRIVE @VA04026 00691000
- LR R8,R1 RESTORE VDEVBLOK ADDRESS @V407438 00692000
- VIRTREL EQU * HERE TO DO A VIRTUAL RELEASE @V407438 00693000
- TM VDEVSTAT,VDEVDED IS DISK/TAPE DEDICATED? @V407438 00694000
- BO RESEXIT YUP, DONE. (ONLY MINIDISKS LEFT) @V407438 00695000
- TM VDEVFLG2,VDEVRRF MDISK WITH RES/REL FEATURE? @V407438 00696000
- BZ RESEXIT NOPE, DONE, BR. @V407438 00697000
- L R5,VDEVRRB GET ADDR OF VRRBLOK @V407438 00698000
- USING VRRBLOK,R5 ADDRESS THE VRRBLOK @V407438 00699000
- NI VDEVFLG2,X'FF'-VDEVRES VIRT DEV NO LONGER RESV @V407438 00700000
- NI VRRSTAT,X'FF'-VRRRES DITTO @V407438 00701000
- NXTCPEX L R1,VRRCPEX GET FIRST/NEXT CPEXBLOK WAITING @V407438 00702000
- LTR R1,R1 IS ANYONE WAITING FOR THE MDISK? @V407438 00703000
- BZ NXTIOB NOPE, GO TRY DEVICE END INTS @V407438 00704000
- USING CPEXBLOK,R1 ADDRESS THE CPEXBLOK @V407438 00705000
- L R0,CPEXFPNT GET THE ADDRESS OF THE NEXT ONE @V407438 00706000
- ST R0,VRRCPEX AND MAKE IT FIRST ON CHAIN @V407438 00707000
- CALL DMKSTKCP STACK THE UNCHAINED CPEXBLOK @V407438 00708000
- B NXTCPEX CONTINUE UNTIL ALL UNSTACKED @V407438 00709000
- DROP R1,R5 NO MORE CPEXBLOK OR VRRBLOK @V407438 00710000
- SPACE 00711000
- NXTIOB L R8,VDEVLINK GET NEXT VDEVBLOK USING THIS MDSK@V407438 00712000
- CL R8,SAVER8 SAME ONE WE ENTERED ON? @V407438 00713000
- BE RESEXIT YUP, WERE DONE, BR. @V407438 00714000
- TM VDEVFLG2,VDEVODE DO WE OWE THIS VDEV A DE INT @V407438 00715000
- BZ NXTIOB NOPE, LOOK THROUGH ALL VDEVBLOKS @V407438 00716000
- NI VDEVFLG2,X'FF'-VDEVODE WE DON'T OWE IT ANYMORE @V407438 00717000
- LA R0,IOBSIZE GET AN IOBLOK @V407438 00718000
- CALL DMKFREE FROM FREE STORAGE @V407438 00719000
- LR R10,R1 NORMAL ADDRESSABILITY PLEASE @V407438 00720000
- XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR OUT THE BLOCK @V407438 00721000
- ST R1,IOBLINK AS THOUGH IT CAME FROM IOS @V407438 00722000
- MVI IOBCSW+4,DE ENDING STATUS = DEVICE END @V407438 00723000
- L R0,=A(DMKVIOIN) ADDRESS OF THE INT. HANDLER @V407438 00724000
- ST R0,IOBIRA THATS WHERE WE WANT IT TO GO @V407438 00725000
- L R11,VDEVUSER VDEVBLOK OWNER FOR SCN & IOB @V407466 00726000
- ST R11,IOBUSER IOB IS FOR THE DE RECEIVER AV407438 00727000
- CALL DMKSCNVD GET THE VIRTUAL CCU PLEASE @V407438 00728000
- L R11,SAVER11 RESTORE CALLER'S R11 @V407466 00729000
- STH R1,IOBVADD PUT CCU IN THE IOB TOO. @V407438 00730000
- CALL DMKSTKIO THAT SHOULD DO IT... @V407438 00731000
- B NXTIOB CONTINUE WITH THE NEXT NOW. @V407438 00732000
- SPACE 00733000
- EJECT 00734000
- RESRCTC EQU * IF REAL CTCA, ISSUE REAL HALT I/O 00735000
- LA R0,CLASSPEC*256+TYPCTCA DEVICE CLASS, TYPE 00736000
- CH R0,VDEVTYPC IS THIS A DEDICATED CTCA ? 00737000
- BNE TESTDED NO--NOT HANDLED HERE @VA03191 00738000
- L R9,VDEVREAL POINT TO RDEVBLOK @VA06017 00739000
- USING RDEVBLOK,R9 @VA06017 00740000
- ICM R10,B'1111',RDEVAIOB IS THERE AN ACTIVE IOB @VA06017 00741000
- BNZ RESDED YES ISSUE HALT I/O @VA06017 00742000
- DROP R9 @VA06017 00743000
- LR R15,R8 COPY THE VDEVICE ADDR @VA00884 00744000
- SL R15,VMDVSTRT COMPUTE RELATIVE VDEV ADDR @VA00884 00745000
- ST R15,SAVEWRK8 SAVE IT @VA00884 00746000
- L R8,VDEVREAL POINT TO REAL DEVICE BLOCK 00747000
- LA R0,IOBSIZE FREE STORAGE FOR AN IOBLOK 00748000
- CALL DMKFREE ... 00749000
- LR R10,R1 ADDRESS VIA GR10 00750000
- USING IOBLOK,R10 00751000
- XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR OUT THE ENTIRE BLOCK 00752000
- ST R11,IOBUSER SAVE VMBLOCK ADDR @VA00884 00753000
- ST R8,IOBMISC SAVE THE RDEVBLOK ADDRESS @VA02130 00754000
- ST R13,IOBMISC2 . . .AND THE SAVEAREA ADDRESS @VA02130 00755000
- OI IOBSPEC,IOBHIO MAKE THIS A HALT I/O 00756000
- LA R15,CTCAIRA INTERRUPT RETURN AFTER HALT I/O @VA02130 00757000
- B STOREIRA SET IOBIRA AND CALL DMKIOSQR @VA02130 00758000
- SPACE 2 00759000
- USING *,R12 HERE ON COMPLETION ... @VA00884 00760000
- CTCAIRA SL R12,=A(CTCAIRA-DMKCFP) ESTABLISH ADDRESSABILITY @VA00884 00761000
- USING DMKCFP,R12 (WHEW) @VA00884 00762000
- L R1,IOBIOER POINT TO IOERBLOK @VA03831 00763000
- LTR R1,R1 IS THERE ONE? @VA03831 00764000
- BZ CTCATIO NO @VA03831 00765000
- BAL R5,FRTIOER2 YES - FRET IT @VA03831 00766000
- ST R1,IOBIOER CLEAR THE IOERBLOK POINTER @VA00884 00767000
- CTCATIO STH R1,IOBFLAG ZERO IOBFLAG & IOBSTAT @VA03831 00768000
- MVI IOBSPEC,IOBTIO NOW DO A TIO TO CLEAR ANY INT. @VA00884 00769000
- L R8,IOBMISC PICK UP RDEVBLOK ADDR FOR DMKIOS @VA02130 00770000
- LA R15,CFPIO SET IRA FOR ENTRY AFTER I/O @VA00884 00771000
- STOREIRA ST R15,IOBIRA STORE THE INT RETURN ADD @VA00884 00772000
- CALL DMKIOSQR SCHEDULE A HALT I/O @VA00884 00773000
- GOTO DMKDSPCH WAIT FOR STATUS @VA00884 00774000
- EJECT 00775000
- RESBUSY TM VDEVSTAT,VDEVCHBS IS THE VIRTUAL SUBCHANNEL BUSY ? 00776000
- BZ RESSTAT NO, DO NOT RESET THE CHANNEL AND CU 00777000
- NI VCUSTAT,255-(VCUBUSY+VCUCHBSY+VCUACTV) TURN OFF @VA03150 00778000
- * CONTROL UNIT BUSY FLAGS 00779000
- NI VCHSTAT,255-VCHBUSY TURN OFF CHANNEL BUSY FLAG 00780000
- RESSTAT TM VDEVSTAT,VDEVDED IS THIS A DEDICATED DEVICE ? 00781000
- BO RESHALT BRANCH IF YES 00782000
- TM VDEVTYPC,CLASURI+CLASURO SPOOL DEVICE ? 00783000
- BNZ RESSPOL BRANCH IF YES 00784000
- NI VDEVSTAT,255-(VDEVBUSY+VDEVCHBS) FLAG DEVICE NOT BUSY 00785000
- CLI VDEVTYPE,TYP3215 CONSOLE ?? 00786000
- BE RESEXIT YES -- DMKCNS WILL HANDLE 00787000
- RESHALT L R9,VDEVREAL LOAD THE REAL DEVICE BLOCK ADDRESS 00788000
- NI VDEVSTAT,255-(VDEVBUSY+VDEVCHBS) FLAG DEVICE NOT BUSY 00789000
- USING RDEVBLOK,R9 00790000
- L R10,VDEVIOB GET ACTIVE IOBLOK 00791000
- USING IOBLOK,R10 USE STANDARD ADDRESSABILITY 00792000
- LTR R10,R10 ACTIVE CHANNEL PROGRAM ? 00793000
- BZ RELTD NOPE, TEST FOR RELEASE PROCESSING@V407438 00794000
- RESDED OI IOBFLAG,IOBRES FLAG IOB AS RESET @VA03191 00795000
- CL R11,AVMREAL IS USER IN V=R AREA @VA00996 00796000
- BNE NOTVRIOB NO - @VA00996 00797000
- L R15,IOBMISC WAS THE CCW'S TRANSLATED ? @VA00996 00798000
- LTR R15,R15 IOBMISC IS NON-ZERO IF THEY WERE @VA00996 00799000
- BNZ *+8 BRANCH IF TRANSLATED. @VA00996 00800000
- ST R15,IOBCAW INDICATE NO CALL TO DMKUNT. @VA00996 00801000
- NOTVRIOB LA R15,CFPIO ADDRESS OF NEW IRA RETURN @VA00996 00802000
- AIF (&ISAM).CHKUNT **AIF** 00803000
- ST R15,IOBIRA AND SAVE IN THE IOBLOK @VA02130 00804000
- AGO .NOTISM @VA02130 00805000
- .CHKUNT L R14,=A(DMKUNTIS) CHECK FOR ISAM IOBLOK @VA02130 00806000
- CL R14,IOBIRA IS THIS AN ISAM CCW STRING ? @VA02130 00807000
- BNE NOTISAM NO -- JUST RESET THE IRA @VA02130 00808000
- ST R15,IOBMISC COME HERE AFTER DMKUNTIS @VA02130 00809000
- B SAVESAVE @VA02130 00810000
- NOTISAM EQU * RESET IOBIRA FOR RETURN HERE @VA02130 00811000
- ST R15,IOBIRA SAVE ADDRESS FOR RETURN @VA02130 00812000
- SAVESAVE EQU * SAVE ADDRESS OF OUR SAVEAREA @VA02130 00813000
- .NOTISM ANOP 00814000
- ST R13,IOBMISC2 SAVEAREA ADDRESS FOR LATER USE @VA02130 00815000
- TM VDEVTYPC,CLASTERM+CLASSPEC TERMINAL OR CTCA ? 00816000
- BZ CKACTIVE NO- 0.K. TO HALT 00817000
- TM VDEVSTAT,VDEVDED HAS THE CONNECTION BEEN MADE 00818000
- BZ CKVIRT NO - GO SEE IF IT HAS BEEN STARTED 00819000
- SPACE 00820000
- CKACTIVE EQU * HERE TO HALT AN ACTIVE I/O REQUEST @VA04182 00821000
- SL R8,VMDVSTRT REMEMBER THE DISPLACEMENT OF THE VDEVBLOK 00822000
- ST R8,SAVEWRK8 IN THE SAVEAREA 00823000
- LR R8,R9 POINT TO THE REAL DEVICE BLOCK WITH R8 00824000
- DROP R9 @VA03831 00825000
- CALL DMKIOSHA HALT THE ACTIVE DEVICE 00826000
- GOTO DMKDSPCH WAIT FOR THE IOB TO BE UNSTACKED 00827000
- EJECT 00828000
- CKVIRT EQU * FIND OUT IF THE DIAL PROCESS HAS STARTED 00829000
- CLI VDEVTYPC,CLASSPEC SPECIAL-CLASS DEVICE ? 00830000
- BE RESSPEC YES - CHECK FOR CTCA 00831000
- TM VDEVFLAG,VDEVDIAL STARTED TO DIAL ? 00832000
- BO CFPWAIT YES - WAIT FOR I/O TO COMPLETE 00833000
- RESVIRT NI VDEVFLAG,X'FF'-VDEVENAB DEVICE NO LONGER ENABLED .. 00834000
- L R15,IOBUSER GET THE IOB OWNER @VA03161 00835000
- LTR R15,R15 IS THERE ANY? @VA03161 00836000
- BNZ *+8 YES--CONTINUE @VA03161 00837000
- ST R11,IOBUSER MAKE SURE OWNER IS THERE @VA03161 00838000
- ST R10,IOBLINK THIS IS THE ONLY IOBLOK 00839000
- CALL DMKSTKIO STACK THE IOBLOK FOR PROCESSING 00840000
- SPACE 00841000
- CFPWAIT SL R8,VMDVSTRT REMEMBER DISPLACEMENT OF VDEVBLOK 00842000
- ST R8,SAVEWRK8 IN THE SAVEAREA 00843000
- GOTO DMKDSPCH AND EXIT TO AWAIT COMPLETION ON I/O ... 00844000
- SPACE 2 00845000
- CFPIO EQU * HERE AFTER IOBLOK HAS BEEN UNSTACKED 00846000
- USING *,R12 TEMPORARY ADDRESSABILITY VIA IOBIRA 00847000
- SL R12,=A(CFPIO-DMKCFP) REESTABLISH STANDARD 00848000
- USING DMKCFP,R12 ADDRESSABILITY 00849000
- L R13,IOBMISC2 PICK POINTER TO SAVE AREA @VA02130 00850000
- L R8,SAVEWRK8 GET DISPLACEMENT OF VDEVBLOK 00851000
- AL R8,VMDVSTRT AND POINT TO VDEVBLOK 00852000
- L R9,IOBLINK SAVE LINK FIELD 00853000
- TM IOBSPEC,IOBTIO+IOBHIO WAS THIS REALLY A START I/O ? 00854000
- BNZ FRETIOB NO -- JUST FRET THE IOBLOK 00855000
- CLR R9,R10 IS THIS THE ORIGINAL IOBLOK ?? 00856000
- BNE FRETIOB NO -- SIMPLY GET RID OF IT 00857000
- TM VMDSTAT,VMTIO WAS USER IN TIO BUSY LOOP 00858000
- BNO CKDIAG NO- BRANCH 00859000
- CLI VDEVTYPC,CLASTERM SLOW SPEED TERMINAL DEVICE 00860000
- BNE *+8 NO- BRANCH 00861000
- NI VMRSTAT,X'FF'-VMIDLE YES- LET USER ENTER Q 00862000
- NI VMRSTAT,X'FF'-VMEXWAIT REMOVE EX WAIT FOR ALL DEVICES 00863000
- NI VMDSTAT,X'FF'-VMTIO REMOVE TIO FLAG 00864000
- EJECT 00865000
- CKDIAG EQU * 00866000
- TM IOBFLAG,IOBHVC WAS THIS I/O INITIATED VIA DIAGNOSE 00867000
- BZ *+8 NO -- 00868000
- NI VMRSTAT,X'FF'-(VMEXWAIT+VMIOWAIT) TAKE OUT OF WAIT 00869000
- L R0,IOBCAW GET ADDRESS OF CCW PACKAGE @VA00996 00870000
- LTR R0,R0 SHOULD THEY BE FRETTED ? @VA00996 00871000
- BZ NOCALL NO - THERE ARE NONE. @VA00996 00872000
- CALL DMKUNTFR RELEASE THE CCW PACKAGE @VA00996 00873000
- NOCALL CLI VDEVTYPC,CLASTERM TERMINAL TYPE DEVICE ? @VA00996 00874000
- BE TSTDIAL2 YES, TEST FOR DIALED DEVICE @V200730 00875000
- CLI VDEVTYPC,CLASGRAF GRAF DEVICE ?? @V200730 00876000
- BNE FRETIOB NO, CONT @V200730 00877000
- TSTDIAL2 DS 0H @V200730 00878000
- TM VDEVFLAG,VDEVDIAL WAS IT CONNECTED VIA DIAL 00879000
- BZ FRETIOB NO -- 00880000
- CALL DMKDIBDR IF SO, INFORM THE PREVIOUS USER @VA13704 00881000
- FRETIOB BAL R5,FRETIOER RETURN ANY IOERBLOK @VA00884 00882000
- LR R1,R10 POINT TO THE IOBLOK @VA00884 00883000
- LA R0,IOBSIZE AND GET ITS SIZE 00884000
- CALL DMKFRET RETURN IT TO FREE STORAGE 00885000
- CLR R9,R10 ARE WE FINISHED WITH THIS OPERATION ? 00886000
- BNE CFPWAIT NO -- MORE INTERRUPTS TO COME 00887000
- SLR R0,R0 CLEAR 00888000
- ST R0,VDEVIOB ACTIVE IOBLOK POINTER 00889000
- B RELTD GO CHECK OUT RELEASE PROCESSING @V407438 00890000
- EJECT 00891000
- FRETIOER L R1,IOBIOER POINT TO THE IOERBLOK (VIA R10) @VA00884 00892000
- LTR R1,R1 ZERO? @VA00884 00893000
- BNZ FRTIOER2 NO - GO FRET IOERBLOK @VA03831 00894000
- TM VDEVSTAT,VDEVDED IS REAL DEVICE DEDICATED? @VA03831 00895000
- BZR R5 NO @VA03831 00896000
- ST R5,SAVEWRK6 SAVE RETURN REGISTER @VA03831 00897000
- L R5,VDEVREAL USE R5 AS BASE FOR RDEVBLOK @VA03831 00898000
- SWITCH SWITCH TO MAIN PROCESSOR @V407510 00899000
- USING RDEVBLOK,R5 @VA03831 00900000
- L R1,RDEVIOER POINT TO POSSIBLE IOERBLOK @VA03831 00901000
- MVC RDEVIOER,ZEROES MAKE SURE POINTER IS CLEARED @VA03831 00902000
- DROP R5 @VA03831 00903000
- L R5,SAVEWRK6 RESTORE RETURN REGISTER @VA03831 00904000
- LTR R1,R1 WAS RDEVIOER ZERO? @VA03831 00905000
- BZR R5 YES - NO IOERBLOK TO FRET @VA03831 00906000
- FRTIOER2 EQU * ENTER HERE IF IOERBLOK IS HUNG @VA00884 00907000
- * OFF VDEVBLOK 00908000
- USING IOERBLOK,R1 @VA00884 00909000
- LA R0,IOERSIZE GET THE BASE SIZE @VA00884 00910000
- AH R0,IOEREXT AND ANY EXTRA SPACE ON THE END @VA00884 00911000
- DROP R1 @VA00884 00912000
- CALL DMKFRET FRET THE IOERBLOK @VA00884 00913000
- SR R1,R1 CLEAR R1 (TO ZERO THE POINTER) @VA00884 00914000
- BR R5 AND RETURN (VIA R5). @VA00884 00915000
- EJECT 00916000
- RESSPOL NI VDEVFLAG,255-VDEVCCW1 TURN OFF 1ST CCW FLAG 00917000
- TM VDEVTYPC,CLASURO IS THIS AN OUTPUT DEVICE ?? 00918000
- BO RESOPUT BRANCH IF YES 00919000
- CLI VDEVTYPE,TYP3210 IS IT A CONSOLE ?? @V200730 00920000
- BNE NOTCONS NO, CONT @V200730 00921000
- USING VCONCTL,R2 @V200730 00922000
- L R2,VDEVCON GET POINTER TO VIRTUAL CONTASK @V305535 00923000
- TM VDEVCFLG,VDEVAUCR AUTOLOG ON USER @V305535 00924000
- BZ FRETRBUF NO - CLEAR CONSOLE BLOCKS @V305535 00925000
- TM VMRSTAT,VMLOGOFF IN LOG-OFF NOW ? @V305535 00926000
- BO FRETRBUF YES - CLEAR CONSOLE BLOCKS @V305535 00927000
- TM VMOSTAT,VMKILL FORCE LOG-OFF CONDITION ? @V305535 00928000
- BZ NOTRBUF NO - LEAVE BUFFER ALONE @V305535 00929000
- FRETRBUF LTR R2,R2 CHECK FOR VCONCTL BLOCK @V305535 00930000
- BZ NOTCONS NO - CHECK FOR LOGOUT @V200730 00931000
- ICM R1,15,VCONRBUF IS THERE A READ BUFFER ? @V240820 00932000
- BZ NOTRBUF NO, CONT @V200730 00933000
- SLR R0,R0 CLEAR @V200730 00934000
- ST R0,VCONRBUF CLEAR POINTER @V200730 00935000
- LH R0,VCONRBSZ YES - GET SIZE IN DWDS HRC101DK 00936490
- CALL DMKFRET FRET IT. @V200730 00937000
- NOTRBUF EQU * @V240820 00938000
- ICM R1,15,VCONWBUF IS THERE A WRITE BUFFER ? @V240820 00939000
- BZ NOTCONS NO, CONT @V200730 00940000
- SLR R0,R0 CLEAR @V200730 00941000
- ST R0,VCONWBUF CLEAR BUFFER ADDRESS @V200730 00942000
- IC R0,VCONWBSZ GET SIZE IN DBL WDS @V200730 00943000
- CALL DMKFRET FRET BUFFER @V200730 00944000
- DROP R2 @V200730 00945000
- NOTCONS EQU * HERE IF CONTASK IS NON-EXISTANT. @V200730 00946000
- TM VMRSTAT,VMLOGOFF IS USER LOGGING OFF ???? 00947000
- BZ RESEXIT BRANCH IF NOT 00948000
- CLI VDEVTYPC,CLASTERM CONSOLE DEVICE ? 00949000
- BE RESCSPL YES -- RESET CONSOLE SPOOL FLAG @VA04165 00950000
- NI VDEVSFLG,X'FF'-VDEVFEED RESET FEED FLAG 00951000
- ICM R0,15,VDEVSPL IS THERE AN ACTIVE SPOOL FILE ? @V240820 00952000
- BZ RESEXIT NO -- JUST EXIT @V240820 00953000
- SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA01460 00954000
- CALL DMKVSPCR,PARM=0 CLOSE THE CARD READER 00955000
- AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA01460 00956000
- B RESIOER CLEAR THE FLAGS AGAIN 00957000
- EJECT 00958000
- RESCSPL DS 0H @VA10854 00959010
- TM VDEVTYPE,TYPSS COMMUN CONSOL ? @VA10854 00959020
- BM RESEXIT TTY OR SS @VA10854 00959030
- NI VDEVFLAG,X'FF'-VDEVCSPL @VA10854 00959040
- RESOPUT EQU * RESET OUTPUT SPOOL DEVICE @V240820 00960000
- ICM R0,15,VDEVSPL IS THERE AN ACTIVE SPOOL FILE ? @V240820 00961000
- BZ RESEXIT NO -- JUST EXIT @V240820 00962000
- SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA01460 00963000
- CALL DMKVSPCO,PARM=0 CLOSE THE PRINTER OR PUNCH 00964000
- AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA01460 00965000
- B RESIOER CLEAR THE FLAGS AGAIN 00966000
- SPACE 1 00967000
- RESSPEC EQU * RESET SPECIAL DEVICES 00968000
- CLI VDEVTYPE,TYPCTCA VIRTUAL CHAN-TO-CHAN ADAPTER ? 00969000
- BNE CFPWAIT NO -- WAIT FOR I/O COMPLETION 00970000
- USING CHXBLOK,R9 VDEVREAL POINTS TO CHXBLOK 00971000
- TM CHXFLAG,CHBWAIT IS THE X-SIDE WAITING ? 00972000
- BZ CFPWAIT NO -- WE CAN WAIT FOR INTERRUPT 00973000
- L R1,CHXCNCT CPEXBLOK FOR RE-CONNECT 00974000
- ST R0,CHXCNCT (DO NOT STACK THE BLOCK TWICE) 00975000
- CALL DMKSTKCP RESTART ACTIVITY TO CLEAR I/O 00976000
- NI CHXFLAG,255-CHBWAIT NO LONGER IN WAIT STATUS 00977000
- B CFPWAIT WAIT FOR COMPLETION 00978000
- SPACE 00979000
- RESCTCA EQU * RESET OF NOT-BUSY CHAN-TO-CHAN ADAPTER 00980000
- CLI VDEVTYPE,TYPCTCA IS THIS VIRTUAL CTCA ? 00981000
- BNE RESEXIT NO -- WE'RE ALL DONE ALREADY 00982000
- TM VDEVSTAT,VDEVNRDY IS THE ADAPTER 'COUPLE'D YET ? 00983000
- BO RESEXIT NO -- ALL DONE 00984000
- CALL DMKVCARD PERFORM NECESSARY STATUS UPKEEP 00985000
- B RESEXIT ...AND EXIT 00986000
- DROP R6,R7,R8,R10 00987000
- EJECT 00988000
- EJECT 00989000
- LTORG 00990000
- EJECT 00991000
- * CHANNEL PROGRAM USED TO SUSPEND MSC INTERFACE WHEN IPL OF VS 00992000
- * SYSTEM IS INVOKED. 00993000
- SPACE 00994000
- MSC87B CCW X'87',MSC22B-MSC87B,CC,4 EXECUTE CCW @V407466 00995000
- MSC03B CCW X'03',0,SILI,1 CHAINED TO NOP @V407466 00996000
- MSC22B DC X'22008000' SUSPEND MSC INTERFACE @V407466 00997000
- MSCL EQU *-MSC87B LENGTH OF CHANNEL PROGRAM 00998000
- EJECT 00999000
- PSA , @V306638 01000000
- COPY CONBUF @V306638 01001000
- COPY CORE @V306638 01002000
- COPY DEVTYPES @V306638 01003000
- COPY EQU @V306638 01004000
- COPY IOBLOKS @V306638 01005000
- * DSECT FOR EXTENDED IOBLOK 01006000
- SUSPEND DSECT @V407466 01007000
- DS (IOBSIZE)D SIZE OF IOBLOK @V407466 01008000
- MSC87A DS D EXECUTE CCW @V407466 01009000
- MSC03A DS D NOP @V407466 01010000
- MSC22A DS D MSC SUSPEND ORDER @V407466 01011000
- SUSPENDL EQU (*-SUSPEND)/8 @V407466 01012000
- COPY IOER @V306638 01013000
- COPY PGBLOK @V306638 01014000
- COPY RBLOKS @V306638 01015000
- COPY SAVE @V306638 01016000
- COPY SAVTABLE @V306638 01017000
- COPY SHRTABLE @V306638 01018000
- COPY SYSTBL @V306638 01019000
- COPY TIMER @V306638 01020000
- COPY TREXT @V306638 01021000
- COPY UDIRECT @V407438 01022000
- COPY VBLOKS @V306638 01023000
- COPY VCTCA @V306638 01024000
- COPY VMBLOK @V306638 01025000
- COPY XINTBLOK @V306638 01026000
- DETMSG DSECT RESPONSE FOR DETACH CHANNEL AT LOGOFF TIME@VA13588 01026090
- DS CL4,CL1 CHANNEL,BLANK @VA13588 01026140
- DETRADD DS CL1,CL2 CHANNEL ADDRESS,BLANK @VA13588 01026190
- DS CL8,CL2 DETACHED,BLANK @VA13588 01026240
- DETSIZE1 EQU *-DETMSG MSG SIZE(MINUS USERID) @VA13588 01026290
- DETUSER DS CL8 USERID @VA13588 01026340
- DETSIZE EQU *-DETMSG MSG SIZE @VA13588 01026390
- DETDSIZE EQU (DETSIZE+7)/8 SIZE IN DOUBLE WORDS @VA13588 01026440
- END 01027000
ibm/vm370-lib/cp/dmkcfp.assemble_src.txt ยท Last modified: 2023/08/06 13:36 by Site Administrator