ibm:vm370-lib:cp:dmkvds.assemble_src
Table of Contents
DMKVDS Source
References
- Fixes Applied : 12
- This Source Date : Thursday, December 7, 1978
- Last Fix ID : [HRC039DK]
Source Listing
- DMKVDS.ASSEMBLE.txt
- VDS TITLE 'DMKVDS (CP) VM/370 - RELEASE 6' 00001000
- ISEQ 73,80 VALIDATE SEQUENCING OF SYSIN 00002000
- SPACE 00003000
- DMKVDS CSECT 00004000
- SPACE 00005000
- EXTRN DMKTDKGT 00006000
- EXTRN DMKSYSCK @VM08883 00007000
- EXTRN DMKSCNVU 00008000
- EXTRN DMKSCNLI @VA04747 00008010
- EXTRN DMKSCNRD,DMKSCNRU @V200820 00009000
- EXTRN DMKCVTBH,DMKERMSG @V200820 00010000
- EXTRN DMKCVTAB @VA04301 00010100
- EXTRN DMKFRERC CALL TO DMFREE WITH RETURN CODE @V3E7466 00010110
- EXTRN DMKSPLDL @V60B9BA 00010200
- SPACE 00011000
- USING PSA,R0 00012000
- USING RDEVBLOK,R1 00013000
- USING UDEVBLOK,R2 00014000
- USING VDEVBLOK,R8 00015000
- USING VMBLOK,R11 00016000
- USING DMKVDS,R12 00017000
- USING SAVEAREA,R13 00018000
- SPACE 00019000
- *. 00020000
- * MODULE NAME - 00021000
- * 00022000
- * DMKVDS 00023000
- * 00024000
- * CONTENTS - 00025000
- * 00026000
- * DMKVDSAT - SUBROUTINE TO ATTACH A VIRTUAL DEVICE 00027000
- * DMKVDSDF - SUBROUTINE TO DEFINE A VIRTUAL DEVICE 00028000
- * DMKVDSLK - SUBROUTINE TO LINK TO A VIRTUAL DASD DEVICE 00029000
- EJECT 00030000
- * SUBROUTINE NAME - 00031000
- * 00032000
- * DMKVDSAT - SUBROUTINE TO ATTACH A VIRTUAL DEVICE 00033000
- * 00034000
- * FUNCTION - 00035000
- * 00036000
- * TO PERFORM THE INTERNAL FUNCTIONS NECESSARY TO 00037000
- * ATTACH A VIRTUAL DEVICE TO A USER. 00038000
- * 00039000
- * ATTRIBUTES - 00040000
- * 00041000
- * REENTRANT, PAGEABLE, CALLED VIA SVC 00042000
- * 00043000
- * ENTRY POINTS - 00044000
- * 00045000
- * DMKVDSAT 00046000
- * 00047000
- * ENTRY CONDITIONS - 00048000
- * 00049000
- * GPR 1 = ADDRESS OF RDEVBLOK TO BE ATTACHED 00050000
- * GPR 2 = ADDRESS OF UDEVBLOK FOR THE VIRT ADDR 00051000
- * GPR 11 = ADDRESS OF USER'S VMBLOK 00052000
- * GPR 12 = ADDRESS OF DMKVDSAT 00053000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00054000
- * 00055000
- * EXIT CONDITIONS - 00056000
- * 00057000
- * VIRTUAL DEVICE BLOCK HAS BEEN CREATED (IF NECESSARY) 00058000
- * AND INITIALIZED AS NEEDED. 00059000
- * 00060000
- * CC = 0 IF SUCCESSFUL (AND GPR2 = 0) 00061000
- * CC = 1 IF UNSUCCESSFUL - ERROR-CODE RETURNED IN GPR 2 00062000
- * 00063000
- * GPR 1 = ADDRESS OF REAL DEVICE BLOCK (UNCHANGED) 00064000
- * GPR 2 = ERROR-CODE AS FOLLOWS (IF UNSUCCESSFUL): 00065000
- * 8 = SPOOL DEVICE NOT DRAINED 00066000
- * 12 = REAL DEVICE IS OFFLINE 00067000
- * 16 = DEVICE IS IN USE BY SYSTEM 00068000
- * 20 = DASD DEVICE IS CP OWNED 00069000
- * 24 = REAL DEVICE IS DEDICATED 00070000
- * 32 = STORAGE REQUEST NOT SATISFIED. 00070100
- * 124 = MAX NO. OF VIRT DEV DEFINED 00070200
- * GPR 8 = ADDRESS OF VIRTUAL DEVICE BLOCK 00071000
- * 00072000
- * CALLS TO OTHER ROUTINES - 00073000
- * 00074000
- * DMKFRERC - TO OBTAIN VCHBLOK, VCUBLOK AND VDEVBLOK 00075000
- * DMKFRET - TO RETURN A VCHBLOK, VCUBLOK, OR VDEVBLOK TO FREE 00076000
- * STORAGE (IF A LARGER ONE IS NEEDED) 00077000
- * DMKSCNVU - TO FIND THE VCHBLOK, VCUBLOK, AND/OR VDEVBLOK FOR 00078000
- * A VIRTUAL DEVICE. 00079000
- * DMKSPLDL - TO DELETE THE SPOOL FILES ON THE DELAY PURGE 00079100
- * QUEUE OF A 3800 PRINTER TO BE ATTACHED 00079200
- * 00080000
- * EXTERNAL REFERENCES - 00081000
- * 00082000
- * NONE 00083000
- EJECT 00084000
- * TABLES / WORK AREAS - 00085000
- * 00086000
- * RDEVBLOK 00087000
- * UDEVBLOK 00088000
- * VCHBLOK 00089000
- * VCUBLOK 00090000
- * VDEVBLOK 00091000
- * 00092000
- * REGISTER USAGE - 00093000
- * 00094000
- * GPR 6 = ADDRESS OF VCHBLOK 00095000
- * GPR 7 = ADDRESS OF VCUBLOK 00096000
- * GPR 8 = ADDRESS OF VDEVBLOK 00097000
- * GPR 9 = RETURN REGISTER FOR INTERNAL SUBROUTINE BLDBLOK 00098000
- * GPR 10 = RETURN REGISTER FOR INTERNAL SUBROUTINE BLDVDEV 00099000
- * GPR 11 = ADDRESS OF USER'S VMBLOK 00100000
- * GPR 12 = BASE REGISTER 00101000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00102000
- * 00103000
- * GPRS 0-5 AND 14-15 ARE WORK REGISTERS. 00104000
- * 00105000
- * NOTES - 00106000
- * 00107000
- * NONE 00108000
- * 00109000
- * OPERATION - 00110000
- * 00111000
- * 1. THE REAL DEVICE BLOCK IS CHECKED TO SEE IF THE REAL DEVICE 00112000
- * IS OFFLINE, ATTACHED TO THE SYSTEM, OWNED BY CP, OR ALREADY 00113000
- * ATTACHED. IF SO, A CONDITION-CODE 1 AND A SPECIFIC ERROR CODE 00114000
- * IN GPR 2 ARE RETURNED TO THE CALLER (SEE EXIT CONDITIONS). 00115000
- * 00116000
- * 2. IF NOT, THEN A VIRTUAL DEVICE BLOCK (AND CONTROL UNIT BLOCK 00117000
- * AND/OR CHANNEL BLOCK, IF NECESSARY) IS CREATED AND INITIALIZED 00118000
- * (USING INTERNAL SUBROUTINES BLDVDEV & BLDBLOK). 00119000
- * 00120000
- * 3. FINALLY, DMKVDSAT FLAGS THE REAL DEVICE AS DEDICATED 00121000
- * (I.E. ATTACHED), AND FILLS IN OTHER DATA AS NEEDED IN THE 00122000
- * VIRTUAL AND REAL DEVICE BLOCKS, AND RETURNS TO THE CALLER. 00123000
- * 00124000
- * ERROR MESSAGES - 00125000
- * 00126000
- * DMKVDS465W CTLR XXX EMULATOR LINES IN USE BY SYSTEM 00127000
- *. 00128000
- EJECT @V4075A0 00128100
- COPY OPTIONS @V4075A0 00128200
- EJECT @V4075A0 00128300
- EJECT 00129000
- DC CL8'DMKVDS' MODULE IDENTIFIER. 00130000
- SPACE 00131000
- DMKVDSAT RELOC , SUBROUTINE TO ATTACH A REAL DEVICE 00132000
- SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 00132100
- SPACE 2 00133000
- TM RDEVSTAT,RDEVDISA+RDEVDED CHECK REAL DEVICE 00134000
- BNZ ATTBUSY BRANCH IF OFFLINE OR ALREADY IN USE 00135000
- TM RDEVTYPC,CLASDASD+CLASTAPE DASD OR TAPE ? @V200820 00136000
- BNZ ATTDATA YES -- @V200820 00137000
- TM RDEVTYPC,CLASURI+CLASURO INPUT OR OUTPUT ? @V200820 00138000
- BNZ ATTURIO YES -- SPOOL @V200820 00139000
- TM RDEVTYPC,CLASTERM+CLASGRAF TERM OR GRAPHIC ? @V200820 00140000
- BNZ ATTRMGR YES -- @V200820 00141000
- CLI RDEVTYPC,CLASSPEC CLASS SPECIAL ? @V200820 00142000
- BNE ATTBLDV NO -- JUST ATTACH IT @V200820 00143000
- SPACE 00144000
- ATTSPEC EQU * DEDICATE CLASSPEC @V200820 00145000
- CLI RDEVTYPE,TYP3705 IS THIS A 3704 OR 3705 ? @V200820 00146000
- BNE ATTBLDV NO -- @V200820 00147000
- TM RDEVSTAT,RDEVRSVD LINES IN USE BY THE SYSTEM ?@V200820 00148000
- BO ATTSHRD YES -- @V200820 00149000
- TM RDEVFLAG,RDEVRCVY IN RECOVERY BY SYSTEM? @VA01656 00150000
- BO ATTSHRD YES -- CAN'T ATTACH THEN @VA01656 00151000
- TM RDEVFLAG,RDEVLNCP IS THERE AN ACTIVE NICLIST ?@V200820 00152000
- BZ ATTSPEP NO -- CHECK EMULATOR LINES @V200820 00153000
- LH R3,RDEVMAX MAXIMUM RESOURCE I.D. @V200820 00154000
- LA R3,1(0,R3) PLUS ONE FOR NO. OF NICBLOKS @V200820 00155000
- MH R3,=AL2(NICSIZE) GR3 = NICLIST SIZE IN DBL-WD@V200820 00156000
- LR R0,R3 . . . @VM08559 00157000
- L R1,RDEVNICL START OF THE NICLIST @V200820 00158000
- CALL DMKFRET RETURN IT TO FREE STORAGE @V200820 00159000
- L R1,SAVER1 RECOVER RDEVBLOK ADDRESS @V200820 00160000
- SLR R3,R3 @V200820 00161000
- ST R3,RDEVNICL NO MORE ACTIVE NICLIST @V200820 00162000
- NI RDEVFLAG,255-RDEVLNCP NO MORE NCP @V200820 00163000
- STH R3,RDEVMAX CLEAR RESOURCE I.D. COUNT @V200820 00164000
- ATTSPEP EQU * @V200820 00165000
- TM RDEVFLAG,RDEVEPLN EP-LINES IN USE BY SYSTEM ? @V200820 00166000
- BZ ATTBLDV NO -- O.K. TO ATTACH @V200820 00167000
- LR R8,R1 RDEVBLOK TO GR8 @V200820 00168000
- CALL DMKSCNRD GET DEVICE ADDRESS IN GR1 @V200820 00169000
- CALL DMKCVTBH CONVERT @V200820 00170000
- ICM R1,8,BLANKS PUT A BLANK HIGH-ORDER @V200820 00171000
- L R0,MSGHEAD MODULE ID, LENGTH @V200820 00172000
- L R2,MSGPARM FLAGS, MSG NUMBER @V200820 00173000
- CALL DMKERMSG,AFFINITY @V4075A0 00174100
- LM R1,R2,SAVER1 RESTORE RDEVBLOK, UDEVBLOK PTRS @V200820 00175000
- B ATTBLDV GO ATTACH THE 370X @V200820 00176000
- SPACE 00177000
- ATTRMGR EQU * DEDICATE CLASTERM OR CLASGRAF @V200820 00178000
- TM RDEVFLAG,RDEVENAB IN USE BY THE SYSTEM ? @V200820 00179000
- BO ATTSHRD YES -- @V200820 00180000
- CLI RDEVTYPC,CLASGRAF GRAF DEVICE? @VA09765 00180100
- BNE ATTBLDV NO, CONTINUE @VA09765 00180150
- CLC RDEVNAME,TST3138 3138? @VA09765 00180200
- BE GRAFCONS YES, BRANCH @VA09765 00180250
- CLC RDEVNAME,TST3148 3148? @VA09765 00180300
- BE GRAFCONS YES, BRANCH @VA09765 00180350
- CLC RDEVNAME,TST3158 3158? @VA09765 00180400
- BE GRAFCONS YES, BRANCH @VA09765 00180450
- CLC RDEVNAME,TST3036 3036? @VA09765 00180500
- BE GRAFCONS YES, BRANCH @VA09765 00180550
- CLC RDEVNAME,TST3066 3066? @VA09765 00180600
- BNE ATTBLDV NO, BRANCH @VA09765 00180650
- GRAFCONS DS 0H @VA09765 00180700
- OI UDEVSTAT,UDEV3158 SET INDICATOR @VA09765 00180750
- B ATTBLDV GO ATTACH THE DEVICE @V200820 00181000
- SPACE 00182000
- ATTURIO EQU * DEDICATE CLASURI OR CLASURO @V200820 00183000
- TM RDEVFLAG,RDEVDRAN IS THE DEVICE DRAINED ? @V200820 00184000
- BZ ATTDRAN NO -- @V200820 00185000
- ICM R15,15,RDEVSPL CHECK FOR ACTIVE SFBLOK @V200820 00186000
- BNZ ATTDRAN YES - CANNOT ATTACH @V200820 00187000
- CLI RDEVTYPE,TYP3800 IS IS A 3800 PRINTER ? @V60B9BA 00187010
- BNE ATTBLDV GO ATTACH IF NOT 3800 @V60B9BA 00187020
- SPACE 1 00187030
- * THE DELAY PURGE QUEUE MUST BE PURGED FOR A 3800 PRINTER @V60B9BA 00187040
- * BEFORE ATTACHING IT TO THE USER @V60B9BA 00187050
- SPACE 1 00187060
- LR R10,R7 SAVE R7 FOR NOW @V60B9BA 00187070
- NOCALL4 L R7,RDEVDELP GET THE DELAYED PURGE ANCHOR @V60B9BA 00187080
- LTR R7,R7 ANYTHING THERE ? @V60B9BA 00187090
- BZ NOCALL5 XFER IF NOTHING THERE @V60B9BA 00187100
- MVC RDEVDELP,0(R7) NEXT ONE IS NOW FIRST @V60B9BA 00187110
- CALL DMKSPLDL GO AND DELETE IT @V60B9BA 00187120
- B NOCALL4 DO FOR NEXT ONE ALSO @V60B9BA 00187130
- NOCALL5 LR R7,R10 RESTORE R7 @V60B9BA 00187140
- B ATTBLDV ATTACH THE DEVICE @V200820 00188000
- SPACE 00189000
- ATTDATA EQU * DEDICATE CLASDASD OR CLASTAPE @V200820 00190000
- TM RDEVFLAG,RDEVSYS+RDEVOWN IN USE BY SYSTEM ? @V200820 00191000
- BNZ ATTBUSY YES -- @V200820 00192000
- LA R4,8(0,0) LOOP COUNTER IF 2305 DEVICE @V200820 00193000
- SPACE 00194000
- ATTBLDV EQU * BUILD VDEVBLOK, DEDICATE DEVICE @V200820 00195000
- BAL R10,BLDVDEV @V200820 00196000
- USING VCHBLOK,R6 @VA01041 00197000
- USING VCUBLOK,R7 @VA01041 00198000
- OI RDEVSTAT,RDEVDED FLAG REAL DEVICE AS DEDICATED 00199000
- NI RDEVFLAG,X'FF'-RDEVMOUT INDICATE MOUNTED AND ATTACHED 00200000
- ST R11,RDEVUSER STORE ATTACHED USER'S VMBLOK ADDRESS 00201000
- LH R0,UDEVADD STORE ATTACHED VIRTUAL ADDRESS 00202000
- STH R0,RDEVATT .. 00203000
- L R15,=A(DMKSYSCK) @VM08883 00204000
- STCK 0(R15) OBTAIN ATTACH TIME @VM08883 00205000
- BC 3,DOWNWEGO CLOCK NOT FUNCTIONING @VA04301 00205100
- MVC RDEVTMAT,0(R15) AND SAVE IT. @VM08883 00206000
- OI VDEVSTAT,VDEVDED FLAG VIRTUAL DEVICE AS DEDICATED 00207000
- LH R0,RDEVTYPC MAKE VIRTUAL DEVICE TYPE SAME AS REAL 00208000
- STH R0,VDEVTYPC .. 00209000
- CH R0,=AL1(CLASSPEC,TYPCTCA) IS THIS A CTCA ? 00210000
- BNE ATTNCTC NO -- O.K. AS IS 00211000
- MVI VCUTYPE,VCUCTCA CONTROL UNIT IS CHAN-TO-CHAN@VA01041 00212000
- MVI VCHTYPE,VCHSEL FORCE CHANNEL TYPE TO SELECTOR @VA05197 00212500
- ATTNCTC EQU * 00213000
- ST R1,VDEVREAL STORE ATTACHED RDEVBLOK ADDRESS 00214000
- BAL R9,CHEKRSRL CHECK WHETHER RESERVE/RELEASE VALID CCW 00215000
- CLI RDEVTYPC,CLASDASD DASD DEVICE ? @V200820 00216000
- BNE ATTEXIT NO -- ALL DONE @V200820 00217000
- CLI RDEVTYPE,TYP2305 MULTIPLE-EXPOSURE DRUM ? @V200820 00218000
- BNE ATTCHKRD NO -- TEST FOR READ/ONLY @V200820 00219000
- TM UDEVMODE,X'18' SEPARATE R/O CHECK @VA02888 00220000
- BNZ *+8 NOT READ/ONLY ATTACH @V200820 00221000
- OI VDEVFLAG,VDEVRDO MAKE VIRTUAL DEVICE R/O @V200820 00222000
- MVI VCUTYPE,X'00' CONTROL UNIT IS NOT SHARED @VA01041 00223000
- LR R8,R1 RDEVBLOK TO GR8 @V200820 00224000
- CALL DMKSCNRD GET REAL DEVICE ADDR IN CCU FORM @VA04098 00225000
- LA R1,1(0,R1) NEXT EXPOSURE @V200820 00226000
- CALL DMKSCNRU LOCATE THE NEXT RDEVBLOK @V200820 00227000
- LR R1,R8 . . .IN GR1 @V200820 00228000
- L R2,SAVER2 RECOVER THE UDEVBLOK @V200820 00229000
- LH R3,UDEVADD VIRTUAL DEVICE ADDRESS @V200820 00230000
- LA R3,1(0,R3) INCREMENT @V200820 00231000
- STH R3,UDEVADD . . . @V200820 00232000
- BCT R4,ATTBLDV BUILD EIGHT VDEVBLOK'S @V200820 00233000
- LH R3,UDEVADD @V200820 00234000
- S R3,F8 RESTORE ORIGINAL ADDRESS @V200820 00235000
- STH R3,UDEVADD . . . @V200820 00236000
- LH R1,UDEVADD GET ITS ADDRESS PLEASE @VA04098 00237000
- CALL DMKSCNVU REOBTAIN VDEVBLOK (MAY HAVE MOVED@VA04098 00238000
- B ATTEXIT ALL DONE @V200820 00239000
- SPACE 00240000
- ATTCHKRD TM UDEVMODE,X'18' IS THIS TO BE A R/O LINK/ATTACH? @VA02888 00241000
- BNZ ATTEXIT IF NOT, GO EXIT. 00242000
- OI VDEVFLAG,VDEVRDO YES, FLAG VIRTUAL DEVICE AS READ-ONLY 00243000
- ATTEXIT ST R8,SAVER8 RETURN VDEVBLOK ADDRESS 00244000
- TM VCHTYPE,VCHSEL SELECTOR CHANNEL? @VA03072 00245000
- BNZ ATTCOMP NO -- ALL SET AS IS @VA01041 00246000
- CLI VDEVTYPC,CLASTAPE SHARED TYPE? @VA02808 00247000
- BE SETSHRD SET SHARED SUB-CHAN CTL UNIT @VA02808 00248000
- CLI VDEVTYPC,CLASGRAF GRAF CLASS? @VA02808 00249000
- BNE ATTCOMP NON-SHARED CTL UNIT @VA02808 00250000
- TM VDEVTYPE,TYP3277+TYP3278 3270? @V60A6B6 00251000
- BZ ATTCOMP NO--NON SHARED @V60A6B6 00252000
- TM UDEVSTAT,UDEV3158 IS IT A 3158? @VA02100 00253000
- BO ATTCOMP YES, NOT SHARED @VA02100 00254000
- SETSHRD OI VCUTYPE,VCUSHRD SHARED SUB-CHANNEL CTL UNIT @VA02808 00255000
- ATTCOMP EQU * SET RETURN CODE AND EXIT @VA01041 00256000
- SR R0,R0 SET CC = 0 00257000
- ST R0,SAVER2 PASS BACK ZERO RETURN CODE 00258000
- VDSEXIT EXIT RETURN TO CALLER 00259000
- SPACE 2 00260000
- DROP R1,R6,R7 @VA01041 00261000
- EJECT 00262000
- *. 00263000
- * SUBROUTINE NAME - 00264000
- * 00265000
- * DMKVDSDF - SUBROUTINE TO DEFINE A VIRTUAL DEVICE 00266000
- * 00267000
- * FUNCTION - 00268000
- * 00269000
- * TO PERFORM THE INTERNAL FUNCTIONS NECESSARY TO 00270000
- * DEFINE A NEW VIRTUAL DEVICE FOR A USER. 00271000
- * 00272000
- * ATTRIBUTES - 00273000
- * 00274000
- * REENTRANT, PAGEABLE, CALLED VIA SVC 00275000
- * 00276000
- * ENTRY POINTS - 00277000
- * 00278000
- * DMKVDSDF 00279000
- * 00280000
- * ENTRY CONDITIONS - 00281000
- * 00282000
- * GPR 2 = ADDRESS OF USER DEVICE BLOCK 00283000
- * GPR 11 = ADDRESS OF USER'S VMBLOK 00284000
- * GPR 12 = ADDRESS OF DMKVDSDF 00285000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00286000
- * 00287000
- * EXIT CONDITIONS - 00288000
- * 00289000
- * VIRTUAL DEVICE BLOCK HAS BEEN CREATED (IF NECESSARY) 00290000
- * AND INITIALIZED AS NEEDED. 00291000
- * 00292000
- * CC = 0 IF SUCCESSFUL (AND GPR2 = 0) 00293000
- * CC = 1 IF UNSUCCESSFUL - ERROR-CODE RETURNED IN GPR 2 00294000
- * 00295000
- * GPR 2 = ERROR-CODE AS FOLLOWS (IF UNSUCCESSFUL): 00296000
- * 28 = SPACE NOT AVAILABLE 00297000
- * GPR 8 = ADDRESS OF VIRTUAL DEVICE BLOCK 00298000
- * 00299000
- * CALLS TO OTHER ROUTINES - 00300000
- * 00301000
- * DMKFREE - TO OBTAIN A VCHBLOK, VCUBLOK, VDEVBLOK OR VSPXBLOK 00302000
- * DMKFRET - TO RETURN A VCHBLOK, VCUBLOK, OR VDEVBLOK TO FREE 00303000
- * STORAGE (IF A LARGER ONE IS NEEDED) 00304000
- * DMKTDKGT - TO OBTAIN T-DISK SPACE 00305000
- * DMKSCNVU - TO FIND THE VCHBLOK, VCUBLOK, AND/OR VDEVBLOK FOR 00306000
- * A VIRTUAL DEVICE. 00307000
- * 00308000
- * EXTERNAL REFERENCES - 00309000
- * 00310000
- * NONE 00311000
- EJECT 00312000
- * TABLES / WORK AREAS - 00313000
- * 00314000
- * UDEVBLOK 00315000
- * VCHBLOK 00316000
- * VCUBLOK 00317000
- * VDEVBLOK 00318000
- * VSPXBLOK 00318100
- * 00319000
- * REGISTER USAGE - 00320000
- * 00321000
- * GPR 6 = ADDRESS OF VCHBLOK 00322000
- * GPR 7 = ADDRESS OF VCUBLOK 00323000
- * GPR 8 = ADDRESS OF VDEVBLOK 00324000
- * GPR 9 = RETURN REGISTER FOR INTERNAL SUBROUTINE BLDBLOK 00325000
- * GPR 10 = RETURN REGISTER FOR INTERNAL SUBROUTINE BLDVDEV 00326000
- * GPR 11 = ADDRESS OF USER'S VMBLOK 00327000
- * GPR 12 = BASE REGISTER 00328000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00329000
- * 00330000
- * GPRS 0-5 AND 14-15 ARE WORK REGISTERS. 00331000
- * 00332000
- * NOTES - 00333000
- * 00334000
- * NONE 00335000
- * 00336000
- * OPERATION - 00337000
- * 00338000
- * 1. A VIRTUAL DEVICE BLOCK (AND CONTROL UNIT BLOCK AND/OR 00339000
- * CHANNEL BLOCK, IF NECESSARY) IS CREATED AND INITIALIZED 00340000
- * (USING INTERNAL SUBROUTINES BLDVDEV & BLDBLOK). 00341000
- * 00342000
- * 2. THE DEVICE CLASS AND TYPE (PROVIDED BY THE CALLER) ARE 00343000
- * STORED IN THE VIRTUAL DEVICE BLOCK, AND APPROPRIATE STEPS 00344000
- * ARE TAKEN TO INITIALIZE THE VIRTUAL DEVICE BLOCK, AS NEEDED, 00345000
- * FOR A TERMINAL, UNIT RECORD, OR T-DISK TYPE OF DEVICE. 00346000
- * IN ADDITION, FOR A UNIT RECORD OUTPUT DEVICE, THE 00346100
- * SMALL SIZED VSPXBLOK WITHOUT ROOM FOR THE TAG FIELD 00346200
- * IS GOTTEN VIA DMKFREE AND THEN INITIALIZED. 00346300
- * 00347000
- * 3. WHEN ALL APPROPRIATE DATA HAS BEEN FILLED IN THE VIRTUAL 00348000
- * DEVICE BLOCK, RETURN IS MADE TO THE CALLER. 00349000
- *. 00350000
- EJECT 00351000
- DMKVDSDF RELOC SUBROUTINE TO DEFINE A VIRTUAL DEVICE 00352000
- TM UDEVSTAT,UDEVTDSK DEFINING A T-DISK ? 00353000
- BO DEFTDSK YES - SPECIAL HANDLING 00354000
- BAL R10,BLDVDEV BUILD A VIRTUAL DEVICE BLOCK 00355000
- LA R10,ATTEXIT SET R10 = A(ATTEXIT) FOR 'BR' & 'BCR' USE 00356000
- LH R0,UDEVTYPC SET DEVICE CLASS AND TYPE 00357000
- STH R0,VDEVTYPC .. 00358000
- CLI VDEVTYPE,TYP1052 IS THIS A PRIMARY CONSOLE DEVICE ? 00359000
- BE DEFTERM YES -- NEEDS VCONCTL 00360000
- TM VDEVTYPC,CLASURI+CLASURO IS THIS A SPOOLED DEVICE ? 00361000
- BNZ DEFSPOOL BRANCH IF YES 00362000
- TM VDEVTYPC,CLASSPEC+CLASGRAF GRAF OR CTCA? @VA09186 00362100
- BZR R10 NO-LEAVE IT @VA09186 00362200
- OI VDEVSTAT,VDEVNRDY TURN ON NOT READY @VA09186 00362300
- CLC VDEVTYPC(2),=AL1(CLASSPEC,TYPCTCA) IS IT CTCA? @VA12155 00363500
- BCR 7,R10 'BNE ATTEXIT' NO - LEAVE IT ALONE 00364000
- MVI VCUTYPE-VCUBLOK(R7),VCUCTCA MARK CTL UNIT ALSO 00366000
- CLI VCHADD-VCHBLOK(R6),X'00' IS THIS CHANNEL ZERO ? @VA01771 00367000
- BER R10 YES - EXIT. @VA01771 00368000
- MVI VCHTYPE-VCHBLOK(R6),VCHSEL MAKE CTCA CHANNEL @VA01771 00369000
- * SELECTOR. 00370000
- BR R10 ...AND EXIT 00371000
- SPACE 00372000
- DEFTERM EQU * DEFINE PRIMARY VIRTUAL MACHINE CONSOLE 00373000
- LA R0,VCONSIZE YES, LOAD BLOCK SIZE 00374000
- CALL DMKFREE GET A VIRTUAL CONSOLE CONTROL BLOCK 00375000
- ST R1,VDEVCON STORE ADDRESS IN VDEVBLOK 00376000
- XC 0(VCONSIZE*8,R1),0(R1) CLEAR VCONCTL BLOK TO 0 00377000
- LR R1,R8 VDEVBLOK ADDRESS TO GR1 @V200820 00378000
- SL R1,VMDVSTRT COMPUTE DISPLACEMENT REFERENCE @V200820 00379000
- STH R1,VMVTERM ...SET IT IN VMBLOK FOR OTHERS @V200820 00380000
- DEFSPOOL IC R0,UDEVCLAS SET SPOOLED CLASS 00383000
- STC R0,VDEVCLAS .. 00384000
- MVI VDEVCOPY+1,X'01' DEFAULT TO ONE COPY @V200930 00385000
- TM VDEVTYPC,CLASURI IS IT UNIT RECORD INPUT ?? @V200930 00386000
- BO DEFSPLIN YES, CONT @V200930 00387000
- TM UDEVSTAT,UDEVRDEF IS DEVICE RE-DEFINED? @VA12263 00387030
- BO NOVSPXBK YES.. DON'T REALLOCATE @VA12263 00387060
- LA R0,VSPXSIZ1 GET BASIC VSPXBLOK FOR URO DEVS @VA09273 00387100
- CALL DMKFREE GO AND GET IT @V60B9BA 00387200
- ST R1,VDEVEXTN POINT TO IT FROM VDEVBLOK @V60B9BA 00387300
- USING VSPXBLOK,R1 ADDRESSIBILITY @V60B9BA 00387400
- XC VSPXBLOK(VSPXSIZ1*8),VSPXBLOK CLEAR THE BLOCK @VA09273 00387500
- MVC VSPXDIST,VMDIST DEFAULT DISTRIBUTION @V60B9BA 00387600
- MVI VSPXLEN,VSPXSIZ1 MOVE IN ITS SIZE @VA09273 00387700
- DROP R1 NO LONGER NEEDED @V60B9BA 00387800
- NOVSPXBK EQU * @VA12263 00387900
- CLI VDEVTYPE,TYP3210 CONSOLE DEVICE ? 00388000
- BCR 7,R10 BNE ATTEXIT - NO 00389000
- L R14,VMTERM ACCESS TERMINAL RDEVBLOK @VA10103 00389100
- USING RDEVBLOK,R14 @VA10103 00389200
- OI VDEVSFLG,VDEVTERM INDICATE TERM COPY FOR SPOOLED CONS 00390000
- CLI VDEVCLAS,0 CLASS PRESENT ? 00391000
- BNE *+8 YES - 00392000
- MVI VDEVCLAS,C'T' MOVE IN DEFAULT CLASS T 00393000
- LTR R14,R14 RDEVBLOK PRESENT ? 00394000
- BZR R10 NO, EXIT. (TO ATTEXIT) @VA03322 00395000
- CLI RDEVTYPC,CLASGRAF IS THIS A LOCAL 3270? @VA03322 00396000
- BE DEFOPR YES. @VA03322 00397000
- CLC RDEVTYPC(2),=AL1(CLASTERM,TYPBSC) REMOTE 3270? @VA03322 00398000
- BNER R10 NO, EXIT. (TO ATTEXIT) @VA03322 00399000
- DEFOPR EQU * @VA03322 00400000
- TM VMOSTAT,VMSYSOP IS THIS THE SYSTEM OPERATOR ?? @V200730 00401000
- BCR 8,R10 NO, ATTEXIT @V200730 00402000
- OI VDEVFLAG,VDEVCSPL INDICATE CONSOLE SPOOL ACTIVE 00403000
- DROP R14 00404000
- BR R10 "B ATTEXIT". 00405000
- SPACE 00406000
- DEFSPLIN DS 0H 'DEFINE' SPOOLED INPUT: 00407000
- OI VDEVSFLG,VDEVEOF INDICATE EOF VIA UNIT EXCEPTION 00408000
- BR R10 AND "B ATTEXIT". 00409000
- SPACE 2 00410000
- DEFTDSK EQU * DEFINE TEMPORARY DASD DEVICE 00411000
- LH R0,UDEVNCYL NUMBER OF CYLINDERS REQUIRED 00412000
- SLR R1,R1 ... 00413000
- IC R1,UDEVTYPE DEVICE TYPE REQUESTED 00414000
- CALL DMKTDKGT GET SOME DASD SPACE 00415000
- LTR R8,R8 WAS IT SUCCESSFUL ? 00416000
- BZ ATTNSPC NO - EXIT WITH ERROR 00417000
- ST R8,SAVEWRK6 SAVE REAL DEVICE BLOCK ADDRESS 00418000
- ST R1,SAVEWRK7 ...AND START CYLINDER NUMBER 00419000
- BAL R10,BLDVDEV BUILD A VIRTUAL DEVICE BLOCK 00420000
- LH R0,UDEVTYPC DEVTYPC, DEVTYPE 00421000
- STH R0,VDEVTYPC ... 00422000
- LM R0,R1,SAVEWRK6 RDEVBLOK, CYL.NO. 00423000
- STH R1,VDEVRELN RELOCATION FACTOR 00424000
- ST R0,VDEVREAL RDEVBLOK POINTER 00425000
- LR R1,R0 VDEVREAL INTO R1, AND 00426000
- BAL R9,CHEKRSRL CHECK WHETHER RESERVE/RELEASE VALID CCW 00427000
- LH R0,UDEVNCYL NUMBER OF CYLINDERS 00428000
- STH R0,VDEVBND ... 00429000
- L R15,=A(DMKSYSCK) @VM08883 00430000
- STCK 0(R15) GET CURRENT TOD VALUE @VM08883 00431000
- BC 12,CLOCKOK IS CLOCK FUNCTIONING? @VA04301 00431250
- DOWNWEGO GOTO DMKCVTAB CLOCK DAMAGED...ABEND CVT001 @VA04301 00431500
- CLOCKOK EQU * @VA04301 00431750
- MVC VDEVTMAT,0(R15) SAVE WORD ZERO @VM08883 00432000
- OI VDEVFLAG,VDEVTDSK THIS IS A T-DISK 00433000
- B ATTEXIT ... 00434000
- SPACE 2 00435000
- USING RDEVBLOK,R1 (RESTORE FOR USE BY NEXT SUBROUTINE) 00436000
- EJECT 00437000
- *. 00438000
- * SUBROUTINE NAME - 00439000
- * 00440000
- * DMKVDSLK - SUBROUTINE TO LINK TO A VIRTUAL DASD DEVICE 00441000
- * 00442000
- * FUNCTION - 00443000
- * 00444000
- * TO PERFORM THE INTERNAL FUNCTIONS NECESSARY TO 00445000
- * LINK A VIRTUAL DEVICE TO A USER. 00446000
- * 00447000
- * ATTRIBUTES - 00448000
- * 00449000
- * REENTRANT, PAGEABLE, CALLED VIA SVC 00450000
- * 00451000
- * ENTRY POINTS - 00452000
- * 00453000
- * DMKVDSLK 00454000
- * 00455000
- * ENTRY CONDITIONS - 00456000
- * 00457000
- * GPR 1 = ADDRESS OF REAL DEVICE BLOCK 00458000
- * GPR 2 = ADDRESS OF USER DEVICE BLOCK 00459000
- * GPR 3 = ADDRESS OF VDEVBLOK FOR ANY EXISTING LINK (OR 0) 00460000
- * GPR 11 = ADDRESS OF USER'S VMBLOK 00461000
- * GPR 12 = ADDRESS OF DMKVDSLK 00462000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00463000
- * 00464000
- * EXIT CONDITIONS - 00465000
- * 00466000
- * VIRTUAL DEVICE BLOCK HAS BEEN CREATED (IF NECESSARY) 00467000
- * AND INITIALIZED AS NEEDED. 00468000
- * 00469000
- * CC = 0 IF SUCCESSFUL (AND GPR2 = 0) 00470000
- * CC = 1 IF UNSUCCESSFUL - ERROR-CODE RETURNED IN GPR 2 00471000
- * 00472000
- * GPR 1 = ADDRESS OF REAL DEVICE BLOCK (UNCHANGED) 00473000
- * GPR 2 = ERROR-CODE AS FOLLOWS (IF UNSUCCESSFUL): 00474000
- * 12 = DEVICE IS OFFLINE 00475000
- * 20 = DEVICE OWNED BY CP 00476000
- * 24 = ALREADY ATTACHED 00477000
- * GPR 8 = ADDRESS OF VIRTUAL DEVICE BLOCK 00478000
- * 00479000
- * CALLS TO OTHER ROUTINES - 00480000
- * 00481000
- * DMKFREE - TO OBTAIN A VCHBLOK, VCUBLOK, OR VDEVBLOK 00482000
- * DMKFRET - TO RETURN A VCHBLOK, VCUBLOK, OR VDEVBLOK TO FREE 00483000
- * STORAGE (IF A LARGER ONE IS NEEDED) 00484000
- * DMKSCNVU - TO FIND THE VCHBLOK, VCUBLOK, AND/OR VDEVBLOK FOR 00485000
- * A VIRTUAL DEVICE. 00486000
- * 00487000
- * EXTERNAL REFERENCES - 00488000
- * 00489000
- * NONE 00490000
- EJECT 00491000
- * TABLES / WORK AREAS - 00492000
- * 00493000
- * RDEVBLOK 00494000
- * UDEVBLOK 00495000
- * VCHBLOK 00496000
- * VCUBLOK 00497000
- * VDEVBLOK 00498000
- * 00499000
- * REGISTER USAGE - 00500000
- * 00501000
- * GPR 6 = ADDRESS OF VCHBLOK 00502000
- * GPR 7 = ADDRESS OF VCUBLOK 00503000
- * GPR 8 = ADDRESS OF VDEVBLOK 00504000
- * GPR 9 = RETURN REGISTER FOR INTERNAL SUBROUTINE BLDBLOK 00505000
- * GPR 10 = RETURN REGISTER FOR INTERNAL SUBROUTINE BLDVDEV 00506000
- * GPR 11 = ADDRESS OF USER'S VMBLOK 00507000
- * GPR 12 = BASE REGISTER 00508000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00509000
- * 00510000
- * GPRS 0-5 AND 14-15 ARE WORK REGISTERS. 00511000
- * 00512000
- * NOTES - 00513000
- * 00514000
- * NONE 00515000
- * 00516000
- * OPERATION - 00517000
- * 00518000
- * 1. THE REAL DEVICE BLOCK IS CHECKED TO SEE IF THE REAL DEVICE 00519000
- * IS OFFLINE, OWNED BY CP, OR ALREADY ATTACHED TO THE USER. 00520000
- * IF SO, A CONDITION-CODE 1 AND A SPECIFIC ERROR CODE IN GPR 2 00521000
- * ARE RETURNED TO THE CALLER (SEE EXIT CONDITIONS). 00522000
- * 00523000
- * 2. IF NOT, THEN A VIRTUAL DEVICE BLOCK (AND CONTROL UNIT BLOCK 00524000
- * AND/OR CHANNEL BLOCK, IF NECESSARY) IS CREATED AND INITIALIZED 00525000
- * (USING INTERNAL SUBROUTINES BLDVDEV & BLDBLOK). 00526000
- * 00527000
- * 3. FINALLY, DMKVDSLK INCREMENTS THE COUNT OF LINKS IN THE 00528000
- * REAL DEVICE BLOCK, REVISES THE CHAIN OF LINKS FOR THE 00529000
- * ADDED LINK, AND FILLS IN OTHER DATA AS NEEDED IN THE VIRTUAL 00530000
- * AND REAL DEVICE BLOCKS, AND RETURNS TO THE CALLER. 00531000
- *. 00532000
- EJECT 00533000
- DMKVDSLK RELOC SUBROUTINE TO LINK TO A VIRTUAL DASD DEVICE 00534000
- SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 00534100
- TM RDEVSTAT,RDEVDISA+RDEVDED CHECK REAL DEVICE 00535000
- BNZ ATTBUSY BRANCH IF OFFLINE OR ALREADY IN USE 00536000
- CALL DMKSCNLI @VA04747 00536050
- LR R3,R2 @VA04747 00536100
- LM R1,R2,SAVER1 @VA04747 00536150
- ST R3,SAVEWRK9 REMEMBER R3 AT INPUT TO VDSLK 00537000
- BAL R10,BLDVDEV BUILD A VIRTUAL DEVICE BLOCK 00538000
- LH R4,RDEVLNKS ADD 1 TO COUNT OF LINKS TO THIS VOLUME 00539000
- LA R4,1(,R4) .. 00540000
- STH R4,RDEVLNKS .. 00541000
- LH R0,UDEVTYPC SET VIRTUAL DEVICE CLASS AND TYPE 00543000
- STH R0,VDEVTYPC .. 00544000
- LH R0,UDEVRELN SET RELOCATION FACTOR 00545000
- STH R0,VDEVRELN .. 00546000
- LH R0,UDEVNCYL ALSO NUMBER OF CYLINDERS 00547000
- STH R0,VDEVBND ... 00548000
- ST R1,VDEVREAL STORE POINTER TO RDEVBLOK 00549000
- TM UDEVSTAT,UDEVVRR VIRTUAL RESERVE/RELEASE? @V3E7466 00550000
- BZ RRFEAT NO, SEE IF R/R HARDWARE FEATURE @V3E7466 00550100
- OI VDEVFLG2,VDEVRRF VIRTUAL RESERVE/RELEASE @V3E7466 00550200
- RRFEAT BAL R9,CHEKRSRL SE IF RESERVE/RELEASE VALID CCWS @V3E7466 00550300
- CLI UDEVTYPE,TYP2311 IS THIS A REAL OR FAKE 2311 ? 00551000
- BNE LNK02 NOPE - SOME OTHER DASD DEVICE. 00552000
- OC VDEVFLAG(1),UDEVFTR YES, SET POSSIBLE VDEV231T/B FLAGBIT 00553000
- LNK02 LR R4,R8 SAVE VDEVBLOK ADDRESS 00554000
- L R3,SAVEWRK9 RECOVER R3 = 00 OR POINTER TO A VDEVBLOK 00555000
- LTR R3,R3 ANY EXISTING LINKS (FROM CALLER) ? 00556000
- BZ LNK03 BRANCH IF NO 00557000
- L R4,VDEVLINK-VDEVBLOK(,R3) LOAD POINTER TO NEXT BLOCK 00558000
- ST R8,VDEVLINK-VDEVBLOK(,R3) SET POINTER TO THIS BLOCK 00559000
- LNK03 ST R4,VDEVLINK POINT THIS BLOCK TO NEXT ONE 00560000
- TM UDEVSTAT,UDEVVRR WANT VIRTUAL RES/REL? @V407438 00560050
- BZ ATTCHKRD NOPE, BR. @V407438 00560100
- L R1,VDEVRRB-VDEVBLOK(R4) VRRBLOK FRM NXT IN CHAIN@V407438 00560150
- * IT COULD BE ME, IF SO, R1=0 00560200
- * TO DIRECTORY UPDATE 00560250
- LTR R1,R1 IS THERE ALREADY A VRRBLOK? @V407438 00560300
- BNZ SETEND YES, USE EXISTING VRRBLOK @V407438 00560350
- LA R0,VRRSIZE SIZE OF THE VIRT RES/REL BLOCK @V407438 00560400
- CALL DMKFREE GET STORAGE FOR IT @V407438 00560450
- USING VRRBLOK,R1 ADDRESS THE BLOCK VIA R1 @V407438 00560500
- XC VRRBLOK(VRRSIZE*8),VRRBLOK CLEAR THE BLOCK @V407438 00560550
- SETEND LR R0,R8 REM. WHERE VDEVLINK CHAIN ENDS @V407438 00560600
- SETVRR ST R1,VDEVRRB VDEVBLOK POINTS TO VRRBLOK @V407438 00560650
- OI VDEVFLG2,VDEVRRF RES/REL FTR INST ON THIS MDSK @V407438 00560700
- L R8,VDEVLINK ON TO THE NEXT VDEVBLOK NOW... @V407438 00560750
- CLR R0,R8 IS THIS THE END OF THE CHAIN? @V407438 00560800
- BNE SETVRR NOPE, KEEP GOING @V407438 00560850
- B ATTCHKRD GO CHECK IF TO FLAG R/O, AND THEN EXIT. 00561000
- DROP R1 NO MORE VRRBLOK @V407438 00561500
- EJECT 00562000
- * BLDVDEV - BUILD A VIRTUAL DEVICE 00563000
- * (AN INTERNAL SUBROUTINE) 00564000
- * 00565000
- * AT ENTRY: 00566000
- * R2 = ADDRESS OF USER DEVICE BLOCK 00567000
- * R10 = RETURN REGISTER 00568000
- * SAVEWRK9 = R3 AT INPUT TO DMKVDSLK, OR IMMATERIAL 00569000
- * 00570000
- * AT EXIT: 00571000
- * R1-R3 RESTORED 00572000
- * R6 = ADDRESS OF VIRTUAL CHANNEL BLOCK 00573000
- * R7 = ADDRESS OF VIRTUAL CONTROL UNIT BLOCK 00574000
- * R8 = ADDRESS OF VIRTUAL DEVICE BLOCK 00575000
- * SAVEWRK9 = UPDATED R3 FOR DMKVDSLK, OR IMMATERIAL 00576000
- * 00577000
- BLDVDEV EQU * BUILD VDEVBLOK, VCUBLOK, VCHBLOK @VM08537 00578000
- STM R1,R3,BALR1 SAVE GR1-3 AT SUBRTN ENTRY @VM08537 00579000
- MVI SAVEWRK1,X'00' CLEAR A FLAG BYTE @VM08537 00580000
- LH R1,UDEVADD LOAD THE VIRTUAL DEVICE ADDRESS 00581000
- CALL DMKSCNVU FIND THE VIRT CHAN AND CU BLOCK ADDRESSES 00582000
- LR R5,R1 SAVE THE VIRTUAL DEVICE ADDRESS 00583000
- BC 1,BLDDVBK BRANCH IF BOTH CHAN AND CU BLOCKS FOUND 00584000
- BC 2,BLDCUBK BRANCH IF ONLY CHANNEL BLOCK FOUND 00585000
- BC 8,BLDFIN BRANCH IF ALL EXIST - JUST FINISH UP. 00586000
- * OTHERWISE, BUILD ALL THREE: 00587000
- DROP R2 00588000
- * BUILD A VIRTUAL CHANNEL BLOCK 00589000
- LA R0,VCHSIZE LOAD CHANNEL BLOCK SIZE 00590000
- L R1,VMCHSTRT GET POINTER TO VCHBLOK TABLE 00591000
- LH R2,VMCHCNT GET NUMBER OF BLOCKS IN TABLE 00592000
- BAL R9,BLDBLOK BUILD A VIRTUAL CHANNEL BLOCK 00593000
- ST R1,VMCHSTRT STORE UPDATED VCHBLOK TABLE POINTER 00594000
- STH R2,VMCHCNT STORE NEW VCHBLOK COUNT 00595000
- LR R6,R8 LOAD VCHBLOK BASE REGISTER 00596000
- USING VCHBLOK,R6 00597000
- MVC VCHBLOK(VCHCUTBL-VCHBLOK),ZEROES CLEAR START OF VCHBLOK 00598000
- MVC VCHCUTBL(8),FFS SET VCHCUTBL TO FFFFFFFF'S 00599000
- MVC VCHCUTBL+8(24),VCHCUTBL ... 00600000
- LA R2,X'F00' STORE CHANNEL ADDRESS IN VCHBLOK 00601000
- NR R2,R5 .. 00602000
- STH R2,VCHADD .. 00603000
- BZ BLDCH01 BRANCH IF CHANNEL 0 - MULTIPLEXER CHANNEL 00604000
- OI VCHTYPE,VCHSEL FLAG CHANNELS 1-6 AS SELECTOR CHANNELS 00605000
- TM VMFSTAT,VMFBMX DOES USER WANT BLOK MULTIPLEXER @VA01771 00606000
- * CHANS. 00607000
- BZ *+8 NO - LEAVE THEM AS SELECTOR @VA01771 00608000
- MVI VCHTYPE,VCHBMX YES - CHANGE THEM TO BLOK MULTI. @VA01771 00609000
- BLDCH01 SRL R2,7 MULTIPLE CHANNEL ADDR BY 2 00610000
- SR R8,R1 COMPUTE DISP. OF THIS VCHBLOK 00611000
- STH R8,VMCHTBL(R2) STORE IN APPROPRIATE CHANNEL TABLE SLOT 00612000
- OI SAVEWRK1,NEWVCH IND. NEW VCHBLOK BUILT 00612100
- SPACE 00613000
- * BUILD A VIRTUAL CONTROL UNIT BLOCK 00614000
- BLDCUBK LA R0,VCUSIZE LOAD CONTROL UNIT BLOCK SIZE 00615000
- L R1,VMCUSTRT GET POINTER TO VCUBLOK TABLE 00616000
- LH R2,VMCUCNT GET NUMBER OF BLOCKS IN TABLE 00617000
- BAL R9,BLDBLOK BUILD A VIRTUAL CONTROL UNIT BLOCK 00618000
- ST R1,VMCUSTRT STORE UPDATED VCUBLOK TABLE POINTER 00619000
- STH R2,VMCUCNT STORE NEW VCUBLOK COUNT 00620000
- LR R7,R8 LOAD VCUBLOK BASE REGISTER 00621000
- USING VCUBLOK,R7 00622000
- MVC VCUBLOK(VCUDVTBL-VCUBLOK),ZEROES CLEAR START OF VCUBLOK 00623000
- MVC VCUDVTBL(8),FFS SET VCUDVTBL TO FFFFFFFF'S 00624000
- MVC VCUDVTBL+8(24),VCUDVTBL ... 00625000
- LA R2,X'0F0' STORE CU ADDRESS IN VCUBLOK 00626000
- NR R2,R5 .. 00627000
- STH R2,VCUADD 00628000
- SRL R2,3 MULTIPLY CTL UNIT ADDRESS BY 2 @VA01041 00629000
- SR R8,R1 COMPUTE DISPLACEMENT OF THIS VCUBLOK 00630000
- STH R8,VCHCUTBL(R2) STORE IN APPROPRIATE CU TABLE SLOT 00631000
- OI SAVEWRK1,NEWVCU IND. NEW VCUBLOK BUILT 00631100
- SPACE 00632000
- * BUILD A VIRTUAL DEVICE BLOCK 00633000
- BLDDVBK LA R0,VDEVSIZE LOAD DEVICE BLOCK SIZE 00634000
- L R1,VMDVSTRT GET POINTER TO VDEVBLOK TABLE 00635000
- LH R2,VMDVCNT GET NUMBER OF BLOCKS IN TABLE 00636000
- OI SAVEWRK1,NEWVDEV BUILDING NEW VDEVBLOK NOW @V3E7466 00637000
- BAL R9,BLDBLOK BUILD A VIRTUAL DEVICE BLOCK 00638000
- ST R1,VMDVSTRT STORE UPDATED VDEVBLOK TABLE POINTER 00639000
- STH R2,VMDVCNT STORE NEW VDEVBLOK COUNT 00640000
- LR R3,R8 SAVE VDEVBLOK ADDRESS 00641000
- LA R2,X'00F' STORE DEVICE ADDRESS IN VDEVBLOK 00642000
- NR R2,R5 .. 00643000
- STH R2,VDEVADD .. 00644000
- AR R2,R2 MULTIPLY DEVICE ADDRESS BY 2 00645000
- SR R3,R1 COMPUTE DISPLACEMENT OF THIS VDEVBLOK 00646000
- STH R3,VCUDVTBL(R2) STORE IN APPROPRIATE DEVICE TABLE SLOT 00647000
- BLDFIN XC VDEVADD+2(VDEVSIZE*8-2),VDEVADD+2 CLEAR REMAINDER OF BLK 00648000
- ST R11,VDEVUSER STORE USER'S VMBLOK ADDRESS IN VDEVBLOK 00649000
- LM R1,R3,BALR1 RESTORE GR1-3 AT SUBRTN ENTRY @VM08537 00650000
- BR R10 AND EXIT TO MAIN CODE. 00651000
- LIMITERR DS 0H @VA09651 00651100
- LA R2,124 SET RETURN CODE 124 FOR @VA13217 00651200
- * ATTACH,DEFINE, AND LINK 00651300
- ST R2,SAVER2 @VA09651 00651400
- LCR R2,R2 SET CC=1 @VA09651 00651500
- B VDSEXIT RETURN TO CALLER @VA09651 00651600
- EJECT 00652000
- * BLDBLOK - BUILD ONE NEW CHANNEL-, CONTROL UNIT-, OR DEVICE-BLOCK 00653000
- * (AN INTERNAL SUBROUTINE) 00654000
- * 00655000
- * AT ENTRY: 00656000
- * R0 = VCHSIZE, VCUSIZE, OR VDEVSIZE 00657000
- * R1 = VMCHSTRT, VMCUSTRT, OR VMDVSTRT (IF ANY) 00658000
- * R2 = VMCHCNT, VMCUCNT, OR VMDVCNT (IF ANY) 00659000
- * R9 = RETURN-REGISTER 00660000
- * SAVEWRK1 = X'00' IF CHANNEL OR CONTROL UNIT BLOCK WANTED, 00661000
- * OR X'80' IF DEVICE BLOCK WANTED. 00662000
- * SAVEWRK9 = R3 AT INPUT TO DMKVDSLK, OR IMMATERIAL 00663000
- * 00664000
- * AT EXIT: 00665000
- * R1 = UPDATED VMCHSTRT, VMCUSTRT, OR VMDVSTRT 00666000
- * R2 = UPDATED VMCHCNT, VMCUCNT, OR VMDVCNT 00667000
- * R8 = NEW CHANNEL-, CONTROL UNIT-, OR DEVICE-BLOCK 00668000
- * SAVEWRK9 = UPDATED R3 FOR DMKVDSLK, OR IMMATERIAL 00669000
- * 00670000
- BLDBLOK LTR R8,R1 ANY ENTRIES IN THE TABLE ? 00671000
- BNP BLDNEW NO, BUILD ONE NEW BLOCK 00672000
- * YES, LOOK FOR AN EMPTY SLOT 00673000
- LR R3,R2 SAVE THE BLOCK COUNT 00674000
- SLL R0,3 CONVERT SIZE TO NUMBER OF BYTES 00675000
- BLDSLOT TM VDEVADD,X'80' IS THIS SLOT AVAILABLE ? 00676000
- BCR 1,R9 "BO" IF YES - RETURN. 00677000
- AR R8,R0 NO, POINT TO NEXT BLOCK 00678000
- BCT R3,BLDSLOT LOOP IF MORE BLOCKS IN TABLE 00679000
- SR R8,R1 COMPUTE OLD TABLE LENGTH 00680000
- ST R8,SAVEWRK2 SAVE FOR LATER CALL TO FRET 00681000
- ST R1,SAVEWRK3 SAVE OLD TABLE ADDRESS 00682000
- LR R3,R0 SAVE THE BLOCK SIZE 00683000
- AR R0,R8 COMPUTE NEW TABLE LENGTH 00684000
- CLM R0,3,DEVLIM EXCEEDING MAX VIRTUAL DEVICES @VA13217 00684500
- BH LIMITERR YES, DONT BUILD NEW TAB; LEAVE @VA13217 00684510
- SRL R0,3 CONVERT TO NUMBER OF DOUBLE WORDS 00685000
- CALL DMKFRERC GET FREE STORAGE FOR NEW TABLE @V3E7466 00686000
- BNZ NOSTOR CC=1 - INSUFFICIENT STORAGE @V3E7466 00686100
- STM R1,R2,SAVEWRK4 SAVE NEW TABLE ADDRESS & OLD BLOCK COUNT 00687000
- LR R0,R3 RESTORE THE BLOCK SIZE 00688000
- BCTR R3,0 SUBTRACT 1 FOR EXECUTED MVC 00689000
- LR R8,R1 LOAD NEW TABLE ADDRESS 00690000
- L R1,SAVEWRK3 LOAD OLD TABLE ADDRESS 00691000
- BLDMOVE EX R3,BLDXMVC MOVE OLD BLOCK TO NEW LOCATION 00692000
- TM SAVEWRK1,NEWVDEV BUILDING NEW VDEVBLOK NOW?? @V3E7466 00693000
- BZ BLDNEXT BRANCH IF NO 00694000
- CLI VDEVTYPC,CLASDASD IS THIS A DASD DEVICE ? 00695000
- BNE BLDNEXT BRANCH IF NO 00696000
- TM VDEVFLAG,VDEVTDSK IS IT A T-DISK 00697000
- BO BLDNEXT YES- BRANCH (NO LINKS) 00698000
- L R14,VDEVLINK LOAD SHARED DEVICE LINK 00699000
- LTR R14,R14 IS THIS A SHARED DEVICE ? 00700000
- BZ BLDNEXT BRANCH IF NOT. 00701000
- LR R15,R8 LET R15 POINT TO NEW BLOCK, AND 00702000
- B BLDCHCK GO SEE IF OLD BLOCK POINTED TO ITSELF. 00703000
- BLDLOOP LR R15,R14 SAVE PREVIOUS VDEVBLOK ADDRESS 00704000
- L R14,VDEVLINK-VDEVBLOK(,R14) LOAD NEXT VDEVBLOK ADDRESS 00705000
- BLDCHCK CR R1,R14 DOES IT POINT TO THE OLD BLOCK ? 00706000
- BNE BLDLOOP NO, KEEP LOOKING 00707000
- ST R8,VDEVLINK-VDEVBLOK(,R15) YES, POINT IT TO NEW ONE 00708000
- CL R1,SAVEWRK9 DOES OLD BLOCK MATCH R3 AT ENTRY TO VDSLK 00709000
- BNE BLDNEXT NOPE. 00710000
- ST R8,SAVEWRK9 IF YES, NEW "R3" FOR VDSLK CODE. 00711000
- BLDNEXT AR R1,R0 POINT TO NEXT OLD BLOCK 00712000
- AR R8,R0 POINT TO NEXT NEW BLOCK 00713000
- BCT R2,BLDMOVE BRANCH IF MORE BLOCKS IN THE TABLE 00714000
- LM R0,R1,SAVEWRK2 RELOAD OLD TABLE SIZE AND ADDRESS 00715000
- SRL R0,3 CONVERT SIZE TO NUMBER OF DOUBLE WORDS 00716000
- CALL DMKFRET RETURN OLD TABLE TO FREE STORAGE 00717000
- LM R1,R2,SAVEWRK4 RELOAD NEW TABLE ADDRESS AND COUNT 00718000
- LA R2,1(,R2) ADD 1 TO THE COUNT 00719000
- BR R9 RETURN TO BLDVDEV ROUTINE. 00720000
- SPACE 00721000
- BLDNEW CALL DMKFRERC GET STORAGE FOR ONE NEW BLOCK @V3E7466 00722000
- BNZ NOSTOR CC=1 - INSUFFICIENT STORAGE @V3E7466 00722100
- LR R8,R1 LOAD NEW BLOCK ADDRESS 00723000
- LA R2,1 SET COUNT TO 1 00724000
- BR R9 RETURN TO BLDVDEV ROUTINE. 00725000
- SPACE 2 00726000
- BLDXMVC MVC VDEVBLOK(0),0(R1) MOVE ONE BLOCK FROM OLD TABLE TO NEW 00727000
- EJECT 00727100
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00727200
- * BITS DEFINED IN FIRST BYTE OF SAVEWRK1 * 00727300
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00727400
- SPACE 2 00727500
- NEWVDEV EQU X'80' BUILDING NEW VDEVBLOK @V3E7466 00727600
- NEWVCH EQU X'40' NEW VCHBLOK ALREADY BUILT @V3E7466 00727700
- NEWVCU EQU X'20' NEW VCUBLOK ALREADY BUILT @V3E7466 00727800
- SPACE 00727900
- SPACE 2 00728000
- USING RDEVBLOK,R1 00729000
- USING VDEVBLOK,R8 00730000
- CHEKRSRL TM RDEVFTR,FTRRSRL IS RESERVE/RELEASE VALID CCW ? 00731000
- BCR 8,R9 <BZ> NO - JUST EXIT. 00732000
- OI VDEVFLAG,VDEVRSRL YES - SET FLAG-BIT IN VDEVBLOK 00733000
- BR R9 AND EXIT. 00734000
- EJECT 00735000
- * RDEVSTAT MUST BE TESTED IN THIS ORDER 00736000
- ATTBUSY TM RDEVSTAT,RDEVDISA IS THE DEVICE OFFLINE ? 00737000
- LA R2,12 R2=12 FOR 'DEVICE IS OFFLINE' 00738000
- BO ATTRETN BRANCH IF YES. 00739000
- TM RDEVSTAT,RDEVDED IS IT ALREADY DEDICATED ? 00740000
- LA R2,24 R2=24 FOR 'ALREADY ATTACHED' 00741000
- BO ATTRETN BRANCH IF YES. 00742000
- TM RDEVFLAG,RDEVOWN IS IT OWNED BY CP ? 00743000
- LA R2,20 R2=20 FOR 'DEVICE OWNED BY CP' 00744000
- BO ATTRETN BRANCH IF YES. 00745000
- * MUST BE A SYSTEM VOLUME, THEN: 00746000
- ATTSHRD LA R2,16 R2 = 16: 'ATTACHED TO SYSTEM' 00747000
- B ATTRETN 00748000
- SPACE 00749000
- ATTDRAN LA R2,8 SPOOL DEVICE NOT DRAINED @V200820 00750000
- B ATTRETN @V200820 00751000
- NOSTOR TM SAVEWRK1,NEWVDEV ARE WE BUILDING VDEVBLOK? @V3E7466 00751025
- BO CHKNEWCU YES, SEE IF NEW VCUBLOK BUILT @V3E7466 00751050
- TM SAVEWRK1,NEWVCH DID WE BUILD NEW VCHBLOK?? @V3E7466 00751075
- BO PATCHVCH YES, MUST MEAN THIS REQ. FOR VCU @V3E7466 00751100
- B NOSTOR2 ISSUE INSUFF. STORAGE MSG. @V3E7466 00751125
- SPACE 00751150
- CHKNEWCU TM SAVEWRK1,NEWVCU DID WE BUILD NEW VCUBLOK? @V3E7466 00751175
- BO PATCHVCU YES, MUST UNDO WHAT HAS BEEN DONE@V3E7466 00751200
- TM SAVEWRK1,NEWVCH DID WE BUILD NEW VCHBLOK?? @V3E7466 00751225
- BO PATCHVCH YES, MUST UNDO WHAT HAS BEEN DONE@V3E7466 00751250
- NOSTOR2 LA R2,RC32 INSUFFICIENT STORAGE FOR BLOCKS @V3E7466 00751275
- B ATTRETN RETURN TO CALLER @V3E7466 00751300
- SPACE 00751325
- PATCHVCU LA R2,FFS MAKE BLOCK LOOK LIKE EMPTY SLOT @V3E7466 00751350
- STH R2,VCUADD ... @V3E7466 00751375
- LA R1,X'0F0' PUT X'FFFF' IN CUTBL INDEX @V3E7466 00751400
- NR R1,R5 ... @V3E7466 00751425
- SRL R1,3 ... @V3E7466 00751450
- STH R2,VCHCUTBL(R1) STORE IN CORRECT CU TABLE SLOT @V3E7466 00751475
- TM SAVEWRK1,NEWVCH NEW VCHBLOK BUILT ALSO? @V3E7466 00751500
- BZ NOSTOR2 NO, PATCH WORK ALL DONE @V3E7466 00751525
- PATCHVCH LA R2,FFS MAKE BLOCK LOOK LIKE EMPTY SLOT @V3E7466 00751550
- STH R2,VCHADD ... @V3E7466 00751575
- LA R1,X'F00' STORE X'FFFF' IN CORRECT VMCHTBL SLOT@V3E7466 00751600
- NR R1,R5 ... @V3E7466 00751625
- STH R2,VMCHTBL(R1) ... @V3E7466 00751650
- B NOSTOR2 NOW GO ISSUE ERROR MSG @V3E7466 00751675
- SPACE 00752000
- ATTNSPC LA R2,28 'SPACE NOT AVAILABLE' 00753000
- SPACE 00754000
- ATTRETN ST R2,SAVER2 RETURN ERROR-CODE TO CALLER IN R2 00755000
- LCR R2,R2 PLUS-TO-MINUS SETS CONDITION-CODE = 1 00756000
- B VDSEXIT NOW GO RETURN TO CALLER. 00757000
- RC32 EQU 32 INSUFFICIENT FREE STORAGE @V3E7466 00757100
- SPACE 00758000
- DS 0F @V200820 00759000
- MSGHEAD DC C'VDS',X'00' DMKERMSG PARMS FOR @V200820 00760000
- MSGPARM DC X'80E6',AL2(465) MSG= DMKVDS465W @V200820 00761000
- TST3036 DC X'3036' @VA09765 00761050
- TST3066 DC X'3066' @VA09765 00761100
- TST3138 DC X'3138' @VA09765 00761150
- TST3148 DC X'3148' @VA09765 00761200
- TST3158 DC X'3158' @VA09765 00761250
- DEVLIM DC X'7FFF' @VA09651 00761500
- SPACE 3 00762000
- LTORG 00763000
- SPACE 00764000
- ENTRY DMKVDSND 00765000
- DMKVDSND EQU * SHOW "THE END" OF DMKVDS ON LOAD MAP. 00766000
- EJECT 00767000
- COPY EQU 00768000
- COPY DEVTYPES 00769000
- PSA 00770000
- COPY SAVE 00771000
- COPY VMBLOK 00772000
- COPY RBLOKS 00773000
- COPY NETWORK @V200820 00774000
- COPY VBLOKS 00775000
- COPY IOBLOKS 00776000
- COPY IOER 00777000
- COPY UDIRECT 00778000
- END 00779000
ibm/vm370-lib/cp/dmkvds.assemble_src.txt ยท Last modified: 2023/08/06 13:37 by Site Administrator