Table of Contents

DMKVER Source

References

Source Listing

DMKVER.ASSEMBLE.txt
  1. VER TITLE 'DMKVER (CP) VM/370 - RELEASE 6' 00001000
  2. *. 00002000
  3. * 00003000
  4. * MODULE NAME - 00004000
  5. * DMKVER 00005000
  6. * 00006000
  7. * FUNCTION - 00007000
  8. * TO PROCESS ERROR RECORDS PASSED FROM VIRTUAL MACHINES 00008000
  9. * VIA AN SVC 76. 00009000
  10. * 00010000
  11. * ATTRIBUTES - 00011000
  12. * PAGEABLE,REENTRANT,CALLED VIA SVC 00012000
  13. * 00013000
  14. * ENTRY POINTS - 00014000
  15. * DMKVERO - SVC 76 FROM OS, VS/1, VS/2, OR VM/370. 00015000
  16. * DMKVERD - SVC 76 FROM DOS OR DOS/VS. 00016000
  17. * 00017000
  18. * ENTRY CONDITIONS - 00018000
  19. * FOR DMKVERO - 00019000
  20. * GPR0 - 2'S COMPLEMENT OF RECORD LENGTH. 00020000
  21. * GPR1 - ADDRESS OF THE RECORD. 00021000
  22. * FOR DMKVERD - 00022000
  23. * GPR0 - ADDRESS OF THE RECORD. 00023000
  24. * GPR1 - ADDRESS OF CCB(DOS CONTROL BLOCK) 00024000
  25. * COMMON TO BOTH ENTRIES - 00025000
  26. * GPR11 - USERS VMBLOCK ADDRESS. 00026000
  27. * GPR12 - ADDRESS OF ENTRY POINT. 00027000
  28. * GPR13 - ADDRESS OF STANDARD SAVE AREA. 00028000
  29. * 00029000
  30. * EXIT CONDITIONS - 00030000
  31. * 00031000
  32. * NONE 00032000
  33. * 00033000
  34. * CALLS TO OTHER ROUTINES - 00034000
  35. * DMKFREE - TO OBTAIN STORAGE FOR RECORD BUFFER. 00035000
  36. * DMKFRET - TO RETURN STORAGE TO THE SYSTEM. 00036000
  37. * DMKQCNWT - TO SEND MESSAGES TO THE OPERATOR. 00037000
  38. * DMKIOEVR - TO WRITE RECORD TO RECORDING CYLINDER. 00038000
  39. * DMKSCNVU - TO OBTAIN VIRTUAL CANNEL, CONTROL UNIT, AND 00039000
  40. * DEVICE BLOK ADDRESSES. 00040000
  41. * DMKSCNRD - TO OBTAIN REAL DEVICE ADDRESS. 00041000
  42. * DMKCVTBH - TO CONVERT BINARY ADDRESSES TO HEX. 00042000
  43. * 00043000
  44. * EXTERNAL REFERENCES - 00044000
  45. * NONE 00045000
  46. * 00046000
  47. * TABLES / WORKAREAS - 00047000
  48. * NONE 00048000
  49. * 00049000
  50. * REGISTER USAGE - 00050000
  51. * GPR0 - PARAMETER REGISTER 00051000
  52. * GPR1 - PARAMETER REGISTER 00052000
  53. * GPR2 - WORK REGISTER AND PARAMETER REGISTER 00053000
  54. * GPR3 - WORK REGISTER 00054000
  55. * GPR4 - WORK REGISTER 00055000
  56. * GPR5 - WORK REGISTER AND SECONDARY BAL REGISTER 00056000
  57. * GPR6 - WORK REGISTER 00057000
  58. * GPR7 - ADDRESS OF VDEVBLOK 00058000
  59. * GPR8 - ADDRESS OF RDEVBLOK 00059000
  60. * GPR9 - BASE REGISTER FOR ERROR RECORD 00060000
  61. * GPR10 - BAL REGISTER 00061000
  62. * GPR11 - VMBLOK ADDRESS 00062000
  63. * GPR12 - BASE ADDRESS 00063000
  64. * GPR13 - SAVE AREA ADDRESS 00064000
  65. * GPR14 - LINKAGE REGISTER 00065000
  66. * GPR15 - LINKAGE REGISTER 00066000
  67. * 00067000
  68. * NOTES - 00068000
  69. * NONE 00069000
  70. * 00070000
  71. * OPERATION - 00071000
  72. * 00072000
  73. * 1. DMKVERO - ENTRY FOR OS,VS,OR VM TYPE SYSTEM RECORDING. SET 00073000
  74. * A FLAG TO INDICATE AN OS TYPE. CHECK IF THE PASSED RECORD 00074000
  75. * RESIDES WITHIN THE LIMITS OF THE VIRTUAL MACHINE. IF IT 00075000
  76. * DOES, GO TO STEP 3, ELSE RETURN TO DMKPSA TO REFLECT THE 00076000
  77. * SVC BACK TO THE VIRTUAL MACHINE. 00077000
  78. * 2. DMKVERD - ENTRY FROM A DOS TYPE SYSTEM. THE LENGTH OF 00078000
  79. * THE RECORD IS NOT KNOWN IN THIS CASE. IF AT LEAST THE 00079000
  80. * RECORD HEADER RESIDES WITHIN THE LIMITS OF THE VIRTUAL 00080000
  81. * MACHINES STORAGE, A RECORDING WILL BE ATTEMPTED. A RECORD 00081000
  82. * SIZE OF 136 BYTES WILL BE USED IF IT WILL FIT IN USER 00082000
  83. * STORAGE, ELSE A SIZE OF WHATEVER IS LEFT WILL BE USED. 00083000
  84. * 3. CALL DMKFREE TO OBTAIN STORAGE FOR A RECORD BUFFER. MOVE 00084000
  85. * THE RECORD FROM USER STORAGE TO THE BUFFER. 00085000
  86. * 4. IF THE RECORD IS AN OS TYPE, GO TO STEP 5. IF A DOS TYPE, 00086000
  87. * CHECK IF THE RECORD TYPE IS 'OBR'. IF NOT, WE DON'T HAVE 00087000
  88. * A VALID RECORDING. IN THIS CASE - CALL DMKFRET TO RETURN 00088000
  89. * THE BUFFER AND EXIT TO DMKPSA TO REFECT THE SVC TO THE 00089000
  90. * VIRTUAL MACHINE. IF VALID, GO TO STEP 6. 00090000
  91. * 5. USE THE RECORD TYPE TO INDEX INTO A BRANCH TABLE WHICH 00091000
  92. * WILL GIVE CONTROL TO THE APPROPRIATE CONVERSION ROUTINE 00092000
  93. * OR IF INVALID RETURN TO DMKPSA TO REFLECT THE SVC. 00093000
  94. * 6. TYPE30 (OBR) - GO TO STEP 11 TO DO THE COMMON CONVERTS. 00094000
  95. * IF THE DEVICE IS NONDEDICATED DASD, REPLACE THE VOLUME 00095000
  96. * SERIAL, SEEK ADDRESS, AND H. A. WITH THE REAL DATA. ALSO 00096000
  97. * UPDATE SENSE DATA FROM VIRTUAL TO REAL AND THEN GO TO 00097000
  98. * STEP 12. IF THE DEVICE IS DEDICATED, GO RIGHT TO STEP 12. 00098000
  99. * 7. TYPE40 (ABEND) - GO TO STEP 11 TO DO THE COMMON CONVERTS 00099000
  100. * AND THEN GO TO STEP 13. 00100000
  101. * 8. TYPE60 (DDR) - GO TO STEP 11 TO DO THE COMMON CONVERTS. 00101000
  102. * CONVERT THE FROM AND TO CUA'S FROM VIRTUAL TO REAL 00102000
  103. * AND GO TO STEP 13. 00103000
  104. * 9. TYPE70 (MIH) - GO TO STEP 11 FOR COMMON CONVERTS. THEN IF 00104000
  105. * DEVICE IS NONDEDICATED DASD, UPDATE THE VOLUME SERIAL 00105000
  106. * WITH THE REAL VOLUME SERIAL AND GO TO STEP 13. IF DEVICE 00106000
  107. * IS DEDICATED, GO RIGHT TO STEP 13. 00107000
  108. * 10. TYPE90 (MDR) - GO TO STEP 11 TO DO THE COMMON CONVERTS 00108000
  109. * AND THEN GO TO STEP 13. 00109000
  110. * 11. THIS ROUTINE WIIL CONVERT THE FIELDS COMMON TO MORE THAN 00110000
  111. * ONE RECORD TYPE FROM VIRTUAL TO REAL. FAILING CUA'S WILL 00111000
  112. * BE CONVERTED FOR TYPE 30,70, AND 90. THE PROGRAM NAME 00112000
  113. * WILL BE REPLACED WITH THE USERID FOR TYPE 30,40,60,70, 00113000
  114. * AND 90. THE CPUID WILL BE REPLACED WITH THE REAL CPUID 00114000
  115. * FOR ALL RECORDS. 00115000
  116. * 12. SET UP THE DMKVER575I MESSAGE AND CALL DMKQCNWT TO SEND 00116000
  117. * THE MESSAGE TO THE SYSTEMS OPERATOR. 00117000
  118. * 13. RESET THE VMEXWAIT FLAG IN VMRSTAT. THEN CALL DMKIOEVR 00118000
  119. * TO DO THE ACTUAL RECORDING. CALL DMKFRET TO RETURN THE 00119000
  120. * BUFFER TO FREE STORAGE. ISSUE AN SVC 16 TO RETURN THE 00120000
  121. * SAVEAREA TO THE SYSTEM AND GOTO DMKDSPCH. 00121000
  122. *. 00122000
  123. EJECT 00123000
  124. COPY OPTIONS @V1D0226 00124000
  125. COPY LOCAL OPTIONS @V1D0226 00125000
  126. EJECT 00126000
  127. DMKVER CSECT @V1D0226 00127000
  128. SPACE 00128000
  129. DMKVERID DC CL8'DMKVER' MODULE IDENTIFIER @V1D0226 00129000
  130. SPACE 00130000
  131. EXTRN DMKFREE,DMKFRET @V1D0226 00131000
  132. EXTRN DMKQCNWT @V1D0226 00132000
  133. EXTRN DMKIOEVR @V1D0226 00133000
  134. EXTRN DMKSCNVU,DMKSCNRD @V1D0226 00134000
  135. EXTRN DMKCVTBH @V1D0226 00135000
  136. EXTRN DMKSYSTZ @VM08585 00136000
  137. EXTRN DMKVATRN @VM08585 00137000
  138. SPACE 3 00138000
  139. * 00139000
  140. * EQUATES FOR THIS MODULE ONLY 00140000
  141. * 00141000
  142. OS EQU X'80' OS TYPE RECORD @V1D0226 00142000
  143. DOS EQU X'40' DOS TYPE RECORD @V1D0226 00143000
  144. TWOMOVE EQU X'20' RECORD CROSSES PAGE BOUNDARY @V1D0226 00144000
  145. VVADR EQU X'10' PROC. V.M. IN TRANSLATE MODE @VM08585 00145000
  146. * FOLLOWING EQUQTE WILL HAVE TO BE ALTERED FOR ANY NEW RELEASE 00146000
  147. * OF VM370. 00147000
  148. VMSYS EQU X'66' SYSTEM AND RELEASE LEVEL @VA09371 00148110
  149. SPACE 3 00149000
  150. USING PSA,R0 @V1D0226 00150000
  151. USING RDEVBLOK,R8 @V1D0226 00151000
  152. USING VMBLOK,R11 @V1D0226 00152000
  153. USING SAVEAREA,R13 @V1D0226 00153000
  154. EJECT 00154000
  155. DMKVERO RELOC ENTRY FOR OS, VS, OR VM @V1D0226 00155000
  156. MVI SAVEWRK1,OS FLAG AS OS TYPE RECORD @V1D0226 00156000
  157. LR R3,R1 POSSIBLE V-V ADR. @VM08585 00157000
  158. BAL R10,TRNSTEST GO CHECK IT @VM08585 00158000
  159. TM SAVEWRK1,VVADR TRANSLATE MODE V.M. ?? @VM08585 00159000
  160. BO VEROTRN YES --- @VM08585 00160000
  161. LCR R5,R0 BYTE COUNT INTO R5 @VA03323 00161000
  162. CL R1,VMSTOR IS IT A VALID ADDRESS @VM03010 00162000
  163. BNL PSARETRN NO @VA03323 00163000
  164. LA R3,4(R1,R5) ADDRESS + LENGTH + HDR @VA03323 00164000
  165. CL R3,VMSTOR IS IT A VALID RANGE @V304635 00165000
  166. BNL PSARETRN NO @VA03323 00166000
  167. CLR R3,R1 CORE WRAP AROUND? @VA03323 00167000
  168. BNH PSARETRN YES - SORRY @VA03323 00168000
  169. B VERFREE WILL ASSUME FRO NOW THAT IS VALID@V1D0226 00169000
  170. VEROTRN EQU * @VM08585 00170000
  171. L R5,SAVEWRK4 LOAD ORIG. R0 @VM08585 00171000
  172. LCR R5,R5 MAKE POS. @VM08585 00172000
  173. LR R1,R2 REAL ADR TO R1 @VM08585 00173000
  174. B VERFREE @VM08585 00174000
  175. SPACE 4 00175000
  176. DMKVERD RELOC ENTRY FOR DOS, DOS/VS @V1D0226 00176000
  177. MVI SAVEWRK1,DOS FLAG AS DOS TYPE RECORDING @V1D0226 00177000
  178. A R0,F8 ADD 8 TO GET ADR. @VM08564 00178000
  179. LR R3,R0 POSSIBLE V-V ADR. @VM08585 00179000
  180. BAL R10,TRNSTEST GO CHECK IT @VM08585 00180000
  181. TM SAVEWRK1,VVADR TRANSLATE MODE MACHINE ?? @VM08585 00181000
  182. BO DOSTRN YES - - - @VM08585 00182000
  183. LR R1,R0 PUT THE ADDRESS IN GPR1 @V1D0226 00183000
  184. * 00184000
  185. * SINCE THE RECORD SIZE IS NOT KNOWN FOR DOS, WE WILL TRY 00185000
  186. * TO RECORD AS MUCH AS POSSIBLE. IF WE HAVE ENOUGH FOR A 00186000
  187. * HEADER WE WILL RECORD THAT. IF NOT, WILL RETURN TO 00187000
  188. * DMKPSA TO REFLECT THE SVC TO THE VIRTUAL MACHINE. 00188000
  189. * 00189000
  190. L R2,VMSTOR GET VM STORAGE SIZE @V304635 00190000
  191. AH R0,F24+2 BUMP THE ADDRESS PASSED BY 24 @V1D0226 00191000
  192. CR R0,R2 WILL HEADER FIT IN USER STORAGE @V1D0226 00192000
  193. * ??? 00193000
  194. BNL PSARETRN IF NOT, MUST REFLECT THE SVC. @V1D0226 00194000
  195. AH R0,=H'112' ADD MAX SIZE RECORD TO THE @V1D0226 00195000
  196. * ADDRESS 00196000
  197. LTR R0,R0 GO NEGATIVE ??? @VM08500 00197000
  198. BM PSARETRN YES INDEED - SO GET OUT @VM08500 00198000
  199. CR R0,R2 ENOUGH ROOM ???? @V1D0226 00199000
  200. BNL VERSETSM IF NOT - GO SET UP FOR WHAT WE @V1D0226 00200000
  201. * HAVE 00201000
  202. SPACE 00202000
  203. VERSETLG LA R5,136 LOAD MAX RECORD LENGTH @V1D0226 00203000
  204. B VERFREE AND GO TO IT @V1D0226 00204000
  205. DOSTRN EQU * @VM08585 00205000
  206. LR R1,R2 REAL ADDRESS TO R1 @VM08585 00206000
  207. LA R5,136 TRY MAX OBR COUNT @VM08585 00207000
  208. B VERFREE ..... @VM08585 00208000
  209. SPACE 00209000
  210. VERSETSM LR R5,R2 MOVE MAX ADDRESS TO R5 @V1D0226 00210000
  211. SR R5,R1 MAX BYTE COUNT CAN HAVE @V1D0226 00211000
  212. SPACE 00212000
  213. VERFREE EQU * @V1D0226 00213000
  214. * 00214000
  215. * WHEN COME HERE, GPR5 = BYTE COUNT AND GPR1 = RECORD ADDRESS 00215000
  216. * 00216000
  217. LR R0,R5 BYTE COUNT TO GPR0 @V1D0226 00217000
  218. AH R0,F4+2 ADD 4 BYTES FOR SIZE FIELD @V1D0226 00218000
  219. ST R5,SAVEWRK8 SAVE CALLER BYTE COUNT @VA04327 00218500
  220. LA R6,4075 MAX SIZE RECORDING CAN HANDLE @VM08500 00219000
  221. CLR R0,R6 CAN WE DO IT? @VA03679 00220000
  222. BNL PSARETRN NO - SO FORGET IT @VM08500 00221000
  223. A R0,F7 ROUND THE BYTE COUNT UP @V1D0226 00222000
  224. SRL R0,3 DIVIDE BY EIGHT FOR FREE CALL @V1D0226 00223000
  225. ST R0,SAVEWRK9 SAVE THIS FOR LATER FRET @V1D0226 00224000
  226. LR R4,R1 RECORD ADR. TO R4 @VM08585 00225000
  227. CALL DMKFREE GET STORAGE FOR RECORD @V1D0226 00226000
  228. LR R9,R1 POINT GPR9 TO THIS AREA @V1D0226 00227000
  229. LA R9,4(,R9) BUMP R9 PAST RECORD SIZE FIELD @V1D0226 00228000
  230. L R2,F4095 LOAD GPR2 WITH FFF @V1D0226 00229000
  231. OR R2,R4 GET MAX ADDRESS FOR THIS PAGE @V1D0226 00230000
  232. LR R3,R5 BYTE COUNT TO GPR3 @V1D0226 00231000
  233. SL R3,F1 MINUS ONE TO CALC HIGH ADDRESS @V1D0226 00232000
  234. AR R3,R4 HIGHEST ADDRESS NEEDED @VM08585 00233000
  235. * NEEDED 00234000
  236. CR R3,R2 IS IT ALL IN ONE PAGE @V1D0226 00235000
  237. BNH ONEMOVE BRANCH IF IT DOES @V1D0226 00236000
  238. OI SAVEWRK1,TWOMOVE FLAG FOR PAGE BOUNDARY XOVER @VA05851 00237000
  239. LA R2,1(,R2) START ADDRESS OF SECOND PAGE @VA05851 00237750
  240. TM SAVEWRK1,VVADR PROCESS TRANS. MODE V.M. ?? @VA05851 00238500
  241. BO TRNS2MOV MUST HANDLE DIFFERENTLY @VA05851 00239250
  242. ST R2,SAVEWRK3 SAVE FOR LATER @V1D0226 00241000
  243. SR R3,R2 GET COUNT FOR SECOND PAGE @V1D0226 00242000
  244. AL R3,F1 ADD ONE BACK IN @V1D0226 00243000
  245. ST R3,SAVEWRK2 AND SAVE IT FOR LATER @V1D0226 00244000
  246. SR R5,R3 BYTE COUNT FOR FIRST MOVE @V1D0226 00245000
  247. SPACE 00246000
  248. ONEMOVE EQU * @V1D0226 00247000
  249. LR R6,R9 LOAD GPR6 WITH 'TO' ADDRESS @V1D0226 00248000
  250. LR R7,R5 BYTE COUNT FOR THE MOVE @V1D0226 00249000
  251. TM SAVEWRK1,VVADR PROC. TRANSLATE V.M. ?? @VM08585 00250000
  252. BO RECMOVE YEP -- @VM08585 00251000
  253. PAGBRING LR R1,R4 VADDR TO R1 @VA05851 00252000
  254. TRANS 2,1,OPT=(BRING,DEFER) LOAD THE PAGE @VA05851 00252750
  255. LR R4,R2 LOAD THE REAL ADDRESS IN GPR4 @V1D0226 00254000
  256. RECMOVE EQU * @VM08585 00255000
  257. MVCL R6,R4 DO THE MOVE @V1D0226 00256000
  258. TM SAVEWRK1,TWOMOVE DO WE NEED A SECOND MOVE @V1D0226 00257000
  259. BZ BUFFUL NO - GO PROCESS RECORD @V1D0226 00258000
  260. NI SAVEWRK1,X'FF'-TWOMOVE RESET FLAG @V1D0226 00259000
  261. L R4,SAVEWRK3 LOAD NEXT ADDRESS @VA05851 00260000
  262. L R5,SAVEWRK2 AND THE BYTE COUNT FOR THE MVCL @V1D0226 00262000
  263. LR R7,R5 TO GPR7 ALSO @V1D0226 00263000
  264. TM SAVEWRK1,VVADR TRANS MODE V.M. ?? @VM08585 00264000
  265. BO RECMOVE DO THE MOVE @VM08585 00265000
  266. B PAGBRING LOOP BACK FOR NEXT PAGE @V1D0226 00266000
  267. TRNS2MOV EQU * @VM08585 00267000
  268. LR R7,R2 UPPER PAGE ADDR. TO R7 @VM08585 00268000
  269. SR R7,R4 R7 NOW HAS FIRST BYTE COUNT @VM08585 00269000
  270. SR R5,R7 GET SECOND MOVE COUNT @VM08585 00270000
  271. ST R5,SAVEWRK2 AND SAVE IT @VM08585 00271000
  272. LR R5,R7 NOW HAVE COUNT FOR 1ST MOVE @VM08585 00272000
  273. TM SAVEWRK1,DOS DOS V.M. @VM08585 00273000
  274. BO LOADDOS YES --- @VM08585 00274000
  275. L R3,SAVEWRK5 LOAD ORIG OS ADR. @VM08585 00275000
  276. B NEXTPAG .... @VM08585 00276000
  277. LOADDOS EQU * @VM08585 00277000
  278. L R3,SAVEWRK4 LOAD ORIG DOS ADR @VM08585 00278000
  279. NEXTPAG EQU * @VM08585 00279000
  280. O R3,F4095 GET TO END THIS PAGE @VM08585 00280000
  281. A R3,F1 PLUS ONE TO GET NEXT PAGE @VM08585 00281000
  282. CALL DMKVATRN GET NEXT PAGE @VM08585 00282000
  283. LTR R0,R0 GOOD RETURN ??? @VM08585 00283000
  284. BNZ VERERREX NO - CAN'T RECORD @VM08585 00284000
  285. ST R2,SAVEWRK3 SAVE REAL ADDRESS @VM08585 00285000
  286. B ONEMOVE GO DO THE MOVES @VM08585 00287000
  287. SPACE 3 00288000
  288. BUFFUL EQU * @V1D0226 00289000
  289. * 00290000
  290. * COMPLETE RECORD IN FREE STORAGE WITH BYTE COUNT SAVED IN 00291000
  291. * SAVEWRK8, ADDRESS OF RECORD IN GPR9, AND FREE/FRET SIZE 00292000
  292. * IN SAVEWRK9. 00293000
  293. * 00294000
  294. * NOW CHECK IF RECORD IS VALID. 00295000
  295. SPACE 00296000
  296. USING OBRRECN,R9 @V1D0226 00297000
  297. SPACE 00298000
  298. MVI OBRKEYN+1,VMSYS SET VM'S SYSTEM AND RELEASE @VM08585 00299000
  299. SLR R2,R2 ZERO R2 00300000
  300. * NOW CHECK FOR VALID RECORD TYPE. 00301000
  301. * 00302000
  302. SPACE 00303000
  303. TM SAVEWRK1,OS OS TYPE RECORD ??? @V1D0226 00304000
  304. BO OSRECD YES - GO FIND THE TYPE @V1D0226 00305000
  305. CLI OBRKEYN,X'30' DOS CAN HAVE ONLY OBRS' @V1D0226 00306000
  306. BNE VERERREX SO IF NOT OBR, HAVE ERROR @V1D0226 00307000
  307. B VER30 IF OBR, GO TO IT @V1D0226 00308000
  308. SPACE 00309000
  309. OSRECD EQU * @V1D0226 00310000
  310. IC R2,OBRKEYN LOAD THE RECORD TYPE @V1D0226 00311000
  311. SRL R2,4 CLEAN OUT THE LOW BITS @V1D0226 00312000
  312. SLL R2,2 SHIFT TO GET INDEX VALUE @V1D0226 00313000
  313. B RECVECT(R2) GO INTO BRANCH VECTORS @V1D0226 00314000
  314. RECVECT EQU * @V1D0226 00315000
  315. B VERERREX INVALID @V1D0226 00316000
  316. B VERERREX DITTO @V1D0226 00317000
  317. B VERERREX DITTO AGAIN @V1D0226 00318000
  318. B VER30 OBR RECORDING @V1D0226 00319000
  319. B VER40 ABEND RECORDING @V1D0226 00320000
  320. B VERERREX INVALID @V1D0226 00321000
  321. B VER60 DDR RECORDING @V1D0226 00322000
  322. B VER70 MIH RECORDING @V1D0226 00323000
  323. B VERERREX INVALID @V1D0226 00324000
  324. B VER90 MDR RECORDING @V1D0226 00325000
  325. B VERERREX INVALID @V1D0226 00326000
  326. B VERERREX THIS TOO IS INVALID @V1D0226 00327000
  327. B VERERREX AND THIS ALSO. @V1D0226 00328000
  328. B VERERREX AND THIS @V1D0226 00329000
  329. B VERERREX AND ONE FINAL INVALID BRANCH. @V1D0226 00330000
  330. SPACE 00331000
  331. VERERREX EQU * @V1D0226 00332000
  332. L R0,SAVEWRK9 COUNT FOR THE FRET @V1D0226 00333000
  333. SL R9,F4 BACK UP TO START OF BUFFER @V1D0226 00334000
  334. LR R1,R9 AND THE BUFFER ADDRESS @V1D0226 00335000
  335. CALL DMKFRET GET RID OF THE BUFFER @V1D0226 00336000
  336. SPACE 00337000
  337. PSARETRN EQU * @V1D0226 00338000
  338. NI VMRSTAT,X'FF'-VMEXWAIT RESET WAIT FLAG @V1D0226 00339000
  339. EXIT RETURN TO DMKPSA @V1D0226 00340000
  340. EJECT 00341000
  341. VER30 EQU * @V1D0226 00342000
  342. SPACE 00343000
  343. USING OBRRECN,R9 @V1D0226 00344000
  344. SPACE 00345000
  345. CLI OBRKEYN,X'30' MAKE SURE IS TYPE 30 @VM08500 00346000
  346. BNE VERERREX IF NOT GET OUT @VM08500 00347000
  347. BAL R10,CKOBRLEN GO CHECK CALLER LENGTH @VA04327 00347500
  348. BAL R10,COMCVT30 GO CONVERT COMMON FIELDS @V1D0226 00348000
  349. L R0,SAVEWRK5 LOAD DEVICE ADDRESS @VM08506 00349000
  350. TM OBRSWSN+1,X'20' IS THIS A SHORT OBR RECORD @VA03358 00350000
  351. BZ *+12 NO, BYPASS SHORT OBR SUPPORT @VA03358 00351000
  352. STCM R0,7,OBRCUA SAVE CUA IN SHORT OBR RECORD @VA03358 00352000
  353. B VERRSTEX NO MORE CONVERSION FOR SHORT OBR @VA03358 00353000
  354. STCM R0,7,OBRCUAPR STORE INTO PHYS ADDRESS @VM08506 00354000
  355. CLI RDEVTYPC,CLASDASD DASD TYPE DEVICE @VM08506 00355000
  356. BNE VERDEDCK NO - DEV ADDR STORED IS OK @VM08506 00356000
  357. TM RDEVTYPE,TYP3330 IS DASD A 3330 DEVICE ? @V304498 00357000
  358. BZ CHK2314 IF NOT, GO CHK FOR 2314 @V2A2029 00358000
  359. IC R1,OBR33SNS+4 LOAD PHYSICAL ADDR FROM SENSE @VM08506 00359000
  360. TM OBR33SNS+2,X'08' TEST FOR EMULATED 3330 DEVICE @V304498 00360000
  361. BZ VERPHA NO, BYPASS EMULATION CODE CONV @VA04586 00361500
  362. BAL R7,EMULCODE YES, CODE 1 OF 8 AS 3 OF 6 @V304498 00362000
  363. VERPHA N R1,F7 ZAP ALL BUT LOW 3 BITS @VA04586 00362100
  364. TM OBR33SNS+4,X'40' IS THIS 2ND OR 4TH CONTROL @VA04586 00362200
  365. * UNIT? 00362300
  366. BNO VERSETPR IF NOT, BRANCH @VA04586 00362400
  367. A R1,F8 BUMP ADDRESS IF 2ND OR 4TH @VA04586 00362500
  368. * CONTROL UNIT 00362600
  369. B VERSETPR GO SET PHYSICAL ADDR @VM08506 00363000
  370. CHK2314 EQU * @VM08506 00364000
  371. CLI RDEVTYPE,TYP2314 IS IT 2314 ??? @VM08506 00365000
  372. BNE VERDEDCK NO - ADDRESS OK @VM08506 00366000
  373. IC R1,OBRSENSN+4 LOAD 2314 PHYSICAL ADDR @VM08506 00367000
  374. N R1,F15 ZAP ALL EXCEPT LOW 4 BITS @VA04586 00367500
  375. VERSETPR EQU * @VM08506 00368000
  376. N R0,=X'00FFFFF0' SAVE ALL BUT LOW 4 @VM08506 00370000
  377. OR R1,R0 PUT THE TWO TOGETTHER @VM08506 00371000
  378. STCM R1,7,OBRCUAPR STORE PROPER DEV ADDR @VM08506 00372000
  379. VERDEDCK EQU * @VM08506 00373000
  380. TM RDEVSTAT,RDEVDED DEDICATED DEVICE @V1D0226 00374000
  381. BO VERMSGOP YES - NO MORE CONVERSION TO DO @V1D0226 00375000
  382. SPACE 00376000
  383. VERNOTDD EQU * @V1D0226 00377000
  384. * 00378000
  385. * ON A NON-DEDICATED / NON-DASD DEVICE, GO AHEAD 00379000
  386. * WITH RECORDING. FOR DASD - CONVERT THE SEEK AND HOME ADDRESS 00380000
  387. * TO THE REAL ADDRESS AND MOVE THE VOLUME SERIAL 00381000
  388. * FROM RDEVBLOK TO THE RECORD. FOR 3330/3340/3350/2305 ADJUST 00382000
  389. * CYLINDER NUMBER IN THE SENSE BYTE TO THE REAL CYLINDER. 00383000
  390. * FOR A 2311 BEING SIMULATED ON A 2314, ALTER THE SENSE IN 00384000
  391. * SENSE BYTE 3 TO REFLECT A 2314. 00385000
  392. * 00386000
  393. SPACE 00387000
  394. CLI RDEVTYPC,CLASDASD DASD DEVICE @V1D0226 00388000
  395. BNE VERMSGOP IF NOT - GO RECORD @V1D0226 00389000
  396. MVC OBRVOLN(6),RDEVSER MOVE THE REAL VOL SER @V1D0226 00390000
  397. L R7,SAVEWRK4 LOAD THE VDEVBLOK ADDRESS @V1D0226 00391000
  398. SPACE 00392000
  399. USING VDEVBLOK,R7 @V1D0226 00393000
  400. SPACE 00394000
  401. SLR R2,R2 ZIP A WORK REG @V1D0226 00395000
  402. ICM R2,3,OBRLSKN+3 CLYINDER NUMBER OF LAST SEEK @V1D0226 00396000
  403. CLI RDEVTYPE,TYP3340 IS IT A 3340 OR 3344? @V56BDA8 00396100
  404. BNE NOT334X NO, JUST CONTINUE @V56BDA8 00396200
  405. CH R2,=H'696' ALTERNATE OR CE CYLINDER? @V56BDA8 00396300
  406. BNL VERMSGOP YES, LEAVE UNCHANGED @V56BDA8 00396400
  407. TM RDEVFTR,FTR35MB IS IT A SMALL DISK? @V56BDA8 00396500
  408. BZ NOT334X NO, MUST RELOCATE @V56BDA8 00396600
  409. CH R2,=H'348' 35MB ALTERNATE OR CE CYLINDER? @V56BDA8 00396700
  410. BNL VERMSGOP YES, LEAVE UNCHANGED @V56BDA8 00396800
  411. NOT334X EQU * @V56BDA8 00396900
  412. AH R2,VDEVRELN ADD THE RELOCATION FACTOR @V1D0226 00397000
  413. STCM R2,3,OBRLSKN+3 REAL CLYNDER TO RECORD @V1D0226 00398000
  414. LH R2,OBRHAN+2 NOW UPDATE HOME ADDRESS @VA02834 00399000
  415. AH R2,VDEVRELN ADD RELOCATION @V1D0226 00400000
  416. STH R2,OBRHAN+2 AND STORE INTO RECORD @VA02834 00401000
  417. CLI RDEVTYPE,TYP2314 IS IT A 2314 ??? @V1D0226 00402000
  418. BE VER2314 GO CHECK FOR 2311 IF IT IS @V1D0226 00403000
  419. CLI RDEVTYPE,TYP3330 3330 ???? @V1D0226 00404000
  420. BE VERCYL YEP ---- @V1D0226 00405000
  421. CLI RDEVTYPE,TYP2305 COULD BE 2305 DRUM @V1D0226 00406000
  422. BE VERCYL IF IT IS - GO ADJUST SENSE @V1D0226 00407000
  423. TM RDEVTYPE,TYP3340+TYP3350 3340 OR 3350 DEVICE ? @V304498 00408000
  424. BZ VERMSGOP NO - GO RECORD RECORD @V304498 00409000
  425. IC R2,OBR33SNS+6 GET HIGH CYL BYTE @V2A2029 00410000
  426. LR R1,R2 SAVE FOR LATER @V2A2029 00411000
  427. SLL R2,3 SHIFT CYLINDER TO NEXT BYTE @V2A2029 00412000
  428. N R2,=A(256+512) ISOLATE CYL 512 AND 256 @V2A2029 00413000
  429. IC R2,OBR33SNS+5 AND LOAD CYL BYTE ALONG WITH IT @V2A2029 00414000
  430. AH R2,VDEVRELN ADD THE RELOCATION FACTOR @V2A2029 00415000
  431. CLI RDEVTYPE,TYP3350 3350 ???? @V304498 00416000
  432. BE VER3350 CHECK CYLINDER LIMIT @V304498 00417000
  433. SETCYL STC R2,OBR33SNS+5 STORE LOW CYL VALUE @V2A2029 00424000
  434. N R2,=A(256+512) ISOLATE CYL 512 AND 256 @V2A2029 00425000
  435. SRL R2,3 SHIFT TO HARDWARE VALUE @V2A2029 00426000
  436. N R1,=A(16+8+4+2+1) ISOLATE LOGICAL TRACK @V304498 00427000
  437. OR R2,R1 COMBINE CYL AND HEAD BITS @V2A2029 00428000
  438. STC R2,OBR33SNS+6 STORE HIGH CYL AND HEAD VALUE @V2A2029 00429000
  439. TM OBR33SNS+7,X'40' CHECK FOR FORMAT 4 OR 5 @VA11762 00429010
  440. BZ VERMSGOP NO CONTINUE NO UPDATE CYL @VA11762 00429020
  441. TM OBR33SNS+7,X'20' CHECK FOR FORMAT 6 ? @VA11762 00429030
  442. BO VERMSGOP YES DONT UPDATE 8 AND 9 @VA11762 00429040
  443. VERFMT4 DS 0H @VA11762 00429050
  444. SR R2,R2 ZERO OUT WORK REG @VA09156 00429100
  445. ICM R2,B'0011',OBRLSKN+3 GET LAST SEEK CYLINDER @VA09156 00429200
  446. AH R2,VDEVRELN ADD RELOCATION FACTOR @VA09156 00429300
  447. STH R2,OBR33SNS+8 STORE INTO SENSE @VA09156 00429400
  448. B VERMSGOP IF NOT - OK TO RECORD @V1D0226 00430000
  449. SPACE 1 00431000
  450. VER3350 CH R2,=H'559' EXCEEDED CYL LIMIT - 560 CYL'S @V304498 00432000
  451. BH VERMSGOP YES - LEAVE AS IS @V304498 00433000
  452. B SETCYL YES - STORE CYLINDER NUMBER @V304498 00434000
  453. SPACE 00435000
  454. VER2314 EQU * @V1D0226 00436000
  455. TM VDEVTYPE,FTR2311T+FTR2311B SIMULATING 2311 ???? @V1D0226 00437000
  456. BZ VERMSGOP NO - GO RECORD @V1D0226 00438000
  457. CLI OBRSENSN+3,X'C8' 2311 SENSE SAY READY AND @V1D0226 00439000
  458. * ONLINE ??? 00440000
  459. BNE VERCKOL NO - GO CHECK FURTHER @V1D0226 00441000
  460. NI OBRSENSN+3,X'40' LEAVE ONLINE SENSE BIT FOR 2314@V1D0226 00442000
  461. B VERMSGOP NOW CAN SAFELY RECORD @V1D0226 00443000
  462. SPACE 00444000
  463. VERCKOL EQU * @V1D0226 00445000
  464. TM OBRSENSN+3,X'48' IF 2311 ONLINE BITS BOTH 1'S, @V1D0226 00446000
  465. BO VERMSGOP LEAVE AS IS. @V1D0226 00447000
  466. TM OBRSENSN+3,X'40' IF BIT 1 ON ALONE, @V1D0226 00448000
  467. BO SETPCHG GO SET PACK CHANGE FOR 2314 @V1D0226 00449000
  468. XI OBRSENSN+3,X'08' INVERT PACK CHANGE BIT @V1D0226 00450000
  469. B VERMSGOP . . . @V1D0226 00451000
  470. SETPCHG OI OBRSENSN+3,X'08' FORCE PACK CHANGE ON @V1D0226 00452000
  471. B VERMSGOP . . . @V1D0226 00453000
  472. SPACE 00454000
  473. VERCYL EQU * @V1D0226 00455000
  474. * 00456000
  475. * COME HERE TO ADJUST CYLINDER ADDRESS IN THE SENSE 00457000
  476. * 00458000
  477. SPACE 00459000
  478. IC R2,OBR33SNS+6 LOAD BYTE CONTAINING CYL. HIGH @V1D0226 00460000
  479. * BIT 00461000
  480. SLL R2,2 GET IT UP TO NEXT BYTE @V1D0226 00462000
  481. N R2,F256 SAVE ONLY THAT BIT @V1D0226 00463000
  482. IC R2,OBR33SNS+5 AND LOAD CYL BYTE ALONG WITH IT @V1D0226 00464000
  483. AH R2,VDEVRELN ADD THE RELOCATION FACTOR @V1D0226 00465000
  484. CH R2,=H'400' DID WE GO OVER THE LIMIT ???? @V1D0226 00466000
  485. BH VERMSGOP IF WE DID, MEANS DMKUNTR DIDN'T @V1D0226 00467000
  486. * CHG 00468000
  487. STC R2,OBR33SNS+5 STORE NEW CYL NUMBER @V1D0226 00469000
  488. C R2,F256 OVER 256 ??? @V1D0226 00470000
  489. BL VERMSG1 @VA09156 00471100
  490. OI OBR33SNS+6,X'40' SET CYL HIGH BIT @V1D0226 00472000
  491. VERMSG1 EQU * @VA09156 00472100
  492. CLI RDEVTYPE,TYP2305 2305 ?? @VA11762 00472110
  493. BE TYPOK YES GO UPDATE SENSE 8 AND 9 @VA11762 00472120
  494. TM OBR33SNS+7,X'40' CHECK FOR FORMAT 4 OR 5 @VA11762 00472130
  495. BZ VERMSGOP NO IT IS UPDATE @VA11762 00472140
  496. TM OBR33SNS+7,X'20' CHECK FOR FORMAT 6 ? @VA11762 00472150
  497. BO VERMSGOP YES DONT UPDATE SENSE BYTES @VA11762 00472160
  498. TYPOK DS 0H @VA11762 00472170
  499. SR R2,R2 ZERO OUT WORK REG @VA09156 00472200
  500. ICM R2,B'0011',OBRLSKN+3 GET LAST SEEK CYLINDER @VA09156 00472300
  501. AH R2,VDEVRELN ADD RELOCATION FACTOR @VA09156 00472400
  502. STH R2,OBR33SNS+8 STORE INTO SENSE @VA09156 00472500
  503. SPACE 00473000
  504. DROP R7 @V1D0226 00474000
  505. SPACE 00475000
  506. SPACE 00476000
  507. VERMSGOP EQU * @V1D0226 00477000
  508. TM OBRSWSN+1,OBRDEMNT VOLUME DISMOUNT? HRC024DK 00477100
  509. BNZ VERRSTEX YES - NO NEED TO BOTHER OPERATOR HRC024DK 00477200
  510. L R1,SAVEWRK5 LOAD REAL DEVICE ADDRESS @V1D0226 00478000
  511. CALL DMKCVTBH CONVERT TO PRINTABLE FORM @V1D0226 00479000
  512. STCM R1,7,MSG575AD STUFF INTO MESSAGE @V1D0226 00480000
  513. MVC MSG575ID(8),VMUSER STUFF THIS IN MESSAGE @V1D0226 00481000
  514. LA R0,MSG575LN MESSAGE LENGTH @V1D0226 00482000
  515. LA R1,MSG575 AND THE ADDRESS @V1D0226 00483000
  516. LA R2,NORET+ALARM+OPERATOR @V1D0226 00484000
  517. CALL DMKQCNWT @V1D0226 00485000
  518. SPACE 00486000
  519. VERRSTEX EQU * @V1D0226 00487000
  520. TM SAVEWRK1,DOS DOS TYPE RECORDING ?? @VM08506 00488000
  521. BO DOSRET GIVE DOS RETURN CODE @VA03448 00489000
  522. XC VMGPRS+15*4(4),VMGPRS+15*4 R15=0 FOR OS/VS @VA03448 00490000
  523. B VEROSEX CONTINUE @VA03448 00491000
  524. DOSRET XC VMGPRS+4(4),VMGPRS+4 R1=0 FOR DOS/VS @VA03448 00492000
  525. VEROSEX EQU * @VM08506 00493000
  526. NI VMRSTAT,X'FF'-VMEXWAIT RESET THE WAIT BIT @V1D0226 00494000
  527. S R9,F4 BACK UP TO START OF BUFFER @V1D0226 00495000
  528. LR R1,R9 PASS THE RECORD ADDRESS TO IOE @V1D0226 00496000
  529. L R0,SAVEWRK9 GET SIZE OF RECORD IN DOUBLEWORDS@VA03358 00497000
  530. LR R3,R0 GET NUMBER OF DOUBLEWORDS @VA03358 00498000
  531. SLL R3,3 GET ACTUAL LENGTH OF RECORD @VA03358 00499000
  532. S R3,F4 SUBTRACT LENGTH FIELD FROM RECORD@VA03358 00500000
  533. ST R3,0(,R1) SAVE RECORD SIZE IN RECORD @VA03358 00501000
  534. CALL DMKIOEVR GET IT RECORDED @V1D0226 00502000
  535. SPACE 00503000
  536. SPACE 00504000
  537. L R15,ADSPCH ADDRESS OF DISPATCH @V1D0226 00505000
  538. ST R15,SAVERETN RETURN TO DISPATCH INSTEAD OF PSA@V1D0226 00506000
  539. ST R15,SAVER12 THIS TO SET DISPATCHERS BASE @V1D0226 00507000
  540. EXIT @V1D0226 00508000
  541. EJECT 00509000
  542. VER40 EQU * @V1D0226 00510000
  543. CLI OBRKEYN,X'43' IS IT 40,41,OR 42 ?? @VM08500 00511000
  544. BL VER40OK YEP - OK TO RECCRD @VM08500 00512000
  545. CLI OBRKEYN,X'4F' 4F IS LEGAL @VM08500 00513000
  546. BE VER40OK .... @VM08500 00514000
  547. CLI OBRKEYN,X'44' SO IS 44 @VM08500 00515000
  548. BE VER40OK .... @VM08500 00516000
  549. CLI OBRKEYN,X'48' AND 48 @VM08500 00517000
  550. BE VER40OK ..... @VM08500 00518000
  551. B VERERREX ALL ELSE IS BAD .. @VM08500 00519000
  552. VER40OK EQU * 00520000
  553. SLR R1,R1 ZERO R1 @VA04327 00520200
  554. LA R1,OBRHSIZE+8 GET STANDARD HEADER SIZE @VA07880 00520500
  555. CL R1,SAVEWRK8 HEADER SIZE > CALLER SIZE ? @VA04327 00520600
  556. BH VERERREX YES, CAN'T RECORD @VA04327 00520800
  557. BAL R10,COMCVT60 DO COMMON CONVERTS @VA05286 00521000
  558. B VERRSTEX AND GO RECORD @V1D0226 00522000
  559. EJECT 00523000
  560. VER60 EQU * @V1D0226 00524000
  561. SPACE 00525000
  562. USING DDRREC,R9 @V1D0226 00526000
  563. SPACE 00527000
  564. CLI DDRKEYN,X'60' 60 IS ONLY CODE ALLOWED @VM08500 00528000
  565. BNE VERERREX ELSE CAN'T RECORD @VM08500 00529000
  566. SLR R1,R1 ZERO R1 @VA04327 00529200
  567. LA R1,DDRSIZE GET LENGTH OF DDR RECORD @VA04327 00529400
  568. CL R1,SAVEWRK8 RECORD SIZE > CALLER SIZE ? @VA04327 00529600
  569. BH VERERREX YES, CAN'T RECORD @VA04327 00529800
  570. BAL R10,COMCVT60 GO DO COMMON CONVERTS @V1D0226 00530000
  571. ICM R1,7,DDRCUA1 LOAD 'FROM' DEVICE ADDRESS @V1D0226 00531000
  572. LA R1,0(,R1) ZERO THE HIGH BYTE @V1D0226 00532000
  573. BAL R5,CNVTVR CONVERT VIRTUAL TO REAL @V1D0226 00533000
  574. STCM R1,7,DDRCUA1 STORE REAL INTO RECORD @V1D0226 00534000
  575. ICM R1,7,DDRCUA2 LOAD 'TO' ADDRESS @V1D0226 00535000
  576. LA R1,0(,R1) ZIP THE HIGH BYTE @V1D0226 00536000
  577. BAL R5,CNVTVR CONVERT THIS TO REAL @V1D0226 00537000
  578. STCM R1,7,DDRCUA2 AND STORE INTO RECORD @V1D0226 00538000
  579. B VERRSTEX GO RECORD @V1D0226 00539000
  580. EJECT 00540000
  581. VER70 EQU * @V1D0226 00541000
  582. SPACE 00542000
  583. USING MIHREC,R9 @V1D0226 00543000
  584. SPACE 00544000
  585. CLI MIHKEYN,X'70' ONLY 70 TYPE ALLOWED @VM08500 00545000
  586. BNE VERERREX ELSE CAN'T RECORD @VM08500 00546000
  587. SLR R1,R1 ZERO R1 @VA04327 00546200
  588. LA R1,MIHSIZE GET MIH RECORD LENGTH @VA04327 00546400
  589. CL R1,SAVEWRK8 RECORD LENGTH > CALLER LENGTH@VA04327 00546600
  590. BH VERERREX YES, CAN'T RECORD @VA04327 00546800
  591. BAL R10,COMCVT70 DO THE COMMON CONVERTS @V1D0226 00547000
  592. TM RDEVSTAT,RDEVDED DEDICATED DEVICE ???? @V1D0226 00548000
  593. BO VERRSTEX YES - OK TO RECORD @V1D0226 00549000
  594. CLI RDEVTYPC,CLASDASD DASD DEVICE ???? @V1D0226 00550000
  595. BNE VERRSTEX NO - DON'T HAVE VOL SER TO @V1D0226 00551000
  596. * CONVERT 00552000
  597. MVC MIHVOL(6),RDEVSER MOVE REAL SERIAL IN @V1D0226 00553000
  598. B VERRSTEX AND GO RECORD @V1D0226 00554000
  599. EJECT 00555000
  600. VER90 EQU * @V1D0226 00556000
  601. USING MDRREC,R9 @VM08500 00557000
  602. SPACE 00558000
  603. CLI MDRKEYN,X'91' VALID MDR TYPE ?? @VM08500 00559000
  604. BNE VERERREX NO - CAN'T RECORD @VM08500 00560000
  605. SLR R1,R1 ZERO R1 @VA04327 00560200
  606. LA R1,MRDSIZE GET MRD RECORD SIZE @VA04327 00560400
  607. CL R1,SAVEWRK8 RECORD SIZE > CALLER SIZE ? @VA04327 00560600
  608. BH VERERREX YES, CAN'T RECORD @VA04327 00560800
  609. BAL R10,COMCVT90 CONVERT THE COMMON STUFF @V1D0226 00561000
  610. CLI RDEVTYPC,CLASDASD DASD CLASS DEVICE @VA06101 00561050
  611. BNE NOTDASD NO, HANDLE NON-DASD DEVICE @VA06101 00561070
  612. MVC MDRVOL(6),RDEVSER MOVE REAL VOLSER INTO RECORD @VA06101 00561090
  613. CLI RDEVTYPE,TYP3330 IS DEVICE 3330-1 OR 3330-11 ? @VA06101 00561110
  614. BNE DEV2314 NO, CHECK FOR 2314 TYPE @VA06101 00561130
  615. DEV3330 SR R10,R10 CLEAR R10 FOR WORK REG @VA06101 00561150
  616. IC R10,MDRSENS+4 GET DRIVE ID OF 3330 @VA06101 00561170
  617. TM MDRSENS+2,X'08' EMULATED 3330 ? @VA06101 00561190
  618. BZ NOTEMUL NO,BYPASS EMULATED CONV CODE @VA06101 00561210
  619. BAL R7,EMULCODE YES,CODE 1 OF 8 AS 3 OF 6 @VA06101 00561230
  620. NOTEMUL N R10,F7 ISOLATE 3-BIT ID FROM SENSE @VA06101 00561250
  621. TM MDRSENS+4,X'40' IS THIS 2ND OR 4TH CONTROL @VA06101 00561270
  622. * UNIT ? 00561290
  623. BNO GETADDR NO, BYPASS ADDRESS INCREMENT @VA06101 00561310
  624. A R10,F8 YES, BUMP ADDRESS BY 8 @VA06101 00561330
  625. B GETADDR GO SET PHYSICAL ADDRESS @VA06101 00561350
  626. DEV2314 CLI RDEVTYPE,TYP2314 IS DEVICE 2314 ? @VA06101 00561370
  627. BNE NOTDASD NO, HANDLE OTHER DEVICE TYPE @VA06101 00561390
  628. SR R10,R10 CLEAR R10 FOR WORK REG @VA06101 00561410
  629. IC R10,MDRSENS+4 YES, GET DRIVE ID FROM SENSE @VA06101 00561430
  630. N R10,F15 ISOLATE 4-BIT ID FROM SENSE @VA06101 00561450
  631. GETADDR EQU * @VA06101 00561470
  632. N R1,=X'0000FFF0' CLEAR MODULE/DRIVE ID @VA06101 00561490
  633. OR R1,R10 GET PHYSICAL DEVICE ADDRESS @VA06101 00561510
  634. STCM R1,3,MDRCUA1 SAVE PHYSICAL ADDRESS IN MDR @VA06101 00561530
  635. NOTDASD EQU * @VA06101 00561550
  636. B VERRSTEX NO MORE TO DO @V1D0226 00562000
  637. EJECT 00563000
  638. COMCVT30 EQU * @V1D0226 00564000
  639. SPACE 00565000
  640. USING OBRRECN,R9 @V1D0226 00566000
  641. SLR R1,R1 ZERO WORK REG @V1D0226 00567000
  642. ICM R1,7,OBRCUAIN LOAD CUA OF FAILING DEVICE @V1D0226 00568000
  643. TM OBRSWSN+1,X'20' IS THIS A SHORT OBR RECORD @VA03358 00569000
  644. BZ *+8 NO, BYPASS @VA03358 00570000
  645. ICM R1,7,OBRCUA GET CUA FROM RECORD @VA03358 00571000
  646. BAL R5,CNVTVR CONVERT TO REAL ADDRESS @V1D0226 00572000
  647. TM OBRSWSN+1,X'20' IS THIS A SHORT OBR RECORD @VA03358 00573000
  648. BO COMCVT40 YES, BYPASS SAVING CUA @VA03358 00574000
  649. STCM R1,7,OBRCUAIN AND STORE INTO RECORD @V1D0226 00575000
  650. B COMCVT60 DO REST OF COMMON CONVERTS @VM08506 00576000
  651. SPACE 00577000
  652. COMCVT90 EQU * @V1D0226 00578000
  653. COMCVT70 EQU COMCVT90 @V1D0226 00579000
  654. TM OBRKEYN,X'90' MDR ??? @V1D0226 00580000
  655. BO MDRPRIM YES - GO CONVERT PRIM DEV ADR @V1D0226 00581000
  656. SPACE 00582000
  657. MIHPRIM EQU * @V1D0226 00583000
  658. SPACE 00584000
  659. USING MIHREC,R9 @V1D0226 00585000
  660. SPACE 00586000
  661. ICM R1,7,MIHCUA1 LOAD PRIMARY ADDRESS @V1D0226 00587000
  662. LA R1,0(,R1) ZIP THE HIGH BYTE @V1D0226 00588000
  663. BAL R5,CNVTVR CONVERT TO REAL @V1D0226 00589000
  664. STCM R1,7,MIHCUA1 AND STORE BACK @V1D0226 00590000
  665. B COMCVT60 . .. . @V1D0226 00591000
  666. SPACE 00592000
  667. MDRPRIM EQU * @V1D0226 00593000
  668. SPACE 00594000
  669. USING MDRREC,R9 @V1D0226 00595000
  670. SPACE 00596000
  671. LH R1,MDRCUA1 LOAD DEVICE ADDRESS @V1D0226 00597000
  672. BAL R5,CNVTVR AND CONVERT TO REAL @V1D0226 00598000
  673. STH R1,MDRCUA1 AND STORE BACK TO THE RECORD @V1D0226 00599000
  674. B COMCVT40 BRANCH TO CONVERT CPUID @V1D0226 00600000
  675. SPACE 00601000
  676. COMCVT60 EQU * @V1D0226 00602000
  677. SPACE 00603000
  678. USING OBRRECN,R9 @V1D0226 00604000
  679. SPACE 00605000
  680. MVC OBRPGMN(8),VMUSER MOVE USER ID TO RECORD @V1D0226 00606000
  681. SPACE 00607000
  682. COMCVT40 EQU * @V1D0226 00608000
  683. SWITCH SWITCH TO MAIN PROCESSOR @VA12116 00608100
  684. MVC OBRCPIDN(8),CPUID MOVE REAL CPUID TO RECORD @V1D0226 00609000
  685. NI OBRSWSN,(X'FF'-X'08') RESET TIME MACRO @VM08585 00610000
  686. OI OBRSWSN,X'40' AND SET NS CLOCK @VM08585 00611000
  687. BR R10 RETURN TO CALLER @V1D0226 00612000
  688. EJECT 00613000
  689. CNVTVR EQU * @V1D0226 00614000
  690. CALL DMKSCNVU GET ADDRESSES OF VDEVBLOK @V1D0226 00615000
  691. BNZ VERERREX IF CAN'T FIND - DON'T RECORD @V1D0226 00616000
  692. SPACE 00617000
  693. USING VDEVBLOK,R8 @V1D0226 00618000
  694. SPACE 00619000
  695. ST R8,SAVEWRK4 SAVE VDEVBLOK ADDRESS FOR LATER @V1D0226 00620000
  696. TM VDEVSTAT,VDEVDED DEDICATED VIRTUAL DEVICE ? @VM08839 00621000
  697. BO GETREAL YES - VDEVREAL IS VALID @VM08839 00622000
  698. CLI VDEVTYPC,CLASDASD SHARED VIRTUAL DASD ? @VM08839 00623000
  699. BNE VERERREX NO -- CAN'T RECORD FAKE DEV @VM08839 00624000
  700. GETREAL EQU * @V1D0226 00625000
  701. L R8,VDEVREAL LOAD RDEVBLOK ADDRESS @V1D0226 00626000
  702. CALL DMKSCNRD GET REAL DEVICE ADDRESS @V1D0226 00627000
  703. ST R1,SAVEWRK5 SAVE THE REAL ADDRESS FOR LATER @V1D0226 00628000
  704. BR R5 AND RETURN TO CALLER @V1D0226 00629000
  705. EJECT 00630000
  706. TRNSTEST EQU * @VM08585 00631000
  707. TM VMSPMFLG,VMCPVIRT SVC76 FROM CP VIRTUAL MACH @VA09952 00631010
  708. BZ CONT NO, PROCESS THIS SVC76 @VA09952 00631020
  709. TM VMSPMFLG,VMCPSV76 ISSUED BY THIS CP VIRTUAL MACH@VA09952 00631030
  710. BZ PSARETRN NO, REFLECT SVC76 TO CP VIRTUAL @VA09952 00631040
  711. NI VMSPMFLG,X'FF'-VMCPSV76 RESET SVC76 FLAG @VA09952 00631050
  712. CONT DS 0H AND PROCESS THE REQUEST @VA09952 00631060
  713. TM VMPSW+1,EXTMODE ECMODE V.M. ?? @VM08585 00632000
  714. BCR 8,R10 IF NOT RETURN @VM08585 00633000
  715. TM VMPSW,TRANMODE IN TRANSLATE MODE ?? @VM08585 00634000
  716. BCR 8,R10 RETURN IF NOT @VM08585 00635000
  717. STM R0,R2,SAVEWRK4 SAVE THE PARM REGS. @VM08585 00636000
  718. CALL DMKVATRN BRING IN THE RECORD @VM08585 00637000
  719. LTR R0,R0 BETTER BE ZERO @VM08585 00638000
  720. BNZ PSARETRN IF NOT CAN'T RECORD @VM08585 00639000
  721. OI SAVEWRK1,VVADR FLAG AS V-V PROCESSING @VM08585 00640000
  722. ST R2,SAVEWRK7 SAVE REAL ADDRESS OF RECORD @VM08585 00641000
  723. BR R10 AND RETURN @VM08585 00642000
  724. SPACE 1 00643000
  725. EMULCODE LA R14,1 INITIAL SHIFT COUNTER @V304498 00644000
  726. LR R15,R1 OBTAIN 1 OF 8 2ODE (EMUL 3330) @V304498 00645000
  727. SHIFT SRA R15,1 START TO COUNT NO OF SHIFTS @V304498 00646000
  728. BZ EMULDONE FINISHED SHIFT COUNT @V304498 00647000
  729. LA R14,1(0,R14) INCREASE SHIFT COUNT BY ONE @V304498 00648000
  730. B SHIFT CONTINUE TO COUNT 1 OF 8 CODE @V304498 00649000
  731. EMULDONE LA R15,7 INITIALIZE TO CREATE 3 OF 6 CODE @V304498 00650000
  732. MR R14,R14 CREATE 3 OF 6 CODE @V304498 00651000
  733. LR R1,R15 CONTINUE WITH 3 OUT 0F 6 CODE @V304498 00652000
  734. BR R7 RETURN TO DEVICE ADDRESS PROCESS @V304498 00653000
  735. USING OBRRECN,R9 @VA04327 00653050
  736. CKOBRLEN EQU * @VA04327 00653100
  737. TM SAVEWRK1,OS THIS A OS TYPE OBR RECORD ? @VA04327 00653150
  738. BNOR R10 NO, DON'T DO LENGTH CHECKING @VA04327 00653200
  739. SLR R1,R1 YES, START BY ZEROING R1 @VA04327 00653250
  740. LA R1,OBRLSIZE GET LENGTH OF BASE RECORD @VA04327 00653300
  741. TM OBRSWSN+1,X'20' SHORT OBR RECORD ? @VA04327 00653350
  742. BZ CKOBRBAS NO @VA04327 00653400
  743. LA R1,OBRSSIZE YES, USE SHORT BASE LENGTH @VA04327 00653450
  744. CKOBRBAS EQU * @VA04327 00653500
  745. CL R1,SAVEWRK8 BASE LENGTH > CALLER SIZE ? @VA04327 00653550
  746. BH VERERREX YES, CAN'T RECORD @VA04327 00653600
  747. TM OBRSWSN+1,X'20' SHORT OBR RECORD ? @VA04327 00653650
  748. BOR R10 YES, NO MORE CHECKING NEEDED @VA04327 00653700
  749. SLR R1,R1 NO, MORE CHECKING BY DEVICE @VA04327 00653750
  750. ICM R1,7,OBRCUAIN LOAD CUA OF FAILING DEVICE @VA04327 00653800
  751. TM OBRSWSN+1,X'20' SHORT OBR RECORD ? @VA04327 00653850
  752. BZ GETRDEV1 NO, GET REAL DEVICE BLOCK @VA04327 00653900
  753. ICM R1,7,OBRCUA YES, THIS IS CUA OF DEVICE @VA04327 00653950
  754. GETRDEV1 EQU * @VA04327 00654000
  755. BAL R5,CNVTVR GO GET REAL DEV. BLOCK @VA04327 00654050
  756. USING RDEVBLOK,R8 @VA04327 00654100
  757. CLI RDEVTYPC,CLASDASD IS IT DASD TYPE ? @VA04327 00654150
  758. BNER R10 NO, DONE LENGTH CHECKING @VA04327 00654200
  759. SLR R1,R1 ZERO R1 AGAIN @VA04327 00654250
  760. CLI RDEVTYPE,TYP2314 2314 TYPE ? @VA04327 00654300
  761. BNE COMP33XX NO, GO CHECK OTHER DASD @VA04327 00654350
  762. LA R1,OBR2SIZE YES, GET 2314 LENGTH @VA04327 00654400
  763. B COMPDASD GO DO COMPARE @VA04327 00654450
  764. COMP33XX EQU * @VA04327 00654500
  765. LA R1,OBR3SIZE GET OTHER DASD LENGTH @VA04327 00654550
  766. COMPDASD EQU * @VA04327 00654600
  767. CL R1,SAVEWRK8 LENGTH > CALLER LENGTH ? @VA04327 00654650
  768. BH VERERREX YES, CAN'T RECORD @VA04327 00654700
  769. BR R10 NO, RETURN TO OBR PROCESSING @VA04327 00654750
  770. EJECT @VA04327 00654800
  771. * 00655000
  772. * CONSTANT AREA 00656000
  773. * 00657000
  774. MSG575 EQU * @V1D0226 00658000
  775. DC C'DMKVER575I I/O ERROR ADD=' @V1D0226 00659000
  776. MSG575AD DC C' ' @V1D0226 00660000
  777. DC C', USERID=' @V1D0226 00661000
  778. MSG575ID DC CL8' ' @V1D0226 00662000
  779. MSG575LN EQU *-MSG575 MESSAGE LENGTH @V1D0226 00663000
  780. SPACE 00664000
  781. EJECT 00665000
  782. LTORG @V1D0226 00666000
  783. EJECT 00667000
  784. COPY OBRRECN @V1D0226 00668000
  785. COPY MDRREC @V1D0226 00669000
  786. COPY MIHREC @V1D0226 00670000
  787. COPY DDRREC @V1D0226 00671000
  788. PSA @V1D0226 00672000
  789. COPY EQU @V1D0226 00673000
  790. COPY SAVE @V1D0226 00674000
  791. COPY VMBLOK @V1D0226 00675000
  792. COPY VBLOKS @V1D0226 00676000
  793. COPY RBLOKS @V1D0226 00677000
  794. COPY DEVTYPES @V1D0226 00678000
  795. COPY IOBLOKS @V1D0226 00679000
  796. END 00680000