ibm:vm370-lib:cp:dmkvdc.assemble_src
Table of Contents
DMKVDC Source
References
- Fixes Applied : 16
- This Source Date : Thursday, December 14, 1978
- Last Fix ID : [HRC106DK]
Source Listing
- DMKVDC.ASSEMBLE.txt
- VDC TITLE 'DMKVDC (CP) VM/370 - RELEASE 6' 00001000
- ISEQ 73,80 VALIDATE SEQUENCING OF SYSIN @V407466 00002000
- COPY OPTIONS @V407466 00003000
- COPY LOCAL @V407466 00004000
- *. 00005000
- * MODULE NAME - 00006000
- * 00007000
- * DMKVDC 00008000
- * 00009000
- * CONTENTS - 00010000
- * 00011000
- * DMKVDCPS - ACQUIRE VIRTUAL BLOCKS FOR DEVICES WHICH ARE 00012000
- * LIKELY TO BE ATTACHED BY THE 'ATTACH' COMMAND. 00013000
- * 00014000
- * DMKVDCAL - SUBROUTINE TO CHAIN RDEVBLOKS OFF THE 00015000
- * ALLOCATION CHAIN ANCHORS. 00016000
- * 00017000
- * DMKVDCSC - COMMON 'ATTACH/DETACH' COMMAND LINE SCANNER 00018000
- * AND SYNTAX CHECKER. 00019000
- * 00020000
- *. 00021000
- DMKVDC START 0 @V407490 00022000
- DC CL8'DMKVDC' IDENTIFY ATTACH RANGE/MULT @V407466 00023000
- * PRESCAN 00024000
- USING PSA,R0 @V407466 00025000
- USING VMBLOK,R11 @V407466 00026000
- USING SAVEAREA,R13 @V407466 00027000
- USING VDCWORK,R4 @V407466 00028000
- USING IOBLOK,R3 IOBLOK ADDRESSABILITY @V407466 00029000
- EXTRN DMKVIOMK @V407466 00030000
- EXTRN DMKCFCSC RANGE SCAN @V407466 00031000
- EXTRN DMKSCNFD SCAN COMMAND LINE @V407466 00032000
- EXTRN DMKSCNAU USER LOGGED ON @V407466 00033000
- EXTRN DMKCVTHB @V407466 00034000
- EXTRN DMKFRERC @V407466 00035000
- EXTRN DMKSCNRU @V407466 00036000
- EXTRN DMKIOSQR @V407466 00037000
- EXTRN DMKSCNVU @V407466 00038000
- EXTRN DMKPGTP5 @V407466 00039000
- EXTRN DMKPGTT5 @V407466 00040000
- EXTRN DMKPGTP0 @V407466 00041000
- EXTRN DMKPGTT0 @V407466 00042000
- EXTRN DMKPGTP4 @V407466 00043000
- EXTRN DMKPGTT4 @V407466 00044000
- EXTRN DMKSYSOW @V407466 00045000
- EXTRN DMKPGTTM @V407466 00046000
- EXTRN DMKPGT90 @V407466 00047000
- EXTRN DMKPGT4P @V407466 00048000
- EXTRN DMKPGT4T @V407466 00049000
- EXTRN DMKPGT5P @V407466 00050000
- EXTRN DMKPGT5T @V407466 00051000
- EXTRN DMKPGT7P HRC106DK 00051100
- EXTRN DMKPGT7T HRC106DK 00051200
- EXTRN DMKPGT8P HRC106DK 00051300
- EXTRN DMKPGT8T HRC106DK 00051400
- EJECT 00052000
- *. 00053000
- * SUBROUTINE NAME - 00054000
- * DMKVDCPS - CREATE VIRTUAL BLOCKS FOR DEVICES LIKELY 00055000
- * TO BE ATTACHED BY THE 'ATTACH' COMMAND. 00056000
- * 00057000
- * FUNCTION - 00058000
- * TO ACQUIRE FREE STORAGE IN ADVANCE FOR VIRTUAL BLOCKS 00059000
- * FOR ALL THOSE DEVICES WHICH ARE LIKELY TO BE ATTACHED 00060000
- * ON THIS COMMAND EXECUTION. 00061000
- * 00062000
- * ATTRIBUTES - 00063000
- * 00064000
- * REENTRANT, PAGEABLE, CALLED VIA SVC 00065000
- * 00066000
- * ENTRY CONDITIONS - 00067000
- * 00068000
- * GPR11 - ADDRESS OF ATTACHEE'S VMBLOK 00069000
- * 00070000
- * GPR3 = 0; RANGE HAS BEEN SPECIFIED ON COMMAND LINE. 00071000
- * GPR2 - FIRST ADDRESS IN RANGE IN BINARY 00072000
- * GPR4 - LAST ADDRESS IN RANGE IN BINARY 00073000
- * 00074000
- * OR 00075000
- * 00076000
- * GPR3 NONZERO; MULTIPLE ADDRESSES SPECIFIED ON COMMAND LINE 00077000
- * GPR3 - CONTAINS ADDRESS OF FREE STORAGE BUFFER USED BY 00078000
- * DMKVDA CONTAINING MULTIPLE ADDRESSES IN BINARY FORM. 00079000
- * 00080000
- * EXIT CONDITIONS: 00081000
- * 00082000
- * CC=0; IF SUCCESSFUL (AND GPR2 = 0) 00083000
- * CC=1; IF UNSUCCESSFUL - ERROR CODE 32 RETURNED IN GPR2 00084000
- * ERROR CODE 124: EXCEEDED MAX 00084500
- * 00085000
- * CALLS TO OTHER ROUTINES - 00086000
- * 00087000
- * DMKFRERC - ACQUIRE FREE STORAGE WITH RETURN CODE IN REQUEST 00088000
- * CANNOT BE SATISFIED. 00089000
- * DMKSCNRU - FIND RDEVBLOK 00090000
- * DMKIOSQR - SCHEDULE I/O REQUEST FOR TIO 00091000
- * DMKSCNVU - FIND VIRTUAL BLOCKS 00092000
- * DMKVIOMK - ADDRESS OF MASK TABLE 00093000
- * 00094000
- * EXTERNAL REFERENCES - 00095000
- * 00096000
- * NONE 00097000
- * 00098000
- * TABLES/WORK AREAS - 00099000
- * 00100000
- * DMKVDA SAVEAREA 00101000
- * IOBLOK 00102000
- * CPEXBLOK 00103000
- * DMKVDC WORK AREA 00104000
- * RDEVBLOK 00105000
- * IOERBLOK 00106000
- * VCHBLOK 00107000
- * VCUBLOK 00108000
- * VDEVBLOK 00109000
- * MASK TABLE IN DMKVIO (DMKVIOMK) 00110000
- * 00111000
- * REGISTER USAGE - 00112000
- * 00113000
- * GPR4 - WORK AREA ADDRESS 00114000
- * GPR5 - BAL REGISTER 00115000
- * GPR10 - ADDRESS OF ATTACHEE'S VMBLOK/ADDRESS OF IOBLOK 00116000
- * GPR11 - ADDRESS OF ATTACHEE'S VMBLOK 00117000
- * GPR12 - BASE REGISTER 00118000
- * GPR13 - ADDRESS OF STANDARD SAVEAREA/ADDRESS OF DMKVDA 00119000
- * SAVEAREA 00120000
- * 00121000
- * GPR0-GPR3 - WORK REGISTERS 00122000
- * GPR6-GPR9 - WORK REGISTERS 00123000
- * GPR14-GPR15 - WORK REGISTERS 00124000
- * 00125000
- * NOTES - NONE 00126000
- * 00127000
- * OPERATION - 00128000
- * 1. ACQUIRE FREE STORAGE WORK AREA FOR COUNTERS ETC. 00129000
- * 2. FIND RDEVBLOK FOR SPECIFIED ADDRESS 00130000
- * IF THE DEVICE IS OFFLINE OR ALREADY DEDICATED, PROCESS 00131000
- * NEXT ADDRESS. 00132000
- * 3. ACQUIRE IOBLOK AND CPEXBLOK AND SCHEDULE TIO TO THE 00133000
- * DEVICE BY CALLING DMKIOSQR. IF THE DEVICE DOES NOT EXIST, 00134000
- * SKIP TO PROCESS NEXT ADDRESS. 00135000
- * 4. SEE IF VIRTUAL DEVICE IS ALREADY DEFINED (DMKSCNVU). 00136000
- * IF THE DEVICE IS ALREADY DEFINED, SKIP TO PROCESS NEXT 00137000
- * ADDRESS. IF THE CHANNEL IS DEDICATED, SKIP TO PROCESS 00138000
- * NEXT DEVICE. OTHERWISE, KEEP A COUNTER FOR THE NUMBER 00139000
- * OF VCHBLOKS/VCUBLOKS/VDEVBLOKS WHICH ARE LIKELY TO BE 00140000
- * CREATED IN THIS COMMAND EXECUTION. PERFORM THIS FUNCTION 00141000
- * FOR ALL ADDRESSES IN THE RANGE/ALL MULTIPLE DEVICE ADDRESSES. 00142000
- * 5. RELEASE IOBLOK AND CPEXBLOK AFTER THIS PHASE IS COMPLETE. 00143000
- * 6. DETERMINE NUMBER OF UNUSED (EMPTY SLOTS) IN CURRENT 00144000
- * TABLES OF VCHBLOKS/VCUBLOKS/VDEVBLOKS. 00145000
- * 7. SUBTRACT NUMBER OF BLOCKS OF EACH TYPE WHICH WILL BE 00146000
- * CREATED AS A RESULT OF THIS COMMAND EXECUTION FROM THE NUMBER 00147000
- * OF CURRENTLY AVAILABLE BLOCKS OF EACH TYPE TO DETERMINE THE 00148000
- * EXACT NUMBER OF NEW VCHBLOKS/VCUBLOKS/VDEVBLOKS WHICH MUST BE 00149000
- * CREATED IN THIS COMMAND EXECUTION. 00150000
- * 8. ACQUIRE STORAGE FOR NEW VIRTUAL BLOCKS REQUIRED BY 00151000
- * CALLING DMKFRERC. IF STORAGE CANNOT BE OBTAINED, RETURN TO 00152000
- * DMKVDA WITH GPR2=32. DMKVDA WILL THEN ISSUE ERROR MESSAGE 00153000
- * DMKVDA131E. MOVE OLD TABLE OF VCHBLOKS/VCUBLOKS/VDEVBLOKS 00154000
- * TO NEWLY ACQUIRED TABLES AND MARK ALL ADDITIONAL BLOCKS AS 00155000
- * EMPTY SLOTS. @VA13217 00156000
- * 00157000
- * 9. RELEASE WORK AREA AND EXIT. 00158000
- * 00159000
- * RESPONSES - 00160000
- * NONE 00161000
- * 00162000
- * ERROR MESSAGES - 00163000
- * NONE 00164000
- *. 00165000
- EJECT 00166000
- DMKVDCPS RELOC @V407466 00167000
- USING VDCWORK,R4 VDC WORK AREA ADDRESSABILITY @V407466 00168000
- LR R2,R13 PTR TO CALLER'S SAVEAREA @V407466 00169000
- L R13,SAVER13 R13 CONTAINS VDA SAVEAREA ADDR @V407466 00170000
- ST R2,SAVEWRK6 STORE VDC SAVE IN VDA SAVEWRK6 @V407466 00171000
- LTR R3,R3 MULTIPLE ADDRESSES OR RANGE? @V407466 00172000
- BNZ PRESCAND MULTIPLES SPECIFIED @V407466 00173000
- L R2,VDCRADD1 FIRST ADDRESS IN RANGE @V407466 00174000
- SLR R3,R3 ZERO R3 FOR INDICATOR @V407466 00175000
- SLR R4,R4 CLEAR REGISTER 4 @V407466 00176000
- PRESCANB BAL R5,PRESCANA GO PERFORM PRESCAN @V407466 00177000
- NI VDCBYTE1,X'FF'-(ATTCTCA+DED2305) TURN BITS OFF @V407490 00178000
- LTR R3,R3 IOBLOK ALREADY OBTAINED? @V407466 00179000
- BZ SKIPCLR NO, SKIP CSW AND STATUS CLEAR @V407466 00180000
- MVI IOBSTAT,X'00' CLEAR IOBSTAT FOR NEXT TIME @V407466 00181000
- XC IOBCSW(L'IOBCSW),IOBCSW CLEAR CSW FOR NEXT TI@V407466 00182000
- SKIPCLR LA R2,1(,R2) NEXT ADDRESS IN RANGE @V407466 00183000
- CH R2,VDCRADD2 COMPARE WITH RADDR2 IN RANGE @V407466 00184000
- BNH PRESCANB STILL WITHIN RANGE @V407466 00185000
- FRETBLK LTR R3,R3 IOBLOK ALREADY OBTAINED? @V407466 00186000
- BZ SKIPFRET NO, SKIP RELEASE OF BLOCKS @V407466 00187000
- PRESCANC L R1,IOBMISC2 POINTER TO CPEXBLOK @V407466 00188000
- LA R0,CPEXSIZE SIZE OF CPEXBLOK @V407466 00189000
- CALL DMKFRET RELEASE IT @V407466 00190000
- LR R1,R3 IOBLOK POINTER @V407466 00191000
- LA R0,IOBSIZE SIZE OF IOBLOK @V407466 00192000
- CALL DMKFRET RELEASE IT @V407466 00193000
- SPACE 2 00194000
- SKIPFRET LA R2,VDCCHMAP POINT TO BIT MAP FOR VCHBLOKS @V407466 00195000
- LA R3,COUNT2 NUMBER OF BYTES IN VDCCHMAP (2) @V407466 00196000
- BAL R5,COUNTBIT NUMBER OF VCHBLOKS @V407466 00197000
- STH R6,VDCVCH NUMBER OF REQUIRED VCHBLOKS @V407466 00198000
- LA R3,COUNT32 32 BYTES IN FIELD TO BE SCANNED @V407466 00199000
- BAL R5,COUNTBIT NUMBER OF EMPTY VCUBLOKS @V407466 00200000
- STH R6,VDCVCU NUMBER OF REQUIRED VCUBLOKS @V407466 00201000
- EMPTY LA R0,VCHSIZE SIZE OF VCHBLOK @V407466 00202000
- SLR R2,R2 MAKE SURE R2 ZERO TO START @V407466 00203000
- L R1,VMCHSTRT VCHBLOK TABLE POINTER @V407466 00204000
- LH R2,VMCHCNT NUMBER BLOCKS IN TABLE @V407466 00205000
- SLR R6,R6 CLEAR R6 @V407466 00206000
- BAL R5,EMPSLOT SEE IF EMPTY SLOTS @V407466 00207000
- STH R6,VDCVCHE SAVE EMPTY VCHBLOK COUNT @V407466 00208000
- SLR R6,R6 CLEAR R6 FOR NEXT COUNTER @V407466 00209000
- LA R0,VCUSIZE SIZE OF VCUBLOK @V407466 00210000
- L R1,VMCUSTRT VCUBLOK TABLE POINTER @V407466 00211000
- LH R2,VMCUCNT NUMBER OF VCUBLOKS @V407466 00212000
- BAL R5,EMPSLOT FIND EMPTY SLOTS IN VCUBLOKS @V407466 00213000
- STH R6,VDCVCUE NUMBER OF EMPTY VCUBLOK SLOTS @V407466 00214000
- SLR R6,R6 CLEAR R6 FOR NEXT COUNTER @V407466 00215000
- LA R0,VDEVSIZE SIZE OF VDEVBLOK @V407466 00216000
- L R1,VMDVSTRT POINT TO VDEVBLOK TABLE @V407466 00217000
- LH R2,VMDVCNT NUMBER OF VDEVBLOKS IN TABLE @V407466 00218000
- BAL R5,EMPSLOT FIND EMPTY SLOTS IN VDEVBLOKS @V407466 00219000
- STH R6,VDCVDEVE NUMBER OF EMPTY VDEVBLOK SLOTS @V407466 00220000
- LH R6,VDCVDEV NO. REQUIRED VDEVBLOKS @V407466 00221000
- LH R7,VDCVDEVE NO. EMPTY VDEVBLOKS WHICH EXIST @V407466 00222000
- SR R6,R7 ACTUAL NO. VDEVBLOKS TO BE @V407466 00223000
- * ACQUIRED 00224000
- BC 12,ACQVCU < OR = 0; ACQUIRE NO VDEVBLOKS @V407466 00225000
- SLR R3,R3 R3 ZERO TO START @V407466 00226000
- LH R2,VMDVCNT NO. EXISTING VDEVBLOKS @V407466 00227000
- LA R9,VDEVSIZE VDEVBLOK SIZE IN DBL. WORDS @V407466 00228000
- LA R1,VDEVSIZE ...SAME @V407466 00229000
- L R8,VMDVSTRT PTR. TO EXISTING VDEVBLOK TABLE @V407466 00230000
- OI VDCFLAG,DEVBLD IND. BUILDING VDEVBLOKS @V407466 00231000
- BAL R5,BLDBLOK CREATE NEW VDEVBLOK TAB (OLD+NEW)@V407466 00232000
- SLR R8,R8 CLEAR R8 @V407466 00233000
- LA R7,VDEVSIZE SIZE OF VDEVBLOK IN DBL.WDS. @V407466 00234000
- LH R8,VMDVCNT NUMBER VDEVBLOKS IN OLD TABLE @V407466 00235000
- MR R6,R8 NO. DBL. WDS. IN OLD TABLE @V407466 00236000
- LR R0,R7 INTO R0 FOR FRET @V407466 00237000
- LR R5,R1 SAVE NEW TABLE PTR TEMP. @V407466 00238000
- L R1,VMDVSTRT OLD TABLE PTR @V407466 00239000
- CALL DMKFRET RELEASE OLD TABLE @V407466 00240000
- ST R5,VMDVSTRT STORE NEW TABLE POINTER @V407466 00241000
- STH R3,VMDVCNT TOT. NO. VDEVBLOKS IN NEW TABLE @V407466 00242000
- ACQVCU SLR R6,R6 CLEAR R6 @V407466 00243000
- LH R6,VDCVCU NO. REQUIRED VCUBLOKS @V407466 00244000
- LH R7,VDCVCUE NO. EMPTY VCUBLOKS @V407466 00245000
- SR R6,R7 ACT. NO. VCUBLOKS TO BE ACQUIRED @V407466 00246000
- BC 12,ACQVCH < OR = 0; ACQUIRE NO VCUBLOKS @V407466 00247000
- SLR R3,R3 ... @V407466 00248000
- LH R2,VMCUCNT NO. EXISTING VCUBLOKS @V407466 00249000
- LA R9,VCUSIZE VCUBLOK SIZE IN DBL. WORDS @V407466 00250000
- LA R1,VCUSIZE VCUBLOK SIZE IN DBL. WORDS @V407466 00251000
- L R8,VMCUSTRT PTR. TO TABLE OF VCUBLOKS @V407466 00252000
- OI VDCFLAG,CUBLD IND. BUILDING VCUBLOKS @V407466 00253000
- BAL R5,BLDBLOK CREATE TABLE OF VCUBLOKS @V407466 00254000
- * (OLD+NEW) 00255000
- SLR R8,R8 CLEAR R8 FOR 'LH' @V407466 00256000
- LA R7,VCUSIZE SIZE OF VCUBLOK IN DBL. WDS. @V407466 00257000
- LH R8,VMCUCNT NUMBER VCUBLOKS IN OLD TABLE @V407466 00258000
- MR R6,R8 NUMBER DBL. WDS. IN OLD TABLE @V407466 00259000
- LR R5,R1 SAVE NEW TABLE POINTER @V407466 00260000
- L R1,VMCUSTRT POINTER TO OLD TABLE @V407466 00261000
- LR R0,R7 TABLE LENGTH TO R0 FOR FRET @V407466 00262000
- CALL DMKFRET RETURN THE STORAGE @V407466 00263000
- ST R5,VMCUSTRT STORE POINTER TO NEW TABLE @V407466 00264000
- STH R3,VMCUCNT STORE NO. OF VCUBLOKS IN TABLE @V407466 00265000
- ACQVCH SLR R6,R6 CLEAR R6 @V407466 00266000
- LH R6,VDCVCH NO. REQUIRED VCHBLOKS @V407466 00267000
- LH R7,VDCVCHE NO. EMPTY VCHBLOK SLOTS @V407466 00268000
- SR R6,R7 ACT. NO. OF VCHBLOKS TO BE @V407466 00269000
- * ACQUIRED 00270000
- BC 12,EXIT < OR = 0; ACQUIRE NO VCHBLOKS @V407466 00271000
- SLR R3,R3 ... @V407466 00272000
- LH R2,VMCHCNT NO. OF EXISTING VCHBLOKS @V407466 00273000
- LA R9,VCHSIZE VCHBLOK SIZE IN DBL. WORDS @V407466 00274000
- LA R1,VCHSIZE VCHBLOKS SIZE IN DBL. WORDS @V407466 00275000
- L R8,VMCHSTRT PTR TO EXISTING VCHBLOK TABLE @V407466 00276000
- BAL R5,BLDBLOK CREATE NEW VCHBLOK TABLE @V407466 00277000
- * (OLD+NEW) 00278000
- SLR R8,R8 CLEAR R8 FOR 'LH' @V407466 00279000
- LA R7,VCHSIZE SIZE OF VCHBLOK IN DBL. WDS. @V407466 00280000
- LH R8,VMCHCNT NO. OF VCHBLOKS IN OLD TABLE @V407466 00281000
- MR R6,R8 R7 - NO. DBL. WDS. IN OLD TABLE @V407466 00282000
- LR R0,R7 ...TO R0 FOR FRET @V407466 00283000
- LR R5,R1 SAVE PTR TO NEW TABLE TEMP. @V407466 00284000
- L R1,VMCHSTRT BEGINNING OF OLD TABLE @V407466 00285000
- CALL DMKFRET RELEASE STORAGE @V407466 00286000
- ST R5,VMCHSTRT STORE NEW TABLE PTR IN VMBLOK @V407466 00287000
- STH R3,VMCHCNT NO. OF VCHBLOKS IN NEW TABLE @V407466 00288000
- EXIT BAL R5,FREWRK RELEASE WORK AREA IF NECESSARY @V407466 00289000
- L R13,SAVEWRK6 RESTORE VDC SAVE ADDRESS @V407466 00290000
- SLR R2,R2 ZERO R2 @V407466 00291000
- ST R2,SAVER2 GOOD RETURN @V407466 00292000
- EXIT2 EQU * @V407490 00293000
- EXIT RETURN TO CALLER @V407466 00294000
- SPACE 3 00295000
- FREWRK LTR R4,R4 WAS WORK AREA ACQUIRED? @V407466 00296000
- BZR R5 NO, NOTHING TO FRET @V407466 00297000
- LR R1,R4 ADDRESS OF WORK AREA TO R1 @V407466 00298000
- LA R0,VDCSIZE NO. DBL. WDS TO FRET @V407466 00299000
- CALL DMKFRET RELEASE STORAGE @V407466 00300000
- BR R5 RETURN TO MAINLINE @V407466 00301000
- SPACE 2 00302000
- BLDBLOK AR R3,R2 R3= NUMBER EXISTING BLOCKS @V407466 00303000
- AR R3,R6 PLUS NUMBER NEW BLOCKS @V407466 00304000
- MR R0,R3 NO. DBL. WORDS (R3*R1 INTO R0-R1)@V407466 00305000
- LR R0,R1 NO. DLBWDS. TO ACQUIRE @V407466 00306000
- SLL R1,3 R1*8=# OF BYTES FOR TABLE @VA13217 00306500
- CLM R1,B'0011',=X'7FFF' CANNOT EXCEED 7FFFF @VA13217 00306510
- BH ERR153 RETURN CODE FOR MSG 153 @VA13217 00306520
- CALL DMKFRERC ACQUIRE STORAGE @V407466 00307000
- BNZ NOFREE INSUFFICIENT FREE STORAGE @V407466 00308000
- ST R1,SAVEWRK7 SAVE PTR TO NEW STORAGE TEMP. @V407466 00309000
- SLL R9,3 SIZE OF ONE BLOCK TO BYTES @V407466 00310000
- BCTR R9,0 SUBTRACT ONE FOR EXECUTED MVC @V407466 00311000
- NEXTMVC EX R9,BLDMVC MOVE OLD BLOCK TO NEW @V407466 00312000
- TM VDCFLAG,DEVBLD BUILDING VDEVBLOKS?? @V407466 00313000
- BO VLNK YES, @V407466 00314000
- BLDNEXT LA R1,1(R9,R1) POINT TO NEXT BLOK IN EA. TAB. @V407466 00315000
- LA R8,1(R9,R8) ADDING 1 TO MAKE UP FOR SUBTRACT @V407466 00316000
- BCT R2,NEXTMVC MOVE NEXT BLOCK @V407466 00317000
- LH R8,FFS R8 = FFFF @V407466 00318000
- NEXTSTOR STH R8,0(R1) STORE FFS IN EMPTY SLOTS @V407466 00319000
- TM VDCFLAG,DEVBLD BUILDING VDEVBLOKS?? @V407466 00320000
- BO CLRDEV YES, CLEAR EMPTY VDEVBLOK @V407466 00321000
- TM VDCFLAG,CUBLD BUILDING VCUBLOKS?? @V407466 00322000
- BO CLRCU YES, CLEAR EMPTY VCUBLOKS @V407466 00323000
- * OTHERWISE, MUST BE BUILDING VCHBLOKS... 00324000
- USING VCHBLOK,R1 ADDRESSABILITY @V407466 00325000
- MVC VCHBLOK+2(6),VCHBLOK CLEAR START OF VCHBLOK @V407466 00326000
- MVC VCHCUTBL(8),FFS ... @V407466 00327000
- MVC VCHCUTBL+8(24),VCHCUTBL ... @V407466 00328000
- NEXTBLK LA R1,1(R9,R1) POINT TO NEXT EMPTY SLOT @V407466 00329000
- BCT R6,NEXTSTOR STORE FFS IN NEXT BLOCK @V407466 00330000
- L R1,SAVEWRK7 RESTORE PTR TO BEGINNING OF TABLE@V407466 00331000
- BR R5 @V407466 00332000
- SPACE 00333000
- BLDMVC MVC 0(0,R1),0(R8) MOVE OLD BLOCK TO NEW STORAGE @V407466 00334000
- SPACE 00335000
- USING VDEVBLOK,R1 ADDRESSABILITY @V407466 00336000
- VLNK CLC VDEVADD(2),FFS EMPTY SLOT?? @V407466 00337000
- BE BLDNEXT YES, DON'T WORRY ABOUT VDEVLINK @V407466 00338000
- CLI VDEVTYPC,CLASDASD DASD DEVICE?? @V407466 00339000
- BNE BLDNEXT NO, MOVE & BUILD NEXT BLOK @V407466 00340000
- TM VDEVFLAG,VDEVTDSK T-DISK?? @V407466 00341000
- BO BLDNEXT .... @V407466 00342000
- L R14,VDEVLINK PTR TO VDEVBLOK FOR SAME MINIDISK@V407466 00343000
- * SAME MINIDISK LINKED BY SAME OR DIFFERENT USER 00344000
- LTR R14,R14 SAME MINIDISK LINKED BY SOMEONE @V407466 00345000
- * ELSE 00346000
- BZ BLDNEXT NO, MOVE & BUILD NEXT BLOCK @V407466 00347000
- LR R15,R1 R15 POINTS TO NEW BLOCK @V407466 00348000
- B BLDCHCK SEE IF VDEVBLOK POINTS TO OLD @V407466 00349000
- * BLOK 00350000
- BLDLOOP LR R15,R14 SAVE PREVIOUS VDEVBLOK ADDRESS @V407466 00351000
- L R14,VDEVLINK-VDEVBLOK(,R14) NEXT VDEVBLOK ADDR @V407466 00352000
- BLDCHCK CR R8,R14 DOES IT PT TO OLD BLOK?? @V407466 00353000
- BNE BLDLOOP NO, KEEP LOOKING @V407466 00354000
- ST R1,VDEVLINK-VDEVBLOK(,R15) POINT IT TO NEW ONE @V407466 00355000
- B BLDNEXT MOVE & BUILD NEXT BLOCK @V407466 00356000
- SPACE 00357000
- USING VDEVBLOK,R1 ADDRESSABILITY @V407466 00358000
- CLRDEV NI VDCFLAG,X'FF'-DEVBLD CLEAR VDEVBLOK IND. @V407466 00359000
- XC VDEVADD+2(VDEVSIZE*8-2),VDEVADD+2 CLEAR VDEVBLOK@V407466 00360000
- B NEXTBLK CLEAR NEXT EMPTY SLOT @V407466 00361000
- SPACE 00362000
- USING VCUBLOK,R1 ADDRESSABILITY @V407466 00363000
- CLRCU NI VDCFLAG,X'FF'-CUBLD RESET VCUBLOK IND. @V407466 00364000
- MVC VCUBLOK+2(6),ZEROES CLEAR VCUBLOK @V407466 00365000
- MVC VCUDVTBL(8),FFS FFS @V407466 00366000
- MVC VCUDVTBL+8(24),VCUDVTBL FFS ... @V407466 00367000
- B NEXTBLK CLEAR NEXT EMPTY BLOCK @V407466 00368000
- DROP R1 @V407466 00369000
- SPACE 2 00370000
- EMPSLOT LTR R8,R1 ANY ENTRIES IN TABLE @V407466 00371000
- BCR 13,R5 NO TABLE ENTRIES; ZERO EMPTY @V407466 00372000
- * SLOTS 00373000
- SLL R0,3 CONVERT BLOCK SIZE TO BYTES @V407466 00374000
- USING VDEVBLOK,R8 VDEVBLOK ADDRESSABILITY @V407466 00375000
- TSTEMP TM VDEVADD,X'80' EMPTY SLOT? @V407466 00376000
- BC 1,UPDSLOT YES, UPDATE EMPTY SLOTS @V407466 00377000
- NEXTSLOT AR R8,R0 NEXT BLOCK @V407466 00378000
- BCT R2,TSTEMP CONTINUE TO LOOK FOR EMPTY SLOTS @V407466 00379000
- BR R5 RETURN TO MAINLINE @V407466 00380000
- SPACE 2 00381000
- UPDSLOT AH R6,F1+2 ONE OR MORE EMPTY SLOTS @V407466 00382000
- B NEXTSLOT CONTINUE SEARCH FOR EMPTY SLOTS @V407466 00383000
- SPACE 2 00384000
- DROP R8 @V407466 00385000
- COUNTBIT SLR R6,R6 CLEAR R6 @V407466 00386000
- REPEAT1 LA R8,BITMAP POINT TO TABLE OF BITS @V407466 00387000
- LA R7,COUNT8 COUNTER @V407466 00388000
- REPEAT2 IC R1,0(R8) GET NEXT TABLE CHARACTER @V407466 00389000
- EX R1,COMPARE EQUAL @V407466 00390000
- BNO NEXTBYTE ADD 1 TO COUNT OF BLOCKS TO @V407466 00391000
- * ACQUIRE 00392000
- ADD1 AH R6,F1+2 ADD ONE TO COUNT @V407466 00393000
- NEXTBYTE LA R8,1(,R8) POINT TO NEXT @V407466 00394000
- BCT R7,REPEAT2 TEST ALL POSSIBLE BITS @V407466 00395000
- LA R2,1(,R2) NEXT BYTE IN VDCCHMAP @V407466 00396000
- BCT R3,REPEAT1 REPEAT WHOLE OPERATION FOR @V407466 00397000
- * ANOTHER BYTE 00398000
- BR R5 RETURN TO MAINLINE @V407466 00399000
- SPACE 2 00400000
- COMPARE TM 0(R2),0 @V407466 00401000
- SPACE 2 00402000
- PRESCANA LTR R4,R4 FIRST TIME PRESCAN INVOKED? @V407466 00403000
- BP SKIP1 NO, SKIP ACQUIRING STORAGE @V407466 00404000
- LA R0,VDCSIZE ACQUIRE FREE STORAGE FOR COUNTERS@V407466 00405000
- CALL DMKFREE GO GET IT @V407466 00406000
- LR R4,R1 R4 POINTS TO COUNTERS @V407466 00407000
- XC 0(VDCSIZE*8,R1),0(R1) CLEAR TO ZEROS @V407466 00408000
- SKIP1 LR R1,R2 ADDRESS FROM R2 TO R1 @V407466 00409000
- CALL DMKSCNRU FIND RDEVBLOK @V407466 00410000
- BCR 7,R5 REAL DEVICE DOES NOT EXIST @V407466 00411000
- USING RDEVBLOK,R8 @V407466 00412000
- TM RDEVSTAT,RDEVDISA+RDEVDED CHECK REAL DEVICE @V407466 00413000
- BNZR R5 OFFLINE OR ALREADY IN USE @V407466 00414000
- TM RDEVTYPC,CLASDASD+CLASTAPE DASD OR TAPE @V407466 00415000
- BNZ DISKTAP YES @V407466 00416000
- TM RDEVTYPC,CLASURI+CLASURO INPUT OR OUTPUT? @V407466 00417000
- BNZ URIO YES -- SPOOL @V407466 00418000
- TM RDEVTYPC,CLASTERM+CLASGRAF TERM OR GRAPHIC? @V407466 00419000
- BNZ TRMGR YES, TERM OR GRAF @V407466 00420000
- CLI RDEVTYPC,CLASSPEC CLASS SPECIAL? @V407466 00421000
- BNE VDCEXIST NO, GO PERFORM TIO @V407466 00422000
- CLI RDEVTYPE,TYP3705 IS THIS 3704/3705? @V407466 00423000
- BNE CHKCTCA IF NOT, IS IT CTCA @V407466 00424000
- TM RDEVSTAT,RDEVRSVD LINES IN USE BY THE SYSTEM? @V407466 00425000
- BOR R5 YES, CAN'T ATTACH THEN @V407466 00426000
- TM RDEVFLAG,RDEVRCVY IN RECOVERY BY SYSTEM @V407466 00427000
- BOR R5 YES, THEN CAN'T ATTACH @V407466 00428000
- B VDCEXIST PERFORM TIO @V407466 00429000
- SPACE 2 00430000
- DISKTAP TM RDEVFLAG,RDEVSYS+RDEVOWN IN USE BY SYSTEM @V407466 00431000
- BNZR R5 YES, CANNOT ATTACH @V407466 00432000
- B CHKDASD SEE IF 2305 DRUM @V407466 00433000
- SPACE 2 00434000
- URIO TM RDEVFLAG,RDEVDRAN IS THE DEVICE DRAINED? @V407466 00435000
- BZR R5 YES, CANNOT ATTACH @V407466 00436000
- ICM R15,15,RDEVSPL CHECK FOR ACTIVE SFBLOK @V407466 00437000
- BNZR R5 YES, CANNOT ATTACH @V407466 00438000
- B VDCEXIST PERFORM TIO @V407466 00439000
- SPACE 2 00440000
- TRMGR TM RDEVFLAG,RDEVENAB IN USE BY THE SYSTEM? @V407466 00441000
- BOR R5 YES, CANNOT ATTACH @V407466 00442000
- B VDCEXIST PERFORM TIO @V407466 00443000
- SPACE 2 00444000
- CHKCTCA LA R1,CLASSPEC*256+TYPCTCA CHECK FOR REAL CTCA @V407466 00445000
- CH R1,RDEVTYPC CTCA? @V407466 00446000
- BNE CHKDASD KEEP GOING @V407466 00447000
- OI VDCBYTE1,ATTCTCA INDICATE PROCESSING CTCA @V407466 00448000
- CHKDASD CLI RDEVTYPC,CLASDASD DASD DEVICE @V407466 00449000
- BNE VDCEXIST SKIP TIO; @V407466 00450000
- CLI RDEVTYPE,TYP2305 2305 MULT. EXPOSURE DEVICE @V407466 00451000
- BNE VDCEXIST NO, CONTINUE PRESCAN PHASE @V407466 00452000
- TM RDEVADD+1,BASEXP ATTACHING BASE EXPOSURE @V407466 00453000
- BCR 7,R5 NO, PROCESS NEXT ADDRESS @V407466 00454000
- OI VDCBYTE1,DED2305 MULTIPLE EXPOSURE 2305 @V407466 00455000
- VDCEXIST LTR R3,R3 IOBLOK/CPEXBLOK ALREADY ACQUIRED?@V407466 00456000
- BP SKIP2 YES, SKIP STORAGE ACQUIRE @V407466 00457000
- LA R0,IOBSIZE SIZE OF IOBLOK @V407466 00458000
- CALL DMKFREE AND GO GET ONE IOBLOK @V407466 00459000
- XC 0(IOBSIZE*8,R1),0(R1) CLEAR IOBLOK TO ZEROS @V407466 00460000
- LR R3,R1 IOBLOK PTR @V407466 00461000
- OI IOBSPEC,IOBTIO FLAG SPECIAL TIO REQUEST @V407466 00462000
- LA R0,CPEXSIZE GET A CPEXBLOK @V407466 00463000
- CALL DMKFREE ACQUIRE CPEXBLOK @V407466 00464000
- ST R1,IOBMISC2 SAVE CPEXBLOK HERE @V407466 00465000
- ST R11,IOBUSER VMBLOK ADDRESS @V407466 00466000
- LA R1,AFTERTIO INTERRUPT RETURN ADDRESS @V407466 00467000
- ST R1,IOBIRA ... @V407466 00468000
- MVI IOBFLAG,IOBCP CP GENERATED IO @V407466 00469000
- USING CPEXBLOK,R1 ACROSS CALL TO IOS @V407466 00470000
- SKIP2 L R1,IOBMISC2 ADDR OF CPEXBLOK @V407466 00471000
- STM R0,R15,CPEXR0 SAVE ALL CURRENT REGISTERS @V407466 00472000
- DROP R1 @V407466 00473000
- LR R10,R3 IOBLOK POINTER TO R10 @V407466 00474000
- CALL DMKIOSQR R8=RDEVBLOK,R10=IOBLOK @V407466 00475000
- GOTO DMKDSPCH WAIT FOR IT @V407466 00476000
- DROP R3 @V407466 00477000
- SPACE 2 00478000
- AFTERTIO EQU * INTERRUPT RETURN POINT @V407466 00479000
- USING *,R12 @V407466 00480000
- USING IOBLOK,R10 IOBLOK ADDRESSABILITY @V407466 00481000
- L R1,IOBMISC2 RESTORE CPEXBLOK ADDRESS @V407466 00482000
- USING CPEXBLOK,R1 CPEXBLOK ADDRESSABILITY @V407466 00483000
- LM R0,R15,CPEXR0 RESTORE VDC'S REGISTERS @V407466 00484000
- DROP R1,R10 @V407466 00485000
- USING IOBLOK,R3 RESTORE ORIGINAL ADDRESSABILITY @V407466 00486000
- USING DMKVDC,R12 MODULE ADDRESSABILITY @V407466 00487000
- TM IOBSTAT,IOBCC3 DEVICE DOES NOT EXIST @V407466 00488000
- BOR R5 IF CC=3 @V407466 00489000
- BZ SETR6 CC=0; NO PROBLEMS @V407466 00490000
- CLI RDEVTYPC,CLASDASD CC=1; CSW STORED @V407466 00491000
- BNE TAPE NOT DASD, CHECK FOR TAPE @V407466 00492000
- B RELIOER FRET IOERBLOK @V407466 00493000
- SPACE 2 00494000
- TAPE CLI RDEVTYPC,CLASTAPE MIXED CC=1; CSW STORED @V407466 00495000
- BNE SETR6 NOT TAPE, ASSUME DEVICE THERE @V407466 00496000
- L R1,IOBIOER GET IOERBLOK @V407466 00497000
- LTR R1,R1 IS THERE ONE @V407466 00498000
- BZ VBLOCKS SEE HOW MANY VIRTUAL BLOCKS EXIST@V407466 00499000
- USING IOERBLOK,R1 IOERBLOK ADDRESSABILITY @V407466 00500000
- TM IOERDATA,X'40' INTERVENTION REQUIRED @V407466 00501000
- BZ SETR6 NO, NOT SERIOUS @V407466 00502000
- TM IOERDATA+1,X'60' STATUS A AND B ON @V407466 00503000
- BNZ SETR6 SOMETHING ON, DEVICE THERE @V407466 00504000
- RELIOER LR R6,R5 ESTABLISH BRANCH ADDRESS @V407466 00505000
- FRETIOER L R1,IOBIOER IOERBLOK ADDRESS @V407466 00506000
- LTR R1,R1 DOES IOERBLOK EXIST @V407466 00507000
- BZ IOBUCHK SEE IF UC ON DASD @V407466 00508000
- LA R0,IOERSIZE SIZE OF IOERBLOK @V407466 00509000
- AH R0,IOEREXT PLUS EXT SIZE @V407466 00510000
- CALL DMKFRET AND RELEASE IT @V407466 00511000
- IOBUCHK CLI RDEVTYPC,CLASTAPE TAPE DEVICE? @V407466 00512000
- BER R6 YES, CONTINUE @V407466 00513000
- CLI RDEVTYPC,CLASDASD DASD? @V407466 00514000
- BNER R6 NO, CONTINUE @V407466 00515000
- TM IOBCSW+4,UC UC ON DASD 'TIO'? @V407466 00516000
- BZ VBLOCKS NO, CONTINUE TO PROCESS @V407466 00517000
- TM RDEVFTR,FTRVIRT 3330V DEVICE? @V407466 00518000
- BZR R6 NO, RETURN TO MAINLINE @V407466 00519000
- B VBLOCKS UC ON 3330V - VOLUME NOT MOUNTED @V407466 00520000
- SPACE 2 00521000
- SETR6 LA R6,VBLOCKS ESTABLISH BRANCH ADDRESS @V407466 00522000
- B FRETIOER @V407466 00523000
- DROP R1 @V407466 00524000
- SPACE 2 00525000
- VBLOCKS LR R1,R2 ADDRESS @V407466 00526000
- CALL DMKSCNVU SEE IF ALREADY DEFINED @V407466 00527000
- BCR 8,R5 DEVICE ALREADY DEFINED (BR IF @V407466 00528000
- * ZERO) 00529000
- LA R9,1 ESTABLISH INCREMENT @V407466 00530000
- BC 4,NCHANNEL CHANNEL BLOCK DOES NOT EXIST @V407466 00531000
- BC 2,NOTDEDCH CONTROL UNIT BLOCK DOES NOT EXIST@V407466 00532000
- TM VDCBYTE1,ATTCTCA ATTACHING A CTCA @V407466 00533000
- BCR 1,R5 PROCESS NEXT ADDRESS (BR IF ONES)@V407466 00534000
- TM VDCBYTE1,DED2305 2305 MULTIPLE EXPOSURE DEVICE @V407466 00535000
- BNO NOTDEDCH NO, SKIP 2305 PROCESSING @V407466 00536000
- USING VCUBLOK,R7 CONTROL UNIT BLOCK ADDRESSABILITY@V407466 00537000
- STM R2,R3,SAVEWRK7 SAVE REGISTERS TEMPORARILY @V407466 00538000
- N R1,F8 OBTAIN BASE ADDRESS INDEX @V407466 00539000
- SLL R1,1 CONVERT TO VCUDVTBL 2 BYTE INDEX @V407466 00540000
- LA R3,VCUDVTBL+2*7(R1) TABLE ADDR OF LAST EXPOSURE @V407466 00541000
- LA R1,VCUDVTBL(R1) TABLE ADDR OF FIRST EXPOSURE @V407466 00542000
- LA R2,2 TABLE ENTRY LENGTH FOR INDEX @V407466 00543000
- SCAN CLI 0(R1),X'FF' DEVICE DEFINED? @V407466 00544000
- BNE RESTREGS RESTORE R2 AND R3 @V407466 00545000
- BXLE R1,R2,SCAN NEXT ENTRY @V407466 00546000
- LM R2,R3,SAVEWRK7 RESTORE R2 AND R3 @V407466 00547000
- NOTDEDCH EQU * @V407466 00548000
- AIF (NOT &DEDCH).NOCHAN **AIF** @V407466 00549000
- USING VCHBLOK,R6 @V407466 00550000
- TM VCHSTAT,VCHDED CHANNEL DEDICATED @V407466 00551000
- BCR 1,R5 YES, CANNOT ATTACH THIS DEVICE @V407466 00552000
- DROP R6,R7 @V407466 00553000
- .NOCHAN ANOP 00554000
- NCHANNEL EQU * @V407490 00555000
- TM VDCBYTE1,DED2305 2305 TYPE DEVICE @V407466 00556000
- BZ SINGBLOK NO, CREATE SINGLE VDEVBLOK @V407466 00557000
- LA R9,8 CREATE VDEVBLOK FOR EACH EXP. @V407466 00558000
- SINGBLOK AH R9,VDCVDEV MUST FIGURE ON STORAGE FOR @V407466 00559000
- * VDEVBLOK 00560000
- STH R9,VDCVDEV RETURN TO WORK AREA @V407466 00561000
- CH R6,=H'-1' CHANNEL BLOCK EXIST? @V407466 00562000
- BNE CHKVCU VCHBLOK EXISTS; GO CHECK FOR @V407466 00563000
- * VCUBLOK 00564000
- LA R6,X'F00' ISOLATE CHANNEL BITS @V407466 00565000
- NR R6,R1 FROM THE DEVICE ADDRESS @V407466 00566000
- SRL R6,7 CHANNEL ADDRESS * 2 @V407466 00567000
- L R1,=A(DMKVIOMK) ADDRESS OF MASK TABLE @V407466 00568000
- LH R1,0(R1,R6) GET APPROP. MASK FROM TABLE @V407466 00569000
- LH R9,VDCCHMAP CHANNEL BIT MAP TO R9 @V407466 00570000
- OR R1,R9 TURN ON CHANNEL BIT IN MAP @V407466 00571000
- STH R1,VDCCHMAP RETURN TO WORK AREA @V407466 00572000
- CHKVCU CH R7,=H'-1' DOES VCUBLOK EXIST? @V407466 00573000
- BCR 7,R5 VCUBLOK ALREADY EXISTS; NEXT ADDR@V407466 00574000
- LR R1,R2 RESTORE ORIGINAL ADDRESS @V407466 00575000
- LA R7,X'0F0' ISOLATE CONTROL UNIT BITS FROM @V407466 00576000
- NR R7,R1 DEVICE ADDRESS @V407466 00577000
- SRL R7,3 CONTROL UNIT ADDRESS * 2 @V407466 00578000
- L R1,=A(DMKVIOMK) ADDRESS MASK TABLE @V407466 00579000
- LH R1,0(R1,R7) GET MASK FROM TABLE @V407466 00580000
- LH R9,VDCCUMAP(R7) CONTROL UNIT MAP @V407466 00581000
- OR R1,R9 TURN ON BIT IN CONTROL UNIT MAP @V407466 00582000
- STH R1,VDCCUMAP(R7) RETURN TO WORK AREA @V407466 00583000
- BR R5 RETURN TO MAINLINE @V407466 00584000
- SPACE 2 00585000
- RESTREGS LM R2,R3,SAVEWRK7 RESTORE R2 AND R3 @V407466 00586000
- BR R5 RETURN TO MAINLINE @V407466 00587000
- SPACE 2 00588000
- USING MDSECT,R4 MULTIPLE ADDRESS WORK AREA @V407466 00589000
- PRESCAND ST R3,SAVEWRK9 ..... SAME FOR R4 @V407466 00590000
- LR R4,R3 MULT STORAGE ADDRESS TO R4 @V407466 00591000
- L R2,MULTADD FIRST MULTIPLE ADDRESS @V407466 00592000
- SLR R3,R3 CLEAR R3 @V407466 00593000
- SLR R4,R4 AND R4 @V407466 00594000
- PRESCANE BAL R5,PRESCANA GO DO PRESCAN @V407466 00595000
- LR R5,R4 SAVE VDCWORK TEMP @V407466 00596000
- L R4,SAVEWRK9 RESTORE PTR TO MULT ADDRESSES @V407466 00597000
- LA R4,4(,R4) NEXT ADDRESS @V407466 00598000
- ST R4,SAVEWRK9 SAVE UPDATED POINTER @V407466 00599000
- L R2,0(,R4) NEXT MULT ADDRESS TO R2 @V407466 00600000
- LR R4,R5 RESTORE R4 @V407466 00601000
- NI VDCBYTE1,X'FF'-(ATTCTCA+DED2305) TURN BITS OFF @V407490 00602000
- CH R2,FFS END OF MULTIPLE ADDRESSES? @V407466 00603000
- BE FRETBLK FRET BLOCKS @V407466 00604000
- MVI IOBSTAT,X'00' CLEAR IOBSTAT FOR NEXT TIME @V407466 00605000
- XC IOBCSW(L'IOBCSW),IOBCSW CLEAR CSW @V407466 00606000
- B PRESCANE CONTINUE NEXT ADDRESS @V407466 00607000
- SPACE 2 00608000
- USING VDCWORK,R4 ADDRESSABILITY @V407466 00609000
- NOFREE NI VDCFLAG,X'FF'-(DEVBLD+CUBLD) RESET IND. @V407466 00610000
- BAL R5,FREWRK RELEASE STORAGE AREA @V407466 00611000
- L R13,SAVEWRK6 RESTORE VDC SAVEAREA ADDRESS @V407466 00612000
- LA R2,RC32 INSUFFICIENT FREE STORAGE @V407466 00613000
- ST R2,SAVER2 SAVE FOR CALLER @V407466 00614000
- LCR R2,R2 PLUS TO MINUS SETS CC=1 @V407466 00615000
- B EXIT2 RETURN TO CALLER @V407466 00616000
- ERR153 DS 0H @VA13217 00616500
- NI VDCFLAG,X'FF'-(DEVBLD+CUBLD) RESET INDIC @VA13217 00616510
- BAL R5,FREWRK RELEASE STORAGE @VA13217 00616520
- L R13,SAVEWRK6 RESTORE VDC SAVE AREA @VA13217 00616530
- LA R2,RC124 RETURN CODE FOR MSG 153 @VA13217 00616540
- ST R2,SAVER2 PASS TO CALLER @VA13217 00616550
- LCR R2,R2 SET CC=1 IN PSW @VA13217 00616560
- B EXIT2 LEAVE @VA13217 00616570
- DROP R4 @V407466 00617000
- SPACE 00618000
- BITMAP DC X'8040201008040201' @V407466 00619000
- SPACE 00620000
- * EQUATE FOR ERROR CODE - INSUFFICIENT FREE STORAGE 00621000
- RC32 EQU 32 @V407466 00622000
- RC124 EQU 124 EXCEEDED MAX DEVICES @VA13217 00622500
- SPACE 00623000
- * EQUATES FOR COUNTERS 00624000
- COUNT2 EQU 2 @V407466 00625000
- COUNT8 EQU 8 @V407466 00626000
- COUNT32 EQU 32 @V407466 00627000
- EJECT 00628000
- *. 00629000
- * SUBROUTINE NAME - 00630000
- * 00631000
- * DMKVDCAL - CHAIN RDEVBLOKS OFF ALLOCATION CHAIN 00632000
- * ANCHORS. 00633000
- * 00634000
- * FUNCTION - 00635000
- * 00636000
- * TO CHAIN RDEVBLOKS OFF THE ALLOCATION CHAIN ANCHORS 00637000
- * FOR THE DASD DEVICE TYPE AND THEN TO MASSAGE 00638000
- * ALLOCATION DATA . 00639000
- * 00640000
- * ATTRIBUTES - 00641000
- * REENTRANT, PAGEABLE, CALLED VIA SVC 00642000
- * 00643000
- * ENTRY CONDITIONS - 00644000
- * 00645000
- * GPR4 - POINTER TO OWNED LIST ENTRY 00646000
- * GPR8 - ADDRESS OF RDEVBLOK 00647000
- * GPR10 - IOBLOK ADDRESS 00648000
- * GPR12 - BASE REGISTER 00649000
- * GPR13 - STANDARD SAVE AREA ADDRESS 00650000
- * 00651000
- * GPR0-GPR3 WORK REGISTERS 00652000
- * GPR5-GPR9 WORK REGISTERS 00653000
- * 00654000
- * EXIT CONDITIONS: 00655000
- * 00656000
- * CC=0; NO ERROR CONDITIONS ARE GENERATED IN THIS 00657000
- * MODULE. 00658000
- * 00659000
- * CALLS TO OTHER ROUTINES - 00660000
- * 00661000
- * DMKSYSOW 00662000
- * DMKPGTTM 00663000
- * 00664000
- * EXTERNAL REFERENCES - 00665000
- * 00666000
- * NONE 00667000
- * TABLES / WORK AREAS - 00668000
- * 00669000
- * RDEVBLOK 00670000
- * IOBLOK 00671000
- * OWNED LIST ENTRY 00672000
- * ALOCBLOK 00673000
- * 00674000
- * REGISTER USAGE - 00675000
- * 00676000
- * GPR3 - INDEX TO APPROPRIATE CHAIN 00677000
- * GPR4 - POINTER TO OWNEDLIST ENTRY 00678000
- * GPR8 - ADDRESS OF RDEVBLOK 00679000
- * GPR10 - ADDRESS OF IOBLOK 00680000
- * GPR12 - BASE REGISTER 00681000
- * GPR13 - STANDARD SAVE AREA ADDRESS 00682000
- * 00683000
- * GPR0-GPR3 WORK REGISTERS 00684000
- * GPR5-GPR7 WORK REGISTERS 00685000
- * GPR9, GPR14-GPR15 WORK REGISTERS 00686000
- * 00687000
- * NOTES - NONE 00688000
- * 00689000
- * OPERATION - 00690000
- * 00691000
- * 1. GET THE PROPER CHAIN ANCHOR BASED ON DASD DEVICE 00692000
- * TYPE AND PREFERRED VOLUME INDEX. 00693000
- * 2. READ ALLOCATION DATA OFF DISK AND BUILD MINI 00694000
- * ALLOCATION BLOCK TO BE CHAINED INTO THE ALLOCATION 00695000
- * CHAIN. 00696000
- * 00697000
- * RESPONSES - 00698000
- * NONE 00699000
- * 00700000
- * ERROR MESSAGES - 00701000
- * NONE 00702000
- *. 00703000
- EJECT 00704000
- DMKVDCAL RELOC SUBROUTINE TO CHAIN IN ALLOCATION TABLES @V407466 00705000
- USING RDEVBLOK,R8 @V407466 00706000
- USING IOBLOK,R10 EXPANDED IOBLOK ADDRESSABILITY @V407466 00707000
- USING OWNDLIST,R4 OWNED LIST ADDRESSABILTIY @V407466 00708000
- ST R8,SAVEWRK9 SAVE ADDRESS OF RDEVBLOK @V407466 00709000
- LA R14,ALL2314-4 @V407466 00710000
- LA R5,203 EACH DEVICE TYPE HAS TWO CHAINS @V407466 00711000
- CLI RDEVTYPE,TYP2314 ...AND DIFFERENT CYL NUMBERS @V407466 00712000
- BE ALLLIST @V407466 00713000
- TST3350 LA R14,ALL3350-4 3350 TABLE @V407466 00714000
- LA R5,555 @V407466 00715000
- CLI RDEVTYPE,TYP3350 3350 DEVICE TYPE @V407466 00716000
- BE ALLLIST YES, PROCESS 3350 @V407466 00717000
- LA R14,ALL3375-4 3375 table HRC106DK 00717100
- LA R5,959 Number of cylinders for 3375 HRC106DK 00717150
- CLI RDEVTYPE,TYP3375 3375 device type HRC106DK 00717200
- BE ALLLIST Yes, process 3375 HRC106DK 00717250
- CLI RDEVTYPE,TYP3380 3380 device type HRC106DK 00717300
- BNE NOT3380 No - move on to next type HRC106DK 00717350
- LA R14,ALL3380-4 3380 table HRC106DK 00717400
- LA R5,2655 Number of cylinders for 3380 (K) HRC106DK 00717450
- TM RDEVMDL,RDEVMD83 Triple density 3380? HRC106DK 00717500
- BO ALLLIST Yes, process triple density 3380 HRC106DK 00717550
- LA R5,1770 Number of cylinders for 3380 (E) HRC106DK 00717600
- TM RDEVMDL,RDEVMD82 Double density 3380? HRC106DK 00717650
- BO ALLLIST Yes, process double density 3380 HRC106DK 00717700
- LA R5,885 Num. cylinders for 3380 (A/D/J) HRC106DK 00717750
- B ALLLIST Process single density 3380 HRC106DK 00717800
- NOT3380 EQU * HRC106DK 00717850
- CLI RDEVTYPE,TYP3340 3340 DEVICE TYPE @V407466 00718000
- BNE TST3330 NO - TEST 3330 TYPE @V407466 00719000
- LA R14,ALL3340-4 POINT TO 3340 TABLE @V407466 00720000
- LA R5,MB35 NUMBER OF CYLINDERS FOR 35MB @V56BDA8 00721000
- LA R2,VDCLBUF-VDCLOK(R5,R10) ALLOC RECORD PLUS ONE @V407466 00722000
- CLI 0(R2),X'FF' VALID 35MB ALLOCATION RECORD ? @V407466 00723000
- BE ALLLIST YES - @V407466 00724000
- TM RDEVFTR,FTR35MB 3340 WITH 35MB PACK @V407466 00725000
- BO ALLLIST YES -- GO @V407466 00726000
- LA R5,MB70 NUMBER OF CYLINDERS FOR 70MB @V56BDA8 00727000
- B ALLLIST 3340 WITH 70MB PACK @V407466 00728000
- SPACE 2 00729000
- TST3330 LA R14,ALL3330-4 3330 TABLE @V407466 00730000
- LA R5,404 @V407466 00731000
- CLI RDEVTYPE,TYP3330 @V407466 00732000
- BNE TST2305 IF NOT 3330 GO TEST FOR 2305 @V407466 00733000
- CLI RDEVMDL,11 MOD 11 3330 ? @V407466 00734000
- BNE ALLLIST NO- ALL SET @V407466 00735000
- LA R5,808 SET UP FOR A MOD 11 3330 @V407466 00736000
- B ALLLIST @V407466 00737000
- SPACE 2 00738000
- TST2305 LA R14,ALL2305-4 POINT TO TABLE @V407466 00739000
- LA R5,96 @V407466 00740000
- CLI RDEVMDL,X'01' MOD 1 2305 ? @V407466 00741000
- BNE ALLLIST NO- ALL SET @V407466 00742000
- LA R5,48 SET UP FOR A MOD 1 2305 @V407466 00743000
- ALLLIST EQU * ADD RDEVBLOK TO ALLOCATION LIST @V407466 00744000
- L R1,0(R3,R14) GET ADDRESS OF CHAIN ANCHOR @V407466 00745000
- L R2,0(,R1) FIRST RDEVBLOK, IF ANY @V407466 00746000
- LTR R2,R2 IS IT ANY ? @V407466 00747000
- BNZ ALLINST YES - INSERT THIS RDEVBLOK @V407466 00748000
- ST R8,RDEVPNT CHAIN RDEVBLOK TO ITSELF @V407466 00749000
- ST R8,0(,R1) ...AND INTO CHAIN ANCHOR @V407466 00750000
- B SETALLN GO MASSAGE ALLOCATION DATA @V407466 00751000
- SPACE 2 00752000
- ALLINST EQU * @V407466 00753000
- L R1,RDEVPNT-RDEVBLOK(,R2) @V407466 00754000
- ST R1,RDEVPNT @V407466 00755000
- ST R8,RDEVPNT-RDEVBLOK(,R2) @V407466 00756000
- SETALLN EQU * MASSAGE ALLOCATION DATA @V407466 00757000
- LR R2,R8 RDEVBLOK ADDRESS @V407466 00758000
- SL R2,ARIODV GET DISPLACEMENT @V407466 00759000
- SRL R2,3(0) CONVERT TO DOUBLE-WORD INDEX @V407466 00760000
- STH R2,OWNDRDEV ...INTO OWNED-LIST ENTRY @V407466 00761000
- SL R4,=A(DMKSYSOW) COMPUTE "RDEVCODE" @V407466 00762000
- SRL R4,3(0) ... @V407466 00763000
- DROP R4 @V407466 00764000
- STH R4,RDEVCODE @V407466 00765000
- SPACE 00766000
- ST R10,SAVEWRK6 SAVE IOBLOK ADDRESS @V407466 00767000
- LA R4,VDCLBUF-2-VDCLOK(,R10) START OF ALLOCATION @V407466 00768000
- * RECORD 00769000
- * GPR 5 CONTAINS NUMBER OF CYLINDERS ON DEVICE 00770000
- SPACE 00771000
- LA R1,63(R5) ROUND UP IF NECESSARY... @V407466 00772000
- SRL R1,6 NO DBLWDS NEEDED: 64 CYL/DBLWD @V407466 00773000
- LA R0,(ALOCMAP-ALOCBLOK+7)/8(R1) ADD IN HDR SIZE @V407466 00774000
- CALL DMKFREE GET MINI ALOCBLOK @V407466 00775000
- USING ALOCBLOK,R1 @V407466 00776000
- ST R1,RDEVALLN SET RDEVALLN TO MINI ALOCBLOK @V407466 00777000
- ST R1,BALR1 SAVE ADDRESS OF LAST ALLOCATION @V407466 00778000
- * BLOCK 00779000
- DROP R8 @V407466 00780000
- SR R8,R8 ZERO TDISK CYLINDER COUNTER @V407466 00781000
- LR R6,R1 ADDR OF ALOCBLOK @V407466 00782000
- LR R7,R0 SIZE OF THE BLOCK @V407466 00783000
- SLL R7,3 IN BYTES PLEASE. @V407466 00784000
- L R15,F0 PAD & COUNT @V407466 00785000
- MVCL R6,R14 CLEAR THE BLOCK @V407466 00786000
- STH R5,ALOCMAX SET ALOCMAX @V407466 00787000
- SR R9,R9 CLEAR @V407466 00788000
- LA R14,2(,R4) POINT TO ALLOCATION DATA @V407466 00789000
- LR R15,R14 SAVE START OF ALOCMAP @V407466 00790000
- ALOCLKUP CLI 0(R14),X'00' IS THERE ANY ALLOCATION ON THIS @V407466 00791000
- * CYLINDER? 00792000
- BE NOTTDISK GO TEST FOR END OF TDISK AREA @V407466 00793000
- CLI 0(R14),TEMP ... @VM00019 00794000
- BE NOTTDISK TREAT AS TEMP @VM00019 00795000
- LA R10,1 SET TENTATIVE DECREMENT @V407466 00796000
- LR R6,R5 GET NUMBER CYLINDERS FOR THIS @V407466 00797000
- * DEVICE 00798000
- SRL R6,1 /2 @V407466 00799000
- LR R7,R14 GET ADDRESS OF CURRENT BYTE @V407466 00800000
- SR R7,R15 GET CYLINDER NUMBER WHERE WE @V407466 00801000
- * ARE NOW 00802000
- SR R6,R7 @V407466 00803000
- BP *+8 @V407466 00804000
- LPR R6,R6 MAKE POSITIVE @V407466 00805000
- SR R10,R10 SET DECREMENT TO 0 @V407466 00806000
- AR R6,R6 DOUBLE @V407466 00807000
- SR R6,R10 DECREMENT, IF NECESSARY @V407466 00808000
- SRDL R6,3 /8 @V407466 00809000
- SRL R7,29 GET REMAINDER IN LOW ORDER 3 BITS@V407466 00810000
- IC R7,ALOCTBL(R7) GET BITS THAT ARE ALREADY IN @V407466 00811000
- * ALOCTBL 00812000
- LA R6,ALOCMAP(R6) GET PROPER OUTPUT BYTE @V407466 00813000
- EX R7,ALLOCON TURN ON APPROPRIATE BIT @V407466 00814000
- LA R9,1(,R9) KEEP TOTAL OF ALLOCATED CYLINDERS@V407466 00815000
- CLI 0(R14),X'02' TDISK CYLINDER ?? @V407466 00816000
- BNE NOTTDISK NO -- GO TEST FOR END OF TDISK @V407466 00817000
- LA R8,1(,R8) BUMP TDISK CYLINDER COUNT @V407466 00818000
- B ALOCNXT AND GO PROCESS NEXT CYLINDER @V407466 00819000
- SPACE 00820000
- NOTTDISK LTR R8,R8 ANY TDISK ALLOCATED ?? @V407466 00821000
- BZ ALOCNXT NO -- @V407466 00822000
- ST R1,BALR6 SAVE CURRENT (OLD) ADDR @V407466 00823000
- LA R7,7(R8) ROUND UP IF NECESSARY... @V407466 00824000
- SRL R7,3 NO DBLWDS NEEDED: 8 CYL/DBLWD @V407466 00825000
- LA R7,(ALOCMAP-ALOCBLOK+7)/8(R7) ADD IN HDR SIZE @V407466 00826000
- LR R0,R7 TO R0 FOR DMKFREE PLEASE @V407466 00827000
- STM R14,R15,BALR14 SAVE REGS 14 AND 15 OVER CALL @V407466 00828000
- CALL DMKFREE GET CORE FOR A TDISK BLOK @V407466 00829000
- LR R6,R1 NEW BLOK ADDR @V407466 00830000
- SLL R7,3 SIZE IN BYTES @V407466 00831000
- L R15,F0 PAD & COUNT @V407466 00832000
- MVCL R6,R14 CLEAR THE BLOCK @V407466 00833000
- LM R14,R15,BALR14 RESTORE R14, R15 @V407466 00834000
- L R7,BALR1 RESTORE ADDRESS OF LAST @V407466 00835000
- * ALLOCATION BLOCK 00836000
- ST R1,ALOCPNT-ALOCBLOK(,R7) CHAIN IT TO OLD LAST @V407466 00837000
- * BLOCK 00838000
- MVI 0(R7),X'80' AND FLAG IT AS TDISK ALLOCATION @V407466 00839000
- ST R1,BALR1 AND SAVE ADDRESS OF NEW LAST @V407466 00840000
- * BLOCK 00841000
- LR R7,R14 GET CURRENT CYLINDER @V407466 00842000
- SR R7,R15 RELATIVE TO ZERO @V407466 00843000
- BCTR R7,0 LESS ONE (LAST TDISK CYLINDER) @V407466 00844000
- STH R7,ALOCCYL2 SAVE AS LAST CYLINDER ADDRESS @V407466 00845000
- SR R7,R8 GET 1ST CYLINDER ADDRESS @V407466 00846000
- LA R7,1(,R7) ... @V407466 00847000
- STH R7,ALOCCYL1 SAVE IN ALOCBLOK @V407466 00848000
- LA R10,ALOCMAP(R8) POINT TO FIRST NON-ALLOCATED @V407466 00849000
- * BYTE 00850000
- SR R8,R8 CLEAR TDISK COUNTER FOR NEXT TIME@V407466 00851000
- LR R7,R1 SAVE ADDRESS OF BLOK @V407466 00852000
- L R1,BALR6 RESTORE ADDR OF OLD BLOK @V407466 00853000
- SLL R0,3 GET LENGTH OF BLOK @V407466 00854000
- AR R7,R0 GET END OF BLOK @V407466 00855000
- BCTR R7,0 GET LAST BYTE OF BLOK @V407466 00856000
- CR R10,R7 BLOK FULL ?? @V407466 00857000
- BH ALOCNXT YES -- @V407466 00858000
- LA R6,1 GET INCREMENT FOR BXLE @V407466 00859000
- MVI 0(R10),X'AA' FLAG UNUSED BYTES AS ALLOCATED @V407466 00860000
- BXLE R10,R6,*-4 LOOP UNTIL BLOK IS FULL @V407466 00861000
- SPACE 00862000
- ALOCNXT CLI 0(R14),X'FF' END OF ALLOCATION ?? @V407466 00863000
- LA R14,1(,R14) IN ANY CASE, INDEX UP @V407466 00864000
- BE ALOCFINI YES @V407466 00865000
- LR R10,R14 GET CURRENT ALOCATION BYTE @V407466 00866000
- SR R10,R4 MINUS START OF TABLE @V407466 00867000
- BCTR R10,0 ... @V407466 00868000
- BCTR R10,0 ... @V407466 00869000
- CH R10,ALOCMAX EXCEEDED MAXIMUM ? @V407466 00870000
- BL ALOCLKUP NO @V407466 00871000
- CLI 0(R14),X'FF' END OF ALLOCATION DATA ? @V407466 00872000
- BE NOTTDISK SEE IF T-DISK AT TOP OF DEVICE @V407466 00873000
- SPACE 1 00874000
- ALOCFINI EQU * HERE AT END OF MAXI ALLOCATION @V407466 00875000
- * TABLE SCAN 00876000
- STH R9,ALOCUSED SET TOTAL NUMBER OF CYLINDERS @V407466 00877000
- * ALLOCATED 00878000
- STH R9,ALOCNTMP SET NUMBER OF NON-TEMP CYLS @V407466 00879000
- LA R0,IOBSIZE+ALLOLEN IOBLOK+BUFFER @V407466 00880000
- L R1,SAVEWRK6 IOBLOK ADDRESS @V407466 00881000
- L R10,IOBMISC-IOBLOK(,R1) REST. ATTACHEE'S VMBLOK @VA07393 00882000
- ST R10,SAVER10 .... @VA07393 00883000
- CALL DMKFRET @V407466 00884000
- L R15,SAVEWRK9 ADDRESS OF RDEVBLOK @V407466 00885000
- TM RDEVFLAG-RDEVBLOK(R15),RDEVPREF TEMP SPACE ? @V407466 00886000
- BO VDCALOUT NO -- PAGING SPACE @V407466 00887000
- SR R5,R9 GET NUMBER OF TEMP CYLINDERS ON @V407466 00888000
- * VOLUME 00889000
- L R15,=A(DMKPGTTM) ADDRESS OF TEMP CYL COUNTER @V407466 00890000
- A R5,0(,R15) INCREMENT COUNT @V407466 00891000
- ST R5,0(,R15) AND SAVE @V407466 00892000
- SPACE 00893000
- L R15,=A(DMKPGTTM) GET MAX NUMBER OF TEMP CYLS @V407466 00894000
- L R3,0(,R15) INTO GPR3 @V407466 00895000
- M R2,F9 TIMES 90 PERCENT @V407466 00896000
- D R2,F10 .. @V407466 00897000
- L R15,=A(DMKPGT90) ADDRESS OF 90 PERCENT COUNTER @V407466 00898000
- ST R3,0(R15) STORE NEW 90 PERCENT COUNT @V407466 00899000
- VDCALOUT EXIT GO GIVE RESPONSES @V407466 00900000
- SPACE 00901000
- ALLOCON OI 0(R6),*-* @V407466 00902000
- SPACE 00903000
- ALOCTBL DC X'8040201008040201' BIT/BYTE TRANSLATION @V407466 00904000
- SPACE 00905000
- ALL2305 DC A(DMKPGTP5,DMKPGTT5) 2305 ALLOCATION CHAIN @V407466 00906000
- * ANCHORS 00907000
- ALL3330 DC A(DMKPGTP0,DMKPGTT0) 3330 ALLOCATION CHAIN @V407466 00908000
- * ANCHORS 00909000
- ALL3340 DC A(DMKPGT4P,DMKPGT4T) 3340 ALLOCATION ANCHORS @V407466 00910000
- ALL3350 DC A(DMKPGT5P,DMKPGT5T) 3350 ALLOCATION ANCHORS @V407466 00911000
- ALL3375 DC A(DMKPGT7P,DMKPGT7T) 3375 allocation anchors HRC106DK 00911100
- ALL3380 DC A(DMKPGT8P,DMKPGT8T) 3380 allocation anchors HRC106DK 00911200
- ALL2314 DC A(DMKPGTP4,DMKPGTT4) 2314 ALLOCATION CHAIN @V407466 00912000
- * ANCHORS 00913000
- SPACE 3 00914000
- ALLOLEN EQU 1024/8+64/8 EXTRA SIZE FOR ALLOCATION @V407466 00915000
- EJECT 00916000
- *. 00917000
- * SUBROUTINE NAME - 00918000
- * 00919000
- * DMKVDCSC - SCAN 'ATTACH/DETACH' COMMAND LINE 00920000
- * 00921000
- * FUNCTION - 00922000
- * TO PERFORM SYNTAX CHECKING ON 'ATTACH/DETACH' COMMAND 00923000
- * LINE. 00924000
- * 00925000
- * ATTRIBUTES - 00926000
- * 00927000
- * REENTRANT, PAGEABLE, CALLED VIA SVC 00928000
- * 00929000
- * ENTRY CONDITIONS: 00930000
- * 00931000
- * GPR9 - COMMAND LINE BUFFER POINTER 00932000
- * GPR12 - BASE REGISTER 00933000
- * GPR13 - STANDARD SAVE AREA ADDRESS 00934000
- * 00935000
- * EXIT CONDITIONS: 00936000
- * 00937000
- * GPR2 = 0 IF SUCCESSFUL SYNTAX CHECK 00938000
- * GPR2 = ERROR CODE IF SYNTAX CHECK IS UNSUCCESSFUL. 00939000
- * DMKVDA WILL ISSUE ERROR MESSAGE BASED ON ERROR CODE 00940000
- * WHICH WAS PASSED TO IT BY DMKVDCSC. 00941000
- * 00942000
- * CALLS TO OTHER ROUTINES - 00943000
- * 00944000
- * DMKSCNFD 00945000
- * DMKSCNAU 00946000
- * DMKCVTHB 00947000
- * DMKCFCSC 00948000
- * 00949000
- * EXTERNAL REFERENCES - 00950000
- * 00951000
- * NONE 00952000
- * 00953000
- * TABLES / WORK AREAS - 00954000
- * 00955000
- * COMMAND LINE BUFFER 00956000
- * DMKVDA'S SAVEAREA 00957000
- * WORK AREA TO STORE CONVERTED MULTIPLE ADDRESSES WHICH 00958000
- * ARE TO BE PROCESSED BY DMKVDA. 00959000
- * 00960000
- * REGISTER USAGE 00961000
- * 00962000
- * GPR2 - ERROR CODE 00963000
- * GPR9 - COMMAND LINE BUFFER POINTER 00964000
- * GPR12 - BASE REGISTER 00965000
- * GPR13 - STANDARD SAVE AREA ADDRESS 00966000
- * 00967000
- * ALL OTHER REGISTERS ARE WORK REGISTERS 00968000
- * 00969000
- * NOTES - NONE 00970000
- * 00971000
- * OPERATION - 00972000
- * 1. THE INPUT LINE IS SCANNED VIA DMKCFCSC, DMKSCNFD AND 00973000
- * DMKCVTHB TO OBTAIN AND CONVERT FROM HEX TO BINARY 00974000
- * (WHERE APPROPRIATE) THE REAL DEVICE, VIRTUAL DEVICE, 00975000
- * AND USERID. IF ANY FIELDS ARE OMITTED OR INVALID, AN 00976000
- * ERROR CODE IS RETURNED TO DMKVDA/DMKVDD VIA GPR2 AND 00977000
- * DMKVDA/DMKVDD ISSUES THE APPROPRIATE ERROR MESSAGE. 00978000
- * 00979000
- * 2. WHEN MULTIPLE ADDRESSES ARE SPECIFIED ON THE COMMAND 00980000
- * LINE, A WORK AREA IS ACQUIRED AND THE CONVERTED DEVICE 00981000
- * ADDRESSES STORED IN THE AREA. THE ADDRESS OF THE AREA 00982000
- * IS RETURNED TO DMKVDA/DMKVDD FOR LATER PROCESSING. 00983000
- * 00984000
- * RESPONSES - 00985000
- * NONE 00986000
- * 00987000
- * ERROR MESSAGES - 00988000
- * 00989000
- * NONE; DMKVDCSC RETURNS ERROR CODES TO DMKVDA/DMKVDD 00990000
- * VIA GPR2 AND DMKVDA/DMKVDD ISSUES THE APPROPRIATE ERROR 00991000
- * MESSAGE. 00992000
- * 00993000
- *. 00994000
- EJECT 00995000
- DMKVDCSC RELOC @V407466 00996000
- USING BUFFER,R9 @V407490 00997000
- LR R5,R13 SAVE R13 SAVE ADD FOR LATER @V407466 00998000
- L R13,SAVER13 CALLER'S SAVEAREA ADDRESS @V407466 00999000
- VDCSCAN EQU * PARSE THE COMMAND LINE @V407466 01000000
- MVC CMDUSER(8),BLANKS @V407466 01001000
- XC VIRTADD(2),VIRTADD @V60B6B8 01002000
- SPACE 01003000
- CALL DMKSCNFD FIND FIRST PARAMETER @V407466 01004000
- BNZ INVADD1 ADDR1 MISSING OR INVALID @V407466 01005000
- CL R0,F7 ADDR > 7 - ERROR @V407466 01006000
- BH INVADD1C INVALID @V407490 01007000
- LA R2,DASH PREPARE SCAN FOR '-' @V407466 01008000
- SPACE 01009000
- CALL DMKCFCSC SEE IF RANGE ON COMMAND LINE @V407466 01010000
- BZ NORANGE RANGE NOT FOUND (R1-R2) @V407466 01011000
- CR R1,R2 INVALID IF '-' FIRST CHARACTER @V407466 01012000
- BNL INVADD1C ... @V407490 01013000
- CL R0,F3 RANGE < 3? (R1-R2) @V407466 01014000
- BL INVADD1C ERROR IF IT IS @V407490 01015000
- LR R3,R2 R1 INTO R3 FOR NOW @V407466 01016000
- SR R3,R1 LENGTH OR RADDR1 FIELD @V407466 01017000
- LR R6,R0 SAVE ENTIRE OPERAND LENGTH @V407466 01018000
- LR R0,R3 RADDR1 LENGTH @V407466 01019000
- MVI 0(R2),BLANK REPLACE '-' WITH BLANK @V407466 01020000
- CALL DMKCVTHB CONVERT FIRST RADDR IN RANGE @V407466 01021000
- BNZ INVADD1A INVALID ADDR1 FIELD @V407490 01022000
- ST R1,DEVADDR STORE FIRST RADDR FOR LATER @V407466 01023000
- LA R1,1(,R2) POINT TO SEC. RADDR IN RANGE @V407466 01024000
- SR R6,R3 GET RADDR2 LENGTH @V407466 01025000
- BCTR R6,0 MINUS 1 FOR '-' @V407466 01026000
- LR R0,R6 RADDR2 LENGTH IN R0 @V407466 01027000
- CALL DMKCVTHB CONVERT SEC. RADDR IN RANGE @V407466 01028000
- BNZ INVADD1B INVALID ADDR1 FIELD @V407490 01029000
- L R2,DEVADDR RADDR1 IN RANGE @V407466 01030000
- CR R1,R2 RADDR2 MUST BE > RADDR1 IN RANGE @V407466 01031000
- BNH INVADD1B OTHERWISE , INVALID @V407490 01032000
- STH R1,VDCBITS+2 STORE RADDR2 FOR LATER @V407466 01033000
- OI VDCBITS,RANGE INDICATE RANGE @V407466 01034000
- B USERSCAN SCAN FOR SECOND OPERAND @V407466 01035000
- SPACE 2 01036000
- NORANGE CL R0,F3 LONGER THAN A DEVICE ADDRESS @V407466 01037000
- BNH CHKDADD NO @V407466 01038000
- LR R2,R0 LENGTH INTO R2 @V407466 01039000
- BCTR R2,0 @V407466 01040000
- EX R2,TSTCHAN SEE IF 'CHANNEL' @V407466 01041000
- BNE INVADD1C NO - INVALID ADDR 1 FIELD @V407490 01042000
- OI VDCBITS,CHANNEL OPTION - ATTACH OR DETACH @V407466 01043000
- CALL DMKSCNFD GET CHANNEL ADDRESS @V407466 01044000
- BNZ INVADD1 NOT SPECIFIED @V407466 01045000
- CL R0,F1 MAXIMUM LENGTH = 1 @V407466 01046000
- BH INVADD1C @V407490 01047000
- CHKDADD EQU * CONVERT ADDRESS @V407466 01048000
- CALL DMKCVTHB @V407466 01049000
- BNZ INVADD1B INVALID ADDR 1 FIELD @V407490 01050000
- ST R1,DEVADDR SAVE IN WORK AREA @V407466 01051000
- USERSCAN TM VMCLEVEL,VMCLASSB IF HE ISN'T CLASS B IT CAN @V407466 01052000
- * ONLY 01053000
- BO USER2 BE 'DETACH' OF A VIRTUAL DEVICE @V407466 01054000
- TM VMTRCTL,VMTRIO+VMTRSIO TRACING I/O ? @VA09655 01054300
- BNZ INVTRACE YES, CAN NOT DETACH @VA09655 01054700
- OI VDCBYTE1,VDETACH DETACH VIRTUAL @V407466 01055000
- USER2 CALL DMKSCNFD FIND SECOND PARAMETER (USERID) @V407466 01056000
- BNZ SCANADD ADDRESS ONLY - MAYBE DETACH @V407466 01057000
- CL R0,F4 IF LONGER THAN 'FROM' @V407466 01058000
- BH SCNUSER ...MUST BE A USERID @V407466 01059000
- LR R2,R0 @V407466 01060000
- BCTR R2,0 @V407466 01061000
- TM VDCBYTE2,DETACH IS THIS 'DETACH'? @V407466 01062000
- BO CHKFROM YES, TEST FOR 'FROM' @V407466 01063000
- EX R2,FINDTO ATTACH - TEST FOR 'TO' @V407466 01064000
- BE GETUSER YES, SCAN FOR USERID @V407466 01065000
- MULTIPLE TM VDCBITS,RANGE RANGE BEING PROCESSED @V407466 01066000
- BO SCNUSER2 YES, MUST BE USERID THEN @V407466 01067000
- LR R6,R1 SAVE R1 @V407466 01068000
- CALL DMKCVTHB CONVERT ADDRESS @V407466 01069000
- BNZ RESTORE RESTORE R1/R2 VALUE @V407466 01070000
- CL R0,F3 MAX LENGTH FOR DEVICE @V407490 01071000
- BH RESTORE ATTEMPT TO FIND USERID @VA09375 01072500
- TM VDCBITS,MULTR FIRST PASS THROUGH HERE @V407466 01073000
- BO NEXTADD NOT FIRST MULT, STORE ADDRESS @V407466 01074000
- ST R1,SAVEWRK6 SAVE R1 TEMPORARILY @V407466 01075000
- USING MDSECT,R4 @V407466 01076000
- LR R3,R4 R3 POINTS TO FREE STORAGE @V407466 01077000
- OI VDCBITS,MULTR MULTIPLE REAL ADDRESSES @V407466 01078000
- L R1,DEVADDR FIRST MULTIPLE @V407466 01079000
- ST R1,MULTADD MOVE MULT ADDRESS TO WORK AREA @V407466 01080000
- L R1,SAVEWRK6 RESTORE R1 @V407466 01081000
- NEXTADD LA R4,4(,R4) BUMP PTR TO NEXT FREE SLOT @V407466 01082000
- ST R1,MULTADD STORE NEXT MULTIPLE ADDRESS @V407466 01083000
- B USERSCAN GO SCAN AGAIN FOR USERID @V407466 01084000
- SPACE 2 01085000
- SCANADD TM VDCBYTE2,DETACH IF THIS ISN'T DETACH @V407466 01086000
- BZ INVUSID THERE IS A MISSING USERID @V407466 01087000
- TM VMTRCTL,VMTRIO+VMTRSIO TRACING I/O ? @VA09655 01087300
- BNZ INVTRACE YES, CAN NOT DETACH @VA09655 01087700
- OI VDCBYTE1,VDETACH ADDRESS ONLY @V407466 01088000
- LOADFFS L R1,FFS STORE FFS AS DELIMITER FOR @V407466 01089000
- * MULTIPLES 01090000
- ST R1,4(R4) IN WORKAREA @V407466 01091000
- B SCANCOMP COMMAND LINE SCAN COMPLETE @V407466 01092000
- SPACE 2 01093000
- RESTORE LR R1,R6 RESTORE R1 @V407466 01094000
- B SCNUSER2 MAYBE OPERAND IS A USERID?? @V407466 01095000
- SPACE 2 01096000
- CHKFROM EQU * LOOK FOR OPTIONAL WORD 'FROM' @V407466 01097000
- EX R2,FNDFROM DETACH - TEST FOR 'FROM' @V407466 01098000
- BNE MULTIPLE SEE IF MULTIPLES ON COMMAND @V407466 01099000
- GETUSER EQU * FIND USERID PARAMETER @V407466 01100000
- CALL DMKSCNFD @V407466 01101000
- BNZ INVUSID @V407466 01102000
- SPACE 01103000
- SCNUSER EQU * FOUND USERID FIELD @V407466 01104000
- LR R2,R0 @V407466 01105000
- BCTR R2,0 @V407466 01106000
- SCNUSER2 TM VMCLEVEL,VMCLASSB CLASS B USER @V407466 01107000
- BZ LOADFFS NO, MUST BE DETACH VIRTUAL @V407466 01108000
- CL R2,F7 IF TOO LONG... @V407466 01109000
- BH INVUSID ...INVALID USERID FIELD @V407466 01110000
- CL R0,F1 IS IT ONE CHAR? @V407466 01111000
- BH MOVEIT NOPE, ... USE IT @V407466 01112000
- CLI 0(R1),C'*' IS IT STAR? @V407466 01113000
- BNE MOVEIT NOPE, USE IT @V407466 01114000
- LA R1,VMUSER MAKE IT THE OPERATOR @V407466 01115000
- LA R2,7 ADJUSTED LENGTH FOR EXECUTE @V407466 01116000
- LA R0,8 MAKE TOTAL LENGTH 8 @V407466 01117000
- MOVEIT EQU * @V407466 01118000
- EX R2,MVCUSER MOVE TO WORK AREA @V407466 01119000
- CLC CMDUSER(8),=CL8'SYSTEM' ATTACH TO SYSTEM ? @V407466 01120000
- BNE GETBLOK NO @V407466 01121000
- L R10,ASYSVM ADDRESS OF SYSTEM VMBLOK @V407466 01122000
- TM VDCBYTE2,DETACH DETACH COMMAND? @V407466 01123000
- BO SYSDET YES, DETACH FROM 'SYSTEM' @V407466 01124000
- TM VDCBITS,RANGE+MULTR RANGE OR MULTIPLE RADDR @V407466 01125000
- * SPECIFIED? 01126000
- BM INVUSID YES, CANNOT ATTACH TO 'SYSTEM' @V407466 01127000
- SYSDET OI VDCBITS,ATTSYST ATTACH/DETACH TO/FROM SYSTEM @V407466 01128000
- B NEXTOPT GO GET VOLID @V407466 01129000
- SPACE 2 01130000
- GETBLOK EQU * FIND VMBLOK OF ATTACHEE @V407466 01131000
- CALL DMKSCNAU @V407466 01132000
- BC 2,INVUSID INVALID USERID @V407466 01133000
- BNZ NOTLOGD USER NOT LOGGED ON @V407466 01134000
- LR R10,R1 SAVE VMBLOK ADDRESS IN R10 @V407466 01135000
- TM VDCBYTE2,DETACH DETACH ? @VA09655 01135100
- BZ NEXTOPT NO,TEST FOR TRACE NOT NEEDED @VA09655 01135300
- TM VMTRCTL-VMBLOK(R10),VMTRIO+VMTRSIO TRACING I/O @VA09655 01135500
- BNZ INVTRACE YES, CAN NOT DETACH @VA09655 01135700
- SPACE 01136000
- NEXTOPT EQU * @V407466 01137000
- TM VDCBITS,CHANNEL ATTACHING A CHANNEL @V407466 01138000
- BZ NEXTOPT2 FIND NEXT OPERAND @V407466 01139000
- TM VDCBITS,ATTSYST ATTACH TO SYSTEM ? @V407466 01140000
- BO INVUSID INVALID USERID @V407466 01141000
- B SCANCOMP RETURN TO DMKVDA TO ATT CHANNEL @V407466 01142000
- CHKLEAVE EQU * HRC003DK 01142080
- MVC SAVEWRK8(8),BUFNXT SAVE BUFFER POINTERS HRC003DK 01142160
- CALL DMKSCNFD CALL WORD SCANNER HRC003DK 01142240
- BNZ LOADFFS NO MORE PARMS, LOAD FENCE HRC003DK 01142320
- LR R2,0 GET PARM LENGTH HRC003DK 01142400
- BCTR R2,0 DECR BY 1 FOR EXECUTE HRC003DK 01142480
- EX R2,CMPLEAVE COMPARE FOR LEAVE HRC003DK 01142560
- BNZ INVOPTS NOPE - INVALID OPT HRC003DK 01142640
- OI VDCBITS+1,TPNORUN INDICATE LEAVE REQ HRC003DK 01142720
- B LOADFFS DONE HRC003DK 01142800
- CMPLEAVE CLC 0(0,R1),=C'LEAVE ' HRC003DK 01142880
- SPACE 2 01143000
- NEXTOPT2 TM VDCBYTE2,DETACH DETACH COMMAND? @V407466 01144000
- BO CHKLEAVE YES, DETACH REAL - CHK LEAVE HRC003DK 01145490
- MVC SAVEWRK8(8),BUFNXT SAVE BUFFER POINTERS @V407490 01146000
- CALL DMKSCNFD FIND NEXT PARAMETER @V407466 01147000
- BNZ MANY1 NO PARM - MUST BE RANGE/MULTIPLES@V407466 01148000
- TM VDCBITS,RANGE+MULTR RANGE OR MULTIPLE ADDRESSES?@V407466 01149000
- BM CHKRO THEN, IT BETTER BE R/O @V407466 01150000
- SPACE 01150010
- * HERE WE ARE IF ATTACH TO SYSTEM OR USERID AND WE EXPECT WE 01150020
- * NOW HAVE 'AS' OR A VADDR OR THE VOLID FOR SYSTEM 01150030
- SPACE 01150040
- LR R2,R0 @V407466 01151000
- BCTR R2,0 @V407466 01152000
- EX R2,FINDAS IT MAY BE "AS" @V407466 01153000
- BNE CHKVADD NO - ASSUME IT'S AN ADDRESS @V407466 01154000
- MVC SAVEWRK8(8),BUFNXT SAVE BUFFER POINTERS @V407490 01155000
- CALL DMKSCNFD FIND VIRTUAL ADDRESS @V407466 01156000
- BNZ MANY1 VOLID OR DEV ADDR MISSING @VA11347 01157500
- CHKVADD EQU * @V407466 01158000
- TM VDCBITS,ATTSYST ATTACH TO SYSTEM ? @V407466 01159000
- BZ CHKRO NOT RANGE/MULTIPLES @VA12315 01160001
- SPACE 01160010
- * HERE WE NOW GOTS AN ATTACH TO THE SYSTEM AND HAVE WHAT MAY 01160020
- * BE A VOLID, WILL USE IT AS SUCH AND LEAVE 01160030
- SPACE 01160040
- LR R2,R0 @V407466 01161000
- CL R2,F6 MAXIMUM LENGTH FOR VOLID @V407466 01162000
- BH INVOLID VOLID INVALID @V407466 01163000
- MVC CMDUSER(8),BLANKS CLEAR VOLUME SERIAL BUFFER @V407466 01164000
- BCTR R2,0 @V407466 01165000
- EX R2,MVCUSER MOVE TO WORK AREA @V407466 01166000
- OI SAVEWRK9,VOLPRES VOLID PRESENT ON COMMAND @V60B6B8 01167000
- MVC SAVEWRK6(6),BLANKS BLANK BEFORE SAVING VOLSER @VA11886 01167500
- EX R2,MVCVOL SAVE IN CASE 3330V VOLUME @V60B6B8 01168000
- SLR R1,R1 CLEAR R1 FOR LOAD HALF @V407466 01169000
- LH R1,VIRTADD VIRTUAL ADDRESS TO R1 @V407466 01170000
- B SCANCOMP 'ATTACH' DATA IS ALL READY @V407466 01171000
- SPACE 2 01172000
- * WE WENT TO READ THE NEXT PARM AND IS NOT THERE.... IF ATT TO 01172010
- * SYSTEM ITS NO VOLID, IF TO USER ITS NO VADDR AND WE'LL GIVE A 01172020
- * DEFAULT OF THE RADDR, IF FOR THE RANGE AND MULTIPLES ITS OK 01172030
- * WE JUST GOT NO R/O OR 3330V STUFF ... GO CHECK THE ADDRESSES 01172040
- SPACE 01172050
- MANY1 TM VDCBITS,RANGE WAS RANGE SPECIFIED ON COMMAND @V407466 01173000
- * LINE? 01174000
- BO MAXRANGE VERIFY VIRTUAL DEVICE ADDRESSES @V407466 01175000
- TM VDCBITS,MULTR MULTIPLE RADDR SPECIFIED? @V407466 01176000
- BO MAXMULT VERIFY VIRTUAL DEVICE ADDRESSES @V407466 01177000
- TM VDCBITS,ATTSYST ATTACH TO SYSTEM???? 01178000
- BO INVOLID YES,THEN SHOULD HAVE VOLID @V407490 01179000
- USERADDR L R1,DEVADDR REAL DEVICE ADDRESS @V407466 01180000
- STH R1,VIRTADD RADDR=VADDR @V407466 01181000
- LTR R14,R10 DO WE HAVE AN R10 VMBLOK @V407466 01182000
- BNZ MAXDEV YES, USE IT @V407466 01183000
- LR R14,R11 NO, USE R11 THEN @V407466 01184000
- USING VMBLOK,R14 JUST BRIEFLY @V407466 01185000
- MAXDEV MAXDV R15 HIGHEST VIRTUAL DEVICE PER @V407466 01186000
- * USER'S VMBLOK 01187000
- CLR R1,R15 IS VIRTUAL DEVICE VALID @V407466 01188000
- BH INVADD2 NO, ISSUE ERROR MSG @V407466 01189000
- B SCANCOMP OK, KEEP PROCESSING @V407466 01190000
- SPACE 2 01191000
- MAXRANGE L R1,DEVADDR FIRST VIRTUAL DEVICE ADDRESS @V407466 01192000
- B CHKMAX VERIFY MAX VIRTUAL DEVICE ADDRESS@V407466 01193000
- SPACE 2 01194000
- MAXMULT L R1,FFS FENCE @V407466 01195000
- ST R1,4(R4) INDICATE END OF MULT ADDRESSES @V407466 01196000
- LR R4,R3 POINT TO BEG OF FREE STORAGE AREA@V407466 01197000
- L R1,MULTADD FIRST MULTIPLE ADDRESS @V407466 01198000
- B CHKMAX BRANCH TO VERIFY DEVICE ADDRESS @V407466 01199000
- SPACE 2 01200000
- MULTINC LA R4,4(,R4) POINT TO NEXT MULT ADDRESS @V407466 01201000
- L R1,MULTADD PICK UP THE ADDRESS @V407466 01202000
- C R1,FFS ANYMORE ADDRESSES? @V407466 01203000
- BNE CHKNEXT VERIFY NEXT ADDRESS IN RANGE @V407466 01204000
- LR R4,R3 RESTORE R4 TO BEGINNING @V407466 01205000
- B SCANCOMP NO MORE, GO PROCESS THE COMMAND @V407466 01206000
- SPACE 2 01207000
- INCREMRA LA R1,1(,R1) NEXT ADDRESS IN RANGE @V407466 01208000
- CH R1,VDCBITS+2 COMPARE WITH HIGHEST RANGE @V407466 01209000
- * ADDRESS 01210000
- BC 2,SCANCOMP END OF RANGE, RETURN TO MAINLINE @V407466 01211000
- B CHKNEXT VERIFY NEXT ADDRESS IN RANGE @V407466 01212000
- SPACE 2 01213000
- * HERE FOR AN ATTACH TO USERID AND WE HAVE A VADDR FIELD 01213010
- SPACE 01213020
- CVTVADD EQU * @V60B6B8 01214000
- TM SAVEWRK9,VADDPRES DO WE HAVE VADDR? @VA12315 01214500
- BO INVOPTS YES... TUT,TUT @VA12315 01214600
- CL R0,F3 CHECK OPERAND LENGTH @V60B6B8 01215000
- BH INVADD2 INVALID ADDRESS @VA14002 01216700
- CALL DMKCVTHB CONVT VIRTUAL ADDR TO BINARY @V60B6B8 01217000
- BNZ INVADD2 INVALID ADDRESS. @VA12315 01218100
- OI SAVEWRK9,VADDPRES WE HAVE VADDR. @VA12315 01218200
- STH R1,VIRTADD SET VIRT ADDRESS. @VA12315 01218300
- CHKMAX LTR R14,R10 DO WE HAVE AN R10 VMBLOK? @V407466 01222000
- BNZ CHKMAXDV YES - USE IT @V407466 01223000
- LR R14,R11 NO - USE R11, THEN @V407466 01224000
- CHKMAXDV MAXDV R15 HIGHEST VIRTUAL DEVICE PER @V407466 01225000
- * USER'S VMBLOK 01226000
- DROP R14 (BACK TO NORMAL) @V407466 01227000
- CHKNEXT CLR R1,R15 IS VIRTUAL DEVICE VALID ? @V407466 01228000
- BH INVADD2 NOPE @V407466 01229000
- TM VDCBITS,RANGE RANGE SPECIFIED @V407466 01230000
- BO INCREMRA PROCESS NEXT ADDRESS IN RANGE @V407466 01231000
- TM VDCBITS,MULTR MULTIPLE RADDR FIELDS @V407466 01232000
- BO MULTINC PROCESS NEXT ADDRESS @V407466 01233000
- CALL DMKSCNFD SEE IF "R/O" GIVEN @V407466 01234000
- BNZ SCANCOMP 'ATTACH' - EVERYTHING IS READY @V407466 01235000
- B CHKRO GO CHECK OUT THE OPTIONS @VA11388 01236010
- SPACE 01256000
- TSTCHAN CLC 0(*-*,R1),=C'CHANNEL' FOR ATTACH/DETACH @V407466 01257000
- FINDTO CLC 0(*-*,R1),=C'TO ' OPTIONAL WORDS @VA10197 01258100
- FINDAS CLC 0(*-*,R1),=C'AS ' ........ @VA10197 01259100
- FNDFROM CLC 0(*-*,R1),=C'FROM' ... @V407466 01260000
- MVCUSER MVC CMDUSER(*-*),0(R1) MOVE USERID TO WORK AREA @V407466 01261000
- MVCVOL MVC SAVEWRK6(0),0(R1) MOVE VOLID TO SAVE AREA @V60B6B8 01262000
- VIRTCOMP DC CL5'3330V' POSSIBLE PARAMETER @V60B6B8 01263000
- SPACE 01264000
- DASH DC C'-' RANGE DELIMITER @V407466 01265000
- BLANK EQU X'40' RANGE DELIMITER @V407466 01266000
- SPACE 01267000
- * FLAGS DEFINED IN VDCBITS: 01268000
- CHANNEL EQU X'80' CHANNEL OPTION SPECIFIED @V407466 01269000
- VDETACH EQU X'02' DETACH VIRTUAL DEVICE @V407466 01270000
- ATTSYST EQU X'10' ATTACH TO/FROM SYSTEM @V407466 01271000
- ATTREAD EQU X'08' ATTACH R/O @V407466 01272000
- * FLAGS DEFINED IN VDCBITS+1: 01273000
- DETACH EQU X'08' DETACH REQUEST @V407466 01274000
- TPNORUN EQU X'01' DONT RUN TAPE HRC003DK 01274500
- * FLAGS DEFINED IN SAVEWRK9: 01275000
- VIRTPRES EQU X'40' '3330V' PRESENT ON INPUT @V60B6B8 01276000
- VOLPRES EQU X'80' 'VOLID' PRESENT ON INPUT @V60B6B8 01277000
- VADDPRES EQU X'20' VIRT. ADDR. PRESENT @VA12315 01277100
- EJECT 01278000
- INVOPTS LA R2,RC28 INVALID OPTION @V407466 01279000
- LR R13,R5 RELOAD SAVE AREA POINTER @V407490 01280000
- STM R0,R1,SAVER0 RETURN REGS 0&1 TO CALLER @V407490 01281000
- B VDCRET RETURN TO DMKVDA @V407466 01282000
- SPACE 01283000
- INVADD2 LA R2,RC36 INVALID VADDR @V407466 01284000
- B VDCRET RETURN TO DMKVDA @V407466 01285000
- SPACE 01286000
- INVOLID LA R2,RC40 VOLID INVALID @V407466 01287000
- B VDCRET RETURN TO DMKVDA @V407466 01288000
- SPACE 01289000
- NOTLOGD LA R2,RC44 USER NOT LOGGED ON @V407466 01290000
- B VDCRET RETURN TO DMKVDA @V407466 01291000
- SPACE 2 01292000
- INVUSID LA R2,RC48 INVALID USERID @V407466 01293000
- B VDCRET RETURN TO DMKVDA @V407466 01294000
- SPACE 01294200
- INVTRACE EQU * @VA09655 01294400
- LA R2,RC72 RETURN CODE TO VDD @VA09655 01294600
- B VDCRET RETURN TO VDD @VA09655 01294800
- SPACE 01295000
- INVADD1A EQU * INVALID RADDR @V407490 01296000
- LR R2,R6 PICK UP COUNT OF TOTAL FIELD @V407490 01297000
- L R1,BUFNXT GET UPDATED BUFFER ADDR @V407490 01298000
- SR R1,R2 GET START OF BAD FIELD @V407490 01299000
- B INVADD1C GO SAVE BAD PARM @V407490 01300000
- SPACE 01301000
- INVADD1B L R1,BUFNXT GET UPDATED BUFFER ADDR @V407490 01302000
- SR R1,R0 START OF PREVIOUS FIELD @V407490 01303000
- INVADD1C BCTR R0,0 DECREMENT FOR EXECUTE @V407490 01304000
- LTR R2,R0 MOVE COUNT FOR EXECUTE @V407490 01305000
- BNM CKSIZE BR IF COUNT IS POSITIVE @V407490 01306000
- L R2,F0 SET COUNT TO MOVE ONE CHAR. @V407490 01307000
- CKSIZE CL R2,F7 SIZE > 8 CHARACTERS?? @V407490 01308000
- BNH SIZEOK BR IF 8 OR LESS @V407490 01309000
- L R2,F7 SET COUNT TO MOVE 8 (MAX) @V407490 01310000
- SIZEOK EX R2,MVCUSER SAVE INVALID FIELD @V407490 01311000
- INVADD1 LA R2,RC52 INVALID RADDR @V407466 01312000
- VDCRET EQU * @V407490 01313000
- LR R13,R5 RESTORE SAVE AREA ADDRESS @V407466 01314000
- BADRC ST R2,SAVER2 ERROR RETURN CODE @V407466 01315000
- LCR R2,R2 PLUS TO MINUS SETS COND. CODE @V407466 01316000
- B VDCEXIT2 RETURN TO DMKVDA @V407466 01317000
- SPACE 2 01318000
- SCANCOMP SR R0,R0 CLEAR ZERO RETURN CODE @V407466 01319000
- LR R13,R5 RESTORE R5 SAVE AREA ADDRESS @V407466 01320000
- ZERORC ST R0,SAVER2 PASS BACK ZERO RETURN CODE @V407466 01321000
- VDCEXIT2 STM R10,R11,SAVER10 RETURN R10, R11 TO CALLER @V407466 01322000
- EXIT @V407466 01323000
- EJECT 01324000
- * TEST TO SEE IF R/O VOLID OR 3330V PARAMETERS ARE 01325010
- * PRESENT, WHICH INDICATE THE COMMAND MAY PERTAIN 01328000
- * TO MSS VUA'S. 01329000
- * 01330000
- * NOTE: IF THE SYSTEM AND VOLID PARMS ARE PRESENT, THEN 01331000
- * THE VOLID IS STORED IN FIELD CMDUSER (SAVEWRK3-4) 01332000
- * IF THE 'USERID' AND 'VOLID' PARMS ARE PRESENT, THEN 01333000
- * THE VOLID IS STORED IN FIELD SAVEWRK6. 01334000
- * 01335000
- CHKRO DS 0H @VA11388 01336050
- CL R0,F3 IS THIS GREATER THAN THREE CHARS @VA11388 01336100
- BH CHKMSS ITS HIGHER THAN CHECK THE OTHERS @VA11388 01336150
- BNE CHKRRR AND ITS NOT EQUAL @VA11388 01336200
- CLC 0(3,R1),=C'R/O' IS IT REALLY R/O ? @VA11388 01336250
- SETREAD DS 0H @VA11388 01336300
- BNE CVTVADD COULD BE VIRT ADDR @VA12315 01336355
- TM VDCBITS,ATTREAD WE ALREADY FIND R/O OPT ? @VA11388 01336400
- BO INVOPTS YES THIS IS INVALID @VA11388 01336450
- OI VDCBITS,ATTREAD INDICATE WE GOT R/O OPTION @VA11388 01336500
- B NEXTOPTN GO GET THE NEXT ONE @VA11388 01336550
- CHKRRR DS 0H @VA11388 01336600
- CLI 0(R1),C'R' IS IT THE ABBREVIATION ? @VA11388 01336750
- B SETREAD CONTINUE FOR CHECK @VA11388 01336800
- SPACE 01336850
- CHKMSS DS 0H @VA11388 01336900
- CLC 0(5,R1),=C'3330V' IS IT 3330V OPTION @VA11388 01337050
- BNE CHKVOL NO GO HANDLE AS VOLID @VA11388 01337100
- TM SAVEWRK9,VIRTPRES WE ALREADY GET 3330V ? @VA11388 01337150
- BO INVOPTS YES DONT NEED TWO @VA11388 01337200
- OI SAVEWRK9,VIRTPRES INDICATE WE GOT THIS ONE @VA11388 01337250
- B NEXTOPTN GO GET SOME MORE @VA11388 01337300
- SPACE 01337350
- CHKVOL DS 0H @VA11388 01337400
- TM VDCBITS,RANGE+MULTR IS IT FOR RANGE OR MULTIS ? @VA11388 01337450
- BM INVOPTS YES SHOULDNT BE THIS FAR PAL @VA11388 01337500
- TM SAVEWRK9,VOLPRES WE ALREADY DO A VOLID ? @VA11388 01337550
- BO INVOPTS IF YES, INVALID OPTION @VA14002 01337610
- CLC 0(5,R1),=CL5'VOLID' IS IT VOLID? @VA12315 01337655
- BE MSSVOL GET VOLID @VA12315 01337660
- TM SAVEWRK9,VADDPRES IS VIRT ADDRESS IND ON? @VA12315 01337665
- BZ INVADD2 INVALID ADDRESS @VA12315 01337670
- B INVOPTS IF NOT... INVALID OPTION @VA12315 01337675
- MSSVOL EQU * @VA12315 01337680
- CALL DMKSCNFD GET VOLID @VA12315 01337685
- BNZ INVOLID NONE....INVALID VOLID @VA12315 01337690
- OI SAVEWRK9,VOLPRES INDICATE WE GOT IT @VA14002 01337697
- CL R0,F6 GREATER THAN 6 CHARS ? @VA11388 01337700
- BH INVOLID YES...WRONG VOLID @VA12315 01337760
- LR R2,R0 INIT THE LENGTH @VA11388 01337800
- BCTR R2,0 DECREMENT IT @VA11388 01337850
- MVC SAVEWRK6(6),BLANKS BLANK BEFORE SAVING VOLSER @VA11886 01337870
- EX R2,MVCVOL MOVE IT INTO SAVEWRK6 @VA11388 01337900
- SPACE 01337950
- NEXTOPTN DS 0H @VA11388 01338000
- CALL DMKSCNFD GO GET THE NEXT LITTLE BEAUTY @VA11388 01338050
- BZ CHKRO BEGIN THE SEARCH @VA11388 01338100
- TM VDCBITS,MULTR WAS IT MULTIS @VA11388 01338150
- BO MAXMULT YES GO TO ITS SPECIAL PLACE @VA11388 01338200
- TM VDCBITS,RANGE WAS IT RANGE TYPE @VA14002 01338210
- BO MAXRANGE GO THERE ALSO @VA14002 01338220
- TM SAVEWRK9,VADDPRES IS VIRT ADDRSS PRESENT ? @VA12315 01338260
- BO VADDOK YES.. IT'S ALRIGHT @VA12315 01338310
- MVC VIRTADD(2),DEVADDR+2 PUT ONE THERE @VA11388 01338400
- VADDOK DS 0H @VA11388 01338450
- B SCANCOMP ELSE WE'S ALL DONE JACK @VA11388 01338600
- EJECT 01364000
- LTORG @V407466 01365000
- EJECT 01366000
- COPY SAVE @V407466 01367000
- COPY IOBLOKS @V407466 01368000
- COPY CONBUF @V407490 01369000
- SPACE 01370000
- VDCBITS EQU SAVEWRK1 FLAGS USED WITHIN VDA @V407466 01371000
- DEVADDR EQU SAVEWRK2 REAL DEVICE ADDRESS @V407466 01372000
- CMDUSER EQU SAVEWRK3 AND SAVEWRK4 - USERID @V407466 01373000
- VIRTADD EQU SAVEWRK1+2 VIRTUAL DEVICE ADDRESS @V407466 01374000
- SPACE 1 01375000
- MB35 EQU 348 3340/44 35MB CYLINDERS @V56BDA8 01376000
- MB70 EQU 696 3340/44 70MB CYLINDERS @V56BDA8 01377000
- SPACE 01378000
- TEMP EQU X'08' TEMP SPACE @VM00019 01379000
- SPACE 01380000
- SPACE 2 01381000
- VDCLOK DSECT , DSECT FOR EXPANDED IOBLOK @V407466 01382000
- DS (IOBSIZE)D @V407466 01383000
- VDCLCCW DS 7D .... @V407466 01384000
- * SEEK, TIC, NOP, SEARCH, TIC, READ SENSE @V407466 01385000
- VDCLCNT DS 1D SEEK AND SEARCH ARGS @V407466 01386000
- VDCLBUF DS 10D 80-BYTE LABEL-RECORD BUFFER @V407466 01387000
- VDCLSNS DS 4D 32-BYTE SENSE AREA @V407466 01388000
- VDCLLEN EQU (*-VDCLOK)/8 BLOCK LENGTH IN DBL-WDS @V407466 01389000
- EJECT 01390000
- MDSECT DSECT @V407466 01391000
- MULTADD DS F ADDRESS @V407466 01392000
- DS 47F UP TO 48 CCU ON ONE COMMAND LINE @V407466 01393000
- DS 4D ... @V407466 01394000
- MULTSIZE EQU (*-MULTADD)/8 @V407466 01395000
- SPACE 01396000
- VDCWORK DSECT @V407466 01397000
- VDCVDEV DS H VDEVBLOK COUNT TO BE ATTACHED @V407466 01398000
- VDCVCH DS H REQUIRED NUMBER VCHBLOKS @V407466 01399000
- VDCVCU DS H REQUIRED NUMBER VCUBLOKS @V407466 01400000
- VDCVCUE DS H EMPTY VCUBLOK SLOTS @V407466 01401000
- VDCVCHE DS H EMPTY VCHBLOK SLOTS @V407466 01402000
- SPACE 01403000
- VDCVDEVE DS H EMPTY VDEVBLOK SLOTS @V407466 01404000
- VDCCHMAP DS H CHANNEL BIT MAP @V407466 01405000
- VDCCUMAP DS 16H CONTROL UNIT BIT MAP @V407466 01406000
- VDCFLAG DS X BUILD BLOK FLAG @V407466 01407000
- DS X RESERVED FOR IBM USE @V407466 01408000
- VDCSIZE EQU (*-VDCWORK+7)/8 @V407466 01409000
- SPACE 01410000
- * FLAGS DEFINED IN VDCFLAG 01411000
- DEVBLD EQU X'80' BUILDING VDEVBLOKS @V407466 01412000
- CUBLD EQU X'40' BUILDING VCUBLOKS @V407466 01413000
- SPACE 01414000
- VDCBYTE1 EQU SAVEWRK1 FLAG INDICATING MULT/RANGE @V407466 01415000
- VDCBYTE2 EQU SAVEWRK1+1 @V407466 01416000
- VDCRADD2 EQU SAVEWRK1+2 SECOND RADDR IN RANGE @V407466 01417000
- VDCRADD1 EQU SAVEWRK2 FIRST RADDR IN RANGE @V407466 01418000
- VDCUSER EQU SAVEWRK3 USERID ASSOCIATED WITH ATTACH @V407466 01419000
- VDCVADD EQU SAVEWRK5 VIRTUAL ADDRESS @V407466 01420000
- * 01421000
- * FLAGS DEFINED IN VDCBYTE1 01422000
- * 01423000
- SPACE 01424000
- MULTR EQU X'20' MULTIPLE ADDRESSES ON ATTACH @V407466 01425000
- RANGE EQU X'04' ADDRESS RANGE ON ATTACH @V407466 01426000
- ATTCTCA EQU X'02' ATTACHING CTCA @V407466 01427000
- DED2305 EQU X'01' 2305 MULTIPLE EXPOSURE DEVICE @V407466 01428000
- SPACE 01429000
- * RETURN CODES PASSED BACK TO DMKVDA 01430000
- SPACE 01431000
- RC28 EQU 28 @V407466 01432000
- RC36 EQU 36 INVALID VADDR @V407466 01433000
- RC40 EQU 40 INVALID VOLID @V407466 01434000
- RC44 EQU 44 USER NOT LOGGED ON @V407466 01435000
- RC48 EQU 48 INVALID USERID @V407466 01436000
- RC52 EQU 52 INVALID RADDR @V407466 01437000
- RC72 EQU 72 USER IS TRACING I/O @VA09655 01437500
- SPACE 01438000
- BASEXP EQU X'07' 2305 BASE EXPOSURE @V407466 01439000
- EJECT 01440000
- COPY VMBLOK @V407466 01441000
- COPY VBLOKS @V407466 01442000
- COPY IOER @V407466 01443000
- COPY EQU @V407466 01444000
- COPY DEVTYPES @V407466 01445000
- PSA @V407466 01446000
- COPY RBLOKS @V407466 01447000
- COPY ALLOC @V407466 01448000
- END DMKVDC 01449000
ibm/vm370-lib/cp/dmkvdc.assemble_src.txt ยท Last modified: 2023/08/06 13:37 by Site Administrator