Table of Contents

DMKVDC Source

References

Source Listing

DMKVDC.ASSEMBLE.txt
  1. VDC TITLE 'DMKVDC (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 VALIDATE SEQUENCING OF SYSIN @V407466 00002000
  3. COPY OPTIONS @V407466 00003000
  4. COPY LOCAL @V407466 00004000
  5. *. 00005000
  6. * MODULE NAME - 00006000
  7. * 00007000
  8. * DMKVDC 00008000
  9. * 00009000
  10. * CONTENTS - 00010000
  11. * 00011000
  12. * DMKVDCPS - ACQUIRE VIRTUAL BLOCKS FOR DEVICES WHICH ARE 00012000
  13. * LIKELY TO BE ATTACHED BY THE 'ATTACH' COMMAND. 00013000
  14. * 00014000
  15. * DMKVDCAL - SUBROUTINE TO CHAIN RDEVBLOKS OFF THE 00015000
  16. * ALLOCATION CHAIN ANCHORS. 00016000
  17. * 00017000
  18. * DMKVDCSC - COMMON 'ATTACH/DETACH' COMMAND LINE SCANNER 00018000
  19. * AND SYNTAX CHECKER. 00019000
  20. * 00020000
  21. *. 00021000
  22. DMKVDC START 0 @V407490 00022000
  23. DC CL8'DMKVDC' IDENTIFY ATTACH RANGE/MULT @V407466 00023000
  24. * PRESCAN 00024000
  25. USING PSA,R0 @V407466 00025000
  26. USING VMBLOK,R11 @V407466 00026000
  27. USING SAVEAREA,R13 @V407466 00027000
  28. USING VDCWORK,R4 @V407466 00028000
  29. USING IOBLOK,R3 IOBLOK ADDRESSABILITY @V407466 00029000
  30. EXTRN DMKVIOMK @V407466 00030000
  31. EXTRN DMKCFCSC RANGE SCAN @V407466 00031000
  32. EXTRN DMKSCNFD SCAN COMMAND LINE @V407466 00032000
  33. EXTRN DMKSCNAU USER LOGGED ON @V407466 00033000
  34. EXTRN DMKCVTHB @V407466 00034000
  35. EXTRN DMKFRERC @V407466 00035000
  36. EXTRN DMKSCNRU @V407466 00036000
  37. EXTRN DMKIOSQR @V407466 00037000
  38. EXTRN DMKSCNVU @V407466 00038000
  39. EXTRN DMKPGTP5 @V407466 00039000
  40. EXTRN DMKPGTT5 @V407466 00040000
  41. EXTRN DMKPGTP0 @V407466 00041000
  42. EXTRN DMKPGTT0 @V407466 00042000
  43. EXTRN DMKPGTP4 @V407466 00043000
  44. EXTRN DMKPGTT4 @V407466 00044000
  45. EXTRN DMKSYSOW @V407466 00045000
  46. EXTRN DMKPGTTM @V407466 00046000
  47. EXTRN DMKPGT90 @V407466 00047000
  48. EXTRN DMKPGT4P @V407466 00048000
  49. EXTRN DMKPGT4T @V407466 00049000
  50. EXTRN DMKPGT5P @V407466 00050000
  51. EXTRN DMKPGT5T @V407466 00051000
  52. EXTRN DMKPGT7P HRC106DK 00051100
  53. EXTRN DMKPGT7T HRC106DK 00051200
  54. EXTRN DMKPGT8P HRC106DK 00051300
  55. EXTRN DMKPGT8T HRC106DK 00051400
  56. EJECT 00052000
  57. *. 00053000
  58. * SUBROUTINE NAME - 00054000
  59. * DMKVDCPS - CREATE VIRTUAL BLOCKS FOR DEVICES LIKELY 00055000
  60. * TO BE ATTACHED BY THE 'ATTACH' COMMAND. 00056000
  61. * 00057000
  62. * FUNCTION - 00058000
  63. * TO ACQUIRE FREE STORAGE IN ADVANCE FOR VIRTUAL BLOCKS 00059000
  64. * FOR ALL THOSE DEVICES WHICH ARE LIKELY TO BE ATTACHED 00060000
  65. * ON THIS COMMAND EXECUTION. 00061000
  66. * 00062000
  67. * ATTRIBUTES - 00063000
  68. * 00064000
  69. * REENTRANT, PAGEABLE, CALLED VIA SVC 00065000
  70. * 00066000
  71. * ENTRY CONDITIONS - 00067000
  72. * 00068000
  73. * GPR11 - ADDRESS OF ATTACHEE'S VMBLOK 00069000
  74. * 00070000
  75. * GPR3 = 0; RANGE HAS BEEN SPECIFIED ON COMMAND LINE. 00071000
  76. * GPR2 - FIRST ADDRESS IN RANGE IN BINARY 00072000
  77. * GPR4 - LAST ADDRESS IN RANGE IN BINARY 00073000
  78. * 00074000
  79. * OR 00075000
  80. * 00076000
  81. * GPR3 NONZERO; MULTIPLE ADDRESSES SPECIFIED ON COMMAND LINE 00077000
  82. * GPR3 - CONTAINS ADDRESS OF FREE STORAGE BUFFER USED BY 00078000
  83. * DMKVDA CONTAINING MULTIPLE ADDRESSES IN BINARY FORM. 00079000
  84. * 00080000
  85. * EXIT CONDITIONS: 00081000
  86. * 00082000
  87. * CC=0; IF SUCCESSFUL (AND GPR2 = 0) 00083000
  88. * CC=1; IF UNSUCCESSFUL - ERROR CODE 32 RETURNED IN GPR2 00084000
  89. * ERROR CODE 124: EXCEEDED MAX 00084500
  90. * 00085000
  91. * CALLS TO OTHER ROUTINES - 00086000
  92. * 00087000
  93. * DMKFRERC - ACQUIRE FREE STORAGE WITH RETURN CODE IN REQUEST 00088000
  94. * CANNOT BE SATISFIED. 00089000
  95. * DMKSCNRU - FIND RDEVBLOK 00090000
  96. * DMKIOSQR - SCHEDULE I/O REQUEST FOR TIO 00091000
  97. * DMKSCNVU - FIND VIRTUAL BLOCKS 00092000
  98. * DMKVIOMK - ADDRESS OF MASK TABLE 00093000
  99. * 00094000
  100. * EXTERNAL REFERENCES - 00095000
  101. * 00096000
  102. * NONE 00097000
  103. * 00098000
  104. * TABLES/WORK AREAS - 00099000
  105. * 00100000
  106. * DMKVDA SAVEAREA 00101000
  107. * IOBLOK 00102000
  108. * CPEXBLOK 00103000
  109. * DMKVDC WORK AREA 00104000
  110. * RDEVBLOK 00105000
  111. * IOERBLOK 00106000
  112. * VCHBLOK 00107000
  113. * VCUBLOK 00108000
  114. * VDEVBLOK 00109000
  115. * MASK TABLE IN DMKVIO (DMKVIOMK) 00110000
  116. * 00111000
  117. * REGISTER USAGE - 00112000
  118. * 00113000
  119. * GPR4 - WORK AREA ADDRESS 00114000
  120. * GPR5 - BAL REGISTER 00115000
  121. * GPR10 - ADDRESS OF ATTACHEE'S VMBLOK/ADDRESS OF IOBLOK 00116000
  122. * GPR11 - ADDRESS OF ATTACHEE'S VMBLOK 00117000
  123. * GPR12 - BASE REGISTER 00118000
  124. * GPR13 - ADDRESS OF STANDARD SAVEAREA/ADDRESS OF DMKVDA 00119000
  125. * SAVEAREA 00120000
  126. * 00121000
  127. * GPR0-GPR3 - WORK REGISTERS 00122000
  128. * GPR6-GPR9 - WORK REGISTERS 00123000
  129. * GPR14-GPR15 - WORK REGISTERS 00124000
  130. * 00125000
  131. * NOTES - NONE 00126000
  132. * 00127000
  133. * OPERATION - 00128000
  134. * 1. ACQUIRE FREE STORAGE WORK AREA FOR COUNTERS ETC. 00129000
  135. * 2. FIND RDEVBLOK FOR SPECIFIED ADDRESS 00130000
  136. * IF THE DEVICE IS OFFLINE OR ALREADY DEDICATED, PROCESS 00131000
  137. * NEXT ADDRESS. 00132000
  138. * 3. ACQUIRE IOBLOK AND CPEXBLOK AND SCHEDULE TIO TO THE 00133000
  139. * DEVICE BY CALLING DMKIOSQR. IF THE DEVICE DOES NOT EXIST, 00134000
  140. * SKIP TO PROCESS NEXT ADDRESS. 00135000
  141. * 4. SEE IF VIRTUAL DEVICE IS ALREADY DEFINED (DMKSCNVU). 00136000
  142. * IF THE DEVICE IS ALREADY DEFINED, SKIP TO PROCESS NEXT 00137000
  143. * ADDRESS. IF THE CHANNEL IS DEDICATED, SKIP TO PROCESS 00138000
  144. * NEXT DEVICE. OTHERWISE, KEEP A COUNTER FOR THE NUMBER 00139000
  145. * OF VCHBLOKS/VCUBLOKS/VDEVBLOKS WHICH ARE LIKELY TO BE 00140000
  146. * CREATED IN THIS COMMAND EXECUTION. PERFORM THIS FUNCTION 00141000
  147. * FOR ALL ADDRESSES IN THE RANGE/ALL MULTIPLE DEVICE ADDRESSES. 00142000
  148. * 5. RELEASE IOBLOK AND CPEXBLOK AFTER THIS PHASE IS COMPLETE. 00143000
  149. * 6. DETERMINE NUMBER OF UNUSED (EMPTY SLOTS) IN CURRENT 00144000
  150. * TABLES OF VCHBLOKS/VCUBLOKS/VDEVBLOKS. 00145000
  151. * 7. SUBTRACT NUMBER OF BLOCKS OF EACH TYPE WHICH WILL BE 00146000
  152. * CREATED AS A RESULT OF THIS COMMAND EXECUTION FROM THE NUMBER 00147000
  153. * OF CURRENTLY AVAILABLE BLOCKS OF EACH TYPE TO DETERMINE THE 00148000
  154. * EXACT NUMBER OF NEW VCHBLOKS/VCUBLOKS/VDEVBLOKS WHICH MUST BE 00149000
  155. * CREATED IN THIS COMMAND EXECUTION. 00150000
  156. * 8. ACQUIRE STORAGE FOR NEW VIRTUAL BLOCKS REQUIRED BY 00151000
  157. * CALLING DMKFRERC. IF STORAGE CANNOT BE OBTAINED, RETURN TO 00152000
  158. * DMKVDA WITH GPR2=32. DMKVDA WILL THEN ISSUE ERROR MESSAGE 00153000
  159. * DMKVDA131E. MOVE OLD TABLE OF VCHBLOKS/VCUBLOKS/VDEVBLOKS 00154000
  160. * TO NEWLY ACQUIRED TABLES AND MARK ALL ADDITIONAL BLOCKS AS 00155000
  161. * EMPTY SLOTS. @VA13217 00156000
  162. * 00157000
  163. * 9. RELEASE WORK AREA AND EXIT. 00158000
  164. * 00159000
  165. * RESPONSES - 00160000
  166. * NONE 00161000
  167. * 00162000
  168. * ERROR MESSAGES - 00163000
  169. * NONE 00164000
  170. *. 00165000
  171. EJECT 00166000
  172. DMKVDCPS RELOC @V407466 00167000
  173. USING VDCWORK,R4 VDC WORK AREA ADDRESSABILITY @V407466 00168000
  174. LR R2,R13 PTR TO CALLER'S SAVEAREA @V407466 00169000
  175. L R13,SAVER13 R13 CONTAINS VDA SAVEAREA ADDR @V407466 00170000
  176. ST R2,SAVEWRK6 STORE VDC SAVE IN VDA SAVEWRK6 @V407466 00171000
  177. LTR R3,R3 MULTIPLE ADDRESSES OR RANGE? @V407466 00172000
  178. BNZ PRESCAND MULTIPLES SPECIFIED @V407466 00173000
  179. L R2,VDCRADD1 FIRST ADDRESS IN RANGE @V407466 00174000
  180. SLR R3,R3 ZERO R3 FOR INDICATOR @V407466 00175000
  181. SLR R4,R4 CLEAR REGISTER 4 @V407466 00176000
  182. PRESCANB BAL R5,PRESCANA GO PERFORM PRESCAN @V407466 00177000
  183. NI VDCBYTE1,X'FF'-(ATTCTCA+DED2305) TURN BITS OFF @V407490 00178000
  184. LTR R3,R3 IOBLOK ALREADY OBTAINED? @V407466 00179000
  185. BZ SKIPCLR NO, SKIP CSW AND STATUS CLEAR @V407466 00180000
  186. MVI IOBSTAT,X'00' CLEAR IOBSTAT FOR NEXT TIME @V407466 00181000
  187. XC IOBCSW(L'IOBCSW),IOBCSW CLEAR CSW FOR NEXT TI@V407466 00182000
  188. SKIPCLR LA R2,1(,R2) NEXT ADDRESS IN RANGE @V407466 00183000
  189. CH R2,VDCRADD2 COMPARE WITH RADDR2 IN RANGE @V407466 00184000
  190. BNH PRESCANB STILL WITHIN RANGE @V407466 00185000
  191. FRETBLK LTR R3,R3 IOBLOK ALREADY OBTAINED? @V407466 00186000
  192. BZ SKIPFRET NO, SKIP RELEASE OF BLOCKS @V407466 00187000
  193. PRESCANC L R1,IOBMISC2 POINTER TO CPEXBLOK @V407466 00188000
  194. LA R0,CPEXSIZE SIZE OF CPEXBLOK @V407466 00189000
  195. CALL DMKFRET RELEASE IT @V407466 00190000
  196. LR R1,R3 IOBLOK POINTER @V407466 00191000
  197. LA R0,IOBSIZE SIZE OF IOBLOK @V407466 00192000
  198. CALL DMKFRET RELEASE IT @V407466 00193000
  199. SPACE 2 00194000
  200. SKIPFRET LA R2,VDCCHMAP POINT TO BIT MAP FOR VCHBLOKS @V407466 00195000
  201. LA R3,COUNT2 NUMBER OF BYTES IN VDCCHMAP (2) @V407466 00196000
  202. BAL R5,COUNTBIT NUMBER OF VCHBLOKS @V407466 00197000
  203. STH R6,VDCVCH NUMBER OF REQUIRED VCHBLOKS @V407466 00198000
  204. LA R3,COUNT32 32 BYTES IN FIELD TO BE SCANNED @V407466 00199000
  205. BAL R5,COUNTBIT NUMBER OF EMPTY VCUBLOKS @V407466 00200000
  206. STH R6,VDCVCU NUMBER OF REQUIRED VCUBLOKS @V407466 00201000
  207. EMPTY LA R0,VCHSIZE SIZE OF VCHBLOK @V407466 00202000
  208. SLR R2,R2 MAKE SURE R2 ZERO TO START @V407466 00203000
  209. L R1,VMCHSTRT VCHBLOK TABLE POINTER @V407466 00204000
  210. LH R2,VMCHCNT NUMBER BLOCKS IN TABLE @V407466 00205000
  211. SLR R6,R6 CLEAR R6 @V407466 00206000
  212. BAL R5,EMPSLOT SEE IF EMPTY SLOTS @V407466 00207000
  213. STH R6,VDCVCHE SAVE EMPTY VCHBLOK COUNT @V407466 00208000
  214. SLR R6,R6 CLEAR R6 FOR NEXT COUNTER @V407466 00209000
  215. LA R0,VCUSIZE SIZE OF VCUBLOK @V407466 00210000
  216. L R1,VMCUSTRT VCUBLOK TABLE POINTER @V407466 00211000
  217. LH R2,VMCUCNT NUMBER OF VCUBLOKS @V407466 00212000
  218. BAL R5,EMPSLOT FIND EMPTY SLOTS IN VCUBLOKS @V407466 00213000
  219. STH R6,VDCVCUE NUMBER OF EMPTY VCUBLOK SLOTS @V407466 00214000
  220. SLR R6,R6 CLEAR R6 FOR NEXT COUNTER @V407466 00215000
  221. LA R0,VDEVSIZE SIZE OF VDEVBLOK @V407466 00216000
  222. L R1,VMDVSTRT POINT TO VDEVBLOK TABLE @V407466 00217000
  223. LH R2,VMDVCNT NUMBER OF VDEVBLOKS IN TABLE @V407466 00218000
  224. BAL R5,EMPSLOT FIND EMPTY SLOTS IN VDEVBLOKS @V407466 00219000
  225. STH R6,VDCVDEVE NUMBER OF EMPTY VDEVBLOK SLOTS @V407466 00220000
  226. LH R6,VDCVDEV NO. REQUIRED VDEVBLOKS @V407466 00221000
  227. LH R7,VDCVDEVE NO. EMPTY VDEVBLOKS WHICH EXIST @V407466 00222000
  228. SR R6,R7 ACTUAL NO. VDEVBLOKS TO BE @V407466 00223000
  229. * ACQUIRED 00224000
  230. BC 12,ACQVCU < OR = 0; ACQUIRE NO VDEVBLOKS @V407466 00225000
  231. SLR R3,R3 R3 ZERO TO START @V407466 00226000
  232. LH R2,VMDVCNT NO. EXISTING VDEVBLOKS @V407466 00227000
  233. LA R9,VDEVSIZE VDEVBLOK SIZE IN DBL. WORDS @V407466 00228000
  234. LA R1,VDEVSIZE ...SAME @V407466 00229000
  235. L R8,VMDVSTRT PTR. TO EXISTING VDEVBLOK TABLE @V407466 00230000
  236. OI VDCFLAG,DEVBLD IND. BUILDING VDEVBLOKS @V407466 00231000
  237. BAL R5,BLDBLOK CREATE NEW VDEVBLOK TAB (OLD+NEW)@V407466 00232000
  238. SLR R8,R8 CLEAR R8 @V407466 00233000
  239. LA R7,VDEVSIZE SIZE OF VDEVBLOK IN DBL.WDS. @V407466 00234000
  240. LH R8,VMDVCNT NUMBER VDEVBLOKS IN OLD TABLE @V407466 00235000
  241. MR R6,R8 NO. DBL. WDS. IN OLD TABLE @V407466 00236000
  242. LR R0,R7 INTO R0 FOR FRET @V407466 00237000
  243. LR R5,R1 SAVE NEW TABLE PTR TEMP. @V407466 00238000
  244. L R1,VMDVSTRT OLD TABLE PTR @V407466 00239000
  245. CALL DMKFRET RELEASE OLD TABLE @V407466 00240000
  246. ST R5,VMDVSTRT STORE NEW TABLE POINTER @V407466 00241000
  247. STH R3,VMDVCNT TOT. NO. VDEVBLOKS IN NEW TABLE @V407466 00242000
  248. ACQVCU SLR R6,R6 CLEAR R6 @V407466 00243000
  249. LH R6,VDCVCU NO. REQUIRED VCUBLOKS @V407466 00244000
  250. LH R7,VDCVCUE NO. EMPTY VCUBLOKS @V407466 00245000
  251. SR R6,R7 ACT. NO. VCUBLOKS TO BE ACQUIRED @V407466 00246000
  252. BC 12,ACQVCH < OR = 0; ACQUIRE NO VCUBLOKS @V407466 00247000
  253. SLR R3,R3 ... @V407466 00248000
  254. LH R2,VMCUCNT NO. EXISTING VCUBLOKS @V407466 00249000
  255. LA R9,VCUSIZE VCUBLOK SIZE IN DBL. WORDS @V407466 00250000
  256. LA R1,VCUSIZE VCUBLOK SIZE IN DBL. WORDS @V407466 00251000
  257. L R8,VMCUSTRT PTR. TO TABLE OF VCUBLOKS @V407466 00252000
  258. OI VDCFLAG,CUBLD IND. BUILDING VCUBLOKS @V407466 00253000
  259. BAL R5,BLDBLOK CREATE TABLE OF VCUBLOKS @V407466 00254000
  260. * (OLD+NEW) 00255000
  261. SLR R8,R8 CLEAR R8 FOR 'LH' @V407466 00256000
  262. LA R7,VCUSIZE SIZE OF VCUBLOK IN DBL. WDS. @V407466 00257000
  263. LH R8,VMCUCNT NUMBER VCUBLOKS IN OLD TABLE @V407466 00258000
  264. MR R6,R8 NUMBER DBL. WDS. IN OLD TABLE @V407466 00259000
  265. LR R5,R1 SAVE NEW TABLE POINTER @V407466 00260000
  266. L R1,VMCUSTRT POINTER TO OLD TABLE @V407466 00261000
  267. LR R0,R7 TABLE LENGTH TO R0 FOR FRET @V407466 00262000
  268. CALL DMKFRET RETURN THE STORAGE @V407466 00263000
  269. ST R5,VMCUSTRT STORE POINTER TO NEW TABLE @V407466 00264000
  270. STH R3,VMCUCNT STORE NO. OF VCUBLOKS IN TABLE @V407466 00265000
  271. ACQVCH SLR R6,R6 CLEAR R6 @V407466 00266000
  272. LH R6,VDCVCH NO. REQUIRED VCHBLOKS @V407466 00267000
  273. LH R7,VDCVCHE NO. EMPTY VCHBLOK SLOTS @V407466 00268000
  274. SR R6,R7 ACT. NO. OF VCHBLOKS TO BE @V407466 00269000
  275. * ACQUIRED 00270000
  276. BC 12,EXIT < OR = 0; ACQUIRE NO VCHBLOKS @V407466 00271000
  277. SLR R3,R3 ... @V407466 00272000
  278. LH R2,VMCHCNT NO. OF EXISTING VCHBLOKS @V407466 00273000
  279. LA R9,VCHSIZE VCHBLOK SIZE IN DBL. WORDS @V407466 00274000
  280. LA R1,VCHSIZE VCHBLOKS SIZE IN DBL. WORDS @V407466 00275000
  281. L R8,VMCHSTRT PTR TO EXISTING VCHBLOK TABLE @V407466 00276000
  282. BAL R5,BLDBLOK CREATE NEW VCHBLOK TABLE @V407466 00277000
  283. * (OLD+NEW) 00278000
  284. SLR R8,R8 CLEAR R8 FOR 'LH' @V407466 00279000
  285. LA R7,VCHSIZE SIZE OF VCHBLOK IN DBL. WDS. @V407466 00280000
  286. LH R8,VMCHCNT NO. OF VCHBLOKS IN OLD TABLE @V407466 00281000
  287. MR R6,R8 R7 - NO. DBL. WDS. IN OLD TABLE @V407466 00282000
  288. LR R0,R7 ...TO R0 FOR FRET @V407466 00283000
  289. LR R5,R1 SAVE PTR TO NEW TABLE TEMP. @V407466 00284000
  290. L R1,VMCHSTRT BEGINNING OF OLD TABLE @V407466 00285000
  291. CALL DMKFRET RELEASE STORAGE @V407466 00286000
  292. ST R5,VMCHSTRT STORE NEW TABLE PTR IN VMBLOK @V407466 00287000
  293. STH R3,VMCHCNT NO. OF VCHBLOKS IN NEW TABLE @V407466 00288000
  294. EXIT BAL R5,FREWRK RELEASE WORK AREA IF NECESSARY @V407466 00289000
  295. L R13,SAVEWRK6 RESTORE VDC SAVE ADDRESS @V407466 00290000
  296. SLR R2,R2 ZERO R2 @V407466 00291000
  297. ST R2,SAVER2 GOOD RETURN @V407466 00292000
  298. EXIT2 EQU * @V407490 00293000
  299. EXIT RETURN TO CALLER @V407466 00294000
  300. SPACE 3 00295000
  301. FREWRK LTR R4,R4 WAS WORK AREA ACQUIRED? @V407466 00296000
  302. BZR R5 NO, NOTHING TO FRET @V407466 00297000
  303. LR R1,R4 ADDRESS OF WORK AREA TO R1 @V407466 00298000
  304. LA R0,VDCSIZE NO. DBL. WDS TO FRET @V407466 00299000
  305. CALL DMKFRET RELEASE STORAGE @V407466 00300000
  306. BR R5 RETURN TO MAINLINE @V407466 00301000
  307. SPACE 2 00302000
  308. BLDBLOK AR R3,R2 R3= NUMBER EXISTING BLOCKS @V407466 00303000
  309. AR R3,R6 PLUS NUMBER NEW BLOCKS @V407466 00304000
  310. MR R0,R3 NO. DBL. WORDS (R3*R1 INTO R0-R1)@V407466 00305000
  311. LR R0,R1 NO. DLBWDS. TO ACQUIRE @V407466 00306000
  312. SLL R1,3 R1*8=# OF BYTES FOR TABLE @VA13217 00306500
  313. CLM R1,B'0011',=X'7FFF' CANNOT EXCEED 7FFFF @VA13217 00306510
  314. BH ERR153 RETURN CODE FOR MSG 153 @VA13217 00306520
  315. CALL DMKFRERC ACQUIRE STORAGE @V407466 00307000
  316. BNZ NOFREE INSUFFICIENT FREE STORAGE @V407466 00308000
  317. ST R1,SAVEWRK7 SAVE PTR TO NEW STORAGE TEMP. @V407466 00309000
  318. SLL R9,3 SIZE OF ONE BLOCK TO BYTES @V407466 00310000
  319. BCTR R9,0 SUBTRACT ONE FOR EXECUTED MVC @V407466 00311000
  320. NEXTMVC EX R9,BLDMVC MOVE OLD BLOCK TO NEW @V407466 00312000
  321. TM VDCFLAG,DEVBLD BUILDING VDEVBLOKS?? @V407466 00313000
  322. BO VLNK YES, @V407466 00314000
  323. BLDNEXT LA R1,1(R9,R1) POINT TO NEXT BLOK IN EA. TAB. @V407466 00315000
  324. LA R8,1(R9,R8) ADDING 1 TO MAKE UP FOR SUBTRACT @V407466 00316000
  325. BCT R2,NEXTMVC MOVE NEXT BLOCK @V407466 00317000
  326. LH R8,FFS R8 = FFFF @V407466 00318000
  327. NEXTSTOR STH R8,0(R1) STORE FFS IN EMPTY SLOTS @V407466 00319000
  328. TM VDCFLAG,DEVBLD BUILDING VDEVBLOKS?? @V407466 00320000
  329. BO CLRDEV YES, CLEAR EMPTY VDEVBLOK @V407466 00321000
  330. TM VDCFLAG,CUBLD BUILDING VCUBLOKS?? @V407466 00322000
  331. BO CLRCU YES, CLEAR EMPTY VCUBLOKS @V407466 00323000
  332. * OTHERWISE, MUST BE BUILDING VCHBLOKS... 00324000
  333. USING VCHBLOK,R1 ADDRESSABILITY @V407466 00325000
  334. MVC VCHBLOK+2(6),VCHBLOK CLEAR START OF VCHBLOK @V407466 00326000
  335. MVC VCHCUTBL(8),FFS ... @V407466 00327000
  336. MVC VCHCUTBL+8(24),VCHCUTBL ... @V407466 00328000
  337. NEXTBLK LA R1,1(R9,R1) POINT TO NEXT EMPTY SLOT @V407466 00329000
  338. BCT R6,NEXTSTOR STORE FFS IN NEXT BLOCK @V407466 00330000
  339. L R1,SAVEWRK7 RESTORE PTR TO BEGINNING OF TABLE@V407466 00331000
  340. BR R5 @V407466 00332000
  341. SPACE 00333000
  342. BLDMVC MVC 0(0,R1),0(R8) MOVE OLD BLOCK TO NEW STORAGE @V407466 00334000
  343. SPACE 00335000
  344. USING VDEVBLOK,R1 ADDRESSABILITY @V407466 00336000
  345. VLNK CLC VDEVADD(2),FFS EMPTY SLOT?? @V407466 00337000
  346. BE BLDNEXT YES, DON'T WORRY ABOUT VDEVLINK @V407466 00338000
  347. CLI VDEVTYPC,CLASDASD DASD DEVICE?? @V407466 00339000
  348. BNE BLDNEXT NO, MOVE & BUILD NEXT BLOK @V407466 00340000
  349. TM VDEVFLAG,VDEVTDSK T-DISK?? @V407466 00341000
  350. BO BLDNEXT .... @V407466 00342000
  351. L R14,VDEVLINK PTR TO VDEVBLOK FOR SAME MINIDISK@V407466 00343000
  352. * SAME MINIDISK LINKED BY SAME OR DIFFERENT USER 00344000
  353. LTR R14,R14 SAME MINIDISK LINKED BY SOMEONE @V407466 00345000
  354. * ELSE 00346000
  355. BZ BLDNEXT NO, MOVE & BUILD NEXT BLOCK @V407466 00347000
  356. LR R15,R1 R15 POINTS TO NEW BLOCK @V407466 00348000
  357. B BLDCHCK SEE IF VDEVBLOK POINTS TO OLD @V407466 00349000
  358. * BLOK 00350000
  359. BLDLOOP LR R15,R14 SAVE PREVIOUS VDEVBLOK ADDRESS @V407466 00351000
  360. L R14,VDEVLINK-VDEVBLOK(,R14) NEXT VDEVBLOK ADDR @V407466 00352000
  361. BLDCHCK CR R8,R14 DOES IT PT TO OLD BLOK?? @V407466 00353000
  362. BNE BLDLOOP NO, KEEP LOOKING @V407466 00354000
  363. ST R1,VDEVLINK-VDEVBLOK(,R15) POINT IT TO NEW ONE @V407466 00355000
  364. B BLDNEXT MOVE & BUILD NEXT BLOCK @V407466 00356000
  365. SPACE 00357000
  366. USING VDEVBLOK,R1 ADDRESSABILITY @V407466 00358000
  367. CLRDEV NI VDCFLAG,X'FF'-DEVBLD CLEAR VDEVBLOK IND. @V407466 00359000
  368. XC VDEVADD+2(VDEVSIZE*8-2),VDEVADD+2 CLEAR VDEVBLOK@V407466 00360000
  369. B NEXTBLK CLEAR NEXT EMPTY SLOT @V407466 00361000
  370. SPACE 00362000
  371. USING VCUBLOK,R1 ADDRESSABILITY @V407466 00363000
  372. CLRCU NI VDCFLAG,X'FF'-CUBLD RESET VCUBLOK IND. @V407466 00364000
  373. MVC VCUBLOK+2(6),ZEROES CLEAR VCUBLOK @V407466 00365000
  374. MVC VCUDVTBL(8),FFS FFS @V407466 00366000
  375. MVC VCUDVTBL+8(24),VCUDVTBL FFS ... @V407466 00367000
  376. B NEXTBLK CLEAR NEXT EMPTY BLOCK @V407466 00368000
  377. DROP R1 @V407466 00369000
  378. SPACE 2 00370000
  379. EMPSLOT LTR R8,R1 ANY ENTRIES IN TABLE @V407466 00371000
  380. BCR 13,R5 NO TABLE ENTRIES; ZERO EMPTY @V407466 00372000
  381. * SLOTS 00373000
  382. SLL R0,3 CONVERT BLOCK SIZE TO BYTES @V407466 00374000
  383. USING VDEVBLOK,R8 VDEVBLOK ADDRESSABILITY @V407466 00375000
  384. TSTEMP TM VDEVADD,X'80' EMPTY SLOT? @V407466 00376000
  385. BC 1,UPDSLOT YES, UPDATE EMPTY SLOTS @V407466 00377000
  386. NEXTSLOT AR R8,R0 NEXT BLOCK @V407466 00378000
  387. BCT R2,TSTEMP CONTINUE TO LOOK FOR EMPTY SLOTS @V407466 00379000
  388. BR R5 RETURN TO MAINLINE @V407466 00380000
  389. SPACE 2 00381000
  390. UPDSLOT AH R6,F1+2 ONE OR MORE EMPTY SLOTS @V407466 00382000
  391. B NEXTSLOT CONTINUE SEARCH FOR EMPTY SLOTS @V407466 00383000
  392. SPACE 2 00384000
  393. DROP R8 @V407466 00385000
  394. COUNTBIT SLR R6,R6 CLEAR R6 @V407466 00386000
  395. REPEAT1 LA R8,BITMAP POINT TO TABLE OF BITS @V407466 00387000
  396. LA R7,COUNT8 COUNTER @V407466 00388000
  397. REPEAT2 IC R1,0(R8) GET NEXT TABLE CHARACTER @V407466 00389000
  398. EX R1,COMPARE EQUAL @V407466 00390000
  399. BNO NEXTBYTE ADD 1 TO COUNT OF BLOCKS TO @V407466 00391000
  400. * ACQUIRE 00392000
  401. ADD1 AH R6,F1+2 ADD ONE TO COUNT @V407466 00393000
  402. NEXTBYTE LA R8,1(,R8) POINT TO NEXT @V407466 00394000
  403. BCT R7,REPEAT2 TEST ALL POSSIBLE BITS @V407466 00395000
  404. LA R2,1(,R2) NEXT BYTE IN VDCCHMAP @V407466 00396000
  405. BCT R3,REPEAT1 REPEAT WHOLE OPERATION FOR @V407466 00397000
  406. * ANOTHER BYTE 00398000
  407. BR R5 RETURN TO MAINLINE @V407466 00399000
  408. SPACE 2 00400000
  409. COMPARE TM 0(R2),0 @V407466 00401000
  410. SPACE 2 00402000
  411. PRESCANA LTR R4,R4 FIRST TIME PRESCAN INVOKED? @V407466 00403000
  412. BP SKIP1 NO, SKIP ACQUIRING STORAGE @V407466 00404000
  413. LA R0,VDCSIZE ACQUIRE FREE STORAGE FOR COUNTERS@V407466 00405000
  414. CALL DMKFREE GO GET IT @V407466 00406000
  415. LR R4,R1 R4 POINTS TO COUNTERS @V407466 00407000
  416. XC 0(VDCSIZE*8,R1),0(R1) CLEAR TO ZEROS @V407466 00408000
  417. SKIP1 LR R1,R2 ADDRESS FROM R2 TO R1 @V407466 00409000
  418. CALL DMKSCNRU FIND RDEVBLOK @V407466 00410000
  419. BCR 7,R5 REAL DEVICE DOES NOT EXIST @V407466 00411000
  420. USING RDEVBLOK,R8 @V407466 00412000
  421. TM RDEVSTAT,RDEVDISA+RDEVDED CHECK REAL DEVICE @V407466 00413000
  422. BNZR R5 OFFLINE OR ALREADY IN USE @V407466 00414000
  423. TM RDEVTYPC,CLASDASD+CLASTAPE DASD OR TAPE @V407466 00415000
  424. BNZ DISKTAP YES @V407466 00416000
  425. TM RDEVTYPC,CLASURI+CLASURO INPUT OR OUTPUT? @V407466 00417000
  426. BNZ URIO YES -- SPOOL @V407466 00418000
  427. TM RDEVTYPC,CLASTERM+CLASGRAF TERM OR GRAPHIC? @V407466 00419000
  428. BNZ TRMGR YES, TERM OR GRAF @V407466 00420000
  429. CLI RDEVTYPC,CLASSPEC CLASS SPECIAL? @V407466 00421000
  430. BNE VDCEXIST NO, GO PERFORM TIO @V407466 00422000
  431. CLI RDEVTYPE,TYP3705 IS THIS 3704/3705? @V407466 00423000
  432. BNE CHKCTCA IF NOT, IS IT CTCA @V407466 00424000
  433. TM RDEVSTAT,RDEVRSVD LINES IN USE BY THE SYSTEM? @V407466 00425000
  434. BOR R5 YES, CAN'T ATTACH THEN @V407466 00426000
  435. TM RDEVFLAG,RDEVRCVY IN RECOVERY BY SYSTEM @V407466 00427000
  436. BOR R5 YES, THEN CAN'T ATTACH @V407466 00428000
  437. B VDCEXIST PERFORM TIO @V407466 00429000
  438. SPACE 2 00430000
  439. DISKTAP TM RDEVFLAG,RDEVSYS+RDEVOWN IN USE BY SYSTEM @V407466 00431000
  440. BNZR R5 YES, CANNOT ATTACH @V407466 00432000
  441. B CHKDASD SEE IF 2305 DRUM @V407466 00433000
  442. SPACE 2 00434000
  443. URIO TM RDEVFLAG,RDEVDRAN IS THE DEVICE DRAINED? @V407466 00435000
  444. BZR R5 YES, CANNOT ATTACH @V407466 00436000
  445. ICM R15,15,RDEVSPL CHECK FOR ACTIVE SFBLOK @V407466 00437000
  446. BNZR R5 YES, CANNOT ATTACH @V407466 00438000
  447. B VDCEXIST PERFORM TIO @V407466 00439000
  448. SPACE 2 00440000
  449. TRMGR TM RDEVFLAG,RDEVENAB IN USE BY THE SYSTEM? @V407466 00441000
  450. BOR R5 YES, CANNOT ATTACH @V407466 00442000
  451. B VDCEXIST PERFORM TIO @V407466 00443000
  452. SPACE 2 00444000
  453. CHKCTCA LA R1,CLASSPEC*256+TYPCTCA CHECK FOR REAL CTCA @V407466 00445000
  454. CH R1,RDEVTYPC CTCA? @V407466 00446000
  455. BNE CHKDASD KEEP GOING @V407466 00447000
  456. OI VDCBYTE1,ATTCTCA INDICATE PROCESSING CTCA @V407466 00448000
  457. CHKDASD CLI RDEVTYPC,CLASDASD DASD DEVICE @V407466 00449000
  458. BNE VDCEXIST SKIP TIO; @V407466 00450000
  459. CLI RDEVTYPE,TYP2305 2305 MULT. EXPOSURE DEVICE @V407466 00451000
  460. BNE VDCEXIST NO, CONTINUE PRESCAN PHASE @V407466 00452000
  461. TM RDEVADD+1,BASEXP ATTACHING BASE EXPOSURE @V407466 00453000
  462. BCR 7,R5 NO, PROCESS NEXT ADDRESS @V407466 00454000
  463. OI VDCBYTE1,DED2305 MULTIPLE EXPOSURE 2305 @V407466 00455000
  464. VDCEXIST LTR R3,R3 IOBLOK/CPEXBLOK ALREADY ACQUIRED?@V407466 00456000
  465. BP SKIP2 YES, SKIP STORAGE ACQUIRE @V407466 00457000
  466. LA R0,IOBSIZE SIZE OF IOBLOK @V407466 00458000
  467. CALL DMKFREE AND GO GET ONE IOBLOK @V407466 00459000
  468. XC 0(IOBSIZE*8,R1),0(R1) CLEAR IOBLOK TO ZEROS @V407466 00460000
  469. LR R3,R1 IOBLOK PTR @V407466 00461000
  470. OI IOBSPEC,IOBTIO FLAG SPECIAL TIO REQUEST @V407466 00462000
  471. LA R0,CPEXSIZE GET A CPEXBLOK @V407466 00463000
  472. CALL DMKFREE ACQUIRE CPEXBLOK @V407466 00464000
  473. ST R1,IOBMISC2 SAVE CPEXBLOK HERE @V407466 00465000
  474. ST R11,IOBUSER VMBLOK ADDRESS @V407466 00466000
  475. LA R1,AFTERTIO INTERRUPT RETURN ADDRESS @V407466 00467000
  476. ST R1,IOBIRA ... @V407466 00468000
  477. MVI IOBFLAG,IOBCP CP GENERATED IO @V407466 00469000
  478. USING CPEXBLOK,R1 ACROSS CALL TO IOS @V407466 00470000
  479. SKIP2 L R1,IOBMISC2 ADDR OF CPEXBLOK @V407466 00471000
  480. STM R0,R15,CPEXR0 SAVE ALL CURRENT REGISTERS @V407466 00472000
  481. DROP R1 @V407466 00473000
  482. LR R10,R3 IOBLOK POINTER TO R10 @V407466 00474000
  483. CALL DMKIOSQR R8=RDEVBLOK,R10=IOBLOK @V407466 00475000
  484. GOTO DMKDSPCH WAIT FOR IT @V407466 00476000
  485. DROP R3 @V407466 00477000
  486. SPACE 2 00478000
  487. AFTERTIO EQU * INTERRUPT RETURN POINT @V407466 00479000
  488. USING *,R12 @V407466 00480000
  489. USING IOBLOK,R10 IOBLOK ADDRESSABILITY @V407466 00481000
  490. L R1,IOBMISC2 RESTORE CPEXBLOK ADDRESS @V407466 00482000
  491. USING CPEXBLOK,R1 CPEXBLOK ADDRESSABILITY @V407466 00483000
  492. LM R0,R15,CPEXR0 RESTORE VDC'S REGISTERS @V407466 00484000
  493. DROP R1,R10 @V407466 00485000
  494. USING IOBLOK,R3 RESTORE ORIGINAL ADDRESSABILITY @V407466 00486000
  495. USING DMKVDC,R12 MODULE ADDRESSABILITY @V407466 00487000
  496. TM IOBSTAT,IOBCC3 DEVICE DOES NOT EXIST @V407466 00488000
  497. BOR R5 IF CC=3 @V407466 00489000
  498. BZ SETR6 CC=0; NO PROBLEMS @V407466 00490000
  499. CLI RDEVTYPC,CLASDASD CC=1; CSW STORED @V407466 00491000
  500. BNE TAPE NOT DASD, CHECK FOR TAPE @V407466 00492000
  501. B RELIOER FRET IOERBLOK @V407466 00493000
  502. SPACE 2 00494000
  503. TAPE CLI RDEVTYPC,CLASTAPE MIXED CC=1; CSW STORED @V407466 00495000
  504. BNE SETR6 NOT TAPE, ASSUME DEVICE THERE @V407466 00496000
  505. L R1,IOBIOER GET IOERBLOK @V407466 00497000
  506. LTR R1,R1 IS THERE ONE @V407466 00498000
  507. BZ VBLOCKS SEE HOW MANY VIRTUAL BLOCKS EXIST@V407466 00499000
  508. USING IOERBLOK,R1 IOERBLOK ADDRESSABILITY @V407466 00500000
  509. TM IOERDATA,X'40' INTERVENTION REQUIRED @V407466 00501000
  510. BZ SETR6 NO, NOT SERIOUS @V407466 00502000
  511. TM IOERDATA+1,X'60' STATUS A AND B ON @V407466 00503000
  512. BNZ SETR6 SOMETHING ON, DEVICE THERE @V407466 00504000
  513. RELIOER LR R6,R5 ESTABLISH BRANCH ADDRESS @V407466 00505000
  514. FRETIOER L R1,IOBIOER IOERBLOK ADDRESS @V407466 00506000
  515. LTR R1,R1 DOES IOERBLOK EXIST @V407466 00507000
  516. BZ IOBUCHK SEE IF UC ON DASD @V407466 00508000
  517. LA R0,IOERSIZE SIZE OF IOERBLOK @V407466 00509000
  518. AH R0,IOEREXT PLUS EXT SIZE @V407466 00510000
  519. CALL DMKFRET AND RELEASE IT @V407466 00511000
  520. IOBUCHK CLI RDEVTYPC,CLASTAPE TAPE DEVICE? @V407466 00512000
  521. BER R6 YES, CONTINUE @V407466 00513000
  522. CLI RDEVTYPC,CLASDASD DASD? @V407466 00514000
  523. BNER R6 NO, CONTINUE @V407466 00515000
  524. TM IOBCSW+4,UC UC ON DASD 'TIO'? @V407466 00516000
  525. BZ VBLOCKS NO, CONTINUE TO PROCESS @V407466 00517000
  526. TM RDEVFTR,FTRVIRT 3330V DEVICE? @V407466 00518000
  527. BZR R6 NO, RETURN TO MAINLINE @V407466 00519000
  528. B VBLOCKS UC ON 3330V - VOLUME NOT MOUNTED @V407466 00520000
  529. SPACE 2 00521000
  530. SETR6 LA R6,VBLOCKS ESTABLISH BRANCH ADDRESS @V407466 00522000
  531. B FRETIOER @V407466 00523000
  532. DROP R1 @V407466 00524000
  533. SPACE 2 00525000
  534. VBLOCKS LR R1,R2 ADDRESS @V407466 00526000
  535. CALL DMKSCNVU SEE IF ALREADY DEFINED @V407466 00527000
  536. BCR 8,R5 DEVICE ALREADY DEFINED (BR IF @V407466 00528000
  537. * ZERO) 00529000
  538. LA R9,1 ESTABLISH INCREMENT @V407466 00530000
  539. BC 4,NCHANNEL CHANNEL BLOCK DOES NOT EXIST @V407466 00531000
  540. BC 2,NOTDEDCH CONTROL UNIT BLOCK DOES NOT EXIST@V407466 00532000
  541. TM VDCBYTE1,ATTCTCA ATTACHING A CTCA @V407466 00533000
  542. BCR 1,R5 PROCESS NEXT ADDRESS (BR IF ONES)@V407466 00534000
  543. TM VDCBYTE1,DED2305 2305 MULTIPLE EXPOSURE DEVICE @V407466 00535000
  544. BNO NOTDEDCH NO, SKIP 2305 PROCESSING @V407466 00536000
  545. USING VCUBLOK,R7 CONTROL UNIT BLOCK ADDRESSABILITY@V407466 00537000
  546. STM R2,R3,SAVEWRK7 SAVE REGISTERS TEMPORARILY @V407466 00538000
  547. N R1,F8 OBTAIN BASE ADDRESS INDEX @V407466 00539000
  548. SLL R1,1 CONVERT TO VCUDVTBL 2 BYTE INDEX @V407466 00540000
  549. LA R3,VCUDVTBL+2*7(R1) TABLE ADDR OF LAST EXPOSURE @V407466 00541000
  550. LA R1,VCUDVTBL(R1) TABLE ADDR OF FIRST EXPOSURE @V407466 00542000
  551. LA R2,2 TABLE ENTRY LENGTH FOR INDEX @V407466 00543000
  552. SCAN CLI 0(R1),X'FF' DEVICE DEFINED? @V407466 00544000
  553. BNE RESTREGS RESTORE R2 AND R3 @V407466 00545000
  554. BXLE R1,R2,SCAN NEXT ENTRY @V407466 00546000
  555. LM R2,R3,SAVEWRK7 RESTORE R2 AND R3 @V407466 00547000
  556. NOTDEDCH EQU * @V407466 00548000
  557. AIF (NOT &DEDCH).NOCHAN **AIF** @V407466 00549000
  558. USING VCHBLOK,R6 @V407466 00550000
  559. TM VCHSTAT,VCHDED CHANNEL DEDICATED @V407466 00551000
  560. BCR 1,R5 YES, CANNOT ATTACH THIS DEVICE @V407466 00552000
  561. DROP R6,R7 @V407466 00553000
  562. .NOCHAN ANOP 00554000
  563. NCHANNEL EQU * @V407490 00555000
  564. TM VDCBYTE1,DED2305 2305 TYPE DEVICE @V407466 00556000
  565. BZ SINGBLOK NO, CREATE SINGLE VDEVBLOK @V407466 00557000
  566. LA R9,8 CREATE VDEVBLOK FOR EACH EXP. @V407466 00558000
  567. SINGBLOK AH R9,VDCVDEV MUST FIGURE ON STORAGE FOR @V407466 00559000
  568. * VDEVBLOK 00560000
  569. STH R9,VDCVDEV RETURN TO WORK AREA @V407466 00561000
  570. CH R6,=H'-1' CHANNEL BLOCK EXIST? @V407466 00562000
  571. BNE CHKVCU VCHBLOK EXISTS; GO CHECK FOR @V407466 00563000
  572. * VCUBLOK 00564000
  573. LA R6,X'F00' ISOLATE CHANNEL BITS @V407466 00565000
  574. NR R6,R1 FROM THE DEVICE ADDRESS @V407466 00566000
  575. SRL R6,7 CHANNEL ADDRESS * 2 @V407466 00567000
  576. L R1,=A(DMKVIOMK) ADDRESS OF MASK TABLE @V407466 00568000
  577. LH R1,0(R1,R6) GET APPROP. MASK FROM TABLE @V407466 00569000
  578. LH R9,VDCCHMAP CHANNEL BIT MAP TO R9 @V407466 00570000
  579. OR R1,R9 TURN ON CHANNEL BIT IN MAP @V407466 00571000
  580. STH R1,VDCCHMAP RETURN TO WORK AREA @V407466 00572000
  581. CHKVCU CH R7,=H'-1' DOES VCUBLOK EXIST? @V407466 00573000
  582. BCR 7,R5 VCUBLOK ALREADY EXISTS; NEXT ADDR@V407466 00574000
  583. LR R1,R2 RESTORE ORIGINAL ADDRESS @V407466 00575000
  584. LA R7,X'0F0' ISOLATE CONTROL UNIT BITS FROM @V407466 00576000
  585. NR R7,R1 DEVICE ADDRESS @V407466 00577000
  586. SRL R7,3 CONTROL UNIT ADDRESS * 2 @V407466 00578000
  587. L R1,=A(DMKVIOMK) ADDRESS MASK TABLE @V407466 00579000
  588. LH R1,0(R1,R7) GET MASK FROM TABLE @V407466 00580000
  589. LH R9,VDCCUMAP(R7) CONTROL UNIT MAP @V407466 00581000
  590. OR R1,R9 TURN ON BIT IN CONTROL UNIT MAP @V407466 00582000
  591. STH R1,VDCCUMAP(R7) RETURN TO WORK AREA @V407466 00583000
  592. BR R5 RETURN TO MAINLINE @V407466 00584000
  593. SPACE 2 00585000
  594. RESTREGS LM R2,R3,SAVEWRK7 RESTORE R2 AND R3 @V407466 00586000
  595. BR R5 RETURN TO MAINLINE @V407466 00587000
  596. SPACE 2 00588000
  597. USING MDSECT,R4 MULTIPLE ADDRESS WORK AREA @V407466 00589000
  598. PRESCAND ST R3,SAVEWRK9 ..... SAME FOR R4 @V407466 00590000
  599. LR R4,R3 MULT STORAGE ADDRESS TO R4 @V407466 00591000
  600. L R2,MULTADD FIRST MULTIPLE ADDRESS @V407466 00592000
  601. SLR R3,R3 CLEAR R3 @V407466 00593000
  602. SLR R4,R4 AND R4 @V407466 00594000
  603. PRESCANE BAL R5,PRESCANA GO DO PRESCAN @V407466 00595000
  604. LR R5,R4 SAVE VDCWORK TEMP @V407466 00596000
  605. L R4,SAVEWRK9 RESTORE PTR TO MULT ADDRESSES @V407466 00597000
  606. LA R4,4(,R4) NEXT ADDRESS @V407466 00598000
  607. ST R4,SAVEWRK9 SAVE UPDATED POINTER @V407466 00599000
  608. L R2,0(,R4) NEXT MULT ADDRESS TO R2 @V407466 00600000
  609. LR R4,R5 RESTORE R4 @V407466 00601000
  610. NI VDCBYTE1,X'FF'-(ATTCTCA+DED2305) TURN BITS OFF @V407490 00602000
  611. CH R2,FFS END OF MULTIPLE ADDRESSES? @V407466 00603000
  612. BE FRETBLK FRET BLOCKS @V407466 00604000
  613. MVI IOBSTAT,X'00' CLEAR IOBSTAT FOR NEXT TIME @V407466 00605000
  614. XC IOBCSW(L'IOBCSW),IOBCSW CLEAR CSW @V407466 00606000
  615. B PRESCANE CONTINUE NEXT ADDRESS @V407466 00607000
  616. SPACE 2 00608000
  617. USING VDCWORK,R4 ADDRESSABILITY @V407466 00609000
  618. NOFREE NI VDCFLAG,X'FF'-(DEVBLD+CUBLD) RESET IND. @V407466 00610000
  619. BAL R5,FREWRK RELEASE STORAGE AREA @V407466 00611000
  620. L R13,SAVEWRK6 RESTORE VDC SAVEAREA ADDRESS @V407466 00612000
  621. LA R2,RC32 INSUFFICIENT FREE STORAGE @V407466 00613000
  622. ST R2,SAVER2 SAVE FOR CALLER @V407466 00614000
  623. LCR R2,R2 PLUS TO MINUS SETS CC=1 @V407466 00615000
  624. B EXIT2 RETURN TO CALLER @V407466 00616000
  625. ERR153 DS 0H @VA13217 00616500
  626. NI VDCFLAG,X'FF'-(DEVBLD+CUBLD) RESET INDIC @VA13217 00616510
  627. BAL R5,FREWRK RELEASE STORAGE @VA13217 00616520
  628. L R13,SAVEWRK6 RESTORE VDC SAVE AREA @VA13217 00616530
  629. LA R2,RC124 RETURN CODE FOR MSG 153 @VA13217 00616540
  630. ST R2,SAVER2 PASS TO CALLER @VA13217 00616550
  631. LCR R2,R2 SET CC=1 IN PSW @VA13217 00616560
  632. B EXIT2 LEAVE @VA13217 00616570
  633. DROP R4 @V407466 00617000
  634. SPACE 00618000
  635. BITMAP DC X'8040201008040201' @V407466 00619000
  636. SPACE 00620000
  637. * EQUATE FOR ERROR CODE - INSUFFICIENT FREE STORAGE 00621000
  638. RC32 EQU 32 @V407466 00622000
  639. RC124 EQU 124 EXCEEDED MAX DEVICES @VA13217 00622500
  640. SPACE 00623000
  641. * EQUATES FOR COUNTERS 00624000
  642. COUNT2 EQU 2 @V407466 00625000
  643. COUNT8 EQU 8 @V407466 00626000
  644. COUNT32 EQU 32 @V407466 00627000
  645. EJECT 00628000
  646. *. 00629000
  647. * SUBROUTINE NAME - 00630000
  648. * 00631000
  649. * DMKVDCAL - CHAIN RDEVBLOKS OFF ALLOCATION CHAIN 00632000
  650. * ANCHORS. 00633000
  651. * 00634000
  652. * FUNCTION - 00635000
  653. * 00636000
  654. * TO CHAIN RDEVBLOKS OFF THE ALLOCATION CHAIN ANCHORS 00637000
  655. * FOR THE DASD DEVICE TYPE AND THEN TO MASSAGE 00638000
  656. * ALLOCATION DATA . 00639000
  657. * 00640000
  658. * ATTRIBUTES - 00641000
  659. * REENTRANT, PAGEABLE, CALLED VIA SVC 00642000
  660. * 00643000
  661. * ENTRY CONDITIONS - 00644000
  662. * 00645000
  663. * GPR4 - POINTER TO OWNED LIST ENTRY 00646000
  664. * GPR8 - ADDRESS OF RDEVBLOK 00647000
  665. * GPR10 - IOBLOK ADDRESS 00648000
  666. * GPR12 - BASE REGISTER 00649000
  667. * GPR13 - STANDARD SAVE AREA ADDRESS 00650000
  668. * 00651000
  669. * GPR0-GPR3 WORK REGISTERS 00652000
  670. * GPR5-GPR9 WORK REGISTERS 00653000
  671. * 00654000
  672. * EXIT CONDITIONS: 00655000
  673. * 00656000
  674. * CC=0; NO ERROR CONDITIONS ARE GENERATED IN THIS 00657000
  675. * MODULE. 00658000
  676. * 00659000
  677. * CALLS TO OTHER ROUTINES - 00660000
  678. * 00661000
  679. * DMKSYSOW 00662000
  680. * DMKPGTTM 00663000
  681. * 00664000
  682. * EXTERNAL REFERENCES - 00665000
  683. * 00666000
  684. * NONE 00667000
  685. * TABLES / WORK AREAS - 00668000
  686. * 00669000
  687. * RDEVBLOK 00670000
  688. * IOBLOK 00671000
  689. * OWNED LIST ENTRY 00672000
  690. * ALOCBLOK 00673000
  691. * 00674000
  692. * REGISTER USAGE - 00675000
  693. * 00676000
  694. * GPR3 - INDEX TO APPROPRIATE CHAIN 00677000
  695. * GPR4 - POINTER TO OWNEDLIST ENTRY 00678000
  696. * GPR8 - ADDRESS OF RDEVBLOK 00679000
  697. * GPR10 - ADDRESS OF IOBLOK 00680000
  698. * GPR12 - BASE REGISTER 00681000
  699. * GPR13 - STANDARD SAVE AREA ADDRESS 00682000
  700. * 00683000
  701. * GPR0-GPR3 WORK REGISTERS 00684000
  702. * GPR5-GPR7 WORK REGISTERS 00685000
  703. * GPR9, GPR14-GPR15 WORK REGISTERS 00686000
  704. * 00687000
  705. * NOTES - NONE 00688000
  706. * 00689000
  707. * OPERATION - 00690000
  708. * 00691000
  709. * 1. GET THE PROPER CHAIN ANCHOR BASED ON DASD DEVICE 00692000
  710. * TYPE AND PREFERRED VOLUME INDEX. 00693000
  711. * 2. READ ALLOCATION DATA OFF DISK AND BUILD MINI 00694000
  712. * ALLOCATION BLOCK TO BE CHAINED INTO THE ALLOCATION 00695000
  713. * CHAIN. 00696000
  714. * 00697000
  715. * RESPONSES - 00698000
  716. * NONE 00699000
  717. * 00700000
  718. * ERROR MESSAGES - 00701000
  719. * NONE 00702000
  720. *. 00703000
  721. EJECT 00704000
  722. DMKVDCAL RELOC SUBROUTINE TO CHAIN IN ALLOCATION TABLES @V407466 00705000
  723. USING RDEVBLOK,R8 @V407466 00706000
  724. USING IOBLOK,R10 EXPANDED IOBLOK ADDRESSABILITY @V407466 00707000
  725. USING OWNDLIST,R4 OWNED LIST ADDRESSABILTIY @V407466 00708000
  726. ST R8,SAVEWRK9 SAVE ADDRESS OF RDEVBLOK @V407466 00709000
  727. LA R14,ALL2314-4 @V407466 00710000
  728. LA R5,203 EACH DEVICE TYPE HAS TWO CHAINS @V407466 00711000
  729. CLI RDEVTYPE,TYP2314 ...AND DIFFERENT CYL NUMBERS @V407466 00712000
  730. BE ALLLIST @V407466 00713000
  731. TST3350 LA R14,ALL3350-4 3350 TABLE @V407466 00714000
  732. LA R5,555 @V407466 00715000
  733. CLI RDEVTYPE,TYP3350 3350 DEVICE TYPE @V407466 00716000
  734. BE ALLLIST YES, PROCESS 3350 @V407466 00717000
  735. LA R14,ALL3375-4 3375 table HRC106DK 00717100
  736. LA R5,959 Number of cylinders for 3375 HRC106DK 00717150
  737. CLI RDEVTYPE,TYP3375 3375 device type HRC106DK 00717200
  738. BE ALLLIST Yes, process 3375 HRC106DK 00717250
  739. CLI RDEVTYPE,TYP3380 3380 device type HRC106DK 00717300
  740. BNE NOT3380 No - move on to next type HRC106DK 00717350
  741. LA R14,ALL3380-4 3380 table HRC106DK 00717400
  742. LA R5,2655 Number of cylinders for 3380 (K) HRC106DK 00717450
  743. TM RDEVMDL,RDEVMD83 Triple density 3380? HRC106DK 00717500
  744. BO ALLLIST Yes, process triple density 3380 HRC106DK 00717550
  745. LA R5,1770 Number of cylinders for 3380 (E) HRC106DK 00717600
  746. TM RDEVMDL,RDEVMD82 Double density 3380? HRC106DK 00717650
  747. BO ALLLIST Yes, process double density 3380 HRC106DK 00717700
  748. LA R5,885 Num. cylinders for 3380 (A/D/J) HRC106DK 00717750
  749. B ALLLIST Process single density 3380 HRC106DK 00717800
  750. NOT3380 EQU * HRC106DK 00717850
  751. CLI RDEVTYPE,TYP3340 3340 DEVICE TYPE @V407466 00718000
  752. BNE TST3330 NO - TEST 3330 TYPE @V407466 00719000
  753. LA R14,ALL3340-4 POINT TO 3340 TABLE @V407466 00720000
  754. LA R5,MB35 NUMBER OF CYLINDERS FOR 35MB @V56BDA8 00721000
  755. LA R2,VDCLBUF-VDCLOK(R5,R10) ALLOC RECORD PLUS ONE @V407466 00722000
  756. CLI 0(R2),X'FF' VALID 35MB ALLOCATION RECORD ? @V407466 00723000
  757. BE ALLLIST YES - @V407466 00724000
  758. TM RDEVFTR,FTR35MB 3340 WITH 35MB PACK @V407466 00725000
  759. BO ALLLIST YES -- GO @V407466 00726000
  760. LA R5,MB70 NUMBER OF CYLINDERS FOR 70MB @V56BDA8 00727000
  761. B ALLLIST 3340 WITH 70MB PACK @V407466 00728000
  762. SPACE 2 00729000
  763. TST3330 LA R14,ALL3330-4 3330 TABLE @V407466 00730000
  764. LA R5,404 @V407466 00731000
  765. CLI RDEVTYPE,TYP3330 @V407466 00732000
  766. BNE TST2305 IF NOT 3330 GO TEST FOR 2305 @V407466 00733000
  767. CLI RDEVMDL,11 MOD 11 3330 ? @V407466 00734000
  768. BNE ALLLIST NO- ALL SET @V407466 00735000
  769. LA R5,808 SET UP FOR A MOD 11 3330 @V407466 00736000
  770. B ALLLIST @V407466 00737000
  771. SPACE 2 00738000
  772. TST2305 LA R14,ALL2305-4 POINT TO TABLE @V407466 00739000
  773. LA R5,96 @V407466 00740000
  774. CLI RDEVMDL,X'01' MOD 1 2305 ? @V407466 00741000
  775. BNE ALLLIST NO- ALL SET @V407466 00742000
  776. LA R5,48 SET UP FOR A MOD 1 2305 @V407466 00743000
  777. ALLLIST EQU * ADD RDEVBLOK TO ALLOCATION LIST @V407466 00744000
  778. L R1,0(R3,R14) GET ADDRESS OF CHAIN ANCHOR @V407466 00745000
  779. L R2,0(,R1) FIRST RDEVBLOK, IF ANY @V407466 00746000
  780. LTR R2,R2 IS IT ANY ? @V407466 00747000
  781. BNZ ALLINST YES - INSERT THIS RDEVBLOK @V407466 00748000
  782. ST R8,RDEVPNT CHAIN RDEVBLOK TO ITSELF @V407466 00749000
  783. ST R8,0(,R1) ...AND INTO CHAIN ANCHOR @V407466 00750000
  784. B SETALLN GO MASSAGE ALLOCATION DATA @V407466 00751000
  785. SPACE 2 00752000
  786. ALLINST EQU * @V407466 00753000
  787. L R1,RDEVPNT-RDEVBLOK(,R2) @V407466 00754000
  788. ST R1,RDEVPNT @V407466 00755000
  789. ST R8,RDEVPNT-RDEVBLOK(,R2) @V407466 00756000
  790. SETALLN EQU * MASSAGE ALLOCATION DATA @V407466 00757000
  791. LR R2,R8 RDEVBLOK ADDRESS @V407466 00758000
  792. SL R2,ARIODV GET DISPLACEMENT @V407466 00759000
  793. SRL R2,3(0) CONVERT TO DOUBLE-WORD INDEX @V407466 00760000
  794. STH R2,OWNDRDEV ...INTO OWNED-LIST ENTRY @V407466 00761000
  795. SL R4,=A(DMKSYSOW) COMPUTE "RDEVCODE" @V407466 00762000
  796. SRL R4,3(0) ... @V407466 00763000
  797. DROP R4 @V407466 00764000
  798. STH R4,RDEVCODE @V407466 00765000
  799. SPACE 00766000
  800. ST R10,SAVEWRK6 SAVE IOBLOK ADDRESS @V407466 00767000
  801. LA R4,VDCLBUF-2-VDCLOK(,R10) START OF ALLOCATION @V407466 00768000
  802. * RECORD 00769000
  803. * GPR 5 CONTAINS NUMBER OF CYLINDERS ON DEVICE 00770000
  804. SPACE 00771000
  805. LA R1,63(R5) ROUND UP IF NECESSARY... @V407466 00772000
  806. SRL R1,6 NO DBLWDS NEEDED: 64 CYL/DBLWD @V407466 00773000
  807. LA R0,(ALOCMAP-ALOCBLOK+7)/8(R1) ADD IN HDR SIZE @V407466 00774000
  808. CALL DMKFREE GET MINI ALOCBLOK @V407466 00775000
  809. USING ALOCBLOK,R1 @V407466 00776000
  810. ST R1,RDEVALLN SET RDEVALLN TO MINI ALOCBLOK @V407466 00777000
  811. ST R1,BALR1 SAVE ADDRESS OF LAST ALLOCATION @V407466 00778000
  812. * BLOCK 00779000
  813. DROP R8 @V407466 00780000
  814. SR R8,R8 ZERO TDISK CYLINDER COUNTER @V407466 00781000
  815. LR R6,R1 ADDR OF ALOCBLOK @V407466 00782000
  816. LR R7,R0 SIZE OF THE BLOCK @V407466 00783000
  817. SLL R7,3 IN BYTES PLEASE. @V407466 00784000
  818. L R15,F0 PAD & COUNT @V407466 00785000
  819. MVCL R6,R14 CLEAR THE BLOCK @V407466 00786000
  820. STH R5,ALOCMAX SET ALOCMAX @V407466 00787000
  821. SR R9,R9 CLEAR @V407466 00788000
  822. LA R14,2(,R4) POINT TO ALLOCATION DATA @V407466 00789000
  823. LR R15,R14 SAVE START OF ALOCMAP @V407466 00790000
  824. ALOCLKUP CLI 0(R14),X'00' IS THERE ANY ALLOCATION ON THIS @V407466 00791000
  825. * CYLINDER? 00792000
  826. BE NOTTDISK GO TEST FOR END OF TDISK AREA @V407466 00793000
  827. CLI 0(R14),TEMP ... @VM00019 00794000
  828. BE NOTTDISK TREAT AS TEMP @VM00019 00795000
  829. LA R10,1 SET TENTATIVE DECREMENT @V407466 00796000
  830. LR R6,R5 GET NUMBER CYLINDERS FOR THIS @V407466 00797000
  831. * DEVICE 00798000
  832. SRL R6,1 /2 @V407466 00799000
  833. LR R7,R14 GET ADDRESS OF CURRENT BYTE @V407466 00800000
  834. SR R7,R15 GET CYLINDER NUMBER WHERE WE @V407466 00801000
  835. * ARE NOW 00802000
  836. SR R6,R7 @V407466 00803000
  837. BP *+8 @V407466 00804000
  838. LPR R6,R6 MAKE POSITIVE @V407466 00805000
  839. SR R10,R10 SET DECREMENT TO 0 @V407466 00806000
  840. AR R6,R6 DOUBLE @V407466 00807000
  841. SR R6,R10 DECREMENT, IF NECESSARY @V407466 00808000
  842. SRDL R6,3 /8 @V407466 00809000
  843. SRL R7,29 GET REMAINDER IN LOW ORDER 3 BITS@V407466 00810000
  844. IC R7,ALOCTBL(R7) GET BITS THAT ARE ALREADY IN @V407466 00811000
  845. * ALOCTBL 00812000
  846. LA R6,ALOCMAP(R6) GET PROPER OUTPUT BYTE @V407466 00813000
  847. EX R7,ALLOCON TURN ON APPROPRIATE BIT @V407466 00814000
  848. LA R9,1(,R9) KEEP TOTAL OF ALLOCATED CYLINDERS@V407466 00815000
  849. CLI 0(R14),X'02' TDISK CYLINDER ?? @V407466 00816000
  850. BNE NOTTDISK NO -- GO TEST FOR END OF TDISK @V407466 00817000
  851. LA R8,1(,R8) BUMP TDISK CYLINDER COUNT @V407466 00818000
  852. B ALOCNXT AND GO PROCESS NEXT CYLINDER @V407466 00819000
  853. SPACE 00820000
  854. NOTTDISK LTR R8,R8 ANY TDISK ALLOCATED ?? @V407466 00821000
  855. BZ ALOCNXT NO -- @V407466 00822000
  856. ST R1,BALR6 SAVE CURRENT (OLD) ADDR @V407466 00823000
  857. LA R7,7(R8) ROUND UP IF NECESSARY... @V407466 00824000
  858. SRL R7,3 NO DBLWDS NEEDED: 8 CYL/DBLWD @V407466 00825000
  859. LA R7,(ALOCMAP-ALOCBLOK+7)/8(R7) ADD IN HDR SIZE @V407466 00826000
  860. LR R0,R7 TO R0 FOR DMKFREE PLEASE @V407466 00827000
  861. STM R14,R15,BALR14 SAVE REGS 14 AND 15 OVER CALL @V407466 00828000
  862. CALL DMKFREE GET CORE FOR A TDISK BLOK @V407466 00829000
  863. LR R6,R1 NEW BLOK ADDR @V407466 00830000
  864. SLL R7,3 SIZE IN BYTES @V407466 00831000
  865. L R15,F0 PAD & COUNT @V407466 00832000
  866. MVCL R6,R14 CLEAR THE BLOCK @V407466 00833000
  867. LM R14,R15,BALR14 RESTORE R14, R15 @V407466 00834000
  868. L R7,BALR1 RESTORE ADDRESS OF LAST @V407466 00835000
  869. * ALLOCATION BLOCK 00836000
  870. ST R1,ALOCPNT-ALOCBLOK(,R7) CHAIN IT TO OLD LAST @V407466 00837000
  871. * BLOCK 00838000
  872. MVI 0(R7),X'80' AND FLAG IT AS TDISK ALLOCATION @V407466 00839000
  873. ST R1,BALR1 AND SAVE ADDRESS OF NEW LAST @V407466 00840000
  874. * BLOCK 00841000
  875. LR R7,R14 GET CURRENT CYLINDER @V407466 00842000
  876. SR R7,R15 RELATIVE TO ZERO @V407466 00843000
  877. BCTR R7,0 LESS ONE (LAST TDISK CYLINDER) @V407466 00844000
  878. STH R7,ALOCCYL2 SAVE AS LAST CYLINDER ADDRESS @V407466 00845000
  879. SR R7,R8 GET 1ST CYLINDER ADDRESS @V407466 00846000
  880. LA R7,1(,R7) ... @V407466 00847000
  881. STH R7,ALOCCYL1 SAVE IN ALOCBLOK @V407466 00848000
  882. LA R10,ALOCMAP(R8) POINT TO FIRST NON-ALLOCATED @V407466 00849000
  883. * BYTE 00850000
  884. SR R8,R8 CLEAR TDISK COUNTER FOR NEXT TIME@V407466 00851000
  885. LR R7,R1 SAVE ADDRESS OF BLOK @V407466 00852000
  886. L R1,BALR6 RESTORE ADDR OF OLD BLOK @V407466 00853000
  887. SLL R0,3 GET LENGTH OF BLOK @V407466 00854000
  888. AR R7,R0 GET END OF BLOK @V407466 00855000
  889. BCTR R7,0 GET LAST BYTE OF BLOK @V407466 00856000
  890. CR R10,R7 BLOK FULL ?? @V407466 00857000
  891. BH ALOCNXT YES -- @V407466 00858000
  892. LA R6,1 GET INCREMENT FOR BXLE @V407466 00859000
  893. MVI 0(R10),X'AA' FLAG UNUSED BYTES AS ALLOCATED @V407466 00860000
  894. BXLE R10,R6,*-4 LOOP UNTIL BLOK IS FULL @V407466 00861000
  895. SPACE 00862000
  896. ALOCNXT CLI 0(R14),X'FF' END OF ALLOCATION ?? @V407466 00863000
  897. LA R14,1(,R14) IN ANY CASE, INDEX UP @V407466 00864000
  898. BE ALOCFINI YES @V407466 00865000
  899. LR R10,R14 GET CURRENT ALOCATION BYTE @V407466 00866000
  900. SR R10,R4 MINUS START OF TABLE @V407466 00867000
  901. BCTR R10,0 ... @V407466 00868000
  902. BCTR R10,0 ... @V407466 00869000
  903. CH R10,ALOCMAX EXCEEDED MAXIMUM ? @V407466 00870000
  904. BL ALOCLKUP NO @V407466 00871000
  905. CLI 0(R14),X'FF' END OF ALLOCATION DATA ? @V407466 00872000
  906. BE NOTTDISK SEE IF T-DISK AT TOP OF DEVICE @V407466 00873000
  907. SPACE 1 00874000
  908. ALOCFINI EQU * HERE AT END OF MAXI ALLOCATION @V407466 00875000
  909. * TABLE SCAN 00876000
  910. STH R9,ALOCUSED SET TOTAL NUMBER OF CYLINDERS @V407466 00877000
  911. * ALLOCATED 00878000
  912. STH R9,ALOCNTMP SET NUMBER OF NON-TEMP CYLS @V407466 00879000
  913. LA R0,IOBSIZE+ALLOLEN IOBLOK+BUFFER @V407466 00880000
  914. L R1,SAVEWRK6 IOBLOK ADDRESS @V407466 00881000
  915. L R10,IOBMISC-IOBLOK(,R1) REST. ATTACHEE'S VMBLOK @VA07393 00882000
  916. ST R10,SAVER10 .... @VA07393 00883000
  917. CALL DMKFRET @V407466 00884000
  918. L R15,SAVEWRK9 ADDRESS OF RDEVBLOK @V407466 00885000
  919. TM RDEVFLAG-RDEVBLOK(R15),RDEVPREF TEMP SPACE ? @V407466 00886000
  920. BO VDCALOUT NO -- PAGING SPACE @V407466 00887000
  921. SR R5,R9 GET NUMBER OF TEMP CYLINDERS ON @V407466 00888000
  922. * VOLUME 00889000
  923. L R15,=A(DMKPGTTM) ADDRESS OF TEMP CYL COUNTER @V407466 00890000
  924. A R5,0(,R15) INCREMENT COUNT @V407466 00891000
  925. ST R5,0(,R15) AND SAVE @V407466 00892000
  926. SPACE 00893000
  927. L R15,=A(DMKPGTTM) GET MAX NUMBER OF TEMP CYLS @V407466 00894000
  928. L R3,0(,R15) INTO GPR3 @V407466 00895000
  929. M R2,F9 TIMES 90 PERCENT @V407466 00896000
  930. D R2,F10 .. @V407466 00897000
  931. L R15,=A(DMKPGT90) ADDRESS OF 90 PERCENT COUNTER @V407466 00898000
  932. ST R3,0(R15) STORE NEW 90 PERCENT COUNT @V407466 00899000
  933. VDCALOUT EXIT GO GIVE RESPONSES @V407466 00900000
  934. SPACE 00901000
  935. ALLOCON OI 0(R6),*-* @V407466 00902000
  936. SPACE 00903000
  937. ALOCTBL DC X'8040201008040201' BIT/BYTE TRANSLATION @V407466 00904000
  938. SPACE 00905000
  939. ALL2305 DC A(DMKPGTP5,DMKPGTT5) 2305 ALLOCATION CHAIN @V407466 00906000
  940. * ANCHORS 00907000
  941. ALL3330 DC A(DMKPGTP0,DMKPGTT0) 3330 ALLOCATION CHAIN @V407466 00908000
  942. * ANCHORS 00909000
  943. ALL3340 DC A(DMKPGT4P,DMKPGT4T) 3340 ALLOCATION ANCHORS @V407466 00910000
  944. ALL3350 DC A(DMKPGT5P,DMKPGT5T) 3350 ALLOCATION ANCHORS @V407466 00911000
  945. ALL3375 DC A(DMKPGT7P,DMKPGT7T) 3375 allocation anchors HRC106DK 00911100
  946. ALL3380 DC A(DMKPGT8P,DMKPGT8T) 3380 allocation anchors HRC106DK 00911200
  947. ALL2314 DC A(DMKPGTP4,DMKPGTT4) 2314 ALLOCATION CHAIN @V407466 00912000
  948. * ANCHORS 00913000
  949. SPACE 3 00914000
  950. ALLOLEN EQU 1024/8+64/8 EXTRA SIZE FOR ALLOCATION @V407466 00915000
  951. EJECT 00916000
  952. *. 00917000
  953. * SUBROUTINE NAME - 00918000
  954. * 00919000
  955. * DMKVDCSC - SCAN 'ATTACH/DETACH' COMMAND LINE 00920000
  956. * 00921000
  957. * FUNCTION - 00922000
  958. * TO PERFORM SYNTAX CHECKING ON 'ATTACH/DETACH' COMMAND 00923000
  959. * LINE. 00924000
  960. * 00925000
  961. * ATTRIBUTES - 00926000
  962. * 00927000
  963. * REENTRANT, PAGEABLE, CALLED VIA SVC 00928000
  964. * 00929000
  965. * ENTRY CONDITIONS: 00930000
  966. * 00931000
  967. * GPR9 - COMMAND LINE BUFFER POINTER 00932000
  968. * GPR12 - BASE REGISTER 00933000
  969. * GPR13 - STANDARD SAVE AREA ADDRESS 00934000
  970. * 00935000
  971. * EXIT CONDITIONS: 00936000
  972. * 00937000
  973. * GPR2 = 0 IF SUCCESSFUL SYNTAX CHECK 00938000
  974. * GPR2 = ERROR CODE IF SYNTAX CHECK IS UNSUCCESSFUL. 00939000
  975. * DMKVDA WILL ISSUE ERROR MESSAGE BASED ON ERROR CODE 00940000
  976. * WHICH WAS PASSED TO IT BY DMKVDCSC. 00941000
  977. * 00942000
  978. * CALLS TO OTHER ROUTINES - 00943000
  979. * 00944000
  980. * DMKSCNFD 00945000
  981. * DMKSCNAU 00946000
  982. * DMKCVTHB 00947000
  983. * DMKCFCSC 00948000
  984. * 00949000
  985. * EXTERNAL REFERENCES - 00950000
  986. * 00951000
  987. * NONE 00952000
  988. * 00953000
  989. * TABLES / WORK AREAS - 00954000
  990. * 00955000
  991. * COMMAND LINE BUFFER 00956000
  992. * DMKVDA'S SAVEAREA 00957000
  993. * WORK AREA TO STORE CONVERTED MULTIPLE ADDRESSES WHICH 00958000
  994. * ARE TO BE PROCESSED BY DMKVDA. 00959000
  995. * 00960000
  996. * REGISTER USAGE 00961000
  997. * 00962000
  998. * GPR2 - ERROR CODE 00963000
  999. * GPR9 - COMMAND LINE BUFFER POINTER 00964000
  1000. * GPR12 - BASE REGISTER 00965000
  1001. * GPR13 - STANDARD SAVE AREA ADDRESS 00966000
  1002. * 00967000
  1003. * ALL OTHER REGISTERS ARE WORK REGISTERS 00968000
  1004. * 00969000
  1005. * NOTES - NONE 00970000
  1006. * 00971000
  1007. * OPERATION - 00972000
  1008. * 1. THE INPUT LINE IS SCANNED VIA DMKCFCSC, DMKSCNFD AND 00973000
  1009. * DMKCVTHB TO OBTAIN AND CONVERT FROM HEX TO BINARY 00974000
  1010. * (WHERE APPROPRIATE) THE REAL DEVICE, VIRTUAL DEVICE, 00975000
  1011. * AND USERID. IF ANY FIELDS ARE OMITTED OR INVALID, AN 00976000
  1012. * ERROR CODE IS RETURNED TO DMKVDA/DMKVDD VIA GPR2 AND 00977000
  1013. * DMKVDA/DMKVDD ISSUES THE APPROPRIATE ERROR MESSAGE. 00978000
  1014. * 00979000
  1015. * 2. WHEN MULTIPLE ADDRESSES ARE SPECIFIED ON THE COMMAND 00980000
  1016. * LINE, A WORK AREA IS ACQUIRED AND THE CONVERTED DEVICE 00981000
  1017. * ADDRESSES STORED IN THE AREA. THE ADDRESS OF THE AREA 00982000
  1018. * IS RETURNED TO DMKVDA/DMKVDD FOR LATER PROCESSING. 00983000
  1019. * 00984000
  1020. * RESPONSES - 00985000
  1021. * NONE 00986000
  1022. * 00987000
  1023. * ERROR MESSAGES - 00988000
  1024. * 00989000
  1025. * NONE; DMKVDCSC RETURNS ERROR CODES TO DMKVDA/DMKVDD 00990000
  1026. * VIA GPR2 AND DMKVDA/DMKVDD ISSUES THE APPROPRIATE ERROR 00991000
  1027. * MESSAGE. 00992000
  1028. * 00993000
  1029. *. 00994000
  1030. EJECT 00995000
  1031. DMKVDCSC RELOC @V407466 00996000
  1032. USING BUFFER,R9 @V407490 00997000
  1033. LR R5,R13 SAVE R13 SAVE ADD FOR LATER @V407466 00998000
  1034. L R13,SAVER13 CALLER'S SAVEAREA ADDRESS @V407466 00999000
  1035. VDCSCAN EQU * PARSE THE COMMAND LINE @V407466 01000000
  1036. MVC CMDUSER(8),BLANKS @V407466 01001000
  1037. XC VIRTADD(2),VIRTADD @V60B6B8 01002000
  1038. SPACE 01003000
  1039. CALL DMKSCNFD FIND FIRST PARAMETER @V407466 01004000
  1040. BNZ INVADD1 ADDR1 MISSING OR INVALID @V407466 01005000
  1041. CL R0,F7 ADDR > 7 - ERROR @V407466 01006000
  1042. BH INVADD1C INVALID @V407490 01007000
  1043. LA R2,DASH PREPARE SCAN FOR '-' @V407466 01008000
  1044. SPACE 01009000
  1045. CALL DMKCFCSC SEE IF RANGE ON COMMAND LINE @V407466 01010000
  1046. BZ NORANGE RANGE NOT FOUND (R1-R2) @V407466 01011000
  1047. CR R1,R2 INVALID IF '-' FIRST CHARACTER @V407466 01012000
  1048. BNL INVADD1C ... @V407490 01013000
  1049. CL R0,F3 RANGE < 3? (R1-R2) @V407466 01014000
  1050. BL INVADD1C ERROR IF IT IS @V407490 01015000
  1051. LR R3,R2 R1 INTO R3 FOR NOW @V407466 01016000
  1052. SR R3,R1 LENGTH OR RADDR1 FIELD @V407466 01017000
  1053. LR R6,R0 SAVE ENTIRE OPERAND LENGTH @V407466 01018000
  1054. LR R0,R3 RADDR1 LENGTH @V407466 01019000
  1055. MVI 0(R2),BLANK REPLACE '-' WITH BLANK @V407466 01020000
  1056. CALL DMKCVTHB CONVERT FIRST RADDR IN RANGE @V407466 01021000
  1057. BNZ INVADD1A INVALID ADDR1 FIELD @V407490 01022000
  1058. ST R1,DEVADDR STORE FIRST RADDR FOR LATER @V407466 01023000
  1059. LA R1,1(,R2) POINT TO SEC. RADDR IN RANGE @V407466 01024000
  1060. SR R6,R3 GET RADDR2 LENGTH @V407466 01025000
  1061. BCTR R6,0 MINUS 1 FOR '-' @V407466 01026000
  1062. LR R0,R6 RADDR2 LENGTH IN R0 @V407466 01027000
  1063. CALL DMKCVTHB CONVERT SEC. RADDR IN RANGE @V407466 01028000
  1064. BNZ INVADD1B INVALID ADDR1 FIELD @V407490 01029000
  1065. L R2,DEVADDR RADDR1 IN RANGE @V407466 01030000
  1066. CR R1,R2 RADDR2 MUST BE > RADDR1 IN RANGE @V407466 01031000
  1067. BNH INVADD1B OTHERWISE , INVALID @V407490 01032000
  1068. STH R1,VDCBITS+2 STORE RADDR2 FOR LATER @V407466 01033000
  1069. OI VDCBITS,RANGE INDICATE RANGE @V407466 01034000
  1070. B USERSCAN SCAN FOR SECOND OPERAND @V407466 01035000
  1071. SPACE 2 01036000
  1072. NORANGE CL R0,F3 LONGER THAN A DEVICE ADDRESS @V407466 01037000
  1073. BNH CHKDADD NO @V407466 01038000
  1074. LR R2,R0 LENGTH INTO R2 @V407466 01039000
  1075. BCTR R2,0 @V407466 01040000
  1076. EX R2,TSTCHAN SEE IF 'CHANNEL' @V407466 01041000
  1077. BNE INVADD1C NO - INVALID ADDR 1 FIELD @V407490 01042000
  1078. OI VDCBITS,CHANNEL OPTION - ATTACH OR DETACH @V407466 01043000
  1079. CALL DMKSCNFD GET CHANNEL ADDRESS @V407466 01044000
  1080. BNZ INVADD1 NOT SPECIFIED @V407466 01045000
  1081. CL R0,F1 MAXIMUM LENGTH = 1 @V407466 01046000
  1082. BH INVADD1C @V407490 01047000
  1083. CHKDADD EQU * CONVERT ADDRESS @V407466 01048000
  1084. CALL DMKCVTHB @V407466 01049000
  1085. BNZ INVADD1B INVALID ADDR 1 FIELD @V407490 01050000
  1086. ST R1,DEVADDR SAVE IN WORK AREA @V407466 01051000
  1087. USERSCAN TM VMCLEVEL,VMCLASSB IF HE ISN'T CLASS B IT CAN @V407466 01052000
  1088. * ONLY 01053000
  1089. BO USER2 BE 'DETACH' OF A VIRTUAL DEVICE @V407466 01054000
  1090. TM VMTRCTL,VMTRIO+VMTRSIO TRACING I/O ? @VA09655 01054300
  1091. BNZ INVTRACE YES, CAN NOT DETACH @VA09655 01054700
  1092. OI VDCBYTE1,VDETACH DETACH VIRTUAL @V407466 01055000
  1093. USER2 CALL DMKSCNFD FIND SECOND PARAMETER (USERID) @V407466 01056000
  1094. BNZ SCANADD ADDRESS ONLY - MAYBE DETACH @V407466 01057000
  1095. CL R0,F4 IF LONGER THAN 'FROM' @V407466 01058000
  1096. BH SCNUSER ...MUST BE A USERID @V407466 01059000
  1097. LR R2,R0 @V407466 01060000
  1098. BCTR R2,0 @V407466 01061000
  1099. TM VDCBYTE2,DETACH IS THIS 'DETACH'? @V407466 01062000
  1100. BO CHKFROM YES, TEST FOR 'FROM' @V407466 01063000
  1101. EX R2,FINDTO ATTACH - TEST FOR 'TO' @V407466 01064000
  1102. BE GETUSER YES, SCAN FOR USERID @V407466 01065000
  1103. MULTIPLE TM VDCBITS,RANGE RANGE BEING PROCESSED @V407466 01066000
  1104. BO SCNUSER2 YES, MUST BE USERID THEN @V407466 01067000
  1105. LR R6,R1 SAVE R1 @V407466 01068000
  1106. CALL DMKCVTHB CONVERT ADDRESS @V407466 01069000
  1107. BNZ RESTORE RESTORE R1/R2 VALUE @V407466 01070000
  1108. CL R0,F3 MAX LENGTH FOR DEVICE @V407490 01071000
  1109. BH RESTORE ATTEMPT TO FIND USERID @VA09375 01072500
  1110. TM VDCBITS,MULTR FIRST PASS THROUGH HERE @V407466 01073000
  1111. BO NEXTADD NOT FIRST MULT, STORE ADDRESS @V407466 01074000
  1112. ST R1,SAVEWRK6 SAVE R1 TEMPORARILY @V407466 01075000
  1113. USING MDSECT,R4 @V407466 01076000
  1114. LR R3,R4 R3 POINTS TO FREE STORAGE @V407466 01077000
  1115. OI VDCBITS,MULTR MULTIPLE REAL ADDRESSES @V407466 01078000
  1116. L R1,DEVADDR FIRST MULTIPLE @V407466 01079000
  1117. ST R1,MULTADD MOVE MULT ADDRESS TO WORK AREA @V407466 01080000
  1118. L R1,SAVEWRK6 RESTORE R1 @V407466 01081000
  1119. NEXTADD LA R4,4(,R4) BUMP PTR TO NEXT FREE SLOT @V407466 01082000
  1120. ST R1,MULTADD STORE NEXT MULTIPLE ADDRESS @V407466 01083000
  1121. B USERSCAN GO SCAN AGAIN FOR USERID @V407466 01084000
  1122. SPACE 2 01085000
  1123. SCANADD TM VDCBYTE2,DETACH IF THIS ISN'T DETACH @V407466 01086000
  1124. BZ INVUSID THERE IS A MISSING USERID @V407466 01087000
  1125. TM VMTRCTL,VMTRIO+VMTRSIO TRACING I/O ? @VA09655 01087300
  1126. BNZ INVTRACE YES, CAN NOT DETACH @VA09655 01087700
  1127. OI VDCBYTE1,VDETACH ADDRESS ONLY @V407466 01088000
  1128. LOADFFS L R1,FFS STORE FFS AS DELIMITER FOR @V407466 01089000
  1129. * MULTIPLES 01090000
  1130. ST R1,4(R4) IN WORKAREA @V407466 01091000
  1131. B SCANCOMP COMMAND LINE SCAN COMPLETE @V407466 01092000
  1132. SPACE 2 01093000
  1133. RESTORE LR R1,R6 RESTORE R1 @V407466 01094000
  1134. B SCNUSER2 MAYBE OPERAND IS A USERID?? @V407466 01095000
  1135. SPACE 2 01096000
  1136. CHKFROM EQU * LOOK FOR OPTIONAL WORD 'FROM' @V407466 01097000
  1137. EX R2,FNDFROM DETACH - TEST FOR 'FROM' @V407466 01098000
  1138. BNE MULTIPLE SEE IF MULTIPLES ON COMMAND @V407466 01099000
  1139. GETUSER EQU * FIND USERID PARAMETER @V407466 01100000
  1140. CALL DMKSCNFD @V407466 01101000
  1141. BNZ INVUSID @V407466 01102000
  1142. SPACE 01103000
  1143. SCNUSER EQU * FOUND USERID FIELD @V407466 01104000
  1144. LR R2,R0 @V407466 01105000
  1145. BCTR R2,0 @V407466 01106000
  1146. SCNUSER2 TM VMCLEVEL,VMCLASSB CLASS B USER @V407466 01107000
  1147. BZ LOADFFS NO, MUST BE DETACH VIRTUAL @V407466 01108000
  1148. CL R2,F7 IF TOO LONG... @V407466 01109000
  1149. BH INVUSID ...INVALID USERID FIELD @V407466 01110000
  1150. CL R0,F1 IS IT ONE CHAR? @V407466 01111000
  1151. BH MOVEIT NOPE, ... USE IT @V407466 01112000
  1152. CLI 0(R1),C'*' IS IT STAR? @V407466 01113000
  1153. BNE MOVEIT NOPE, USE IT @V407466 01114000
  1154. LA R1,VMUSER MAKE IT THE OPERATOR @V407466 01115000
  1155. LA R2,7 ADJUSTED LENGTH FOR EXECUTE @V407466 01116000
  1156. LA R0,8 MAKE TOTAL LENGTH 8 @V407466 01117000
  1157. MOVEIT EQU * @V407466 01118000
  1158. EX R2,MVCUSER MOVE TO WORK AREA @V407466 01119000
  1159. CLC CMDUSER(8),=CL8'SYSTEM' ATTACH TO SYSTEM ? @V407466 01120000
  1160. BNE GETBLOK NO @V407466 01121000
  1161. L R10,ASYSVM ADDRESS OF SYSTEM VMBLOK @V407466 01122000
  1162. TM VDCBYTE2,DETACH DETACH COMMAND? @V407466 01123000
  1163. BO SYSDET YES, DETACH FROM 'SYSTEM' @V407466 01124000
  1164. TM VDCBITS,RANGE+MULTR RANGE OR MULTIPLE RADDR @V407466 01125000
  1165. * SPECIFIED? 01126000
  1166. BM INVUSID YES, CANNOT ATTACH TO 'SYSTEM' @V407466 01127000
  1167. SYSDET OI VDCBITS,ATTSYST ATTACH/DETACH TO/FROM SYSTEM @V407466 01128000
  1168. B NEXTOPT GO GET VOLID @V407466 01129000
  1169. SPACE 2 01130000
  1170. GETBLOK EQU * FIND VMBLOK OF ATTACHEE @V407466 01131000
  1171. CALL DMKSCNAU @V407466 01132000
  1172. BC 2,INVUSID INVALID USERID @V407466 01133000
  1173. BNZ NOTLOGD USER NOT LOGGED ON @V407466 01134000
  1174. LR R10,R1 SAVE VMBLOK ADDRESS IN R10 @V407466 01135000
  1175. TM VDCBYTE2,DETACH DETACH ? @VA09655 01135100
  1176. BZ NEXTOPT NO,TEST FOR TRACE NOT NEEDED @VA09655 01135300
  1177. TM VMTRCTL-VMBLOK(R10),VMTRIO+VMTRSIO TRACING I/O @VA09655 01135500
  1178. BNZ INVTRACE YES, CAN NOT DETACH @VA09655 01135700
  1179. SPACE 01136000
  1180. NEXTOPT EQU * @V407466 01137000
  1181. TM VDCBITS,CHANNEL ATTACHING A CHANNEL @V407466 01138000
  1182. BZ NEXTOPT2 FIND NEXT OPERAND @V407466 01139000
  1183. TM VDCBITS,ATTSYST ATTACH TO SYSTEM ? @V407466 01140000
  1184. BO INVUSID INVALID USERID @V407466 01141000
  1185. B SCANCOMP RETURN TO DMKVDA TO ATT CHANNEL @V407466 01142000
  1186. CHKLEAVE EQU * HRC003DK 01142080
  1187. MVC SAVEWRK8(8),BUFNXT SAVE BUFFER POINTERS HRC003DK 01142160
  1188. CALL DMKSCNFD CALL WORD SCANNER HRC003DK 01142240
  1189. BNZ LOADFFS NO MORE PARMS, LOAD FENCE HRC003DK 01142320
  1190. LR R2,0 GET PARM LENGTH HRC003DK 01142400
  1191. BCTR R2,0 DECR BY 1 FOR EXECUTE HRC003DK 01142480
  1192. EX R2,CMPLEAVE COMPARE FOR LEAVE HRC003DK 01142560
  1193. BNZ INVOPTS NOPE - INVALID OPT HRC003DK 01142640
  1194. OI VDCBITS+1,TPNORUN INDICATE LEAVE REQ HRC003DK 01142720
  1195. B LOADFFS DONE HRC003DK 01142800
  1196. CMPLEAVE CLC 0(0,R1),=C'LEAVE ' HRC003DK 01142880
  1197. SPACE 2 01143000
  1198. NEXTOPT2 TM VDCBYTE2,DETACH DETACH COMMAND? @V407466 01144000
  1199. BO CHKLEAVE YES, DETACH REAL - CHK LEAVE HRC003DK 01145490
  1200. MVC SAVEWRK8(8),BUFNXT SAVE BUFFER POINTERS @V407490 01146000
  1201. CALL DMKSCNFD FIND NEXT PARAMETER @V407466 01147000
  1202. BNZ MANY1 NO PARM - MUST BE RANGE/MULTIPLES@V407466 01148000
  1203. TM VDCBITS,RANGE+MULTR RANGE OR MULTIPLE ADDRESSES?@V407466 01149000
  1204. BM CHKRO THEN, IT BETTER BE R/O @V407466 01150000
  1205. SPACE 01150010
  1206. * HERE WE ARE IF ATTACH TO SYSTEM OR USERID AND WE EXPECT WE 01150020
  1207. * NOW HAVE 'AS' OR A VADDR OR THE VOLID FOR SYSTEM 01150030
  1208. SPACE 01150040
  1209. LR R2,R0 @V407466 01151000
  1210. BCTR R2,0 @V407466 01152000
  1211. EX R2,FINDAS IT MAY BE "AS" @V407466 01153000
  1212. BNE CHKVADD NO - ASSUME IT'S AN ADDRESS @V407466 01154000
  1213. MVC SAVEWRK8(8),BUFNXT SAVE BUFFER POINTERS @V407490 01155000
  1214. CALL DMKSCNFD FIND VIRTUAL ADDRESS @V407466 01156000
  1215. BNZ MANY1 VOLID OR DEV ADDR MISSING @VA11347 01157500
  1216. CHKVADD EQU * @V407466 01158000
  1217. TM VDCBITS,ATTSYST ATTACH TO SYSTEM ? @V407466 01159000
  1218. BZ CHKRO NOT RANGE/MULTIPLES @VA12315 01160001
  1219. SPACE 01160010
  1220. * HERE WE NOW GOTS AN ATTACH TO THE SYSTEM AND HAVE WHAT MAY 01160020
  1221. * BE A VOLID, WILL USE IT AS SUCH AND LEAVE 01160030
  1222. SPACE 01160040
  1223. LR R2,R0 @V407466 01161000
  1224. CL R2,F6 MAXIMUM LENGTH FOR VOLID @V407466 01162000
  1225. BH INVOLID VOLID INVALID @V407466 01163000
  1226. MVC CMDUSER(8),BLANKS CLEAR VOLUME SERIAL BUFFER @V407466 01164000
  1227. BCTR R2,0 @V407466 01165000
  1228. EX R2,MVCUSER MOVE TO WORK AREA @V407466 01166000
  1229. OI SAVEWRK9,VOLPRES VOLID PRESENT ON COMMAND @V60B6B8 01167000
  1230. MVC SAVEWRK6(6),BLANKS BLANK BEFORE SAVING VOLSER @VA11886 01167500
  1231. EX R2,MVCVOL SAVE IN CASE 3330V VOLUME @V60B6B8 01168000
  1232. SLR R1,R1 CLEAR R1 FOR LOAD HALF @V407466 01169000
  1233. LH R1,VIRTADD VIRTUAL ADDRESS TO R1 @V407466 01170000
  1234. B SCANCOMP 'ATTACH' DATA IS ALL READY @V407466 01171000
  1235. SPACE 2 01172000
  1236. * WE WENT TO READ THE NEXT PARM AND IS NOT THERE.... IF ATT TO 01172010
  1237. * SYSTEM ITS NO VOLID, IF TO USER ITS NO VADDR AND WE'LL GIVE A 01172020
  1238. * DEFAULT OF THE RADDR, IF FOR THE RANGE AND MULTIPLES ITS OK 01172030
  1239. * WE JUST GOT NO R/O OR 3330V STUFF ... GO CHECK THE ADDRESSES 01172040
  1240. SPACE 01172050
  1241. MANY1 TM VDCBITS,RANGE WAS RANGE SPECIFIED ON COMMAND @V407466 01173000
  1242. * LINE? 01174000
  1243. BO MAXRANGE VERIFY VIRTUAL DEVICE ADDRESSES @V407466 01175000
  1244. TM VDCBITS,MULTR MULTIPLE RADDR SPECIFIED? @V407466 01176000
  1245. BO MAXMULT VERIFY VIRTUAL DEVICE ADDRESSES @V407466 01177000
  1246. TM VDCBITS,ATTSYST ATTACH TO SYSTEM???? 01178000
  1247. BO INVOLID YES,THEN SHOULD HAVE VOLID @V407490 01179000
  1248. USERADDR L R1,DEVADDR REAL DEVICE ADDRESS @V407466 01180000
  1249. STH R1,VIRTADD RADDR=VADDR @V407466 01181000
  1250. LTR R14,R10 DO WE HAVE AN R10 VMBLOK @V407466 01182000
  1251. BNZ MAXDEV YES, USE IT @V407466 01183000
  1252. LR R14,R11 NO, USE R11 THEN @V407466 01184000
  1253. USING VMBLOK,R14 JUST BRIEFLY @V407466 01185000
  1254. MAXDEV MAXDV R15 HIGHEST VIRTUAL DEVICE PER @V407466 01186000
  1255. * USER'S VMBLOK 01187000
  1256. CLR R1,R15 IS VIRTUAL DEVICE VALID @V407466 01188000
  1257. BH INVADD2 NO, ISSUE ERROR MSG @V407466 01189000
  1258. B SCANCOMP OK, KEEP PROCESSING @V407466 01190000
  1259. SPACE 2 01191000
  1260. MAXRANGE L R1,DEVADDR FIRST VIRTUAL DEVICE ADDRESS @V407466 01192000
  1261. B CHKMAX VERIFY MAX VIRTUAL DEVICE ADDRESS@V407466 01193000
  1262. SPACE 2 01194000
  1263. MAXMULT L R1,FFS FENCE @V407466 01195000
  1264. ST R1,4(R4) INDICATE END OF MULT ADDRESSES @V407466 01196000
  1265. LR R4,R3 POINT TO BEG OF FREE STORAGE AREA@V407466 01197000
  1266. L R1,MULTADD FIRST MULTIPLE ADDRESS @V407466 01198000
  1267. B CHKMAX BRANCH TO VERIFY DEVICE ADDRESS @V407466 01199000
  1268. SPACE 2 01200000
  1269. MULTINC LA R4,4(,R4) POINT TO NEXT MULT ADDRESS @V407466 01201000
  1270. L R1,MULTADD PICK UP THE ADDRESS @V407466 01202000
  1271. C R1,FFS ANYMORE ADDRESSES? @V407466 01203000
  1272. BNE CHKNEXT VERIFY NEXT ADDRESS IN RANGE @V407466 01204000
  1273. LR R4,R3 RESTORE R4 TO BEGINNING @V407466 01205000
  1274. B SCANCOMP NO MORE, GO PROCESS THE COMMAND @V407466 01206000
  1275. SPACE 2 01207000
  1276. INCREMRA LA R1,1(,R1) NEXT ADDRESS IN RANGE @V407466 01208000
  1277. CH R1,VDCBITS+2 COMPARE WITH HIGHEST RANGE @V407466 01209000
  1278. * ADDRESS 01210000
  1279. BC 2,SCANCOMP END OF RANGE, RETURN TO MAINLINE @V407466 01211000
  1280. B CHKNEXT VERIFY NEXT ADDRESS IN RANGE @V407466 01212000
  1281. SPACE 2 01213000
  1282. * HERE FOR AN ATTACH TO USERID AND WE HAVE A VADDR FIELD 01213010
  1283. SPACE 01213020
  1284. CVTVADD EQU * @V60B6B8 01214000
  1285. TM SAVEWRK9,VADDPRES DO WE HAVE VADDR? @VA12315 01214500
  1286. BO INVOPTS YES... TUT,TUT @VA12315 01214600
  1287. CL R0,F3 CHECK OPERAND LENGTH @V60B6B8 01215000
  1288. BH INVADD2 INVALID ADDRESS @VA14002 01216700
  1289. CALL DMKCVTHB CONVT VIRTUAL ADDR TO BINARY @V60B6B8 01217000
  1290. BNZ INVADD2 INVALID ADDRESS. @VA12315 01218100
  1291. OI SAVEWRK9,VADDPRES WE HAVE VADDR. @VA12315 01218200
  1292. STH R1,VIRTADD SET VIRT ADDRESS. @VA12315 01218300
  1293. CHKMAX LTR R14,R10 DO WE HAVE AN R10 VMBLOK? @V407466 01222000
  1294. BNZ CHKMAXDV YES - USE IT @V407466 01223000
  1295. LR R14,R11 NO - USE R11, THEN @V407466 01224000
  1296. CHKMAXDV MAXDV R15 HIGHEST VIRTUAL DEVICE PER @V407466 01225000
  1297. * USER'S VMBLOK 01226000
  1298. DROP R14 (BACK TO NORMAL) @V407466 01227000
  1299. CHKNEXT CLR R1,R15 IS VIRTUAL DEVICE VALID ? @V407466 01228000
  1300. BH INVADD2 NOPE @V407466 01229000
  1301. TM VDCBITS,RANGE RANGE SPECIFIED @V407466 01230000
  1302. BO INCREMRA PROCESS NEXT ADDRESS IN RANGE @V407466 01231000
  1303. TM VDCBITS,MULTR MULTIPLE RADDR FIELDS @V407466 01232000
  1304. BO MULTINC PROCESS NEXT ADDRESS @V407466 01233000
  1305. CALL DMKSCNFD SEE IF "R/O" GIVEN @V407466 01234000
  1306. BNZ SCANCOMP 'ATTACH' - EVERYTHING IS READY @V407466 01235000
  1307. B CHKRO GO CHECK OUT THE OPTIONS @VA11388 01236010
  1308. SPACE 01256000
  1309. TSTCHAN CLC 0(*-*,R1),=C'CHANNEL' FOR ATTACH/DETACH @V407466 01257000
  1310. FINDTO CLC 0(*-*,R1),=C'TO ' OPTIONAL WORDS @VA10197 01258100
  1311. FINDAS CLC 0(*-*,R1),=C'AS ' ........ @VA10197 01259100
  1312. FNDFROM CLC 0(*-*,R1),=C'FROM' ... @V407466 01260000
  1313. MVCUSER MVC CMDUSER(*-*),0(R1) MOVE USERID TO WORK AREA @V407466 01261000
  1314. MVCVOL MVC SAVEWRK6(0),0(R1) MOVE VOLID TO SAVE AREA @V60B6B8 01262000
  1315. VIRTCOMP DC CL5'3330V' POSSIBLE PARAMETER @V60B6B8 01263000
  1316. SPACE 01264000
  1317. DASH DC C'-' RANGE DELIMITER @V407466 01265000
  1318. BLANK EQU X'40' RANGE DELIMITER @V407466 01266000
  1319. SPACE 01267000
  1320. * FLAGS DEFINED IN VDCBITS: 01268000
  1321. CHANNEL EQU X'80' CHANNEL OPTION SPECIFIED @V407466 01269000
  1322. VDETACH EQU X'02' DETACH VIRTUAL DEVICE @V407466 01270000
  1323. ATTSYST EQU X'10' ATTACH TO/FROM SYSTEM @V407466 01271000
  1324. ATTREAD EQU X'08' ATTACH R/O @V407466 01272000
  1325. * FLAGS DEFINED IN VDCBITS+1: 01273000
  1326. DETACH EQU X'08' DETACH REQUEST @V407466 01274000
  1327. TPNORUN EQU X'01' DONT RUN TAPE HRC003DK 01274500
  1328. * FLAGS DEFINED IN SAVEWRK9: 01275000
  1329. VIRTPRES EQU X'40' '3330V' PRESENT ON INPUT @V60B6B8 01276000
  1330. VOLPRES EQU X'80' 'VOLID' PRESENT ON INPUT @V60B6B8 01277000
  1331. VADDPRES EQU X'20' VIRT. ADDR. PRESENT @VA12315 01277100
  1332. EJECT 01278000
  1333. INVOPTS LA R2,RC28 INVALID OPTION @V407466 01279000
  1334. LR R13,R5 RELOAD SAVE AREA POINTER @V407490 01280000
  1335. STM R0,R1,SAVER0 RETURN REGS 0&1 TO CALLER @V407490 01281000
  1336. B VDCRET RETURN TO DMKVDA @V407466 01282000
  1337. SPACE 01283000
  1338. INVADD2 LA R2,RC36 INVALID VADDR @V407466 01284000
  1339. B VDCRET RETURN TO DMKVDA @V407466 01285000
  1340. SPACE 01286000
  1341. INVOLID LA R2,RC40 VOLID INVALID @V407466 01287000
  1342. B VDCRET RETURN TO DMKVDA @V407466 01288000
  1343. SPACE 01289000
  1344. NOTLOGD LA R2,RC44 USER NOT LOGGED ON @V407466 01290000
  1345. B VDCRET RETURN TO DMKVDA @V407466 01291000
  1346. SPACE 2 01292000
  1347. INVUSID LA R2,RC48 INVALID USERID @V407466 01293000
  1348. B VDCRET RETURN TO DMKVDA @V407466 01294000
  1349. SPACE 01294200
  1350. INVTRACE EQU * @VA09655 01294400
  1351. LA R2,RC72 RETURN CODE TO VDD @VA09655 01294600
  1352. B VDCRET RETURN TO VDD @VA09655 01294800
  1353. SPACE 01295000
  1354. INVADD1A EQU * INVALID RADDR @V407490 01296000
  1355. LR R2,R6 PICK UP COUNT OF TOTAL FIELD @V407490 01297000
  1356. L R1,BUFNXT GET UPDATED BUFFER ADDR @V407490 01298000
  1357. SR R1,R2 GET START OF BAD FIELD @V407490 01299000
  1358. B INVADD1C GO SAVE BAD PARM @V407490 01300000
  1359. SPACE 01301000
  1360. INVADD1B L R1,BUFNXT GET UPDATED BUFFER ADDR @V407490 01302000
  1361. SR R1,R0 START OF PREVIOUS FIELD @V407490 01303000
  1362. INVADD1C BCTR R0,0 DECREMENT FOR EXECUTE @V407490 01304000
  1363. LTR R2,R0 MOVE COUNT FOR EXECUTE @V407490 01305000
  1364. BNM CKSIZE BR IF COUNT IS POSITIVE @V407490 01306000
  1365. L R2,F0 SET COUNT TO MOVE ONE CHAR. @V407490 01307000
  1366. CKSIZE CL R2,F7 SIZE > 8 CHARACTERS?? @V407490 01308000
  1367. BNH SIZEOK BR IF 8 OR LESS @V407490 01309000
  1368. L R2,F7 SET COUNT TO MOVE 8 (MAX) @V407490 01310000
  1369. SIZEOK EX R2,MVCUSER SAVE INVALID FIELD @V407490 01311000
  1370. INVADD1 LA R2,RC52 INVALID RADDR @V407466 01312000
  1371. VDCRET EQU * @V407490 01313000
  1372. LR R13,R5 RESTORE SAVE AREA ADDRESS @V407466 01314000
  1373. BADRC ST R2,SAVER2 ERROR RETURN CODE @V407466 01315000
  1374. LCR R2,R2 PLUS TO MINUS SETS COND. CODE @V407466 01316000
  1375. B VDCEXIT2 RETURN TO DMKVDA @V407466 01317000
  1376. SPACE 2 01318000
  1377. SCANCOMP SR R0,R0 CLEAR ZERO RETURN CODE @V407466 01319000
  1378. LR R13,R5 RESTORE R5 SAVE AREA ADDRESS @V407466 01320000
  1379. ZERORC ST R0,SAVER2 PASS BACK ZERO RETURN CODE @V407466 01321000
  1380. VDCEXIT2 STM R10,R11,SAVER10 RETURN R10, R11 TO CALLER @V407466 01322000
  1381. EXIT @V407466 01323000
  1382. EJECT 01324000
  1383. * TEST TO SEE IF R/O VOLID OR 3330V PARAMETERS ARE 01325010
  1384. * PRESENT, WHICH INDICATE THE COMMAND MAY PERTAIN 01328000
  1385. * TO MSS VUA'S. 01329000
  1386. * 01330000
  1387. * NOTE: IF THE SYSTEM AND VOLID PARMS ARE PRESENT, THEN 01331000
  1388. * THE VOLID IS STORED IN FIELD CMDUSER (SAVEWRK3-4) 01332000
  1389. * IF THE 'USERID' AND 'VOLID' PARMS ARE PRESENT, THEN 01333000
  1390. * THE VOLID IS STORED IN FIELD SAVEWRK6. 01334000
  1391. * 01335000
  1392. CHKRO DS 0H @VA11388 01336050
  1393. CL R0,F3 IS THIS GREATER THAN THREE CHARS @VA11388 01336100
  1394. BH CHKMSS ITS HIGHER THAN CHECK THE OTHERS @VA11388 01336150
  1395. BNE CHKRRR AND ITS NOT EQUAL @VA11388 01336200
  1396. CLC 0(3,R1),=C'R/O' IS IT REALLY R/O ? @VA11388 01336250
  1397. SETREAD DS 0H @VA11388 01336300
  1398. BNE CVTVADD COULD BE VIRT ADDR @VA12315 01336355
  1399. TM VDCBITS,ATTREAD WE ALREADY FIND R/O OPT ? @VA11388 01336400
  1400. BO INVOPTS YES THIS IS INVALID @VA11388 01336450
  1401. OI VDCBITS,ATTREAD INDICATE WE GOT R/O OPTION @VA11388 01336500
  1402. B NEXTOPTN GO GET THE NEXT ONE @VA11388 01336550
  1403. CHKRRR DS 0H @VA11388 01336600
  1404. CLI 0(R1),C'R' IS IT THE ABBREVIATION ? @VA11388 01336750
  1405. B SETREAD CONTINUE FOR CHECK @VA11388 01336800
  1406. SPACE 01336850
  1407. CHKMSS DS 0H @VA11388 01336900
  1408. CLC 0(5,R1),=C'3330V' IS IT 3330V OPTION @VA11388 01337050
  1409. BNE CHKVOL NO GO HANDLE AS VOLID @VA11388 01337100
  1410. TM SAVEWRK9,VIRTPRES WE ALREADY GET 3330V ? @VA11388 01337150
  1411. BO INVOPTS YES DONT NEED TWO @VA11388 01337200
  1412. OI SAVEWRK9,VIRTPRES INDICATE WE GOT THIS ONE @VA11388 01337250
  1413. B NEXTOPTN GO GET SOME MORE @VA11388 01337300
  1414. SPACE 01337350
  1415. CHKVOL DS 0H @VA11388 01337400
  1416. TM VDCBITS,RANGE+MULTR IS IT FOR RANGE OR MULTIS ? @VA11388 01337450
  1417. BM INVOPTS YES SHOULDNT BE THIS FAR PAL @VA11388 01337500
  1418. TM SAVEWRK9,VOLPRES WE ALREADY DO A VOLID ? @VA11388 01337550
  1419. BO INVOPTS IF YES, INVALID OPTION @VA14002 01337610
  1420. CLC 0(5,R1),=CL5'VOLID' IS IT VOLID? @VA12315 01337655
  1421. BE MSSVOL GET VOLID @VA12315 01337660
  1422. TM SAVEWRK9,VADDPRES IS VIRT ADDRESS IND ON? @VA12315 01337665
  1423. BZ INVADD2 INVALID ADDRESS @VA12315 01337670
  1424. B INVOPTS IF NOT... INVALID OPTION @VA12315 01337675
  1425. MSSVOL EQU * @VA12315 01337680
  1426. CALL DMKSCNFD GET VOLID @VA12315 01337685
  1427. BNZ INVOLID NONE....INVALID VOLID @VA12315 01337690
  1428. OI SAVEWRK9,VOLPRES INDICATE WE GOT IT @VA14002 01337697
  1429. CL R0,F6 GREATER THAN 6 CHARS ? @VA11388 01337700
  1430. BH INVOLID YES...WRONG VOLID @VA12315 01337760
  1431. LR R2,R0 INIT THE LENGTH @VA11388 01337800
  1432. BCTR R2,0 DECREMENT IT @VA11388 01337850
  1433. MVC SAVEWRK6(6),BLANKS BLANK BEFORE SAVING VOLSER @VA11886 01337870
  1434. EX R2,MVCVOL MOVE IT INTO SAVEWRK6 @VA11388 01337900
  1435. SPACE 01337950
  1436. NEXTOPTN DS 0H @VA11388 01338000
  1437. CALL DMKSCNFD GO GET THE NEXT LITTLE BEAUTY @VA11388 01338050
  1438. BZ CHKRO BEGIN THE SEARCH @VA11388 01338100
  1439. TM VDCBITS,MULTR WAS IT MULTIS @VA11388 01338150
  1440. BO MAXMULT YES GO TO ITS SPECIAL PLACE @VA11388 01338200
  1441. TM VDCBITS,RANGE WAS IT RANGE TYPE @VA14002 01338210
  1442. BO MAXRANGE GO THERE ALSO @VA14002 01338220
  1443. TM SAVEWRK9,VADDPRES IS VIRT ADDRSS PRESENT ? @VA12315 01338260
  1444. BO VADDOK YES.. IT'S ALRIGHT @VA12315 01338310
  1445. MVC VIRTADD(2),DEVADDR+2 PUT ONE THERE @VA11388 01338400
  1446. VADDOK DS 0H @VA11388 01338450
  1447. B SCANCOMP ELSE WE'S ALL DONE JACK @VA11388 01338600
  1448. EJECT 01364000
  1449. LTORG @V407466 01365000
  1450. EJECT 01366000
  1451. COPY SAVE @V407466 01367000
  1452. COPY IOBLOKS @V407466 01368000
  1453. COPY CONBUF @V407490 01369000
  1454. SPACE 01370000
  1455. VDCBITS EQU SAVEWRK1 FLAGS USED WITHIN VDA @V407466 01371000
  1456. DEVADDR EQU SAVEWRK2 REAL DEVICE ADDRESS @V407466 01372000
  1457. CMDUSER EQU SAVEWRK3 AND SAVEWRK4 - USERID @V407466 01373000
  1458. VIRTADD EQU SAVEWRK1+2 VIRTUAL DEVICE ADDRESS @V407466 01374000
  1459. SPACE 1 01375000
  1460. MB35 EQU 348 3340/44 35MB CYLINDERS @V56BDA8 01376000
  1461. MB70 EQU 696 3340/44 70MB CYLINDERS @V56BDA8 01377000
  1462. SPACE 01378000
  1463. TEMP EQU X'08' TEMP SPACE @VM00019 01379000
  1464. SPACE 01380000
  1465. SPACE 2 01381000
  1466. VDCLOK DSECT , DSECT FOR EXPANDED IOBLOK @V407466 01382000
  1467. DS (IOBSIZE)D @V407466 01383000
  1468. VDCLCCW DS 7D .... @V407466 01384000
  1469. * SEEK, TIC, NOP, SEARCH, TIC, READ SENSE @V407466 01385000
  1470. VDCLCNT DS 1D SEEK AND SEARCH ARGS @V407466 01386000
  1471. VDCLBUF DS 10D 80-BYTE LABEL-RECORD BUFFER @V407466 01387000
  1472. VDCLSNS DS 4D 32-BYTE SENSE AREA @V407466 01388000
  1473. VDCLLEN EQU (*-VDCLOK)/8 BLOCK LENGTH IN DBL-WDS @V407466 01389000
  1474. EJECT 01390000
  1475. MDSECT DSECT @V407466 01391000
  1476. MULTADD DS F ADDRESS @V407466 01392000
  1477. DS 47F UP TO 48 CCU ON ONE COMMAND LINE @V407466 01393000
  1478. DS 4D ... @V407466 01394000
  1479. MULTSIZE EQU (*-MULTADD)/8 @V407466 01395000
  1480. SPACE 01396000
  1481. VDCWORK DSECT @V407466 01397000
  1482. VDCVDEV DS H VDEVBLOK COUNT TO BE ATTACHED @V407466 01398000
  1483. VDCVCH DS H REQUIRED NUMBER VCHBLOKS @V407466 01399000
  1484. VDCVCU DS H REQUIRED NUMBER VCUBLOKS @V407466 01400000
  1485. VDCVCUE DS H EMPTY VCUBLOK SLOTS @V407466 01401000
  1486. VDCVCHE DS H EMPTY VCHBLOK SLOTS @V407466 01402000
  1487. SPACE 01403000
  1488. VDCVDEVE DS H EMPTY VDEVBLOK SLOTS @V407466 01404000
  1489. VDCCHMAP DS H CHANNEL BIT MAP @V407466 01405000
  1490. VDCCUMAP DS 16H CONTROL UNIT BIT MAP @V407466 01406000
  1491. VDCFLAG DS X BUILD BLOK FLAG @V407466 01407000
  1492. DS X RESERVED FOR IBM USE @V407466 01408000
  1493. VDCSIZE EQU (*-VDCWORK+7)/8 @V407466 01409000
  1494. SPACE 01410000
  1495. * FLAGS DEFINED IN VDCFLAG 01411000
  1496. DEVBLD EQU X'80' BUILDING VDEVBLOKS @V407466 01412000
  1497. CUBLD EQU X'40' BUILDING VCUBLOKS @V407466 01413000
  1498. SPACE 01414000
  1499. VDCBYTE1 EQU SAVEWRK1 FLAG INDICATING MULT/RANGE @V407466 01415000
  1500. VDCBYTE2 EQU SAVEWRK1+1 @V407466 01416000
  1501. VDCRADD2 EQU SAVEWRK1+2 SECOND RADDR IN RANGE @V407466 01417000
  1502. VDCRADD1 EQU SAVEWRK2 FIRST RADDR IN RANGE @V407466 01418000
  1503. VDCUSER EQU SAVEWRK3 USERID ASSOCIATED WITH ATTACH @V407466 01419000
  1504. VDCVADD EQU SAVEWRK5 VIRTUAL ADDRESS @V407466 01420000
  1505. * 01421000
  1506. * FLAGS DEFINED IN VDCBYTE1 01422000
  1507. * 01423000
  1508. SPACE 01424000
  1509. MULTR EQU X'20' MULTIPLE ADDRESSES ON ATTACH @V407466 01425000
  1510. RANGE EQU X'04' ADDRESS RANGE ON ATTACH @V407466 01426000
  1511. ATTCTCA EQU X'02' ATTACHING CTCA @V407466 01427000
  1512. DED2305 EQU X'01' 2305 MULTIPLE EXPOSURE DEVICE @V407466 01428000
  1513. SPACE 01429000
  1514. * RETURN CODES PASSED BACK TO DMKVDA 01430000
  1515. SPACE 01431000
  1516. RC28 EQU 28 @V407466 01432000
  1517. RC36 EQU 36 INVALID VADDR @V407466 01433000
  1518. RC40 EQU 40 INVALID VOLID @V407466 01434000
  1519. RC44 EQU 44 USER NOT LOGGED ON @V407466 01435000
  1520. RC48 EQU 48 INVALID USERID @V407466 01436000
  1521. RC52 EQU 52 INVALID RADDR @V407466 01437000
  1522. RC72 EQU 72 USER IS TRACING I/O @VA09655 01437500
  1523. SPACE 01438000
  1524. BASEXP EQU X'07' 2305 BASE EXPOSURE @V407466 01439000
  1525. EJECT 01440000
  1526. COPY VMBLOK @V407466 01441000
  1527. COPY VBLOKS @V407466 01442000
  1528. COPY IOER @V407466 01443000
  1529. COPY EQU @V407466 01444000
  1530. COPY DEVTYPES @V407466 01445000
  1531. PSA @V407466 01446000
  1532. COPY RBLOKS @V407466 01447000
  1533. COPY ALLOC @V407466 01448000
  1534. END DMKVDC 01449000