User Tools

Site Tools


ibm:vm370-lib:cp:dmkhve.assemble_src

DMKHVE Source

References

Source Listing

DMKHVE.ASSEMBLE.txt
  1. HVE TITLE 'DMKHVE (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 00002000
  3. COPY OPTIONS 00003000
  4. COPY LOCAL 00004000
  5. *. 00005000
  6. * MODULE NAME - 00006000
  7. * 00007000
  8. * DMKHVE 00008000
  9. * 00009000
  10. * CONTENTS - 00010000
  11. * 00011000
  12. * DMKHVEYL - DATA TABLE - DASD CYLINDERS/DEVICE 00012000
  13. * DMKHVEPC - DATA TABLE - DASD PAGES/CYLINDER 00013000
  14. *. 00014000
  15. SPACE 2 00015000
  16. DMKHVE START 0 @VM03170 00016000
  17. MODID DC CL8'DMKHVE' MODULE IDENTIFIER @VM03170 00017000
  18. SPACE 00018000
  19. ENTRY DMKHVEYL,DMKHVEPC @VM03170 00019000
  20. EXTRN DMKSYSER 00020000
  21. EXTRN DMKSYSCT @V5088AA 00021000
  22. EXTRN DMKIOEFR @V5088AA 00022000
  23. EXTRN DMKIOEHS @V5088AA 00023000
  24. EXTRN DMKIOECT @V5088AA 00024000
  25. EXTRN DMKSCNRU,DMKRPAGT 00025000
  26. EJECT 00026000
  27. *. 00027000
  28. * 00028000
  29. * SUBROUTINE NAME - 00029000
  30. * 00030000
  31. * DMKHVEAL 00031000
  32. * 00032000
  33. * FUNCTION - 00033000
  34. * 00034000
  35. * TO PERFORM SERVICES FOR VIRTUAL MACHINES AS REQUESTED 00035000
  36. * VIA THE DIAGNOSE INSTRUCTION. 00036000
  37. * 00037000
  38. * ATTRIBUTES - 00038000
  39. * 00039000
  40. * REENTRANT, PAGEABLE, CALLED VIA SVC 00040000
  41. * 00041000
  42. * ENTRY POINTS - 00042000
  43. * 00043000
  44. * DMKHVEAL - CALLED VIA SVC FROM DMKHVC 00044000
  45. * 00045000
  46. * 00046000
  47. * ENTRY CONDITIONS - 00047000
  48. * 00048000
  49. * FOR DMKHVEAL: 00049000
  50. * GPR 12 = ADDRESS OF DMKHVEAL 00050000
  51. * GPR 11 = ADDRESS OF VMBLOK 00051000
  52. * 'VMINST' FIELD CONTAINS THE DIAGNOSE INSTRUCTION IMAGE 00052000
  53. * 00053000
  54. * EXIT CONDITIONS - 00054000
  55. * 00055000
  56. * DEPENDENT ON THE SERVICE PERFORMED. CONTROL RETURNS 00056000
  57. * TO THE USER VIA DMKDSPCH. 00057000
  58. * 00058000
  59. * CALLS TO OTHER ROUTINES - 00059000
  60. * 00060000
  61. * DMKDSPCH - TO RE-DISPATCH THE SERVICED USER 00061000
  62. * DMKRPAGT - TO PROVIDE A USER WITH ONE PAGE OF SYSTEM DATA 00062000
  63. * DMKSCNRU - TO LOCATE THE SYSRES RDEVBLOK 00063000
  64. * 00064000
  65. EJECT 00065000
  66. * EXTERNAL REFERENCES - 00066000
  67. * 00067000
  68. * DMKSYSER - DASD START CYLINDER OF ERROR RECORDING AREA 00068000
  69. * DMKIOEFR - INDICATION IF FRAME RECORDS ARE PRESENT 00069000
  70. * ON THE ERROR RECORDING CYLINDERS 00070000
  71. * DMKIOEHS - DASD START OF FIRST ERROR RECORD 00071000
  72. * DMKIOECT - COUNT OF CYLINDERS FOR ERROR RECORDING 00072000
  73. * 00073000
  74. * TABLES / WORK AREAS - 00074000
  75. * 00075000
  76. * VMBLOK, RDEVBLOK 00076000
  77. * 00077000
  78. * REGISTER USAGE - 00078000
  79. * 00079000
  80. * GPR 12 = BASE REGISTER FOR DMKHVEAL 00080000
  81. * GPR 11 = VMBLOK ADDRESSABILITY 00081000
  82. * GPR 9 = INTERNAL LINK REGISTER 00082000
  83. * GPR 6 = ADDRESS OF DIAGNOSE 'R2' VALUE 00083000
  84. * GPR 5 = ADDRESS OF DIAGNOSE 'R1' VALUE 00084000
  85. * 00085000
  86. * NOTES - 00086000
  87. * 00087000
  88. * AN ARTIFICIAL PROGRAM INTERRUPT (PRIVILEGED OPERATION 00088000
  89. * EXCEPTION WHILE IN VIRTUAL SUPERVISOR STATE) IS GENER- 00089000
  90. * ATED BY DMKHVEAL WHENEVER A VIRTUAL MACHINE REQUESTS 00090000
  91. * A SERVICE WHICH IS RESTRICTED TO COMMAND CLASSES OTHER 00091000
  92. * THAN THOSE ALLOWED TO THE VIRTUAL MACHINE. 00092000
  93. * 00093000
  94. * OPERATION - 00094000
  95. * 00095000
  96. * THE FUNCTION CODE CONTAINED IN THE ADDRESS FIELD OF THE 00096000
  97. * DIAGNOSE INSTRUCTION IS EXAMINED FOR VALIDITY. 00097000
  98. * A SPECIFICATION EXECPTION IS REFLECTED TO THE VIRTUAL 00098000
  99. * MACHINE IF THE CODE IS UNRECOGNIZED OR NOT A MULTIPLE 00099000
  100. * OF 4. A PRIVILEGED-OPERATION INTERRUPT IS GENERATED IF A 00100000
  101. * RESTRICTED SERVICE IS REQUESTED BY THE VIRTUAL MACHINE. 00101000
  102. * 00102000
  103. * SERVICES AVAILABLE VIA VIRTUAL DIAGNOSE ARE AS FOLLOWS: 00103000
  104. * 00104000
  105. * CODE = X'002C' 00105000
  106. * SUBCODE = '01' RETURN DASD START ADDRESS OF 00106000
  107. * _______________ ERROR RECORDING DATA AREA PLUS 00107000
  108. * COUNT OF ERROR RECORDING CYLS. 00108000
  109. * (CLASS C, E, OR F) 00109000
  110. * 'R1' = ON RETURN: COMPRESSED DASD ADDRESS (CCPD) OF 00110000
  111. * FIRST RECORD IN ERROR RECORDING AREA. 00111000
  112. * 00112000
  113. * THE COMPRESSED DASD ADDRESS IS CONTRUCTED FROM THE 00113000
  114. * START CYLINDER NUMBER OF THE ERROR RECORDING AREA (FROM 00114000
  115. * DMKSYSER) AND THE DEVICE CODE (RDEVCODE) FROM THE SYSTEM 00115000
  116. * IPL DEVICE RDEVBLOK. THE VIRTUAL CONDITION CODE IS SET 00116000
  117. * TO ZERO AND RETURN IS VIA DMKDSPCH. 00117000
  118. * 00118000
  119. * 'R2' = ON RETURN: NUMBER OF CYLINDERS TO BE USED FOR 00119000
  120. * ERROR RECORDING (IN LOW-ORDER HALF-WORD) 00120000
  121. * 00121000
  122. * SUBCODE = X'02' RETURN THE DASD LOCATION OF 1ST 00122000
  123. * _______________ ERROR RECORD. 00123000
  124. * 00124000
  125. * 'R1' = ON RETURN: DASD LOCATION (IN CB0R FORMAT) OF 00125000
  126. * 1ST ERROR RECORD 00126000
  127. * 00127000
  128. * SUBCODE = X'04' RETURN INDICATION OF WHETHER 00128000
  129. * _______________ THERE ARE FRAME RECORDS ON THE 00129000
  130. * ERROR RECORDING CYLINDERS 00130000
  131. * 00131000
  132. * 'R2' = ON RETURN: X'02' IN HIGH-ORDER BYTE IF FRAME 00132000
  133. * RECORDS ARE PRESENT ON ERROR RECORDING CYLS; 00133000
  134. * X'00' IF NO FRAME RECORDS ARE PRESENT. 00134000
  135. * 00135000
  136. * CODE = X'0030' READ ONE RECORD OF ERROR RECORDING AREA DATA 00136000
  137. * (CLASS C, E, OR F) 00137000
  138. * 'R1' = COMPRESSED DASD ADDRESS (CCPD) OF REQUESTED DATA 00138000
  139. * 'R2' = START ADDRESS OF A VIRTUAL STORAGE FULL-PAGE BUFFER 00139000
  140. * 00140000
  141. * THE DASD ADDRESS IS EXAMINED FOR VALIDITY, AND IF 00141000
  142. * IT IS O.K., THE DATA RECORD IS MADE AVAILABLE VIA A CALL 00142000
  143. * TO DMKRPAGT. THE VIRTUAL CONDITION CODE IS SET AS FOLLOWS: 00143000
  144. * CC = 0 SUCCESSFUL READ, DATA IS AVAILABLE 00144000
  145. * CC = 1 END OF CYLINDER REACHED, NO DATA 00145000
  146. * CC = 2 => FATAL I/O ERROR READING DATA PAGE 00146000
  147. * CC = 3 RY+1 = 4 INVALID CYLINDER, OUTSIDE OF RECORDING AREA 00147000
  148. * CC = 3 RY+1 = 20 PAGE BUFFER LOCKED FOR I/O 00148000
  149. * 00149000
  150. * CODES = X'0088' THRU X'00FC' RESERVED FOR IBM USE 00150000
  151. * CODES = X'0100' THRU X'01FC' RESERVED FOR INSTALLATION USE 00151000
  152. *. 00152000
  153. EJECT 00153000
  154. *---------------------------------------------------------------------* 00154000
  155. * * 00155000
  156. * PROCESS VIRTUAL DIAGNOSE FOR VIRTUAL MACHINES * 00156000
  157. * * 00157000
  158. *---------------------------------------------------------------------* 00158000
  159. USING SAVEAREA,R13 @VM03170 00159000
  160. DMKHVEAL RELOC @VM03170 00160000
  161. USING PSA,0 00161000
  162. USING VMBLOK,R11 00162000
  163. SPACE 2 00163000
  164. TM VMINST+3,X'03' IS CODE MULTIPLE OF 4? 00164000
  165. BNZ SPECERR NO - SPECIFICATION 00165000
  166. IC R5,VMINST+1 GET REGISTERS SPECIFIED 00166000
  167. LR R6,R5 00167000
  168. SLL R6,2(0) USER'S 'R2' NUMBER 00168000
  169. N R6,F60 ... 00169000
  170. SRL R5,2(0) ... 00170000
  171. N R5,F60 REGISTER NO. * 4 00171000
  172. LA R5,VMGPRS(R5) ADDR OF 'R1' IN VMBLOK 00172000
  173. LA R6,VMGPRS(R6) ADDR OF 'R2' IN VMBLOK 00173000
  174. LH R4,VMINST+2 GET FUNCTION CODE FROM INSTRUCTIO@V200820 00174000
  175. CL R4,=A(HVEMAXC) WITHIN SYSTEM SUPPORTED RANGE ? @VM03170 00175000
  176. BH HVEUSER NO -- CHECK FOR INSTALLATION CODE@VM03170 00176000
  177. B HVEODER(R4) JUMP INTO IT @VM03170 00177000
  178. SPACE 2 00178000
  179. HVEODER EQU * DECODING TABLE FOR HVE'S @VM03170 00179000
  180. B HVEEXIT '000' - SUPPORTED BY DMKHVD @VM03170 00180000
  181. B HVEEXIT '004' - SUPPORTED BY DMKHVD 00181000
  182. B HVEEXIT '008' - SUPPORTED BY DMKHVC @VM03170 00182000
  183. B HVEEXIT '00C' - SUPPORTED BY DMKHVC @VM03170 00183000
  184. B HVEEXIT '010' - SUPPORTED BY DMKHVC @VM03170 00184000
  185. B HVEEXIT '014' - SUPPORTED BY DMKHVD @VM03170 00185000
  186. * 00186000
  187. B HVEEXIT '018' - SUPPORTED BY DMKHVC @VM03170 00187000
  188. B HVEEXIT '01C' - SUPPORTED BY DMKHVD @VM03170 00188000
  189. B HVEEXIT '020' - SUPPORTED BY DMKHVC @VM03170 00189000
  190. B HVEEXIT '024' - SUPPORTED BY DMKHVD @VM03170 00190000
  191. B HVEEXIT '028' - SUPPORTED BY DMKHVC @VM03170 00191000
  192. B HVEEREP1 '02C' - GET DASD START OF @VM03170 00192000
  193. * LOGREC AREA 00193000
  194. B HVEEREP2 '030' - READ ONE PAGE OF LOGREC @VM03170 00194000
  195. * DATA 00195000
  196. B HVEEXIT '034' - SUPPORTED BY DMKHVD @VM03170 00196000
  197. * FILE 00197000
  198. B HVEEXIT '038' - SUPPORTED BY DMKHVD @VM03170 00198000
  199. B HVEEXIT '03C' - SUPPORTED BY DMKHVD @VM03170 00199000
  200. B HVEEXIT '040' - RESERVED FOR FUTURE USE @VM03170 00200000
  201. B HVEEXIT '044' - RESERVED FOR FUTURE USE @VM03170 00201000
  202. B HVEEXIT '048' - RESERVED FOR FUTURE USE @VM03170 00202000
  203. B HVEEXIT '04C' - SUPPORTED BY DMKHVD @VM03170 00203000
  204. B HVEEXIT '050' - SUPPORTED BY DMKHVD @VM03170 00204000
  205. B HVEEXIT '054' - SUPPORTED BY DMKHVD @VM03170 00205000
  206. B HVEEXIT '058' - SUPPORTED BY DMKHVC @VM03170 00206000
  207. B HVEEXIT '05C' - SUPPORTED BY DMKHVC @VM03170 00207000
  208. B HVEEXIT '060' - SUPPORTED BY DMKHVC @VM03170 00208000
  209. B HVEEXIT '064' - SUPPORTED BY DMKHVC @VM03170 00209000
  210. B HVEEXIT '068' - SUPPORTED BY DMKHVC @V60B9BA 00210000
  211. B HVEEXIT '06C' - SUPPORTED BY DMKHVC @V60B9BA 00211000
  212. B HVEEXIT '070' - SUPPORTED BY DMKHVC @V60B9BA 00212000
  213. B HVEEXIT '074' - SUPPORTED BY DMKHVD @V60B9BA 00213000
  214. B HVEEXIT RESERVED FOR X'78' @V60C1BD 00214000
  215. B HVEEXIT RESERVED FOR X'7C' @V60C1BD 00215000
  216. B HVEEXIT RESERVED FOR X'80' @V60C1BD 00216000
  217. B HVEEXIT X'84' - SUPPORTED BY DMKHVC @V60C1BD 00217000
  218. HVEMAXC EQU *-HVEODER-4 MAXIMUM CODE NUMBER DEFINED @VM03170 00218000
  219. EJECT 00219000
  220. HVEUSER EQU * DECODING FOR @VM03170 00220000
  221. * INSTALLATION-DEFINED CODES 00221000
  222. S R4,F256 WITHIN INSTALLATION-DEFINED RANGE@V200820 00222000
  223. BM SPECERR NO -- SPECIFICATION EXCEPTION @V200820 00223000
  224. CL R4,=A(USRMAXC) VALID CODE FOR THIS TABLE ? @V200820 00224000
  225. BH SPECERR NO -- SPECIFICATION EXCEPTION @V200820 00225000
  226. B USRCODE(R4) BRANCH TO PROCESSING ROUTINE @V200820 00226000
  227. SPACE 2 00227000
  228. USRCODE EQU * DECODING TABLE FOR INSTALLATION @V200820 00228000
  229. * CODES 00229000
  230. B SPECERR (PROTOTYPE) @V200820 00230000
  231. USRMAXC EQU *-USRCODE-4 HIGHEST INSTALLATION CODE DEFINED@V200820 00231000
  232. SPACE 2 00232000
  233. HVECC1 TM *+1,X'FF' SET CC=1 @VM03170 00233000
  234. ST R0,SAVER0 SAVE PC INTERRUPT CODE FOR DMKHVE@VM03170 00234000
  235. B GENEXIT RETURN TO CALLER @VM03170 00235000
  236. HVEEXIT CLI *+1,0 SET CC=0 @VM03170 00236000
  237. GENEXIT EXIT RETURN TO CALLER @VM03170 00237000
  238. SPACE 2 00238000
  239. HVEDTC1 EQU * SET CONDITION CODE = 1 @VM03170 00239000
  240. LA R2,X'10' CONDITION CODE WILL BE ONE 00240000
  241. B HVECSET GO SET CONDITION CODE @VM03170 00241000
  242. HVEDTC2 EQU * SET CONDITION CODE = 2 @VM03170 00242000
  243. LA R2,X'20' CONDITION CODE WILL BE TWO 00243000
  244. B HVECSET GO SET CONDITION CODE @VM03170 00244000
  245. HVEDTC3 EQU * SET CONDITION CODE = 3 @VM03170 00245000
  246. LA R2,X'30' CONDITION CODE WILL BE THREE 00246000
  247. HVECSET EQU * SET VIRTUAL CONDITION CODE @VM03170 00247000
  248. LA R1,VMPSW+4 POSITION IF IN BC MODE 00248000
  249. TM VMESTAT,VMEXTCM (IT'S DIFFERENT FOR ECMODE) 00249000
  250. BZ *+8 00250000
  251. LA R1,VMPSW+2 POSITION IF IN EC MODE 00251000
  252. NI 0(R1),B'11001111' CLEAR ANY EXITING CC @VM03170 00252000
  253. EX R2,HVESETCC SET THE CONDITION CODE IN VMPSW @VM03170 00253000
  254. B HVEEXIT @VM03170 00254000
  255. SPACE 00255000
  256. HVESETCC OI 0(R1),*-* EXECUTED FOR COND. CODE SETTING @VM03170 00256000
  257. EJECT 00257000
  258. *---------------------------------------------------------------------* 00258000
  259. * DASD START OF LOGREC - CODE '02C' FOR CLASS C,E,F ONLY * 00259000
  260. * PLUS CYLINDER COUNT @V5088AA 00260000
  261. * DASD START OF ERROR RECORDS PLUS FRAME INDICATION @V5088AA 00261000
  262. *---------------------------------------------------------------------* 00262000
  263. HVEEREP1 EQU * PROVIDE DASD START ADDRESS @VM03170 00263000
  264. TM VMCLEVEL,VMCLASSC+VMCLASSE+VMCLASSF ALLOWED ? 00264000
  265. BZ PRIVLGD NO - ERROR 00265000
  266. CLI 3(R5),STRTCNT REQUEST FOR LOGREC START & CT? @V5088AA 00266000
  267. BE ERRSTART GO GET DASD START + NO. CYLS @V5088AA 00267000
  268. TM 3(R5),X'FF'-HDRFRAMS IS REQUEST FOR ANYTHING BUT@V5088AA 00268000
  269. * HDRSTART OR FRAME INDICATOR? @V5088AA 00269000
  270. BNZ SPECERR YES, ERROR @VA10376 00270000
  271. TM 3(R5),HDRFRAMS IS REQUEST AT LEAST '02'/'04'? @V5088AA 00271000
  272. BZ SPECERR NO CODE SPECIFIED ON REQUEST @V5088AA 00272000
  273. B HDRFRAME GO SEE WHICH ONE @V5088AA 00273000
  274. ERRSTART EQU * HRC075DK 00274000
  275. L R1,=A(DMKSYSER) -> ERR area cyls info HRC075DK 00274200
  276. LH R1,4(,R1) Get CUU of ERR area HRC075DK 00274400
  277. LR R2,R6 SAVE R6 ACROSS CALL TO DMKSCNRU@V5088AA 00275000
  278. CALL DMKSCNRU FIND RDEVBLOK 00276000
  279. USING RDEVBLOK,R8 00277000
  280. LR R6,R2 RESTORE REGISTER 6 VALUE @V5088AA 00278000
  281. L R2,=A(DMKSYSER) START CYLINDER FOR LOGREC 00279000
  282. LH R3,RDEVCODE DASD CODE, HIGH-ORDER ZERO 00280000
  283. ICM R3,12,0(R2) CONSTRUCT 'CCPD' FORMAT 00281000
  284. ST R3,0(,R5) BACK VIA USER'S 'R1' 00282000
  285. MVI 2(R5),PAGEONE INDICATE FIRST PAGE ON CYL @V5088AA 00283000
  286. L R2,=A(DMKSYSCT) ADDRESS OF COUNT OF REC. CYLS. @V5088AA 00284000
  287. LH R2,0(R2) GET COUNT OF RECORDING CYLS @V5088AA 00285000
  288. ST R2,0(R6) BACK VIA USER'S 'R2' @V5088AA 00286000
  289. B EREPDONE GO SET CONDITION CODE @V5088AA 00287000
  290. SPACE 2 00288000
  291. * HERE TO CALCULATE HDR INFO 00289000
  292. HDRFRAME TM 3(R5),FRAMES IS REQUEST FOR FRAME INDICATOR @V5088AA 00290000
  293. BZ HDRSTART NO, CHECK FOR HDRSTART REQUEST @V5088AA 00291000
  294. L R2,=A(DMKIOEFR) FRAME INDICATOR @V5088AA 00292000
  295. IC R3,0(R2) RETRIEVE ONE-BYTE INDICATOR @V5088AA 00293000
  296. STC R3,3(R6) RETURN VIA USER'S 'R2' @V5088AA 00294000
  297. HDRSTART TM 3(R5),HDRST IS REQUEST FOR HDRSTART VALUE? @V5088AA 00295000
  298. BZ EREPDONE NO, GO SET CONDITION CODE @V5088AA 00296000
  299. L R2,=A(DMKIOEHS) HDRSTART VALUE (DISK ADDRESS @V5088AA 00297000
  300. * FOR FIRST PAGE BEYOND FRAME @V5088AA 00298000
  301. * RECORDS ON ERROR RECORDING CYLS@V5088AA 00299000
  302. * WHERE ERROR RECORDS CAN BEGIN) @V5088AA 00300000
  303. L R3,0(R2) RETRIEVE HDRSTART ADDRESS @V5088AA 00301000
  304. ST R3,0(R5) RETURN VIA USER'S 'R1' @V5088AA 00302000
  305. EREPDONE NI VMPSW+4,X'CF' SET CONDITION CODE = 0 @V5088AA 00303000
  306. NI VMPSW+2,X'CF' SET CONDITION CODE = 0 00304000
  307. B HVEEXIT ...AND RETURN @VM03170 00305000
  308. DROP R8 00306000
  309. EJECT 00307000
  310. *---------------------------------------------------------------------* 00308000
  311. * READ ONE PAGE OF LOGREC - CODE '030' FOR CLASS C,E,F ONLY * 00309000
  312. *---------------------------------------------------------------------* 00310000
  313. HVEEREP2 EQU * READ LOGREC DATA PAGE @VM03170 00311000
  314. TM VMCLEVEL,VMCLASSC+VMCLASSE+VMCLASSF ALLOWED ? 00312000
  315. BZ PRIVLGD NO - ERROR 00313000
  316. NI VMPSW+4,X'CF' SET CONDITION CODE ZERO 00314000
  317. NI VMPSW+2,X'CF' SET CONDITION CODE = 0 00315000
  318. LA R4,VMGPRS+(4*15) GET ADDR OF SAVED R15 @VA08925 00316000
  319. CR R4,R6 IS RY = R15 ?? @VA08925 00317000
  320. BE SPECERR YES, SORRY BUT THATS NOT ALLOWED @VA08925 00318000
  321. L R5,0(,R5) GET 'CCPD' INTO GPR5 00319000
  322. L R4,0(,R6) VIRTUAL PAGE ADDRESS TO GPR 4 00320000
  323. LR R1,R4 ...AND GPR 1 00321000
  324. L R2,F4096 FULL-PAGE FIELD LENGTH 00322000
  325. LA R9,SPECERR SPECIFICATION ERROR IF UNALIGNED 00323000
  326. BAL R10,ADDCHEK CHECK ADDRESS VALIDITY 00324000
  327. L R1,=A(DMKSYSER) -> ERR area cyls info HRC075DK 00325000
  328. LH R1,4(,R1) Get CUU of ERR area HRC075DK 00325500
  329. CALL DMKSCNRU FIND THE RDEVBLOK 00326000
  330. USING RDEVBLOK,R8 00327000
  331. CLM R5,1,RDEVCODE+1 CHECK THE 'D' CODE 00328000
  332. BNE SPECERR NO GOOD 00329000
  333. LA R1,DMKHVEYL CYLINDERS/DEVICE TABLE @VM03170 00330000
  334. LA R2,DMKHVEPC PAGES/CYLINDER TABLE @VM03170 00331000
  335. CLI RDEVTYPE,TYP2305 ZEUS ? 00332000
  336. BNE CK3330 NOPE, GO CHECK OUT 3330 @V200820 00333000
  337. CLI RDEVMDL,1 IS IT MODEL 1 2305? @V200820 00334000
  338. BE CHKVALID YUP, ALL SET. @V200820 00335000
  339. LA R1,2(,R1) MUST BE MODEL 2, ... @V200820 00336000
  340. LA R2,1(,R2) ... SET UP ACCORDINGLY. @V200820 00337000
  341. B CHKVALID NOW GO CHECK IT OUT. @V200820 00338000
  342. CK3330 LA R1,4(,R1) JUMP TO NEXT CLASS ENTRY @V200820 00339000
  343. LA R2,2(,R2) ... @V200820 00340000
  344. CLI RDEVTYPE,TYP3330 MERLIN ? 00341000
  345. BNE CK3350 NOPE, CHECK FOR 3350 @VM03170 00342000
  346. CLI RDEVMDL,11 YUP, IS IT 3330-11? @V200820 00343000
  347. BNE CHKVALID NOPE, MUST BE VANILLA 3330 @V200820 00344000
  348. LA R1,2(,R1) AIM AT 3330-11 ... @V200820 00345000
  349. LA R2,1(,R2) ... VALUES. @V200820 00346000
  350. B CHKVALID AND GO CHECK THEM OUT. @V200820 00347000
  351. CK3350 LA R1,4(,R1) NEXT CYLINDER LIMIT @VM03170 00348000
  352. LA R2,2(,R2) NEXT PAGE LIMIT (35MB) @VM03170 00349000
  353. CLI RDEVTYPE,TYP3350 3350 ?? @VM03170 00350000
  354. BE CHKVALID VALIDATE PAGE AND CYLINDER @VM03170 00351000
  355. LA R1,2(,R1) Point to 3375 cylinder limit HRC106DK 00352090
  356. LA R2,1(,R2) Point to 3375 page limit HRC106DK 00352180
  357. CLI RDEVTYPE,TYP3375 3375 ?? HRC106DK 00352270
  358. BE CHKVALID Validate page and cylinder HRC106DK 00352360
  359. CLI RDEVTYPE,TYP3380 3380 ?? HRC106DK 00352450
  360. BNE CK2314 Skip to next type HRC106DK 00352540
  361. LA R1,2(,R1) Point to 3380 K cylinder limit HRC106DK 00352630
  362. LA R2,1(,R2) Point to 3380 page limit HRC106DK 00352720
  363. TM RDEVMDL,RDEVMD83 Triple density 3380? HRC106DK 00352810
  364. BO CHKVALID Validate page and cylinder HRC106DK 00352900
  365. LA R1,2(,R1) Point to 3380 E cylinder limit HRC106DK 00352990
  366. TM RDEVMDL,RDEVMD82 Double density 3380? HRC106DK 00353080
  367. BO CHKVALID Validate page and cylinder HRC106DK 00353170
  368. LA R1,2(,R1) Point to 3380 A/D/J cyl. limit HRC106DK 00353260
  369. B CHKVALID Validate page and cylinder HRC106DK 00353350
  370. CK2314 LA R1,8(,R1) Skip 3375/3380 cylinder limits HRC106DK 00353440
  371. LA R2,2(,R2) Skip 3375/3380 page limits HRC106DK 00353530
  372. CLI RDEVTYPE,TYP2319 LAME DUCK ? 00354000
  373. BE CHKVALID YES - CHECK 'CCP' 00355000
  374. LA R1,2(,R1) NEXT CYLINDER LIMIT (3340-35MB) @VM03170 00356000
  375. LA R2,1(,R2) NEXT PAGE LIMIT (35MB) @VM03170 00357000
  376. CLI RDEVTYPE,TYP3340 3340 ?? @VM03170 00358000
  377. BNE ABEND1 NO -- UNKNOWN DEVICE TYPE @VM03170 00359000
  378. TM RDEVFTR,FTR35MB 35MB PACK ? @VM03170 00360000
  379. BO CHKVALID YES -- @VM03170 00361000
  380. LA R1,2(,R1) CYLINDER LIMIT FOR 70MB @VM03170 00362000
  381. LA R2,1(,R2) NEXT PAGE LIMIT FOR 3340(70MB) @VM03170 00363000
  382. B CHKVALID VALIDATE PAGE AND CYLINDER @VM03170 00364000
  383. SPACE 00365000
  384. ****** 00366000
  385. ABEND1 ABEND 1 VERY STRANGE SYSRES DEVICE 00367000
  386. ****** 00368000
  387. CHKVALID EQU * CHECK CYLINDER AND PAGE NUMBERS 00369000
  388. CLM R5,12,0(R1) VALID CYLINDER NUMBER ? 00370000
  389. BH HVECC3R4 NO - SET CC = 3, RETURN CODE = 4 @VA08925 00371000
  390. CLM R5,2,0(R2) VALID PAGE WITHIN CYLINDER ? 00372000
  391. BNH GIVEPAG YES - CHECK FOR LOGREC LIMITS 00373000
  392. B HVEDTC1 SET CC = 1 => END OF CYLINDER @VM03170 00374000
  393. HVECC3R4 DS 0H @VA08925 00375000
  394. LA R1,4 GET ERROR RETURN CODE = 4 @VA08925 00376000
  395. HVESETRT DS 0H @VA08925 00377000
  396. IC R2,VMINST+1 GET REGISTERS SPECIFIED @VA08925 00378000
  397. SLL R2,2(0) USER'S RY REGISTER NUMBER @VA08925 00379000
  398. N R2,F60 ..... @VA08925 00380000
  399. LA R2,VMGPRS(R2) ADDR OF RY IN VMGPRS AREA @VA08925 00381000
  400. ST R1,4(,R2) PASS ERROR CODE IN RY+1 @VA08925 00382000
  401. B HVEDTC3 AND SET CC = 3 @VA08925 00383000
  402. HVELOCK DS 0H @VA08925 00384000
  403. LA R1,20 GET RETURN CODE 20 @VA08925 00385000
  404. B HVESETRT AND SET CC = 3, RETURN CODE 20 @VA08925 00386000
  405. EJECT 00387000
  406. GIVEPAG EQU * CHECK CYLINDER LIMITS 00388000
  407. L R1,=A(DMKSYSER) LOGREC START ADDRESS 00389000
  408. L R2,=A(DMKSYSCT) COUNT OF RECORDING CYLS. @V5088AA 00390000
  409. LH R2,0(R2) RETRIEVE NO. OF RECORDING CYLS @V5088AA 00391000
  410. AH R2,0(R1) ADD START OF ERROR AREA @V5088AA 00392000
  411. BCTR R2,0 SUBTRACT ONE @V5088AA 00393000
  412. CLM R5,B'1100',0(R1) COMPARE INPUT 'CC' & RECORDING @V5088AA 00394000
  413. * AREA START--MUST BE >= START, @V5088AA 00395000
  414. * AND <= RECORDING AREA END @V5088AA 00396000
  415. BL HVECC3R4 NO - SET CC = 3, RETURN CODE = 4 @VA08925 00397000
  416. LR R1,R5 INPUT 'CCPD' ADDRESS @V5088AA 00398000
  417. SRL R1,16 ISOLATE 'CC' PORTION @V5088AA 00399000
  418. CR R1,R2 ENSURE 'CC' IS <= END OF AREA @V5088AA 00400000
  419. BH HVECC3R4 NO - SET CC = 3, RETURN CODE = 4 @VA08925 00401000
  420. GIVEDATA EQU * PASS DATA TO USER 00402000
  421. LR R0,R5 'CCPD' OF PAGE 00403000
  422. LR R1,R4 ...AND ADDRESS OF BUFFER 00404000
  423. CALL DMKRPAGT,PARM=0 ASSIGN PAGE TO USER 00405000
  424. BC 2,PROTERR OOPS...TRIED TO OVERLAY A 00406000
  425. * SHARED PAGE 00407000
  426. BC 1,HVEDTC2 FATAL I/O ERROR => CC = < @VM03170 00408000
  427. BC 4,HVELOCK PAGE IS LOCKED FOR I/O @VA08925 00409000
  428. B HVEEXIT HE WILL GET IT LATER @VM03170 00410000
  429. DROP R8 00411000
  430. SPACE 2 00412000
  431. ADDCHEK EQU * EXAMINE ADDRESS FOR VALIDITY 00413000
  432. LA R1,0(,R1) 24 BITS ONLY 00414000
  433. LCTL C1,C1,VMSEG GET CORRECT SEG TABLE @VA08882 00415000
  434. LRA R0,0(,R1) VALID START ADDRESS ? @VM03170 00416000
  435. BC 8+2,ADDCHEK1 CONTINUE IF NOT A SEG EXCEPTION @V408246 00417000
  436. LR R0,R2 SAVE R2 FOR CALL TO PTRAN @V408246 00418000
  437. CALL DMKPTRAN,PARM=DEFER OTHERWISE LET PTRAN HANDLE @V408246 00419000
  438. BC 2,ADDRERR ADDRESSING EXCEPTION @V408246 00420000
  439. LR R2,R0 RESTORE R2 @V408246 00421000
  440. ADDCHEK1 DS 0H @V408246 00422000
  441. LA R14,0(R2,R1) R2 CONTAINS FIELD LENGTH 00423000
  442. BCTR R14,0 BACK UP TO LAST BYTE OF FIELD 00424000
  443. L R15,XPAGNUM PAGE NUMBER MASK 00425000
  444. NR R14,R15 ENDING PAGE ADDRESS 00426000
  445. LRA R0,0(,R14) IS ENDING ADDRESS VALID ? @VM03170 00427000
  446. BC 8+2,ADDCHEK2 CONTINUE IF NOT A SEG EXCEPTION @V408246 00428000
  447. STM R1,R2,SAVEWRK2 SAVE R1,R2 ACROSS CALL TO PTRAN @VA10736 00429000
  448. LR R1,R14 GET VIRT ADDRESS FOR PTRAN @VA08590 00430000
  449. CALL DMKPTRAN,PARM=DEFER OTHERWISE LET PTRAN HANDLE @V408246 00431000
  450. BC 2,ADDRERR ADDRESSING ERROR @V408246 00432000
  451. LM R1,R2,SAVEWRK2 RESTORE R1,R2 AFTER CALL @VA10736 00433000
  452. B ADDCHEK1 GO TRY AGAIN @V408246 00434000
  453. ADDCHEK2 DS 0H @V408246 00435000
  454. NR R15,R1 STARTING PAGE ADDRESS 00436000
  455. CLR R14,R15 CHECK FOR PAGE BOUNDARY CROSSING 00437000
  456. BCR 7,R9 YUP -- TAKE THE GR9 EXIT 00438000
  457. BR R10 RETURN - EVERYTHING IS O.K. 00439000
  458. EJECT 00440000
  459. SPECERR EQU * @V1D0631 00441000
  460. LA R0,X'06' INTERRUPT CODE 00442000
  461. B PROGINT 00443000
  462. SPACE 00444000
  463. ADDRERR EQU * REFLECT ADDRESSING ERROR 00445000
  464. LA R0,X'05' INTERRUPT CODE 00446000
  465. B PROGINT 00447000
  466. SPACE 00448000
  467. PROTERR EQU * REFLECT PROTECTION CHECK 00449000
  468. LA R0,X'04' INTERRUPT CODE 00450000
  469. B PROGINT 00451000
  470. SPACE 00452000
  471. PRIVLGD EQU * REFLECT PRIVILEGED OPERATION 00453000
  472. LA R0,X'02' INTERRUPT CODE 00454000
  473. SPACE 00455000
  474. PROGINT EQU * 00456000
  475. B HVECC1 REFLECT PROGRAM INTERRUPT @VM03170 00457000
  476. EJECT 00458000
  477. DMKHVEYL DS 0D CYLINDERS PER DEVICE - PAGING + @VM03170 00459000
  478. * SPOOLING 00460000
  479. DC H'47' 2305-1 @VA09958 00461000
  480. DC H'95' 2305-2 00462000
  481. DC H'403' 3330 00463000
  482. DC H'807' 3330-11 @V200538 00464000
  483. DC H'554' CYLINDER LIMIT FOR 3350 @VA09958 00465000
  484. DC H'958' Cylinder limit for a 3375 HRC106DK 00465100
  485. DC H'2654' Cylinder limit for a 3380 (K) HRC106DK 00465200
  486. DC H'1769' Cylinder limit for a 3380 (E) HRC106DK 00465300
  487. DC H'884' Cylinder limit for a 3380 (A/D/J)HRC106DK 00465400
  488. DC H'202' 2314, 2319 00466000
  489. DC H'347' CYLINDER LIMIT FOR 3340 (35MB) @V56BDA8 00467000
  490. DC H'695' CYLINDER LIMIT FOR 3340 (70MB) @V56BDA8 00468000
  491. SPACE 2 00469000
  492. DMKHVEPC DS 0D PAGES PER CYLINDER - PAGING + @VM03170 00470000
  493. * SPOOLING 00471000
  494. DC AL1(24) REC/CYL 2305-1 (SAME AS 2305-2) @V200538 00472000
  495. DC AL1(24) 2305-2 00473000
  496. DC AL1(57) 3330 00474000
  497. DC AL1(57) 3330-11 (SAME AS 3330) @V200538 00475000
  498. DC AL1(120) PAGE LIMIT FOR 3350 @VM03170 00476000
  499. DC AL1(96) Page limit for 3375 HRC106DK 00476100
  500. DC AL1(150) Page limit for 3380 HRC106DK 00476200
  501. DC AL1(32) 2314, 2319 00477000
  502. DC AL1(24) PAGE LIMIT FOR 3340 (35MB) @VM03170 00478000
  503. DC AL1(24) PAGE LIMIT FOR 3340 (70MB) @VM03170 00479000
  504. SPACE 00480000
  505. STRTCNT EQU X'01' REQUEST IS FOR DASD START OF @V5088AA 00481000
  506. * ERROR RECORDING AREA + NO. CYLS@V5088AA 00482000
  507. HDRFRAMS EQU X'06' REQUEST IS FOR HDRSTART VALUE @V5088AA 00483000
  508. * AND/OR FRAME INDICATOR @V5088AA 00484000
  509. FRAMES EQU X'04' REQUEST IS FOR FRAME INDICATOR @V5088AA 00485000
  510. HDRST EQU X'02' REQUEST IS FOR HDRSTART ADDR. @V5088AA 00486000
  511. PAGEONE EQU 1 FIRST PAGE ON A CYLINDER @V5088AA 00487000
  512. LTORG 00488000
  513. EJECT 00489000
  514. COPY EQU 00490000
  515. COPY VMBLOK 00491000
  516. COPY IOBLOKS (R9) @V1D0631 00492000
  517. PSA 00493000
  518. COPY UDIRECT 00494000
  519. COPY ACCOUNT 00495000
  520. COPY RBLOKS 00496000
  521. COPY VBLOKS 00497000
  522. COPY DEVTYPES 00498000
  523. COPY SAVE @VM03170 00499000
  524. COPY NETWORK @VM03170 00500000
  525. COPY NPRTBL @V60B9BA 00501000
  526. END DMKHVEAL 00502000
ibm/vm370-lib/cp/dmkhve.assemble_src.txt ยท Last modified: 2023/08/06 13:37 by Site Administrator