Table of Contents

DMKHVD Source

References

Source Listing

DMKHVD.ASSEMBLE.txt
  1. HVD TITLE 'DMKHVD (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. * DMKHVD 00008000
  9. * 00009000
  10. *. 00014000
  11. SPACE 2 00015000
  12. DMKHVD START 0 @VM03170 00016000
  13. MODID DC CL8'DMKHVD' MODULE IDENTIFIER @VM03170 00017000
  14. SPACE 00018000
  15. EXTRN DMKCPVAA,DMKUDRFU,DMKUDRRD,DMKUDRRV 00020000
  16. SPACE 00021000
  17. EXTRN DMKDRDSY @VM03170 00022000
  18. EXTRN DMKDRDER @VM03170 00023000
  19. EXTRN DMKIOEFM @V202232 00024000
  20. EXTRN DMKPSASP @V202232 00025000
  21. EXTRN DMKUDRDS @VM03170 00026000
  22. EXTRN DMKSYSRM @VA11268 00027000
  23. EXTRN DMKSCNVU,DMKDRDMP 00032000
  24. EXTRN DMKCPEID @VM03170 00033000
  25. EXTRN DMKCVTDB @VM03170 00034000
  26. EXTRN DMKSCNRU,DMKRPAGT 00035000
  27. EXTRN DMKSCNVD,DMKSNCP @V200820 00036000
  28. EXTRN DMKACOQU @VM03170 00037000
  29. EXTRN DMKUDRMD @V407466 00038000
  30. EXTRN DMKCPEPP PROGRAM PRODUCT BIT MAP @VMD0161 00039000
  31. EXTRN DMKSCNVS,DMKRPAPT,DMKQNTBL @V60B9BA 00040000
  32. EJECT 00041000
  33. *. 00042000
  34. * SUBROUTINE NAME - 00043000
  35. * 00044000
  36. * DMKHVDAL 00045000
  37. * 00046000
  38. * FUNCTION - 00047000
  39. * 00048000
  40. * TO PERFORM SERVICES FOR VIRTUAL MACHINES AS REQUESTED 00049000
  41. * VIA THE DIAGNOSE INSTRUCTION. 00050000
  42. * 00051000
  43. * ATTRIBUTES - 00052000
  44. * 00053000
  45. * REENTRANT, PAGEABLE, CALLED VIA SVC 00054000
  46. * 00055000
  47. * ENTRY POINTS - 00056000
  48. * 00057000
  49. * DMKHVDAL - CALLED VIA SVC FROM DMKHVC 00058000
  50. * DMKHVDPP - CALLED VIA SVC FROM DMKCPI 00059000
  51. * 00060000
  52. * ENTRY CONDITIONS - 00061000
  53. * 00062000
  54. * FOR DMKHVDAL: 00063000
  55. * GPR 12 = ADDRESS OF DMKHVDAL 00064000
  56. * GPR 11 = ADDRESS OF VMBLOK 00065000
  57. * 'VMINST' FIELD CONTAINS THE DIAGNOSE INSTRUCTION IMAGE 00066000
  58. * 00067000
  59. * FOR DMKHVDPP: 00068000
  60. * GPR 12 = ADDRESS OF DMKHVDPP 00069000
  61. * 00070000
  62. * EXIT CONDITIONS - 00071000
  63. * 00072000
  64. * DEPENDENT ON THE SERVICE PERFORMED. CONTROL RETURNS 00073000
  65. * TO THE USER VIA DMKDSPCH. 00074000
  66. * 00075000
  67. * CALLS TO OTHER ROUTINES - 00076000
  68. * 00077000
  69. * DMKDRDER - TO MANIPULATE INPUT SPOOL FILES 00078000
  70. * DMKDRDMP - TO READ SYSTEM DUMP SPOOL FILES 00079000
  71. * DMKDRDSY - TO READ THE SYSTEM SYMBOL TABLE 00080000
  72. * DMKDSPCH - TO RE-DISPATCH THE SERVICED USER 00081000
  73. * DMKFREE - TO OBTAIN FREE STORAGE FOR BUFFERS 00082000
  74. * DMKIOEFM - TO RE-FORMAT THE CP LOGREC AREA 00083000
  75. * DMKCVTDB - TO CONVERT DECIMAL RELEASE NUMBERS TO BINARY 00084000
  76. * DMKPSASP - TO EXAMINE VIRTUAL STORAGE PROTECTION KEYS 00085000
  77. * DMKPTRAN - TO PROCESS PAGING REQUESTS 00086000
  78. * DMKRPAGT - TO PROVIDE A USER WITH ONE PAGE OF SYSTEM DATA 00087000
  79. * DMKSCNRU - TO LOCATE THE SYSRES RDEVBLOK 00088000
  80. * DMKSCNVU - TO LOCATE VIRTUAL I/O BLOCKS 00089000
  81. * DMKUDRDS - TO PERFORM DYNAMIC USER DIRECTORY SWAP 00090000
  82. * DMKUDUMN - TO UPDATE DIRECTORY IN-PLACE 00091000
  83. * DMKSNCP - TO PERFORM THE 'SAVE FUNCTION FOR A 370X COMM. 00092000
  84. * CONTROL PROGRAM IMAGE 00093000
  85. * DMKSCNVS - LOCATE A RDEVBLOK BY VOLUME SERIAL NUMBER 00094000
  86. * DMKRPAPT - TO SAVE A 3800 IMAGE LIBRARY NAMED SYSTEM 00095000
  87. * 00096000
  88. EJECT 00097000
  89. * EXTERNAL REFERENCES - 00098000
  90. * 00099000
  91. * DMKSYSRM - REAL MACHINE SIZE IN BYTES 00100000
  92. * DMKCPEID - VM/370 RELEASE AND VERSION NUMBER FOR STIDX 00102000
  93. * DMKCPEPP - PROGRAM PRODUCT BIT MAP FOR STIDX 00103000
  94. * DMKQNTBL - ANCHOR FOR 3800 IMAGE LIBRARY NAMES 00108000
  95. * 00109000
  96. * TABLES / WORK AREAS - 00110000
  97. * 00111000
  98. * VMBLOK, VDEVBLOK, RDEVBLOK 00112000
  99. * 00113000
  100. * SAVEAREA - 00113010
  101. * 00113020
  102. * USED TO SAVE REGISTERS ACROSS CALLS TO OTHER MODULES 00113030
  103. * 00113040
  104. * SAVEWRK2 = GPR1 00113050
  105. * SAVEWRK3 = GPR2 00113060
  106. * 00113070
  107. * REGISTER USAGE - 00114000
  108. * 00115000
  109. * GPR 12 = BASE REGISTER FOR DMKHVDAL 00116000
  110. * GPR 11 = VMBLOK ADDRESSABILITY 00117000
  111. * GPR 9 = INTERNAL LINK REGISTER 00118000
  112. * GPR 6 = ADDRESS OF DIAGNOSE 'R2' VALUE 00119000
  113. * GPR 5 = ADDRESS OF DIAGNOSE 'R1' VALUE 00120000
  114. * 00121000
  115. * NOTES - 00122000
  116. * 00123000
  117. * AN ARTIFICIAL PROGRAM INTERRUPT (PRIVILEGED OPERATION 00124000
  118. * EXCEPTION WHILE IN VIRTUAL SUPERVISOR STATE) IS GENER- 00125000
  119. * ATED BY DMKHVDAL WHENEVER A VIRTUAL MACHINE REQUESTS 00126000
  120. * A SERVICE WHICH IS RESTRICTED TO COMMAND CLASSES OTHER 00127000
  121. * THAN THOSE ALLOWED TO THE VIRTUAL MACHINE. 00128000
  122. * 00129000
  123. * OPERATION - 00130000
  124. * 00131000
  125. * THE FUNCTION CODE CONTAINED IN THE ADDRESS FIELD OF THE 00132000
  126. * DIAGNOSE INSTRUCTION IS EXAMINED FOR VALIDITY. 00133000
  127. * A SPECIFICATION EXECPTION IS REFLECTED TO THE VIRTUAL 00134000
  128. * MACHINE IF THE CODE IS UNRECOGNIZED OR NOT A MULTIPLE 00135000
  129. * OF 4. A PRIVILEGED-OPERATION INTERRUPT IS GENERATED IF A 00136000
  130. * RESTRICTED SERVICE IS REQUESTED BY THE VIRTUAL MACHINE. 00137000
  131. * 00138000
  132. * SERVICES AVAILABLE VIA VIRTUAL DIAGNOSE ARE AS FOLLOWS: 00139000
  133. * 00140000
  134. * CODE = X'0000' STORE EXTENDED ID - STIDX - (ANY CLASS) 00141000
  135. * 'R1' = ADDRESS OF A DOUBLE WORD ALIGNED BUFFER IN VIRTUAL 00142000
  136. * STORAGE 00143000
  137. * 'R2' = BYTE COUNT OF INFORMATION TO BE STORED AT THE VIRTUAL 00144000
  138. * STORAGE ADDRESS SPECIFIED BY 'R1' IN THE FOLLOWING FORMAT: 00145000
  139. * +---------------------------------------+ 00146000
  140. * | VM/370 | 00147000
  141. * +--------------+----+---------+---------+ 00148000
  142. * | LEVEL | VC | MCEL | IPUADDR | 00149000
  143. * +--------------+----+---------+---------+ 00150000
  144. * | USERID | 00151000
  145. * +---------------------------------------+ 00152000
  146. * | PP FLAGS | 00153000
  147. * +---------------------------------------+ 00154000
  148. * 00155000
  149. * THE FIELDS STORED ARE DEFINED AS FOLLOWS: 00156000
  150. * VM/370 - APPEARS AS SHOWN, LEFT JUSTIFIED AND PADDED 00157000
  151. * WITH BLANKS 00158000
  152. * LEVEL - THE VERSION, LEVEL AND PLC TAPE NUMBER 00159000
  153. * OF THE HYPERVISOR IN HEX. EACH FIELD OCCUPIES 00160000
  154. * ONE BYTE AND IS OBTAINED FROM THE SYSTEM ID FIELD 00161000
  155. * IN THE MODULE DMKCPEID 00162000
  156. * VC - THE VERSION CODE RETURNED BY A STIDP EXECUTED 00163000
  157. * BY THE HYPERVISOR (VM/370) 00164000
  158. * MCEL - THE MAXIMUM MCEL RETURNED BY THE STIDP 00165000
  159. * IPUADDR - THE PROCESSOR ADDRESS RETURNED BY A STAP 00166000
  160. * EXECUTED BY THE HYPERVISOR - = TO 0 IF EXECUTED ON 00167000
  161. * A VIRTUAL OR REAL UNIPROCESSOR 00168000
  162. * USERID - THE VM USERID OF THE VIRTUAL MACHINE EXECUTING 00169000
  163. * THE STIDX 00170000
  164. * PP FLAGS - BIT MAP INDICATING WHICH PROGRAM PRODUCTS 00171000
  165. * ARE INSTALLED; BIT MAP KEPT IN DMKCPE AND INITIALIZED 00172000
  166. * AT INITIALIZATION TIME 00173000
  167. * 00174000
  168. * IF THE HYPERVISOR ITSELF IS EXECUTING IN A VIRTUAL MACHINE, 00175000
  169. * THE EXTENDED ID RETURNED BY A STIDX EXECUTED BY THE 00176000
  170. * HYPERVISOR IS APPENDED TO THE INFORMATION DESCRIBED ABOVE. 00177000
  171. * NOTE THAT THIS DEFINITION DIFFERS FROM THAT DESCRIBED IN 00178000
  172. * AR3799-01 IN THE AREA OF ALIGNMENT; ALSO, AN ARBITRARY LIMIT 00179000
  173. * OF FIVE LEVELS OF HYPERVISION HAS BEEN IMPOSED. 00180000
  174. * 00181000
  175. * 00182000
  176. * CODE = X'0004' EXAMINE REAL STORAGE LOCATIONS (CLASS C OR E) 00183000
  177. * 'R1' = ADDRESS OF A LIST OF REQUESTED DATA WORD ADDRESSES 00184000
  178. * 'R2' = COUNT OF FULL-WORD ENTRIES IN THE LIST 00185000
  179. * 'R2'+1 = ADDRESS OF A RESULT TABLE 00186000
  180. * 00187000
  181. * SPECIAL NOTE: SINCE THIS DIAGNOSE SERVICE IS INTENDED FOR 00188000
  182. * SYSTEM PERFORMANCE MONITORING, THE REQUEST AND RESULT TABLES 00189000
  183. * MUST BE IN THE SAME PAGE OF VIRTUAL STORAGE. WORD BOUNDARY 00190000
  184. * ALIGNMENT OF THE REQUEST AND RESULT LISTS IS FORCED, BUT NOT 00191000
  185. * CHECKED. 00192000
  186. * 00193000
  187. * FOR EACH ADDRESS ENTRY IN THE REQUEST TABLE, DMKHVD WILL 00194000
  188. * PLACE A FULL-WORD OF DATA FROM THE SPECIFIED LOCATION 00195000
  189. * IN REAL STORAGE, INTO THE RESULT TABLE SLOT CORRESPON- 00196000
  190. * DING TO THE ADDRESS ENTRY. WHEN EITHER ALL REQUESTS ARE 00197000
  191. * PROCESSED, THE END OF THE VIRTUAL STORAGE PAGE IS REACHED, 00198000
  192. * OR AN ADDRESS OUTSIDE OF REAL STORAGE IS ENCOUNTERED, 00199000
  193. * PROCESSING IS TERMINATED AND THE VIRTUAL MACHINE IS 00200000
  194. * RE-DISPATCHED VIA DMKDSPCH. 00201000
  195. * IN THE AP ENVIRONMENT ALL ADDRESSES ARE HANDLED AS IF 00202000
  196. * THEY WERE GENERATED ON THE MAIN PROCESSOR. REQUESTS 00203000
  197. * FOR LOC 0 ARE FILLED FROM THE PSA OF THE MAIN PROCESSOR 00204000
  198. * TO GET TO THE PSA OF THE ATTACHED PROCESSOR IT IS 00205000
  199. * NECESSARY FOR THE REQUESTOR TO FIRST ADD THE VALUE OF 00206000
  200. * PREFIXB TO THE PSA DISPLACEMENT. TO GET TO ABSOLUTE 00207000
  201. * ADDRESSES 0-4095 IT IS NECESSARY FOR THE REQUESTOR TO 00208000
  202. * FIRST ADD THE VALUE OF PREFIXA TO THE PSA DISPLACEMENT. 00209000
  203. * 00210000
  204. * CODE = X'0008' VIRTUAL CONSOLE FUNCTION INTERFACE (CLASS G) 00211000
  205. * 'R1' = ADDRESS OF A COMMAND-LINE BUFFER 00212000
  206. * 'R2' = BUFFER LENGTH IN BYTES 00213000
  207. * 00214000
  208. * THE BUFFER ADDRESS AND DATA LENGTH ARE EXAMINED FOR 00215000
  209. * VALIDITY. IF THE LENGTH IS NEGATIVE OR GREATER THAN 132, 00216000
  210. * A SPECIFICATION EXCEPTION IS GENERATED. IF THE ADDRESS 00217000
  211. * IS INVALID, AN ADRESSING EXCEPTION IS GENERATED. 00218000
  212. * IF A ZERO LENGTH FIELD IS SPECIFIED, THE VIRTUAL 00219000
  213. * MACHINE IS PLACED IN CONSOLE FUNCTION MODE VIA A CALL TO 00220000
  214. * DMKCFMBK, AND EXIT IS VIA DMKDSPCH. 00221000
  215. * FOR A VALID, NON-ZERO BUFFER LENGTH, THE COMMAND 00222000
  216. * DATA IS MOVED FROM VIRTUAL STORAGE INTO REAL FREE STORAGE 00223000
  217. * AND THE CONSOLE FUNCTION IS EXECUTED VIA A CALL TO 00224000
  218. * DMKCFMEN. ANY ERROR CODE RESULTING FROM THE EXECUTION 00225000
  219. * IS PASSED BACK TO THE VIRTUAL MACHINE IN THE 'R2' FIELD. 00226000
  220. * 00227000
  221. * CODE = X'000C' VIRTUAL "CHRONOLOG" CLOCK (CLASS G) 00228000
  222. * 'R1' = ADDRESS OF A 32-BYTE BUFFER AREA, DBL-WD ALIGNED 00229000
  223. * 00230000
  224. * DMKHVDAL PLACES INTO THE SPECIFIED AREA 32 BYTES 00231000
  225. * OF INFORMATION, IN THE FOLLOWING FORMAT: 00232000
  226. * +----------+----------+----------+----------+ 00233000
  227. * | MM/DD/YY | HH:MM:SS | VIRTCPU | TOTALCPU | 00234000
  228. * +----------+----------+----------+----------+ 00235000
  229. * WHERE THE DATE AND TIME ARE EBCDIC DOUBLE-WORD FIELDS, 00236000
  230. * AND VIRTUAL AND TOTAL CPU TIME ARE DBL-WORD, UNSIGNED 00237000
  231. * INTEGERS IN MICRO-SECOND UNITS. RETURN IS VIA DMKDSPCH. 00238000
  232. * 00239000
  233. * CODE = X'0010' RELEASE VIRTUAL STORAGE PAGES (CLASS G) 00240000
  234. * 'R1' = START ADDRESS OF FIRST PAGE TO BE RELEASED 00241000
  235. * 'R2' = START ADDRESS OF LAST PAGE TO BE RELEASED 00242000
  236. * 00243000
  237. * BOTH ADDRESSES ARE EXAMINED FOR ALIGNMENT AND VALIDITY. 00244000
  238. * DMKPGSPP IS CALLED TO PERFORM THE ACTUAL PAGE RELEASE. 00245000
  239. * 00246000
  240. * CODE = X'0014' INTERFACE TO INPUT SPOOL FILES (CLASS G) 00247000
  241. * 'R1','R2' AS REQUIRED BY DMKDRDER 00248000
  242. * 00249000
  243. * A CALL IS MADE TO DMKDRDER FOR SUB-FUNCTION DECODING 00250000
  244. * AND ACTUAL PROCESSING. ON RETURN, THE ERROR CODE IS TESTED 00251000
  245. * AND EITHER A PROGRAM INTERRUPT IS REFLECTED OR THE 00252000
  246. * VIRTUAL MACHINE IS RE-DISPATCHED WITH THE CONDITION CODE 00253000
  247. * INDICATING THE RESULTS OF THE OPERATION. 00254000
  248. * 00255000
  249. * CODE = X'0018' "STANDARD" DASD I/O W/O INTERRUPTS (CLASS G) 00256000
  250. * 'R1' = VIRTUAL DEVICE ADDRESS, DASD DEVICE 00257000
  251. * 'R2' = ADDRESS OF A DASD CCW STRING (FIXED FORMAT) 00258000
  252. * 00259000
  253. * CODE '18' IS PROCESSED VIA GOTO DMKDGDDK 00260000
  254. * 00261000
  255. * CODE = X'001C' CLEAR ERROR RECORDING AREA (CLASS F) 00262000
  256. * 'R1' = CODE 1,2 INDICATING CLEAR OF ERROR RECORDS OR 00263000
  257. * OF BOTH ERROR AND FRAME RECORDS 00264000
  258. * 00265000
  259. * THE 'R1' CODE VALUE IS PASSED TO DMKIOEFM IN GPR 2. 00266000
  260. * 00267000
  261. * CODE = X'0020' GENERAL VIRTUAL I/O W/O INTERRUPTS (CLASS G) 00268000
  262. * 'R1' = VIRTUAL DEVICE ADDRESS 00269000
  263. * 'R2' = ADDRESS OF A CCW STRING TO BE EXECUTED 00270000
  264. * 00271000
  265. * CODE '20' IS PROCESSED VIA GOTO DMKGIOEX. 00272000
  266. * 00273000
  267. * CODE = X'0024' VIRTUAL DEVICE TYPE INFORMATION (CLASS G) 00274000
  268. * 'R1' = VIRTUAL DEVICE ADDRESS OR -1 IF VIRTUAL CONSOLE 00275000
  269. * ON RETURN: 00276000
  270. * 'R1' = VIRTUAL DEVICE ADDRESS 00277000
  271. * 'R2' = VIRTUAL DEVICE INFORMATION 00278000
  272. * 'R2'+1 = REAL DEVICE INFORMATION (IF ANY) 00279000
  273. * 00280000
  274. * THE VIRTUAL DEVICE INFORMATION CONSISTS OF THE FIELDS 00281000
  275. * VDEVTYPC, VDEVTYPE, VDEVSTAT, AND VDEVFLAG, IN THAT ORDER, 00282000
  276. * FROM THE VDEVBLOK OF THE SPECIFIED DEVICE. THE REAL DEVICE 00283000
  277. * INFORMATION CONSISTS OF THE FIELDS RDEVTYPC, RDEVTYPE, 00284000
  278. * RDEVMDL, AND RDEVFTR, IN THAT ORDER, FROM THE RDEVBLOK OF 00285000
  279. * THE ASSOCIATED REAL DEVICE (IF THERE IS ONE). IF THE DEVICE 00286000
  280. * IS A VIRTUAL CONSOLE, THE RDEVFTR FIELD OF 'R2+1' IS FILLED 00287000
  281. * WITH THE INFORMATION FROM RDEVLLEN AND IF IT IS OF THE 3270 00288000
  282. * DISPLAY TYPE, THE RDEVMDL FIELD OF 'R2'+1 IS SET TO THE VALUE 00289000
  283. * OF THE MODEL. 00290000
  284. * THE INFORMATION IS PLACED IN THE 'R2' REGISTER AND THE ONE 00291000
  285. * FOLLOWING ('R2'+1),AS INDICATED BELOW 00292000
  286. * +----------+----------+----------+----------+ 00293000
  287. * 'R2' | VDEVTYPC | VDEVTYPE | VDEVSTAT | VDEVFLAG | 00294000
  288. * +----------+----------+----------+----------+ 00295000
  289. * 'R2+1' | RDEVTYPC | RDEVTYPE | RDEVMDL | RDEVFTR | 00296000
  290. * +----------+----------+----------+----------+ 00297000
  291. * EACH FIELD IS A SINGLE-BYTE FLAG, WHOSE VALUES MAY BE 00298000
  292. * DETERMINED FROM THE COPY FILES 'DEVTYPES', 'VBLOKS', AND 00299000
  293. * 'RBLOKS' IN THE VM/370 MACRO LIBRARY. THE VIRTUAL 00300000
  294. * CONDITION CODE IS SET AS FOLLOWS: 00301000
  295. * CC = 0 => ALL DATA IS VALID 00302000
  296. * CC = 2 => NO REAL DEVICE DATA, VIRTUAL TYPE OK 00303000
  297. * CC = 3 => DEVICE DOES NOT EXIST 00304000
  298. * 00305000
  299. * CODE = X'0028' DYNAMIC CHANNEL PROGRAM MODIFICATION (CLASS G) 00306000
  300. * 'R1' = SPECIFIES A REGISTER GIVING THE ADDRESS OF THE 00307000
  301. * CCW THAT HAS BEEN MODIFIED. 00308000
  302. * 'R2' = SPECIFIES ANOTHER REGISTER GIVING THE DEVICE 00309000
  303. * ADDRESS (IN BITS 16-31). 00310000
  304. * 00311000
  305. * THE MODIFIED CCW AND DEVICE ADDRESS ARE EXAMINED FOR 00312000
  306. * VALIDITY. IF THE MODIFIED CCW OR DEVICE ADDRESS IS INVALID, 00313000
  307. * DMKHVD RETURNS CONTROL TO THE USER WITH A RETURN CODE AND 00314000
  308. * CONDITION CODE OF ONE IN PSW. FOR A VALID MODIFIED CCW AND 00315000
  309. * DEVICE ADDRESS, A CHANGE IS MADE TO THE REAL CCW THAT 00316000
  310. * CORRESPONDS TO THE MODIFIED VIRTUAL CCW, IN ORDER FOR 00317000
  311. * MODIFICATION OF THE VIRTUAL CCW LIST TO HAVE ANY REAL 00318000
  312. * EFFECT ON VM/370. 00319000
  313. * ANY ERROR CODE RESULTING FROM THE EXECUTION IS 00320000
  314. * PASSED BACK TO THE VIRTUAL MACHINE IN REGISTER 15 AND A 00321000
  315. * CONDITION CODE IS SET IN THE PSW TO INDICATE TO THE VIRTUAL 00322000
  316. * MACHINE WHETHER THE NECESSARY MODIFICATION TO THE REAL 00323000
  317. * CCW LIST WAS MADE SUCCESSFULLY. IN GENERAL, A CONDITION 00324000
  318. * CODE OF 0 INDICATES SUCCESS, 1 INDICATES A PROBABLE 00325000
  319. * PROGRAMMING ERROR IN ISSUING THE DIAGNOSE CALL, AND 00326000
  320. * 2 INDICATES THAT IT WAS TOO LATE TO CHANGE THE REAL CCW 00327000
  321. * LIST BECAUSE OF CHANNEL END OR DEVICE END HAS ALREADY 00328000
  322. * OCCURRED. 00329000
  323. * 00330000
  324. * CODE = X'0034' READ SYSTEM DUMP SPOOL FILE (CLASS C OR E) 00375000
  325. * 'R1','R2' AS REQUIRED BY DMKDRDMP 00376000
  326. * 00377000
  327. * CODE '34' IS PROCESSED VIA A CALL TO DMKDRDMP. 00378000
  328. * ON RETURN, THE ERROR CODE IS EXAMINED AND EITHER A PROGRAM 00379000
  329. * INTERRUPT IS REFLECTED OR THE VIRTUAL MACHINE IS 00380000
  330. * RE-DISPATCHED WITH A CONDITION CODE SET. 00381000
  331. * 00382000
  332. * CODE = X'0038' READ SYSTEM SYMBOL TABLE (CLASS C OR E) 00383000
  333. * 'R1','R2' AS REQUIRED BY DMKDRDSY 00384000
  334. * 00385000
  335. * CODE '38' IS PROCESSED VIA A CALL TO DMKDRDSY. 00386000
  336. * RETURN HANDLING IS THE SAME AS FOR CODES '14' AND '34'. 00387000
  337. * 00388000
  338. * CODE = X'003C' DYNAMIC UPDATE OF SYSTEM USER DIRECTORY 00389000
  339. * (CLASS A, B, OR C) 00390000
  340. * 'R1','R2' IMMATERIAL 00391000
  341. * 00392000
  342. * CODE '3C' IS PROCESSED VIA A CALL TO DMKUDRDS. 00393000
  343. * RETURN HANDLING IS THE SAME AS FOR CODES '14','34','38'. 00394000
  344. * 00395000
  345. * 00396000
  346. * CODE = X'0040' RESERVED FOR FUTURE USE 00397000
  347. * 00398000
  348. * CODE = X'0044' RESERVED FOR FUTURE USE 00399000
  349. * 00400000
  350. * CODE = X'0048' RESERVED FOR FUTURE USE 00401000
  351. * 00402000
  352. * CODE = X'004C' PUNCH ACCOUNTING CARDS 00403000
  353. * (THE ACCOUNTING OPTION MUST BE SET) 00404000
  354. * 00405000
  355. * 'R1' = CONTAINS THE ADDRESS OF THE PARAMETER LIST OR ZERO. 00406000
  356. * 'R2' = CONTAINS AFUNCTION HEXADECIMAL CODE INTERPRETED BY 00407000
  357. * DMKCPVAA. 00408000
  358. * 00409000
  359. * CODE X'004C' IS PROCESSED VIA A CALL TO DMKCPVAA. ON 00410000
  360. * RETURN, IF THE USER ACCOUNTING BLOCK EXIST, THE STORAGE 00411000
  361. * IS RELEASED. DMKHVD CHECKS THE PARAMETER LIST ADDRESS TO 00412000
  362. * ASSURE THAT THE ADDRESS IS VALID AND ALIGNED ON A DOUBLEWORD 00413000
  363. * BOUNDARY. IF THE PARAMETER LIST ADDRESS IS ZERO, DMKHVD 00414000
  364. * RETURN CONTROL TO THE USER WITH CONDITION CODE ZERO 00415000
  365. * SET IN THE PSW. IF THE PARAMETER LIST ADDRESS IS INVALIDED OR 00416000
  366. * NOT ALIGNED ON A DOUBLEWORD BOUNDARY, THAN AN ADDRESSING 00417000
  367. * OR SPECIFICATION EXECPTION IS GENERATED RESPECTIVELY. 00418000
  368. * FOR A PARAMETER LIST ADDRESS THAT'S NON-ZERO AND VALID, THE 00419000
  369. * USERID IN THE PARAMETER LIST IS CHECK AGAINST THE DIRECTORY 00420000
  370. * LIST AND THE FUNCTION HEXADECIMAL CODE IS CHECK TO DETERMINE 00421000
  371. * IF THEY ARE VALID. IF NOT, DMKHVD RETURN CONTROL TO THE USER 00422000
  372. * WITH CONDITION CODE ONE OR THREE SET IN THE PSW RESPECTIVELY. 00423000
  373. * IF THE USERID AND FUNCTION HEXADECIMAL CODE ARE VALID, THE 00424000
  374. * USER ACCOUNTING BLOCK IS BUILDED AND THE USERID, ACCOUNT 00425000
  375. * NUMBER AND DISTRIBUTION NUMBER ARE MOVE INTO THE BLOCK FROM 00426000
  376. * THE PARAMETER LIST OR THE USER MACHINE BLOCK AND CONTROL 00427000
  377. * IS RETURNED TO THE USER WITH A CONDITION CODE ZERO 00428000
  378. * SET IN THE PSW. 00429000
  379. * 00430000
  380. * CODE = X'0050' SAVE 370X CONTROL PROGRAM IMAGE 00431000
  381. * (CLASS A, B, OR C) 00432000
  382. * 'R1', 'R2' AS REQUIRED BY DMKSNCP 00433000
  383. * 00434000
  384. * PROCESSED VIA A CALL TO DMKSNCP. ON RETURN AN ERROR 00435000
  385. * CODE (OR ZERO) IS RETURNED IN THE USER'S 'R2' REGISTER. 00436000
  386. * 00437000
  387. * CODE = X'0058' DIAG CONSOLE 3270 WRITE 00438000
  388. * 00439000
  389. * CODE = X'0054' DIAG PA2 CONSOLE INTERRUPT ENABLE 00440000
  390. * 00441000
  391. * 00442000
  392. * CODE = X'005C' EDIT AN ERROR MESSAGE ACCORDING TO USER'S 00443000
  393. * EMSG SETTING (CLASS G) 00444000
  394. * 'R1' = ADDRESS OF MESSAGE TO BE EDITED 00445000
  395. * 'R2' = LENGTH OF MESSAGE (INCLUDING CODE AND TEXT) 00446000
  396. * ON RETURN: 00447000
  397. * 'R1' = ADDRESS OF MESSAGE THAT USER SHOULD SEND 00448000
  398. * 'R2' = LENGTH OF MESSAGE THAT USER SHOULD SEND; 00449000
  399. * OR 0 IF NO MSG SHOULD BE SENT 00450000
  400. * 00451000
  401. * EMSG SETTING FOR THE USER IS TESTED BY TESTING VMMLEVEL 00452000
  402. * FOR VMMCODE AND VMMTEXT. 00453000
  403. * IF EMSG IS OFF, 'R2' IS SET TO 0. 00454000
  404. * IF EMSG IS ON, 'R2' AND 'R1' ARE LEFT ALONE. 00455000
  405. * IF EMSG IS CODE, 'R2' IS SET TO 10, WHICH IS LENGTH OF 00456000
  406. * CODE ALONE. 00457000
  407. * IF EMSG IS TEXT, 'R1' IS SET TO POINT TO TEXT PART OF MESSAGE, 00458000
  408. * AND 'R2' IS DECREMENTED TO LENGTH OF TEXT ONLY. (IF 00459000
  409. * RESULTING LENGTH IS NOT POSITIVE, 0 LENGTH IS RETURND.) 00460000
  410. * ON RETURN FROM DIAGNOSE 5C, CALLER SHOULD CHECK 'R2'. 00461000
  411. * IF A ZERO LENGTH WAS PASSED BACK, THE CALLER SHOULD 00462000
  412. * NOT ISSUE A STARTIO AT ALL (I.E., THE MESSAGE SHOULD 00463000
  413. * NOT BE SENT). IF A NON-0 LENGTH WAS PASSED BACK, 00464000
  414. * HE SHOULD ISSUE A STARTIO USING THE 'R1' ADDRESS AND 00465000
  415. * THE 'R2' LENGTH THAT WERE RETURNED BY THE DIAGNOSE 5C. 00466000
  416. * 00467000
  417. * CODE = X'0060' RETURN VIRTUAL MACHINE STORAGE SIZE (CLASS G) 00468000
  418. * ON RETURN: 00469000
  419. * 'R1' = SIZE OF VIRTUAL STORAGE 00470000
  420. * 00471000
  421. * CODE = X'0064' LOAD/FIND OR PURGE A NAMED SYSTEM (CLASS G) 00472000
  422. * 'R1' = ADDRESS OF THE NAMED SYSTEM 00473000
  423. * 'R2' = CODE FUNCTION: 00474000
  424. * 00 = LOAD A NAMED SYSTEM IN SHARED MODE 00475000
  425. * 04 = LOAD A NAMED SYSTEM IN NON-SHARED MODE 00476000
  426. * 08 = PURGE A PREVIOUS LOADED NAMED SYSTEM 00477000
  427. * 0C = FIND THE NAMED SYSTEM IN THE USERS VIRTUAL STORAGE 00478000
  428. * 00479000
  429. * DMKCFGCL - IS CALLED TO PROCESS THE REQUEST 00480000
  430. * 00481000
  431. * CODES = X'0068' THRU X'0070' RESERVED FOR IBM USE 00482000
  432. * 00483000
  433. * CODE = X'0074' LOAD/SAVE A 3800 IMAGE LIBRARY NAMED SYSTEM 00484000
  434. * FOR USERS WITH CLASS A, B, OR C ONLY 00485000
  435. * 'R1','R1+1' = 8 CHARACTER NAME OF THE 3800 IMAGE LIBRARY 00486000
  436. * WHICH HAS BEEN LEFT-JUSTIFIED AND PADDED 00487000
  437. * WITH BLANKS 00488000
  438. * 'R2' = VIRTUAL ADDRESS AT WHICH TO START LOADING 00489000
  439. * OR SAVING 00490000
  440. * 'R2+1' = HIGH ORDER BYTE CONTAINS X'00' FOR A LOAD AND 00491000
  441. * X'04' FOR A SAVE OPERATION. THE 3 LOW ORDER 00492000
  442. * BYTES CONTAIN THE NUMBER OF BYTES TO BE 00493000
  443. * LOADED OR SAVED. 00494000
  444. * OPERATION - 00495000
  445. * 00496000
  446. * IF THE USER IS NOT CLASS A, B, OR C, THEN RETURN WITH 00497000
  447. * A PRIVILEGED OPERATION EXCEPTION. 00498000
  448. * IF EITHER 'R1' OR 'R2' ARE REGISTER 15, RETURN WITH A 00499000
  449. * SPECIFICATION EXCEPTION. DO THE SAME IF THE VIRTUAL 00500000
  450. * ADDRESS SPECIFIED DOES NOT START ON A PAGE BOUNDARY. 00501000
  451. * RETURN AN ADDRESSING EXCEPTION IF THE AREA TO BE 00502000
  452. * LOADED/SAVED EXTENDS PAST THE END OF THE USER'S 00503000
  453. * VIRTUAL MEMORY. 00504000
  454. * THE FOLLOWING STEPS ARE TAKEN: 00505000
  455. * 1. TRANS IN AND LOCK NPRTBL. 00506000
  456. * 2. FIND THE NAMED SYSTEM IN AN NPRTBL ENTRY. 00507000
  457. * 3. FIND THE DASD VOLUME CONTAINING THE NAMED SYSTEM. 00508000
  458. * 4. USING DMKRPAGT/DMKRPAPT WE THEN LOAD/SAVE 00509000
  459. * THE REQUESTED SYSTEM. 00510000
  460. * 5. RETURN IS MADE TO THE USER WITH THE FOLLOWING 00511000
  461. * RETURN CODES IN REGISTER 'R2': 00512000
  462. * X'00' = LOAD/SAVE SUCCESSFULLY PERFORMED 00513000
  463. * X'04' = NAMED SYSTEM NOT FOUND IN NPRTBL 00514000
  464. * X'08' = NAMED SYSTEM CURRENTLY ACTIVE ON 3800 00515000
  465. * X'0C' = VOLID FOR NAMED SYSTEM NOT CP OWNED 00516000
  466. * X'10' = VOLID FOR NAMED SYSTEM NOT MOUNTED 00517000
  467. * X'14' = NUMBER OF BYTES REQUESTED LARGER THAN 00518000
  468. * SIZE OF NAMED SYSTEM. IN THIS CASE 00519000
  469. * RESIDUAL BYTE COUNT IS IN 'R2+1' 00520000
  470. * X'18' = PAGING ERROR DURING LOAD/SAVE 00521000
  471. * 00522000
  472. * CODE = X'84' CP DIRECTORY UPDATE-IN-PLACE 00523000
  473. * RX = POINTER TO PARAMETER LIST 00524000
  474. * RY = LENGTH OF PARAMETER LIST (IN BYTES) 00525000
  475. * AND RETCODE ON EXIT. 00526000
  476. * 00527000
  477. * CODES = X'0088' THRU X'00FC' RESERVED FOR IBM USE 00528000
  478. * CODES = X'0100' THRU X'01FC' RESERVED FOR INSTALLATION USE 00529000
  479. *. 00530000
  480. EJECT 00531000
  481. *---------------------------------------------------------------------* 00532000
  482. * * 00533000
  483. * PROCESS VIRTUAL DIAGNOSE FOR VIRTUAL MACHINES * 00534000
  484. * * 00535000
  485. *---------------------------------------------------------------------* 00536000
  486. USING SAVEAREA,R13 @VM03170 00537000
  487. DMKHVDAL RELOC @VM03170 00538000
  488. USING PSA,0 00539000
  489. USING VMBLOK,R11 00540000
  490. SPACE 2 00541000
  491. TM VMINST+3,X'03' IS CODE MULTIPLE OF 4? 00542000
  492. BNZ SPECERR NO - SPECIFICATION 00543000
  493. IC R5,VMINST+1 GET REGISTERS SPECIFIED 00544000
  494. LR R6,R5 00545000
  495. SLL R6,2(0) USER'S 'R2' NUMBER 00546000
  496. N R6,F60 ... 00547000
  497. SRL R5,2(0) ... 00548000
  498. N R5,F60 REGISTER NO. * 4 00549000
  499. LA R5,VMGPRS(R5) ADDR OF 'R1' IN VMBLOK 00550000
  500. LA R6,VMGPRS(R6) ADDR OF 'R2' IN VMBLOK 00551000
  501. LH R4,VMINST+2 GET FUNCTION CODE FROM INSTRUCTIO@V200820 00552000
  502. CL R4,=A(HVDMAXC) WITHIN SYSTEM SUPPORTED RANGE ? @VM03170 00553000
  503. BH HVDUSER NO -- CHECK FOR INSTALLATION CODE@VM03170 00554000
  504. B HVDODER(R4) JUMP INTO IT @VM03170 00555000
  505. SPACE 2 00556000
  506. HVDODER EQU * DECODING TABLE FOR HVD'S @VM03170 00557000
  507. B HVDSTIDX '000' - STORE EXTENDED ID @VM03170 00558000
  508. B READCPC '004' - READ CP CORE 00559000
  509. B HVDEXIT '008' - SUPPORTED BY DMKHVC @VM03170 00560000
  510. B HVDEXIT '00C' - SUPPORTED BY DMKHVC @VM03170 00561000
  511. B HVDEXIT '010' - SUPPORTED BY DMKHVC @VM03170 00562000
  512. B HVDSPRD '014' - SPOOL INPUT FILE @VM03170 00563000
  513. * MANIPULATE 00564000
  514. B HVDEXIT '018' - SUPPORTED BY DMKHVC @VM03170 00565000
  515. B HVDLRER '01C' - CLEAR RECORDING AREA @VM03170 00566000
  516. B HVDEXIT '020' - SUPPORTED BY DMKHVC @VM03170 00567000
  517. B HVDDTYP '024' - DEVICE TYPE INQUIRY @VM03170 00568000
  518. B HVDEXIT '028' - SUPPORTED BY DMKHVC @VM03170 00569000
  519. B HVDEXIT '02C' - SUPPORTED BY DMKHVE @VA11268 00570000
  520. B HVDEXIT '030' - SUPPORTED BY DMKHVE @VA11268 00571000
  521. B HVDRSDF '034' - READ SYSTEM DUMP SPOOL @VM03170 00574000
  522. * FILE 00575000
  523. B HVDRDSYM '038' - READ SYSTEM SYMBOL TABLE @VM03170 00576000
  524. B HVDDIRCT '03C' - DYNAMIC DIRECTORY UPDATE @VM03170 00577000
  525. B HVDEXIT '040' - RESERVED FOR FUTURE USE @VM03170 00578000
  526. B HVDEXIT '044' - RESERVED FOR FUTURE USE @VM03170 00579000
  527. B HVDEXIT '048' - RESERVED FOR FUTURE USE @VM03170 00580000
  528. B HVDACCT '04C' - PUNCH ACCOUNTING CARDS @VM03170 00581000
  529. B HVD3705 '050' - SAVE 370X CONTROL PROGRAM@VM03170 00582000
  530. B HVDEXPA '054' DIAG PA2 CONSOLE ENABLE @VM03170 00583000
  531. B HVDEXIT '058' - SUPPORTED BY DMKHVC @VM03170 00584000
  532. B HVDEXIT '05C' - SUPPORTED BY DMKHVC @VM03170 00585000
  533. B HVDEXIT '060' - SUPPORTED BY DMKHVC @VM03170 00586000
  534. B HVDEXIT '064' - SUPPORTED BY DMKHVC @VM03170 00587000
  535. B HVDEXIT '068' - SUPPORTED BY DMKHVC @V60B9BA 00588000
  536. B HVDEXIT '06C' - SUPPORTED BY DMKHVC @V60B9BA 00589000
  537. B HVDEXIT '070' - SUPPORTED BY DMKHVC @V60B9BA 00590000
  538. B HVD3800 '074' - LOAD/SAVE 3800 IMAGELIBS @V60B9BA 00591000
  539. B HVDEXIT RESERVED FOR X'78' @V60C1BD 00592000
  540. B HVDEXIT RESERVED FOR X'7C' @V60C1BD 00593000
  541. B HVDEXIT RESERVED FOR X'80' @V60C1BD 00594000
  542. B HVCDUIP X'84' DIRECTORY UPDATE-IN-PLACE @V60C1BD 00595000
  543. HVDMAXC EQU *-HVDODER-4 MAXIMUM CODE NUMBER DEFINED @VM03170 00596000
  544. EJECT 00597000
  545. HVDUSER EQU * DECODING FOR @VM03170 00598000
  546. * INSTALLATION-DEFINED CODES 00599000
  547. S R4,F256 WITHIN INSTALLATION-DEFINED RANGE@V200820 00600000
  548. BM SPECERR NO -- SPECIFICATION EXCEPTION @V200820 00601000
  549. CL R4,=A(USRMAXC) VALID CODE FOR THIS TABLE ? @V200820 00602000
  550. BH SPECERR NO -- SPECIFICATION EXCEPTION @V200820 00603000
  551. B USRCODE(R4) BRANCH TO PROCESSING ROUTINE @V200820 00604000
  552. SPACE 2 00605000
  553. USRCODE EQU * DECODING TABLE FOR INSTALLATION @V200820 00606000
  554. * CODES 00607000
  555. B SPECERR (PROTOTYPE) @V200820 00608000
  556. USRMAXC EQU *-USRCODE-4 HIGHEST INSTALLATION CODE DEFINED@V200820 00609000
  557. SPACE 2 00610000
  558. HVDCC1 TM *+1,X'FF' SET CC=1 @VM03170 00611000
  559. ST R0,SAVER0 SAVE PC INTERRUPT CODE FOR DMKHVD@VM03170 00612000
  560. B GENEXIT RETURN TO CALLER @VM03170 00613000
  561. HVDEXIT CLI *+1,0 SET CC=0 @VM03170 00614000
  562. GENEXIT EXIT RETURN TO CALLER @VM03170 00615000
  563. EJECT 00616000
  564. *-------------------------------------------------------------------- 00617000
  565. * STORE EXTENDED ID 00618000
  566. *-------------------------------------------------------------------- 00619000
  567. SPACE 00620000
  568. HVDSTIDX EQU * PERFORM "STORE EXTENDED ID " @VM03170 00621000
  569. TM 3(R5),X'07' TEST FOR DOUBLEWORD ALIGNMENT @VM03170 00622000
  570. BNZ SPECERR IF NOT REFLECT SPECIF EXCEPTION @VM03170 00623000
  571. L R8,0(,R6) CHECK BUFFER LENGTH, SAVE IN R8 @VM03170 00624000
  572. N R8,XRIGHT24 STRIP OFF HIGH ORDER BYTE @VM03170 00625000
  573. BZ SPECERR ZERO LENGTH INVALID @VM03170 00626000
  574. LA R0,5*EXTIDL/8 GET STORAGE FOR A BUFFER, @VMD0161 00627000
  575. CALL DMKFREE IMPOSING A NESTING LIMIT OF 5 @VM03170 00628000
  576. LR R3,R1 SAVE ADDRESS OF BUFFER @VM03170 00629000
  577. LR R10,R1 ... @VM03170 00630000
  578. SPACE 00631000
  579. * CONSTRUCT 1ST LEVEL EXTENDED ID ... 00632000
  580. SPACE 00633000
  581. MVC 0(8,R3),=C'VM/370 ' INSERT HYPERVISOR ID @VM03170 00634000
  582. L R15,=A(DMKCVTDB) ADDRESS OF DECIMAL/BINARY @VM03170 00635000
  583. * CONVERTER 00636000
  584. L R4,=A(DMKCPEID) POINT TO VM LEVEL IDENTIFIER @VM03170 00637000
  585. LA R0,2 SET TO CONVERT TWO BYTE FIELD @VM03170 00638000
  586. LR R1,R4 POINT TO RELEASE NUMBER @VM03170 00639000
  587. BALR R14,R15 CONVERT RELEASE NUMBER @VM03170 00640000
  588. STC R1,8(,R3) AND SAVE IN BUFFER @VM03170 00641000
  589. LA R0,2 RESTORE 2 BYTE LENGTH @VM03170 00642000
  590. LA R1,2(,R4) POINT TO VERSION NUMBER @VM03170 00643000
  591. BALR R14,R15 AND CONVERT IT @VM03170 00644000
  592. STC R1,9(,R3) SAVE IT @VM03170 00645000
  593. LA R0,4 PLC TAPE NUMBER IS 4 BYTES .. @VM03170 00646000
  594. LA R1,4(,R4) POINT TO PLC TAPE NUMBER @VM03170 00647000
  595. BALR R14,R15 CONVERT IT @VM03170 00648000
  596. STC R1,10(,R3) AND SAVE IT @VM03170 00649000
  597. MVC 11(1,R3),CPUVERSN MOVE VERSION CODE OF OUR IPU @VM03170 00650000
  598. MVC 12(2,R3),CPUMCELL MOVE MAXIMUN MCEL LENGTH, @VM03170 00651000
  599. MVC 14(2,R3),IPUADDR INSTRUCTION PROCESSING UNIT @VM03170 00652000
  600. * ADDRESS, 00653000
  601. MVC 16(8,R3),VMUSER AND VM USERID @VM03170 00654000
  602. L R4,=A(DMKCPEPP) GET ADDRESS OF PP BIT MAP @VMD0161 00655000
  603. MVC 24(8,R3),0(R4) MOVE IN PROGRAM PRODUCT MAP @VMD0161 00656000
  604. LA R4,EXTIDL INITIALIZE AVAILABLE DATA COUNTER@VMD0161 00657000
  605. CLI CPUVERSN,X'FF' RUNNING ON BARE MACHINE ?? @VM03170 00658000
  606. BNE GETLEN YES -- EXTENDED ID IS COMPLETE @VM03170 00659000
  607. SPACE 00660000
  608. * HERE TO APPEND EXTENDED ID TO THIS LEVEL ... 00661000
  609. LA R1,EXTIDL(,R3) POINT TO SPACE IN BUFFER, AND @VMD0161 00662000
  610. LA R2,4*EXTIDL SET REQUESTED LENGTH, ALLOWING @VMD0161 00663000
  611. * 4 LEVELS 00664000
  612. ALR R4,R2 GET MAXIMUN LENGTH OF AVAILABLE @VM03170 00665000
  613. * DATA 00666000
  614. DC X'83120000' STORE EXTENDED INFORMATION @VM03170 00667000
  615. * BEHIND OURS 00668000
  616. SLR R4,R2 AND SUBTRACT RESIDUAL COUNT @VM03170 00669000
  617. SPACE 00670000
  618. GETLEN CLR R4,R8 USE LESSER OF REQUESTED LENGTH @VM03170 00671000
  619. * AND AVAILABLE LENGTH 00672000
  620. BL *+6 ... @VM03170 00673000
  621. LR R4,R8 IF REQUESTED LENGTH IS LOW USE @VM03170 00674000
  622. * IT INSTEAD 00675000
  623. LR R7,R4 SAVE LENGTH OF DATA TO BE MOVED @VM03170 00676000
  624. SLR R8,R8 AND CLEAR RESIDUAL COUNT @VM03170 00677000
  625. L R1,0(,R5) GET STARTING ADDRESS IN R1 @VM03170 00678000
  626. N R1,XRIGHT24 BITS 8-31 ONLY, PLEASE @VM03170 00679000
  627. LA R14,0(R1,R4) NOW CHECK FOR 2K XOVER ... @VM03170 00680000
  628. BCTR R14,0 POINT TO LAST BYTE @VM03170 00681000
  629. L R15,X2048BND SET TO GET 2K BOUND @VM03170 00682000
  630. NR R14,R15 GET LAST BYTE PAGE @VM03170 00683000
  631. NR R15,R1 GET 1ST BYTE PAGE @VM03170 00684000
  632. CLR R14,R15 COMPARE START TO END @VM03170 00685000
  633. BE ONEPAGE NO XOVER -- GO MOVE DATA @VM03170 00686000
  634. SPACE 00687000
  635. * HERE IF A 2K PAGE CROSSOVER OCCURRED 00688000
  636. SLR R14,R1 GET LENGTH OF 1ST SEGMENT @VM03170 00689000
  637. LR R8,R4 GET TOTAL LENGTH @VM03170 00690000
  638. SLR R8,R14 GET LENGTH OF 2ND SEGMENT @VM03170 00691000
  639. LR R7,R14 SAVE 1ST SEGMENT LENGTH @VM03170 00692000
  640. LR R9,R1 SAVE VIRTUAL ADDRESS @VM03170 00693000
  641. SPACE 00694000
  642. ONEPAGE TRANS 2,1,OPT=(BRING,DEFER),ADEX=STIDADX FETCH PAGE @VM03170 00695000
  643. CALL DMKPSASP AND VALIDATE STORAGE KEYS @VM03170 00696000
  644. BE GETSEG IF KEYS MATCH, GO MOVE DATA @VM03170 00697000
  645. LA R8,4 OTHERWISE, SET TO REFLECT @VM03170 00698000
  646. * PROTECTION 00699000
  647. B STIDFRET EXCEPTION, AND GO RETURN BUFFER @VM03170 00700000
  648. SPACE 00701000
  649. GETSEG BCTR R7,0 GET LENGTH OF 1ST SEGMENT-1 @VM03170 00702000
  650. EX R7,STIDXMV MOVE DATA TO USER .. @VM03170 00703000
  651. LA R1,1(R7,R9) POINT TO NEXT DATA ADDRESS @VM03170 00704000
  652. LA R3,1(R7,R3) POINT TO NEXT BUFFER ADDRESS @VM03170 00705000
  653. LTR R7,R8 GET RESIDUAL LENGTH @VM03170 00706000
  654. BZ STIDONE NO MORE TO MOVE ... @VM03170 00707000
  655. SLR R8,R8 CLEAR RESIDUAL LENGTH, @VM03170 00708000
  656. B ONEPAGE AND GO MOVE REMAINING DATA @VM03170 00709000
  657. SPACE 1 00710000
  658. STIDADX LA R8,5 SET INDICATOR FOR ADDRESSING @VM03170 00711000
  659. * EXCEPTION. 00712000
  660. B STIDFRET AND RELEASE THE BUFFER @VM03170 00713000
  661. SPACE 1 00714000
  662. STIDONE L R1,0(,R6) GET USER REQUESTED LENGTH @VM03170 00715000
  663. SLR R1,R4 LESS AMOUNT OF DATA MOVED @VM03170 00716000
  664. ST R1,0(,R6) AND UPDATE USER'S R2 FIELD @VM03170 00717000
  665. STIDFRET LR R1,R10 POINT TO START OF BUFFER @VM03170 00718000
  666. LA R0,5*EXTIDL/8 GET ITS LENGTH @VMD0161 00719000
  667. CALL DMKFRET AND RETURN IT TO FREE STORAGE @VM03170 00720000
  668. LTR R0,R8 ANY ERRORS DURING EXECUTION ? @VM03170 00721000
  669. BNZ PROGINT YES -- GO TO PROGINT WITH CODE @VM03170 00722000
  670. * IN GPR0 00723000
  671. B HVDEXIT ALL DONE @VM03170 00724000
  672. SPACE 00725000
  673. STIDXMV MVC 0(*-*,R2),0(R3) EXECUTED TO MOVE EXTENDED ID @VM03170 00726000
  674. EJECT 00727000
  675. *---------------------------------------------------------------------* 00728000
  676. * FETCH CP DATA - CODE '004' FOR CLASS C OR E ONLY * 00729000
  677. * ------------------------------- * 00730000
  678. * 'R1' = VIRTUAL ADDR OF LIST OF CP LOCATIONS * 00731000
  679. * 'R2' = COUNT OF ENTRIES IN LIST (FULL-WORD ENTRIES) * 00732000
  680. * 'R2'+1 = VIRTUAL ADDRESS OF RESULTS TABLE * 00733000
  681. * THE INSTRUCTION AND ALL TABLES MUST BE IN THE SAME PAGE * 00734000
  682. *---------------------------------------------------------------------* 00735000
  683. READCPC EQU * 00736000
  684. TM VMCLEVEL,VMCLASSC+VMCLASSE ALLOWED TO DO IT ? 00737000
  685. BZ PRIVLGD NO - PRIVILEGED OPERATION 00738000
  686. L R8,0(R5) 'R1' = REQUEST LIST VADDR @VA04548 00739000
  687. LA R3,VMGPRS+4*R15 ADDRESS OF R15 @VM03170 00740000
  688. LA R4,4(,R6) ADDRESS OF 'R2'+1 @VM03170 00741000
  689. CLR R3,R6 R2=R15? @VM03170 00742000
  690. BNE *+8 NO--OK @VM03170 00743000
  691. LA R4,VMGPRS 'R2'+1=R0 @VM03170 00744000
  692. L R9,0(R4) 'R2+1' = RESULT LIST VADDR @VA04548 00745000
  693. ICM R7,B'1111',0(R6) 'R2' = COUNT OF REQUESTS 00746000
  694. BC 12,SPECERR ZERO OR NEGATIVE 00747000
  695. CH R7,=H'1024' MAXIMUM NUMBER OF FULL-WORDS IN 00748000
  696. * PAGE 00749000
  697. BH SPECERR SORRY ABOUT THAT 00750000
  698. * CHECK FOR REQUEST LIST AND RESULT TABLE IN THE SAME PAGE 00751000
  699. L R1,XPAGNUM PAGE NUMBER MASK @VA04548 00752000
  700. LR R2,R1 ... @VA04548 00753000
  701. NR R1,R8 REQUEST LIST VIRT PAGE @VA04548 00754000
  702. NR R2,R9 RESULT LIST VIRT PAGE @VA04548 00755000
  703. CLR R1,R2 IN THE SAME VIRT PAGE? @VA04548 00756000
  704. BNE SPECERR NO - CALL IT AN ERROR 00757000
  705. TRANS 2,1,OPT=(BRING,DEFER),ADEX=SPECERR GET REAL PAGE@VA04548 00758000
  706. L R5,=A(X'00000FFF') DISPLACEMENT MASK @VA12292 00759010
  707. NR R8,R5 REQUEST LIST DISPLACEMENT @VA04548 00760000
  708. NR R9,R5 RESULT LIST DISPLACEMENT @VA04548 00761000
  709. ALR R5,R2 ADDR OF LAST ENTRY IN PAGE @VA04548 00762000
  710. LA R3,0(R2,R8) R3 = PAGE + DISP OF REQUEST LIST @VA04548 00763000
  711. ALR R2,R9 R2 = PAGE + DISP OF RESULT LIST @VA04548 00764000
  712. LA R4,4(0,0) FULL-WORD INDEX 00765000
  713. FETCHCP EQU * FULFILL REQUESTS @VA14557 00765100
  714. L R8,=A(DMKSYSRM) ADDR OF REAL MACHINE SIZE 00766000
  715. L R8,0(0,R8) GR8 = REAL MACHINE STORAGE SIZE 00767000
  716. L R10,0(0,R3) ONE REQUEST @VM03170 00769000
  717. N R10,=A(X'FFFFFF') ONLY WANT LAST THREE BYTES @VA12292 00770010
  718. CLR R10,R8 VALIDATE IT... @VM03170 00771000
  719. BNL ADDRERR .....SORRY, FELLOW 00772000
  720. SR R8,R10 HOW FAR FROM END OF STORAGE? @VA14557 00772100
  721. * THE FOLLOWING CHECKS IF ADDRESS IS WITHIN A FULLWORD @VA14557 00772200
  722. * FROM THE END OF REAL STORAGE. @VA14557 00772300
  723. CLR R8,R4 R4 CONTAINS 4 @VA14557 00772400
  724. BL CONTINUE LESS THAN A FULLWORD FROM END @VA14557 00772500
  725. * OF STORAGE. 00772600
  726. SR R8,R8 SET REG 8 -FLAG OF ZERO @VA14557 00772700
  727. CONTINUE CALL DMKPSASP CHECK RESULT TABLE PROTECTION @VA14557 00772800
  728. BNZ PROTERR .....SORRY, FELLOW 00774000
  729. TM APSTAT1,PROCIO @V4075A0 00775000
  730. BO GETIT O.K., WE'RE ON THE MAIN PROC @V4075A0 00776000
  731. L R0,XPAGNUM FIND PAGE NUMBER OF REQUEST @V4075A0 00777000
  732. NR R0,R10 @V4075A0 00778000
  733. BNZ QOURPSA IT'S NOT IN (0,4095) @V4075A0 00779000
  734. A R10,PREFIXB IT IS. POINT TO MAIN PROC PSA @V4075A0 00780000
  735. B GETIT & WE'RE ALL SET @V4075A0 00781000
  736. QOURPSA C R0,PREFIXA REQUEST FROM OUR PSA? @V4075A0 00782000
  737. BNE QABS0 NO, ONE OTHER POSSIBILITY @V4075A0 00783000
  738. S R10,PREFIXA LET PREFIX REGISTER DO THE WORK @V4075A0 00784000
  739. B GETIT @V4075A0 00785000
  740. QABS0 C R0,PREFIXB REQUEST FROM ABSOLUTE (0,4095) @V4075A0 00786000
  741. BNE GETIT NO, JUST AN ORDINARY OLD REQUEST @V4075A0 00787000
  742. S R10,PREFIXB RESET REVERSE PREFIXING @V4075A0 00788000
  743. A R10,PREFIXA FOR OUR PREFIX REGISTER VALUE @V4075A0 00789000
  744. GETIT EQU * @V4075A0 00790000
  745. LTR R8,R8 WITHIN LAST 3 BYTES OF STORAGE? @VA14557 00790100
  746. BZ SKIPIT N0- REGULAR REQUEST @VA14557 00790200
  747. CL R8,F3 3 BYTES FROM END OF STORAGE? @VA14557 00790300
  748. BNE NEXT NO @VA14557 00790400
  749. SR R8,R8 YES- GET DATA @VA14557 00790500
  750. ICM R8,B'1110',0(R10) 3 BYTES DATA WITH TRAILING @VA14557 00790600
  751. * ZEROS 00790700
  752. B DONE READY TO PASS BACK TO VM @VA14557 00790800
  753. NEXT CL R8,F2 2 BYTES FROM END OF STORAGE? @VA14557 00790900
  754. BNE NEXT1 NO @VA14557 00791000
  755. SR R8,R8 YES- GET DATA @VA14557 00791100
  756. ICM R8,B'1100',0(R10) 2 BYTES DATA WITH TRAILING @VA14557 00791200
  757. * ZEROS 00791300
  758. B DONE READY TO PASS BACK TO VM @VA14557 00791400
  759. NEXT1 SR R8,R8 1 BYTE FROM END OF STORAGE @VA14557 00791500
  760. ICM R8,B'1000',0(R10) 1 BYTE OF DATA WITH @VA14557 00791600
  761. * TRAILING ZEROS 00791700
  762. B DONE READY TO PASS BACK TO VM @VA14557 00791800
  763. SKIPIT L R8,0(0,R10) READ REAL STORAGE VALUE @VA14557 00791900
  764. DONE ST R8,0(0,R2) PASS BACK TO VIRTUAL MACHINE @VA14557 00792500
  765. BXH R3,R4,HVDEXIT EXIT IF WE RUN OUT OF THE PAGE @VM03170 00793000
  766. BXH R2,R4,HVDEXIT " " " " " " " " @VM03170 00794000
  767. BCT R7,FETCHCP LOOP THROUGH THE TABLES 00795000
  768. B HVDEXIT NO MORE REQUESTS @VM03170 00796000
  769. EJECT 00797000
  770. SPACE 00798000
  771. HVDDTC1 EQU * SET CONDITION CODE = 1 @VM03170 00799000
  772. LA R2,X'10' CONDITION CODE WILL BE ONE 00800000
  773. B HVDCSET GO SET CONDITION CODE @VM03170 00801000
  774. HVDDTC2 EQU * SET CONDITION CODE = 2 @VM03170 00802000
  775. LA R2,X'20' CONDITION CODE WILL BE TWO 00803000
  776. B HVDCSET GO SET CONDITION CODE @VM03170 00804000
  777. HVDDTC3 EQU * SET CONDITION CODE = 3 @VM03170 00805000
  778. LA R2,X'30' CONDITION CODE WILL BE THREE 00806000
  779. HVDCSET EQU * SET VIRTUAL CONDITION CODE @VM03170 00807000
  780. LA R1,VMPSW+4 POSITION IF IN BC MODE 00808000
  781. TM VMESTAT,VMEXTCM (IT'S DIFFERENT FOR ECMODE) 00809000
  782. BZ *+8 00810000
  783. LA R1,VMPSW+2 POSITION IF IN EC MODE 00811000
  784. NI 0(R1),B'11001111' CLEAR ANY EXITING CC @VM03170 00812000
  785. EX R2,HVDSETCC SET THE CONDITION CODE IN VMPSW @VM03170 00813000
  786. B HVDEXIT @VM03170 00814000
  787. SPACE 00815000
  788. HVDSETCC OI 0(R1),*-* EXECUTED FOR COND. CODE SETTING @VM03170 00816000
  789. EJECT 00817000
  790. *---------------------------------------------------------------------* 00818000
  791. * VIRTUAL DEVICE TYPE - CODE '024' FOR ANYBODY * 00819000
  792. * ------------------------------- * 00820000
  793. * RETURN VIRTUAL DEVICE TYPE CLASS, TYPE, MODEL, AND * 00821000
  794. * FEATURE CODES FOR VIRTUAL DEVICE ADDRESS PASSED IN 'R1' * 00822000
  795. * NON-ZERO CONDITION CODE = DEVICE ADDRESS INVALID OR * 00823000
  796. * VIRTUAL DEVICE DOES NOT EXIST. * 00824000
  797. *---------------------------------------------------------------------* 00825000
  798. HVDDTYP EQU * @VM03170 00826000
  799. NI VMPSW+4,X'CF' SET CONDITION CODE ZERO 00827000
  800. NI VMPSW+2,X'CF' SET EXTENDED COND CODE ZERO 00828000
  801. LR R10,R6 SAVE 'R2' FIELD ADDRESS 00829000
  802. L R1,0(0,R5) PICK UP VIRTUAL DEVICE ADDR. 00830000
  803. CL R1,FFS IS IT -1 00831000
  804. BNE CONDTYP NO -- NOT REQUEST FOR CONSOLE ADD@V200820 00832000
  805. LH R8,VMVTERM DSP TO VIRTUAL CONSOLE VDEVBLOK @V200820 00833000
  806. LTR R8,R8 IS THERE A CONSOLE ? @V200820 00834000
  807. BM HVDDTC3 NO -- SET CC = 3 @VM03170 00835000
  808. AL R8,VMDVSTRT GET THE VDEVBLOK ADDRESS @V200820 00836000
  809. CALL DMKSCNVD GET DEVICE ADDRESS IN GR1 @V200820 00837000
  810. ST R1,0(0,R5) RETURN ADDRESS TO CALLER IN 'R1' @V200820 00838000
  811. B GETRDEV GO GET REAL DEVICE INFORMATION @V200820 00839000
  812. CONDTYP EQU * CHECK FOR VALID DEVICE ADDRESS @V200820 00840000
  813. MAXDV R15 GET HIGHEST VALID ADDRESS IN GR15@V200820 00841000
  814. CLR R1,R15 VALID ADDRESS SPECIFIED ? @V200820 00842000
  815. BH HVDDTC3 NO - SET CONDITION CODE @VM03170 00843000
  816. CALL DMKSCNVU FIND VDEVBLOK 00844000
  817. BNZ HVDDTC3 NOT FOUND - ERROR @VM03170 00845000
  818. USING VDEVBLOK,R8 00846000
  819. GETRDEV EQU * 00847000
  820. L R7,VDEVREAL REAL DEVICE BLOCK ADDRESS 00848000
  821. USING RDEVBLOK,R7 00849000
  822. L R1,VDEVTYPC TYPC, TYPE, STAT, FLAG 00850000
  823. ST R1,0(0,R10) PASS BACK VIRTUAL RESULT 00851000
  824. TM VDEVSTAT,VDEVDED IS THIS DEVICE DEDICATED ? 00852000
  825. BO HVDDTYPR YES - GIVE REAL DEVICE INFO @VM03170 00853000
  826. TM VDEVTYPC,CLASURI+CLASURO+CLASSPEC .... 00854000
  827. BNZ HVDDTC2 IF ANY OF THESE, NO REAL DEVICE @VM03170 00855000
  828. * DATA 00856000
  829. TM VDEVTYPC,CLASGRAF IS THIS GRAPHIC ? @VM03170 00857000
  830. BO GRAFSECT YES, GET LINE SIZE @VM03170 00858000
  831. TM VDEVTYPC,CLASTERM TERMINAL ? 00859000
  832. BZ HVDDTYPR NO - OK. @VM03170 00860000
  833. CLI VDEVTYPE,TYP3210 VIRTUAL CONFOLE ? @VM03170 00861000
  834. BNE HVDDTC2 NO--SET CC=2 @VM03170 00862000
  835. L R7,VMTERM YES - GET TERMINAL REAL DEVICE 00864000
  836. * BLOCK 00865000
  837. GRAFSECT DS 0H @VA11489 00865500
  838. LTR R7,R7 MAKE SURE IT'S REALLY THERE 00866000
  839. BZ HVDDTC2 IF NOT (DISCONNECTED), FORGET IT.@VM03170 00867000
  840. TM RDEVTYPE,TYPBSC IS THIS A REMOTE GRAPHIC @VM03170 00868000
  841. * TERMINAL? 00869000
  842. BNO RDEVLEN NO...GET LINE LENGTH AS USUAL @VM03170 00870000
  843. DROP R8 @VM03170 00871000
  844. LH R8,VMTRMID GET RESOURCE ID OF USER @VM03170 00872000
  845. N R8,F4095 CLEAR LINE CODE PORTION @VM03170 00873000
  846. MH R8,=AL2(NICSIZE*8) COMPUTE NICBLOK LIST INDEX @VM03170 00874000
  847. AL R8,RDEVNICL INDEX TO THE ACTUAL NICBLOK @VM03170 00875000
  848. USING NICBLOK,R8 FOR THE REMOTE GRAPHIC TERMINAL @VM03170 00876000
  849. IC R1,NICTMCD GET TERMINAL CODES @VA09296 00876300
  850. STC R1,0(0,R5) SAVE IN HIGH ORDER BYTE OF 'R1' @VA09296 00876600
  851. IC R1,NICLLEN HERE'S THE LINE LENGTH WE WANT @VM03170 00877000
  852. ICM R1,B'0110',NICDTYPE DEVICE TYPE AND MODEL @VA09296 00878000
  853. ICM R1,B'1000',RDEVTYPC DEVICE CLASS - CLASTERM @VA09296 00878600
  854. B DTYPOK CONTINUE @VA09296 00879200
  855. RDEVLEN DS 0H 00880000
  856. IC R1,RDEVTMCD TERMINAL CODES @V60A6B6 00881000
  857. STC R1,0(0,R5) SAVE IN HIGH ORDER BYTE OF 'R1' @V60A6B6 00882000
  858. IC R1,RDEVLLEN TERMINAL LINE LENGTH @V60A6B6 00883000
  859. B DTYPR1 GET MODEL INFORMATION @V60A6B6 00884000
  860. HVDDTYPR EQU * FOR NON-CONSOLES... @VM03170 00885000
  861. IC R1,RDEVFTR GET FEATURE CODE @V1D2162 00886000
  862. DTYPR1 EQU * @VM03170 00887000
  863. ICM R1,B'0010',RDEVMDL GET MODEL NUMBER @V1D2162 00888000
  864. DTYPR2 EQU * @VA07289 00889000
  865. ICM R1,B'1100',RDEVTYPC GET DEVICE TYPE INFORMATION @V1D2162 00890000
  866. DROP R7,R8 00891000
  867. * IF ARGUMENT R2 EQ REG15 THEN IGNORE THE SECOND WORD 00892000
  868. DTYPOK DS 0H @VA09296 00892500
  869. LA R10,4(,R10) GET R2+4 ADDRESS @VM03170 00893000
  870. LA R15,VMGPRS+(4*15) GET ADDRESS OF REG 15 IN @VM03170 00894000
  871. * VMBLOCK 00895000
  872. CR R10,R15 IS R2+4 GREATER THAN REG 15 @VM03170 00896000
  873. BH HVDEXIT IGNORE THE SECOND WORD @VM03170 00897000
  874. ST R1,0(,R10) PASS THE SECOND WORD TO THE USER @VM03170 00898000
  875. B HVDEXIT @VM03170 00899000
  876. SPACE 2 00900000
  877. *---------------------------------------------------------------------* 00901000
  878. * SPOOL INPUT MANIPULATION - CODE '014' FOR ANYBODY * 00902000
  879. *---------------------------------------------------------------------* 00903000
  880. HVDSPRD EQU * @VM03170 00904000
  881. CALL DMKDRDER MANIPULATE SPOOL FILES 00905000
  882. LTR R2,R2 CHECK RETURN CODE 00906000
  883. BZ HVDEXIT ALL O.K. - CONDITION CODE SET @VM03170 00907000
  884. B PROGINT FORCE PROGRAM INTERRUPT 00908000
  885. SPACE 2 00909000
  886. *---------------------------------------------------------------------* 00910000
  887. * CLEAR LOGREC CYLINDERS - CODE '01C' FOR CLASS F ONLY * 00911000
  888. *---------------------------------------------------------------------* 00912000
  889. HVDLRER EQU * @VM03170 00913000
  890. TM VMCLEVEL,VMCLASSF ALLOWED ? 00914000
  891. BZ PRIVLGD NO - PRIVILEGED OPERATION 00915000
  892. ICM R2,B'1111',0(R5) PICK UP CODE @VM03170 00916000
  893. BZ SPECERR INVALID CODE @VM03170 00917000
  894. CL R2,F2 DOES CODE EXCEED THE MAX. CODE? @V5088AA 00918000
  895. BH SPECERR YES - INVALID CODE @VM03170 00919000
  896. CALL DMKIOEFM RE-FORMAT I/O AND M/C ERROR 00920000
  897. * RECORDING 00921000
  898. B HVDEXIT @VM03170 00922000
  899. SPACE 2 00923000
  900. EJECT 00924000
  901. *---------------------------------------------------------------------* 00925000
  902. * READ SYSTEM DUMP SPOOL FILE - CODE '034' FOR CLASS C OR E * 00926000
  903. *---------------------------------------------------------------------* 00927000
  904. HVDRSDF EQU * READ SYSTEM DUMP @VM03170 00928000
  905. TM VMCLEVEL,VMCLASSC+VMCLASSE SYSTEM EXAMINER ? 00929000
  906. BZ PRIVLGD NO - PRIVILEGED OPERATION 00930000
  907. CALL DMKDRDMP GO READ ONE RECORD 00931000
  908. LTR R2,R2 RETURN CODE O.K. ? 00932000
  909. BZ HVDEXIT YES - CONDITION CODE IS SET @VM03170 00933000
  910. B PROGINT FORCE PROGRAM INTERRUPT 00934000
  911. SPACE 2 00935000
  912. *---------------------------------------------------------------------* 00936000
  913. * READ SYMBOL TABLE - CODE '038' FOR CLASS C OR E ONLY * 00937000
  914. *---------------------------------------------------------------------* 00938000
  915. HVDRDSYM EQU * READ PAGEABLE SYMBOL TABLE @VM03170 00939000
  916. TM VMCLEVEL,VMCLASSC+VMCLASSE ALLOWED ? 00940000
  917. BZ PRIVLGD NOPE - ERROR 00941000
  918. CALL DMKDRDSY GO READ IT INTO VIRTUAL MEMORY 00942000
  919. LTR R2,R2 HOW DID IT GO ? 00943000
  920. BZ HVDEXIT ALL O.K. @VM03170 00944000
  921. B PROGINT INTERRUPT GOES BACK 00945000
  922. SPACE 2 00946000
  923. *---------------------------------------------------------------------* 01084000
  924. * DYNAMIC DIRECTORY UPDATE - CODE '03C' FOR A, B, OR C ONLY * 01085000
  925. *---------------------------------------------------------------------* 01086000
  926. HVDDIRCT EQU * @VM03170 01087000
  927. TM VMCLEVEL,VMCLASSA+VMCLASSB+VMCLASSC ALLOWED ? 01088000
  928. BZ PRIVLGD NO - STOP HIM COLD 01089000
  929. CALL DMKUDRDS GO DO IT 01090000
  930. LTR R2,R2 ALL O.K. ? 01091000
  931. BZ HVDEXIT YUP @VM03170 01092000
  932. B PROGINT NOPE 01093000
  933. SPACE 2 01094000
  934. *---------------------------------------------------------------------* 01095000
  935. * SAVE 370X CONTROL PROGRAM - CODE '050' FOR CLASS A,B,C ONLY * 01096000
  936. *---------------------------------------------------------------------* 01097000
  937. HVD3705 EQU * @VM03170 01098000
  938. TM VMCLEVEL,VMCLASSA+VMCLASSB+VMCLASSC ALLOWED @V200820 01099000
  939. BZ PRIVLGD NO -- STOP HIM COLD @V200820 01100000
  940. CALL DMKSNCP R5,R6 SETUP AS REQUIRED @V200820 01101000
  941. LTR R2,R2 ALL O.K. ? @V200820 01102000
  942. BZ HVDEXIT YUP --- @VM03170 01103000
  943. B PROGINT NOPE - @V200820 01104000
  944. EJECT 01105000
  945. ADDCHEK EQU * EXAMINE ADDRESS FOR VALIDITY 01106000
  946. LA R1,0(,R1) 24 BITS ONLY 01107000
  947. LCTL C1,C1,VMSEG GET CORRECT SEG TABLE @VA08882 01107500
  948. LRA R0,0(,R1) VALID START ADDRESS ? @VM03170 01108000
  949. BC 8+2,ADDCHEK1 CONTINUE IF NOT A SEG EXCEPTION @V408246 01109000
  950. LR R0,R2 SAVE R2 FOR CALL TO PTRAN @V408246 01110000
  951. CALL DMKPTRAN,PARM=DEFER OTHERWISE LET PTRAN HANDLE @V408246 01111000
  952. BC 2,ADDRERR ADDRESSING EXCEPTION @V408246 01112000
  953. LR R2,R0 RESTORE R2 @V408246 01113000
  954. ADDCHEK1 DS 0H @V408246 01114000
  955. LA R14,0(R2,R1) R2 CONTAINS FIELD LENGTH 01115000
  956. BCTR R14,0 BACK UP TO LAST BYTE OF FIELD 01116000
  957. L R15,XPAGNUM PAGE NUMBER MASK 01117000
  958. NR R14,R15 ENDING PAGE ADDRESS 01118000
  959. LRA R0,0(,R14) IS ENDING ADDRESS VALID ? @VM03170 01119000
  960. BC 8+2,ADDCHEK2 CONTINUE IF NOT A SEG EXCEPTION @V408246 01120000
  961. STM R1,R2,SAVEWRK2 SAVE R1,R2 ACROSS CALL TO PTRAN @VA10736 01121500
  962. LR R1,R14 GET VIRT ADDRESS FOR PTRAN @VA08590 01123000
  963. CALL DMKPTRAN,PARM=DEFER OTHERWISE LET PTRAN HANDLE @V408246 01124000
  964. BC 2,ADDRERR ADDRESSING ERROR @V408246 01125000
  965. LM R1,R2,SAVEWRK2 RESTORE R1,R2 AFTER CALL @VA10736 01126500
  966. B ADDCHEK1 GO TRY AGAIN @V408246 01128000
  967. ADDCHEK2 DS 0H @V408246 01129000
  968. NR R15,R1 STARTING PAGE ADDRESS 01130000
  969. CLR R14,R15 CHECK FOR PAGE BOUNDARY CROSSING 01131000
  970. BCR 7,R9 YUP -- TAKE THE GR9 EXIT 01132000
  971. BR R10 RETURN - EVERYTHING IS O.K. 01133000
  972. SPACE 2 01134000
  973. EJECT 01135000
  974. *---------------------------------------------------------------------* 01136000
  975. * PUNCH VIRTUAL ACCOUNTING CARD - CODE '04C' FOR ANYBODY * 01137000
  976. * (VIRTUAL MACHINE MUST HAVE 'ACCOUNT' OPTION SET) * 01138000
  977. * ---------------------------------- * 01139000
  978. * 'R1' = ADDRESS OF DBL-WD ALIGNED 24-BYTE PARM LIST * 01140000
  979. * 'R2' = HEX CODE INDICATING ACCOUNTING OPTION * 01141000
  980. * OR * 01142000
  981. * PUNCH SPECIAL USER ACCOUNTING CARD * 01143000
  982. * ---------------------------------- * 01144000
  983. * 'R1' = ADDRESS OF DATA TO BE PUNCHED ON CARD * 01145000
  984. * 'R2' = HEX CODE X'0010' INDICATING SPECIAL CARD * 01146000
  985. * ('R2' CANNOT BE REGISTER 15) * 01147000
  986. * 'R2+1' = LENGTH OF DATA AREA 0 < LENGTH <= 70 * 01148000
  987. *---------------------------------------------------------------------* 01149000
  988. HVDACCT EQU * @VM03170 01150000
  989. NI VMPSW+2,X'FF'-X'30' CLEAR CONDITION CODE FIELD 01151000
  990. * TO ZERO 01152000
  991. NI VMPSW+4,X'FF'-X'30' CLEAR CONDITION CODE FIELD 01153000
  992. * TO ZERO 01154000
  993. TM VMPSTAT,VMACCOUN IS THE ACCOUNTING OPTION SET ? 01155000
  994. BZ HVDDTC1 NO, GO SET CONDITION CODE @VM03170 01156000
  995. LA R15,16 LOAD CODE X'10' FOR COMPARISON @VM03170 01157000
  996. C R15,0(,R6) SEE IF USER SPECIFIED X'10' @VM03170 01158000
  997. BNE STDACNT NORMAL PROCESSING, IF NOT @VM03170 01159000
  998. LA R9,4(,R6) GET ADDRESS OF RY+1 (LENGTH) @VM03170 01160000
  999. LA R15,VMGPRS+(4*15) GET ADDRESS OF END OF REGS @VM03170 01161000
  1000. CR R9,R15 COMPARE WITH A(RY+1) @VM03170 01162000
  1001. LA R9,SPECERR USEFUL FOR BALR'S AND ADDCHEK @VM03170 01163000
  1002. BCR 2,R9 CANNOT SPECIFY RY=R15 @VM03170 01164000
  1003. ICM R3,B'1111',4(R6) PICK UP LENGTH @VM03170 01165000
  1004. BCR 12,R9 MUST BE > 0 @VM03170 01166000
  1005. CH R3,=H'70' CHECK FOR MAX LENGTH @VM03170 01167000
  1006. BCR 2,R9 MUST BE <= 70 @VM03170 01168000
  1007. L R1,0(,R5) GET USER ADDRESS FOR ADDCHEK @VM03170 01169000
  1008. LR R2,R3 AND LENGTH FOR SAME @VM03170 01170000
  1009. BAL R10,ADDCHEK CHECK FOR PAGE CROSSING @VM03170 01171000
  1010. LA R0,ACNTSIZE GET SIZE OF ACNT BUFFER @VM03170 01172000
  1011. CALL DMKFREE NOW, GET THE BUFFER @VM03170 01173000
  1012. LR R4,R1 R4 IS PARMREG FOR ACNT QUEUING @VM03170 01174000
  1013. USING ACNTBLOK,R4 @VM03170 01175000
  1014. MVI ACNTDATA,C' ' SET UP TO BLANK DATA FIELDS @VM03170 01176000
  1015. MVC ACNTDATA+1(79),ACNTDATA BLANK OUT THE CARD AREA @VM03170 01177000
  1016. L R5,0(,R5) PICK UP USER DATA ADDRESS @VM03170 01178000
  1017. LA R1,0(0,R5) PLACE THE ADDRESS NEATLY INTO R1 @VM03170 01179000
  1018. TRANS 9,1,OPT=(BRING,DEFER) @VM03170 01180000
  1019. BCTR R3,0 SUBTRACT 1 FOR EXECUTE @VM03170 01181000
  1020. EX R3,MVACDATA MOVE DATA INTO ACNTBLOK @VM03170 01182000
  1021. MVC ACNTUSER,VMUSER MOVE USERID INTO ACNTBLOK @VM03170 01183000
  1022. MVC ACNTCODE,=C'C0' SET SPECIAL CARD CODE @VM03170 01184000
  1023. CALL DMKACOQU PUT THE CARD IN THE ACCNT CHAIN @VM03170 01185000
  1024. B HVDEXIT OK - RETURN TO CALLER @VM03170 01186000
  1025. MVACDATA MVC ACNTNUM(*-*),0(R9) @VM03170 01187000
  1026. DROP R4 @VM03170 01188000
  1027. SPACE 1 01189000
  1028. STDACNT EQU * @VM03170 01190000
  1029. ICM R15,15,VMACOUNT ACCOUNT FOR SOMEELSE? @V408246 01191000
  1030. BZ *+8 NO @V408246 01192000
  1031. MVI VMPSWDCT,0 YES, ALSO RESET LINK COUNT @V408246 01193000
  1032. CALL DMKCPVAA GO PUNCH ACCOUNTING RECORDS 01194000
  1033. SR R3,R3 CLEAR THE REGISTER 01195000
  1034. BAL R8,RELSTOR1 GO RELEASE THE STORAGE 01196000
  1035. TM 3(R5),X'07' IS THE ADDRESS ALIGNMENT CORRECT 01197000
  1036. BNZ SPECERR NO, GO GIVE SPECIFICATION CHECK 01198000
  1037. ICM R1,15,0(R5) GET THE ADDRESS OF THE 01199000
  1038. * PARAMETER LIST 01200000
  1039. BZ HVDEXIT IF ZERO, GO RETURN TO USER @VM03170 01201000
  1040. LA R2,24(0) GET THE LENGTH OF THE PARAMETER 01202000
  1041. * LIST 01203000
  1042. LA R9,HVDACT GET THE RETURN ADDRESS IF THE @VM03170 01204000
  1043. * PARAMETER 01205000
  1044. * CROSS A PAGE BOUNDARY 01206000
  1045. BAL R10,ADDCHEK CHECK PAGE CROSS - VALIDITY 01207000
  1046. HVDACT EQU * @VM03170 01208000
  1047. LA R0,UDBFSIZE GET THE DIRECTORY BUFFER BLOCK 01209000
  1048. * LENGTH 01210000
  1049. CALL DMKFREE GET SPACE FOR BLOCK 01211000
  1050. LR R4,R1 SAVE THE POINTER TO THE DIRECTORY 01212000
  1051. * BUFFER 01213000
  1052. USING UDBFBLOK,R4 SETUP ADDRESSABILITY FOR 01214000
  1053. * DIRECTORY 01215000
  1054. * BUFFER 01216000
  1055. XC UDBFVADD(8),UDBFVADD CLEAR THE DOUBLEWORD FIELD 01217000
  1056. L R5,0(0,R5) GET THE ADDRESS OF THE 01218000
  1057. * PARAMETER LIST 01219000
  1058. LA R1,0(0,R5) GET THE ADDRESS OF THE FIRST 01220000
  1059. * PARAMETER 01221000
  1060. TRANS 9,1,OPT=(BRING,DEFER) 01222000
  1061. LR R1,R9 GET THE ADDRESS OF THE PARAMETER 01223000
  1062. LR R2,R4 GET ADDRESS OF DIRECTORY BUFFER 01224000
  1063. LA R0,8 GET THE LENGTH OF THE FIRST 01225000
  1064. * PARAMETER 01226000
  1065. CALL DMKUDRFU GO FIND THE USER ID 01227000
  1066. BNZ CPVACCT2 NO, GO SET CONDITION CODE FOR 01228000
  1067. * INVALID 01229000
  1068. * USER ID. 01230000
  1069. LA R0,ACCTLENG GET THE LENGTH OF THE 01231000
  1070. * ACCOUNTING BLOCK 01232000
  1071. CALL DMKFREE GET THE SPACE FOR ACCOUNTING 01233000
  1072. * BLOCK 01234000
  1073. USING UDIRBLOK,R4 SETUP ADDRESSABILITY FOR USER 01235000
  1074. * DIRECTORY 01236000
  1075. LR R3,R1 SAVE THE ADDRESS OF THE 01237000
  1076. * ACCOUNTING BLK. 01238000
  1077. USING ACCTBLOK,R3 SETUP ADDRESSABILITY FOR THE 01239000
  1078. * ACCOUNTING 01240000
  1079. * BLOCK 01241000
  1080. MVC ACCTUSER(8),UDIRUSER GET THE USER ID FROM THE 01242000
  1081. * DIRECTORY 01243000
  1082. LA R1,UDIRDISP POINT TO THE DASD ADDRESS 01244000
  1083. CALL DMKUDRMD GO GET THE USER MACHINE BLOCK @V407466 01245000
  1084. BNZ CPVACCT3 ERROR GETTING MACHINE BLOCK 01246000
  1085. USING UMACBLOK,R4 SETUP ADDRESSABILITY FOR USER 01247000
  1086. * MACHINE 01248000
  1087. * BLOCK 01249000
  1088. MVC ACCTACNO(16),UMACACCT GET THE ACCOUNT 01250000
  1089. * NUMBER AND DISTRIBUTION NUMBER 01251000
  1090. L R6,0(0,R6) GET THE STATUS CODE 01252000
  1091. LTR R6,R6 IS THE STATUS CODE ZERO ? 01253000
  1092. BZ CPVACCT1 IF ZERO, GO RELEASE STORAGE 01254000
  1093. LA R1,8(0,R5) GET THE ADDRESS OF THE SECOND 01255000
  1094. * PARAMETER 01256000
  1095. TRANS 9,1,OPT=(BRING,DEFER) 01257000
  1096. C R6,F4 IS THE ACCOUNT NUMBER AVAILABLE ? 01258000
  1097. BNE CPVDISTN NO, GO MOVE THE DISTRIBUTION 01259000
  1098. * NUMBER 01260000
  1099. MVC ACCTACNO(8),0(R9) GET THE ACCOUNT NUMBER FROM 01261000
  1100. * THE 01262000
  1101. * BUFFER FIELD 01263000
  1102. B CPVACCT1 GO RELEASE STORAGE 01264000
  1103. CPVDISTN EQU * 01265000
  1104. C R6,F8 IS THE DISTRIBUTION NUMBER 01266000
  1105. * AVAILABLE ? 01267000
  1106. BNE CPVACDIS NO, GO MOVE THE ACCOUNT AND 01268000
  1107. * DISTRIBUTION NUMBER INTO THE BLOCK 01269000
  1108. CPVHVD1 EQU * @VM03170 01270000
  1109. LA R1,16(0,R5) GET THE ADDRESS OF THE THIRD 01271000
  1110. * PARAMETER 01272000
  1111. TRANS 9,1,OPT=(BRING,DEFER) 01273000
  1112. MVC ACCTDIST(8),0(R9) GET THE DISTRIBUTION NUMBER 01274000
  1113. B CPVACCT1 GO RELEASE STORAGE 01275000
  1114. CPVACDIS EQU * 01276000
  1115. LA R8,12 GET THE FUNCTION CODE 01277000
  1116. CR R6,R8 IS THE DISTRIBUTION AND ACCOUNT 01278000
  1117. * NUMBER 01279000
  1118. * AVAILABLE ? 01280000
  1119. BNE CPVACCT3 NO, GO SET CONDITION CODE 3 01281000
  1120. MVC ACCTACNO(8),0(R9) GET THE ACCOUNT NUMBER 01282000
  1121. B CPVHVD1 GO GET THE DISTRIBUTION NUMBER @VM03170 01283000
  1122. CPVACCT1 EQU * 01284000
  1123. DROP R4,R3 DROP BASE REGISTERS FOR BLOCKS 01285000
  1124. BAL R8,RELSTOR GO RELEASE STORAGE 01286000
  1125. B HVDEXIT GO RETURN TO USER @VM03170 01287000
  1126. CPVACCT2 EQU * 01288000
  1127. BAL R8,RELSTOR GO RELEASE STORAGE 01289000
  1128. B HVDDTC2 GO SET CONDITION CODE 2 @VM03170 01290000
  1129. CPVACCT3 EQU * 01291000
  1130. LR R1,R3 GET THE ADDRESS OF THE 01292000
  1131. * ACCOUNTING BLOCK 01293000
  1132. LA R0,ACCTLENG GET THE LENGTH OF THE 01294000
  1133. * ACCOUNTING BLOCK 01295000
  1134. CALL DMKFRET RELEASE THE STORAGE 01296000
  1135. SR R3,R3 CLEAR THE POINTER TO THE 01297000
  1136. * ACCOUNTING BLK 01298000
  1137. BAL R8,RELSTOR GO RELEASE STORAGE 01299000
  1138. B HVDDTC3 GO SET CONDITION CODE 3 @VM03170 01300000
  1139. SPACE 4 01301000
  1140. RELSTOR EQU * 01302000
  1141. LR R2,R4 GET THE ADDRESS OF THE 01303000
  1142. * DIRECTORY BLOCK 01304000
  1143. CALL DMKUDRRV RELEASE THE DIRECTORY 01305000
  1144. LR R1,R4 GET THE ADDRESS OF THE 01306000
  1145. * DIRECTORY BLOCK 01307000
  1146. LA R0,UDBFSIZE GET THE SIZE OF THE BLOCK 01308000
  1147. CALL DMKFRET RELEASE THE STORAGE 01309000
  1148. RELSTOR1 EQU * 01310000
  1149. ICM R1,15,VMACOUNT GET THE ADDRESS OF THE 01311000
  1150. * ACCOUNTING BLOCK 01312000
  1151. BZ CPVADDR NO ADDRESS, GO SAVE POINTER 01313000
  1152. LA R0,ACCTLENG GET THE LENGTH OF THE 01314000
  1153. * ACCOUNTING BLOCK 01315000
  1154. CALL DMKFRET RELEASE STORAGE 01316000
  1155. CPVADDR EQU * 01317000
  1156. ST R3,VMACOUNT SAVE THE NEW ACOUNTING BLOCK 01318000
  1157. * POINTER 01319000
  1158. BR R8 RETURN TO IN LINE CODE 01320000
  1159. EJECT 01321000
  1160. *---------------------------------------------------------------------* 01322000
  1161. * LOAD/SAVE 3800 IMAGE LIBRARY - CLASS A, B, OR C ONLY * 01323000
  1162. *---------------------------------------------------------------------* 01324000
  1163. SPACE 01325000
  1164. HVD3800 DS 0H @V60B9BA 01326000
  1165. TM VMCLEVEL,VMCLASSA+VMCLASSB+VMCLASSC ALLOWED ? @V60B9BA 01327000
  1166. BZ PRIVLGD GIVE HIM PRIV OP IF NOT @V60B9BA 01328000
  1167. LA R9,VMGPRS+4*R15 TEST FOR REGISTER 15 @V60B9BA 01329000
  1168. CR R6,R9 IS 'R2' = R15 ? @V60B9BA 01330000
  1169. BE SPECERR XFER IF SO @V60B9BA 01331000
  1170. CR R5,R9 IS 'R1' = R15 ? @V60B9BA 01332000
  1171. BE SPECERR XFER IF SO @V60B9BA 01333000
  1172. L R9,0(,R6) VIRTUAL ADDRESS @V60B9BA 01334000
  1173. N R9,F4095 SEE IF IT'S ON PAGE BDY @V60B9BA 01335000
  1174. BNZ SPECERR XFER IF NOT @V60B9BA 01336000
  1175. L R9,4(,R6) NUMBER OF BYTES TO LOAD @V60B9BA 01337000
  1176. LA R9,0(,R9) GET RID OF HI ORDER BYTE @V60B9BA 01338000
  1177. AL R9,0(,R6) END ADDR OF THE LOAD/SAVE @V60B9BA 01339000
  1178. C R9,VMSIZE IS IT PAST STORAGE ? @V60B9BA 01340000
  1179. BNL ADDRERR ADDRESSING EXPT IF SO @V60B9BA 01341000
  1180. L R1,=A(DMKQNTBL) LOAD ADDR OF NPRTBL @V60B9BA 01342000
  1181. LTR R1,R1 ANY NAME3800 MACROS AT ALL? @V60B9BA 01343000
  1182. BNP ERR3804 SYSTEM NOT FOUND @V60B9BA 01344000
  1183. TRANS 2,1,OPT=(BRING,DEFER,SYSTEM) BRING NPRTBL IN @V60B9BA 01345000
  1184. USING NPRTBL,R2 ADDRESSIBILITY @V60B9BA 01346000
  1185. H38A CLC NPRNAME,0(R5) IS THIS THE SYSTEM ? @V60B9BA 01347000
  1186. BE H38B XFER IF SO @V60B9BA 01348000
  1187. AL R2,NPRPNT POINT NEXT ENTRY @V60B9BA 01349000
  1188. CLC NPRPNT,ZEROES IS THIS THE DUMMY ENTRY ? @V60B9BA 01350000
  1189. BNE H38A TRY AGAIN IF NOT @V60B9BA 01351000
  1190. B ERR3804 SYSTEM NOT FOUND IF IT IS @V60B9BA 01352000
  1191. SPACE 01353000
  1192. H38B CLI NPRCNT,X'00' ANYTHING CURRENTLY ACTIVE ? @V60B9BA 01354000
  1193. BNE ERR3808 XFER IF SO @V60B9BA 01355000
  1194. LA R0,6 LENGTH OF VOLSER @V60B9BA 01356000
  1195. LA R1,NPRVOL ADDRESS OF VOLSER @V60B9BA 01357000
  1196. CALL DMKSCNVS LET'S TRY TO FIND THE DEVICE@V60B9BA 01358000
  1197. BNZ ERR3810 VOLID NOT MOUNTED @V60B9BA 01359000
  1198. LR R8,R1 RDEVBLOK TO R8 @V60B9BA 01360000
  1199. USING RDEVBLOK,R8 ADDRESSIBILITY @V60B9BA 01361000
  1200. TM RDEVFLAG,RDEVOWN OWNED VOLUME ? @V60B9BA 01362000
  1201. BZ ERR380C ERROR IF NOT @V60B9BA 01363000
  1202. L R9,4(,R6) NUMBER OF BYTES TO SAVE @V60B9BA 01364000
  1203. LA R9,0(,R9) CLEAR HI ORDER BYTE @V60B9BA 01365000
  1204. AL R9,F4095 ROUND UP TO A PAGE @V60B9BA 01366000
  1205. SRL R9,12 GET NUMBER OF PAGES @V60B9BA 01367000
  1206. C R9,NPRPAGCT MORE THAN WAS ALLOCATED ? @V60B9BA 01368000
  1207. BH ERR3814 XFER IF SO @V60B9BA 01369000
  1208. SPACE 01370000
  1209. *. 01371000
  1210. * WE NOW PROCEED TO LOAD/SAVE THE PAGES SPECIFIED BY THE 01372000
  1211. * USER. THE FOLLOWING REGISTERS ARE USED: 01373000
  1212. * R3 - PAGES/CYL FOR THE DEVICE 01374000
  1213. * R4 - CCPD FOR THE PAGE TO BE MOVED 01375000
  1214. * R7 - VIRTUAL ADDRESS FOR USER LOAD/SAVE 01376000
  1215. * R9 - NUMBER OF PAGES LEFT TO BE MOVED 01377000
  1216. * R15 - ADDRESS OF DMKRPAGT OR DMKRPAPT (LOAD OR SAVE) 01378000
  1217. * IF THERE IS ANY ERROR LOADING/SAVING ANY PAGE, EXIT IS 01379000
  1218. * MADE TO THE CALLER WITH A RETURN CODE OF X'18' IN 'R2'. 01380000
  1219. * UPON SUCCESSFUL COMPLETION, THE SYSTEM IS LOADED/SAVED, 01381000
  1220. * AND THE CALLER RECEIVES A RETURN CODE OF X'00' IN 'R2'. 01382000
  1221. *. 01383000
  1222. SPACE 01384000
  1223. L R4,NPRSTART CCPD OF START OF SYSTEM @V60B9BA 01385000
  1224. IC R4,RDEVCODE+1 INDEX TO OWNED VOL LIST @V60B9BA 01386000
  1225. DROP R2 NO LONGER NEEDED @V60B9BA 01387000
  1226. LA R3,32 PAGES/CYL ON 2314 @V60B9BA 01388000
  1227. TM RDEVTYPE,TYP2314 IS IT A 2314 ? @V60B9BA 01389000
  1228. BO GOTMAXPG XFER IF SO @V60B9BA 01390000
  1229. LA R3,120 PAGES/CYL FOR A 3350 @V60B9BA 01391000
  1230. CLI RDEVTYPE,TYP3350 IS IT A 3350 ? @V60B9BA 01392000
  1231. BE GOTMAXPG XFER IF SO @V60B9BA 01393000
  1232. LA R3,57 PAGES/CYL FOR A 3330 @V60B9BA 01394000
  1233. TM RDEVTYPE,TYP3330 IS IT A 3330 ? @V60B9BA 01395000
  1234. BO GOTMAXPG XFER IF SO @V60B9BA 01396000
  1235. LA R3,24 MUST BE A 3340 OR 2305 @V60B9BA 01397000
  1236. DROP R8 NO LONGER NEEDED @V60B9BA 01398000
  1237. SPACE 01399000
  1238. GOTMAXPG SLL R3,8 GET PAGES INTO POSITION @V60B9BA 01400000
  1239. L R7,0(,R6) STARTING VIRTUAL ADDRESS @V60B9BA 01401000
  1240. H38LOOP CLI 4(R6),X'00' IS IT A LOAD ? @V60B9BA 01402000
  1241. BE H38NOTR DON'T TRANS IF SO @V60B9BA 01403000
  1242. LR R1,R7 TRANS IN THE ADDRESS @V60B9BA 01404000
  1243. TRANS 2,1,OPT=(DEFER) WAIT FOR IT TO ARRIVE @V60B9BA 01405000
  1244. H38NOTR LR R1,R7 VIRTUAL ADDRESS TO SAVE/LD @V60B9BA 01406000
  1245. LR R0,R4 CCPD OF DASD ADDRESS @V60B9BA 01407000
  1246. L R15,=A(DMKRPAGT) ASSUME A LOAD OPERATION @V60B9BA 01408000
  1247. CLI 4(R6),X'00' IS IT A LOAD ? @V60B9BA 01409000
  1248. BE *+8 XFER IF SO @V60B9BA 01410000
  1249. L R15,=A(DMKRPAPT) IT MUST BE A SAVE OPERATION @V60B9BA 01411000
  1250. CALL (15),PARM=0 LOAD->ASSIGN PAGE TO USER @V60B9BA 01412000
  1251. * SAVE->PUT PAGE TO DASD @V60B9BA 01413000
  1252. BNZ ERR3818 PAGING ERROR - TELL HIM @V60B9BA 01414000
  1253. AL R4,F256 BUMP CCPD TO NEXT PAGE @V60B9BA 01415000
  1254. LR R1,R4 CCPD TO R1 FOR WORK @V60B9BA 01416000
  1255. N R1,=X'0000FF00' ISOLATE PAGE NUMBER @V60B9BA 01417000
  1256. CR R1,R3 REACHED MAXIMUM ? @V60B9BA 01418000
  1257. BNH PAGBUMP XFER IF NOT @V60B9BA 01419000
  1258. AL R4,=X'00010000' BUMP TO NEXT CYLINDER @V60B9BA 01420000
  1259. ICM R4,B'0010',F1+3 START AT PAGE ONE @V60B9BA 01421000
  1260. PAGBUMP AL R7,F4096 NEXT VIRTUAL PAGE @V60B9BA 01422000
  1261. BCT R9,H38LOOP DO IT FOR NEXT PAGE @V60B9BA 01423000
  1262. SPACE 01424000
  1263. MVC 0(4,R6),ZEROES ZERO RETURN CODE IN 'R2' @V60B9BA 01425000
  1264. B HVDEXIT RETURN TO CALLER @V60B9BA 01426000
  1265. SPACE 01427000
  1266. ERR3804 MVC 0(4,R6),F4 RC04 - SYS NOT FOUND @V60B9BA 01428000
  1267. B HVDEXIT RETURN TO CALLER @V60B9BA 01429000
  1268. SPACE 01430000
  1269. ERR3808 MVC 0(4,R6),F8 RC08 - CURR SYS ACTIVE @V60B9BA 01431000
  1270. B HVDEXIT RETURN TO CALLER @V60B9BA 01432000
  1271. SPACE 01433000
  1272. ERR380C MVC 0(4,R6),=F'12' RC0C - VOLID NOT CP-OWNED @V60B9BA 01434000
  1273. B HVDEXIT RETURN TO CALLER @V60B9BA 01435000
  1274. SPACE 01436000
  1275. ERR3810 MVC 0(4,R6),F16 RC10 - VOLID NOT MOUNTED @V60B9BA 01437000
  1276. B HVDEXIT RETURN TO CALLER @V60B9BA 01438000
  1277. SPACE 01439000
  1278. ERR3814 MVC 0(4,R6),F20 RC14 - TOO MANY PAGES REQSTD@V60B9BA 01440000
  1279. USING NPRTBL,R2 USE REG 2 @VMI0005 01441000
  1280. L R9,4(,R6) NUMBER OF BYTES TO SAVE @VMI0005 01442000
  1281. LA R9,0(R9) ADDRESS ONLY @VMI0005 01443000
  1282. L R10,NPRPAGCT NUMBER OF PAGES ALLOCATED @VMI0005 01444000
  1283. SLL R10,12 CONVERT TO BYTES @VMI0005 01445000
  1284. SR R9,R10 CALC RESIDUAL COUNT IN BYTES@VMI0005 01446000
  1285. ST R9,4(,R6) STORE IN USER'S REG @VMI0005 01447000
  1286. DROP R2 DROP REG 2 @VMI0005 01448000
  1287. B HVDEXIT RETURN TO CALLER @V60B9BA 01449000
  1288. SPACE 01450000
  1289. ERR3818 MVC 0(4,R6),F24 RC18 - PAGING ERROR @V60B9BA 01451000
  1290. B HVDEXIT RETURN TO CALLER @V60B9BA 01452000
  1291. EJECT 01453000
  1292. SPECERR EQU * @V1D0631 01454000
  1293. LA R0,X'06' INTERRUPT CODE 01455000
  1294. B PROGINT 01456000
  1295. SPACE 01457000
  1296. ADDRERR EQU * REFLECT ADDRESSING ERROR 01458000
  1297. LA R0,X'05' INTERRUPT CODE 01459000
  1298. B PROGINT 01460000
  1299. SPACE 01461000
  1300. PROTERR EQU * REFLECT PROTECTION CHECK 01462000
  1301. LA R0,X'04' INTERRUPT CODE 01463000
  1302. B PROGINT 01464000
  1303. SPACE 01465000
  1304. PRIVLGD EQU * REFLECT PRIVILEGED OPERATION 01466000
  1305. LA R0,X'02' INTERRUPT CODE 01467000
  1306. SPACE 01468000
  1307. PROGINT EQU * 01469000
  1308. B HVDCC1 REFLECT PROGRAM INTERRUPT @VM03170 01470000
  1309. EJECT 01471000
  1310. *-------------------------------------------------------------- 01472000
  1311. * DIAGNOSE X'84' - UPDATE CP DIRECTORY IN PLACE 01473000
  1312. * 01474000
  1313. * THIS CODE IS THE INTERFACE BETWEEN THE 'DIRECT MODULE' RUNNING 01475000
  1314. * IN THE DIRECTORY MAINTENANCE VIRTUAL MACHINE AND THE CP CODE 01476000
  1315. * THAT UPDATES THE DIRECTORY IN-PLACE. PARAMETRIC DATA IS PASSED 01477000
  1316. * IN A PARAMETER LIST POINTED TO BY THE 'RX' REGISTER OF DIAGNOSE 01478000
  1317. * INSTRUCTION X'84'. THE 'RY' REGISTER CONTAINS THE LENGTH 01479000
  1318. * OF THE PARAMETER LIST (IN BYTES). 01480000
  1319. * 01481000
  1320. * THE CALLER MUST HAVE PRIVILEGE CLASS B. 01482000
  1321. * 01483000
  1322. * EXIT CONDITIONS: 01484000
  1323. * CC = 0 UPDATE WAS SUCCESSFUL 01485000
  1324. * CC = 1 ERROR. RY CONTAINS NUMERIC CODE SPECIFYING ERROR 01486000
  1325. * RY = X'65' - PARAMETER LIST SIZE GR THAN 112 BYTES 01486100
  1326. * X'66' - PARAMETER LIST SIZE LESS/EQ ZERO 01486200
  1327. * 01487000
  1328. *-------------------------------------------------------------- 01488000
  1329. EXTRN DMKUDUMN @V60C1BD 01489000
  1330. SPACE 1 01490000
  1331. HVCDUIP EQU * @V60C1BD 01491000
  1332. TM VMCLEVEL,VMCLASSB VALID CLASS? @V60C1BD 01492000
  1333. BZ PRIVLGD BR IF NOT @V60C1BD 01493000
  1334. SPACE 1 01494000
  1335. * SET CC IN VPSW TO ERROR CONDITION FOR SAFETY. (IT WILL BE 01495000
  1336. * SET TO NON-ERROR CONDITION IS THE UPDATE COMPLETES OKAY. 01496000
  1337. TM VMESTAT,VMEXTCM EC MODE PSW? @V60C1BD 01497000
  1338. BZ BCMODE BR IF BC MODE @V60C1BD 01498000
  1339. OI VMPSW+2,X'30' CC=3 (IN CASE OF EC MODE PSW) @V60C1BD 01499000
  1340. B *+8 @V60C1BD 01500000
  1341. BCMODE OI VMPSW+4,X'30' CC=3 (IN CASE OF BC MODE PSW) @V60C1BD 01501000
  1342. SPACE 1 01502000
  1343. *-------------------------------------------------------------- 01503000
  1344. * CHECK PARAMETER LIST: 01504000
  1345. *-------------------------------------------------------------- 01505000
  1346. L R2,0(,R6) GET LENGTH OF LIST FROM 'RY' @V60C1BD 01506000
  1347. * CHECK THAT PARAMETER LIST DOESN'T EXCEED (96 BYTES) 01507000
  1348. C R2,=F'112' IS LIST TOO LARGE? @VMI0026 01508000
  1349. BH SIZERR01 BR IF YES, ... SIZE ERROR @V60C1BD 01509000
  1350. LTR R2,R2 IS LIST SIZE LESS/EQ ZERO? @VA10682 01509100
  1351. BNP SIZERR02 YES, BR TO HANDLE SIZE ERROR @VA10682 01509200
  1352. SPACE 1 01510000
  1353. * NOW, CHECK FOR CROSSING A PAGE BOUNDARY. 01511000
  1354. * 'ADDCHEK' REQUIRES: R1 = STARTING ADDRESS, R2 = LENGTH 01512000
  1355. * R9 = CROSS RETURN ADDRESS, R10 = NO CROSS RETURN ADDRESS. 01513000
  1356. LR R3,R2 DUP TOTAL LENGTH @V60C1BD 01514000
  1357. SR R4,R4 CLEAR REG @V60C1BD 01515000
  1358. L R1,0(,R5) GET ADDRESS OF LIST FROM 'RX' @V60C1BD 01516000
  1359. LA R10,GETAREA PREPARE FOR NO CROSS RETURN @V60C1BD 01517000
  1360. BAL R9,ADDCHEK TO ROUTINE TO CHECK PAGE CROSSING@V60C1BD 01518000
  1361. SPACE 1 01519000
  1362. * HERE IF PARAMETER LIST CROSSES A PAGE BOUNDARY 01520000
  1363. * CALCULATE LENGTH OF EACH PIECE. AT THIS POINT, R14 = ADDRESS 01521000
  1364. * OF 1ST BYTE OF 2ND PAGE, R15 = ADDR OF 1ST BYTE OF 1ST PAGE. 01522000
  1365. * R1 = ADDR OF PARAMETER LIST (IN 1ST PAGE) 01523000
  1366. * R2 = LENGTH OF PARAMETER LIST 01524000
  1367. LR R4,R2 DUP LENGTH @V60C1BD 01525000
  1368. LR R3,R14 DUP ADDR OF 2ND PAGE @V60C1BD 01526000
  1369. SLR R3,R1 CALC. LENGTH OF 1ST PIECE @V60C1BD 01527000
  1370. SLR R4,R3 CALC. LENGTH OF 2ND PIECE @V60C1BD 01528000
  1371. * GET FREE STORAGE TO SAVE THE PARAMETER LIST 01529000
  1372. * R2 CONTAINS THE SIZE OF THE LIST 01530000
  1373. GETAREA LR R0,R2 SPECIFY SIZE TO GET @V60C1BD 01531000
  1374. A R0,=F'7' ADD SEVEN TO INSURE CORRECT SIZE @V60C1BD 01532000
  1375. SRL R0,3 DIVIDE BY 8 FOR NO. OF DBL. WORDS@V60C1BD 01533000
  1376. CALL DMKFREE GET REAL STORAGE FOR PARM. LIST @V60C1BD 01534000
  1377. LR R9,R1 SAVE ADDRESS OF FREE STORAGE @V60C1BD 01535000
  1378. SPACE 1 01536000
  1379. * BRING VIRTUAL PAGE INTO STORAGE 01537000
  1380. L R1,0(,R5) GET ORIGINAL VIRTUAL ADDRESS @V60C1BD 01538000
  1381. TRANS 2,1,OPT=(BRING+DEFER) @V60C1BD 01539000
  1382. SPACE 1 01540000
  1383. * MOVE PARAMETER LIST FROM VIRTUAL TO REAL STORAGE 01541000
  1384. * R1 = ADDRESS OF FREE STORAGE 01542000
  1385. * R2 = REAL ADDRESS OF PARAMETER LIST 01543000
  1386. LR R1,R9 GET SAVED FREE STORAGE ADDRESS @V60C1BD 01544000
  1387. LR R7,R3 GET LEN. OF 1ST (OR ENTIRE) PIECE@VA10682 01545500
  1388. BCTR R7,0 DECREMENT SIZE FOR EXECUTED MVC @V60C1BD 01547000
  1389. EX R7,XMVPARM EXECUTED MVC TO MOVE PARM. LIST @V60C1BD 01548000
  1390. SPACE 1 01549000
  1391. * CHECK FOR 2ND PIECE IN DIFFERENT PAGE 01550000
  1392. LTR R4,R4 IS THERE A SECOND PIECE? @V60C1BD 01551000
  1393. BZ CALLUDU BR IF NOT @V60C1BD 01552000
  1394. SPACE 1 01553000
  1395. L R1,0(,R5) GET ORIGINAL VIRTUAL ADDRESS @V60C1BD 01554000
  1396. ALR R1,R3 ADD LENGTH OF 1ST PIECE @V60C1BD 01555000
  1397. TRANS 2,1,OPT=(BRING+DEFER) @V60C1BD 01556000
  1398. SPACE 1 01557000
  1399. LR R1,R9 GET ADDRESS OF FREE STORAGE @V60C1BD 01558000
  1400. ALR R1,R3 ADD LENGTH OF 1ST PIECE @V60C1BD 01559000
  1401. BCTR R4,0 DECREMENT 2ND LENGTH @V60C1BD 01560000
  1402. EX R4,XMVPARM MOVE 2ND PIECE TO FREE STORAGE @V60C1BD 01561000
  1403. SPACE 1 01562000
  1404. * DMKUDU DOES THE REST OF THE WORK 01563000
  1405. LR R1,R9 GET ADDRESS OF FREE STORAGE @V60C1BD 01564000
  1406. CALLUDU CALL DMKUDUMN CALL DIRECTORY UPDATE RTN. @V60C1BD 01565000
  1407. SPACE 1 01566000
  1408. *-------------------------------------------------------------- 01567000
  1409. * ON RETURN, IF THERE WERE ERRORS, SET CC = 1 AND VIRTUAL RY 01568000
  1410. * TO THE ERROR CODE. 01569000
  1411. *-------------------------------------------------------------- 01570000
  1412. LA R4,X'DF' PREPARE TO SET CC = 1 ON RETURN @V60C1BD 01571000
  1413. BNZ *+8 BR IF ERROR FROM DMKUDU @V60C1BD 01572000
  1414. LA R4,X'CF' PREPARE TO SET CC = 0 ON RETURN @V60C1BD 01573000
  1415. SPACE 1 01574000
  1416. * RETURN FREE STORAGE 01575000
  1417. L R0,0(,R6) GET ORIGINAL LENGTH OF LIST @V60C1BD 01576000
  1418. A R0,=F'7' INSURE CORRECT SIZE @V60C1BD 01577000
  1419. SRL R0,3 DIVIDE BY 8 TO GET DBL WORDS @V60C1BD 01578000
  1420. LR R1,R9 GET FREE STORAGE ADDRESS @V60C1BD 01579000
  1421. CALL DMKFRET @V60C1BD 01580000
  1422. SPACE 1 01581000
  1423. UIPERX ST R2,0(,R6) SET RETURN CODE IN REG "RY" @V60C1BD 01582000
  1424. LA R3,VMPSW+4 PREPARE FOR SETTING BC CC @V60C1BD 01583000
  1425. TM VMESTAT,VMEXTCM EC MODE VPSW? @V60C1BD 01584000
  1426. BZ *+8 BR IF NOT @V60C1BD 01585000
  1427. LA R3,VMPSW+2 PREPARE FOR SETTING EC CC @V60C1BD 01586000
  1428. EX R4,XSETCC EXECUTE AN 'NI' TO SET CC IN VPSW@V60C1BD 01587000
  1429. B HVDEXIT RETURN ------> @V60C1BD 01588000
  1430. SPACE 1 01589000
  1431. XSETCC NI 0(R3),*-* EXECUTED TO SET CC IN VPSW @V60C1BD 01590000
  1432. XMVPARM MVC 0(*-*,R1),0(R2) EXECUTED FOR MOVING PLIST @V60C1BD 01591000
  1433. SPACE 1 01592000
  1434. *-------------------------------------------------------------- 01593000
  1435. * ERROR SETTING CODE: 01594000
  1436. *-------------------------------------------------------------- 01595000
  1437. SIZERR01 DS 0H @V60C1BD 01596000
  1438. LA R2,101 RETURN ERROR CODE @V60C1BD 01597000
  1439. B UIPERR @V60C1BD 01598000
  1440. SPACE 1 01599000
  1441. SIZERR02 DS 0H @V60C1BD 01600000
  1442. LA R2,102 RETURN ERROR CODE @V60C1BD 01601000
  1443. SPACE 1 01602000
  1444. UIPERR LA R4,X'10' PREPARE TO SET CC = 1 @V60C1BD 01603000
  1445. B UIPERX GO TO RETURN @V60C1BD 01604000
  1446. EJECT 01605000
  1447. *----------------------------------------------------------------- 01606000
  1448. * ENABLE PA2 EXTERNAL INTERRUPT 01607000
  1449. *----------------------------------------------------------------- 01608000
  1450. HVDEXPA EQU * @VM03170 01609000
  1451. L R1,0(,R5) GET 'R1' VALUE @VM03170 01610000
  1452. L R8,VMTERM GET ADDRESS OF RDEVBLOK @VM03170 01611000
  1453. LTR R8,R8 DOES IT EXIST ? @VM03170 01612000
  1454. BNP HVDEXIT NO, GET OUT @VM03170 01613000
  1455. USING RDEVBLOK,R8 SETUP ADDRESSABILITY FOR RDEVBLOK@VM03170 01614000
  1456. CLI RDEVTYPC,CLASTERM IS THIS A REMOTE 3270 @VM03170 01615000
  1457. BNE TSTGRAF NO, TEST FOR LOCAL GRAPHIC @VM03170 01616000
  1458. CLI RDEVTYPE,TYPBSC REMOTE 3270 LINE @VM03170 01617000
  1459. BNE HVDEXIT NO, GET OUT @VM03170 01618000
  1460. BAL R3,GETNICB FIND NICBLOK ADDRESS @VM03170 01619000
  1461. USING NICBLOK,R2 SET UP ADDRESSABILITY FOR NICBLOK@VM03170 01620000
  1462. TM NICTYPE,NICGRAF IS THIS A GRAPHIC DEVICE @VM03170 01621000
  1463. BZ HVDEXIT NO, GET OUT.. @VM03170 01622000
  1464. LTR R1,R1 IS THE INDICATOR ACTIVE @VM03170 01623000
  1465. BZ HVDEXTOF NO, TURN OFF PA2 FLAG @VM03170 01624000
  1466. HVDAPLON EQU * SET PA2 FLAG @VM03170 01625000
  1467. OI VMQSTAT,VMPA2APL REFLECT EXTERNAL INTERRUPTS @VM03170 01626000
  1468. B HVDEXIT GET OUT NOW..... @VM03170 01627000
  1469. TSTGRAF EQU * CHECK FOR LOCAL GRAPHIC DEVICE @VM03170 01628000
  1470. CLI RDEVTYPC,CLASGRAF IS IT A GRAPHIC DEVICE @VM03170 01629000
  1471. BNE HVDEXIT NO, RETURN TO CALLER @VM03170 01630000
  1472. TM RDEVTYPE,TYP3277+TYP3278 3270 DISPLAY? @V60A6B6 01631000
  1473. BZ HVDEXIT NO, RETURN TO CALLER @V60A6B6 01632000
  1474. LTR R1,R1 IS THE INDICATOR ON @VM03170 01633000
  1475. BNZ HVDAPLON YES, SET PA2 FLAG @VM03170 01634000
  1476. HVDEXTOF EQU * TURN OFF THE PA2 FLAG @VM03170 01635000
  1477. NI VMQSTAT,X'FF'-VMPA2APL CLEAR PA2 FLAG @VM03170 01636000
  1478. B HVDEXIT BYE @VM03170 01637000
  1479. GETNICB EQU * SUBROUTINE TO GET NICBLOK ADDRESS@VM03170 01638000
  1480. LH R2,VMTRMID RESOURCE REFERENCE @VM03170 01639000
  1481. N R2,F4095 STRIP OFF DEVICE CODE @VM03170 01640000
  1482. MH R2,=AL2(NICSIZE*8) CONVERT TO NICLIST INDEX @VM03170 01641000
  1483. AL R2,RDEVNICL @VM03170 01642000
  1484. BR R3 RETURN - NICBLOK IN GR2 @VM03170 01643000
  1485. EJECT 01644000
  1486. *---------------------------------------------------------------------* 01645000
  1487. * ROUTINE TO INITIALIZE PROGRAM PRODUCT BIT MAP * 01646000
  1488. *---------------------------------------------------------------------* 01647000
  1489. DMKHVDPP RELOC @VMD0161 01648000
  1490. L R1,=A(DMKCPEPP) GET ADDR OF PROGRAM PRODUCT MAP @VMD0161 01649000
  1491. * OI 0(R1),X'80' TURN ON BIT FOR 01650000
  1492. * OI 0(R1),X'40' TURN ON BIT FOR 01651000
  1493. * OI 0(R1),X'20' TURN ON BIT FOR 01652000
  1494. * OI 0(R1),X'10' TURN ON BIT FOR 01653000
  1495. * OI 0(R1),X'08' TURN ON BIT FOR 01654000
  1496. * OI 0(R1),X'04' TURN ON BIT FOR 01655000
  1497. * OI 0(R1),X'02' TURN ON BIT FOR 01656000
  1498. * OI 0(R1),X'01' TURN ON BIT FOR 01657000
  1499. * OI 1(R1),X'80' TURN ON BIT FOR 01658000
  1500. * OI 1(R1),X'40' TURN ON BIT FOR 01659000
  1501. * OI 1(R1),X'20' TURN ON BIT FOR 01660000
  1502. * OI 1(R1),X'10' TURN ON BIT FOR 01661000
  1503. * OI 1(R1),X'08' TURN ON BIT FOR 01662000
  1504. * OI 1(R1),X'04' TURN ON BIT FOR 01663000
  1505. * OI 1(R1),X'02' TURN ON BIT FOR 01664000
  1506. * OI 1(R1),X'01' TURN ON BIT FOR 01665000
  1507. * OI 2(R1),X'80' TURN ON BIT FOR 01666000
  1508. * OI 2(R1),X'40' TURN ON BIT FOR 01667000
  1509. * OI 2(R1),X'20' TURN ON BIT FOR 01668000
  1510. * OI 2(R1),X'10' TURN ON BIT FOR 01669000
  1511. * OI 2(R1),X'08' TURN ON BIT FOR 01670000
  1512. * OI 2(R1),X'04' TURN ON BIT FOR 01671000
  1513. * OI 2(R1),X'02' TURN ON BIT FOR 01672000
  1514. * OI 2(R1),X'01' TURN ON BIT FOR 01673000
  1515. * OI 3(R1),X'80' TURN ON BIT FOR 01674000
  1516. * OI 3(R1),X'40' TURN ON BIT FOR 01675000
  1517. * OI 3(R1),X'20' TURN ON BIT FOR 01676000
  1518. * OI 3(R1),X'10' TURN ON BIT FOR 01677000
  1519. * OI 3(R1),X'08' TURN ON BIT FOR 01678000
  1520. * OI 3(R1),X'04' TURN ON BIT FOR 01679000
  1521. * OI 3(R1),X'02' TURN ON BIT FOR 01680000
  1522. * OI 3(R1),X'01' TURN ON BIT FOR 01681000
  1523. * OI 4(R1),X'80' TURN ON BIT FOR 01682000
  1524. * OI 4(R1),X'40' TURN ON BIT FOR 01683000
  1525. * OI 4(R1),X'20' TURN ON BIT FOR 01684000
  1526. * OI 4(R1),X'10' TURN ON BIT FOR 01685000
  1527. * OI 4(R1),X'08' TURN ON BIT FOR 01686000
  1528. * OI 4(R1),X'04' TURN ON BIT FOR 01687000
  1529. * OI 4(R1),X'02' TURN ON BIT FOR 01688000
  1530. * OI 4(R1),X'01' TURN ON BIT FOR 01689000
  1531. * OI 5(R1),X'80' TURN ON BIT FOR 01690000
  1532. * OI 5(R1),X'40' TURN ON BIT FOR 01691000
  1533. * OI 5(R1),X'20' TURN ON BIT FOR 01692000
  1534. * OI 5(R1),X'10' TURN ON BIT FOR 01693000
  1535. * OI 5(R1),X'08' TURN ON BIT FOR 01694000
  1536. * OI 5(R1),X'04' TURN ON BIT FOR 01695000
  1537. * OI 5(R1),X'02' TURN ON BIT FOR 01696000
  1538. * OI 5(R1),X'01' TURN ON BIT FOR 01697000
  1539. * OI 6(R1),X'80' TURN ON BIT FOR 01698000
  1540. * OI 6(R1),X'40' TURN ON BIT FOR 01699000
  1541. * OI 6(R1),X'20' TURN ON BIT FOR 01700000
  1542. * OI 6(R1),X'10' TURN ON BIT FOR 01701000
  1543. * OI 6(R1),X'08' TURN ON BIT FOR 01702000
  1544. * OI 6(R1),X'04' TURN ON BIT FOR 01703000
  1545. * OI 6(R1),X'02' TURN ON BIT FOR 01704000
  1546. * OI 6(R1),X'01' TURN ON BIT FOR 01705000
  1547. * OI 7(R1),X'80' TURN ON BIT FOR 01706000
  1548. * OI 7(R1),X'40' TURN ON BIT FOR 01707000
  1549. * OI 7(R1),X'20' TURN ON BIT FOR 01708000
  1550. * OI 7(R1),X'10' TURN ON BIT FOR 01709000
  1551. * OI 7(R1),X'08' TURN ON BIT FOR 01710000
  1552. * OI 7(R1),X'04' TURN ON BIT FOR 01711000
  1553. * OI 7(R1),X'02' TURN ON BIT FOR 01712000
  1554. * OI 7(R1),X'01' TURN ON BIT FOR 01713000
  1555. B GENEXIT RETURN TO CALLER @VMD0161 01714000
  1556. EJECT 01715000
  1557. EXTIDL EQU 32 LENGTH OF BUFFER FOR DIAG X'00' @VMD0161 01738000
  1558. LTORG 01746000
  1559. EJECT 01747000
  1560. COPY EQU 01748000
  1561. COPY VMBLOK 01749000
  1562. COPY IOBLOKS (R9) @V1D0631 01750000
  1563. PSA 01751000
  1564. COPY UDIRECT 01752000
  1565. COPY ACCOUNT 01753000
  1566. COPY RBLOKS 01754000
  1567. COPY VBLOKS 01755000
  1568. COPY DEVTYPES 01756000
  1569. COPY SAVE @VM03170 01757000
  1570. EJECT 01758000
  1571. COPY NETWORK @VM03170 01759000
  1572. COPY NPRTBL @V60B9BA 01760000
  1573. END DMKHVDAL 01761000