Table of Contents

DMKDRD Source

References

Source Listing

DMKDRD.ASSEMBLE.txt
  1. DRD TITLE 'DMKDRD (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 VALIDATE SEQUENCING 00002000
  3. COPY OPTIONS 00003000
  4. COPY LOCAL 00004000
  5. *. 00005000
  6. * MODULE NAME - 00006000
  7. * 00007000
  8. * DMKDRD 00008000
  9. * 00009000
  10. * CONTENTS - 00010000
  11. * 00011000
  12. * DMKDRDER - DIAGNOSE INTERFACE TO INPUT SPOOL FILES 00012000
  13. * DMKDRDMP - DIAGNOSE READ OF SYSTEM DUMP SPOOL FILE 00013000
  14. * DMKDRDSY - DIAGNOSE READ OF SYSTEM SYMBOL TABLE 00014000
  15. * DMKDRDDD - DELETE SYSTEM DUMP SPOOL FILE 00015000
  16. *. 00016000
  17. SPACE 2 00017000
  18. DMKDRD START 00018000
  19. USING SAVEAREA,R13 00019000
  20. USING DMKDRD,R12 00020000
  21. USING VMBLOK,R11 00021000
  22. USING SFBLOK,R10 00022000
  23. USING VSPLCTL,R9 00023000
  24. USING VDEVBLOK,R8 00024000
  25. USING PSA,0 00025000
  26. SPACE 2 00026000
  27. EXTRN DMKSCNVU,DMKRPAGT,DMKVSPCR 00027000
  28. EXTRN DMKSYSOW,DMKHVCPC,DMKPGTSD 00028000
  29. EXTRN DMKPSASP CHECK FOR STORAGE PROTECTION @V202232 00029000
  30. EXTRN DMKSYM CP SYSTEM SYMBOL TABLE 00030000
  31. EXTRN DMKPGTVG,DMKPGTVR @V293598 00031000
  32. EJECT 00032000
  33. *. 00033000
  34. * SUBROUTINE NAME - 00034000
  35. * 00035000
  36. * DMKDRDER 00036000
  37. * 00037000
  38. * FUNCTION - 00038000
  39. * 00039000
  40. * TO MANIPULATE INPUT SPOOL FILES VIA VIRTUAL DIAGNOSE 00040000
  41. * CODE X'0014'. 00041000
  42. * 00042000
  43. * ATTRIBUTES - 00043000
  44. * 00044000
  45. * RE-ENTRANT, PAGEABLE, CALLED VIA SVC FROM DMKHVCAL 00045000
  46. * 00046000
  47. * ENTRY POINT - 00047000
  48. * 00048000
  49. * DMKDRDER 00049000
  50. * 00050000
  51. * ENTRY CONDITIONS - 00051000
  52. * 00052000
  53. * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00053000
  54. * GPR 12 = ADDRESS OF DMKDRDER 00054000
  55. * GPR 11 = ADDRESS OF VMBLOK 00055000
  56. * GPR 6 = ADDRESS OF DIAGNOSE 'R2' VALUE 00056000
  57. * GPR 5 = ADDRESS OF DIAGNOSE 'R1' VALUE 00057000
  58. * 00058000
  59. * EXIT CONDITIONS - 00059000
  60. * 00060000
  61. * GPRS 1,3-15 UNCHANGED 00061000
  62. * GPR 2 = 0 - CONDITION CODE IS SET FOR VIRTUAL MACHINE 00062000
  63. * GPR 2 > 0 - SIMULATE PROGRAM INTERRUPT FOR VM, AND 00063000
  64. * AND GPR 0 = INTERRUPT CODE FOR SIMULATED PROGRAM INTERRUPT 00064000
  65. * 00065000
  66. * CALLS TO OTHER ROUTINES - 00066000
  67. * 00067000
  68. * DMKSCNVU - TO LOCATE VIRTUAL DEVICE BLOCKS 00068000
  69. * DMKRPAGT - TO READ SPOOL-FILE BUFFER PAGES 00069000
  70. * DMKVSPCR - TO CLOSE AN ACTIVE SPOOL FILE 00070000
  71. * DMKFREE - TO OBTAIN FREE STORAGE 00071000
  72. * DMKPTRAN - TO BRING IN VIRTUAL STORAGE PAGES 00072000
  73. * DMKPSASP - TO CHECK FOR STORAGE PROTECTION 00073000
  74. * 00074000
  75. * EXTERNAL REFERENCES - 00075000
  76. * 00076000
  77. * DMKHVCPC - TABLE OF PAGES PER CYLINDER, DASD DEVICES 00077000
  78. * DMKSYM - SYSTEM SYMBOL TABLE CSECT 00078000
  79. * 00079000
  80. EJECT 00080000
  81. * TABLES / WORK AREAS - 00081000
  82. * 00082000
  83. * VDEVBLOK, VSPLCTL, SFBLOK, SPLINK 00083000
  84. * 00084000
  85. * REGISTER USAGE - 00085000
  86. * 00086000
  87. * GPRS 14, 15 EXTERNAL LINKAGE REGISTERS 00087000
  88. * GPR 13 = SAVEAREA ADDRESSABILITY 00088000
  89. * GPR 12 = MODULE BASE REGISTER 00089000
  90. * GPR 11 = VMBLOK ADDRESSABILITY 00090000
  91. * GPR 10 = SFBLOK ADDRESSABILITY 00091000
  92. * GPR 9 = VSPLCTL ADDRESSABILITY 00092000
  93. * GPR 8 = VDEVBLOK ADDRESSABILITY 00093000
  94. * GPR 7 = WORK REGISTER 00094000
  95. * GPR 6 = ADDRESS OF DIAGNOSE 'R2' VALUE 00095000
  96. * GPR 5 = ADDRESS OF DIAGNOSE 'R1' VALUE 00096000
  97. * GPRS 0-4 WORK REGISTERS 00097000
  98. * 00098000
  99. * OPERATION - 00099000
  100. * 00100000
  101. * DIAGNOSE CODE X'0014', PROCESSED BY DMKDRDER, REQUIRES 00101000
  102. * THREE REGISTER VALUES FROM THE VIRTUAL MACHINE ISSUING 00102000
  103. * THE DIAGNOSE INSTRUCTION, AS FOLLOWS: 00103000
  104. * 'R1' = DEPENDS ON FUNCTION SUB-CODE 00104000
  105. * 'R2' = VIRTUAL ADDRESS OF A SPOOL READER DEVICE 00105000
  106. * 'R2+1' = FUNCTION SUB-CODE X'000' TO X'018' 00106000
  107. * 00107000
  108. * (N.B. - SEE BELOW FOR A DESCRIPTION OF AN ADDITIONAL 00108000
  109. * SUB-CODE, X'FFF', FOR WHICH THE REGISTER VALUE 'R2' IS 00109000
  110. * A SPOOL FILE ID NUMBER, RATHER THAN THE VIRTUAL ADDRESS 00110000
  111. * OF A SPOOL READER DEVICE.) 00111000
  112. * 00112000
  113. * THE SUB-CODE IS FIRST EXAMINED FOR VALIDITY, AND A SPECI- 00113000
  114. * FICATION EXCEPTION PROGRAM INTERRUPT IS GENERATED IF THE 00114000
  115. * CODE IS UNRECOGNIZED OR NOT A MULTIPLE OF 4. SECONDLY, THE 00115000
  116. * VIRTUAL DEVICE ADDRESS IS VALIDATED AS TO AVAILABILITY, 00116000
  117. * CORRECT DEVICE TYPE, ETC. A VIRTUAL CONDITION CODE 3 IS 00117000
  118. * SET WITH THE FOLLOWING ERROR CODES IN THE USER'S 'R2+1': 00118000
  119. * CODE = 4 => DEVICE ADDRESS INVALID 00119000
  120. * CODE = 8 => INVALID DEVICE TYPE 00120000
  121. * CODE = 12 => DEVICE BUSY WITH 'SIO' I/O 00121000
  122. * CODE = 16 => FATAL PAGING I/O ERROR 00122000
  123. * CODE = 20 => DIAGNOSE 14,BUT PAGE IS ALREADY LOCKED FOR I/O 00122100
  124. * 00123000
  125. * IF ALL THE ABOVE CHECKS ARE PASSED, THE FUNCTION SUB-CODE 00124000
  126. * IS DECODED FOR THE FUNCTIONAL SUBROUTINES, AS FOLLOWS: 00125000
  127. * 00126000
  128. EJECT 00127000
  129. * CODE = X'000' READ NEXT SPOOL BUFFER (ACTIVE FILE) 00128000
  130. * 'R1' = START ADDRESS OF FULL-PAGE VIRTUAL BUFFER 00129000
  131. * 'R2' = VIRTUAL SPOOL READER ADDRESS 00130000
  132. * 00131000
  133. * THE SPECIFIED DEVICE IS CHECKED FOR AN ALREADY ACTIVE FILE, 00132000
  134. * AND IF THERE IS ONE, THE NEXT FULL-PAGE BUFFER IS MADE 00133000
  135. * AVAILABLE TO THE VIRTUAL MACHINE VIA A CALL TO DMKRPAGT. 00134000
  136. * IF THERE IS NO ACTIVE FILE, THE CHAIN OF READER FILES IS 00135000
  137. * SEARCHED FOR A FILE FOR THE CALLING USER AND CONNECTED TO 00136000
  138. * THE VIRTUAL DEVICE FOR FURTHER READING. IF NO FILE 00137000
  139. * IS FOUND, VIRTUAL CONDITION CODE 2 IS SET. WHEN THE END 00138000
  140. * OF AN ACTIVE FILE IS REACHED, THE DEVICE STATUS SETTINGS 00139000
  141. * ARE TESTED FOR 'SPOOL CONTINUOUS'. IF NOT SET, VIRTUAL 00140000
  142. * CONDITION CODE 1 IS SET, INDICATING END OF FILE. IF THE 00141000
  143. * DEVICE IS SET FOR CONTINUOUS INPUT, THE ACTIVE FILE IS 00142000
  144. * EXAMINED TO DETERMINE IF IT IS A MULTIPLE-COPY FILE. IF SO, 00143000
  145. * READING IS RESTARTED AT THE BEGINNING OF THE FILE. IF NOT, 00144000
  146. * THE FILE IS CLOSED VIA DMKVSPCR AND THE READER CHAIN IS 00145000
  147. * SEARCHED FOR ANOTHER INPUT FILE. IF NO OTHER FILE IS FOUND, 00146000
  148. * VIRTUAL CONDITION CODE 1 IS SET. 00147000
  149. * 00148000
  150. * CODE = X'004' READ NEXT PRINT SPOOL FILE BLOCK (SFBLOK) 00149000
  151. * 'R1' = VIRTUAL ADDRESS OF A 13-DBL-WD BUFFER 00150000
  152. * 'R2' = VIRTUAL SPOOL READER ADDRESS 00151000
  153. * 00152000
  154. * IF THE SPECIFIED DEVICE IS IN USE VIA DIAGNOSE, THE VSPLCTL 00153000
  155. * BLOCK IS CHECKED TO SEE IF THIS IS A REPEATED CALL FOR 00154000
  156. * PRINTER SFBLOKS. IF YES, THEN THE CHAIN SEARCH CONTINUES 00155000
  157. * FROM THE POINT WHERE THE LAST SFBLOK WAS GIVEN TO THE VM. 00156000
  158. * IN THIS CASE, CC = 1 IS SET WHEN THERE ARE NO MORE PRINT 00157000
  159. * FILES. IF THIS IS THE FIRST CALL FOR AN SFBLOK, OR IF 00158000
  160. * THERE HAVE BEEN INTERVENING CALLS FOR FILE READING, THE 00159000
  161. * SPOOL INPUT CHAIN IS SEARCHED FROM THE BEGINNING, AND CC = 2 00160000
  162. * IS SET IF NO FILES ARE FOUND. 00161000
  163. * IF A SPOOL FILE IS ALREADY ATTACHED TO THE SPECIFIED @VA12474 00161200
  164. * VIRTUAL READER, CC = 3, RC = 12 IS SET. @VA12474 00161250
  165. * NOTE: THE VIRTUAL BUFFER SPECIFIED VIA 'R1' MUST NOT CROSS A 00162000
  166. * PAGE BOUNDARY OR A SPECIFICATION EXCEPTION WILL RESULT. 00163000
  167. * 00164000
  168. * CODE = X'008' READ NEXT PUNCH SPOOL FILE BLOCK (SFBLOK) 00165000
  169. * 'R1' = VIRTUAL ADDRESS OF A 13-DBL-WD BUFFER 00166000
  170. * 'R2' = VIRTUAL SPOOL READER ADDRESS 00167000
  171. * PROCESSING FOR CODE 8 IS THE SAME AS FOR CODE 4, EXCEPT 00168000
  172. * THAT ONLY CARD-IMAGE INPUT FILES ARE PROCESSED. 00169000
  173. * NOTE: FOR BOTH CODES 4 AND 8, THE FORMAT DEFINITION FOR A VM/370 00170000
  174. * SFBLOK CAN BE FOUND IN THE COPY FILE 'SPOOL' IN THE SYSTEM 00171000
  175. * MACRO LIBRARY. 00172000
  176. * 00173000
  177. EJECT 00174000
  178. * CODE = X'00C' SELECT SPECIFIC FILE BY FILE ID (SFBFILID) 00175000
  179. * 'R1' = FILE IDENTIFIER OF REQUESTED FILE 00176000
  180. * 00177000
  181. * THE SPOOL INPUT CHAIN IS SEARCHED FOR THE FILE SPECIFIED. 00178000
  182. * IF IT IS NOT FOUND, CC = 2 IS SET. IF IT IS FOUND, THE FILE 00179000
  183. * IS MOVED TO THE HEAD OF THE CHAIN SUCH THAT IT WILL BE 00180000
  184. * THE NEXT FILE PROCESSED BY ANY OF THE OTHER FUNCTIONS. 00181000
  185. * 00182000
  186. * CODE = X'010' REPEAT ACTIVE FILE 'NNN' TIMES 00183000
  187. * 'R1' = NEW COPY COUNT FOR THE ACTIVE FILE 00184000
  188. * 'R2' = VIRTUAL SPOOL READER ADDRESS 00185000
  189. * 00186000
  190. * THE SPECIFIED DEVICE IS CHECKED FOR AN ACTIVE FILE. IF NO 00187000
  191. * FILE IS ACTIVE, CC = 2 IS SET. OTHERWISE, THE COPY CPUNT 00188000
  192. * FOR THE FILE IS SET TO THE SPECIFIED VALUE, WITH A MAXIMUM 00189000
  193. * OF 255. IF THE SPECIFIED COUNT IS NOT POSITIVE, A SPECIFI- 00190000
  194. * CATION EXCEPTION IS GENERATED. IF THE COUNT IS GREATER THAN 00191000
  195. * 255, IT IS ADJUSTED TO MODULO 256. 00192000
  196. * 00193000
  197. * CODE = X'014' RESTART ACTIVE FILE AT BEGINNING 00194000
  198. * 'R1' = START ADDRESS OF VIRTUAL FULL-PAGE BUFFER 00195000
  199. * 'R2' = VIRTUAL SPOOL READER ADDRESS 00196000
  200. * 00197000
  201. * THE SPECIFIED DEVICE IS CHECKED FOR AN ACTIVE FILE. IF NO 00198000
  202. * ACTIVE FILE IS FOUND, CC = 2 IS SET. OTHERWISE, THE VSPLCTL 00199000
  203. * POINTERS ARE RESET TO THE BEGINNING OF THE FILE AND THE 00200000
  204. * FIRST PAGE RECORD IS GIVEN TO THE USER AS FOR CODE 0. 00201000
  205. * 00202000
  206. * CODE = X'018' BACKSPACE ONE RECORD IN ACTIVE FILE 00203000
  207. * 'R1' = START ADDRESS OF VIRTUAL FULL-APGE BUFFER 00204000
  208. * 'R2' = VIRTUAL SPOOL READER ADDRESS 00205000
  209. * 00206000
  210. * THE SPECIFIED DEVICE IS CHECKED FOR AN ACTIVE FILE. IF NO 00207000
  211. * ACTIVE FILE IS FOUND, CC = 2 IS SET. OTHERWISE, THE FILE 00208000
  212. * IS BACKSPACED ONE RECORD AND THE RECORD IS GIVEN TO THE 00209000
  213. * USER AS IN CODE 0. IF THE FILE IS ALREADY POSITIONED AT 00210000
  214. * THE FIRST RECORD, THE FIRST RECORD IS GIVEN TO THE USER. 00211000
  215. * 00212000
  216. * CODE = X'01C' READ NEXT MONITOR SPOOL FILE BLOCK 00212010
  217. * 'R1' = VIRTUAL ADDRESS OF 13-DBL-WD BUFFER 00212020
  218. * 'R2' = VIRTUAL READER ADDRESS 00212030
  219. * PROCESSING FOR CODE 1C IS THE SAME AS FOR 8 EXCEPT 00212040
  220. * THAT MONITOR SPOOL FILES ONLY ARE HANDLED (AS 00212050
  221. * DISTINGUISHED BY THE SFPFLAG2 SFPMON. 00212060
  222. * 00212070
  223. * CODE = X'020' READ SELECTED MONITOR SPOOL FILE BLOCK 00212080
  224. * 'R1' = FILE IDENTIFIER OF SELECTED FILE 00212090
  225. * 'R2' = VIRTUAL SPOOL READER ADDRESS 00212100
  226. * PROCESSING FOR CODE 20 IS THE SAME AS FOR CODE C 00212110
  227. * EXCEPT THAT ONLY SPOOL FILES WITH SFBFLAG2 SET TO 00212120
  228. * SFBMON ARE HANDLED. 00212130
  229. * 00212140
  230. * CODE = X'FFF' SUCCESSOR FILE DESCRIPTOR 00213000
  231. * 'R1' = VIRTUAL ADDRESS OF A 252 BYTE BUFFER 00214000
  232. * 'R2' = SPOOL FILE ID NUMBER 00215000
  233. * 00216000
  234. * IF 'R2' IS NON-ZERO THE SPOOL INPUT CHAIN IS SEARCHED FOR 00217000
  235. * A FILE WITH A MATCHING ID NUMBER; IF NONE IS FOUND, OR IF 00218000
  236. * ONE IS FOUND WHICH IS OWNED BY A DIFFERENT VIRTUAL MACHINE, 00219000
  237. * CC = 2 IS SET. THE CHAIN SEARCH IS CONTINUED FROM THE 00220000
  238. * FILE WHICH WAS FOUND, OR FROM THE ANCHOR IF 'R2' IS ZERO, 00221000
  239. * FOR THE NEXT FILE OWNED BY THE CALLER, INDEPENDENT OF FILE 00222000
  240. * TYPE, CLASS, 'INUSE' FLAG, ETC. IF NONE IS FOUND, CC = 1 00223000
  241. * IS SET. OTHERWISE, THE SFBLOK AND THE FIRST RECORD OF THE 00224000
  242. * FILE (GENERALLY, THE 'TAG') ARE COPIED TO THE CALLER'S 00225000
  243. * VIRTUAL STORAGE BUFFER. 00226000
  244. SPACE 00226010
  245. * WARNING: SINCE THIS SUBCODE DOES NOT CONSIDER THE STATE@VA14052 00226020
  246. * OF THE "INUSE" FLAG, IT IS POSSIBLE FOR THE @VA14052 00226030
  247. * FILE FOUND TO BE CHANGED, PURGED, ETC BEFORE DMKDRD @VA14052 00226040
  248. * FINISHES PROCESSING AND RETURNS THE ABOVE DATA IN A @VA14052 00226050
  249. * BUFFER. AS A RESULT, THE CONTENTS OF THE BUFFER MAY @VA14052 00226060
  250. * NOT BE VALID DATA; THE FILE MAY HAVE BEEN CHANGED OR @VA14052 00226070
  251. * DELETED. 00226080
  252. *. 00227000
  253. EJECT 00228000
  254. DC CL8'DMKDRD' PAGEABLE MODULE IDENTIFIER 00229000
  255. SPACE 00230000
  256. DMKDRDER RELOC , SPECIAL SPOOL-BLOCK READER 00231000
  257. SPACE 2 00232000
  258. NI VMPSW+4,X'CF' SET CONDITION CODE = 0 00233000
  259. NI VMPSW+2,X'CF' SET EC-MODE CONDITION CODE = 0 @VA04236 00233100
  260. MVI SAVEWRK6,X'00' SET TO SKIP DUMP FILES 00234000
  261. MVI SAVEWRK6+1,X'00' NULL OUT MONITOR INDICATOR @V50A2B5 00234100
  262. TM SAVER6+3,X'07' DBL-WD ALIGNED = EVEN REGISTER 00235000
  263. BNZ DRDSPEC NOPE - ERROR 00236000
  264. L R4,4(,R6) 'R2'+1 = FUNCTION SUB-CODE 00237000
  265. LTR R4,R4 RUN THROUGH VALIDITY CHECKING 00238000
  266. BM DRDSPEC SPECIFICATION ERROR 00239000
  267. CH R4,=AL2(DRDMAXC) CHECK AGAINST MAXIMUM 00240000
  268. BH DRDHIGH CHECK HIGH SUB-CODE SEQUENCE @V293598 00241000
  269. TM 7(R6),X'03' CHECK ALIGNMENT 00242000
  270. BNZ DRDSPEC NO GOOD 00243000
  271. DRDEVAL EQU * VALIDATE DEVICE ADDRESS SPECIFIED 00244000
  272. L R1,0(,R6) VIRTUAL READER ADDRESS 00245000
  273. MAXDV R15 GET HIGHEST VIRTUAL DEVICE 00246000
  274. CLR R1,R15 CHECK ITS VALIDITY 00247000
  275. BH DRDEVIC INVALID ADDRESS 00248000
  276. CALL DMKSCNVU FIND VDEVBLOK 00251000
  277. BNZ DRDEVIC NOT FOUND 00252000
  278. CLI VDEVTYPC,CLASURI SPOOL INPUT DEVICE? 00253000
  279. BNE DRDTYPE NO - INVALID DEVICE TYPE 00254000
  280. TM VDEVTYPE,TYPRDR IS IT ALSO A CARD-READER? 00255000
  281. BZ DRDTYPE NO - DON'T SUPPORT PAPER TAPE, ETC. 00256000
  282. * FUNCTION SUB-CODE IS STILL IN GPR 4 00257000
  283. B DRDECOD(R4) GO WHERE IT'S AT 00258000
  284. DRDECOD EQU * FUNCTION SELECTION TABLE 00259000
  285. B NEXTPAG '000' - GET NEXT DATA BUFFER 00260000
  286. B PRTSFCB '004' - GET NEXT PRINTER SFBLOK 00261000
  287. B PCHSFCB '008' - GET NEXT PUNCH SFBLOK 00262000
  288. B SELECTF '00C' - SELECT SPECIFIC FILE 00263000
  289. B REPEAT '010' - REPEAT NN TIMES 00264000
  290. B REREAD '014' - RESTART AT BEGINNING 00265000
  291. B BACKSPF '018' - BACKSPACE ONE PAGE 00266000
  292. B PCHSFCB1 '01C' - GET MONITOR PU FILE @V50A2B5 00266100
  293. B NEXTPAG1 '020' - GET NEXT DATA BUFFER @V50A2B5 00266200
  294. DRDMAXC EQU *-DRDECOD-4 MAXIMUM DEFINED CODE 00267000
  295. PCHSFCB1 MVI SAVEWRK6+1,X'44' INDICATE MONITOR DIAGNOSE @V50A2B5 00267100
  296. B PCHSFCB GO TO NORMAL LOCATION @V50A2B5 00267200
  297. SPACE 1 00267300
  298. NEXTPAG1 MVI SAVEWRK6+1,X'44' INDICATE MONITOR DIAGNOSE @V50A2B5 00267400
  299. B NEXTPAG GO TO NORMAL LOCATION @V50A2B5 00267500
  300. EJECT 00268000
  301. DRDHIGH LA R1,X'FFF' ONLY LEGAL HIGH SUB-CODE @V293598 00269000
  302. CLR R4,R1 IS THIS SUB-CODE X'FFF' @V293598 00270000
  303. BE SUCCESS IT IS INDEED - DO SUCCESSOR @V293598 00271000
  304. B DRDSPEC OTHERWISE INVALID SUB-CODE @V293598 00272000
  305. DRDEXIT EQU * SUCCESSFUL RETURN 00273000
  306. SLR R1,R1 RETURN CODE ZERO 00274000
  307. DRDERRX EQU * RETURN WITH ERROR 00275000
  308. ST R1,SAVER2 RETURN CODE BACK VIA GPR 2 00276000
  309. EXIT , RETURN TO CALLER 00277000
  310. SPACE 2 00278000
  311. ADDCHEK EQU * EXAMINE ADDRESS FOR VALIDITY 00279000
  312. LA R1,0(,R1) 24 BITS ONLY 00280000
  313. LRA R0,0(,R1) IS IT A VALID ADDRESS ? @V304635 00281000
  314. BC 8+2,ADDCHEK1 CONTINUE IF NOT A SEG EXCEPTION @V408246 00282100
  315. * NOTE: NOBODY ELSE IN DRD USERS SAVEWRK4 AND SAVEWRK5 00282200
  316. ST R2,SAVEWRK4 SAVE REG. DESTROYED BY PARM PASS @V408246 00282300
  317. ST R14,SAVEWRK5 SAVE RETURN REG. NOT SAVED BY PTR@V408246 00282400
  318. CALL DMKPTRAN,PARM=DEFER OTHERWISE LET PTRAN HANDLE @V408246 00282500
  319. L R2,SAVEWRK4 RESTORE @V408246 00282600
  320. L R14,SAVEWRK5 @V408246 00282700
  321. BC 2,DRDADDR ADDRESSING ERROR @V408246 00282800
  322. ADDCHEK1 DS 0H @V408246 00282900
  323. LA R15,0(R2,R1) ADDRESS OF END OF FIELD 00283000
  324. BCTR R15,0 ...PRECISELY 00284000
  325. L R0,XPAGNUM PAGE NUMBER MASK 00285000
  326. NR R15,R0 ENDING PAGE ADDRESS 00286000
  327. NR R0,R1 STARTING PAGE ADDRESS 00287000
  328. CLR R0,R15 DOES IT CROSS A PAGE BOUNDARY ? 00288000
  329. BNE DRDSPEC YES - ERROR EXCEPTION 00289000
  330. BR R14 RETURN - EVERYTHING IS O.K. 00290000
  331. SPACE 1 00290500
  332. SETCOD1 LA R2,X'10' ESTABLISH CONDITION CODE = 1 @VA04236 00291000
  333. B CCSET GO SET CONDITION CODE @VA04236 00291500
  334. SPACE 1 00292000
  335. SETCOD2 LA R2,X'20' ESTABLISH CONDITION CODE = 2 @VA04236 00292500
  336. B CCSET GO SET CONDITION CODE @VA04236 00293000
  337. SPACE 1 00293500
  338. SETCOD3 L R2,SAVER6 GPR6 AT ENTRY HAS CODE-REG NUMBER@VA04236 00294000
  339. ST R1,4(,R2) PASS ERROR IN SUBCODE-REG @VA04236 00294500
  340. SETCC3 DS 0H @VA08925 00294750
  341. LA R2,X'30' ESTABLISH CONDITION CODE = 3 @VA04236 00295000
  342. CCSET LA R1,VMPSW+4 CC POSITION FOR BC-MODE PSW @VA04236 00295500
  343. TM VMESTAT,VMEXTCM IS THIS VM IN EC-MODE? @VA04236 00296000
  344. BZ *+8 NO. POSITIONING IS PROPER @VA04236 00296500
  345. LA R1,VMPSW+2 CC POSITION FOR EC-MODE PSW @VA04236 00297000
  346. EX R2,DRDSETCC SET CONDITION CODE IN PSW @VA04236 00297500
  347. B DRDEXIT EXIT @VA04236 00298000
  348. SPACE 1 00298500
  349. DRDSETCC OI 0(R1),*-* EXECUTED CONDITION CODE SETTER @VA04236 00299000
  350. SPACE 1 00299500
  351. DRDIOER EQU * FATAL I/O ERROR FROM DMKRPAGT 00302000
  352. LA R1,16(0,0) RETURN CODE = 16 00303000
  353. B SETCOD3 GO SET CC = 3 00304000
  354. DRDBUSY EQU * DEVICE IS BUSY 00305000
  355. LA R1,12(0) ERROR CODE 00306000
  356. B SETCOD3 SET CC = 3 00307000
  357. DRDEVIC EQU * INVALID OR NONEXISTENT ADDRESS 00308000
  358. LA R1,4(0) CODE BACK TO USER 00309000
  359. B SETCOD3 SET CC = 3 00310000
  360. DRDTYPE EQU * INVALID DEVICE TYPE 00311000
  361. LA R1,8(0) CODE BACK TO USER 00312000
  362. B SETCOD3 SET CC = 3 00313000
  363. DRDLOCK EQU * DIAG.14 AND PAGE LOCKED FOR I/O @VA07519 00313100
  364. LA R1,20(0) RETURN CODE = 20 @VA07519 00313200
  365. B SETCOD3 SET CC = 3 @VA07519 00313300
  366. DRDSPEC EQU * SPECIFICATION INTERRUPT 00314000
  367. LA R1,X'06' INTERRUPT CODE 00315000
  368. ST R1,SAVER0 BACK TO DMKHVC IN GPR 0 00316000
  369. B DRDERRX ...WITH GPR 2 ALSO NON-ZERO 00317000
  370. DRDADDR EQU * ADDRESSING EXCEPTION 00318000
  371. LA R1,X'05' INTERRUPT CODE 00319000
  372. ST R1,SAVER0 BACK IN GPR 0... 00320000
  373. B DRDERRX ...WITH GPR 2 ALSO NON-ZERO 00321000
  374. DRDPROT EQU * PROTECTION EXCEPTION 00322000
  375. LA R1,X'04' INTERRUPT CODE... 00323000
  376. ST R1,SAVER0 ...FOR DMKHVC 00324000
  377. B DRDERRX EXIT WITH GR2 NON-ZERO 00325000
  378. EJECT 00326000
  379. *---------------------------------------------------------------------* 00327000
  380. * PRTSFCB - CODE '004' - GET NEXT PRINT SPOOL FILE BLOCK * 00328000
  381. *---------------------------------------------------------------------* 00329000
  382. PRTSFCB EQU * 00330000
  383. LA R7,TYPPRT THIS IS THE ONE WE WANT 00331000
  384. B READSFB ...SO GO FIND ONE 00332000
  385. *---------------------------------------------------------------------* 00333000
  386. * PCHSFCB - CODE '008' - GET NEXT PUNCH SPOOL FILE BLOCK * 00334000
  387. *---------------------------------------------------------------------* 00335000
  388. PCHSFCB EQU * 00336000
  389. LA R7,TYPPUN THIS VARIETY FROM HERE 00337000
  390. * B READSFB ...SO GO FIND ONE 00338000
  391. READSFB EQU * USER WANTS AN SFBLOK 00339000
  392. L R5,0(,R5) VIRTUAL ADDRESS OF BUFFER 00340000
  393. LR R1,R5 ...INTO R1 ALSO 00341000
  394. LA R2,SFBSIZE*8 FIELD LENGTH 00342000
  395. BAL R14,ADDCHEK CHECK PAGE CROSS, ETC. 00343000
  396. LA R15,SETCOD2 RETURN IF THERE ARE NO FILES 00344000
  397. LA R14,READSCH RETURN IF ONE IS FOUND 00345000
  398. CLI VDEVSTAT,X'00' IS THE DEVICE FREE ? 00346000
  399. BE SEARCHB YES - FIND AN SFBLOK 00347000
  400. TM VDEVSFLG,VDEVDIAG IN USE BY DIAGNOSE ?? 00348000
  401. BZ DRDBUSY NO - CAN'T USE THIS ONE 00349000
  402. L R9,VDEVSPL GET VSPLCTL BLOCK 00350000
  403. L R10,VSPCCW ...AND WHERE WE LEFT OFF 00351000
  404. LTR R10,R10 CHECK TO MAKE SURE 00352000
  405. BNP SEARCHB WELL... START AT THE BEGINNING 00353000
  406. BAL R15,READNXT LOOK FOR NEXT SFBLOK 00354000
  407. L R9,VDEVSPL GET VSPLCTL BLOCK 00355000
  408. ST R10,VSPCCW SET PTR TO ZERO 00356000
  409. B SETCOD1 AND SET CC = 1 TO INDICATE SOME FOUND 00357000
  410. READSCH EQU * 00358000
  411. EX R7,TESTYPE IS IT THE RIGHT DEVICE TYPE ? 00359000
  412. BZ READNXT NO - CONTINUE SEARCHING 00360000
  413. BAL R6,GETVSPL GET VSPLCTL BLOCK 00361000
  414. ST R10,VSPCCW ...AND REMEMBER WHERE WE STOPPED 00362000
  415. TRANS 2,5,OPT=(BRING,DEFER) GET USER'S BUFFER 00363000
  416. CALL DMKPSASP CHECK STORAGE PROTECTION KEYS @V202232 00364000
  417. BNZ DRDPROT OOPS ... SOME PROBLEM HERE 00365000
  418. MVC 0(SFBSIZE*8,R2),SFBLOK GIVE IT TO HIM 00366000
  419. B DRDEXIT SET CONDITION CODE = 0 AND EXIT 00367000
  420. TESTYPE TM SFBTYPE,*-* EXECUTED FOR TYPE CHECKING 00368000
  421. EJECT 00369000
  422. *---------------------------------------------------------------------* 00370000
  423. * SEARCHB - SEARCH READER-FILE CHAIN FOR SFBLOK * 00371000
  424. *---------------------------------------------------------------------* 00372000
  425. SEARCHB EQU * 00373000
  426. * SEARCH READER-FILE CHAIN FOR SFBLOK FOR THIS USER 00374000
  427. L R10,ARSPRD ADDRESS OF CHAIN ANCHOR 00375000
  428. B BEGINB BRANCH FOR BEGINNING SEARCH @VA02787 00376000
  429. READNXT EQU * 00377000
  430. L R9,ARSPRD ADDRESS OF CHAIN ANCHOR @VA02787 00378000
  431. CR R10,R9 AT PLACE OF PREVIOUS SEARCH @VA02787 00379000
  432. BE BEGINB IF YES, BRANCH AND CONTINUE @VA02787 00380000
  433. NEXTSF L R9,SFBPNT-SFBLOK(,R9) NEXT SFBLOK IN CHAIN @VA02787 00381000
  434. LTR R9,R9 ANY MORE? @VA02787 00382000
  435. BZR R15 IF NO, TAKE EXIT @VA02787 00383000
  436. CR R9,R10 AT PLACE OF PREVIOUS SEARCH? @VA02787 00384000
  437. BNE NEXTSF IF NOT, CONTINUE SEARCH @VA02787 00385000
  438. BEGINB EQU * @VA02787 00386000
  439. LR R9,R10 PREVIOUS BLOCK ADDR. IN R9 00387000
  440. L R10,SFBPNT NEXT SFBLOK IN CHAIN 00388000
  441. LTR R10,R10 ANY MORE? 00389000
  442. BCR 8,R15 NO - TAKE THE ERROR EXIT 00390000
  443. CLC SFBUSER(8),VMUSER DOES IT BELONG TO HIM? 00391000
  444. BNE BEGINB NO - CONTINUE @VA02787 00392000
  445. TM SFBFLAG,SFBINUSE+SFBUHOLD INUSE OR HOLD ?? @V200930 00393000
  446. BNZ BEGINB YES, SKIP THIS ONE @VA02787 00394000
  447. CLI VDEVCLAS,C'*' READ ANY CLASS ?? @V200930 00395000
  448. BE READCHK YES, TEST TYPE @V200930 00396000
  449. CLC VDEVCLAS,SFBCLAS CORRECT INPUT CLASS ? 00397000
  450. BNE BEGINB NO - SKIP THIS ONE @VA02787 00398000
  451. READCHK DS 0H @V200930 00399000
  452. CLI SAVEWRK6,X'00' SHOULD WE CHECK FOR DUMP FILES ? 00400000
  453. BCR 7,R14 NO - GIVE THIS ONE TO USER 00401000
  454. TM SFBFLAG,SFBDUMP CANNOT USE DUMP FILES 00402000
  455. BNO CHKMON IF NOT DUMP CONTINUE @V67CAH7 00403000
  456. CLI SFBMISC1+1,C'V' 'VMDUMP' IS ACCEPTABLE @V67CAH7 00403010
  457. BNE BEGINB NOPE, IT'S CP DUMP. GETNEXT @V67CAH7 00403020
  458. CHKMON DS 0H @V67CAH7 00403030
  459. TM SFBFLAG2,SFBMON IS THIS A MONITOR FILE? @V50A2B5 00403050
  460. BNO SEEOK NO @V50A2B5 00403100
  461. CLI SAVEWRK6+1,X'00' DO WE HAVE CORRECT DIAG? @V50A2B5 00403150
  462. BE BEGINB NO, NOT A MONITOR DIAG @V50A2B5 00403200
  463. BR R14 YES, USE THIS FILE @V50A2B5 00403250
  464. SEEOK CLI SAVEWRK6+1,X'00' DO WE HAVE CORRECT DIAG? @V50A2B5 00403300
  465. BNE BEGINB NO, ONLY WANT MONITOR @V50A2B5 00403350
  466. BR R14 00404000
  467. SPACE 2 00405000
  468. *---------------------------------------------------------------------* 00406000
  469. * GETVSPL - GET VSPLCTL BLOCK AND CONNECT TO DEVICE * 00407000
  470. *---------------------------------------------------------------------* 00408000
  471. GETVSPL EQU * 00409000
  472. L R9,VDEVSPL IN CASE THERE IS ALREADY A VSPLCTL 00410000
  473. LTR R9,R9 MAKE SURE IT'S THERE 00411000
  474. BNP GETVSP1 NO - GET ONE 00412000
  475. TM VDEVSFLG,VDEVDIAG IN USE BY DIAGNOSE ?? 00413000
  476. BCR 1,R6 YES - VSPLCTL ALREADY EXISTS 00414000
  477. L R0,VSPSFBLK IS THERE A SFBLOK ATTACHED @VA12474 00414200
  478. LTR R0,R0 TO THE VSPLCTL? @VA12474 00414300
  479. BNZ DRDBUSY YES - RETURN BUSY CONDITION @VA12474 00414400
  480. GETVSP1 EQU * GET VSPLCTL BLOCK 00415000
  481. LA R0,VSPSIZE GET VSPLCTL BLOCK 00416000
  482. CALL DMKFREE ... 00417000
  483. LR R9,R1 ADDRESS VIA GPR 9 00418000
  484. MVC VSPLCTL(VSPSIZE*8),ZEROES CLEAR IT 00419000
  485. OI VDEVSTAT,VDEVBUSY MARK DEVICE BUSY 00420000
  486. OI VDEVSFLG,VDEVDIAG ...AND IN USE BY DIAGNOSE 00421000
  487. ST R9,VDEVSPL CONNECT VSPLCTL 00422000
  488. BR R6 ...AND RETURN 00423000
  489. EJECT 00424000
  490. *---------------------------------------------------------------------* 00425000
  491. * SELECTF - SELECT A PARTICULAR FILE FOR NEXT READING * 00426000
  492. *---------------------------------------------------------------------* 00427000
  493. SELECTF EQU * 00428000
  494. L R6,0(,R5) GPR 6 NOW CONTAINS FILE ID 00429000
  495. LA R15,SETCOD2 CC = 2 IF NOT FOUND 00430000
  496. BAL R14,SEARCHB FIND AN SFBLOK 00431000
  497. CH R6,SFBFILID IS THIS THE RIGHT ONE ? 00432000
  498. BNE BEGINB NO - KEEP LOOKING @VA06358 00433000
  499. L R1,SFBPNT UNCHAIN THE SFBLOK... 00434000
  500. ST R1,SFBPNT-SFBLOK(,R9) ... 00435000
  501. L R1,ARSPRD ...AND RE-CHAIN AT THE HEAD 00436000
  502. L R2,0(,R1) ...OF THE SPOOL-FILE LIST 00437000
  503. ST R10,0(,R1) ...SO IT WILL BE PICKED UP 00438000
  504. ST R2,SFBPNT ...AT THE NEXT READ 00439000
  505. B DRDEXIT SET CC = 0 AND EXIT 00440000
  506. SPACE 2 00441000
  507. *---------------------------------------------------------------------* 00442000
  508. * CONNECT - CONNECT SFBLOK TO VSPLCTL BLOCK AND DEVICE * 00443000
  509. *---------------------------------------------------------------------* 00444000
  510. CONNECT EQU * 00445000
  511. ST R14,SAVEWRK2 SAVE RETURN REGISTER 00446000
  512. BAL R6,GETVSPL GET VSPLCTL BLOCK IF NEEDED @VA12474 00447000
  513. OI SFBFLAG,SFBINUSE+SFBOPEN INDICATE INUSE AND OPEN@VA12474 00448000
  514. ST R10,VSPSFBLK CONNECT SFBLOK 00449000
  515. L R1,SFBSTART FIRST DASD LOCATION 00450000
  516. ST R1,VSPDPAGE ...INTO VSPLCTL 00451000
  517. L R14,SAVEWRK2 PICK UP RETURN ADDRESS 00452000
  518. BR R14 ...AND RETURN 00453000
  519. SPACE 2 00454000
  520. *---------------------------------------------------------------------* 00455000
  521. * CHKBUSY - CHECK DEVICE FOR ACTIVE DIAGNOSE SPOOL FILE * 00456000
  522. *---------------------------------------------------------------------* 00457000
  523. CHKBUSY EQU * 00458000
  524. CLI VDEVSTAT,VDEVBUSY IS THE DEVICE ACTIVE? 00459000
  525. BCR 7,R15 NO - ERROR EXIT 00460000
  526. TM VDEVSFLG,VDEVDIAG IN USE BY DIAGNOSE ?? 00461000
  527. BCR 8,R15 NO - ERROR EXIT 00462000
  528. L R9,VDEVSPL GET VSPLCTL BLOCK 00463000
  529. LTR R9,R9 DON'T TAKE UNNECESSARY CHANCES 00464000
  530. BCR 13,R15 ...IT PAID OFF 00465000
  531. L R10,VSPSFBLK GET AT THE SFBLOK ALSO 00466000
  532. LTR R10,R10 ... 00467000
  533. BCR 13,R15 NO GOOD - ERROR EXIT 00468000
  534. BR R14 RETURN TO CALLER - DEVICE IS O.K. 00469000
  535. EJECT 00470000
  536. *---------------------------------------------------------------------* 00471000
  537. * NEXTPAG - CODE '000' - GET NEXT PAGE BUFFER IN FILE * 00472000
  538. *---------------------------------------------------------------------* 00473000
  539. NEXTPAG EQU * USER WANTS A DATA PAGE 00474000
  540. L R5,0(,R5) VIRTUAL PAGE ADDRESS 00475000
  541. LR R1,R5 INTO GPR 1 FOR 'ADDCHEK' 00476000
  542. L R2,F4096 FIELD = ONE PAGE 00477000
  543. BAL R14,ADDCHEK VALIDATE ADDRESS 00478000
  544. LA R15,GETSFCB IF INACTIVE, CONNECT A BLOCK 00479000
  545. BAL R14,CHKBUSY SEE IF THE DEVICE IS ACTIVE 00480000
  546. CKACTIVE DS 0H SEE IF THE ACTIVE FILE IS THE RIGHT TYPE @VA14190 00480010
  547. TM SFBFLAG,SFBDUMP IS IT A DUMP? @VA14190 00480030
  548. BNO MONCK NO - CHECK FOR MONITOR FILE @VA14190 00480050
  549. CLI SFBMISC1+1,C'V' YES - IS IT A VMDUMP? @VA14190 00480070
  550. BNE DRDBUSY CP DUMP - WE CAN'T HANDLE IT @VA14190 00480090
  551. MONCK TM SFBFLAG2,SFBMON IS THIS A MONITOR FILE? @VA14190 00480110
  552. BNO NOTMON NO - CHECK FOR SUBCODE '000' @VA14190 00480130
  553. CLI SAVEWRK6+1,X'00' YES - IS IT SUBCODE '020'? @VA14190 00480150
  554. BE DRDBUSY WRONG SUBCODE FOR MONITOR FILE @VA14190 00480170
  555. B FILEOK MON. FILE, SUBCODE '020 IS OK @VA14190 00480190
  556. NOTMON CLI SAVEWRK6+1,X'00' IS IT SUBCODE '000'? @VA14190 00480210
  557. BNE DRDBUSY NO - MUST HAVE MONITOR FILE @VA14190 00480230
  558. FILEOK EQU * ACTIVE FILE MATCHES THE SUBCODE 00480250
  559. * ISSUED @VA14190 00480270
  560. TM SFBFLAG,SFBEOF ALREADY AT END OF FILE? 00481000
  561. BO EXAMINE YES - CHECK COPY COUNT, ETC. 00482000
  562. CHEKNXT EQU * 00483000
  563. SLR R1,R1 00484000
  564. ST R1,VSPCCW CLEAR SFBLOK CHAIN LOCATOR 00485000
  565. L R0,VSPDPAGE 'CCPD' OF DESIRED PAGE 00486000
  566. CL R0,SFBLAST IS THIS THE LAST PAGE ? 00487000
  567. BNE GIVEPAG NO - GIVE IT TO HIM 00488000
  568. OI SFBFLAG,SFBEOF AT EOF NEXT TIME AROUND 00489000
  569. GIVEPAG EQU * GIVE PAGE TO THE USER 00490000
  570. LR R1,R5 VIRTUAL ADDRESS IS IN R5 00491000
  571. CALL DMKRPAGT,PARM=BRING LOCATE + BRING IN THE PAGE 00492000
  572. BC 2,DRDPROT OOPS .. TRIED TO OVERLAY A SHARED PAGE 00493000
  573. BC 1,DRDIOER FATAL I/O ERROR WHILE READING 00494000
  574. BC 4,DRDLOCK PAGE ALREADY IN USE FOR I/O @VA07519 00494050
  575. USING SPLINK,R2 REAL ADDRESS BACK VIA GPR 2 00495000
  576. ICM R4,B'1111',SPRECNUM GET THE RECORD COUNT @VA12226 00495300
  577. BZ EXAMA IF ZERO GIVE EOF @VA12226 00495600
  578. L R0,SPPREPAG GET BACK LINKAGE 00496000
  579. ST R0,VSPCAW USE 'CAW' FOR BACK LINKAGE IN FILE 00497000
  580. L R4,SPNXTPAG NEXT LINK IN SPOOL FILE 00498000
  581. ST R4,VSPDPAGE ...UPDATE 'NEXT PAGE' DATA 00499000
  582. B DRDEXIT ALL DONE -- RETURN TO USER 00500000
  583. DROP R2 00501000
  584. EXAMA OI SFBFLAG,SFBEOF SET EOF INDICATOR @VA12226 00501500
  585. EXAMINE EQU * CHECKING EOF CONDITIONS 00502000
  586. LH R1,SFBCOPY PICK UP COPY COUNT NOW 00503000
  587. TM VDEVSFLG,VDEVCONT SPOOL CONTINUOUS ?? 00504000
  588. BZ EXAM01 NO 00505000
  589. S R1,F1 DECREMENT COPY COUNT 00506000
  590. BNP EXAM02 NO - GET NEXT FILE 00507000
  591. STH R1,SFBCOPY ... 00508000
  592. L R1,SFBSTART FIRST DASD LOCATION 00509000
  593. ST R1,VSPDPAGE ...INTO VSPLCTL 00510000
  594. NI SFBFLAG,X'FF'-SFBEOF NO LONGER AT EOF 00511000
  595. B CHEKNXT CONTINUE PASSING DATA 00512000
  596. EJECT 00513000
  597. EXAM01 EQU * 00514000
  598. S R1,F1 DECREMENT COPY COUNT 00515000
  599. BNP SETCOD1 NO - JUST RETURN EOF CONDITION 00516000
  600. STH R1,SFBCOPY ... 00517000
  601. L R1,ARSPRD ADDR OF START OF CHAIN 00518000
  602. SPACE 1 00519000
  603. SFBLOOP EQU * 00520000
  604. L R2,SFBPNT-SFBLOK(,R1) GET NEXT SFBLOK ON CHAIN 00521000
  605. CR R2,R10 NEXT .EQ. CURRENT SFBLOK ? 00522000
  606. BE SFBFOUND YES 00523000
  607. LR R1,R2 00524000
  608. B SFBLOOP SEARCH CHAIN 00525000
  609. SPACE 1 00526000
  610. SFBFOUND EQU * 00527000
  611. L R3,SFBPNT GET NEXT SFBLOK 00528000
  612. ST R3,SFBPNT-SFBLOK(,R1) REMOVE CURRENT SFBLOK 00529000
  613. L R1,ARSPRD ADDR OF START OF CHAIN 00530000
  614. L R2,0(,R1) FIRST SFBLOK IN CHAIN 00531000
  615. ST R10,0(,R1) PUT THIS ONE FIRST 00532000
  616. ST R2,SFBPNT ...SO IT WILL COME UP NEXT 00533000
  617. NI SFBFLAG,X'FF'-(SFBEOF+SFBINUSE) RESET FLAGS @VA11232 00534000
  618. SLR R1,R1 DISCONNECT VSPLCTL BLOCK 00535000
  619. ST R1,VSPSFBLK ... 00536000
  620. ST R1,VSPDPAGE ... 00537000
  621. ST R1,VSPCAW ... 00538000
  622. B SETCOD1 RETURN EOF CONDITION 00539000
  623. EXAM02 EQU * CLOSE THIS FILE AND GET ANOTHER ONE 00540000
  624. BAL R6,DRDLOSE CLOSE THE SPOOL FILE 00541000
  625. LA R15,SETCOD1 CC = 1 IF NO MORE FILES 00542000
  626. B GETSFB1 GO GET ANOTHER SPOOL FILE 00543000
  627. SPACE 2 00544000
  628. DRDLOSE EQU * CLOSE THE ACTIVE FILE 00545000
  629. MVI VDEVSTAT,X'00' FREE UP THE DEVICE FOR CLOSE... 00546000
  630. NI VDEVSFLG,X'FF'-VDEVDIAG ... 00547000
  631. LR R7,R10 SFBLOK TO R7 FOR 'VSPCR' 00548000
  632. SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA01460 00549000
  633. CALL DMKVSPCR CLOSE READER FILE 00550000
  634. AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA01460 00551000
  635. BR R6 ...AND RETURN 00552000
  636. SPACE 2 00553000
  637. GETSFCB EQU * FIND ANOTHER SPOOL FILE 00554000
  638. LA R15,SETCOD2 CC = 2 IF NO FILE FOUND 00555000
  639. GETSFB1 EQU * ALTERNATE ENTRY 00556000
  640. LA R14,GETSFB2 RETURN FROM 'SEARCHB' 00557000
  641. CLI VDEVSTAT,X'00' IS THE DEVICE BUSY? 00558000
  642. BE SEARCHB NO - JUST FIND AN SFBLOK 00559000
  643. TM VDEVSFLG,VDEVDIAG IN USE BY DIAGNOSE ?? 00560000
  644. BZ DRDBUSY NO - ERROR 00561000
  645. B SEARCHB FIND SFBLOK FOR THIS USER 00562000
  646. GETSFB2 EQU * 00563000
  647. BAL R14,CONNECT CONNECT SFBLOK TO DEVICE 00564000
  648. B CHEKNXT ...AND GIVE HIM THE FIRST PAGE 00565000
  649. EJECT 00566000
  650. *---------------------------------------------------------------------* 00567000
  651. * REPEAT - CODE '010' - REPEAT THE ACTIVE FILE 'NN' TIMES * 00568000
  652. *---------------------------------------------------------------------* 00569000
  653. REPEAT EQU * REPEAT THE ACTIVE FILE 00570000
  654. LA R15,SETCOD2 CC = 2 IF NO ACTIVE FILE 00571000
  655. BAL R14,CHKBUSY MAKE SURE THE DEVICE IS ACTIVE 00572000
  656. L R5,0(,R5) REPEAT COUNT IS IN 'R1' 00573000
  657. LTR R5,R5 CHECK VALIDITY 00574000
  658. BNP DRDSPEC BAD - INTERRUPT 00575000
  659. N R5,F255 ARBITRARY, REASONABLE LIMIT 00576000
  660. STH R5,SFBCOPY ...AND RESET COPY COUNT 00577000
  661. B DRDEXIT SET CC = 0 AND EXIT 00578000
  662. SPACE 2 00579000
  663. *---------------------------------------------------------------------* 00580000
  664. * REREAD - CODE '014' - RESTART ACTIVE FILE AT BEGINNING * 00581000
  665. *---------------------------------------------------------------------* 00582000
  666. REREAD EQU * RESTART THE ACTIVE FILE (REWIND) 00583000
  667. LA R15,SETCOD2 CC = 2 IF NO ACTIVE FILE 00584000
  668. BAL R14,CHKBUSY MAKE SURE THE DEVICE IS ACTIVE 00585000
  669. L R1,SFBSTART 'CCPD' OF FIRST PAGE IN CHAIN 00586000
  670. ST R1,VSPDPAGE STORE AS NEXT PAGE TO READ 00587000
  671. SLR R1,R1 00588000
  672. ST R1,VSPCAW CLEAR THE 'PREVIOUS PAGE' POINTER 00589000
  673. NI SFBFLAG,X'FF'-SFBEOF NO LONGER AT EOF 00590000
  674. B DRDEXIT EXIT WITH CC = 0 00591000
  675. SPACE 2 00592000
  676. *---------------------------------------------------------------------* 00593000
  677. * BACKSPF - CODE '018' - BACK UP ONE PAGE IN ACTIVE FILE * 00594000
  678. *---------------------------------------------------------------------* 00595000
  679. BACKSPF EQU * BACKSPACE ONE PAGE-RECORD 00596000
  680. L R5,0(,R5) VIRTUAL PAGE ADDRESS 00597000
  681. LR R1,R5 INTO GPR 1 FOR 'ADDCHEK' 00598000
  682. L R2,F4096 FIELD = ONE FULL PAGE 00599000
  683. BAL R14,ADDCHEK VALIDATE ADDRESS 00600000
  684. LA R15,SETCOD2 CC = 2 IF NO ACTIVE FILE 00601000
  685. BAL R14,CHKBUSY MAKE SURE THE DEVICE IS ACTIVE 00602000
  686. L R0,VSPCAW THIS IS 'CCPD' FOR THE PREVIOUS PAGE 00603000
  687. LTR R0,R0 AT BEGINNING OF FILE ? 00604000
  688. BNZ NOTFRST NO - CONTINUE @VA00812 00605000
  689. L R0,SFBSTART RESTART AT THE BEGINNING OF FILE 00606000
  690. LA R2,VMPSW+4 ASSUME A BC-MODE PSW @VA04236 00606400
  691. TM VMESTAT,VMEXTCM IS THIS VM IN EC-MODE? @VA04236 00606800
  692. BZ *+8 NO, THEN WE ASSUMED CORRECTLY @VA04236 00607200
  693. LA R2,VMPSW+2 SET UP FOR EC-MODE PSW @VA04236 00607600
  694. OI 0(R2),X'10' INDICATE CONDITION CODE = 1 @VA04236 00608000
  695. NOTFRST EQU * @VA04236 00608400
  696. NI SFBFLAG,X'FF'-SFBEOF NO LONGER AT EOF 00609000
  697. B GIVEPAG ...GIVE THE DATA TO THE USER 00610000
  698. EJECT 00611000
  699. *---------------------------------------------------------------------* 00612000
  700. * SUCCESS - X'FFF' - RETURN SUCCESSOR FILE DESCRIPTOR * 00613000
  701. *---------------------------------------------------------------------* 00614000
  702. SUCCESS EQU * FIND AND RETURN SUCCESSOR SPOOL FILE @V293598 00615000
  703. L R10,ARSPRD ADDRESS OF SPOOL CHAIN ANCHOR @V293598 00616000
  704. L R0,0(,R6) 'R2' = SPOOL FILE ID NUMBER @V293598 00617000
  705. LTR R0,R0 WAS ZERO FILE ID SPECIFIED ? @V293598 00618000
  706. BZ SUCFIND YES - RETURN FIRST FILE @V293598 00619000
  707. CL R0,=F'9900' IS THE ID NUMBER LEGAL ? @V293598 00620000
  708. BH DRDSPEC TOO HIGH -RETURN SPEC EXCEPTION @VA06444 00621000
  709. SUCPRE EQU * @V293598 00622000
  710. L R10,SFBPNT NEXT SPOOL FILE BLOCK @V293598 00623000
  711. LTR R10,R10 IS THERE A NEXT BLOCK ? @V293598 00624000
  712. BZ SETCOD2 NO - RETURN CC = 2 @V293598 00625000
  713. CLC SFBUSER(8),VMUSER DOES CALLER OWN IT? @VA03562 00626000
  714. BNE SUCPRE NO, LOOK AT NEXT ONE @VA03562 00627000
  715. CH R0,SFBFILID IS THIS THE SPECIFIED FILE? @VA03562 00628000
  716. BNE SUCPRE NO, LOOK AT NEXT ONE @VA03562 00629000
  717. SUCFIND EQU * SPECIFIED FILE FOUND @V293598 00630000
  718. L R10,SFBPNT NEXT SPOOL FILE BLOCK @V293598 00631000
  719. LTR R10,R10 IS THERE A NEXT BLOCK ? @V293598 00632000
  720. BZ SETCOD1 NO - SUCCESSOR DOES NOT EXIST @V293598 00633000
  721. CLC SFBUSER(8),VMUSER DOES CALLER OWN THIS ONE ? @V293598 00634000
  722. BNE SUCFIND NO - KEEP LOOKING FOR SUCCESSOR @V293598 00635000
  723. SL R8,VMDVSTRT GET VDEVBLOK DISP @VM01086 00636000
  724. CALL DMKPGTVG RESERVE A PAGE OF SYS VIRT STORAGE @V293598 00637000
  725. ST R1,SAVEWRK1 AND SAVE THE ADDRESS @V293598 00638000
  726. LA R0,SFBSIZE+2+(L'VSPXTAG/8) WORK BUFFER NEEDED @V293598 00639000
  727. CALL DMKFREE RESERVE FREE STORAGE WORK BUFFER @V293598 00640000
  728. ST R1,SAVEWRK2 AND SAVE THE WORK BUFFER ADDRESS @V293598 00641000
  729. L R0,SFBSTART DASD ADDRESS OF FIRST FILE BUFFER@V293598 00642000
  730. L R1,SAVEWRK1 RESTORE SYS VIRT PAGE ADDRESS @V293598 00643000
  731. CALL DMKRPAGT,PARM=(BRING+SYSTEM) READ IT IN @V293598 00644000
  732. BNZ SUCIOER QUIT IF I/O ERROR @V293598 00645110
  733. EJECT 00646000
  734. AL R8,VMDVSTRT GET VDEVBLOK ADDR @VM01086 00647000
  735. L R3,0(,R5) CALLER'S VIRTUAL BUFFER ADDRESS @V293598 00648000
  736. L R5,SAVEWRK2 FREE STORAGE WORK BUFFER @V293598 00649000
  737. MVC 0(SFBSIZE*8,R5),SFBLOK MOVE THE ENTIRE SFBLOK @V293598 00650000
  738. MVC SFBSIZE*8(8,R5),16(R2) MOVE FIRST FILE CCW @V293598 00651000
  739. LA R5,SFBSIZE*8+8(,R5) UPDATE WORK BUFR LOAD POINT @V293598 00652000
  740. TM 20(R2),SKIP DOES THIS RECORD HAVE DATA ? @V293598 00653000
  741. BO SUCTOUSR NO - MOVE IT TO CALLER AS IS @V293598 00654000
  742. LH R1,22(,R2) DATA COUNT @V293598 00655000
  743. LA R1,3(,R1) PLUS FOUR FOR THE TIC, -1 @V293598 00656000
  744. LA R6,252-(SFBSIZE*8+8)-1 REMAINING USER BUFFER -1 @V60B9BA 00657000
  745. CLR R1,R6 IS THERE TOO MUCH TO MOVE ? @V293598 00658000
  746. BNH SUCFITOK NO - MOVE WHAT IS THERE @V293598 00659000
  747. LR R1,R6 TRUNCATE TO MAXIMUM COUNT @V293598 00660000
  748. SUCFITOK EQU * @V293598 00661000
  749. EX R1,SUCMOVE MOVE TIC AND DATA TO WORK BUFFER @V293598 00662000
  750. LA R5,1(R1,R5) UPDATE BUFFER LOAD POINT @V293598 00663000
  751. SUCTOUSR EQU * @V293598 00664000
  752. L R7,SAVEWRK2 INITIALIZE FROM ADDR @V293598 00665000
  753. SLR R5,R7 INITIALIZE MOVE COUNT @V293598 00666000
  754. SUCPAGE EQU * @V293598 00667000
  755. SL R8,VMDVSTRT GET VDEVBLOK DISP @VM01086 00668000
  756. TRANS 2,3,OPT=(BRING,DEFER) GET CALLER'S BUFFER ADDR @V293598 00669000
  757. BC 2,SUCADDR ADDR EXCEPTION IF NON-EXISTENT @V293598 00670000
  758. BC 1,SUCIOER CC = 3 IF I/O ERROR @V293598 00671000
  759. AL R8,VMDVSTRT GET VDEVBLOK ADDR @VM01086 00672000
  760. LR R6,R2 SET TO ADDR @V293598 00673000
  761. SUCHPAGE EQU * @V293598 00674000
  762. CALL DMKPSASP CHECK FOR PROTECTION VIOLATION @V293598 00675000
  763. BNZ SUCPROT VIRTUAL PROTECTION CHECK @V293598 00676000
  764. BAL R4,TO2048 MOVE DATA TO NEXT HALF-PAGE BOUNDARY @V293598 00677000
  765. BZ SUCCOD0 THAT'S ALL - SUCCESSFUL RETURN @V293598 00678000
  766. LR R2,R6 ASSUME ODD HALF-PAGE FOR NOW @V293598 00679000
  767. LR R8,R6 NEXT HALF-PAGE ADDR @V293598 00680000
  768. N R8,XPAGNUM GET PAGE NUMBER FOR NEXT PIECE @V293598 00681000
  769. CLR R8,R6 DOES THE ADDRESS CHANGE ? @V293598 00682000
  770. BNE SUCHPAGE YES - IT WAS AN ODD HALF-PAGE @V293598 00683000
  771. N R3,XPAGNUM GET LAST VIRTUAL PAGE NUMBER @V293598 00684000
  772. AL R3,F4096 AND BUMP IT UP TO THE NEXT @V293598 00685000
  773. B SUCPAGE TRANS, VALIDATE, AND CONTINUE @V293598 00686000
  774. SPACE 2 00687000
  775. SUCMOVE MVC 0(0,R5),24(R2) MOVE DATA RECORD EXECUTED ABOVE @V293598 00688000
  776. EJECT 00689000
  777. SUCIOER EQU * @V293598 00690000
  778. AL R8,VMDVSTRT GET VDEVBLOK ADDR @VM01086 00691000
  779. LA R3,DRDIOER EXIT TO I/O ERROR RETURN @V293598 00692000
  780. B SUCEXIT RELEASE STORAGE AND QUIT @V293598 00693000
  781. SPACE 00694000
  782. SUCPROT EQU * @V293598 00695000
  783. LA R3,DRDPROT EXIT TO PROTECTION CHECK SET @V293598 00696000
  784. B SUCEXIT RELEASE STORAGE AND QUIT @V293598 00697000
  785. SPACE 00698000
  786. SUCADDR EQU * @V293598 00699000
  787. AL R8,VMDVSTRT GET VDEVBLOK ADDR @VM01086 00700000
  788. LA R3,DRDADDR EXIT TO ADDRESSING CHECK SET @V293598 00701000
  789. B SUCEXIT RELEASE STORAGE AND QUIT @V293598 00702000
  790. SUCCOD0 EQU * @V293598 00703000
  791. LA R3,DRDEXIT EXIT TO SUCCESSFUL RETURN @V293598 00704000
  792. SUCEXIT EQU * @V293598 00705000
  793. LA R0,SFBSIZE+2+(L'VSPXTAG/8) FREE STOR. TO RELSE @V293598 00706000
  794. L R1,SAVEWRK2 ADDR OF FREE STORAGE WORK BUFFER @V293598 00707000
  795. CALL DMKFRET RELEASE THE WORK BUFFER @V293598 00708000
  796. L R1,SAVEWRK1 ADDR OF SYS VIRTUAL PAGE @V293598 00709000
  797. CALL DMKPGTVR RELEASE THE SYS VIRTUAL PAGE @V293598 00710000
  798. BR R3 RETURN TO PRESET EXIT ROUTINE @V293598 00711000
  799. EJECT 00712000
  800. *---------------------------------------------------------------------* 00713000
  801. * TO2048 - MOVE DATA TO NEXT HALF-PAGE BOUNDARY * 00714000
  802. *---------------------------------------------------------------------* 00715000
  803. TO2048 EQU * @V293598 00716000
  804. LTR R5,R5 IS REQUESTED COUNT ZERO ? @V293598 00717000
  805. BCR 8,R4 EASILY DONE IF SO @V293598 00718000
  806. LA R8,2048(,R6) BUMP UP ONE HALF-PAGE @V293598 00719000
  807. N R8,X2048BND ADDR OF NEXT HALF-PAGE BOUNDARY @V293598 00720000
  808. SLR R8,R6 COUNT TO END OF HALF-PAGE @V293598 00721000
  809. CLR R8,R5 DOES REQUEST CROSS THE BOUNDARY ?@V293598 00722000
  810. BNH TOBOUND YES - MOVE JUST THAT FAR @V293598 00723000
  811. LR R8,R5 SET TO MOVE ONLY REQUESTED COUNT @V293598 00724000
  812. TOBOUND EQU * @V293598 00725000
  813. SLR R5,R8 SET RESIDUAL COUNT FOR RETURN @V293598 00726000
  814. BCTR R8,0 COUNT TO BE MOVED -1 @V293598 00727000
  815. TONEXT EQU * @V293598 00728000
  816. CL R8,F256 LESS THAN A FULL BLOCK TO GO ? @V293598 00729000
  817. BL TOFINISH YES - MOVE REMAINDER @V293598 00730000
  818. MVC 0(256,R6),0(R7) MOVE A FULL BLOCK @V293598 00731000
  819. LA R6,256(,R6) UPDATE TO ADDRESS @V293598 00732000
  820. LA R7,256(,R7) UPDATE FROM ADDRESS @V293598 00733000
  821. SL R8,F256 DECREMENT REMAINING COUNT @V293598 00734000
  822. BNZ TONEXT AND MOVE ANOTHER PIECE @V293598 00735000
  823. SPACE 00736000
  824. TOFINISH EQU * @V293598 00737000
  825. EX R8,TOMOVE MOVE REMAINDER @V293598 00738000
  826. LA R6,1(R8,R6) FINAL TO ADDRESS @V293598 00739000
  827. LA R7,1(R8,R7) FINAL FROM ADDRESS @V293598 00740000
  828. LTR R5,R5 SET RETURN COND CODE @V293598 00741000
  829. BR R4 RETURN TO CALLER @V293598 00742000
  830. SPACE 2 00743000
  831. TOMOVE MVC 0(0,R6),0(R7) EXECUTED TO MOVE REMAINDER @V293598 00744000
  832. EJECT 00745000
  833. *. 00746000
  834. * SUBROUTINE NAME - 00747000
  835. * 00748000
  836. * DMKDRDMP 00749000
  837. * 00750000
  838. * FUNCTION - 00751000
  839. * 00752000
  840. * TO READ A SYSTEM DUMP SPOOL INPUT FILE VIA DIAGNOSE 00753000
  841. * CODE X'0034' 00754000
  842. * 00755000
  843. * ATTRIBUTES - 00756000
  844. * 00757000
  845. * RE-ENTRANT, PAGEABLE, CALLED VIA SVC FROM DMKHVCAL 00758000
  846. * 00759000
  847. * ENTRY POINT - 00760000
  848. * 00761000
  849. * DMKDRDMP 00762000
  850. * 00763000
  851. * ENTRY CONDITIONS - 00764000
  852. * 00765000
  853. * GPR 13 = ADDRESS OF STANDARD SAVE-AREA 00766000
  854. * GPR 12 = ADDRESS OF DMKDRDMP 00767000
  855. * GPR 11 = ADDRESS OF CALLER'S VMBLOK 00768000
  856. * GPR 6 = ADDRESS OF DIAGNOSE 'R2' VALUE 00769000
  857. * GPR 5 = ADDRESS OF DIAGNOSE 'R1' VALUE 00770000
  858. * 00771000
  859. * EXIT CONDITIONS - 00772000
  860. * 00773000
  861. * GPRS 1,3-15 UNCHANGED 00774000
  862. * GPR 2 = 0 - CONDITION CODE IS SET FOR VIRTUAL MACHINE 00775000
  863. * GPR 2 > 0 - SIMULATE PROGRAM INTERRUPT FOR VM, 00776000
  864. * AND GPR 0 = INTERRUPT CODE FOR SIMULATED PROGRAM INTERRUPT 00777000
  865. * 00778000
  866. * CALLS TO OTHER ROUTINES - 00779000
  867. * 00780000
  868. * DMKSCNVU - TO LOCATE VIRTUAL DEVICE BLOCKS 00781000
  869. * DMKRPAGT - TO PROVIDE DATA PAGES TO THE VIRTUAL MACHINE 00782000
  870. * 00783000
  871. * EXTERNAL REFERENCES - 00784000
  872. * 00785000
  873. * DMKSYSOW - SYSTEM OWNED-VOLUME VOLID LIST 00786000
  874. * DMKHVCPC - DATA TABLE OF PAGES/CYLINDER ON DASD DEVICES 00787000
  875. * 00788000
  876. * TABLES / WORK AREAS - 00789000
  877. * 00790000
  878. * VDEVBLOK, VSPLCTL, SFBLOK, VMBLOK 00791000
  879. * 00792000
  880. EJECT 00793000
  881. * REGISTER USAGE - 00794000
  882. * 00795000
  883. * GPRS 14, 15 LINKAGE REGISTERS 00796000
  884. * GPR 13 = SAVE-AREA ADDRESSABILITY 00797000
  885. * GPR 12 = MODULE BASE ADDRESSABILITY 00798000
  886. * GPR 11 = VMBLOK ADDRESSABILITY 00799000
  887. * GPR 10 = SFBLOK ADDRESSABILITY 00800000
  888. * GPR 9 = VSPLCTL ADDRESSABILITY 00801000
  889. * GPR 8 = VDEVBLOK ADDRESSABILITY 00802000
  890. * GPR 7 = WORK REGISTER 00803000
  891. * GPR 6 = DIAGNOSE 'R2' VALUE ADDRESS 00804000
  892. * GPR 5 = DIAGNOSE 'R1' VALUE ADDRESS 00805000
  893. * GPRS 0-4 ARE WORK REGISTERS 00806000
  894. * 00807000
  895. * OPERATION - 00808000
  896. * 00809000
  897. * DIAGNOSE CODE X'0034', PROCESSED BY DMKDRDMP, REQUIRES 00810000
  898. * TWO REGISTER VALUES FROM THE VIRTUAL MACHINE, AS FOLLOWS: 00811000
  899. * 'R1' = START ADDRESS OF A FULL-PAGE VIRTUAL BUFFER 00812000
  900. * 'R2' = ADDRESS OF A VIRTUAL SPOOL INPUT READER 00813000
  901. * THE REGISTER VALUES ARE EXAMINED FOR VALIDITY AND THE 00814000
  902. * SPECIFIED DEVICE IS EXMAINED FOR AVAILABILITY. ERROR 00815000
  903. * RETURN CONDITIONS ARE THE SAME AS FOR DMKDRDER. 00816000
  904. * IF ALL CHECKS ARE PASSED, THE DEVICE IS CHECKED FOR AN 00817000
  905. * ALREADY ACTIVE DUMP FILE. IF ONE IS FOUND, THE NEXT RECORD 00818000
  906. * IS MADE AVAILABLE VIA A CALL TO DMKRPAGT. IF THE END OF 00819000
  907. * FILE IS HIT, CC = 1 IS SET. IF NO FILE IS ACTIVE, THE INPUT 00820000
  908. * SPOOL FILE CHAIN IS SEARCHED FOR A DUMP FILE FOR THE CALLING 00821000
  909. * USER, CC = 2 SET IF NONE ARE FOUND, AND THE FIRST PAGE IS 00822000
  910. * MADE AVAILABLE IF ONE IS FOUND. SINCE THE SYSTEM DUMP FILES 00823000
  911. * ARE NOT CHAINED RECORDS, AS ARE REGULAR SPOOL FILES, EACH 00824000
  912. * SUCCESSIVE RECORD ADDRESS IS CALCULATED FROM THE PREVIOUS 00825000
  913. * ADDRESS, USING THE TABLE 'DMKHVCPC' TO DETECT CYLINDER 00826000
  914. * CROSS-OVERS. 00827000
  915. * NOTE: DMKDRDMP DOES NOT PERFORM ANY AUTOMATIC CLOSE OF THE DUMP 00828000
  916. * FILES. THE FILE MUST BE CLOSED VIA THE CONSOLE FUNCTIONS 00829000
  917. * 'CLOSE' OR 'PURGE', EITHER FROM THE USER'S TERMINAL OR 00830000
  918. * VIA DIAGNOSE CODE '0008'. 00831000
  919. *. 00832000
  920. EJECT 00833000
  921. DMKDRDMP RELOC , READ SYSTEM-DUMP SPOOL FILE 00834000
  922. SPACE 2 00835000
  923. NI VMPSW+4,X'CF' SET CONDITION CODE ZERO 00836000
  924. NI VMPSW+2,X'CF' SET EC-MODE CONDITION CODE = 0 @VA04236 00836100
  925. MVI SAVEWRK6,X'44' NON-ZERO => PROCESS DUMP FILES 00837000
  926. L R1,0(,R5) VIRTUAL ADDRESS TO GPR 1 00838000
  927. LR R5,R1 ...AND GPR 5 00839000
  928. L R2,F4096 FULL-PAGE FIELD LENGTH 00840000
  929. BAL R14,ADDCHEK CHECK VALIDITY OF ADDRESS 00841000
  930. LA R1,VMGPRS+(4*15) GET ADDRESS OF R15 @VA09560 00841100
  931. CR R1,R6 IS RY = R15 @VA09560 00841200
  932. BE DRDSPEC SORRY NOT ALLOWED @VA09560 00841300
  933. L R1,0(,R6) VIRTUAL READER ADDRESS 00842000
  934. MAXDV R15 GET HIGHEST VIRTUAL DEVICE 00843000
  935. CLR R1,R15 CHECK ITS VALIDITY 00844000
  936. BH DRDEVIC INVALID ADDRESS 00845000
  937. LTR R1,R1 ... 00846000
  938. BNP DRDEVIC INVALID ADDRESS 00847000
  939. CALL DMKSCNVU FIND VDEVBLOK 00848000
  940. BNZ DRDEVIC NOT FOUND 00849000
  941. CLI VDEVTYPC,CLASURI SPOOL INPUT DEVICE? 00850000
  942. BNE DRDTYPE NO - INVALID DEVICE TYPE 00851000
  943. TM VDEVTYPE,TYPRDR IS IT ALSO A CARD-READER? 00852000
  944. BZ DRDTYPE NO - DON'T SUPPORT PAPER TAPE, ETC. 00853000
  945. LA R14,DMPAGET HERE IF ALREADY ACTIVE 00854000
  946. BAL R15,CHKBUSY SEE IF THERE IS AN OPEN FILE 00855000
  947. * NOPE - FIND A SYSTEM DUMP FILE 00856000
  948. LA R15,SETCOD2 CC = 2 IF THERE AREN'T ANY FILES 00857000
  949. BAL R14,SEARCHB FIND ANY SFBLOK FOR THIS USER 00858000
  950. TM SFBFLAG,SFBDUMP THIS A DUMP FILE ? 00859000
  951. BZ BEGINB NO - KEEP LOOKING @VA06358 00860000
  952. CLI SFBMISC1+1,C'V' * IS THIS A VMDUMP? @V67CAH7 00860300
  953. BE BEGINB * YES...DON'T ALLOW DIAG X34 @V67CAH7 00860600
  954. BAL R14,CONNECT CONNECT SFBLOK TO VDEVBLOK 00861000
  955. B DMPAGET1 NO NEED TO CHECK FILE AGAIN @VA14190 00861010
  956. DMPAGET DS 0H SEE IF ACTIVE FILE IS CP DUMP @VA14190 00862010
  957. TM SFBFLAG,SFBDUMP IS IT A DUMP? @VA14190 00862030
  958. BZ DRDBUSY NO - DIAG34 CAN'T READ IT @VA14190 00862050
  959. CLI SFBMISC1+1,C'V' IS IT A VMDUMP? @VA14190 00862070
  960. BE DRDBUSY YES - NOT RIGHT FOR DIAG34 @VA14190 00862090
  961. DMPAGET1 EQU * GIVE ONE PAGE OF DATA TO USER @VA14190 00862110
  962. TM SFBFLAG,SFBEOF AT END OF FILE NOW ? 00863000
  963. BO SETCOD1 YES - RETURN CC = 1 00864000
  964. L R0,VSPDPAGE NEXT PAGE FROM VSPLCTL BLOCK 00865000
  965. CL R0,SFBLAST IS THIS THE LAST PAGE ? 00866000
  966. BNE DMPAGEX NO - GIVE IT TO HIM 00867000
  967. OI SFBFLAG,SFBEOF AT END OF FILE NEXT TIME 00868000
  968. DMPAGEX EQU * 00869000
  969. LR R1,R5 VIRTUAL BUFFER ADDRESS 00870000
  970. CALL DMKRPAGT,PARM=0 HE'LL GET THE PAGE LATER 00871000
  971. BC 2,DRDPROT OOPS .. TRIED TO OVERLAY A SHARED PAGE 00872000
  972. BC 1,DRDIOER FATAL I/O ERROR WHILE READING 00873000
  973. BC 4,DRDLOCK PAGE LOCKED FOR I/O @VA08925 00873100
  974. LA R4,VSPDPAGE POINT TO THE 'CCPD' 00874000
  975. BAL R7,CMPNEXT GO COMPUTE NEXT ADDRESS 00875000
  976. B DRDEXIT ALL THROUGH FOR NOW 00876000
  977. EJECT 00877000
  978. CMPNEXT EQU * COMPUTE NEXT PAGE ADDRESS (CCPD) 00878000
  979. * GPR 4 = ADDRESS OF 'CCPD' FIELD AT ENTRY 00879000
  980. * GPR 7 = RETURN ADDRESS 00880000
  981. * 'CCPD' IS UPDATED IN PLACE 00881000
  982. * COMPUTE NEXT PAGE REFERENCE 'CCPD' 00882000
  983. SLR R2,R2 00883000
  984. IC R2,3(0,R4) GET DEVICE OWNDLIST INDEX BYTE 00884000
  985. SLL R2,3(0) CONVERT TO INDEX... 00885000
  986. A R2,=A(DMKSYSOW) ...INTO OWNED LIST 00886000
  987. LH R8,OWNDRDEV-OWNDLIST(,R2) RDEVBLOK INDEX 00887000
  988. SLL R8,3(0) CONVERT TO BYTE INDEX @V200820 00888000
  989. A R8,ARIODV RDEVBLOK ADDRESS 00889000
  990. USING RDEVBLOK,R8 00890000
  991. L R3,=A(DMKHVCPC) PAGES/CYLINDER TABLE IN 'HVC' 00891000
  992. CLI RDEVTYPE,TYP2305 ZEUS ? 00892000
  993. BE FNDTYPE YES 00893000
  994. CLI RDEVTYPE,TYP3340 3340 DASD DEVICE ? @V2A2029 00894000
  995. BE FNDTYPE YES - 24 PAGES/CYLINDER @V2A2029 00895000
  996. LA R3,2(,R3) JUMP TO 3330 ENTRIES @V200538 00896000
  997. CLI RDEVTYPE,TYP3330 MERLIN ? 00897000
  998. BE FNDTYPE YES 00898000
  999. LA R3,2(,R3) JUMP TO 3350 ENTRY @V304498 00899000
  1000. CLI RDEVTYPE,TYP3350 3350 DASD DEVICE ? @V304498 00900000
  1001. BE FNDTYPE YES - 120 PAGES/CYLINDER @V304498 00901000
  1002. LA R3,1(,R3) Jump to 3375 entry HRC106DK 00901100
  1003. CLI RDEVTYPE,TYP3375 3375 DASD device ? HRC106DK 00901200
  1004. BE FNDTYPE Yes - 96 pages/cylinder HRC106DK 00901300
  1005. LA R3,1(,R3) Jump to 3380 entry HRC106DK 00901400
  1006. CLI RDEVTYPE,TYP3380 3380 DASD device ? HRC106DK 00901500
  1007. BE FNDTYPE Yes - 150 pages/cylinder HRC106DK 00901600
  1008. LA R3,1(,R3) JUMP TO 2314/2319 ENTRY @V304498 00902000
  1009. CLI RDEVTYPE,TYP2319 LAME DUCK ? 00903000
  1010. BE FNDTYPE YES 00904000
  1011. ********* 00905000
  1012. ABEND 1 WOT HOPPEN ? 00906000
  1013. ********* 00907000
  1014. FNDTYPE EQU * DEVICE TYPE IS RECOGNIZABLE 00908000
  1015. SLR R1,R1 00909000
  1016. IC R1,0(,R3) GET MAXIMUM PAGE NUMBER ON CYL 00910000
  1017. SLR R2,R2 00911000
  1018. IC R2,2(0,R4) CURRENT PAGE NUMBER 00912000
  1019. LA R2,1(,R2) INCREMENT... 00913000
  1020. CR R1,R2 BEYOND END OF CYLINDER ? 00914000
  1021. BL NEXTCYL YES - JUMP TO NEXT CYLINDER 00915000
  1022. STC R2,2(0,R4) RESET PAGE NUMBER 00916000
  1023. BR R7 ...RETURN TO CALLER 00917000
  1024. NEXTCYL EQU * ADVANCE TO NEXT CYLINDER 00918000
  1025. MVI 2(R4),X'01' START AT PAGE ONE... 00919000
  1026. LH R2,0(0,R4) ... 00920000
  1027. LA R2,1(,R2) ...ON THE NEXT CYLINDER 00921000
  1028. STH R2,0(0,R4) RESET IN ADDRESS FIELD 00922000
  1029. BR R7 RETURN TO CALLER 00923000
  1030. EJECT 00924000
  1031. *. 00925000
  1032. * SUBROUTINE NAME - 00926000
  1033. * 00927000
  1034. * DMKDRDDD 00928000
  1035. * 00929000
  1036. * FUNCTION - 00930000
  1037. * 00931000
  1038. * TO DELETE A SYSTEM DUMP SPOOL FILE 00932000
  1039. * 00933000
  1040. * ATTRIBUTES - 00934000
  1041. * 00935000
  1042. * RE-ENTRANT, PAGEABLE, CALLED VIA SVC FROM DMKVSPCR 00936000
  1043. * 00937000
  1044. * ENTRY POINT - 00938000
  1045. * 00939000
  1046. * DMKDRDDD 00940000
  1047. * 00941000
  1048. * ENTRY CONDITIONS - 00942000
  1049. * 00943000
  1050. * GPR 13 = ADDRESS OF A STANDARD SAVE-AREA 00944000
  1051. * GPR 12 = ADDRESS OF DMKDRDDD 00945000
  1052. * GPR 11 = ADDRESS OF CALLER'S VMBLOK 00946000
  1053. * GPR 7 = SFBLOK ADDRESS OF FILE TO BE DELETED 00947000
  1054. * 00948000
  1055. * EXIT CONDITIONS - 00949000
  1056. * 00950000
  1057. * FILE HAS BEEN DELETED, REGISTERS ARE UNCHANGED 00951000
  1058. * 00952000
  1059. * CALLS TO OTHER ROUTINES - 00953000
  1060. * 00954000
  1061. * DMKPGTSD - TO RELEASE A SINGLE DASD RECORD 00955000
  1062. * 00956000
  1063. * EXTERNAL REFERENCES - NONE 00957000
  1064. * 00958000
  1065. * TABLES / WORK AREAS - 00959000
  1066. * 00960000
  1067. * SWPTABLE - DUMMY FOR USE BY DMKPGTSD 00961000
  1068. * SFBLOK 00962000
  1069. * 00963000
  1070. * REGISTER USAGE - 00964000
  1071. * 00965000
  1072. * GPRS 14, 15 LINKAGE REGISTERS 00966000
  1073. * GPR 13 = SAVE-AREA ADDRESSABILITY 00967000
  1074. * GPR 12 = MODULE BASE ADDRESSABILITY 00968000
  1075. * GPR 11 = VMBLOK ADDRESSABILITY 00969000
  1076. * GPR 10 = SFBLOK ADDRESSABILITY 00970000
  1077. * GPRS 8, 9 UNUSED 00971000
  1078. * GPR 7 = INTERNAL LINKAGE 00972000
  1079. * GPR 6 = UNUSED 00973000
  1080. * GPR 5 = DUMMY SWPTABLE ENTRY POINTER 00974000
  1081. * GPR 4 = POINTER TO 'CCPD' FOR 'CMPNEXT' ROUTINE 00975000
  1082. * GPRS 0-3 WORK REGISTERS 00976000
  1083. * 00977000
  1084. EJECT 00978000
  1085. * OPERATION - 00979000
  1086. * 00980000
  1087. * EACH RECORD OF THE SYSTEM DUMP FILE IS RELEASED FROM 00981000
  1088. * SECONDARY STORAGE VIA A CALL TO DMKPGTSD. SUCCESSIVE 00982000
  1089. * RECORD ADDRESSES ARE COMPUTED VIA THE 'CMPNEXT' SUBROUTINE 00983000
  1090. * AND THE DMKHVCPC DATA TABLE. WHEN THE LAST RECORD HAS 00984000
  1091. * BEEN DELETED, AN EXIT IS TAKEN VIA SVC 12. 00985000
  1092. *. 00986000
  1093. SPACE 3 00987000
  1094. DMKDRDDD RELOC , DELETE SYSTEM-DUMP SPOOL FILE 00988000
  1095. SPACE 00989000
  1096. LR R10,R7 SFBLOK ADDRESS TO GPR 10 00990000
  1097. SLR R1,R1 USE SAVEWRK2,3 AS DUMMY 'SWPENT' 00991000
  1098. ST R1,SAVEWRK2 ...FOR CALLS TO 'DMKPGTSD' 00992000
  1099. L R1,SFBSTART FIRST PAGE IN FILE 00993000
  1100. ST R1,SAVEWRK3 ... 00994000
  1101. ST R1,SAVEWRK1 SAVE 'CCPD' SAFELY (PGTSD CLEARS IT 00995000
  1102. * FROM THE PSEUDO-SWAP-TABLE) 00996000
  1103. LA R5,SAVEWRK2 POINT AT SWPENT FOR PGTSD 00997000
  1104. CALL DMKPGTSD RELEASE ONE PAGE DASD 00998000
  1105. CLC SFBLAST(4),SAVEWRK1 AT END OF FILE YET ? 00999000
  1106. BE DRDEXIT YES - ALL DONE 01000000
  1107. LA R4,SAVEWRK1 POINT AT 'CCPD' DIRECTLY 01001000
  1108. BAL R7,CMPNEXT ...TO COMPUTE NEXT ADDRESS 01002000
  1109. DMPDELT EQU * LOOP THROUGH THE FILE 01003000
  1110. L R1,SAVEWRK1 PICK UP NEW 'CCPD' 01004000
  1111. ST R1,SAVEWRK3 ...INTO PSEUDO-SWAP TABLE ENTRY 01005000
  1112. CALL DMKPGTSD DELETE ANOTHER PAGE 01006000
  1113. CLC SFBLAST(4),SAVEWRK1 AT END OF FILE YET ? 01007000
  1114. BNE FNDTYPE NO - GET NEXT ( R7 IS STILL SET ) 01008000
  1115. B DRDEXIT ALL DONE - RETURN TO SPL 01009000
  1116. EJECT 01010000
  1117. *. 01011000
  1118. * SUBROUTINE NAME - 01012000
  1119. * 01013000
  1120. * DMKDRDSY 01014000
  1121. * 01015000
  1122. * FUNCTION - 01016000
  1123. * 01017000
  1124. * TO READ THE SYSTEM SYMBOL TABLE CSECT VIA DIAGNOSE 01018000
  1125. * CODE X'0038' 01019000
  1126. * 01020000
  1127. * ATTRIBUTES - 01021000
  1128. * 01022000
  1129. * RE-ENTRANT, PAGEABLE, CALLED VIA SVC FROM DMKHVCAL 01023000
  1130. * 01024000
  1131. * ENTRY POINT - 01025000
  1132. * 01026000
  1133. * DMKDRDSY 01027000
  1134. * 01028000
  1135. * ENTRY CONDITIONS - 01029000
  1136. * 01030000
  1137. * GPR 13 = ADDRESS OF A STANDARD SAVE-AREA 01031000
  1138. * GPR 12 = ADDRESS OF DMKDRDSY 01032000
  1139. * GPR 11 = ADDRESS OF CALLER'S VMBLOK 01033000
  1140. * GPR 6 = ADDRESS OF DIAGNOSE 'R2' VALUE 01034000
  1141. * GPR 5 = ADDRESS OF DIAGNOSE 'R1' VALUE 01035000
  1142. * 01036000
  1143. * EXIT CONDITIONS - 01037000
  1144. * 01038000
  1145. * GPRS 1,3-15 UNCHANGED 01039000
  1146. * GPR 2 = 0 - CONDITION CODE IS SET FOR VIRTUAL MACHINE 01040000
  1147. * GPR 2 > 0 - SIMULATE PROGRAM INTERRUPT 01041000
  1148. * AND GPR 0 = INTERRUPT CODE FOR SIMULATED PROGRAM INTERRUPT 01042000
  1149. * 01043000
  1150. * CALLS TO OTHER ROUTINES - 01044000
  1151. * 01045000
  1152. * DMKRPAGT - TO PROVIDE THE SYMBOL TABLE PAGE TO THE VM 01046000
  1153. * 01047000
  1154. * EXTERNAL REFERENCES - 01048000
  1155. * 01049000
  1156. * DMKSYM - SYSTEM SYMBOL TABLE CSECT 01050000
  1157. * 01051000
  1158. * TABLES / WORK AREAS - 01052000
  1159. * 01053000
  1160. * DMKSYSVM - SYSTEM VMBLOK, SWAPTABLES 01054000
  1161. * 01055000
  1162. EJECT 01056000
  1163. * REGISTER USAGE - 01057000
  1164. * 01058000
  1165. * GPRS 14, 15 LINKAGE REGISTERS 01059000
  1166. * GPR 13 = SAVE-AREA ADDRESSABILITY 01060000
  1167. * GPR 12 = MODULE BASE ADDRESSABILITY 01061000
  1168. * GPR 11 = VMBLOK ADDRESSABILITY 01062000
  1169. * GPR 10 = SYSTEM VMBLOK ADDRESS 01063000
  1170. * GPRS 0-9 ARE WORK REGISTERS 01064000
  1171. * 01065000
  1172. * OPERATION - 01066000
  1173. * 01067000
  1174. * DIAGNOSE CODE X'0038', PROCESSED BY DMKDRDSY, REQUIRES A 01068000
  1175. * SINGLE REGISTER VALUE, AS FOLLOWS: 01069000
  1176. * 'R1' = START ADDRESS OF FULL-PAGE BUFFER 01070000
  1177. * THE ADDRESS IS EXMAINED FOR VALIDITY, AND AN ADDRESSING OR 01071000
  1178. * SPECIFICATION EXCEPTION IS GENERATED IF THE ADDRESS IS 01072500
  1179. * INVALID OR NOT PAGE-BOUNDARY ALIGNED. NEXT, THE SYSTEM 01073000
  1180. * VMBLOK SWAP-TABLE IS REFERENCED TO FIND THE COMPRESSED 01074000
  1181. * DASD ADDRESS (CCPD) OF THE SYMBOL TABLE CSECT (DMKDYM). 01075000
  1182. * IF THE CSECT IS NOT DEFINED, CC = 1 IS SET, INDICATING 01076000
  1183. * THAT NO SYMBOL TABLE IS AVAILABLE. IF THE PAGE BUFFER IS 01077300
  1184. * LOCKED FOR AN I/O OPERATION, CC=3 IS SET. OTHERWISE, THE FULL 01077600
  1185. * PAGE OF DATA IS MADE AVAILABLE TO THE VIRTUAL MACHINE VIA 01078000
  1186. * A CALL TO DMKRPAGT, AND VIRTUAL CC = 0 IS SET. 01079000
  1187. *. 01080000
  1188. EJECT 01081000
  1189. DMKDRDSY RELOC , READ SYSTEM SYMBOL TABLE PAGE 01082000
  1190. SPACE 01083000
  1191. NI VMPSW+4,X'CF' SET CONDITION CODE = 0 01084000
  1192. NI VMPSW+2,X'CF' SET EC-MODE CONDITION CODE = 0 @VA04236 01084100
  1193. L R5,0(,R5) VIRTUAL ADDRESS TO GPR 5 01085000
  1194. LR R1,R5 ...AND GPR 1 ALSO 01086000
  1195. L R2,F4096 FULL-PAGE FIELD 01087000
  1196. BAL R14,ADDCHEK VALIDATE THE ADDRESS 01088000
  1197. L R10,ASYSVM SYSTEM VMBLOK 01089000
  1198. L R10,VMSEG-VMBLOK(,R10) SYSTEM ADDRESS SPACE 01090000
  1199. L R9,=A(DMKSYM) SYMBOL TABLE ADDRESS 01091000
  1200. SLR R8,R8 SET UP A MASK... 01092000
  1201. ICM R8,4,FFS ...TO GET THE SEGMENT NUMBER 01093000
  1202. NR R8,R9 GPR 8 = SEGMENT NUMBER 01094000
  1203. XR R9,R8 GPR 9 = PAGE NUMBER W/IN SEGMENT 01095000
  1204. SRL R8,14(0) CONVERT TO SEGMENT TABLE INDEX 01096000
  1205. SRL R9,9(0) CONVERT TO SWAP-TABLE INDEX 01097000
  1206. LA R7,0(R8,R10) R7 = SEGMENT TABLE ENTRY ADDRESS 01098000
  1207. TM 3(R7),X'01' IS THE SEGMENT AVAILABLE ? 01099000
  1208. BO SETCOD1 NO - CC = 1 01100000
  1209. ICM R7,7,1(R7) GET PAGE TABLE ADDRESS 01101000
  1210. S R7,F8 BACK UP TO PAGETABLE HEADER 01102000
  1211. L R7,4(0,R7) PICK UP SWAPTABLE POINTER 01103000
  1212. LA R7,0(R9,R7) GPR 7 = SWAP-TABLE ENTRY ADDRESS 01104000
  1213. L R0,4(,R7) GPR 0 = 'CCPD' FOR 'DMKSYM' 01105000
  1214. LTR R0,R0 SAFETY CHECK 01106000
  1215. BNP SETCOD1 GOOD THING, TOO 01107000
  1216. LR R1,R5 VIRTUAL ADDRESS TO GPR 1 01108000
  1217. CALL DMKRPAGT,PARM=0 USER WILL GET THE PAGE LATER 01109000
  1218. BC 2,DRDPROT OOPS .. TRIED TO OVERLAY A SHARED PAGE 01110000
  1219. BC 1,DRDIOER FATAL I/O ERROR WHILE READING 01111000
  1220. BC 4,SETCC3 PAGE LOCKED FOR I/O @VA08925 01111500
  1221. B DRDEXIT EXIT WITH CC = 0 01112000
  1222. SPACE 2 01113000
  1223. LTORG 01114000
  1224. EJECT 01115000
  1225. COPY SPOOL 01116000
  1226. COPY VMBLOK 01117000
  1227. COPY SAVE 01118000
  1228. COPY EQU 01119000
  1229. COPY RBLOKS 01120000
  1230. COPY VBLOKS 01121000
  1231. COPY ALLOC 01122000
  1232. COPY DEVTYPES 01123000
  1233. PSA 01124000
  1234. END DMKDRD 01125000