ibm:vm370-lib:cp:dmkvsj.assemble_src
Table of Contents
DMKVSJ Source
References
- Fixes Applied : 1
- This Source Date : Friday, August 7, 1981
- Last Fix ID : [R13707DK]
Source Listing
- DMKVSJ.ASSEMBLE.txt
- VSJ TITLE 'DMKVSJ (CP) VM/370 - RELEASE 6' 00001000
- ISEQ 73,80 VALIDATE SERIALIZATION OF INPUT 00002000
- *. 00003000
- * MODULE NAME - 00004000
- * 00005000
- * DMKVSJ 00006000
- * 00007000
- * FUNCTION - 00008000
- * 00009000
- * TO SIMULATE THE OPERATION OF PRIVILEGED I/O INSTRUCTIONS 00010000
- * ISSUED BY VIRTUAL MACHINES (HIO, CLCH) 00011000
- * 00012000
- * ATTRIBUTES - 00013000
- * 00014000
- * REENTRANT, RESIDENT, ENTERED VIA GOTO FROM DMKPRVLG FOR THE 00015000
- * SIMULATION OF AN INSTRUCTION (HIO, CLCH) 00016000
- * 00017000
- * ENTRY POINTS - 00018000
- * 00019000
- * DMKVSJEX - SIMULATE A HIO, CLCH AND SUBROUTINES 00020000
- * 00021000
- * ENTRY CONDITIONS - 00022000
- * 00023000
- * FOR DMKVSJEX - 00024000
- * GPR11 = ADDRESS OF USER'S VMBLOK 00025000
- * GPR12 = DMKVSJEX BASE 00026000
- * GPR9 = RETURN SDDRESS IN DMKVSI IF THE ENTRY IS FOR THE 00027000
- * GETLOCK SUBROUTINE 00028000
- * 00029000
- * THE FIELD VMINST IN THE USER'S VMBLOK CONTAINS THE I/O 00030000
- * INSTRUCTION TO BE SIMULATED 00031000
- * 00032000
- * NOTE THAT GPR13 DOES NOT POINT TO A SAVEAREA 00033000
- * 00034000
- * EXIT CONDITIONS - 00035000
- * 00036000
- * FOR DMKVSJEX - NORMAL 00037000
- * THE CORRECT STATUS AND CONDITION CODES ARE REFLECTED TO THE 00038000
- * VIRTUAL MACHINE, AND, IF APPROPRIATE, THE I/O IS STARTED 00039000
- * 00040000
- EJECT 00041000
- * 00042000
- * CALLS TO OTHER ROUTINES - 00043000
- * 00044000
- * DMKFREE - TO OBTAIN FREE STORAGE FOR IOBLOKS 00045000
- * DMKIOSQV - TO SCHEDULE THE VIRTUAL OPERATION 00046000
- * DMKVCASH - TO SIMULATE A HALT I/O TO A VIRTUAL CTCA 00047000
- * DMKSTKIO - TO STACK AN INTERRUPT DUE TO THE COMPLETION OF A 00048000
- * VIRTUAL ENABLE CAUSED BY A HIO 00049000
- * DMKDSPCH - EXIT VIA GOTO AFTER I/O IS SCHEDULED BY DMKIOSQV 00050000
- * DMKTRDSI - TO TRACE AN I/O OPER. (SIO, TIO, HIO, TCH, CLCH) 00051000
- * DMKVSCVR - TO VERIFY THAT THE NOTRANS OPTION IS VALID 00052000
- * DMKVIOIN - IOB INTERRUPT RETURN ADDRESS (IOBIRA) 00053000
- * DMKCCHRF - CALLED TO REFLECT CHANNEL CHECK TO VIRTUAL MACHINE 00054000
- * 00055000
- * EXTERNAL REFERENCES - 00056000
- * 00057000
- * NONE 00058000
- * 00059000
- * TABLES / WORKAREAS - 00060000
- * 00061000
- * VCHBLOK,VCUBLOK, AND VDEVBLOK ARE REFERENCED AND UPDATED 00062000
- * 00063000
- * REGISTER USAGE - 00064000
- * 00065000
- * GPR0 = CONDITION CODE RETURNED FROM DMKSCNVU 00066000
- * GPR1 = SCRATCH - OR USED FOR DEDICATED CHANNEL SUPPORT 00067000
- * GPR2 = SCRATCH - OR USED FOR DEDICATED CHANNEL SUPPORT 00068000
- * GPR3 = ADDRESS OF VBLOK THAT CONTAINS SUBCHANNEL STATUS 00069000
- * GPR4 = CSW STATUS TO BE STORED 00070000
- * GPR5 = INTERNAL SUBROUTINE LINKAGE 00071000
- * GPR6 = VCHBLOK BASE 00072000
- * GPR7 = VCUBLOK BASE 00073000
- * GPR8 = VDEVBLOK BASE 00074000
- * GPR9 = VIRTUAL DEVICE ADDRESS 00075000
- * GPR10 = IOBLOK BASE 00076000
- * GPR11 = VMBLOK BASE 00077000
- * GPR12 = DMKVSJ BASE 00078000
- * GPR13 NOT USED 00079000
- * GPR14 = EXTERNAL LINKAGE 00080000
- * GPR15 = EXTERNAL LINKAGE 00081000
- EJECT 00082000
- * 00083000
- * NOTES - 00084000
- * 00085000
- * OPERATION - 00086000
- * 1. BRANCH TO HANDLE HIO AND CLCH AS DESCRIBED IN 00087000
- * SECTIONS A-B RESPECTIVELY. 00088000
- * 2. RETURN TO DMKVSI AS NEEDED. 00089000
- * . DMKVSICH 00090000
- * . R9 FROM GETLOCK SUBROUTINE 00091000
- *. 00092000
- EJECT 00093000
- COPY OPTIONS 00094000
- COPY LOCAL OPTIONS 00095000
- SPACE 2 00096000
- DMKVSJ CSECT 00097000
- ENTRY DMKVSJEX @VA12128 00098000
- ENTRY DMKVSJHI COUNT OF HIO (9EX0) INSTRUCTIONS @VA12128 00099000
- ENTRY DMKVSJHD COUNT OF HDV (9EX1) INSTRUCTIONS @VA12128 00100000
- EXTRN DMKVIOMK,DMKVIOXK 00101000
- EXTRN DMKVSICH HANDLE CLCH AS TCH @VA12128 00102000
- EXTRN DMKSTKDE @VA12128 00103000
- EXTRN DMKVIOIN,DMKVSIEX 00104000
- EXTRN DMKIOSQV 00105000
- EXTRN DMKSTKIO 00106000
- EXTRN DMKSCNVU 00107000
- EXTRN DMKVCASH @VA12128 00108000
- EXTRN DMKCCHRF @V508690 00109000
- EXTRN DMKSSSMQ,DMKDSPCH @V60B6B8 00110000
- AIF (NOT &TRACE(6)).TRA1 **AIF** 00111000
- EXTRN DMKTRDSI @V4M0240 00112000
- .TRA1 ANOP 00113000
- AIF (NOT &AP).LOKSY4 00114000
- EXTRN DMKLOKSY,DMKDSPRU @VA08305 00115000
- .LOKSY4 ANOP 00116000
- SPACE 2 00117000
- USING PSA,R0 00118000
- USING VCHBLOK,R6 00119000
- EXTRN DMKDSPA @V408246 00120000
- EXTRN DMKDSPRQ @V408246 00121000
- USING VCUBLOK,R7 00122000
- USING VDEVBLOK,R8 00123000
- USING IOBLOK,R10 00124000
- USING VMBLOK,R11 00125000
- USING DMKVSJEX,R12 00126000
- EJECT 00127000
- DMKVSJEX DS 0D @VA12128 00128000
- B VSJBRNCH(R14) GO TO PROPER ROUTINE AS INDEXED @VA12128 00129000
- * BY REGISTER 14. R14 WAS LOADED BY DMKVSI 00130000
- * WITH THE PROPER INDEX 00131000
- SPACE 00132000
- VSJBRNCH EQU * TABLE OF ROUTINES FOR DMKVSJ @VA12128 00133000
- B VIOCLCH CLCH SIMULATION @VA12128 00134000
- B VIOHIO HIO SIMULATION @VA12128 00135000
- B STTOTCSW STORE TOTAL CSW @VA12128 00136000
- B STORECSW STORE CSW @VA12128 00137000
- B VIOEXIT2 GENERAL EXITS @VA12128 00138000
- B VIOEXIT EXITS @VA12128 00139000
- B VIOEXITX EXITS @VA12128 00140000
- B VIOEXITY EXITS @VA12128 00141000
- B VIOGODSP GO TO THE DISPATCHER @VA12128 00142000
- B GETLOCK GET THE SYSTEM LOCK @VA12128 00143000
- B CTCAIOB BUILD IOBLOCK TO SCHEDULE TIO @VA12128 00144000
- EJECT 00145000
- * 00146000
- * A. VIRTUAL CLCH SIMULATION - 00147000
- * 00148000
- * 1. IF A NECESSARY CONTROL BLOCK WAS NOT FOUND, RETURN VIRTUAL 00149000
- * CONDITION CODE 3. 00150000
- * 00151000
- * 2. IF CHANNEL IS DEDICATED: 00152000
- * - ISSUE CLCH INSTRUCTION, 00153000
- * - RECORD THE CLCH INFORMATION IN THE NEXT TRACE TABLE 00154000
- * ENTRY, 00155000
- * - SET C.C. IN VIRTUAL PSW. 00156000
- * 00157000
- * 3. IF CHANNEL IS NOT DEDICATED, SIMULATE CLCH AS A TCH. 00158000
- * (SEE TCH SIMULATION DESCRIPTION ABOVE.) 00159000
- * 00160000
- VIOCLCH DS 0H @VMD0117 00161000
- AL R1,DMKVSJCC ADD CLCH COUNT TO INCREMENT @VA12128 00162000
- ST R1,DMKVSJCC STORE CLEAR CHANNEL COUNT @VA12128 00163000
- SPM R0 RESTORE COND. CODE FROM DMKSCNVU @VMD0117 00164000
- BC 4,VIOEXIT SET CC = 3. (DMKSCNVU RETURNS @VA07864 00165000
- * A CC OF 1 WHEN THE VCHBLOK WAS 00166000
- * NOT FOUND) 00167000
- TM VCHSTAT,VCHDED IS CHANNEL DEDICATED? @VA07864 00168000
- BNO CLCHEXIT NO, TREAT CLCH AS A TCH @VA12128 00169000
- SWITCH MAKE SURE WE ARE ON I/O PROC @VMV0003 00170000
- LH R1,VCHADD GET CHANNEL ADDR - REAL=VIRTUAL @VMV0003 00171000
- * CLRCH 0(R1) ISSUE REAL CLRCH INSTRUCTION @VMV0003 00172000
- DC X'9F01' ISSUE REAL CLRCH INSTRUCTION @VMV0003 00173000
- DC S(0(1)) FOR SPECIFIED CHANNEL @VMV0003 00174000
- AIF (NOT &TRACE(9)).NTCLCH1 **AIF** 00175000
- BALR R0,0 PRESERVE C.C. FROM CLRCH INSTR. @VMD0117 00176000
- CCTRACE DS 0H @VMD0117 00177000
- TM TRACFLG2,TRACBEF I/O TRACING ACTIVE? @VMV0003 00178000
- BZ CLRCHNOT NO -- RESTORE CC AND RETURN @VMV0003 00179000
- TRACE CODE=TRCCLCH,R14,R1,R2 GET A TRACE ENTRY @VMD0117 00180000
- STCM R0,8,1(R14) MOVE IN CONDITION CODE @VMD0117 00181000
- NI 1(R14),X'30' LEAVE ONLY THE CONDITION CODE @VMD0117 00182000
- STH R13,2(0,R14) STORE DEVICE ADDR IN TRACE ENTRY @VMD0117 00183000
- ST R11,4(,R14) STORE VMBLOK POINTER @VMD0117 00184000
- MVC 8(8,R14),VDEVCSW STORE VIRTUAL CSW @VMD0117 00185000
- CLRCHNOT EQU * RESTORE COND CODE, RETURN @VMV0003 00186000
- SPM R0 RESTORE COND. CODE FROM CLCH @VMD0117 00187000
- .NTCLCH1 ANOP 00188000
- BZ VIOEXITX CLCH WAS PERFORMED @VMD0117 00189000
- LA R2,X'10' INDICATE CC SHOULD BE SET TO 1 @VMD0117 00190000
- BC 4,VIOEXIT CC 1 IS MEANINGLESS FOR A CLCH @VMD0117 00191000
- LA R2,X'20' INDICATE CC SHOULD BE SET TO 2 @VMD0117 00192000
- BC 2,VIOEXIT CHANNEL IS BUSY @VMD0117 00193000
- LA R2,X'30' INDICATE CC SHOULD BE SET TO 3 @VMD0117 00194000
- B VIOEXIT CHANNEL IS NOT OPERATIONAL @VMD0117 00195000
- SPACE 00196000
- CLCHEXIT EQU * 00197000
- L R15,=A(DMKVSICH) ADDRESS IN DMKVSI TO GO TO @VA12128 00198000
- BR R15 GO TO DMKVSI @VA12128 00199000
- EJECT 00200000
- *. 00201000
- * B. VIRTUAL HIO SIMULATION - 00202000
- * 1. IF ALL VBLOKS WERE NOT FOUND, SET VIRTUAL CONDITION 00203000
- * CODE = 3 AND EXIT. 00204000
- * 3. IF A VIRTUAL CHANNEL END IS PENDING, EXIT WITH CC = 0 00205000
- * 4. IF THE CONTROL UNIT OR DEVICE IS BUSY, STORE CSW 00206000
- * STATUS OF ZERO, SET CC = 1, AND EXIT. 00207000
- * 5. IF THE VIRTUAL CU IS BUSY, STORE SM+BUSY, SET CC = 1, 00208000
- * AND EXIT. 00209000
- * 6. IF THE VIRTUAL SUBCHANNEL IS MARKED BUSY FOR A NON-TP 00210000
- * DEVICE, DO A REAL "HIO" AND RETURN THE CSW STATUS AND 00211000
- * COND. CODE TO THE USER; IF THE BUSY DEVICE IS A VIRTUAL 00212000
- * ENABLED 270X LINE THAT HAS NOT YET BEEN DIALED, UNCHAIN 00213000
- * THE IOBLOK,AND CALL DMKSTKIO TO REFLECT A CE-DE-UE TO 00214000
- * THE CALLER. 00215000
- * 7. IF THE DEVICE IS A VIRTUAL CTCA, CALL DMKVCASH TO 00216000
- * PERFORM THE NECESSARY SIMULATION OF THE HALT I/O. 00217000
- * 8. IF THE DEVICE IS A DEDICATED CTCA, BUILD AN IOBLOK 00218000
- * AND SCHEDULE A REAL HALT I/O VIA A CALL TO DMKIOSQV. 00219000
- * (A REAL HALT I/O MUST BE PERFORMED EVEN IF THE DEVICE IS IDLE 00220000
- * SINCE IT IS USED TO TERMINATE THE Y-SIDE CHANNEL PROGRAM.) 00221000
- *. 00222000
- SPACE 00223000
- VIOHIO EQU * 00224000
- BAL R9,GETLOCK GO GET THE SYSTEM LOCK @VA08305 00225000
- TM VMINST+1,X'01' IS IT HDV? @V2B2638 00226000
- BO VIOHDV YUP, BR @V2B2638 00227000
- AL R1,DMKVSJHI ADD HIO COUNT TO INCREMENT @VA12128 00228000
- ST R1,DMKVSJHI AND RE-STORE @VA12128 00229000
- B VIOHIO1 CONTINUE @V2B2638 00230000
- SPACE 00231000
- VIOHDV AL R1,DMKVSJHD ADD HDV COUNT TO INCREMENT @VA12128 00232000
- ST R1,DMKVSJHD AND RE-STORE @VA12128 00233000
- SPACE 00234000
- VIOHIO1 EQU * HERE WHEN COUNTS ARE BUMPED @V2B2638 00235000
- SPM R0 RESTORE COND. CODE FROM DMKSCNVU 00236000
- BNZ VIOEXIT EXIT CC = 3 -- DEVICE NOT FOUND @VA01527 00237000
- SPACE 00238000
- LR R3,R6 POINT TO VCHBLOK 00239000
- TM VCHTYPE,VCHSEL SELECTOR CHANNEL? @VA03072 00240000
- BNZ HIOCHAN YES --- @VA01771 00241000
- LR R3,R7 NO -- POINT TO VCUBLOK 00242000
- TM VCUTYPE,VCUSHRD+VCUCTCA SHARED SUB-CHANNEL ? 00243000
- BNZ HIOCHAN YES --- @VA01771 00244000
- LR R3,R8 NO -- POINT TO VDEVBLOK 00245000
- HIOCHAN EQU * TEST FOR SUB-CHANNEL BUSY @VA01771 00246000
- TM VCHSTAT-VCHBLOK(R3),VCHBUSY TEST STATUS OF SUBCHANNEL 00247000
- BO REALHIO CHANNEL IS BUSY - GO DO REAL HIO 00248000
- TM VCHSTAT-VCHBLOK(R3),VCHCEPND IS CHANNEL END PENDING? 00249000
- BO VIOEXITX CE PENDING -- EXIT WITH CC = 0 00250000
- TM VCUSTAT,VCUBUSY IS THE CU BUSY ?? 00251000
- BO VIRHIO YES -- GO DO VIRTUAL HIO 00252000
- TM VCUINTS,CUE IS A CUE PENDING ?? 00253000
- BO HIOCUE YES -- 00254000
- EJECT 00255000
- * 00256000
- * VIRTUAL HIO TO DEVICE 00257000
- * 00258000
- VIRHIO SR R5,R5 ZERO STATUS 00259000
- CLI VDEVTYPC,CLASSPEC SPECIAL CLASS DEVICE? @VA04040 00260000
- BNE STORECSW NOPE - STORE THE CSW @VA04040 00261000
- LA R3,IOBHIO IF DEDICATED ADAPTER, THIS IS A HALT I/O 00262000
- TM VDEVSTAT,VDEVDED DEDICATED CHANNEL-TO-CHANNEL ? 00263000
- BO CTCAIOB YES - BUILD IOBLOK TO SCHEDULE THE 'HIO' 00264000
- VCTCHIO EQU * SIMULATE HIO TO VIRTUAL CTCA 00265000
- LR R1,R13 CTCA ADDRESS TO R1 00266000
- CALL DMKVCASH ... 00267000
- BNZ STORECSW CC NON-ZERO => CSW STORED 00268000
- B VIOEXITX EXIT WITH CC = 0 00269000
- SPACE 00270000
- HIOCUE EQU * HERE IF CUE IS PENDING 00271000
- TM VDEVSTAT,VDEVCUE IS IT FOR THE ADDRESSED DEVICE 00272000
- BO VIRHIO YES -- DO VIRTUAL HIO 00273000
- L R5,=A(256*(SM+BUSY)) CAN'T DO HIO IF CU OCCUPIED 00274000
- B STORECSW STORE AND EXIT 00275000
- SPACE 00276000
- REALHIO EQU * HERE TO DO A REAL HIO 00277000
- TM VDEVTYPC,CLASTERM+CLASSPEC IS IT A LINE OR A CTCA ? 00278000
- BZ HIO NO -- DO REAL HIO 00279000
- TM VDEVSTAT,VDEVDED IS IT A DEDICATED LINE ?? 00280000
- BO HIO YES - DO HIO 00281000
- CLI VDEVTYPC,CLASTERM IS THIS A DIALED LINE ? 00282000
- BE DIALHIO YES - SIMULATE HIO 00283000
- CLI VDEVTYPE,TYPCTCA IS THIS VIRTUAL CTCA ? 00284000
- BE VCTCHIO YES -- SIMULATE HIO 00285000
- B HIO OTHERWISE, DO REAL HIO 00286000
- SPACE 00287000
- DIALHIO EQU * SIMULATE HIO FOR DIALED LINES 00288000
- SLR R5,R5 SET CSW STATUS ZERO @VA01527 00289000
- TM VDEVFLAG,VDEVENAB ENABLED NOW? @VA01527 00290000
- BZ STORECSW N0...GIVE CC=1 @VA01527 00291000
- TM VDEVFLAG,VDEVDIAL IN DIAL PROCESS NOW? @VA01527 00292000
- BO VIOEXITX YES....EXIT CC=0 @VA01527 00293000
- NI VDEVFLAG,255-VDEVENAB HAS BEEN HALTED @VA01527 00294000
- L R10,VDEVIOB R10 = ENABLE IOBLOK @VA01527 00295000
- L R1,IOBRCAW ADDRESS OF ENABLE CCW @VA01527 00296000
- MVC IOBCSW+6(2),6(R1) RESIDUAL COUNT @VA01527 00297000
- LA R1,8(0,R1) THE ONE THAT WAS ACTIVE @VA01527 00298000
- ICM R1,8,IOBRCAW RESTORE CAW KEY @VA01527 00299000
- ST R1,IOBCSW SET AS CSW ADDRESS @VA01527 00300000
- LA R1,(CE+DE+UE)*256 CSW STATUS @VA01527 00301000
- STH R1,IOBCSW+4 . . . @VA01527 00302000
- CALL DMKSTKIO @VA01527 00303000
- B STORECSW GIVE CC=1 TO HIO @VA01527 00304000
- EJECT 00305000
- HIO EQU * HERE TO DO REAL LIVE HIO 00306000
- SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 00307000
- L R3,VDEVREAL GET POINTER TO REAL DEVICE BLOK 00308000
- LTR R3,R3 ANY RDEVBLOK ? @VA13707 00308100
- BZ VIOEXITX EXIT, NO NEED TO PERFORM HDV @VA13707 00308200
- L R10,RDEVAIOB-RDEVBLOK(R3) GET POINTER TO ACTIVE IOBLOK 00309000
- LTR R10,R10 IS THERE ONE ?? 00310000
- BZ VIOEXITX NO -- 00311000
- CL R10,VDEVIOB IS IT THE CURRENT OPERATION? @VA03436 00312000
- BNE VIOEXITX NO--EXIT @VA03436 00313000
- LH R1,VCHADD GET CHANNEL ADDRESS 00314000
- SRL R1,7 TIMES 2 00315000
- L R15,=A(DMKVIOXK) ADDRESS THE MASK TABLE @VA05037 00316000
- LH R1,0(R1,R15) PICK UP "TURN-OFF" MASK @VA05037 00317000
- N R1,VMIOACTV-2 TURN OFF PREVIOUSLY ACTIVE CHANNEL 00318000
- STH R1,VMIOACTV ... 00319000
- TM VCHTYPE,VCHBMX BMX CHANNEL? @VA03150 00320000
- BNO *+8 NO, SKIP CALL TO SCAN @VA03150 00321000
- BAL R14,SCANALL ANYTHING ELSE GOING ON ? @VA03150 00322000
- LH R5,IOBRADD GET REAL DEVICE ADDRESS 00323000
- HDV 0(R5) HALT THE I/O @VA03436 00324000
- AIF (NOT &TRACE(9)).NTR1 @VA03431 00325000
- BAL R15,HIOTRACE TRACE HALT I/O @VA03431 00326000
- DC X'0F00' TRACE ENTRY FLAG @VA03431 00327000
- .NTR1 ANOP 00328000
- BZ VIOEXITX CC = 0, INTERRUPT PENDING 00329000
- BC 4,HIOSTCSW CC = 1, CSW STORED 00330000
- LA R2,X'20' SET CC = 2 00331000
- BC 2,VIOEXIT2 IT WAS CONDITION CODE 2 EXIT @VA10542 00332000
- LA R2,X'30' SET CC 3 00333000
- B VIOEXIT AND LEAVE 00334000
- SPACE 00335000
- HIOSTCSW EQU * HERE WHEN CSW IS STORED BY REAL HIO 00336000
- CLC CSW+4(2),ZEROES HALT DEVICE CC=1 STATUS=0 @VA10542 00337000
- BNE HIONZSTA NO BRANCH @VA10542 00338000
- NI VDEVSTAT,255-VDEVCHBS RESET CHANNEL BUSY @VA10542 00339000
- HIONZSTA EQU * @VA10542 00340000
- LH R5,CSW+4 GET STATUS FROM REAL CSW 00341000
- B STORECSW AND GO STORE IN VIRTUAL CSW 00342000
- EJECT 00343000
- CTCAIOB EQU * @VA08496 00344000
- OI VMRSTAT,VMIOWAIT PUT VIRTUAL MACHINE IN IOWAIT @VA08496 00345000
- LA R0,IOBSIZE GET FREE STORAGE FOR AN IOBLOK 00346000
- CALL DMKFREE ... 00347000
- LR R10,R1 ADDRESS VIA GR10 00348000
- USING IOBLOK,R10 00349000
- XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR ENTIRE BLOCK 00350000
- * (NOTE: "IOBLINK" FILLED IN BY DMKIOSQV) 00351000
- STH R13,IOBVADD SET VIRTUAL DEVICE ADDRESS 00352000
- L R1,=A(DMKVIOIN) SET INTERRUPT RETURN 00353000
- ST R1,IOBIRA ... 00354000
- ST R10,VDEVIOB SAVE ACTIVE IOBLOK ADDRESS 00355000
- STC R3,IOBSPEC SET 'IOBTIO' OR 'IOBHIO' FLAG 00356000
- OI VDEVSTAT,VDEVBUSY MARK THE DEVICE TEMPORARILY BUSY 00357000
- CALL DMKIOSQV SCHEDULE THE TEST I/O OR HALT I/O 00358000
- B VIOEXITY EXIT - NO TRACING YET 00359000
- SPACE 1 00360000
- * CHECK FOR HALT I/O TRACE TABLE ENTRY 00361000
- AIF (NOT &TRACE(9)).NTR2 @VA03431 00362000
- HIOTRACE EQU * CP TRACE TABLE ENTRY FOR HIO @VA03431 00363000
- TM TRACFLG2,TRACBEF I/O TRACING ACTIVE? @VA03431 00364000
- BZ HIONOTRC NO -- RESTORE CC AND RETURN @VA03431 00365000
- TRACE CODE=TRCHALT,R14,R1,R2 @V4075A0 00366000
- STCM R15,8,1(R14) MOVE IN COND CODE @VA03431 00367000
- NI 1(R14),X'30' . . . AND ONLY THE COND CODE @VA03431 00368000
- STH R5,2(0,R14) SAVE THE REAL DEVICE ADDRESS @VA03431 00369000
- ST R10,4(0,R14) IOBLOK ADDRESS, IF ANY @VA03431 00370000
- MVC 8(4,R14),CAW CHANNEL ADDRESS WORD @VA03431 00371000
- XC 12(4,R14),12(R14) CLEAR LAST WORD @VA03431 00372000
- CLI 1(R14),X'10' CONDITION CODE ONE? @VA03431 00373000
- BNE *+10 NO -- DO NOT MOVE IN CSW @VA03431 00374000
- MVC 12(4,R14),CSW+4 MOVE IN CSW STATUS @VA03431 00375000
- HIONOTRC EQU * RESTORE COND CODE, RETURN @VA03431 00376000
- SPM R15 RESET COND CODE @VA03431 00377000
- B 2(0,R15) SKIP OVER TRACE FLAG ON RETURN @VA03431 00378000
- .NTR2 ANOP 00379000
- EJECT 00380000
- SCANALL STM R7,R8,TEMPSAVE SAVE THESE REGS @VA03150 00381000
- NI VCUSTAT,255-VCUACTV RESET CU ACTIVE FLAG @VA03150 00382000
- LA R4,2 LOAD INDEX INCREMENT @VA03150 00383000
- LA R5,30 LOAD INDEX COMPARAND VALUE @VA03150 00384000
- SR R3,R3 ZERO VCUDVTBL INDEX @VA03150 00385000
- RESNDV LH R8,VCUDVTBL(R3) LOAD NEXT VDEVBLOK INDEX @VA03150 00386000
- LTR R8,R8 DOES DEVICE EXIST ? @VA03150 00387000
- BM RESXDV NO, INDEX TO NEXT ONE @VA03150 00388000
- A R8,VMDVSTRT POINT TO VDEVBLOK @VA03150 00389000
- TM VDEVSTAT,VDEVBUSY IS DEVICE BUSY ? @VA03150 00390000
- BNO RESXDV NO, INDEX TO NEXT ONE @VA03150 00391000
- TM VDEVTYPC,CLASTERM IS THIS A TERMINAL? @VA03150 00392000
- BO RESXDV YES, SKIP IT AND CHECK NEXT DEV @VA03150 00393000
- OI VCUSTAT,VCUACTV C U STILL ACTIVE THEN @VA03150 00394000
- REACTIVE LH R1,VCHADD GET CHANNEL ADDRESS @VA03150 00395000
- SRL R1,7 TIMES 2 @VA03150 00396000
- L R15,=A(DMKVIOMK) ADDRESS THE MASK TABLE @VA05037 00397000
- LH R1,0(R1,R15) PICK UP "TURN-ON" MASK @VA05037 00398000
- O R1,VMIOACTV-2 ADD IT BACK @VA03150 00399000
- STH R1,VMIOACTV CHANNEL STILL ACTIVE @VA03150 00400000
- LM R7,R8,TEMPSAVE RESTORE REGS @VA03150 00401000
- SR R4,R4 CLEAR REG BEFORE RETURN @VA07336 00402000
- BR R14 RETURN @VA03150 00403000
- RESNCU LH R7,VCHCUTBL(R2) LOAD NEXT VCUBLOK INDEX @VA03150 00404000
- LTR R7,R7 DOES C U EXIST ? @VA03150 00405000
- BM RESXCU NO - GET NEXT ONE @VA03150 00406000
- A R7,VMCUSTRT POINT TO VCUBLOK @VA03150 00407000
- TM VCUSTAT,VCUACTV IS C U ACTIVE ? @VA03150 00408000
- BO REACTIVE RESET CHANNEL ACTIVE @VA03150 00409000
- B RESXCU CONTINUE WITH NEXT CU @VA03150 00410000
- RESXDV BXLE R3,R4,RESNDV BRANCH IF MORE DEVICES ON C U @VA03150 00411000
- SR R2,R2 ZERO VCHCUTBL INDEX @VA03150 00412000
- RESXCU BXLE R2,R4,RESNCU BRANCH IF MORE CONTROL UNITS @VA03150 00413000
- LM R7,R8,TEMPSAVE RESTORE REGS @VA03150 00414000
- SR R4,R4 CLEAR REG BEFORE RETURN @VA07336 00415000
- BR R14 RETURN @VA03150 00416000
- EJECT 00417000
- STTOTCSW EQU * HERE TO STORE CSW @VA05104 00418000
- LA R1,CSW GET VIRTUAL ADDRESS @VA05104 00419000
- SL R6,VMCHSTRT CHAN DISPOSITION @VA05104 00420000
- SL R7,VMCUSTRT CU DISPOSITION @VA05104 00421000
- SL R8,VMDVSTRT DEV DISPOSITION @VA05104 00422000
- TRANS 2,1,OPT=(BRING,DEFER) @VA05104 00423000
- AL R6,VMCHSTRT RESTORE CHAN ADDRESS @VA05104 00424000
- AL R7,VMCUSTRT RESTORE CU ADDRESS @VA05104 00425000
- AL R8,VMDVSTRT RESTORE DEV ADDRESS @VA05104 00426000
- SLL R5,16 MOVE CSW STATUS @VA05104 00427000
- B STCSW GO STORE TOTAL CSW @VA05104 00428000
- EJECT 00429000
- STORECSW EQU * HERE TO STORE THE CSW 00430000
- LA R1,CSW GET VIRTUAL ADDRESS 00431000
- SL R6,VMCHSTRT CHAN. DISP @VA01770 00432000
- SL R7,VMCUSTRT CU DISP @VA01770 00433000
- SL R8,VMDVSTRT DEV DISP @VA01770 00434000
- TRANS 2,1,OPT=(BRING,DEFER) GET USER PAGE 0 00435000
- AL R6,VMCHSTRT RESTORE CHAN ADDR @VA01770 00436000
- AL R7,VMCUSTRT RESTORE CU ADDR @VA01770 00437000
- AL R8,VMDVSTRT RESTORE DEV ADDR @VA01770 00438000
- STH R5,4(,R2) STORE STATUS -- 00439000
- LTR R4,R4 SAVE ENTIRE CSW ?? 00440000
- BZ *+8 NO -- 00441000
- STCSW STM R4,R5,0(R2) STORE THE WHOLE THING @VA05104 00442000
- TM 5(R2),CDC+CCC+IFCC ANY CHANNEL ERRORS ? @V508690 00443000
- BZ NOCHAN NO, CONTINUE NORMAL PROCESSING @V508690 00444000
- ICM R1,15,VDEVIOER GET ADDRESS OF IOERBLOK @V508690 00445000
- BZ NOCHAN NO IOERBLOK, FORGET IT @V508690 00446000
- CALL DMKCCHRF REFLECT CHANNEL ERROR TO VIRT. @V508690 00447000
- * MACH. 00448000
- NOCHAN EQU * @V508690 00449000
- AIF (NOT &TRACE(9)).TR1 **AIF** 00450000
- TM TRACFLG2,TRAC0D TRACING ACTIVE? 00451000
- BZ NOTRAC1 BRANCH IF NOT 00452000
- TRACE CODE=TRCCSW,R15,R14,R3 @V4075A0 00453000
- MVC 1(1,R15),VMINST SAVE OPCODE OF IO INST. 00454000
- STH R13,2(,R15) SAVE VIRTUAL DEVICE ADDRESS 00455000
- ST R11,4(,R15) SAVE VMBLOK ADDRESS 00456000
- MVC 8(8,R15),0(R2) SAVE CSW 00457000
- NOTRAC1 EQU * 00458000
- .TR1 ANOP 00459000
- LA R2,X'10' SET CONDITION CODE ONE 00460000
- SPACE 00461000
- CLM R2,B'1100',VDEVINTS LAST INTERRUPT CLEARED ? 00462000
- BNE VIOEXIT NO -- 00463000
- LH R3,VDEVADD GET DEVICE ADDRESS (0-F) 00464000
- AR R3,R3 MULTIPLY BY 2 00465000
- L R15,=A(DMKVIOXK) ADDRESS THE UNFLAG TABLE @VA05037 00466000
- LA R3,0(R3,R15) POINT TO UNFLAGGING MASK @VA05037 00467000
- NC VCUDVINT,0(R3) UNFLAG INTERRUPTING DEVICE @VA01232 00468000
- BNZ VIOEXIT MORE PENDING IN THE C.U. 00469000
- LH R3,VCUADD GET CONTROL UNIT ADDRESS (00-F0) 00470000
- SRL R3,3 TIMES 2 00471000
- LA R3,0(R3,R15) POINT TO UNFLAGGING MASK @VA05037 00472000
- NC VCHCUINT,0(R3) UNFLAG INTERRUPTING C.U. @VA01232 00473000
- BNZ VIOEXIT MORE PENDING IN THE CHANNEL 00474000
- LH R3,VCHADD GET CHANNEL ADDRESS (000-600) 00475000
- SRL R3,7 TIMES 2 00476000
- LA R3,0(R3,R15) POINT TO MASK ENTRY @VA05037 00477000
- NC VMIOINT,0(R3) UNFLAG PENDING CHANNEL @VA07503 00478000
- BNZ VIOEXIT MORE INTERRUPTS PENDING 00479000
- SPACE 00480000
- NI VMPEND,X'FF'-VMIOPND UNFLAG SUMMARY PENDING BIT 00481000
- B VIOEXIT @VA10542 00482000
- SPACE 3 00483000
- * 00484000
- * EXITS FROM DMKVSJEX 00485000
- * 00486000
- SPACE 3 00487000
- VIOEXIT2 NI VDEVSTAT,255-VDEVCHBS RESET CHANNEL BUSY @VA10542 00488000
- VIOEXIT EQU * 00489000
- * 00490000
- * TEST FOR A CONDITION CODE 3. IF FOUND, GO TO TEST 00491000
- * FOR THE SITUATION WHERE A VIRTUAL DEVICE IS 00492000
- * NOT YET DEFINED BECAUSE AN MSS MOUNT IS IN 00493000
- * PROCESS 00494000
- * 00495000
- LA R0,CC3 CONDITION CODE 3 @V60B6B8 00496000
- CR R0,R2 @V60B6B8 00497000
- BE CHKMOUNT VIRT DEV NOT AVAIL, TEST FOR @V60B6B8 00498000
- * MSS MOUNT 00499000
- TESTEC EQU * @V60B6B8 00500000
- TM VMESTAT,VMEXTCM EXTENDED CONTROL MACHINE ?? 00501000
- BZ VIOSETC NO -- 00502000
- EX R2,SETECC SET EC-MODE PSW CC 00503000
- B VIOEXITX AND LEAVE 00504000
- VIOSETC EQU * 00505000
- EX R2,SETCC SET CONDITION CODE 00506000
- SPACE 2 00507000
- VIOEXITX EQU * FINISHED WITH SIMULATION 00508000
- AIF (NOT &TRACE(6)).TRA3 **AIF** 00509000
- TM VMTRCTL,VMTRSIO V.M. SIO TRACING WANTED ? 00510000
- BZ VIOEXITY NOT TODAY. 00511000
- SLR R10,R10 YES - SIGNAL NO IOBLOK TO BE USED, 00512000
- LR R1,R13 VIRTUAL ADDRESS INTO R1 PLEASE 00513000
- BAL R9,GETLOCK GET THE SYSTEM LOCK @VA09727 00514000
- CALL DMKTRDSI CALL TRACE RTN SIO ENTRY POINT @V4M0240 00515000
- .TRA3 ANOP 00516000
- SPACE 00517000
- VIOEXITY EQU * CONTINUE: 00518000
- TM VMDSTAT,VMTIO VM IN TIO OR SIO BUSY LOOP ?? 00519000
- BNO VIONWAIT NO- LEAVE DISPATCHABLE 00520000
- CLI VDEVTYPC,CLASTERM SLOW SPEED TERMINAL DEVICE 00521000
- BNE VIOGODSP NO- LEAVE NON-DISPATCHABLE 00522000
- OI VMRSTAT,VMIDLE YES- DROP THE TERMINAL USER FROM Q 00523000
- B VIOGODSP AND LEAVE NON-DISPATCHABLE 00524000
- SPACE 00525000
- VIONWAIT NI VMRSTAT,X'FF'-VMEXWAIT TAKE OUT OF SIMULATION WAIT 00526000
- AIF (NOT &AP).APCHK5 00527000
- TM APSTAT1,APUOPER RUNNING AN AP SYSTEM? @VA08305 00528000
- BNO FASTDSP NO, FAST DISPATCH @VA08305 00529000
- L R15,=A(DMKLOKSY+2) POINT AT SYSTEM LOCK @VA08305 00530000
- CLC LPUADDR,0(R15) IS THE LOCK ALREADY HELD @VA08305 00531000
- BNE FASTDSP NO, CANNOT EXIT TO MAIN @VA08305 00532000
- L R15,PREFIXB ACCESS OTHER PSA @VA09257 00533000
- TM XCPEND-PSA(R15),XCDISP DISPATCH PENDING? @VA09257 00534000
- BZ CKRQ NO DISPATCH PENDING. @VA09257 00535000
- LOCK RELEASE,TYPE=SYS YES,RELEASE GLOBAL LOCK. @VA09257 00536000
- B FASTDSP FAST REDISPATCH @VA09257 00537000
- SPACE 00538000
- CKRQ DS 0H @VA09257 00539000
- L R15,=A(DMKDSPRQ) STACKED REQUEST BLOCK POINTER @V408246 00540000
- C R15,IOBFPNT-IOBLOK(,R15) ANY PRESENTS WAITING @V408246 00541000
- * FROM IOS? 00542000
- BNE VIOGODSP YES, BETTER CHECK ON THEM @V408246 00543000
- .APCHK5 ANOP 00544000
- SPACE 00545000
- FASTDSP GOTO DMKDSPA FAST RESTART @VA08305 00546000
- SPACE 00547000
- VIOGODSP EQU * 00548000
- GOTO DMKDSPCH AND TO TO DISPATCH 00549000
- EJECT 00550000
- * 00551000
- * SUBROUTINE USED BY DMKVSI AND DMKVSJ 00552000
- * EXIT FROM THE ROUTINE IS ON REG 9 00553000
- * 00554000
- GETLOCK EQU * TEST IF LOCK ALREADY HELD @VA08305 00555000
- AIF (NOT &AP).APCHK6 00556000
- TM APSTAT1,APUOPER IS THIS AN AP SYSTEM? @VA08305 00557000
- BNOR R9 NO, RETURN TO CALLER @VA08305 00558000
- L R15,=A(DMKLOKSY) GET ADDRESS OF SYSTEM LOCK @VA08305 00559000
- L R15,0(R15) PICK UP THE LOCK WORD @VA08305 00560000
- LH R14,LPUADDR AND PROCESSOR ID @VA08305 00561000
- CR R14,R15 IS THE SYSTEM LOCK HELD? @VA08305 00562000
- BCR 8,R9 YES,LOCK HELD @VA08305 00563000
- LTR R15,R15 IS THE LOCK AVAILABLE @VA08305 00564000
- BNZ DEFEREX NO, DON'T WASTE TIME TRYING @VA08305 00565000
- LOCK OBTAIN,TYPE=SYS,SPIN=NO,SAVE @VA08305 00566000
- BCR 8,R9 GOT THE LOCK, RETURN TO CALLER @VA08305 00567000
- DEFEREX L R15,VMDFTPNT LOCK NOT OBTAINABLE.... @VA08305 00568000
- USING CPEXBLOK,R15 GET DEFERRED EXECUTION-BLOCK, @VA08305 00569000
- STM R0,R14,CPEXREGS SAVE CALLERS REGS @VA08305 00570000
- LA R14,LOCKRTN GET ADDR OF EXECUTION RETURN PT @VA08305 00571000
- ST R14,CPEXADD AND EXECUTION RETURN POINT @VA08305 00572000
- DROP R15 IS IN REG 14 @VA08305 00573000
- LR R1,R15 AND DEFER EXECUTION OF @VA08305 00574000
- CALL DMKSTKDE @VA08305 00575000
- GOTO DMKDSPRU @VA08305 00576000
- LOCKRTN DS 0H DEFERRED EXECUTION RETURN POINT @VA08305 00577000
- LCTL C1,C1,VMSEG RELOAD CONTROL REG 1 AFTER DEFER @VA08305 00578000
- .APCHK6 ANOP 00579000
- BR R9 RETURN TO CALLER @VA08305 00580000
- SPACE 2 00581000
- SETCC OI VMPSW+4,0 EXECUTED TO SET CONDITION CODE 00582000
- SETECC OI VMPSW+2,0 EXECUTED TO SET CC IN EC-MODE PSW 00583000
- CC3 EQU X'30' CONDITION CODE 3 @V60B6B8 00584000
- EJECT 00585000
- CHKMOUNT EQU * @V60B6B8 00586000
- * 00587000
- * AT THIS POINT WE ARE ABOUT TO RETURN TO THE CALLER 00588000
- * WITH A CONDITION CODE 3 (DEVICE NOT AVAILABLE). 00589000
- * IF THE MSS IS IN THE SYSTEM, THE DEVICE MAY 00590000
- * BE "NOT AVAILABLE" BECAUSE AN MSS MOUNT IS IN 00591000
- * PROCESS. IF THAT IS THE CASE, STACK THIS VIRTUAL 00592000
- * REQUEST UNTIL THE MOUNT COMPLETES. 00593000
- * 00594000
- TM PSAMSS,MSSPRES IS THE MSS IN THIS SYSTEM @V60B6B8 00595000
- BZ TESTEC NO, STANDARD RETURN @V60B6B8 00596000
- L R3,=V(DMKSSSMQ) WAIT Q FOR MSS MOUNTS @V60B6B8 00597000
- L R3,0(R3) PICK UP ACTUAL QUEUE @V60B6B8 00598000
- USING OSVSCOM,R3 ASSEMBLER ADDRESSABILITY @V60B6B8 00599000
- TESTCOM EQU * IS THERE A MSSCOM BLOCK @V60B6B8 00600000
- LTR R3,R3 IS THE CHAIN PTR 0 @V60B6B8 00601000
- BZ TESTEC YES, WERE NOT WAITING ON MSS @V60B6B8 00602000
- CLC VMUSER(VMUSERL),MSSUSER ARE WE WAITING @V60B6B8 00603000
- BNE NXTCOM NOT ON THIS BLOCK @V60B6B8 00604000
- L R4,MSSTASK1 TASK THAT IS WAITING @V60B6B8 00605000
- CH R13,CPEXMISC-CPEXBLOK(R4) VIRT DEV WAITING @V60B6B8 00606000
- BNE NXTCOM THIS VIRT DEV NOT WAITING @V60B6B8 00607000
- LA R0,CPEXSIZE SIZE OF A CPEXBLOK @V60B6B8 00608000
- CALL DMKFREE GET DYNAMIC STORAGE @V60B6B8 00609000
- USING CPEXBLOK,R1 @V60B6B8 00610000
- ST R1,MSSTASK3 @VMI2006 00611000
- STM R0,R15,CPEXREGS SAVE REGS FOR LATER DISPATCH @V60B6B8 00612000
- L R0,=A(DMKVSIEX) REDISPATCH ADDRESS @VA12128 00613000
- ST R0,CPEXADD FIELD FOR DISPATCHER LATER @V60B6B8 00614000
- ST R0,CPEXR12 FIELD FOR DMKVSI BASE LATER @VA12128 00615000
- ST R13,CPEXMISC SAVE VADDR WHICH IS WAITING @V60B6B8 00616000
- GOTO DMKDSPCH WAIT FOR THE MSS @V60B6B8 00617000
- DROP R1 @V60B6B8 00618000
- NXTCOM EQU * GET NEXT MSSCOM BLOCK @V60B6B8 00619000
- L R3,MSSNEXT CHAIN PTR @V60B6B8 00620000
- B TESTCOM SEE IF THERE IS ONE @V60B6B8 00621000
- DROP R3 @V60B6B8 00622000
- VMUSERL EQU 8 LENGTH OF VMUSER FIELD @V60B6B8 00623000
- EJECT 00624000
- DMKVSJHI DC F'0' COUNT OF VIRT. HIO'S @VA12128 00625000
- DMKVSJHD DC F'0' COUNT OF VIRT. HDV'S @VA12128 00626000
- DMKVSJCC DC F'0' COUNT OF VIRTUAL CLCH'S @VA12128 00627000
- SPACE 00628000
- LTORG 00629000
- EJECT 00630000
- COPY VBLOKS @VA04320 00631000
- OSVSCOM MSSCOM @V60B6B8 00632000
- COPY VCTCA @VA04320 00633000
- COPY RBLOKS @VA04320 00634000
- COPY VMBLOK @VA04320 00635000
- COPY TREXT @VA04320 00636000
- COPY IOBLOKS @VA04320 00637000
- COPY IOER @VA04320 00638000
- PSA @VA04320 00639000
- COPY DEVTYPES @VA04320 00640000
- COPY EQU @VA04320 00641000
- COPY SAVE @VA08305 00642000
- END DMKVSJ @VA04320 00643000
ibm/vm370-lib/cp/dmkvsj.assemble_src.txt ยท Last modified: 2023/08/06 13:37 by Site Administrator