Table of Contents

DMKUNT Source

References

Source Listing

DMKUNT.ASSEMBLE.txt
  1. UNT TITLE 'DMKUNT (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 VALID SEQUENCING OF SOURCE 00002000
  3. COPY OPTIONS 00003000
  4. COPY LOCAL 00004000
  5. *. 00005000
  6. * MODULE NAME - 00006000
  7. * 00007000
  8. * DMKUNT 00008000
  9. * 00009000
  10. * CONTENTS - 00010000
  11. * 00011000
  12. * DMKUNTRN - UNTRANSLATE A REAL CSW TO A VIRTUAL CSW 00012000
  13. * DMKUNTFR - UNLOCK PAGES & RETURN CCW-CHAIN TO FREE STORAGE 00013000
  14. * DMKUNTRS - RELOCATE SENSE BYTE DATA 00014000
  15. * DMKUNTIS - UNDO ISAM PATCHES IN RCWTASKS 00015000
  16. *. 00016000
  17. EJECT 00017000
  18. *. 00018000
  19. * SUBROUTINE NAME - 00019000
  20. * 00020000
  21. * DMKUNTRN - UNTRANSLATE A REAL CSW TO A VIRTUAL CSW 00021000
  22. * 00022000
  23. * FUNCTION - 00023000
  24. * 00024000
  25. * TO UNTRANSLATE A REAL CSW, CONVERTING IT TO A VIRTUAL CSW 00025000
  26. * 00026000
  27. * ATTRIBUTES - 00027000
  28. * 00028000
  29. * REENTRANT, RESIDENT, CALLED VIA BALR 00029000
  30. * 00030000
  31. * ENTRY POINT - 00031000
  32. * 00032000
  33. * DMKUNTRN 00033000
  34. * 00034000
  35. * ENTRY CONDITIONS - 00035000
  36. * 00036000
  37. * GPR 8 = ADDRESS OF VDEVBLOK, WHICH CONTAINS 00037000
  38. * REAL (UNTRANSLATED) CSW. 00038000
  39. * GPR 11 = ADDRESS OF USER'S VMBLOK 00039000
  40. * GPR 14 = RETURN ADDRESS 00040000
  41. * GPR 15 = ADDRESS OF DMKUNTRN 00041000
  42. * 00042000
  43. * EXIT CONDITIONS - 00043000
  44. * 00044000
  45. * CORRECT VIRTUAL CSW HAS BEEN COMPUTED IN VCHBLOK. 00045000
  46. * 00046000
  47. * CALLS TO OTHER ROUTINES - 00047000
  48. * 00048000
  49. * NONE 00049000
  50. * 00050000
  51. * EXTERNAL REFERENCES - 00051000
  52. * 00052000
  53. * NONE 00053000
  54. * 00054000
  55. * TABLES / WORK AREAS - 00055000
  56. * 00056000
  57. * RCCWLST 00057000
  58. EJECT 00058000
  59. * REGISTER USAGE - 00059000
  60. * 00060000
  61. * GPR 0 = CONSTANT X'FFFFFFFF' (-1); ALSO WORK REGISTER 00061000
  62. * GPR 1 = COUNT OF REAL CCWS (IN MULTIPLES OF 8) 00062000
  63. * GPR 2 = CONSTANT +8 00063000
  64. * GPR 3 = WORK REGISTER 00064000
  65. * GPR 4 = ADDRESS OF LOOP (FOR 'BCR' USE) 00065000
  66. * GPR 8 = ADDRESS OF VDEVBLOK 00066000
  67. * GPR 11 = ADDRESS OF USER'S VMBLOK 00067000
  68. * GPR 14 = RETURN REGISTER 00068000
  69. * GPR 15 = BASE REGISTER 00069000
  70. * 00070000
  71. * ALL OTHER REGISTERS ARE NOT USED 00071000
  72. * 00072000
  73. * NOTES - 00073000
  74. * 00074000
  75. * NONE 00075000
  76. * 00076000
  77. * OPERATION - 00077000
  78. * 00078000
  79. * THE APPROPRIATE VIRTUAL CSW, INCLUDING THE CORRECT VIRTUAL 00079000
  80. * CORE-ADDRESS, IS COMPUTED FROM THE REAL CSW, TAKING INTO 00080000
  81. * ACCOUNT THE ADDRESS OF THE REAL CCW CHAIN AND OTHER 00081000
  82. * FACTORS AS NEEDED. 00082000
  83. *. 00083000
  84. EJECT 00084000
  85. DMKUNT CSECT -LOADER CONTROL- 00085000
  86. SPACE 00086000
  87. ENTRY DMKUNTF1 CP ASSIST POINTERS @VA14280 00086510
  88. ENTRY DMKUNTRN "UNTRANS" ENTRY POINT 00087000
  89. ENTRY DMKUNTFR "FREECCW" ENTRY POINT 00088000
  90. ENTRY DMKUNTRS RELOCATE SENSE BYTES 00089000
  91. SPACE 00090000
  92. USING PSA,R0 (FOR ALL ENTRIES) 00091000
  93. USING VDEVBLOK,R8 00092000
  94. USING RCWCCW,R3 00093000
  95. USING VMBLOK,R11 00094000
  96. USING DMKUNTRN,R15 00095000
  97. SPACE 00095400
  98. *. 00095800
  99. *********************************************************************** 00096200
  100. * 00096600
  101. * 00097000
  102. * CP ASSIST INSTRUCTION "UNTRN" - UNTRANSLATE A CSW 00097400
  103. * 00097800
  104. * 00098200
  105. * OPERANDS: 00098600
  106. * 1 = ADDRESS OF 'VDEVCSW' (ADDRESS OF CSW TO UNTRANSLATE) 00099000
  107. * 2 = NOT USED 00099400
  108. * 00099800
  109. * REGISTER INPUT: 00100200
  110. * GPR 14 = EXIT ADDRESS 00100600
  111. * 00101000
  112. * SYSTEM DATA AREAS REFERENCED: 00101400
  113. * RCWTASK 00101800
  114. * 00102200
  115. * 00102600
  116. * EXITS: 00103000
  117. * 00103400
  118. * 1. ADDRESS IN GPR 14 (NORMAL COMPLETION) 00103800
  119. * 00104200
  120. * REGISTER OUTPUT: NONE CHANGED BY THIS INSTRUCTION 00104600
  121. * 00105000
  122. * 2. NEXT SEQUENTIAL INSTRUCTION (ABNORMAL COMPLETION) 00105400
  123. * 00105800
  124. * NOTE: THIS EXIT IS FUNCTIONALLY EQUIVALENT TO A NO-OP. 00106200
  125. * 00106600
  126. *********************************************************************** 00107000
  127. *. 00107400
  128. SPACE 00107800
  129. DMKUNTRN DS 0D ENTER "UNTRANS" @V3M4038 00108200
  130. SPACE 00108600
  131. DS 0H EXECUTE CP ASSIST "UNTRN" @V3M4038 00109000
  132. DC X'E610',S(VDEVCSW,0) ***@V3M4038 00109400
  133. SPACE 00109800
  134. STM R0,R4,BALRSAVE - SAVE ONLY REGISTERS WE USE %V3M4038 00110200
  135. LA R2,8 8 INTO R2, %V3M4038 00110600
  136. L R3,VDEVCSW GET REAL CCW ADDR FROM REAL CSW %V3M4038 00111000
  137. LA R3,0(,R3) CLEAR HI BYTE %V3M4038 00111400
  138. SR R3,R2 GET CSW ADDRESS LESS 8 %V3M4038 00111800
  139. BM UNEXIT IF 0 (ORIG. CSW ADDR=0) EXIT %V3M4038 00112200
  140. L R0,FFS -1 INTO R0 FOR HEADER TEST %V3M4038 00112600
  141. SLR R1,R1 CLEAR ADJUSTER BEFORE LOOP START %V3M4038 00113000
  142. LA R4,TSTSUB SET R4 FOR BCR BELOW (FOR SPEED) %V3M4038 00113400
  143. SPACE 00113800
  144. TSTSUB TM RCWCTL,RCWGEN IS THIS A CP-GENERATED CCW ? %V3M4038 00114200
  145. BO STBK IF YES DON'T COUNT IT. %V3M4038 00114600
  146. ALR R1,R2 INCREMENT "REAL CCW COUNT" BY 8 %V3M4038 00115000
  147. STBK SLR R3,R2 BACK UP ONE CCW %V3M4038 00115400
  148. CH R0,RCWFLAG TEST FOR BACKUP INTO HEADER %V3M4038 00115800
  149. BCR 7,R4 "BNE TSTSUB" IF NO, REENTER LOOP %V3M4038 00116200
  150. SPACE 00116600
  151. SLR R3,R2 BACKUP 8 BYTES TO HEADER START %V3M4038 00117000
  152. L R0,RCWVCAW-RCWTASK(,R3) GET VIRT. CCW LIST ADDR %V3M4038 00117400
  153. ALR R0,R1 ADD "REAL CCW CNT" TO GET V. CSW %V3M4038 00117800
  154. STCM R0,7,VDEVCSW+1 STORE ADDRESS BITS %V3M4038 00118200
  155. UNEXIT LM R0,R4,BALRSAVE RESTORE ONLY THE REGS WE USED %V3M4038 00118600
  156. BR R14 AND EXIT. %V3M4038 00119000
  157. SPACE 2 00120000
  158. DROP R15 HERE ENDETH DMKUNTRN = "UNTRANS". 00121000
  159. EJECT 00122000
  160. *. 00123000
  161. * SUBROUTINE NAME - 00124000
  162. * 00125000
  163. * DMKUNTFR - UNLOCK PAGES & RETURN CCW-CHAIN TO FREE STORAGE 00126000
  164. * 00127000
  165. * FUNCTION - 00128000
  166. * 00129000
  167. * TO UNLOCK PAGES ASSOCIATED WITH A COMPLETED I/O OPERATION, 00130000
  168. * AND TO RETURN CCW CHAIN(S) TO FREE STORAGE. 00131000
  169. * 00132000
  170. * ATTRIBUTES - 00133000
  171. * 00134000
  172. * REENTRANT, RESIDENT, CALLED VIA SVC 00135000
  173. * 00136000
  174. * ENTRY POINT - 00137000
  175. * 00138000
  176. * DMKUNTFR 00139000
  177. * 00140000
  178. * ENTRY CONDITIONS - 00141000
  179. * 00142000
  180. * GPR 8 = ADDRESS OF VDEVBLOK 00143000
  181. * GPR 10 = ADDRESS OF IOBLOK 00144000
  182. * GPR 12 = ADDRESS OF DMKUNTFR 00145000
  183. * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00146000
  184. * 00147000
  185. * EXIT CONDITIONS - 00148000
  186. * 00149000
  187. * LOCKED PAGES ASSOCIATED WITH THE CCW-CHAIN HAVE BEEN UNLOCKED, 00150000
  188. * AND FREE STORAGE FOR THE CCW-CHAIN HAS BEEN RETURNED. 00151000
  189. * 00152000
  190. * CALLS TO OTHER ROUTINES - 00153000
  191. * 00154000
  192. * DMKPTRUL - TO UNLOCK A PAGE 00155000
  193. * DMKFRET - TO RETURN CCW CHAIN(S) TO FREE STORAGE 00156000
  194. * DMKPTRFT - TO CHAIN A PAGE ON THE FREE-LIST 00157000
  195. * DMKSTKCP - TO STACK CPEXBLOKS 00157100
  196. * DMKSCNVD - TO GET THE VIRTUAL DEVICE ADDRESS IN CCU FORM 00157200
  197. * 00158000
  198. * EXTERNAL REFERENCES - 00159000
  199. * 00160000
  200. * DMKSYSRM - REAL MACHINE STORAGE SIZE 00161000
  201. * DMKVIOIN - PRESENT DE STATUS FOR MDISKS WHICH DESERVE IT 00161100
  202. * 00162000
  203. * TABLES / WORK AREAS - 00163000
  204. * 00164000
  205. * RCCWLST 00165000
  206. * RCWTASK 00166000
  207. EJECT 00167000
  208. * REGISTER USAGE - 00168000
  209. * 00169000
  210. * GPR 4 = ADDRESS OF CCW-CHAIN HEADER 00170000
  211. * GPR 7 = ADDRESS OF REAL CCW CHAIN 00171000
  212. * GPR 8 = ADDRESS OF VDEVBLOK 00172000
  213. * GPR 9 = STORAGE SIZE OF REAL MACHINE 00173000
  214. * GPR 10 = ADDRESS OF IOBLOK 00174000
  215. * GPR 12 = BASE REGISTER = A(DMKUNTFR) 00175000
  216. * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00176000
  217. * 00177000
  218. * OTHER REGISTERS ARE USED FOR WORK REGISTERS 00178000
  219. * 00179000
  220. * NOTES - 00180000
  221. * 00181000
  222. * NONE 00182000
  223. * 00183000
  224. * OPERATION - 00184000
  225. * 00185000
  226. * THE ADDRESSES OF PAGES TO BE UNLOCKED ARE COMPUTED FROM 00186000
  227. * FLAGBITS IN THE REAL CCW CHAIN AND FROM ANY INDIRECT 00187000
  228. * DATA LISTS INVOLVED; SUCH PAGES ARE UNLOCKED VIA CALLS 00188000
  229. * TO DMKPTRUL; SIMILARLY, REAL CCW CHAIN(S) ARE 00189000
  230. * RETURNED TO FREE STORAGE VIA DMKFRET. 00190000
  231. * FOR I/O TASKS WHICH HAVE BEEN FLAGGED AS CONTAINING 00190100
  232. * A RELEASE CCW STRING (ONLY SET FOR MINI DISKS WITH 00190200
  233. * VIRTUAL RESERVE/RELEASE FEATURE REQUESTED), THE VIRTUAL 00190300
  234. * RESERVE/RELEASE BLOCK AND THE VIRTUAL DEVICE BLOCK ARE 00190400
  235. * MARKED NO LONGER RESERVED. ANY STACKED EXECUTION REQUESTS 00190500
  236. * ARE UNSTACKED AND STACKED ON THE DISPATCH CPEXBLOK CHAIN. 00190600
  237. * AN IOB INDICATING DEVICE END IS BUILT AND STACKED FOR 00190700
  238. * PROCESSING BY DMKVIOIN FOR EACH VIRTUAL DEVICE BLOCK ON 00190800
  239. * THE VDEVLINK CHAIN WHICH INDICATES THAT DEVICE END STATUS 00190900
  240. * IS DUE WHEN THE DEVICE IS RELEASED. 00191000
  241. *. 00191100
  242. EJECT 00192000
  243. * RELEASE THE STORAGE USED FOR THE REAL CCW LISTS 00193000
  244. * UNLOCK I/O DATA AREA PAGES * 00194000
  245. * UNTRANSLATE RHA CCW I/O 00195000
  246. * 00196000
  247. EXTRN DMKPTRUL,DMKSYSRM @V200820 00197000
  248. EXTRN DMKPTRFT @V304735 00198000
  249. EXTRN DMKVIOIN @V407438 00198100
  250. EXTRN DMKSTKCP @V407438 00198200
  251. EXTRN DMKSCNVD @V407438 00198300
  252. EXTRN DMKSTKIO 00198400
  253. USING RCWTASK,R4 00199000
  254. USING IOBLOK,R10 00200000
  255. USING RCWCCW,R7 00201000
  256. USING VDEVBLOK,R8 00202000
  257. USING DMKUNTFR,R12 00206000
  258. USING SAVEAREA,R13 00207000
  259. SPACE 2 00207150
  260. *. 00207300
  261. *********************************************************************** 00207450
  262. * 00207600
  263. * 00207750
  264. * CP ASSIST INSTRUCTION "UNTFR" - FREE CCW STORAGE 00207900
  265. * 00208050
  266. * 00208200
  267. * OPERANDS: 00208350
  268. * 1 = ADDRESS OF 'DMKUNTF1' (DATA LIST) 00208500
  269. * 2 = ADDRESS OF 'DMKUNTF2' (EXIT LIST) 00208650
  270. * 00208800
  271. * REGISTER INPUT: 00208950
  272. * GPR 10 = ADDRESS OF THE IOBLOK 00209100
  273. * GPR 11 = ADDRESS OF THE VMBLOK 00209250
  274. * GPR 13 = ADDRESS OF THE SAVEAREA 00209400
  275. * 00209550
  276. * SYSTEM DATA AREAS REFERENCED: 00209700
  277. * IOBLOK, RCWTASK, SAVEAREA 00209850
  278. * 00210000
  279. * 00210150
  280. * EXITS TO SPECIFIED OPERAND 2 LIST ADDRESSES: 00210300
  281. * 00210450
  282. * +0 'UNREL' (MUST UN-RELOCATE CYLINDER NUMBER OR SENSE DATA) 00210600
  283. * REGISTER OUTPUT: 00210750
  284. * GPR 0 = NUMBER OF IDAWS LEFT TO PROCESS 00210900
  285. * GPR 4 = ADDRESS OF RCWTASK 00211050
  286. * GPR 5 = DATA ADDRESS FROM THE CCW (EQUALS IDAL ADDRESS) 00211200
  287. * GPR 6 = NUMBER OF CCW'S LEFT TO UNTRANSLATE 00211350
  288. * GPR 7 = ADDRESS OF THE CURRENT CCW 00211500
  289. * GPR 9 = 'DMKPTRRM' - THE REAL MACHINE STORAGE SIZE 00211650
  290. * GPR 14 = STARTING ADDRESS OF DATA 00211800
  291. * GPR 15 = ENDING ADDRESS OF DATA 00211950
  292. * 00212100
  293. * +4 'UNTFRET' (CP ASSIST "FRET" COULD NOT FRET RCWTASK) 00212250
  294. * REGISTER OUTPUT: 00212400
  295. * GPR 0 = NUMBER OF DOUBLEWORDS IN THE RCWTASK 00212550
  296. * GPR 1 = ADDRESS OF RCWTASK 00212700
  297. * GPR 4 = VALUE FROM RCWPNT 00212850
  298. * GPR 6 = UNPREDICTABLE 00213000
  299. * GPR 9 = 'DMKPTRRM' - THE REAL MACHINE STORAGE SIZE 00213150
  300. * GPR 14-15 = UNPREDICTABLE 00213300
  301. * 00213450
  302. * +8 'PTRUL2' (CP ASSIST "PTRUL" DETECTED ABEND CONDITION) 00213600
  303. * REGISTER OUTPUT: 00213750
  304. * GPR 0 = NUMBER OF IDAWS LEFT TO PROCESS 00213900
  305. * GPR 2 = CURRENT IDAW THAT COULDN'T BE HANDLED 00214050
  306. * GPR 4 = ADDRESS OF RCWTASK 00214200
  307. * GPR 5 = ADDRESS OF THE IDAW 00214350
  308. * GPR 6 = NUMBER OF CCW'S LEFT TO UNTRANSLATE 00214500
  309. * GPR 7 = ADDRESS OF THE CURRENT CCW 00214650
  310. * GPR 9 = 'DMKPTRRM' - THE REAL MACHINE STORAGE SIZE 00214800
  311. * GPR 14-15 = UNPREDICTABLE 00214950
  312. * 00215100
  313. * +12 'UNTFRXIT' (MUST EXIT WITHOUT USING CP ASSIST "RETURN") 00215250
  314. * REGISTER OUTPUT: 00215400
  315. * GPR 0-11,14-15 = UNPREDICTABLE 00215550
  316. * 00215700
  317. * +16 'NXTCCW' (CCW DATA AREA IS IN A SHARED PAGE) 00215850
  318. * REGISTER OUTPUT: 00216000
  319. * GPR 4 = ADDRESS OF RCWTASK 00216150
  320. * GPR 6 = NUMBER OF CCW'S LEFT TO UNTRANSLATE 00216300
  321. * GPR 7 = ADDRESS OF THE CURRENT CCW 00216450
  322. * GPR 9 = 'DMKPTRRM' - THE REAL MACHINE STORAGE SIZE 00216600
  323. * GPR 14-15 = UNPREDICTABLE 00216750
  324. * 00216900
  325. * +20 'PTRUL1' (CP ASSIST "PTRUL" DETECTED ABEND CONDITION) 00217050
  326. * REGISTER OUTPUT: 00217200
  327. * GPR 2 = CURRENT DATA ADDRESS THAT COULDN'T BE UNLOCKED 00217350
  328. * GPR 4 = ADDRESS OF RCWTASK 00217500
  329. * GPR 5 = SAME VALUE AS THAT OF GPR 2 00217650
  330. * GPR 6 = NUMBER OF CCW'S LEFT TO UNTRANSLATE 00217800
  331. * GPR 7 = ADDRESS OF THE CURRENT CCW 00217950
  332. * GPR 9 = 'DMKPTRRM' - THE REAL MACHINE STORAGE SIZE 00218100
  333. * GPR 14-15 = UNPREDICTABLE 00218250
  334. * 00218400
  335. * +24 'ITSAREL' (VIRTUAL RESERVE/RELEASE DETECTED) 00218410
  336. * REGISTER OUTPUT: 00218420
  337. * GPR 0 = UNPREDICTABLE 00218430
  338. * GPR 1 = UNPREDICTABLE 00218440
  339. * GPR 4 = UNPREDICTABLE 00218450
  340. * GPR 6 = UNPREDICTABLE 00218460
  341. * GPR 9 = 'DMKPTRRM' - THE REAL MACHINE STORAGE SIZE 00218470
  342. * GPR 14-15 = UNPREDICTABLE 00218480
  343. * 00218490
  344. * 00218500
  345. * EXIT TO CALLER: (FULL COMPLETION EXIT VIA CP ASSIST "RETURN") 00218550
  346. * REGISTER OUTPUT: 00218700
  347. * GPR 14-15 = UNPREDICTABLE 00218850
  348. * 00219000
  349. *********************************************************************** 00219150
  350. *. 00219300
  351. SPACE 00219450
  352. DMKUNTFR DS 0D ENTER "FREECCW" @V3M4038 00219600
  353. SPACE 00219750
  354. DS 0H EXECUTE CP ASSIST "UNTFR" @V3M4038 00219900
  355. DC X'E605',S(DMKUNTF1,DMKUNTF2) ***@V3M4038 00220050
  356. SPACE 00220200
  357. STM R0,R11,SAVEREGS SAVE REGS R0 THRU R11 %V3M4038 00220350
  358. L R9,=A(DMKSYSRM) GET REAL MACHINE STORAGE SIZE %V3M4038 00220500
  359. L R9,0(,R9) KEEP IN R9 FOR HANDY REFERENCE %V3M4038 00220650
  360. L R4,IOBCAW GET ADDRESS OF THE FIRST RCWTASK %V3M4038 00220800
  361. LA R4,0(,R4) STRIP POSSIBLE HIGH ORDER KEY %V3M4038 00220950
  362. SL R4,F16 BACK OFF 16 TO 1ST HEADER START %V3M4038 00221100
  363. NXTFRET EQU * HANDLE NEXT CCW LIST: %V3M4038 00221250
  364. LA R7,16(,R4) POINT R7 TO 1ST CCW IN TASK %V3M4038 00221400
  365. LH R6,RCWRCNT %V3M4038 00221550
  366. LTR R6,R6 DON'T GET INTO 'BCT' TROUBLE... %V3M4038 00221700
  367. BNP FRETRCW ...GLAD WE CHECKED %V3M4038 00221850
  368. SPACE 00222000
  369. NXTCCW TM RCWCTL,RCWIO+RCWSHR LOCKED OR 'SHARED' PAGE ? %V3M4038 00222150
  370. BZ INCR8 NOPE - JUST ADVANCE TO NEXT CCW %V3M4038 00222300
  371. L R5,RCWADDR YES, GET DATA ADDRESS IN THE CCW %V3M4038 00222450
  372. TM RCWFLAG,IDA DOES RCCW HAVE IDA ON ? %V3M4038 00222600
  373. BO IDASET YES - HANDLE VARIOUS SITUATIONS. %V3M4038 00222750
  374. LA R2,0(,R5) DATA ADDR INTO R2 (MINUS BYTE 0) %V3M4038 00222900
  375. TM RCWCTL,RCWIO WAS PAGE LOCKED ? %V3M4038 00223050
  376. BO PTRUL1 IF YES UNLOCK IT. %V3M4038 00223200
  377. ST R7,SAVEWRK9 SAVE THIS REGISTER @V304735 00228000
  378. LR R7,R2 CHANGE REGISTERS FOR DMKPTRFT @V304735 00229000
  379. N R7,XPAGNUM DROP OFF DISPLACEMENT @V304735 00230000
  380. SRL R7,8 LEAVE INDEX INTO CORTABLE @V304735 00231000
  381. AL R7,ACORETBL GET THE PROPER TABLE ENTRY @V304735 00232000
  382. XC CORPGPNT-CORTABLE(4,R7),CORPGPNT-CORTABLE(R7) @V304735 00233000
  383. CALL DMKPTRFT PUT THIS PAGE ON THE FREE-LIST @V304735 00234000
  384. L R7,SAVEWRK9 RESTORE R7 @V304735 00235000
  385. B INCR8 GET THE NEXT REAL CCW @V304735 00236000
  386. PTRUL1 CALL DMKPTRUL UNLOCK THIS PAGE %V3M4038 00237000
  387. INCR8 LA R7,8(,R7) ADVANCE TO NEXT REAL CCW %V3M4038 00238000
  388. BCT R6,NXTCCW AND ITERATE THRU CCW-CHAIN. %V3M4038 00239000
  389. B FRETRCW GO RELEASE THE RCWTASK WHEN THRU %V3M4038 00240000
  390. SPACE 00241000
  391. IDASET SLR R1,R1 RCWIO AND REAL IDA FLAGS SET: %V3M4038 00242000
  392. * (NOTE: THE 1ST IDAW IS KNOWN TO BE OK) 00243000
  393. ICM R1,3,RCWCNT GET THE REAL COUNT %V3M4038 00244000
  394. BCTR R1,0 LESS ONE, PLEASE %V3M4038 00245000
  395. L R14,0(,R5) GET 1ST IDAW = STARTING ADDRESS %V3M4038 00246000
  396. LR R15,R14 ALSO IN R15 %V3M4038 00247000
  397. IC R0,RCWCOMND IS THE CCW A READ-BACKWARD TYPE? %V3M4038 00248000
  398. N R0,F15 ... %V3M4038 00249000
  399. CH R0,=H'12' ... %V3M4038 00250000
  400. BNE IDLFWD NOT TODAY. %V3M4038 00251000
  401. SR R14,R1 DEC. START ADDR IF BACKWARD READ %V3M4038 00252000
  402. B IDLCHK FIND HOW MANY HALF-PAGES CROSSED %V3M4038 00253000
  403. IDLFWD AR R15,R1 SUM TO GIVE LAST ADDR %V3M4038 00254000
  404. SPACE 00255000
  405. IDLCHK SRA R14,11 DIVIDE BOTH BY 2048.. %V3M4038 00256000
  406. SRA R15,11 TO YIELD START & END PAGE ADDR %V3M4038 00257000
  407. SR R15,R14 DIFF = NO. OF "PAGE" CROSSOVERS %V3M4038 00258000
  408. LA R0,1(,R15) +1 = NO. OF HALF-PAGES TO UNLOCK %V3M4038 00259000
  409. TM RCWCTL,RCWHMR+RCW2311 ANY UN-RELOCATING TO DO? %V3M4038 00260000
  410. BNZ UNREL YES - "DO WHAT'S BEST" FIRST. %V3M4038 00261000
  411. * 00262000
  412. * LOOP TO UNLOCK DATA PAGES GIVEN BY IDAWS IN REAL IDAL: 00263000
  413. * R0 = NUMBER OF HALF-PAGES TO BE UNLOCKED 00264000
  414. * R5 = ADDRESS OF "NEXT" (OR FIRST) IDAW: 00265000
  415. * 00266000
  416. UNLOCK DS 0H @VA12570 00267200
  417. L R11,SAVER11 BE SURE IT POINTS TO VMBLOK @VA12570 00267400
  418. L R2,0(,R5) GET THE REAL DATA PAGE ADDRESS @VA12570 00267600
  419. CLR R2,R9 ADDRESS WITHIN THE REAL MACHINE? %V3M4038 00268000
  420. BNL INCR8 NO, THEN FINISHED WITH THIS CCW %V3M4038 00269000
  421. TM RCWCTL,RCWIO WAS PAGE LOCKED ? %V3M4038 00270000
  422. BO PTRUL2 IF YES UNLOCK IT. %V3M4038 00271000
  423. ST R7,SAVEWRK9 SAVE THIS REGISTER @V304735 00272000
  424. LR R7,R2 CHANGE REGISTERS FOR DMKPTRFT @V304735 00273000
  425. N R7,XPAGNUM DROP OFF DISPLACEMENT @V304735 00274000
  426. SRL R7,8 LEAVE INDEX INTO CORTABLE @V304735 00275000
  427. AL R7,ACORETBL GET THE PROPER TABLE ENTRY @V304735 00276000
  428. CLC CORPGPNT-CORTABLE(4,R7),F0 HAS PAGE BEEN @V304735 00277000
  429. * RELEASED ? 00278000
  430. BE NOPTRFT IF YES - DON'T CALL DMKPTRFT @V304735 00279000
  431. XC CORPGPNT-CORTABLE(4,R7),CORPGPNT-CORTABLE(R7) @V304735 00280000
  432. CALL DMKPTRFT PUT THIS PAGE ON THE FREE-LIST @V304735 00281000
  433. NOPTRFT L R7,SAVEWRK9 RESTORE R7 @V304735 00282000
  434. B NXTIDA GET THE NEXT IDA WORD @V304735 00283000
  435. PTRUL2 CALL DMKPTRUL UNLOCK THIS PAGE %V3M4038 00283450
  436. NXTIDA DS 0H PROCESS NEXT IDA WORD %V3M4038 00283900
  437. LA R5,4(,R5) ADVANCE TO THE NEXT IDAW %V3M4038 00284350
  438. BCT R0,UNLOCK LOOP THRU ALL IDAW IN THE IDAL %V3M4038 00284800
  439. LA R7,8(,R7) ADVANCE TO THE NEXT REAL CCW %V3M4038 00285250
  440. BCT R6,NXTCCW ITERATE THRU CCW-CHAIN. %V3M4038 00285700
  441. FRETRCW EQU * RELEASE REAL CCW PACKAGE %V3M4038 00286150
  442. LH R0,RCWCCNT TOTAL WORD-COUNT INTO R0, %V3M4038 00286600
  443. LR R1,R4 - PUT START ADDR IN R1 %V3M4038 00287050
  444. L R4,RCWPNT - PICK UP NEXT RCCWLST %V3M4038 00287500
  445. UNTFRET CALL DMKFRET - FREE THE RCCWLST STORAGE %V3M4038 00287950
  446. LTR R4,R4 - TEST IF NEXT ADDR IS ZERO %V3M4038 00288400
  447. BNZ NXTFRET - KEEP AT WORK IF NOT. %V3M4038 00288850
  448. ST R4,IOBCAW ZERO IOBCAW AFTER STORAGE FREED %V3M4038 00289300
  449. * IOBUNREL IS ONLY SET FOR MINIDISKS WITH VIRT RES/REL FEATURE 00289775
  450. TM IOBSPEC2,IOBUNREL WAS THERE A RELEASE IN CHAIN %V407438 00289800
  451. BZ UNTFRXIT NOPE, DONE, BR. %V407438 00289825
  452. TM IOBSPEC2,IOBCLN DOING CLEANUP JOB FOR DMKCCW %V407438 00289850
  453. BO UNTFRXIT YES, THEN DON'T RELEASE MDISK %V407438 00289875
  454. ITSAREL DS 0H @V4M0156 00289885
  455. L R2,VDEVRRB GET THE ADDRESS OF THE VRRBLOK @V407438 00289900
  456. USING VRRBLOK,R2 ADDRESS THE VRRBLOK @V407438 00289925
  457. NI VDEVFLG2,X'FF'-VDEVRES VIRT DEV NO LONGER RESV @V407438 00289950
  458. NI VRRSTAT,X'FF'-VRRRES DITTO @V407438 00289975
  459. NXTCPEX L R1,VRRCPEX GET FIRST/NEXT CPEXBLOK WAITING @V407438 00290000
  460. LTR R1,R1 IS ANYONE WAITING FOR THE MDISK? @V407438 00290025
  461. BZ NXTDE NOPE, GO TRY DEVICE END INTS @V407438 00290050
  462. USING CPEXBLOK,R1 ADDRESS THE CPEXBLOK @V407438 00290075
  463. L R0,CPEXFPNT GET THE ADDRESS OF THE NEXT ONE @V407438 00290100
  464. ST R0,VRRCPEX AND MAKE IT FIRST ON CHAIN @V407438 00290125
  465. CALL DMKSTKCP STACK THE UNCHAINED CPEXBLOK @V407438 00290150
  466. B NXTCPEX CONTINUE UNTIL ALL UNSTACKED @V407438 00290175
  467. DROP R1 NO MORE CPEXBLOK @V407438 00290200
  468. SPACE 00290225
  469. NXTDE L R8,VDEVLINK GET NEXT VDEVBLOK USING THIS MDSK@V407438 00290250
  470. CL R8,SAVER8 SAME ONE WE ENTERED ON? @V407438 00290275
  471. BE UNTFRXIT YUP, WERE DONE, BR. @V407438 00290300
  472. TM VDEVFLG2,VDEVODE DO WE OWE THIS VDEV A DE INT @V407438 00290325
  473. BZ NXTDE NOPE, LOOK THROUGH ALL VDEVBLOKS @V407438 00290350
  474. NI VDEVFLG2,X'FF'-VDEVODE WE DON'T OWE IT ANYMORE @V407438 00290375
  475. LA R0,IOBSIZE GET AN IOBLOK @V407438 00290400
  476. CALL DMKFREE FROM FREE STORAGE @V407438 00290425
  477. LR R10,R1 NORMAL ADDRESSABILITY PLEASE @V407438 00290450
  478. XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR OUT THE BLOCK @V407438 00290475
  479. ST R1,IOBLINK AS THOUGH IT CAME FROM IOS @V407438 00290500
  480. MVI IOBCSW+4,DE ENDING STATUS = DEVICE END @V407438 00290525
  481. L R0,VDEVUSER GET THE VMBLOK FOR THE VDEVBLOK @V407438 00290550
  482. ST R0,IOBUSER SAVE IT IN THE IOB @V407438 00290575
  483. L R0,=A(DMKVIOIN) ADDRESS OF THE INT. HANDLER @V407438 00290600
  484. ST R0,IOBIRA THATS WHERE WE WANT IT TO GO @V407438 00290625
  485. L R11,VDEVUSER GET VMBLOK FOR SCN AND IOB @V407438 00290650
  486. ST R11,IOBUSER IOB BELONGS TO DE RECEIVER @V407438 00290675
  487. CALL DMKSCNVD GET THE VIRTUAL CCU PLEASE @V407438 00290700
  488. L R11,SAVER11 RESTORE CALLERS R11 @V407438 00290725
  489. STH R1,IOBVADD PUT CCU IN THE IOB TOO. @V407438 00290750
  490. CALL DMKSTKIO THAT SHOULD DO IT... @V407438 00290775
  491. B NXTDE CONTINUE WITH THE NEXT NOW. @V407438 00290800
  492. SPACE 00290825
  493. UNTFRXIT EXIT EXIT TO CALLER WHEN ALL DONE %V407438 00290850
  494. SPACE 3 00290875
  495. * THE FOLLOWING TWO DATA LISTS MUST BE KEPT CONTIGUOUS AND IN ORDER 00290900
  496. * BECAUSE THEY ARE USED BY THE CP ASSIST INSTRUCTION "UNTFR". 00290925
  497. SPACE 2 00291550
  498. DMKUNTF1 DS 0F "UNTFR" ASSIST DATA LIST @V3M4026 00292000
  499. SPACE , 00292450
  500. * NOTE: THE SECOND WORD IN THIS LIST WILL BE INCREMENTED BY 00292520
  501. * 4 BY DMKCPI DURING IPL IF THIS CPU HAS ASSIST LEVEL 00292590
  502. * 18 OR 19. THIS WILL ALLOW USE OF THE "OLD" FRET 00292660
  503. * ASSIST. 00292730
  504. SPACE , 00292800
  505. DC V(DMKPTRPL) +0 FOR USE BY "PTRUL" ASSIST @V3M4026 00292900
  506. DC V(DMKFREMX) +4 FOR USE BY "FRET" ASSIST @VA14280 00293351
  507. DC V(DMKFRETL) +8 MORE DATA FOR "FRET" ASSIST @V3M4026 00293800
  508. SPACE 2 00294250
  509. DMKUNTF2 DS 0F "UNTFR" ASSIST EXIT LIST @V3M4026 00294700
  510. SPACE 00295150
  511. DC A(UNREL) +0 DATA NEEDS TO BE RELOCATED @V3M4026 00295600
  512. DC A(UNTFRET) +4 MUST DO SOFTWARE 'FRET' @V3M4026 00296050
  513. DC A(PTRUL2) +8 TROUBLE TRYING TO UNLOCK PAGE @V3M4026 00296500
  514. DC A(UNTFRXIT) +12 COULDN'T DO THE 'SVC 12' @V3M4026 00296950
  515. DC A(NXTCCW) +16 CCW DATA AREA IS SHARED @V3M4026 00297400
  516. DC A(PTRUL1) +20 COULDN'T DO UNLOCK FUNCTION @V3M4026 00297850
  517. DC A(ITSAREL) +24 RELEASE VIRTUAL DEVICE @V4M0156 00297860
  518. EJECT 00299000
  519. * "UN-RELOCATE" CYLINDER NUMBER OR SENSE DATA FOR READ HOME ADDRESS, 00300000
  520. * READ RECORD R0, OR A SENSE OF A SIMULATED 2311 OR AN EXTENDED 00301000
  521. * SENSE DASD DEVICE (24 SENSE BYTES), FOR EXAMPLE : 3340 OR 3350. 00302000
  522. * 00303000
  523. * NOTE REGISTER USAGE AT THIS POINT: 00304000
  524. * R0 = NUMBER OF IDAWS TO BE PROCESSED 00305000
  525. * R1 = BYTE-COUNT-LESS-1 IN THE CCW 00306000
  526. * R4 = ADDRESS OF RCWTASK 00307000
  527. * R5 = ADDRESS OF THE FIRST IDAW 00308000
  528. * R6 = RCWRCNT (COUNT OF REAL CCWS) 00309000
  529. * R7 = ADDRESS OF CURRENT REAL CCW 00310000
  530. * R8 = ADDRESS OF VDEVBLOK 00311000
  531. * R9 = REAL MACHINE SIZE 00312000
  532. * R10 = ADDRESS OF IOBLOK 00313000
  533. * R11-R13 = THE USUAL VALUES 00314000
  534. * 00315000
  535. UNREL TM IOBFLAG,IOBRES HAS IO BEEN RESET ? 00316000
  536. BO UNLOCK YES - NO VIRTUAL DEVICE EXISTS 00317000
  537. TM IOBSTAT,IOBCC3 OR NONZERO CONDITION-CODE ? 00318000
  538. BNZ UNLOCK YES - LEAVE MEMORY ALONE. 00319000
  539. SLR R2,R2 OK SO FAR, CLEAR R2 (FOR ICM USE) 00320000
  540. LA R15,RCWCCW+8 POINT TO END OF THE CCW 00321000
  541. CLM R15,7,IOBCSW+1 PERCHANCE MATCHES THE REAL CSW ADDRESS ? 00322000
  542. BNE UNREL1 NOPE - DIDN'T TERMINATE ON THIS CCW. 00323000
  543. TM IOBCSW+4,UC IF YES, WAS THERE A UNIT CHECK ? 00324000
  544. BO UNLOCK YES - LEAVE IT ALONE. 00325000
  545. TM IOBCSW+5,PRGC+PRTC+CDC+CCC+IFCC+CHC BAD CHANNEL ERROR ? 00326000
  546. BNZ UNLOCK YES - LEAVE IT ALONE. 00327000
  547. ICM R2,3,IOBCSW+6 GET RESIDUAL COUNT FROM CSW 00328000
  548. SR R1,R2 COMPUTE EFFECTIVE NO. OF BYTES (LESS 1) 00329000
  549. BM UNLOCK IF BYTE COUNT NOT AT LEAST 1, FORGET IT 00330000
  550. BAL R14,UNRELSUB COMPUTE ADD'TL BYTE COUNT & SAVE DATA ETC 00331000
  551. B UNREL4 AND NOW GO UN-RELOCATE THE DATA. 00332000
  552. SPACE 00333000
  553. * END OF CCW DOESN'T MATCH ADDRESS IN IOBCSW - CHECK WHETHER THE DATA 00334000
  554. * SAVED AFTER THE IDAWS BY DMKCCWTR HAS CHANGED OR NOT: 00335000
  555. * IF IT HAS CHANGED, ASSUME THAT THE CCW WAS EXECUTED; 00336000
  556. * IF IT HAS NOT CHANGED, ASSUME THE CCW WAS NOT EXECUTED: 00337000
  557. * 00338000
  558. UNREL1 TM RCWFLAG,CD CHAIN-DATA PERCHANCE SET ? 00339000
  559. BZ UNREL3 NOPE (WHEW). 00340000
  560. * 00341000
  561. DROP R7 00342000
  562. LA R3,8(,R7) POINT AT NEXT CCW TO ACCUMULATE COUNT 00343000
  563. USING RCWCCW,R3 00344000
  564. UNREL2 TM RCWFLAG,SKIP SKIP FLAG SET ? 00345000
  565. BO UNREL3 YES - FORGET IT (NO GAMES PLEASE). 00346000
  566. ICM R2,3,RCWCNT NO, GET BYTE-COUNT FROM CHAINED-TO CCW 00347000
  567. AR R1,R2 COMPUTE ACCUMULATED BYTE-COUNT 00348000
  568. TM RCWFLAG,CD CHAIN DATA SET IN THIS ONE TOO ? 00349000
  569. BZ UNREL3 NOPE - WE'RE DONE. 00350000
  570. LA R3,8(,R3) YES - ADVANCE TO NEXT CCW, 00351000
  571. CLM R3,7,IOBCSW+1 IS THAT THE ENDING CCW ? 00352000
  572. BNE UNREL2 NOPE - KEEP GOING, MEN. 00353000
  573. ICM R2,3,IOBCSW+6 YES, PICK UP RESIDUAL COUNT (IF ANY) 00354000
  574. SR R1,R2 AND SUBTRACT FROM ACCUMULATED COUNT 00355000
  575. DROP R3 RESTORE NORMAL USAGE 00356000
  576. USING RCWCCW,R7 ... 00357000
  577. * 00358000
  578. UNREL3 BAL R14,UNRELSUB COMPUTE ADD'TL BYTE COUNT & SAVE DATA ETC 00359000
  579. LR R3,R0 GET THE NUMBER OF IDAWS 00360000
  580. ALR R3,R3 TIMES 4 PLEASE 00361000
  581. ALR R3,R3 ... 00362000
  582. ALR R3,R5 PLUS ADDRESS OF THE 1ST IDAW 00363000
  583. CLC 0(8,R3),SAVEWRK6 DID THE USER'S DATA CHANGE ? 00364000
  584. BE UNLOCK NO - FORGET THE WHOLE THING. 00365000
  585. * 00366000
  586. UNREL4 DS 0H DATA WAS READ IN; NOW UN-RELOCATE SAME: 00367000
  587. IC R0,RCWCOMND GET CCW OP-CODE 00368000
  588. N R0,F15 ISOLATE LOW-ORDER 4 BITS 00369000
  589. CL R0,F4 IS IT A SENSE COMMAND (OR EQUIVALENT) ? 00370000
  590. BNE SETRHA IF NOT, SET R5 FOR READ HOME ADDRESS 00371000
  591. * 00372000
  592. LA R0,1 BYTE-COUNT 00373000
  593. A R0,SAVEWRK2 INTO R0, 00374000
  594. LA R1,SAVEWRK6 LET R1 POINT TO DATA IN SAVE-AREA 00375000
  595. LA R15,DMKUNTRS SET R15 FOR ADDRESSABILITY NEEDS 00376000
  596. BAL R2,UNTRSREL CALL INTERNAL SUBR TO RELOCATE SENSE DATA 00377000
  597. UNREL5 L R5,RCWADDR RESTORE R5 (IN CASE LOST) 00378000
  598. LA R3,SAVEWRK6 LET R3 POINT TO SAVEWRK6 AREA 00379000
  599. LM R0,R1,SAVEWRK3 RESTORE R0 AND THE FIRST BYTE COUNT 00380000
  600. L R2,0(,R5) LET R2 POINT TO THE FIRST DATA-AREA 00381000
  601. BAL R14,CHKPKEY CHECK FOR POSSIBLE PROTECTION VIOLATION 00382000
  602. BNZ UNREL6 CC NONZERO - LEAVE WELL ENOUGH ALONE 00383000
  603. LR R15,R2 CC ZERO, SET R15, AND ... 00384000
  604. EX R1,UNRELMVC MOVE 1ST CHUNK OF DATA BACK AGAIN 00385000
  605. UNREL6 LA R3,1(R3,R1) BUMP R3 FOR THE NEXT CHUNK (IF ANY) 00386000
  606. L R1,SAVEWRK5 GET THE SECOND COUNT LESS ONE 00387000
  607. LTR R1,R1 ANY MORE DATA ? 00388000
  608. BM UNLOCK NOPE - WE'RE ALL SET. 00389000
  609. L R2,4(,R5) GET SECOND ADDRESS 00390000
  610. CLR R2,R9 IN STORAGE ? 00391000
  611. BNL UNLOCK NO - FORGET IT. 00392000
  612. BAL R14,CHKPKEY CHECK FOR POSSIBLE PROTECTION VIOLATION 00393000
  613. BNZ UNLOCK CC NONZERO - LEAVE WELL ENOUGH ALONE 00394000
  614. LR R15,R2 CC ZERO, SET R15, AND ... 00395000
  615. EX R1,UNRELMVC OK - MOVE 2ND CHUNK OF DATA BACK AGAIN 00396000
  616. B UNLOCK AND GO UNLOCK THE PAGES (WHEW). 00397000
  617. * 00398000
  618. SETRHA MVI SAVEWRK1,00 CLEAR FLAG USED BELOW, 00399000
  619. LH R14,VDEVRELN CYLINDER RELOCATION FACTOR INTO R14 00400000
  620. SLR R15,R15 CLEAR R15 (FOR "ICM" USE) 00401000
  621. LA R5,1 SET R5 TO UNRELOCATE 2ND & 3RD BYTES 00402000
  622. TM RCWCOMND,X'1A' WAS IT A READ HOME ADDRESS (1A/9A) ? 00403000
  623. BO CFCNT IF YES, R5=1 IS CORRECT (2ND & 3RD BYTES) 00404000
  624. SLR R5,R5 NO, SET R5=0 FOR THE FIRST TWO BYTES 00405000
  625. CFCNT C R5,SAVEWRK2 CYL OR HEAD INCLUDED YET ? 00406000
  626. BNL UNREL5 NO - FORGET IT - FINISH UP. 00407000
  627. LA R3,SAVEWRK6 GET DATA ADDRESS 00408000
  628. ALR R3,R5 ADD DISPLACEMENT (FOR CC OR HH BYTES) 00409000
  629. ICM R15,3,0(R3) GET CYLINDER OR HEAD TO R15 00410000
  630. CLI VDEVTYPE,TYP3340 IS IS A 334X? @V56BDA8 00410050
  631. BNE NOT3340C NO, NORMAL PATH @V56BDA8 00410100
  632. CH R15,=H'696' IS IT AN ALTERNATE? @V56BDA8 00410150
  633. BNL UNREL5 YES, DONT UNRELOCATE @V56BDA8 00410200
  634. L R1,VDEVREAL -->RDEVBLOK @V56BDA8 00410250
  635. TM RDEVFTR-RDEVBLOK(R1),FTR35MB SMALL DISK? @V56BDA8 00410300
  636. BZ NOT3340C NO, UNRELOCATE @V56BDA8 00410350
  637. CH R15,=H'348' 35MB ALTERNATE? @V56BDA8 00410400
  638. BE UNREL5 YES, DONT UNRELOCATE @V56BDA8 00410450
  639. NOT3340C EQU * @V56BDA8 00410500
  640. SR R15,R14 RELOCATE 00411000
  641. * IF MINUS DONT STORE BACK 00412000
  642. * MAY BE TRYING TO RELOCATE DATA NOT HA 00413000
  643. * HAPPENS IF DATA READ ON TOP OF HA DATA 00414000
  644. BM UNREL5 IF MINUS DON'T STORE ANYTHING - FINISH UP 00415000
  645. STCM R15,3,0(R3) ...AND STORE IT BACK 00416000
  646. TM VDEVFLAG,VDEV231B BOTTOM HALF OF SIMULATED 2311 ? 00417000
  647. BZ UNREL5 IF NOT, FORGET IT (FINISH UP). 00418000
  648. TM SAVEWRK1,X'01' CYL +&HEAD BOTH RELOCATED? 00419000
  649. BO UNREL5 YES - FINISH UP. 00420000
  650. LA R5,2(,R5) SET DISPLACEMENT FOR HEAD 00421000
  651. LA R14,10 SET R14 TO UN-RELOCATE HEAD NUMBER, 00422000
  652. OI SAVEWRK1,X'01' SET FLAG-BIT 00423000
  653. B CFCNT 00424000
  654. SPACE 00425000
  655. UNRELSUB SLR R2,R2 R2=0 MEANS NO HALF-PAGES CROSSED BY DATA 00426000
  656. CL R1,F7 BYTE-COUNT-LESS-1 EXCEEDS 7 ? 00427000
  657. BNH UNRELSB1 NOPE 00428000
  658. LA R1,7 YES - LIMIT TO 7 00429000
  659. UNRELSB1 ST R1,SAVEWRK2 REMEMBER THIS COUNT 00430000
  660. LA R15,2047 NOW COMPUTE END OF HALF-PAGE 00431000
  661. O R15,0(,R5) ... 00432000
  662. SL R15,0(,R5) NO. OF BYTES LESS 1 IN THIS HALF-PAGE 00433000
  663. CLR R15,R1 COMPARE WITH ACTUAL COUNT-LESS-1 00434000
  664. BNL UNRELSB3 IT'S OK - NO BOUNDARY IS CROSSED 00435000
  665. CL R0,F1 BEWARE OF POSSIBLE CASE OF JUST ONE IDAW 00436000
  666. BE UNRELSB2 IF YES, ADJUST R1 BUT LEAVE R2=0. 00437000
  667. LR R2,R1 TOTAL COUNT (LESS 1) INTO R2 BRIEFLY 00438000
  668. SR R2,R15 NEW COUNT (> 0) FOR THE NEXT PAGE 00439000
  669. UNRELSB2 LR R1,R15 NEW COUNT (LESS 1) FOR THE 1ST PAGE 00440000
  670. UNRELSB3 MVC SAVEWRK6(8),ZEROES CLEAR DBL-WORD AT SAVEWRK6 00441000
  671. LA R15,SAVEWRK6 LET R15 POINT TO SAVEWRK6 AREA 00442000
  672. L R3,0(,R5) ADDRESS OF 1ST DATA AREA 00443000
  673. EX R1,UNRELMVC MOVE 1ST FEW BYTES TO SAVEWRK6 AREA 00444000
  674. S R2,F1 DECREMENT 2ND COUNT (IF ANY) FOR "EX" USE 00445000
  675. STM R0,R2,SAVEWRK3 REMEMBER R0 AND THESE TWO COUNTS 00446000
  676. BCR 4,R14 <BM> IF MINUS RETURN TO CALLER - WE'RE DONE 00447000
  677. LA R15,1(R15,R1) BUMP R15 FOR NO. OF BYTES OBTAINED 00448000
  678. L R3,4(,R5) ADDRESS OF 2ND DATA AREA 00449000
  679. CLR R3,R9 IN REAL MACHINE STORAGE ? 00450000
  680. BCR 11,R14 <BNL> NO - RETURN TO CALLER. 00451000
  681. EX R2,UNRELMVC OK - MOVE 2ND BATCH OF BYTES TO SAVEWRK6 00452000
  682. BR R14 AND RETURN. 00453000
  683. * 00454000
  684. UNRELMVC MVC 0(*-*,R15),0(R3) TO MOVE USER DATA TO/FROM SAVEWRK6 AREA 00455000
  685. EJECT 00456000
  686. * "CHKPKEY" = SUBROUTINE TO DETERMINE IF SENSE-BYTES OR THE LIKE 00457000
  687. * CAN BE STORED IN USER'S MEMORY (GIVEN BY REAL ADDRESS FROM A CCW) 00458000
  688. * AT ENTRY: 00459000
  689. * GPR 2 = REAL DATA ADDRESS 00460000
  690. * GPR 14 = RETURN ADDRESS 00461000
  691. * AT EXIT: 00462000
  692. * CONDITION CODE 0 = OK TO STORE DATA IN USER'S MEMORY. 00463000
  693. * CONDITION CODE NONZERO = DO NOT STORE DATA THEREIN. 00464000
  694. * 00465000
  695. * NOTE: CODE IS FUNCTIONALLY IDENTICAL TO "CHKPKEY" IN "DMKVCA". 00466000
  696. * 00467000
  697. CHKPKEY EQU * CHECK FOR PROTECTION VIOLATION: 00468000
  698. CLI IOBCAW,X'00' IF HIS CAW KEY IS ZERO... 00469000
  699. BCR 8,R14 <BE> ... HE CAN STORE ANYWHERE 00470000
  700. L R15,X2048BND ALIGNMENT MASK 00471000
  701. NR R15,R2 REAL ADDRESS IS IN GR 2 00472000
  702. ISK R15,R15 GET REAL STORAGE KEY 00473000
  703. N R15,F240 REDUCE TO FOUR BIT KEY 00474000
  704. CLM R15,1,IOBCAW TEST FOR KEY MATCH 00475000
  705. BR R14 AND RETURN WITH CONDITION CODE SET. 00476000
  706. SPACE 00477000
  707. DROP R10,R12 00478000
  708. EJECT 00479000
  709. *. 00480000
  710. * SUBROUTINE NAME - 00481000
  711. * 00482000
  712. * DMKUNTRS - RELOCATE SENSE BYTE DATA 00483000
  713. * 00484000
  714. * FUNCTION - 00485000
  715. * 00486000
  716. * FOR 3330/3340/3350/2305 COMPUTE THE VIRTUAL CYLINDER NUMBER IN 00487000
  717. * BYTES 5 AND 6 OF THE SENSE BYTE DATA, BY UNRELOCATING THE REAL 00488000
  718. * CYLINDER NUMBER GIVEN BY THE HARDWARE. 00489000
  719. * OR: 00490000
  720. * FOR A PSEUDO 2311 SIMULATED ON A 2314/2319, TO COMPUTE THE 00491000
  721. * APPROPRIATE STATUS FOR BYTE 3 OF THE SENSE BYTE DATA FROM 00492000
  722. * THE REAL SENSE DATA GIVEN BY THE HARDWARE. 00493000
  723. * 00494000
  724. * ATTRIBUTES - 00495000
  725. * 00496000
  726. * REENTRANT, RESIDENT, CALLED VIA BALR 00497000
  727. * 00498000
  728. * ENTRY POINT - 00499000
  729. * 00500000
  730. * DMKUNTRS 00501000
  731. * 00502000
  732. * ENTRY CONDITIONS - 00503000
  733. * 00504000
  734. * GPR 2 = ADDRESS OF IOERBLOK CONTINAING SENSE BYTE DATA 00505000
  735. * GPR 8 = ADDRESS OF VDEVBLOK 00506000
  736. * GPR 14 = RETURN ADDRESS 00507000
  737. * GPR 15 = ADDRESS OF DMKUNTRS 00508000
  738. * 00509000
  739. * EXIT CONDITIONS - 00510000
  740. * 00511000
  741. * APPROPRIATE VIRTUAL SENSE BYTE DATA HAS BEEN 00512000
  742. * COMPUTED AND STORED IN THE IOERBLOK SENSE DATA; 00513000
  743. * AND A FLAG-BIT IS SET INDICATING IT HAS BEEN DONE. 00514000
  744. * 00515000
  745. * CALLS TO OTHER ROUTINES - 00516000
  746. * 00517000
  747. * NONE 00518000
  748. * 00519000
  749. * EXTERNAL REFERENCES - 00520000
  750. * 00521000
  751. * NONE 00522000
  752. * 00523000
  753. * TABLES / WORK AREAS - 00524000
  754. * 00525000
  755. * BALRSAVE USED TO SAVE NEEDED REGISTERS 00526000
  756. EJECT 00527000
  757. * REGISTER USAGE - 00528000
  758. * 00529000
  759. * GPR 0-2 = WORK REGISTERS 00530000
  760. * GPR 8 = ADDRESS OF VDEVBLOK 00531000
  761. * GPR 11 = ADDRESS OF USER'S VMBLOK 00532000
  762. * GPR 14 = RETURN REGISTER 00533000
  763. * GPR 15 = ADDRESSABILITY 00534000
  764. * 00535000
  765. * OTHER REGISTERS ARE NOT USED 00536000
  766. * 00537000
  767. * NOTES - 00538000
  768. * 00539000
  769. * NONE 00540000
  770. * 00541000
  771. * OPERATION - 00542000
  772. * 00543000
  773. * 1. CHECKS IF FLAGBIT (IOERCYLR IN IOERFLG2) IN IOERBLOK 00544000
  774. * IS ALREADY SET (EXIT IMMEDIATELY IF YES). IF NOT, SETS 00545000
  775. * THE FLAG INDICATING THE SENSE DATA HAS BEEN ADJUSTED. 00546000
  776. * 00547000
  777. * 2. SAVES REGISTERS 0-2 (IN BALRSAVE); POINTS TO IOERDATA SENSE 00548000
  778. * DATA IN IOERBLOK, INDICATES THAT AT LEAST 7 SENSE BYTES ARE 00549000
  779. * AVAILABLE, AND CALLS 'UNTRSREL' INTERNAL SUBROUTINE (VIA 00550000
  780. * GPR 2) TO ADJUST THE SENSE BYTES (SEE STEP 3 ETC). THEN 00551000
  781. * RESTORES REGISTERS 0-2 AND RETURNS TO CALLER VIA GPR 14. 00552000
  782. * 00553000
  783. * 3. UNTRSREL SUBROUTINE (CALLED BY EITHER DMKUNTFR OR DMKUNTRS) 00554000
  784. * CHECK WHETHER DEVICE IS 3330/3340/3350/2305 (STEP 4) OR 00555000
  785. * PSEUDO 2311 (STEP 5). 00556000
  786. * 00557000
  787. * 4. FOR 3330/3340/3350/2305, CHECKS BYTE COUNT; IF LESS THAN 7, 00558000
  788. * EXITS IMMEDIATELY TO CALLER. IF AT LEAST 7 SENSE BYTES 00559000
  789. * ARE AVAILABLE, OBTAINS CYLINDER NUMBER FROM BYTES 5 AND 00560000
  790. * 6 OF THE REAL SENSE DATA, SUBTRACTS THE VIRTUAL RELOCATION 00561000
  791. * FACTOR, AND STORES THE RESULTANT VIRTUAL CYLINDER NUMBER 00562000
  792. * IN BYTES 5 AND 6 OF THE SENSE DATA. 00563000
  793. * 00564000
  794. * 5. FOR A PSEUDO 2311 SIMULATED ON A 2314/2319, CHECKS THE 00565000
  795. * BYTE COUNT; IF LESS THAN 4, EXITS IMMEDIATELY TO CALLER. 00566000
  796. * IF AT LEAST 4, COMPUTES AND STORES THE APPROPRIATE SENSE 00567000
  797. * DATA (E.G. READY ETC.) FOR SENSE BYTE 3 FROM THE REAL 00568000
  798. * 2314/2319 SENSE BYTE. 00569000
  799. *. 00570000
  800. USING DMKUNTRS,R15 NOTE R15 ADDRESSABILITY REQUIREMENT 00571000
  801. DMKUNTRS DS 0H AND THAT R14 = RETURN-REGISTER 00572000
  802. USING IOERBLOK,R2 R2 MUST POINT TO IOERBLOK 00573000
  803. TM IOERFLG2,IOERCYLR HAS THE DATA ALREADY BEEN RELOCATED ? 00574000
  804. BCR 1,R14 <BO> YES - EXIT FORTHWITH - DON'T DO IT TWICE 00575000
  805. OI IOERFLG2,IOERCYLR NO - FLAG IT AS HAVING BEEN RELOCATED 00576000
  806. STM R0,R3,BALRSAVE SAVE THE REG WE WILL USE 00577000
  807. LA R1,IOERDATA POINT AT THE ACTUAL DATA 00578000
  808. LH R0,IOERLEN GET THE LENGTH OF THE SENSE DATA 00579000
  809. DROP R2 00580000
  810. BAL R2,UNTRSREL CALL INTERNAL SUBR TO RELOCATE SENSE DATA 00581000
  811. LM R0,R3,BALRSAVE RESTORE THE REGS USED 00582000
  812. BR R14 AND EXIT. 00583000
  813. * 00584000
  814. USING VDEVBLOK,R8 R8 MUST POINT TO VIRTUAL DEVICE BLOCK 00585000
  815. UNTRSREL SR R3,R3 SET UP DEVICE INDEX REG 00586000
  816. TM VDEVTYPE,TYP2305 2305 DEVICE TYPE ? 00587000
  817. BO DATA2305 YES - BRANCH @VA04740 00588500
  818. CLI VDEVTYPE,TYP3350 3350 DEVICE TYPE ? @V304498 00589000
  819. BE UNT3340 YES -- @V304498 00590000
  820. CLI VDEVTYPE,TYP3340 3340 DEVICE TYPE ? @V2A2029 00591000
  821. BE UNT3340 YES -- @V2A2029 00592000
  822. TM VDEVTYPE,TYP3330 3330 DEVICE TYPE ? 00593000
  823. BNO CHNG2311 NO- BRANCH MUST BE A 2314 00594000
  824. L R3,VDEVREAL POINT TO THE REAL DEVICE BLOCK 00595000
  825. CLI RDEVMDL-RDEVBLOK(R3),X'0B' IS IT 3330 MOD11 ? @VA07933 00595500
  826. BE UNT3340 YES @VA07933 00596500
  827. LA R3,2 SET UP FOR A STANDARD 3330 00597000
  828. B *+8 NOT 3330 MOD11 @VA07933 00598000
  829. UNT3340 LA R3,3 SHIFT NUMBER 'CYLINDER HIGH BITS'@V304498 00599000
  830. * FOR 3330 MOD 11/3340/3350 00600000
  831. TM 7(R1),X'A0' * TEST SENSE BYTE 7 BITS 0-3 @VA04633 00601100
  832. BNZ STEP2 * TO DECODE THE FORMAT OF @VA04633 00601600
  833. TM 7(R1),X'40' * SENSE BYTES 8-23; BRANCH @VA04633 00602100
  834. BZ STEP2 * TO STEP2 IF NOT FORMAT 4 OR 5. @VA04633 00602600
  835. * SENSE INFORMATION FOR 3330/3340 IS EITHER FORMAT 4 OR FORMAT 5 00603200
  836. DATA2305 TM 0(R1),DATACHK DATA CHECK OF SOME SORT? @VA04740 00603800
  837. BZ STEP1 NO - OK TO UNRELOCATE BYTES 8-9 @VA04633 00604100
  838. TM 2(R1),CRCTABLE "CORRECTABLE" DATA CHECK ? @VA04633 00604600
  839. BO STEP2 YES - LEAVE BYTES 8-9 ALONE. @VA04633 00605100
  840. * UNRELOCATE CYLINDER NUMBER IN BYTES 8-9 FOR 3330, 3340, AND 2305 00605800
  841. STEP1 CL R0,F9 MUST HAVE 9 SENSE BYTES FOR STEP1 00607000
  842. BL STEP2 NO- BRANCH 00608000
  843. CLI VDEVTYPE,TYP3340 IS THIS A 334X? @V56BDA8 00608100
  844. BNE NOT3340A NO, SKIP SPECIAL TEST @V56BDA8 00608150
  845. LA R0,MB35AD 35MB ALTERNATE CYLINDER ADDRESS @V56BDA8 00608200
  846. TM 2(R1),MB35 35MB 3340? @V56BDA8 00608250
  847. BO *+8 YES IT IS @V56BDA8 00608300
  848. LA R0,MB70AD ELSE USE 70MB/3344 CYLINDER @V56BDA8 00608350
  849. * ADDRESS 00608400
  850. CH R0,8(,R1) PAST PRIME CYLINDER AREA? @V56BDA8 00608450
  851. BNH STEP2 YES, SKIP SENSE UPDATE @V56BDA8 00608500
  852. NOT3340A EQU * END OF ALTERNATE TRACK TEST @V56BDA8 00608550
  853. LH R0,8(,R1) GET THE CYLINDER NO FROM SENSE BYTES 8-9 00609000
  854. SH R0,VDEVRELN RELOCATE--- 00610000
  855. BM NEXT AND IF VALID--- 00611000
  856. STH R0,8(,R1) SAVE THEM. 00612000
  857. B NEXT NOW DO THE HARD ONE 00613000
  858. STEP2 CL R0,F7 IS BYTE-COUNT (IN R0) AT LEAST 7 ? 00614000
  859. BCR 4,R2 <BL> IF NOT, FORGET IT - EXIT TO CALLER. 00615000
  860. NEXT IC R0,6(,R1) GET BYTE WITH 'CYLINDER HIGH' BIT(S) 00616000
  861. SLL R0,0(R3) SHIFT THE CYLINDER HIGH BITS UP @VA06155 00617100
  862. N R0,=A(256+512) ISOLATE CAR 256 & 512; CYL HIGH BITS 00618000
  863. IC R0,5(,R1) NOW ADD IN THE LOW-ORDER 8 BITS OF CYL NO 00619000
  864. CLI VDEVTYPE,TYP3340 IS THIS A 334X? @V56BDA8 00619100
  865. BNE NOT3340B NO, SKIP SPECIAL TEST @V56BDA8 00619200
  866. CH R0,=H'696' 70MB ALTERNATE CYLINDER ADDRESS @V56BDA8 00619300
  867. BNLR R2 NOT IN PRIME DATA AREA @V56BDA8 00619400
  868. TM 2(R1),MB35 PERHAPS 35MB MODULE? @V56BDA8 00619500
  869. BZ NOT3340B NO, MUST BE A PRIMARY CYLINDER @V56BDA8 00619600
  870. CH R0,=H'348' PAST PRIME CYLINDER AREA? @V56BDA8 00619700
  871. BNLR R2 YES, SKIP SENSE UPDATE @V56BDA8 00619800
  872. NOT3340B EQU * END OF ALTERNATE TRACK TEST @V56BDA8 00619900
  873. SH R0,VDEVRELN SUBTRACT THE RELOCATION FACTOR 00620000
  874. BCR 4,R2 <BM> IF MINUS EXIT - LEAVE DATA UNTOUCHED 00621000
  875. STC R0,5(,R1) STORE THE LOW ORDER 8 BITS 00622000
  876. NI 6(R1),X'9F' RESET 'CYLINDER HIGH' BITS IN SENSE BYTE 00623000
  877. N R0,=A(256+512) ISOLATE CAR 256 & 512; CYL HIGH BITS 00624000
  878. SRL R0,0(R3) SHIFT CYL HIGH BITS BACK DOWN @VA06155 00625100
  879. LR R3,R0 MOVE THE CYLINDER HIGH BITS INTO R3 00626000
  880. EX R3,OI AND REPLACE THEN IN SENSE BYTE 6 00627000
  881. BR R2 EXIT TO MAIN ROUTINE. 00628000
  882. SPACE 2 00629000
  883. OI OI 6(R1),0 REPLACE THE CYL HIGH BITS IN THE SENSE 00632000
  884. EJECT 00633000
  885. CHNG2311 DS 0H ADJUST SENSE BYTES FOR SIMULATED 2311: 00634000
  886. CL R0,F4 IS BYTE-COUNT (IN R0) AT LEAST 4 ? 00635000
  887. BCR 4,R2 <BL> IF NOT, FORGET IT - EXIT TO CALLER. 00636000
  888. CLI 3(R1),X'40' IS THE REAL 2314/2319 READY ? 00637000
  889. BNE SNSBAD NOPE - SIMULATE NOT BUSY=READY 00638000
  890. OI 3(R1),X'88' MAKE LIKE A 2311 00639000
  891. BR R2 AND EXIT TO MAIN ROUTINE. 00640000
  892. SNSBAD XI 3(R1),X'08' NOT BUSY=READY 00641000
  893. TM 3(R1),X'40' IS THE 2314/2319 ON LINE ? 00642000
  894. BCR 14,R2 <BNO> NOPE - EXIT TO MAIN ROUTINE. 00643000
  895. OI 3(R1),X'08' YES - MARK 2311 ON LINE. 00644000
  896. BR R2 EXIT TO MAIN ROUTINE. 00645000
  897. SPACE 00646000
  898. DROP R8,R15 00647000
  899. EJECT 00648000
  900. *. 00649000
  901. * SUBROUTINE NAME 00650000
  902. * 00651000
  903. * DMKUNTIS - UNDO ISAM PATCHES TO RCWTASKS 00652000
  904. * 00653000
  905. * FUNCTION - 00654000
  906. * 00655000
  907. * FIND THE RCWTASKS THAT HAVE BEEN PATCHED TO HANDLE 00656000
  908. * OS ISAM SELF MODIFYING SEQUENCES AND PUT THEM 00657000
  909. * BACK THE WAY DMKCCW HAD THEM SO THAT 00658000
  910. * DMKUNTRN AND DMKUNTFR DONT GET UPSET 00659000
  911. * 00660000
  912. * ATTRIBUTES - 00661000
  913. * 00662000
  914. * RE-ENTRANT, RESIDENT, ENTERED FROM DMKDSPCH BY IO STACK 00663000
  915. * 00664000
  916. * ENTRY POINT - 00665000
  917. * 00666000
  918. * DMKUNTIS 00667000
  919. * 00668000
  920. * ENTRY CONDITIONS - 00669000
  921. * 00670000
  922. * R10 - IOBLOK ADDRESSING 00671000
  923. * R12 - BASE (DMKUNTIS) ADDRESSING 00672000
  924. * 00673000
  925. * EXIT CONDITIONS - 00674000
  926. * 00675000
  927. * RCWTASKS RESTORED, VIRTUAL STORAGE RESTORED 00676000
  928. * SAVE BLOCK FRETED, IOBLOK RE-STACKED FOR NORMAL IRA 00677000
  929. * 00678000
  930. * CALLS TO OTHER ROUTINES - 00679000
  931. * 00680000
  932. * DMKFRET - FRET SAVE BLOCK 00681000
  933. * DMKSTKIO - STACK IOBLOK FOR NORMAL IRA 00682000
  934. * DMKTRKFP - CHECK FOR ALTERNATE TRACK RESTART 00682100
  935. * 00683000
  936. * EXTERNAL REFERENCES - 00684000
  937. * 00685000
  938. * NONE 00686000
  939. * 00687000
  940. * TABLES WORK AREAS - 00688000
  941. * 00689000
  942. * RCWTASK - FIND ISAM WORD FOR RESTORE 00690000
  943. * SAVE BLOCK - TO RESTORE DATA 00691000
  944. * 00692000
  945. * REGISTER USAGE 00693000
  946. * 00694000
  947. * R4 - RCWTASK 00695000
  948. * R10 - IOBLOK 00696000
  949. * R12 - BASE ADDRESSING ( DMKUNTIS ) 00697000
  950. * 00698000
  951. * OTHER REGISTERS ARE USED FOR WORK AND SCRATCH 00699000
  952. EJECT 00700000
  953. * NOTES - 00701000
  954. * 00702000
  955. * NONE 00703000
  956. * 00704000
  957. * OPERATION - 00705000
  958. * 00706000
  959. * 1. FIND FIRST RCWTASK FROM IOBLOK 00707000
  960. * 2. LOCATE ISAM WORD AT END OF RCWTASK 00708000
  961. * 3. IF ISAM WORD IS NON-ZERO IT POINTS TO A SAVE BLOCK 00709000
  962. * 4. RESTORE THE RCWTASK DATA FROM SAVE BLOCK 00710000
  963. * 5. RESTORE THE VIRTUAL STORAGE DATA FROM THE SAVE BLOCK 00711000
  964. * 6. FRET THE SAVE BLOCK 00712000
  965. * 7. ADJUST THE IOBCSW ADDRESS IF THE CSW ADDRESS IS 00713000
  966. * IN VIRTUAL STORAGE INSTEAD OF RCWTASK 00714000
  967. * 8. REPEAT STEPS 3-7 FOR ALL RCWTASKS 00715000
  968. * 9. RESTORE IOBIRA TO NORMAL RETURN ( USUALLY DMKVIONT) 00716000
  969. * 10. STACK IOBLOK FOR DMKDSPCH HANDLING 00717000
  970. * 11. GOTO DMKDSPCH 00718000
  971. * 00719000
  972. *. 00720000
  973. AIF (NOT &ISAM).ENDISAM 00721000
  974. EXTRN DMKTRKFP @V56BDA8 00722100
  975. USING DMKUNTIS,R12 00723000
  976. USING IOBLOK,R10 00724000
  977. ENTRY DMKUNTIS 00725000
  978. SPACE 2 00726000
  979. DMKUNTIS TM IOBSTAT,IOBALTSK ALTERNATE CYLINDER TASK? @V56BDA8 00727100
  980. BZ NOALTCYL NO, SKIP CALL @V56BDA8 00727200
  981. CALL DMKTRKFP CHECK FOR POSSIBLE RESTART @V56BDA8 00727300
  982. NOALTCYL L R4,IOBCAW GET RCWTASK START FROM CCW START @V56BDA8 00727400
  983. LA R4,0(,R4) CLEAR HI BYTE 00728000
  984. SL R4,F16 R4 POINTS TO RCWTASK 00729000
  985. * R4 NOW POINTS TO FIRST RCWTASK 00730000
  986. FINDISM LR R3,R4 RCWTASK ADDRESS IN R3 00731000
  987. LH R15,RCWCCNT GET RCWTASK SIZE 00732000
  988. SLL R15,3 SIZE IN BYTES 00733000
  989. ALR R3,R15 POINT TO END OF RCWTASK 00734000
  990. SL R3,F4 POINT TO ISAM WORD 00735000
  991. L R0,0(,R3) LOAD ISAM WORD 00736000
  992. LTR R0,R0 TEST FOR ISAM WORD 00737000
  993. BNZ UNTISAM FIX UP VIRTUAL STORAGE AND CCW'S 00738000
  994. NXTASK L R4,RCWPNT GET NEXT RCWTASK 00739000
  995. LTR R4,R4 TEST FOR END 00740000
  996. BNZ FINDISM GO TEST NEXT RCWTASK 00741000
  997. L R0,IOBMISC GET ORIGINAL IOBIRA 00742000
  998. ST R0,IOBIRA RESTORE IOBIRA 00743000
  999. OC IOBCSW(1),IOBMISC ADD USER'S CAW KEY TO CSW @VA02130 00744000
  1000. CALL DMKSTKIO STACK FOR PROCESSING 00745000
  1001. GOTO DMKDSPCH RETURN 00746000
  1002. EJECT 00747000
  1003. UNTISAM EQU * UNDO ISAM PATCHES IN CCW STRING @VA02130 00748000
  1004. L R9,0(0,R3) ADDRESS OF THE ISMBLOK @VA02130 00749000
  1005. USING ISMBLOK,R9 . . . @VA02130 00750000
  1006. LM R7,R8,ISMRDAD ADDR OF OLD READ AND TIC CCW'S @VA02130 00751000
  1007. MVC 0(8,R7),ISMREAD RESTORE TRANSLATED READ @VA02130 00752000
  1008. MVC 0(8,R8),ISMRTIC RESTORE TRANSLATED TIC @VA02130 00753000
  1009. L R6,0(0,R7) DATA ADDRESS FROM THE READ @VA02130 00754000
  1010. LA R6,0(0,R6) STRIP OFF THE OP-CODE @VA02130 00755000
  1011. TM 4(R7),IDA INDIRECT ADDRESSING USED ? @VA02130 00756000
  1012. BO ISMIDAL YES - A LITTLE TRICKIER @VA02130 00757000
  1013. MVC 0(10,R6),ISMRBUF MOVE DATA TO VIRTUAL STORAGE@VA02130 00758000
  1014. B FRETISM CLEAN UP FOR THE NEXT TASK @VA02130 00759000
  1015. SPACE 00760000
  1016. ISMIDAL EQU * DATA IS IN TWO PIECES @VA02130 00761000
  1017. L R5,0(0,R6) FIRST IDA WORD @VA02130 00762000
  1018. LA R1,4095(0,R5) ROUND UP TO PAGE BOUNDARY @VA02130 00763000
  1019. N R1,XPAGNUM . . . @VA02130 00764000
  1020. SR R1,R5 GR1 = LENGTH IN THE FIRST PAGE @VA02130 00765000
  1021. LR R0,R5 GR0 = DATA START IN THIS PAGE @VA02130 00766000
  1022. LA R14,ISMRBUF START OF DATA IN REAL STORAGE @VA02130 00767000
  1023. LA R15,10(0) LENGTH IS ALWAYS TEN @VA02130 00768000
  1024. MVCL R0,R14 MOVE THE FIRST PIECE OF DATA @VA02130 00769000
  1025. LR R1,R15 SET GR1 = RESIDUAL LENGTH @VA02130 00770000
  1026. L R0,4(0,R6) ADDRESS FROM SECOND IDA WORD @VA02130 00771000
  1027. MVCL R0,R14 MOVE THE REMAINING PIECE @VA02130 00772000
  1028. SPACE 00773000
  1029. FRETISM EQU * CHECK FOR CSW ADDR CONFUSION @VA02130 00774000
  1030. LA R5,ISMNTIC POINT TO PATCHED-IN TIC CCW @VA02130 00775000
  1031. CLM R5,7,IOBCSW+1 IS THAT WHERE WE STOPPED ? @VA02130 00776000
  1032. BNE EXITISM NO -- NO FIXUP REQUIRED @VA02130 00777000
  1033. L R5,ISMRTIC ADDRESS OF SEEK IN 2ND RCWTASK @VA02130 00778000
  1034. LA R5,8(0,R5) POINT PAST IT FOR CSW ADDRESS @VA02130 00779000
  1035. STCM R5,7,IOBCSW+1 PUT THE RIGHT ADDRESS HERE @VA02130 00780000
  1036. EXITISM EQU * RETURN ISMBLOK TO FREE STORAGE @VA02130 00781000
  1037. LA R0,ISMSIZE SIZE IN DOUBLE-WORDS @VA02130 00782000
  1038. LR R1,R9 STARTING ADDRESS @VA02130 00783000
  1039. CALL DMKFRET . . . @VA02130 00784000
  1040. DROP R9 @VA02130 00785000
  1041. SR R0,R0 CLEAR 00786000
  1042. ST R0,0(,R3) CLEAR ISAM WORD 00787000
  1043. B NXTASK LOOP FOR ALL RCWTASKS 00788000
  1044. EJECT 00789000
  1045. ISMBLOK DSECT , WORK AREA FOR ISAM CCW STRINGS @VA02130 00790000
  1046. SPACE 00791000
  1047. ISMRDAD DS 1F ADDRESS OF THE ISAM READ CCW @VA02130 00792000
  1048. ISMTCAD DS 1F ADDRESS OF TIC TO NEXT RCWTASK @VA02130 00793000
  1049. DS XL7 (PADDING) @VA02130 00794000
  1050. ISMRBUF DS 1X START OF 10-BYTE READ BUFFER @VA02130 00795000
  1051. ISMVARG DS XL8 SEEK ARGUMENTS FOR FOLLOWING CCW @VA02130 00796000
  1052. ISMODSK DS 1D CCW WHICH WILL BE MODIFIED @VA02130 00797000
  1053. ISMNTIC DS 1D TIC TO RE-JOIN ORIGINAL STRING @VA02130 00798000
  1054. ISMREAD DS 1D SAVE AREA FOR ORIGINAL READ CCW @VA02130 00799000
  1055. ISMRTIC DS 1D SAVE AREA FOR ORIGINAL TIC CCW @VA02130 00800000
  1056. SPACE 00801000
  1057. ISMSIZE EQU (*-ISMBLOK)/8 BLOCK SIZE IN DOUBLE-WORDS @VA02130 00802000
  1058. SPACE 00803000
  1059. DMKUNT CSECT , RE-ENTER PROGRAM CSECT @VA02130 00804000
  1060. SPACE 00805000
  1061. .ENDISAM ANOP 00806000
  1062. SPACE 00807000
  1063. LTORG 00808000
  1064. SPACE 00808100
  1065. * EQUATE(S) NOT DEFINED ELSEWHERE: 00808200
  1066. CRCTABLE EQU X'40' "CORRECTABLE" DATA-CHECK @VA04633 00808300
  1067. SPACE 1 00808400
  1068. MB35AD EQU 348 3340/44 35MB ALT CYLINDER ADD @V56BDA8 00808500
  1069. MB70AD EQU 696 3340/44 70MB ALT CYLINDER ADD @V56BDA8 00808600
  1070. MB35 EQU X'01' 3340/44 35MB @V56BDA8 00808700
  1071. EJECT 00809000
  1072. COPY SAVE 00810000
  1073. COPY VMBLOK 00811000
  1074. COPY IOBLOKS 00812000
  1075. COPY CORE @V304735 00813000
  1076. COPY VBLOKS 00814000
  1077. COPY IOER 00815000
  1078. COPY EQU 00816000
  1079. COPY DEVTYPES 00817000
  1080. PSA 00818000
  1081. COPY RBLOKS 00819000
  1082. END 00820000