Table of Contents

DMKCFS Source

References

Source Listing

DMKCFS.ASSEMBLE.txt
  1. CFS TITLE 'DMKCFS (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 VALIDATE SEQUENCING OF INPUT @V3M4037 00002000
  3. *. 00003000
  4. * MODULE NAME - 00004000
  5. * 00005000
  6. * DMKCFS 00006000
  7. * 00007000
  8. * FUNCTION - 00008000
  9. * 00009000
  10. * TO PROCESS NON PRIVILEGED SET COMMANDS 00010000
  11. * 00011000
  12. * ATTRIBUTES - 00012000
  13. * 00013000
  14. * REENTRANT, PAGEABLE, CALLED VIA SVC 00014000
  15. * 00015000
  16. * ENTRY POINTS - 00016000
  17. * 00017000
  18. * DMKCFSET - ENTRY FOR 'SET' COMMAND (CLASS G ONLY) 00018000
  19. * 00019000
  20. * ENTRY CONDITIONS - 00020000
  21. * 00021000
  22. * GPR0 = LENGTH OF THE SET ARGUMENT 00022000
  23. * GPR1 = ADDRESS OF THE SET ARGUMENT 00023000
  24. * GPR6 = OPERAND INDEX FROM DMKCFC 00024000
  25. * GPR9 = COMMAND LINE ADDRESS 00025000
  26. * GPR12 = ADDRESS OF ENTRY POINT 00026000
  27. * GPR13 = ADDRSS OF THE SAVEAREA 00027000
  28. * 00028000
  29. * EXIT CONDITIONS - 00029000
  30. * 00030000
  31. * NORMAL - 00031000
  32. * GPR2 = 0 00032000
  33. * 00033000
  34. * ERROR - 00034000
  35. * GPR2 = ERROR MESSAGE CODE NUMBER 00035000
  36. * 00036000
  37. * 00037000
  38. * CALLS TO OTHER ROUTINES - 00038000
  39. * 00039000
  40. * DMKSCNFD - LOCATE ARGUMENTS IN THE COMMAND LINE 00040000
  41. * DMKQCNWT - TO OUTPUT MESSAGES TO TERMINAL 00041000
  42. * DMKSCNAU - TO FIND USERS VMBLOK ADDRESS 00042000
  43. * DMKCVTBH - TO CONVERT BINARY TO HEX 00043000
  44. * DMKCVTDB - TO CONVERT DECIMAL TO BINARY 00044000
  45. * DMKCVTHB - TO CONVERT HEX TO BINARY 00045000
  46. * DMKFREE - TO OBTAIN A BLOCK OF FREE STORAGE 00046000
  47. * DMKFRET - TO RETURN A BLOCK OF STORAGE 00047000
  48. * DMKQCNRD - TO READ A RESPONSE FROM THE TERMINAL 00048000
  49. * DMKCVTDT - TO GET THE DATE AND TIME 00049000
  50. * DMKSTKIO - TO STACK A TIMER REQUEST BLOK (TRQBLOK) 00050000
  51. * DMKERMSG - TO SEND AN ERROR MESSAGE 00051000
  52. * DMKSCHRT - TO FREE A TIMER REQUEST BLOK 00052000
  53. * DMKSCNAU - TO FIND A USER'S VMBLOK @V4075A0 00053000
  54. * DMKUDRFU - TO FIND THE USER'S DIRECTORY ENTRY @V4075A0 00054000
  55. * DMKUDRMD - TO READ THE USER'S MACHINE DESCRIPTOR @V4075A0 00055000
  56. * DMKUDRRV - TO RELEASE THE DIRECTORY PAGE IN VM VM @V4075A0 00056000
  57. * 00057000
  58. * TABLES/WORKAREAS - 00058000
  59. * 00059000
  60. * VMBLOK 00060000
  61. * MICBLOK 00061000
  62. * 00062000
  63. * REGISTER USAGE - 00063000
  64. * 00064000
  65. * GPR0 = ARGUMENT LENGTH (RETURN BY DMKSCNFD) 00065000
  66. * GPR1 = ADDRESS OF ARGUMENT (RETURN BY DMKSCNFD) 00066000
  67. * GPR9 = ADDRESS OF COMMAND LINE 00067000
  68. * GPR11 = ADDRESS OF USERS VMBLOK 00068000
  69. * GPR12 = BASE REGISTER 00069000
  70. * GPR13 = ADDRESS OF SAVEAREA 00070000
  71. * 00071000
  72. * COMMAND LINE FORMAT - 00072000
  73. * 00073000
  74. * CLASS G 00074000
  75. * +-------+-------------------------+ 00075000
  76. * | SET | ACNT ON | 00076000
  77. * | | MSG OFF | 00077000
  78. * | | WNG | 00078000
  79. * | | RUN | 00079000
  80. * | | LINEDIT | 00080000
  81. * | | PAGEX | 00081000
  82. * | | NOTRANS | 00082000
  83. * | | ECMODE | 00083000
  84. * | | IMSG | 00084000
  85. * | | ISAM | 00085000
  86. * | | AUTOPOLL | 00086000
  87. * | | CPUID BBBBBB | 00087000
  88. * | | PRIV CCCCCCC| 00087100
  89. * | | | 00088000
  90. * | | EMSG ON | 00089000
  91. * | | OFF | 00090000
  92. * | | CODE | 00091000
  93. * | | TEXT | 00092000
  94. * | | | 00093000
  95. * | | TIMER ON | 00094000
  96. * | | OFF | 00095000
  97. * | | REAL | 00096000
  98. * | | | 00097000
  99. * | | ASSIST ON | 00098000
  100. * | | OFF | 00099000
  101. * | | SVC | 00100000
  102. * | | NOSVC | 00101000
  103. * | | TMR | 00102000
  104. * | | NOTMR | 00103000
  105. * | | | @V4075A0 00104000
  106. * | | AFFINITY ON | @V4075A0 00105000
  107. * | | OFF | @V4075A0 00106000
  108. * | | XX | @V4075A0 00107000
  109. * | | USERID | @V4075A0 00108000
  110. * | | | @V4075A0 00109000
  111. * +-------+-------------------------+ 00110000
  112. * 00111000
  113. * +-------+-----------------------------+ 00112000
  114. * | SET | PFNN DELAYED FUNCTION | 00113000
  115. * | | IMMED | 00114000
  116. * +-------+-----------------------------+ 00115000
  117. * 00116000
  118. * +-------+-----------------------------+ 00117000
  119. * | SET | SMSG ON | 00118000
  120. * | | OFF | 00119000
  121. * +-------+-----------------------------+ 00120000
  122. * 00121000
  123. * 00122000
  124. * OPERATION - 00123000
  125. * 00124000
  126. * 1. CALL DMKSCNFD TO SEE IF THERE IS A SECOND ARGUMENT. IF 00125000
  127. * NONE IS FOUND, SET A FLAG TO INDICATE THIS AND CONTINUE. 00126000
  128. * IF HAVE ONE, SAVE IT IN SAVEWRK5/6. 00127000
  129. * 2. USING THE INDEX SET BY DMKCFC, BRANCH TO THE APPROPRIATE 00128000
  130. * ROUTINE TO HANDLE THE REQUEST. 00129000
  131. * 00130000
  132. * TSTONOFF - THIS IS THE SUBROUTINE TO TEST THE ON/OFF 00131000
  133. * ARGUMENT. IF THE ARGUMENT = ON, RETURN ON REGISTER 8. 00132000
  134. * IF THE ARGUMENT = OFF, RETURN ON REGISTER 10. IF NO 00133000
  135. * OTHER ARGUMENTS ARE LEGAL, CALL DMKERMSG TO SEND ERROR 00134000
  136. * MESSAGE DMKCFS026E. IF SOMETHING ELSE LEGAL, RETURN 00135000
  137. * ON REGISTER 7. 00136000
  138. * 00137000
  139. * SET TIMER 00138000
  140. * 1. SETIMER - ROUTINE TO PROCESS THE SET TIME REQUEST. SET UP 00139000
  141. * REGISTERS 7 AND 8 FOR RETURN FROM TSTONOFF. THEN BAL R10 00140000
  142. * TO THE SUBROUTINE LABELED TSTONOFF. 00141000
  143. * 2. IF OFF WAS SPECIFIED, CHECK IF REAL IS NOW ACTIVE. 00142000
  144. * IF IT IS, CALL DMKFRET TO FRET THE TIMER BLOK FOR THIS 00143000
  145. * USER. SET THE VMTLEVEL FOR OFF, DISABLE THE VIRTUAL TIMER 00144000
  146. * ASSIST, AND EXIT. 00145000
  147. * 3. IF ON WAS SPECIFIED, CHECK FOR REAL ACTIVE. IF SO, 00146000
  148. * CALL DMKFRET TO FRET THE TIMER BLOK. SET UP VMTLEVEL FOR 00147000
  149. * ON, CHECK IF VIRTUAL TIMER ASSIST CAN BE USED, AND EXIT. 00148000
  150. * 4. IF GET A RETURN FOR OTHER THAN ON/OFF, CHECK IF 'REAL'. 00149000
  151. * IF NOT, CALL DMKERMSG TO SEND ERROR MESSAGE DMKCFS003E. 00150000
  152. * IF OK, CALL DMKFREE TO GET STORAGE FOR A TIMER BLOK. 00151000
  153. * INITIALIZE THE TIMER BLOK, ENABLE TIMER FEATURE IF IT CAN 00152000
  154. * BE USED, AND THEN EXIT. 00153000
  155. * SET ISAM 00154000
  156. * 1. SETISAM - ROUTINE FOR THE SET ISAM REQUEST. SET UP FOR 00155000
  157. * RETURN FROM THE SUBROUTINE LABELED TSTONOFF AND BAL R10 00156000
  158. * TO THAT ROUTINE. 00157000
  159. * 2. IF RETURN FOR OFF, RESET THE VMISAM FLAG IN THE VMBLOK 00158000
  160. * AND EXIT. 00159000
  161. * 3. IF RETURN FOR ON, SET THE VMISAM FLAG IN THE VMBLOK 00160000
  162. * AND EXIT. 00161000
  163. * SET AUTOPOLL 00162000
  164. * 1. SETAUTO - ROUTINE FOR THE SET AUTOPOLL REQUEST. SET UP FOR 00163000
  165. * RETURN FROM THE SUBROUTINE LABELED TSTONOFF AND BAL R10 00164000
  166. * TO THAT ROUTINE. 00165000
  167. * 2. IF RETURN FOR OFF, RESET THE VMFAUTO FLAG IN THE VMBLOK 00166000
  168. * AND EXIT. 00167000
  169. * 3. IF RETURN FOR ON, SET THE VMFAUTO FLAG IN THE VMBLOK 00168000
  170. * AND EXIT. 00169000
  171. * SET EMSG 00170000
  172. * 1. SETERROR - ROUTINE TO PROCESS THE SET EMSG REQUEST. SET 00171000
  173. * UP REGISTERS 7 AND 8 FOR THE RETURN FROM ON/OFF TESTING. 00172000
  174. * BAL R10 TO THE SUBROUTINE LABELED TSTONOFF TO TEST THE 00173000
  175. * ON/OFF/CODE/TEXT. 00174000
  176. * 2. IF RETURN FOR OFF CONDITION, SET THE VMMLEVEL FOR 00175000
  177. * NO EMSG AND EXIT. 00176000
  178. * 3. IF RETURN FOR ON, SET UP VMMLEVEL FOR BOTH CODE AND TEXT 00177000
  179. * AND EXIT. 00178000
  180. * 4. IF RETURN FOR OTHER THAN ON/OFF, CHECK FOR 'CODE'. IF 00179000
  181. * IT IS, SET UP THE VMMLEVEL FOR ERROR CODE ONLY AND 00180000
  182. * EXIT. IF FOR 'TEXT' SET VMMLEVEL FOR TEXT ONLY AND 00181000
  183. * EXIT. IF NEITHER OF THESE, CALL DMKERMSG TO 00182000
  184. * SEND ERROR MESSAGE DMKCFS003E. 00183000
  185. * SET ACNT 00184000
  186. * 1. SETACNT - ROUTINE FOR THE SET ACNT REQUEST. SET UP THE 00185000
  187. * RETURNS FOR ON/OFF AND BAL R10 TO SUBROUTINE LABELED 00186000
  188. * TSTONOFF. 00187000
  189. * 2. IF RETURN FOR OFF, RESET THE VMACCON FLAG IN THE 00188000
  190. * VMBLOK AND EXIT. 00189000
  191. * 3. IF RETURN FOR ON, TURN ON THE VMACCON FLAG IN THE 00190000
  192. * VMBLOK AND EXIT. 00191000
  193. * SET LINEDIT 00192000
  194. * 1. SETLINE - ROUTINE FOR THE SET LINED REQUEST. SET UP FOR 00193000
  195. * RETURN FROM SUBROUTINE LABELED TSTONOFF AND BAL R10 TO 00194000
  196. * THAT ROUTINE. 00195000
  197. * 2. IF RETURN FOR OFF, RESET THE VMLINED FLAG IN THE VMBLOK 00196000
  198. * AND EXIT. 00197000
  199. * 3. IF RETURN FOR ON, SET THE VMLINED FLAG IN THE VMBLOK 00198000
  200. * AND EXIT. 00199000
  201. * SET RUN 00200000
  202. * 1. SETRUN - ROUTINE FOR THE SET RUN REQUEST. SET UP FOR 00201000
  203. * RETURN FROM THE SUBROUTINE LABELED TSTONOFF AND BAL R10 00202000
  204. * TO THAT ROUTINE. 00203000
  205. * 2. IF RETURN FOR OFF, RESET THE VMRUNON FLAG IN THE VMBLOK 00204000
  206. * AND EXIT. 00205000
  207. * 3. IF RETURN FOR ON, SET THE VMRUNON FLAG IN THE VMBLOK 00206000
  208. * AND EXIT. 00207000
  209. * SET WNG 00208000
  210. * 1. SETWNG - ROUTINE FOR SET WNG REQUEST. SET UP FOR THE 00209000
  211. * RETURN FROM THE SUBROUTINE LABELED TSTONOFF AND BAL R10 00210000
  212. * TO THAT ROUTINE. 00211000
  213. * 2. IF RETURN FOR OFF, RESET THE VMWNGON FLAG IN THE 00212000
  214. * VMBLOK AND EXIT. 00213000
  215. * 3. IF RETURN FOR ON, SET THE VMWNGON FLAG IN THE VMBLOK 00214000
  216. * AND EXIT. 00215000
  217. * SET MSG 00216000
  218. * 1. SETMSG - ROUTINE FOR THE SET MSG REQUEST. SET UP FOR THE 00217000
  219. * RETURN FROM THE SUBROUTINE LABELED TSTONOFF AND BAL R10 00218000
  220. * TO THAT ROUTINE. 00219000
  221. * 2. IF RETURN FOR OFF, RESET THE VMMSGON FLAG IN THE VMBLOK 00220000
  222. * AND EXIT. 00221000
  223. * 3. IF THE RETURN IS FOR ON, SET THE VMMSGON FLAG IN THE 00222000
  224. * VMBLOK AND EXIT. 00223000
  225. * SET NOTRANS 00224000
  226. * 1. SETNTRAN - ROUTINE TO HANDLE NOTRAN REQUEST. IF NOT A 00225000
  227. * VALID NOTRAN USER, CALL DMKERMSG TO SEND ERROR MESSAGE 00226000
  228. * DMKCFS003E. IF THE USER IS A VALID ONE, SET UP REGISTERS 00227000
  229. * FOR THE RETURN FROM THE SUBROUTINE LABELED TSTONOFF AND 00228000
  230. * BAL R10 TO THAT ROUTINE. 00229000
  231. * 2. IF RETURN FOR OFF, RESET THE NOTRANS FLAG IN THE VMBLOK 00230000
  232. * AND EXIT. 00231000
  233. * 3. IF RETURN FOR ON, SET THE NOTRANS FLAG IN THE VMBLOK 00232000
  234. * AND EXIT. 00233000
  235. * SET PFNN 00234000
  236. * 1. GET IMMED OR DELAYED PARM IF ENTERED 00235000
  237. * 2. SET PF FUNCTION RELEASING OLD ONE IF PRESENT 00236000
  238. * 3. SCAN TO SEE IF ALL FUNCTIONS NULL AND 00237000
  239. * FRET FUNCTION TABLE IF SO 00238000
  240. * SET ASSIST 00239000
  241. * 1. SETASST - ROUTINE TO PROCESS SET ASSIST REQUEST. IF THERE 00240000
  242. * IS NO SECOND ARGUMENT, CALL DMKERMSG TO SEND ERROR MESSAGE 00241000
  243. * DMKCFS026E. IF THERE IS ONE, ASCERTAIN WHAT IT IS. 00242000
  244. * 2. IF ARGUMENT IS SVC, VERIFY THAT VM ASSIST IS AVAILABLE 00243000
  245. * IF NOT, ISSUE MSG DMKCFS184E. ELSE 00244000
  246. * TURN ON VMMICSVC BIT IN THE VMBLOK AND IF NO ADSTOP IS IN 00245000
  247. * EFFECT TURN OFF THE VMMSVC BIT IN THE VMBLOK. GO TO STEP 8. 00246000
  248. * 3. IF ARGUMENT IS NOSVC, TURN OFF VMMICSVC BIT AND TURN ON 00247000
  249. * VMMSVC BIT (BOTH IN VMBLOK). GO TO STEP 8. 00248000
  250. * 4. IF ARGUMENT IS TMR, CHECK FOR VM ASSIST AND TIMER ASSIST 00249000
  251. * AVAILABLE, IF NOT SEND ERROR MESSAGE DMKCFS187E. ELSE TURN 00250000
  252. * ON VMFVTMR BIT IN VMBLOK AND CHECK IF TIMER ASSIST CAN BE 00251000
  253. * ENABLED. IF IT CAN, TURN ON VMMVTMR BIT IN VMBLOK AND SET 00252000
  254. * UP MICVTMR POINTER IN MICBLOK. 00253000
  255. * 5. IF ARGUMENT IS NOTMR, TURN OFF VMFVTMR BIT IN VMBLOK AND 00254000
  256. * DISABLE VIRTUAL TIMER ASSIST. GO TO STEP 8. 00255000
  257. * 6. IF ARGUMENT IS ON, CHECK IF VM ASSIST IS AVAILABLE FOR THE 00256000
  258. * SYSTEM. IF NOT, ISSUE MSG DMKCFS184E. ELSE GET SPACE 00257000
  259. * FOR MICBLOK; PUT ADDRESS OF MICBLOK INTO VMBLOK; CHECK IF 00258000
  260. * VIRTUAL TIMER ASSIST CAN BE ENABLED; GO TO STEP 8. 00259000
  261. * 7. IF ARGUMENT IS OFF, FRET MICBLOK; TURN OFF VMMFE, VMMVTMR 00260000
  262. * BITS IN VMBLOK; ZERO VMMADDR IN VMBLOK; GO TO STEP 8. 00261000
  263. * 8. CALL DMKSCNFD TO FIND ANOTHER ARGUMENT. IF FOUND, MOVE IT 00262000
  264. * TO SAVEWRK5 AND GO TO STEP 2. ELSE CONTINUE 00263000
  265. * 9. EXIT, GIVING USER INFORMATION DESCRIBING AVAILABILITY 00264000
  266. * OF VM ASSIST AS FOLLOWS: 00265000
  267. * 10. IF USER HAS VM ASSIST AND AFFINITY BUT SYSTEM VM ASSIST 00266000
  268. * IS NOT ON FOR THE AFFINITY PROCESSOR, THEN 00267000
  269. * A. IF PROCESSOR HAS VM ASSIST, SEND MSG DMKCFS183E 00268000
  270. * B. IF VM ASSIST IS NOT AVAILABLE ON THAT PROCESSOR, 00269000
  271. * SEND MSG DMKCFS184E WITH THE PROCESSOR ADDRESS 00270000
  272. * 11. IF USER HAS VM ASSIST AND NO AFFINITY AND VM ASSIST 00271000
  273. * IS NOT ON FOR ANY PROCESSOR, SEND MSG DMKCFS183E 00272000
  274. * SET PAGEX 00273000
  275. * 1. SET PAGEX ON/OFF - ENABLE/DISABLE PSEUDO PAGE FAULTS 00274000
  276. * VERIFY THAT USER HAS ECMODE PRIVILEGES; IF NOT, CALL 00275000
  277. * DMKERMSG FOR MESSAGE DMKCFS003E 00276000
  278. * 2. VERIFY THAT 2ND ARGUMENT EXISTS AND IS EITHER "ON" OR 00277000
  279. * "OFF"; IF NOT, CALL DMKERMSG FOR MESSAGE 00278000
  280. * DMKCFS003 00279000
  281. * 3. BASED ON ON/OFF TEST, SET OR RESET FLAG VMPAGEX IN 00280000
  282. * VMPSTAT AND EXIT. 00281000
  283. * SET IMSG 00282000
  284. * 1. SETIMSG - ROUTINE TO HANDLE SET IMSG ON|OFF. VERIFY 00283000
  285. * THAT 2ND ARGUMENT EXISTS AND THAT IT'S ON OR OFF. IF 00284000
  286. * ARGUMENT MISSING, ISSUE MSG DMKCFS0026E, IF INVALID, 00285000
  287. * ISSUE MSG DMKCFS003E. 00286000
  288. * 2. BASED ON ON/OFF TEST, SET OR RESET VMMIMSG BIT IN 00287000
  289. * VMMLVL2 AND EXIT. 00288000
  290. * 00289000
  291. * SET SMSG - ROUTINE TO SET SMSG FLAG IN USER'S VMBLOK 'ON' OR 'OFF' 00290000
  292. * 1. GET ON/OFF OPTION AND VALIDATE. 00291000
  293. * 2. IF OPTION IS INVALID, SEND MSG DMKCFS026E. 00292000
  294. * 3. ELSE SETUP FOR RETURN FROM TSTONOFF SUBROUTINE. BAL R10 00293000
  295. * TO THAT ROUTINE. 00294000
  296. * 4. IF OPTION IS 'OFF', TURN OFF APPROPRIATE FLAG IN VMBLOK. 00295000
  297. * 5. IF OPTION IS 'ON', TURN ON APPROPRIATE FLAG IN VMBLOK. 00296000
  298. * 6. RETURN TO CALLER WITH CODE OF 0. 00297000
  299. * 00298000
  300. * SET CPUID BBBBBB 00299000
  301. * 1. SETCPUID - ROUTINE TO HANDLE SET CUPID BBBBBB; 00300000
  302. * VERIFY THAT SECOND ARGUMENT EXISTS. IF NOT, ISSUE 00301000
  303. * DMKCFS026E MESSAGE. 00302000
  304. * 2. IF 'BBBBBB' FIELD IS GREATER THAN 6 DIGITS, ISSUE 00303000
  305. * MESSAGE DMKCFS026E. 00304000
  306. * 3. OTHERWISE, CONVERT CPU SERIAL (BBBBBB) FROM HEX TO 00305000
  307. * BINARY AND STORE IN VMCPUID FIELD. 00306000
  308. * 00307000
  309. * SET AFFINITY SET THE VMAFF BYTE IN THE VMBLOK TO INDICATE 00308000
  310. * WHETHER AFFINITY IS WANTED, AND IF SO, WHICH PROCESSOR 00309000
  311. * 00310000
  312. * 1. SET USERID = ISSUER. IF NO ARGS, GO TO 18 00311000
  313. * 2. USE TSTONOFF TO SEE IF 2ND ARG IS ON|OFF|NUMERIC|UID 00312000
  314. * 3. IF RETURN FOR OFF, SET TARGET PROC = 0 AND GO TO 17 00313000
  315. * 4. IF RETURN FOR ON, GO TO 18 00314000
  316. * 5. CHECK USER FOR COMMAND CLASS A ELSE ISSUE MSG 26 00315000
  317. * 6. IF ARGUMENT IS NUMERIC, GO TO 12 00316000
  318. * 7. IF ARGUMENT IS NOT NUMERIC, SAVE AS A USERID AND GET 00317000
  319. * NEXT ARGUMENT. IF NONE, GO TO 18 00318000
  320. * 8. USE TSTONOFF TO SEE IF 3RD ARG IS ON|OFF|NUMERIC 00319000
  321. * 9. IF RETURN FOR OFF, SET TARGET PROC = 0, AND GO TO 17 00320000
  322. * 10. IF RETURN FOR ON, GO TO 18 00321000
  323. * 11. CONVERT ARGUMENT TO BINARY 00322000
  324. * 12. IF ARG > 63 OR NOT DECIMAL, ISSUE ERROR MSG 26 AND EXIT 00323000
  325. * 13. OR X'40' OVER BINARY VALUE AND SAVE AS TARGET PROCESSOR 00324000
  326. * 14. IF TARGET PROCESSOR = LPUADDR, 00325000
  327. * A. IF SYSTEM RUNNING AP, GO TO 17 00326000
  328. * B. ELSE, ISSUE MSG 189 AND EXIT 00327000
  329. * 15. IF ARG ¬= LPUADDR & SYSTEM RUNNING UP, ISSUE MSG 188 00328000
  330. * 16. IF SYSTEM RUNNING AP, 00329000
  331. * A. IF TARGET PROCESSOR = LPUADDRX, GO TO 17 00330000
  332. * B. ELSE ISSUE MSG 188 AND EXIT 00331000
  333. * 17. LOOK FOR SPECIFIED USER LOGGED ON. IF NOT, ISSUE MSG 45 00332000
  334. * SET AFFINITY INTO VMAFF IN TARGET USER'S VMBLOK 00333000
  335. * 18. LOOK FOR TARGET USER'S DIRECTORY ENTRY 00334000
  336. * A. IF NO AFFINITY IN DIRECTORY, GIVE MSG 190 AND EXIT 00335000
  337. * B. ELSE, USE UMACAFF AS TARGET PROCESSOR, GO TO 14 00336000
  338. * 00337000
  339. * ERROR MESSAGES - 00338000
  340. * DMKCFS003E INVALID OPTION - (OPTION) 00339000
  341. * DMKCFS026E OPERAND MISSING OR INVALID 00340000
  342. * DMKCFS045E (USERID) NOT LOGGED ON 00341000
  343. * DMKCFS052E ERROR IN CP DIRECTORY 00342000
  344. * DMKCFS053E (USERID) NOT IN CP DIRECTORY 00343000
  345. * DMKCFS183E VM ASSIST NOT ACTIVE 00344000
  346. * DMKCFS184E VM ASSIST NOT AVAILABLE 00345000
  347. * DMKCFS187E TIMER ASSIST NOT AVAILABLE 00346000
  348. * DMKCFS188E SPECIFIED PROCESSOR UNAVAILABLE @V4075A0 00347000
  349. * DMKCFS189E AFFINITY NOT SET, SYSTEM IN UNI-PROCESSOR M@V4075A0 00348000
  350. * DMKCFS190E NO AFFINITY SPECIFIED IN DIRECTORY @V4075A0 00349000
  351. *. 00350000
  352. EJECT 00351000
  353. COPY OPTIONS 00352000
  354. COPY LOCAL 00353000
  355. SPACE 3 00354000
  356. DMKCFS CSECT 00355000
  357. SPACE 00356000
  358. MODID DC CL8'DMKCFS' 00357000
  359. SPACE 2 00358000
  360. USING VMBLOK,R11 00359000
  361. USING SAVEAREA,R13 00360000
  362. USING PSA,R0 00361000
  363. USING BUFFER,R9 @V200730 00362000
  364. SPACE 3 00363000
  365. EXTRN DMKERMSG @V326538 00364000
  366. EXTRN DMKSCNFD 00365000
  367. EXTRN DMKCFPRR,DMKBLDEC @V2B4320 00367000
  368. EXTRN DMKSCHRT,DMKSCH80 00368000
  369. EXTRN DMKCVTDB,DMKCVTBH @V326538 00369000
  370. EXTRN DMKSCNRD @V200820 00370000
  371. EXTRN DMKCVTHB @V407466 00371000
  372. EXTRN DMKSCNAU @V4075A0 00372000
  373. EXTRN DMKUDRFU,DMKUDRMD,DMKUDRRV @V4075A0 00373000
  374. EJECT 00374000
  375. * 00375000
  376. * EQUATES FOR SAVEWRK1 00376000
  377. * 00377000
  378. NARGTWO EQU X'80' NO SECOND ARGUMENT FOUND 00378000
  379. SPACE 00379000
  380. DMKCFSET RELOC 00380000
  381. SVC 16 DROP CFC --> CFS SAVE AREA @V326538 00381000
  382. MVC SAVEWRK1(4),ZEROES ZERO OUT FLAG AREA 00382000
  383. MVC SAVEWRK2(8),BLANKS BLANK OUT WORK AREA 00383000
  384. MVC SAVEWRK4(24),SAVEWRK2 . . 00384000
  385. LR R3,R0 LENGTH OF ARG. TO GPR3 @V326538 00385000
  386. BCTR R3,0 REDUCE FOR EX @V326538 00386000
  387. EX R3,MOVEARG1 MOVE FIRST ARG TO SAVEWRK2 @V326538 00387000
  388. LM R0,R1,BUFNXT GET BUFFER COUNTERS @V326538 00388000
  389. STM R0,R1,SAVEWRK7 SAVE FOR RESCAN AND DATA @V326538 00389000
  390. CALL DMKSCNFD GET SECOND IF ANY @V326538 00390000
  391. BNZ NOARG2 BRANCH IF NOT THERE @V326538 00391000
  392. LR R4,R0 LENGTH OF ARG TO GPR4 @V326538 00392000
  393. C R4,F8 ARG. MORE THAN 8 CHAR. ? @V326538 00393000
  394. BH CHKPF YES, INVALID UNLESS SET PFNN @VA05857 00394000
  395. * COMMAND 00395000
  396. BCTR R4,0 @V326538 00396000
  397. EX R4,MOVEARG2 MOVE SECOND ARG TO SAVEWRK5 @V326538 00397000
  398. B SETBRTAB NOW GO TO APPROPRIATE ROUTINE @V326538 00398000
  399. SPACE 00399000
  400. CHKPF LA R4,SETPFNN-SETTAB GET INDEX INTO SET FUNCTION @VA05857 00400000
  401. * TABLE 00401000
  402. CR R4,R6 IS IT SET PFNN? @VA05857 00402000
  403. BNE CFS026 NO, INVALID ARGUMENT @VA05857 00403000
  404. B SETBRTAB YES, CONTINUE PFNN PROCESSING @VA05857 00404000
  405. EJECT 00405000
  406. NOARG2 OI SAVEWRK1,NARGTWO INDICATE NO SECOND ARGUMENT @V326538 00406000
  407. SPACE 00407000
  408. SETBRTAB B SETTAB(R6) GO TO APPROPRIATE ROUTINE @V326538 00408000
  409. SPACE 00409000
  410. SETTAB DS 0F BRANCH TABLE @V326538 00410000
  411. B SETASST SET ASSIST @V326538 00411000
  412. B SETNTRAN SET NOTRANS @V326538 00412000
  413. B SETIMER SET TIMER @V326538 00413000
  414. B SETERROR SET EMSG @V326538 00414000
  415. B SETIMSG SET IMSG @V326538 00415000
  416. B SETACNT SET ACNT @V326538 00416000
  417. B SETPAGEX SET PAGEX @V326538 00417000
  418. B SETLINE SET LINEDIT @V326538 00418000
  419. B SETRUN SET RUN @V326538 00419000
  420. B SETWNG SET WNG @V326538 00420000
  421. B SETMSG SET MSG @V326538 00421000
  422. B SETECMD SET ECMODE @V326538 00422000
  423. B SETISAM SET ISAM @V326538 00423000
  424. B SETAUTO SET AUTOPOLL @V386198 00424000
  425. SETPFNN B SETPF SET PFNN TO VALUE SPECIFIED @VA05857 00425000
  426. B SETCPUID SET CPUID BBBBBB COMMAND @V407466 00426000
  427. B SETAFF SET AFFINITY @V4075A0 00427000
  428. B SETSMSG GO SET THE SMSG FLAG @V60C2B8 00428000
  429. B SETPRIV SET PRIV HRC018DK 00428100
  430. SETTABE EQU * END OF BRANCH TABLE @V326538 00429000
  431. SPACE 2 00430000
  432. MOVEARG1 MVC SAVEWRK2(0),0(R1) @V326538 00431000
  433. MOVEARG2 MVC SAVEWRK5(0),0(R1) @V326538 00432000
  434. SPACE 3 00433000
  435. SETCOMP EQU * COMMAND COMPLETE - NO MESSAGE @V326538 00434000
  436. EXIT @V326538 00435000
  437. EJECT 00436000
  438. ***** 00437000
  439. * 00438000
  440. * SET PAGEX COMMAND 00439000
  441. * 00440000
  442. ***** 00441000
  443. SPACE 00442000
  444. SETPAGEX EQU * PROCESS "SET PAGEX ON/OFF" @V213135 00443000
  445. TM VMPSTAT,VMV370R USER HAVE ECMODE OPTION ? @V213135 00444000
  446. BZ SETNTERR NO - GIVE ERROR MESSAGE @V213135 00445000
  447. BAL R9,EXECONF SET PAGEX ON / OFF @V213135 00446000
  448. OI VMPSTAT,VMPAGEX @V213135 00447000
  449. NI VMPSTAT,255-VMPAGEX @V213135 00448000
  450. SPACE 00449000
  451. EJECT 00450000
  452. ***** 00451000
  453. * 00452000
  454. * SET PFNN COMMAND 00453000
  455. * 00454000
  456. ***** 00455000
  457. SPACE 00456000
  458. SETPF CLI SAVEWRK2+4,C' ' IS IT BEGGER THAN 4 CHARS? @V326538 00457000
  459. BNE CFS026 YUP, TOO BAD @V326538 00458000
  460. LA R0,2 ASSUME A LENGTH OF 2 @V326538 00459000
  461. CLI SAVEWRK2+3,C' ' 2 CHARACTERS IN PF NUMBER? @V326538 00460000
  462. BNE SETADD YES, BR. @V326538 00461000
  463. CLI SAVEWRK2+2,C' ' MUST HAVE AT LEAST 1 CHAR @V326538 00462000
  464. BE CFS026 NOTHING THERE, TOO BAD. @V326538 00463000
  465. LA R0,1 SET FOR 1 CHAR OF PF DATA @V326538 00464000
  466. SETADD LA R1,SAVEWRK2+2 ADDRESS OF THE NUMBER @V326538 00465000
  467. CALL DMKCVTDB CONVERT WHATEVER IT IS @V326538 00466000
  468. BNZ CFS026 GARBAGE IN, GARBAGE OUT @V326538 00467000
  469. C R1,=F'24' CAN'T BE BIGGER THAN 24 HRC029DK 00468490
  470. BH CFS026 BUT IT IS... @V326538 00469000
  471. C R1,=F'1' CAN'T BE LESS THAN 1 EITHER @V326538 00470000
  472. BL CFS026 BUT IT IS... @V326538 00471000
  473. L R4,VMPFUNC GET FUNCTION TABLE @V326538 00472000
  474. LTR R4,R4 IS THERE ONE ?? @V200730 00473000
  475. BNZ SETPFD YES, CONT @V200730 00474000
  476. LR R2,R1 SAVE PF NUMBER @V200730 00475000
  477. LA R0,24 SIZE OF TABLE HRC029DK 00476490
  478. CALL DMKFREE GET TABLE BUFFER @V200730 00477000
  479. ST R1,VMPFUNC SAVE ADDRESS @V200730 00478000
  480. XC 0(24*8,R1),0(R1) CLEAR HRC029DK 00479490
  481. LR R4,R1 TABLE ADDRESS @V200730 00480000
  482. LR R1,R2 PF NUMBER @V200730 00481000
  483. SETPFD SLL R1,3 NUMBER TIMES 8 @V200730 00482000
  484. S R1,F8 MINUS EIGHT FOR INDEX @V200730 00483000
  485. AR R4,R1 R4 AT TABLE ENTRY FOR PFNN @V200730 00484000
  486. LM R0,R1,SAVEWRK7 GET ADDR AND COUNT @V200730 00485000
  487. STM R0,R1,BUFNXT RESET POINTERS @V200730 00486000
  488. CALL DMKSCNFD RESCAN FOR PARM @V200730 00487000
  489. BNZ SETPFZ NONE, TEST FOR NULL @V200730 00488000
  490. LR R3,R0 SIZE @V200730 00489000
  491. BCTR R3,R0 MINUS 1 @V200730 00490000
  492. CL R0,F3 IS IT LESS THAN 3 CHARS ?? @V200730 00491000
  493. BL IMMDEF YES, CANT BE AN OPTION @V200730 00492000
  494. EX R3,CLCIMM IS IT IMMED ?? @V200730 00493000
  495. BE SETIMM YES @V200730 00494000
  496. EX R3,CLCDEL IS IT DELAYED ?? @V200730 00495000
  497. BE SETDEL YES @V200730 00496000
  498. IMMDEF MVI SAVEWRK1+1,X'00' DEFAULT DELAYED @V200730 00497000
  499. B SETPFO SET FUNCTION @V200730 00498000
  500. SPACE 00499000
  501. SETPFZ L R1,BUFCNT GET DATA COUNT @V200730 00500000
  502. LTR R1,R1 ANY DATA LEFT IN BUFFER ?? @V200730 00501000
  503. BZ SETPFNL NO, SET FUNCTION TO NULL @V200730 00502000
  504. SETPFO L R1,4(R4) GET OLD FUNCTION IF ANY @V200730 00503000
  505. LTR R1,R1 IS THERE ONE ?? @V200730 00504000
  506. BZ SETPFK NO, CONT @V200730 00505000
  507. SR R0,R0 CLEAR @V200730 00506000
  508. IC R0,1(R4) GET BUFFER SIZE @V200730 00507000
  509. CALL DMKFRET FRET OLD FUNCTION @V200730 00508000
  510. SETPFK L R0,SAVEWRK8 GET NEW SIZE @V200730 00509000
  511. A R0,F7 ROUND TO DBL WORD @V200730 00510000
  512. SRL R0,3 SIZE IN DBL WORDS @V200730 00511000
  513. CALL DMKFREE GET NEW BUFFER @V200730 00512000
  514. STC R0,1(R4) SAVE NEW SIZE @V200730 00513000
  515. ST R1,4(R4) SAVE BUFFER ADDRESS @V200730 00514000
  516. LM R2,R3,SAVEWRK7 GET COUNT AND ADDR @V200730 00515000
  517. CLI 0(R2),C' ' IS NEXT CHAR A BLANK ?? @V200730 00516000
  518. BNE TABTEST NO, CHECK IF SET PF TAB @V60A6B6 00517000
  519. LA R2,1(R2) SKIP OVER FIRST BLANK @V200730 00518000
  520. BCTR R3,R0 DECREMENT COUNT @V200730 00519000
  521. LTR R3,R3 ANY DATA ? @VA02991 00520000
  522. BNP SETPFNL NOPE -- IT'S NULL @VA02991 00521000
  523. SPACE 00522000
  524. TABTEST CLC 0(4,R2),=C'TAB ' TRYING TO DEFINE THE TABS ? @V60A6B6 00523000
  525. BNE SETCNT IF NOT, SKIP TO CHECK DATA COUNT @V60A6B6 00524000
  526. LR R10,R1 SAVE TAB DATA BUFFER ADDRESS @V60A6B6 00525000
  527. LA R5,4(,R1) POINT TO START OF TAB DATA AREA @V60A6B6 00526000
  528. LR R6,R5 SAVE THE STARTING ADDRESS HERE @V60A6B6 00527000
  529. TABSCAN CALL DMKSCNFD CHECK FOR ANY MORE INPUT FOR TAB 00528000
  530. BNZ TABSORT ALL DONE, GO SORT THE VALID TABS @V60A6B6 00529000
  531. CALL DMKCVTDB CONVERT INPUT FIELD TO BINARY 00530000
  532. BNZ TABSCAN BAD INPUT - JUST FORGET IT. @V60A6B6 00531000
  533. C R1,F2 IS NUMBER ONE OR LESS ? @V60A6B6 00532000
  534. BL TABSCAN IF SO, JUST FORGET ABOUT IT. @V60A6B6 00533000
  535. C R1,=F'136' NUMBER BIGGER THAN INPUT AREA ? @V60A6B6 00534000
  536. BH TABSCAN YES, TRY THE NEXT ONE. @V60A6B6 00535000
  537. BCTR R1,0 CHANGE TO ZERO BASE DISPLACEMENT @V60A6B6 00536000
  538. STC R1,0(,R5) SAVE IN TAB DATA FIELD @V60A6B6 00537000
  539. LA R5,1(,R5) POINT TO NEXT SPOT IN TAB AREA @V60A6B6 00538000
  540. B TABSCAN GO BACK TO SEE IF MORE TABS LEFT @V60A6B6 00539000
  541. EJECT 00540000
  542. TABSORT LR R8,R5 GET END OF TAB DATA PLUS ONE @V60A6B6 00541000
  543. BCTR R8,0 BACK UP TO POINT TO END OF TABS @V60A6B6 00542000
  544. SR R6,R8 WAS MORE THAN 1 TAB ENTERED? @V60A6B6 00543000
  545. BNM TABCNT IF NOT, JUST SET COUNT. @V60A6B6 00544000
  546. LA R7,4(,R10) ADDRESS START OF TAB DATA FIELD @V60A6B6 00545000
  547. TABNEXT IC R6,0(,R7) LOAD THE VALUE OF THE TAB DATA @V60A6B6 00546000
  548. LA R3,1(,R7) POINT TO NEXT BYTE FOR COMPARE @V60A6B6 00547000
  549. LR R2,R7 INITIALIZE LOW TAB POINTER @V60A6B6 00548000
  550. TABLOOP CLM R6,B'0001',0(R3) IS CURRENT TAB THE LOWEST ? @V60A6B6 00549000
  551. BL TABUPDT YES, GO UPDATE AND CONTINUE SORT @V60A6B6 00550000
  552. BE TABMOVE IF EQUAL, MUST REPLACE NEXT @V60A6B6 00551000
  553. IC R6,0(,R3) GET NEW LOWEST TAB VALUE @V60A6B6 00552000
  554. LR R2,R3 SAVE ADDRESS OF LOWEST TAB @V60A6B6 00553000
  555. TABUPDT LA R3,1(,R3) ADDRESS NEXT TAB DATA BYTE @V60A6B6 00554000
  556. CR R3,R5 BEYOND THE TAB DATA FIELD YET ? @V60A6B6 00555000
  557. BL TABLOOP NO, KEEP SEARCHING FOR LOW TAB. @V60A6B6 00556000
  558. SPACE 00557000
  559. IC R1,0(,R7) LOAD VALUE OF CURRENT TAB BYTE @V60A6B6 00558000
  560. STC R6,0(,R7) SAVE THE LOWEST TAB VALUE HERE @V60A6B6 00559000
  561. STC R1,0(,R2) PUT CURRENT TAB DATA ELSEWHERE @V60A6B6 00560000
  562. LA R7,1(,R7) INCREMENT CURRENT TAB POINTER @V60A6B6 00561000
  563. CR R7,R8 AT THE END OF THE TAB FIELD ? @V60A6B6 00562000
  564. BL TABNEXT NO, STILL MORE SORTING TO DO. @V60A6B6 00563000
  565. TABCKS CLI 0(R8),XFF WAS ANY DUPLICATION FOUND ? @V60A6B6 00564000
  566. BNE TABCNT NO, GO TO COMPUTE SIZE OF AREA @V60A6B6 00565000
  567. BCT R8,TABCKS BACK UP ONE AND CONTINUE CHECKS @V60A6B6 00566000
  568. TABCNT LA R8,1(,R8) MUST ADD FOR TOTAL TAB COUNT @V60A6B6 00567000
  569. SLR R8,R10 COMPUTE SIZE OF TAB DATA FIELD @V60A6B6 00568000
  570. STH R8,2(,R4) AND SAVE AS THE PF DATA COUNT @V60A6B6 00569000
  571. MVC 0(4,R10),=C'TAB ' PUT TAB HEADER IN DATA AREA @V60A6B6 00570000
  572. B SETFLG FINISHED WITH PF TAB @V60A6B6 00571000
  573. SPACE 00572000
  574. TABMOVE MVI 0(R3),XFF REPLACE DUPLICATE WITH FLAG BYTE @V60A6B6 00573000
  575. B TABUPDT AND RETURN TO CONTINUE THE SORT @V60A6B6 00574000
  576. SPACE 00575000
  577. XFF EQU X'FF' @V60A6B6 00576000
  578. SPACE 2 00577000
  579. SETCNT STH R3,2(R4) SAVE DATA COUNT @V200730 00578000
  580. BCTR R3,R0 DECREMENT FOR EXECUTE @V200730 00579000
  581. EX R3,MVCBUF MOVE DATA TO BUFFER @V200730 00580000
  582. SETFLG MVC 0(1,R4),SAVEWRK1+1 SET FLAG IMM OR DELAY @V200730 00581000
  583. B PFSCAN SCAN FOR ALL NULLS @V200730 00582000
  584. SPACE 00583000
  585. MVCBUF MVC 0(*-*,R1),0(R2) EXECUTED BUFFER MOVE @V200730 00584000
  586. CLCIMM CLC 0(*-*,R1),=CL6'IMMED ' EX COMPARE @V200730 00585000
  587. CLCDEL CLC 0(*-*,R1),=CL8'DELAYED ' EX COMPARE @V200730 00586000
  588. SPACE 00587000
  589. SETIMM MVI SAVEWRK1+1,X'80' IMMED EXECUTION FLAG @V200730 00588000
  590. B SETARG CONT @V200730 00589000
  591. SETDEL MVI SAVEWRK1+1,X'00' DELAYED FLAG @V200730 00590000
  592. SETARG LM R0,R1,BUFNXT GET COUNT AND ADDR @V200730 00591000
  593. STM R0,R1,SAVEWRK7 SAVE FOR SET @V200730 00592000
  594. LTR R1,R1 ANY DATA LEFT IN BUFFER ?? @V200730 00593000
  595. BZ SETFLG NO, JUST SET FLAG @V200730 00594000
  596. B SETPFO YES, TEST FOR OLD FUNC @V200730 00595000
  597. SPACE 00596000
  598. SETPFNL L R1,4(R4) GET BUFFER ADDRESS @V200730 00597000
  599. LTR R1,R1 IS THERE ONE ?? @V200730 00598000
  600. BZ PFSCAN NO, SCAN FOR ALL NULL @V200730 00599000
  601. SR R0,R0 CLEAR @V200730 00600000
  602. IC R0,1(R4) GET BUFFER SIZE @V200730 00601000
  603. CALL DMKFRET FRET OLD BUFFER @V200730 00602000
  604. SR R0,R0 CLEAR @V200730 00603000
  605. ST R0,0(R4) CLEAR TABLE ENTRY @V200730 00604000
  606. ST R0,4(R4) .. @V200730 00605000
  607. PFSCAN L R1,VMPFUNC START AT TOP OF TABLE @V200730 00606000
  608. LA R0,24 12 ENTRIES IN TABLE HRC029DK 00607490
  609. PFTST L R2,4(R1) GET BUFFER ADDRESS @V200730 00608000
  610. LTR R2,R2 IS THERE ONE ?? @V200730 00609000
  611. BNZ PFRTN YES, RETURN @V200730 00610000
  612. LA R1,8(R1) NEXT ENTRY @V200730 00611000
  613. BCT R0,PFTST TEST NEXT ENTRY @V200730 00612000
  614. L R1,VMPFUNC ALL WERE NULL @V200730 00613000
  615. LA R0,24 SIZE OF TABLE HRC029DK 00614490
  616. CALL DMKFRET ALL GONE @V200730 00615000
  617. SR R0,R0 CLEAR @V200730 00616000
  618. ST R0,VMPFUNC NO MORE FUNCTIONS @V200730 00617000
  619. PFRTN SR R0,R0 CLEAR @V200730 00618000
  620. ST R0,BUFCNT CLEAR DATA COUNT @V200730 00619000
  621. B SETCOMP ALL DONE @V200730 00620000
  622. EJECT 00621000
  623. ***** 00622000
  624. * 00623000
  625. * SET TIMER COMMAND 00624000
  626. * 00625000
  627. ***** 00626000
  628. SPACE 00627000
  629. SETIMER EQU * 00628000
  630. LA R7,SETREAL SET RETURN IF NOT ON/OFF @V200820 00629000
  631. LR R3,R7 SET GR3 NON-ZERO FOR 'ON' @V200820 00630000
  632. LA R8,CHEKREAL SET RETURN FOR ON @V200820 00631000
  633. LA R6,SETCOMP RET. ADDR IF 'MICHKTMR' IS USED @V3M4026 00632000
  634. BAL R10,TSTONOFF GO TEST FOR ON/OFF 00633000
  635. SR R3,R3 SET UP FOR 'OFF' 00634000
  636. B CHEKREAL GO CHECK IF REAL 'ON' 00635000
  637. SPACE 00636000
  638. SETREAL CL R4,F3 MUST BE FOUR CHARACTERS @V200820 00637000
  639. BNE BADONOFF NOPE - ERROR MESSAGE @V200820 00638000
  640. CLC SAVEWRK5(4),=C'REAL' SPELLED RIGHT ? @V200820 00639000
  641. BNE BADONOFF NO -- ERROR MESSAGE @V200820 00640000
  642. TM VMTLEVEL,VMRON REAL TIMER ALREADY ON ???? 00641000
  643. BO MICHKTMR CHECK VIRT. TIMER ASSIST OPTION @V3M4026 00642000
  644. LA R0,TRQBSIZE SIZE OF TIMER BLOK 00643000
  645. CALL DMKFREE GET THE BLOK 00644000
  646. USING TRQBLOK,R1 00645000
  647. ST R1,VMTRQBLK ADDRESS OF BLOK TO VMBLOK 00646000
  648. XC TRQBLOK(TRQBSIZE*8),TRQBLOK ZERO BLOK 00647000
  649. ST R11,TRQBUSER VMBLOK ADDRESS TO TIMER BLOK 00648000
  650. MVC TRQBIRA,=A(DMKSCH80) IRA ADDRESS TO TIMER BLOK 00649000
  651. NI VMTLEVEL,255-(VMTON+VMSTMPI) TURN OFF FLAGS @V200820 00650000
  652. OI VMTLEVEL,VMRON REAL TIMER RUNNING @V200820 00651000
  653. B MICHKTMR TEST IF VIRT. TIMER ASSIST AVAIL @V3M4026 00652000
  654. CHEKREAL TM VMTLEVEL,VMRON IS REAL ACTIVE ???? 00653000
  655. BZ SETTON1 BRANCH IF NOT 00654000
  656. L R1,VMTRQBLK ADDRESS OF TIMER BLOK 00655000
  657. TM VMTLEVEL,VMSTMPI TIMER BLOK QUE'D ????? 00656000
  658. BZ FRETQB BRANCH IF NOT 00657000
  659. CALL DMKSCHRT DEQ BLOK 00658000
  660. FRETQB LA R0,TRQBSIZE SIZE OF BLOK 00659000
  661. CALL DMKFRET RETURN BLOK TO STORAGE 00660000
  662. SR R1,R1 . . . 00661000
  663. ST R1,VMTRQBLK ZERO TIMER BLOK POINTER IN VMBLOK 00662000
  664. SETTON1 EQU * ADJUST VMTLEVEL FLAGS @V200820 00663000
  665. NI VMTLEVEL,255-(VMRON+VMTON+VMSTMPI) TURN OFF @V200820 00664000
  666. NI VMMCR6,X'FF'-VMMVTMR RESET VIRT. TIMER FLAG @V386198 00665000
  667. ICM R15,B'0111',VMMADDR GET ADDRESS OF MICBLOK @V3M4037 00666000
  668. BZ SETTON2 CAN'T ZERO MICVTMR IF NO MICBLOK @V3M4037 00667000
  669. XC MICVTMR-MICBLOK(4,R15),MICVTMR-MICBLOK(R15) @V3M4037 00668000
  670. SETTON2 EQU * @V3M4037 00669000
  671. LTR R3,R3 SHOULD IT BE 'ON' ? @V200820 00670000
  672. BZ SETCOMP NO -- ALL DONE @V200820 00671000
  673. OI VMTLEVEL,VMTON INTERVAL TIMER RUNNING @V200820 00672000
  674. B MICHKTMR GO TEST IF TIMER ASSIST USABLE. @V3M4026 00673000
  675. DROP R1 @V200820 00674000
  676. EJECT 00675000
  677. ***** 00676000
  678. * 00677000
  679. * SET EMSG COMMAND 00678000
  680. * 00679000
  681. ***** 00680000
  682. SPACE 00681000
  683. SETERROR EQU * 00682000
  684. LA R7,SETERCOD SET UP RETURN IF CODE WAS SPEC. 00683000
  685. LA R8,SETERRON SET UP RETURN IF ON WAS SPEC. 00684000
  686. BAL R10,TSTONOFF GO TEST FOR ON OFF PARM 00685000
  687. NI VMMLEVEL,255-(VMMCODE+VMMTEXT) SET RCEIVE ERRORS OFF 00686000
  688. B SETCOMP 00687000
  689. SPACE 00688000
  690. SETERCOD CL R4,F3 RIGHT LENGTH 00689000
  691. BNE BADONOFF NOPE @V200820 00690000
  692. CLC SAVEWRK5(4),=C'CODE' IS IT 'CODE' ? @V200820 00691000
  693. BNE TESTTEXT NO - GO TEST FOR TEXT 00692000
  694. OI VMMLEVEL,VMMCODE TURN ON CODE BIT 00693000
  695. NI VMMLEVEL,255-VMMTEXT TURN OFF TEXT BIT 00694000
  696. B SETCOMP 00695000
  697. SPACE 00696000
  698. TESTTEXT EQU * TRY 'SET EMSG TEXT' @V200820 00697000
  699. CLC SAVEWRK5(4),=C'TEXT' IS THAT CORRECT ? @V200820 00698000
  700. BNE BADONOFF NO -- ERROR MESSAGE @V200820 00699000
  701. OI VMMLEVEL,VMMTEXT TURN ON TEXT BIT 00700000
  702. NI VMMLEVEL,255-VMMCODE TURN OFF CODE 00701000
  703. B SETCOMP RETURN 00702000
  704. SPACE 00703000
  705. SETERRON OI VMMLEVEL,VMMTEXT+VMMCODE TURN ON RECEIVE ERROR MESSAGE 00704000
  706. B SETCOMP 00705000
  707. EJECT 00706000
  708. ***** 00707000
  709. * 00708000
  710. * SET ISAM, AUTOPOLL, RUN, LINEDIT, ACNT, WNG, MSG, IMSG 00709000
  711. * 00710000
  712. ***** 00711000
  713. SPACE 00712000
  714. SETISAM BAL R9,EXECONF SET ISAM CHECKING @V2B4320 00713000
  715. OI VMPSTAT,VMISAM ON @V2B4320 00714000
  716. NI VMPSTAT,255-VMISAM OFF @V2B4320 00715000
  717. SPACE 00716000
  718. SETAUTO BAL R9,EXECONF SET AUTOPOLL CHECKING @V386298 00717000
  719. OI VMFSTAT,VMFAUTO ON @V386298 00718000
  720. NI VMFSTAT,X'FF'-VMFAUTO OFF @V386298 00719000
  721. SPACE 1 @V386298 00720000
  722. SETRUN BAL R9,EXECONF SET CFRUN MODE @V2B4320 00721000
  723. OI VMOSTAT,VMCFRUN ON @V2B4320 00722000
  724. NI VMOSTAT,255-VMCFRUN OFF @V2B4320 00723000
  725. SPACE 00724000
  726. SETLINE BAL R9,EXECONF SET INPUT LINE EDITING @V2B4320 00725000
  727. OI VMMLEVEL,VMMLINED ON @V2B4320 00726000
  728. NI VMMLEVEL,255-VMMLINED OFF @V2B4320 00727000
  729. SPACE 00728000
  730. SETACNT BAL R9,EXECONF SET ACCOUNTING MESSAGES @V2B4320 00729000
  731. OI VMMLEVEL,VMMACCON ON @V2B4320 00730000
  732. NI VMMLEVEL,255-VMMACCON OFF @V2B4320 00731000
  733. SPACE 00732000
  734. SETWNG BAL R9,EXECONF SET WARNING MESSAGES @V2B4320 00733000
  735. OI VMMLEVEL,VMWNGON ON @V2B4320 00734000
  736. NI VMMLEVEL,255-VMWNGON OFF @V2B4320 00735000
  737. SPACE 00736000
  738. SETMSG BAL R9,EXECONF SET USER MESSAGES @V2B4320 00737000
  739. OI VMMLEVEL,VMMSGON ON @V2B4320 00738000
  740. NI VMMLEVEL,255-VMMSGON OFF @V2B4320 00739000
  741. SPACE 00740000
  742. SETIMSG BAL R9,EXECONF SET USER INFO MESSAGES @V2B4320 00741000
  743. OI VMMLVL2,VMMIMSG ON @V2B4320 00742000
  744. NI VMMLVL2,255-VMMIMSG OFF @V2B4320 00743000
  745. SPACE 00744000
  746. EXECONF EQU * TEST FOR ON OR OFF (SINGLE BIT) @V200820 00745000
  747. SLR R7,R7 NOTHING ELSE IS VALID @V200820 00746000
  748. LA R8,EXECSON RETURN IF 'ON' SPECIFIED @V200820 00747000
  749. BAL R10,TSTONOFF GO TEST @V200820 00748000
  750. EX 0,4(0,R9) TURN OFF WHATEVER IT IS @V200820 00749000
  751. B SETCOMP @V200820 00750000
  752. SPACE 00751000
  753. EXECSON EX 0,0(0,R9) TURN ON WHATEVER IT IS @V200820 00752000
  754. B SETCOMP @V200820 00753000
  755. EJECT 00754000
  756. ***** 00755000
  757. * 00756000
  758. * SET ECMODE COMMAND 00757000
  759. * 00758000
  760. ***** 00759000
  761. SPACE 00760000
  762. SETECMD EQU * SET ECMODE ON / OFF @V2B4320 00761000
  763. SR R7,R7 ONLY TWO VALID PARAMETERS @V2B4320 00762000
  764. LA R8,SETECON RETURN IF 'ON' @V2B4320 00763000
  765. BAL R10,TSTONOFF TEST FOR 'ON' OR 'OFF' @V2B4320 00764000
  766. CALL DMKCFPRR RESET THE VIRTUAL MACHINE FIRST @V2B4320 00765000
  767. TM VMPSTAT,VMV370R IS ECMODE ENABLED NOW ? @V2B4320 00766000
  768. BZ SETCOMP NO -- ALL DONE @V2B4320 00767000
  769. L R10,VMECEXT GR10 = ADDRESS OF THE ECBLOK @V2B4320 00768000
  770. USING ECBLOK,R10 . . . @V2B4320 00769000
  771. LA R4,EXTCPTRQ POINT TO THE CPU TIMER TRQBLOK @V2B4320 00770000
  772. BAL R8,FRETRQB RELEASE THE TRQBLOK STORAGE @V2B4320 00771000
  773. LA R4,EXTCCTRQ POINT TO THE CLOCK COMPARATOR BLK@V2B4320 00772000
  774. BAL R8,FRETRQB RELEASE THE TRQBLOK STORAGE @V2B4320 00773000
  775. LA R0,EXTSIZE SIZE OF THE ECBLOK ITSELF @V2B4320 00774000
  776. LR R1,R10 . . . @V2B4320 00775000
  777. CALL DMKFRET RELEASE THE ECBLOK @V2B4320 00776000
  778. NI VMPSTAT,255-VMV370R ECMODE NOT ALLOWED @V2B4320 00777000
  779. OI VMMCR6,VMM360 DISABLE ASSISTED EC MODE OPS @VA04064 00778000
  780. LA R1,X'00E0' RESET VALUE FOR C-REG 0 @V2B4320 00779000
  781. ST R1,VMVCR0 SET AND CLEAR ECBLOK POINTER @V2B4320 00780000
  782. ICM R1,7,VMMICRO+1 IS THERE A MICBLOK ACTIVE ? @V2B4320 00781000
  783. BZ SETCOMP NO -- ALL DONE HERE @V2B4320 00782000
  784. LA R2,VMVCR0 POINT TO VIRTUAL C-REG 0 @V2B4320 00783000
  785. ST R2,MICCREG-MICBLOK(,R1) . . . @V2B4320 00784000
  786. B SETCOMP @V2B4320 00785000
  787. SPACE 00786000
  788. FRETRQB EQU * RELEASE A TRQBLOK @V2B4320 00787000
  789. ICM R1,15,0(R4) LOAD AND TEST FOR THE BLOCK @V2B4320 00788000
  790. BZR R8 NOT THERE - FORGET IT @V2B4320 00789000
  791. LA R0,TRQBSIZE SIZE IN DOUBLE-WORDS @V2B4320 00790000
  792. CALL DMKFRET RELEASE THE FREE STORAGE @V2B4320 00791000
  793. SLR R1,R1 @V2B4320 00792000
  794. ST R1,0(0,R4) CLEAR THE POINTER FIELD @V2B4320 00793000
  795. BR R8 RETURN @V2B4320 00794000
  796. SPACE 00795000
  797. SETECON EQU * ENABLE ECMODE FOR THIS V.M. @V2B4320 00796000
  798. CALL DMKCFPRR RESET THE VIRTUAL MACHINE FIRST @V2B4320 00797000
  799. TM VMPSTAT,VMV370R IS ECMODE ALREADY ALLOWED ? @V2B4320 00798000
  800. BO SETCOMP YES - COMMAND COMPLETE @V2B4320 00799000
  801. CALL DMKBLDEC BUILD AND INTIALIZE THE ECBLOK @V2B4320 00800000
  802. NI VMMCR6,X'FF'-VMM360 ENABLE ASSISTED EC MODE OPS @VA04064 00801000
  803. SR R1,R1 CLEAR A WORK REGISTER @V2B4320 00802000
  804. ICM R1,7,VMMICRO+1 IS THERE AN ACTIVE MICBLOK ?@V2B4320 00803000
  805. BZ SETCOMP NO -- COMMAND COMPLETE @V2B4320 00804000
  806. L R2,VMECEXT POINTER TO THE ECBLOK C-REGS @V2B4320 00805000
  807. ST R2,MICCREG-MICBLOK(,R1) . . . @V2B4320 00806000
  808. B SETCOMP @V2B4320 00807000
  809. EJECT 00808000
  810. ***** 00809000
  811. * 00810000
  812. * SET NOTRANS COMMAND 00811000
  813. * 00812000
  814. ***** 00813000
  815. SPACE 00814000
  816. SETNTRAN EQU * 00815000
  817. AIF (NOT &VIRREAL).V1 00816000
  818. CL R11,AVMREAL AUTHORIZED USER ???? 00817000
  819. BNE SETNTERR NOPE - SEND ERROR MESSAGE 00818000
  820. SLR R7,R7 ONLY ON/OFF VALID 00819000
  821. LA R8,SETNTRON SET UP FOR ON 00820000
  822. BAL R10,TSTONOFF GO TEST ARGUMENT 00821000
  823. NI VMPSTAT,X'FF'-VMNOTRAN RESET NOTRAN FLAG 00822000
  824. MVC TRMSGA,=CL8'RESTORED' SET MSG 00823000
  825. TRMSGS LA R0,28 MSG SIZE 00824000
  826. LA R1,TRMSG MSG DATA 00825000
  827. CALL DMKQCNWT,PARM=NORET SEND RESPONSE @V326538 00826000
  828. B SETCOMP DONE @V326538 00827000
  829. SPACE 00828000
  830. SETNTRON OI VMPSTAT,VMNOTRAN SET TRANS FLAG 00829000
  831. MVC TRMSGA,=CL8'BYPASSED' SET MSG 00830000
  832. B TRMSGS SEND MSG 00831000
  833. SPACE 00832000
  834. TRMSG DC CL20'I/O CCW TRANSLATION ' 00833000
  835. TRMSGA DC CL8' ' 00834000
  836. .V1 ANOP 00835000
  837. SETNTERR EQU * 00836000
  838. LA R0,1(,R3) LENGTH 00837000
  839. LA R1,SAVEWRK2 AND ADDRESS 00838000
  840. B CFS003 OF BAD ARGUMENT 00839000
  841. SPACE 3 00840000
  842. TSTONOFF EQU * 00841000
  843. TM SAVEWRK1,NARGTWO ANY SECOND ARGUMENT 00842000
  844. BO CFS026 BAD NEWS 00843000
  845. CLC SAVEWRK5(3),=C'ON ' WAS 'ON' SPECIFIED 00844000
  846. BCR 8,R8 YES, TAKE BRANCH ON R8 00845000
  847. CLC SAVEWRK5(4),=C'OFF ' 'OFF' SPECIFIED ??? 00846000
  848. BCR 8,R10 BRANCH IF YES 00847000
  849. LTR R7,R7 ANYTHING ELSE LEGAL ? 00848000
  850. BCR 7,R7 YES - RETURN TO SUBROUTINE @VM08567 00849000
  851. SPACE 00850000
  852. BADONOFF LA R1,SAVEWRK5 ARGUMENT ADDRESS 00851000
  853. LA R0,1(,R4) LENGTH 00852000
  854. B CFS003 SEND ERROR MESSAGE 00853000
  855. EJECT 00854000
  856. ***** 00854010
  857. * 00854020
  858. * SET PRIV C ON|OFF COMMAND 00854030
  859. * 00854040
  860. ***** 00854050
  861. SPACE 1 HRC018DK 00854060
  862. SETPRIV TM SAVEWRK1,NARGTWO CLASS SPECIFIED? HRC018DK 00854070
  863. BO CFS026 NO. HRC018DK 00854080
  864. LR R2,R0 SAVE ACROSS CALL TO SCNFD HRC018DK 00854090
  865. MVC SAVEWRK2(8),BLANKS INITIALIZE BLANK HRC018DK 00854100
  866. MVC SAVEWRK2(8),SAVEWRK5 SAVE CLASSES HERE HRC018DK 00854110
  867. MVC SAVEWRK5(8),BLANKS INITIALIZE BLANK HRC018DK 00854120
  868. CALL DMKSCNFD GET NEXT PARM HRC018DK 00854130
  869. BNZ CFS026 ERROR IF NONE GIVEN HRC018DK 00854140
  870. LR R4,R0 GET LENGTH IN GPR4 HRC018DK 00854150
  871. BCTR R4,0 DECREMENT FOR EXECUTE HRC018DK 00854160
  872. EX R4,MOVEARG2 ON|OFF TO SAVEWRK5 HRC018DK 00854170
  873. LA R1,SAVEWRK2 ADDR CLASS FOR GETCLASS ROUTINE HRC018DK 00854180
  874. LR R0,R2 AND LENGTH HRC018DK 00854190
  875. SR R7,R7 INDICATE ON|OFF ONLY HRC018DK 00854200
  876. LA R8,SETCLON HERE TO TURN ON HRC018DK 00854210
  877. BAL R10,TSTONOFF RETURN TO NEXT FOR TURN OFF HRC018DK 00854220
  878. SETCLOFF BAL R10,GETCLASS GO GET A CLASS HRC018DK 00854230
  879. X R3,F255 SET UP FOR AND HRC018DK 00854240
  880. EX R3,PRIVOFF TURN THIS ONE OFF HRC018DK 00854250
  881. BCT R0,SETCLOFF DO THEM ALL HRC018DK 00854260
  882. B SETCOMP DONE FOR NOW. HRC018DK 00854270
  883. SETCLON BAL R10,GETCLASS GO GET A CLASS HRC018DK 00854280
  884. EX R3,PRIVON TURN THIS ONE ON HRC018DK 00854290
  885. BCT R0,SETCLON DO ANOTHER HRC018DK 00854300
  886. B SETCOMP ALL DONE HRC018DK 00854310
  887. SPACE , HRC018DK 00854320
  888. GETCLASS SR R2,R2 GET THE PRIV CLASS HRC018DK 00854330
  889. IC R2,0(R1) GET A PRIV CLASS HRC018DK 00854340
  890. SH R2,=X'00C0' IS IT GT A X'C0'? HRC018DK 00854350
  891. BNP BADPRIV NO... HRC018DK 00854360
  892. CL R2,F8 IS IT GREATER THAN "H"? HRC018DK 00854370
  893. BH BADPRIV NO... HRC018DK 00854380
  894. L R3,F256 CONVERT TO CLASS CODE. HRC018DK 00854390
  895. SRL R3,0(R2) HRC018DK 00854400
  896. EX R3,TESTPRIV DOES USER REALLY HAVE THIS PRIV? HRC018DK 00854410
  897. BNO BADPRIV NO... SHOOT HIM DOWN. HRC018DK 00854420
  898. LA R1,1(,R1) POSSIBLE NEXT PARM HRC018DK 00854430
  899. BR R10 RETURN TO CALLER HRC018DK 00854440
  900. BADPRIV LA R1,0(,R1) ADDRESS BAD PRIV HRC018DK 00854450
  901. LA R0,1(,R0) RE-ADJUST LENGTH HRC018DK 00854460
  902. B CFS003 REMAINING CLASSES INVALID HRC018DK 00854470
  903. SPACE , HRC018DK 00854480
  904. PRIVON OI VMCLEVEL,X'00' EXECUTED OR HRC018DK 00854490
  905. PRIVOFF NI VMCLEVEL,X'00' EXECUTED AND HRC018DK 00854500
  906. TESTPRIV TM VMHRCPRV,X'00' EXECUTED TEST HRC018DK 00854510
  907. EJECT , HRC018DK 00854520
  908. ***** 00855000
  909. * 00856000
  910. * SET ASSIST COMMAND 00857000
  911. * 00858000
  912. ***** 00859000
  913. SPACE 00860000
  914. SETASST EQU * @V326538 00861000
  915. MVC SAVEWRK1+1(1),CPSTAT2 SAVEWRK1+1 WILL CONTAIN @V4M0134 00862000
  916. TM APSTAT1,APUOPER A SYSTEM-WIDE DESCRIPTION OF @V4M0134 00863000
  917. BZ ASSTSUMD VM ASSIST FOR ALL PROCESSORS @V4M0134 00864000
  918. L R15,PREFIXB POINT TO OTHER PSA AND FORM @V4M0134 00865000
  919. OC SAVEWRK1+1(1),CPSTAT2-PSA(R15) LOGICAL SUM @V4M0134 00866000
  920. ASSTSUMD EQU * @V4M0134 00867000
  921. L R1,VMMICRO GET VMA CONTROL BLOCK @V326538 00868000
  922. LA R1,0(R1) CLEAR FLAGS @V201530 00869000
  923. LA R10,MICOFF RETURN IF 'OFF' SPECIFIED @V200820 00870000
  924. LA R8,MICON ON RETURN @V201530 00871000
  925. LA R6,MICLAST EXIT ADDRESS FROM 'MICHKTMR' @V3M4026 00872000
  926. BAL R7,TSTONOFF TEST FOR ON/OFF/OTHER @V200820 00873000
  927. SPACE 00874000
  928. ASTSVC CLC SAVEWRK5(4),=CL4'SVC ' IS IT SVC ?? @V201530 00875000
  929. BE MICSVC YES, DO IT @V201530 00876000
  930. CLC SAVEWRK5(6),=CL6'NOSVC ' IS IT NOSVC ?? @V201530 00877000
  931. BE MICNOSVC YES, DO IT @V201530 00878000
  932. CLC SAVEWRK5(4),=CL4'TMR ' IS IT TMR ?? @V3M4026 00879000
  933. BE MICTMR YES, DO IT @V3M4026 00880000
  934. CLC SAVEWRK5(4),=CL6'NOTMR ' IS IT NOTMR ?? @V3M4026 00881000
  935. BE MICNOTMR YES, DO IT @V3M4026 00882000
  936. LR R4,R5 LENGTH-1 IN R4 FOR "BADONOFF" RTN@VM08617 00883000
  937. B BADONOFF ERROR ARG @V201530 00884000
  938. SPACE 1 00885000
  939. MICSVC EQU * CHECK ASSIST AVAILABILITY @V200820 00886000
  940. TM SAVEWRK1+1,CPMICAVL ANY PROCESSOR HAVE ASSIST @V4M0134 00887000
  941. BNO CFS184 NO, SEND ERROR MESSAGE @V4M0134 00888000
  942. OI VMESTAT,VMMICSVC USER WANTS MICRO TO DO SVCS @V201537 00889000
  943. L R15,VMADSTOP IS AN ADSTOP IN EFFECT? @V201537 00890000
  944. LTR R15,R15 @V201537 00891000
  945. BNE MICLAST YES - SKIP SETTING VMMCR6 FLAG @V3M4026 00892000
  946. NI VMMCR6,X'FF'-VMMSVC NO, SET CR6: MICRO DO SVCS @V201537 00893000
  947. B MICLAST CHECK FOR OTHER OPTION @V3M4026 00894000
  948. SPACE 1 00895000
  949. MICNOSVC NI VMESTAT,X'FF'-VMMICSVC USER WANTS CP DO SVCS @V201537 00896000
  950. OI VMMCR6,VMMSVC SET CR6 TO INDICATE CP HANDL SVCS@V201537 00897000
  951. B MICLAST CHECK IF OTHER OPTIONS PRESENT @V3M4026 00898000
  952. SPACE 00899000
  953. MICTMR TM SAVEWRK1+1,CPMICAVL+CPASTAVL TIMER AVAILABLE@V4M0134 00900000
  954. BNO CFS187 IF NOT, SEND ERROR MESSAGE @V3M4026 00901000
  955. OI VMFSTAT,VMFVTMR USER WANTS VIRT. TIMER ASSIST @V3M4026 00902000
  956. B MICHKTMR TEST IF TIMER ASSIST CAN BE USED @V3M4026 00903000
  957. SPACE 00904000
  958. MICNOTMR NI VMFSTAT,X'FF'-VMFVTMR USER WANTS CP RUN TIMER @V3M4026 00905000
  959. NI VMMCR6,X'FF'-VMMVTMR CLEAR ASSIST ENABLE FLAG @V3M4026 00906000
  960. ICM R15,B'0111',VMMADDR DOES MICBLOK STILL EXIST? @V3M4037 00907000
  961. BZ MICLAST CAN'T ZERO MICVTMR IF NO MICBLOK @V3M4037 00908000
  962. XC MICVTMR-MICBLOK(4,R15),MICVTMR-MICBLOK(R15) @V3M4037 00909000
  963. B MICLAST CHECK FOR OTHER SET ASSIST OPTS. @V3M4037 00910000
  964. EJECT 00911000
  965. MICON EQU * SET ASSIST ON SPECIFIED @V200820 00912000
  966. TM SAVEWRK1+1,CPMICAVL ANY PROCESSOR HAVE ASSIST @V4M0134 00913000
  967. BNO CFS184 NO, SEND ERROR MESSAGE @V4M0134 00914000
  968. OI VMMCR6,VMMFE TURN ON ASSIST @VA03090 00915000
  969. LTR R1,R1 IS VM ASSIST ALREADY SET ON ? @V3M4026 00916000
  970. BNZ MICHKTMR YES, THEN SKIP BUILDING MICBLOK @V3M4026 00917000
  971. SPACE 00918000
  972. LA R0,MICSIZE GET STORAGE FOR MICBLOK @V201537 00919000
  973. CALL DMKFREE @V201537 00920000
  974. USING MICBLOK,R1 @V201537 00921000
  975. STCM R1,B'0111',VMMADDR SET ADDRESS OF MICBLOK @V201537 00922000
  976. XC MICBLOK(MICSIZE*8),MICBLOK ZERO MICBLOK SPACE @V3M4026 00923000
  977. LA R15,VMPSW GET ADDRESS OF VIRTUAL PSW @V201537 00924000
  978. ST R15,MICVPSW PUT IN MICBLOK @V201537 00925000
  979. LA R15,TEMPSAVE GET ADDR OF WORKSPACE FOR MICRO @V201537 00926000
  980. ST R15,MICWORK PUT IN MICBLOK @V201537 00927000
  981. MVC MICRSEG,VMSEG PUT SEG TABLE PTR IN MICBLOK @V201537 00928000
  982. L R15,PREFIXA POINT TO ABSOLUTE PSA @VA14280 00929000
  983. MVC MICEVMA,PSAEVMA-PSA(R15) COPY EVMA CONTROLS @VA14280 00929500
  984. LA R15,VMVCR0 POINT TO BC-MODE CREG0 @V200820 00930000
  985. TM VMPSTAT,VMV370R DOES V. MACH. HAVE EC OPTION @V201537 00931000
  986. BZ *+8 NO -- GR15 IS CORRECT @V200820 00932000
  987. L R15,0(0,R15) POINT TO START OF ECBLOK @V200820 00933000
  988. ST R15,MICCREG PUT IN MICBLOK @V201537 00934000
  989. SPACE 00935000
  990. MICHKTMR EQU * TEST IF TIMER ASSIST CAN BE USED @V3M4035 00936000
  991. * R6 = EXIT ADDRESS, R11 -> VMBLOK @V3M4035 00937000
  992. TM VMFSTAT,VMFVTMR DOES USER WANT IT ANYWAY ? @V3M4026 00938000
  993. BZR R6 NO, EXIT. @V3M4026 00939000
  994. ICM R1,B'0111',VMMADDR CURRENTLY USING VM ASSIST? @V3M4026 00940000
  995. BZR R6 NO, THEN CAN'T USE TIMER ASSIST @V3M4026 00941000
  996. TM VMTLEVEL,VMRON+VMTON USING AN INTERVAL TIMER? @V3M4026 00942000
  997. BZR R6 NO, WHY BOTHER WITH TIMER ASSIST @V3M4026 00943000
  998. TM VMTRCTL,VMTREX TRACE EXTERNALS IS INCOMPATIBLE @V3M4026 00944000
  999. BOR R6 AND TIMER ASSIST CAN'T BE USED @V3M4026 00945000
  1000. * IF PASSED ALL TESTS, DO SET UP 00946000
  1001. OI VMMCR6,VMMVTMR 1ST, ENABLE VIRTUAL TIMER ASSIST @V3M4026 00947000
  1002. LCTL C1,C1,VMSEG NOW, GET CORRECT ADDRESS SPACE @V3M4026 00948000
  1003. LRA R15,TIMER-PSA IS THE VIRTUAL LOC. 80 RESIDENT? @V3M4026 00949000
  1004. BZ STMCVTMR YES, POINT TO IT FOR UPDATING @V3M4035 00950000
  1005. LA R15,VMTIMER ELSE USE VMBLOK VALUE @V3M4026 00951000
  1006. STMCVTMR ST R15,MICVTMR SAVE IN MICBLOK @V3M4035 00952000
  1007. BR R6 TIMER ASSIST ALL SET UP, EXIT @V3M4026 00953000
  1008. DROP R1 @V201537 00954000
  1009. EJECT 00955000
  1010. MICOFF LTR R1,R1 MICBLOK EXIST? @V201537 00956000
  1011. BE MICLAST NO. ALREADY OFF, SO JUST EXIT @V201537 00957000
  1012. LA R0,MICSIZE GET MICBLOK SIZE @V201537 00958000
  1013. CALL DMKFRET RELEASE MICBLOK STORAGE @V201537 00959000
  1014. NI VMMCR6,X'FF'-(VMMFE+VMMVTMR) RESET ENABLE BITS @V386198 00960000
  1015. SR R8,R8 @V201537 00961000
  1016. STCM R8,B'0111',VMMADDR ZERO OUT MICBLOK POINTER @V201537 00962000
  1017. * BUT LEAVE FLAG BYTE AS IS 00963000
  1018. SPACE 1 00964000
  1019. MICLAST CALL DMKSCNFD SCAN FOR ANOTHER ARGUMENT @V201537 00965000
  1020. BNZ EXASSIST ALL DONE IF NONE FOUND @V4M0134 00966000
  1021. MVC SAVEWRK5(8),BLANKS BLANK OUT WORK AREA @V201537 00967000
  1022. LR R5,R0 LENGTH OF PARM TO R5 @V201537 00968000
  1023. C R5,F8 PARM MORE THAN 8 CHARS? @V201537 00969000
  1024. BH CFS026 BRANCH IF MORE THAN 8 @V201537 00970000
  1025. BCTR R5,0 REDUCE FOR EX @V201537 00971000
  1026. EX R5,MOVEARG2 MOVE PARM TO SAVEWRK5 @V201537 00972000
  1027. B ASTSVC GO CHECK FOR OTHER OPTIONS @V3M4026 00973000
  1028. SPACE 1 @V4M0134 00974000
  1029. EXASSIST EQU * SEE ABOUT MESSAGES FOR USER @V4M0134 00975000
  1030. TM VMMCR6,VMMFE DOES USER HAVE VM ASSIST ON? @V4M0134 00976000
  1031. BNO SETCOMP NO -- NO MESSAGES @V4M0134 00977000
  1032. TM VMAFF,VMAFFON IF USER HAS PROCESSOR AFFINITY@V4M0134 00978000
  1033. BO AFFVMA GIVE MESSAGES FOR THAT PROC @V4M0134 00979000
  1034. TM SAVEWRK1+1,CPMICON ELSE IF NO PROCESSOR HAS VM @V4M0134 00980000
  1035. BNO CFS183 ASSIST ON, GIVE 'NOT ACTIVE' @V4M0134 00981000
  1036. B SETCOMP @V4M0134 00982000
  1037. SPACE 1 @V4M0134 00983000
  1038. AFFVMA SR R15,R15 POINT TO OUR PSA @V4M0134 00984000
  1039. CLC VMAFF,LPUADDR+1 AFFINITY TO US? @V4M0134 00985000
  1040. BE *+8 YES @V4M0134 00986000
  1041. L R15,PREFIXB NO, POINT TO OTHER PSA @V4M0134 00987000
  1042. TM CPSTAT2-PSA(R15),CPMICAVL+CPMICON ASSIST STATUS@V4M0134 00988000
  1043. BO SETCOMP NO MSG IF UP AND RUNNING @V4M0134 00989000
  1044. BM CFS183 MUST BE AVAIL, NOT OPERATING @V4M0134 00990000
  1045. * VM ASSIST IS NOT AVAILABLE ON THE AFFINITY PROCESSOR @V4M0134 00991000
  1046. LH R1,IPUADDR-PSA(R15) CONVERT PROCESSOR ADDRESS @V4M0134 00992000
  1047. CALL DMKCVTBH @V4M0134 00993000
  1048. MVC SAVEWRK2(9),OPT184 OPTIONAL PART OF MSG @V4M0134 00994000
  1049. STCM R1,B'0011',SAVEWRK4+1 PROCESSOR ADDR @V4M0134 00995000
  1050. LA R0,11 LENGTH OF OPTIONAL PART @V4M0134 00996000
  1051. LA R1,SAVEWRK2 WHERE IT'S AT @V4M0134 00997000
  1052. LA R2,184 MESSAGE NUMBER @V4M0134 00998000
  1053. B CALLERM SEND MSG ABOUT NON-AVAIL @V4M0134 00999000
  1054. EJECT 01000000
  1055. ***** 01001000
  1056. * 01002000
  1057. * SET SMSG ON|OFF 01003000
  1058. * 01004000
  1059. ***** 01005000
  1060. SPACE 01006000
  1061. SETSMSG EQU * SET SPECIAL MESSAGE OPTION @V60C2B8 01007000
  1062. TM SAVEWRK1,NARGTWO WAS 2ND ARGUMENT SPECIFIED? @V60C2B8 01008000
  1063. BO CFS026 NO - OPERAND MISSING @V60C2B8 01009000
  1064. SPACE 01010000
  1065. SLR R7,R7 ONLY ON OR OFF VALID @V60C2B8 01011000
  1066. LA R8,SETSPMON RETURN IF ON SPECIFIED @V60C2B8 01012000
  1067. BAL R10,TSTONOFF GO TEST OPTION @V60C2B8 01013000
  1068. SPACE 01014000
  1069. XC SAVEWRK6(1),FFS REVERSE BITS IN OPTION @V60C2B8 01015000
  1070. NC VMSPMFLG,SAVEWRK6 TURN OFF FLAG @V60C2B8 01016000
  1071. B SETCOMP ALL DONE @V60C2B8 01017000
  1072. SPACE 01018000
  1073. SETSPMON OC VMSPMFLG,SAVEWRK6 TURN ON SMSG FLAG @V60C2B8 01019000
  1074. B SETCOMP ALL DONE @V60C2B8 01020000
  1075. EJECT 01021000
  1076. ***** @V4075A0 01022000
  1077. * @V4075A0 01023000
  1078. * SET AFFINITY ON|OFF CLASS G @V4075A0 01024000
  1079. * <USERID> ON|OFF|XX CLASS A @V4075A0 01025000
  1080. * @V4075A0 01026000
  1081. * @V4075A0 01027000
  1082. * NOTES: R6 IS USED TO HOLD THE PROCESSOR ADDR 01028000
  1083. * SAVEWRK2 IS USED FOR THE TARGET USER'S ID 01029000
  1084. * 01030000
  1085. ***** @V4075A0 01031000
  1086. SPACE 2 01032000
  1087. SETAFF EQU * @V4075A0 01033000
  1088. MVC SAVEWRK2(8),VMUSER DEFAULT USERID = US @V4075A0 01034000
  1089. TM SAVEWRK1,NARGTWO IS THERE A 2ND OPERAND? @V4075A0 01035000
  1090. BO SETAFFON NO -> DEFAULT = ON, UID=US @V4075A0 01036000
  1091. LA R10,SETAFFOF @V4075A0 01037000
  1092. LA R8,SETAFFON @V4075A0 01038000
  1093. BAL R7,TSTONOFF WHO WILL RETURN IF NOT ON|OFF @V4075A0 01039000
  1094. * A NUMERIC PROCESSOR ADDRESS IS VALID FOR CLASS A USERS 01040000
  1095. TM VMCLEVEL,VMCLASSA THIS PATH IS NOT @V4075A0 01041000
  1096. BZ CFS026 FOR THE COMMON MAN, GIVE HIM ERR MSG@V4075A0 01042000
  1097. * LA R0,1(R4) R0 STILL HAS LENGTH OF 2ND ARG @V4075A0 01043000
  1098. LA R1,SAVEWRK5 POINT TO 2ND ARG FOR CONVERTER @V4075A0 01044000
  1099. CALL DMKCVTDB @V4075A0 01045000
  1100. B AFFUID CHECK IF USER ID SPEC'D @VA08267 01046000
  1101. CHKNUMBA EQU * 01047000
  1102. C R1,F63 MAX ADDR (NOT CPUID) WE SUPPORT @V4075A0 01048000
  1103. BH CFS026 YOU ASKED FOR TOO MUCH, SORRY @V4075A0 01049000
  1104. LA R6,VMAFFON(R1) TURN ON THE VMAFFON BIT @V4075A0 01050000
  1105. SPACE 1 01051000
  1106. CMPADDR CH R6,LPUADDR OUR PROC ADDR REQUESTED @V4075A0 01052000
  1107. BNE OTHRAD NO @V4075A0 01053000
  1108. TM APSTAT1,APUOPER @V4075A0 01054000
  1109. BO STPRAD IN AP MODE, SET AFFINITY @V4075A0 01055000
  1110. SPACE 1 @V4075A0 01056000
  1111. CFS189 LA R2,189 SYSTEM NOT IN ATTACHED PROCESSOR MOD@V4075A0 01057000
  1112. B NOVAR SET UP REST OF PARMS FOR ERMSG @V4075A0 01058000
  1113. SPACE 1 @V4075A0 01059000
  1114. OTHRAD TM APSTAT1,APUOPER IS THERE ANOTHER PROCESSOR? @V4075A0 01060000
  1115. BZ CFS188 NON, WE DON'T HAVE WHAT HE WANT@V4075A0 01061000
  1116. CH R6,LPUADDRX OTHER PROC ADDR @V4075A0 01062000
  1117. BNE CFS188 WE DON'T HAVE WHAT HE WANTS. @V4075A0 01063000
  1118. SPACE 1 @V4075A0 01064000
  1119. STPRAD EQU * NOW FIND TARGET USER'S VMBLOK@V4075A0 01065000
  1120. LA R0,8 @V4075A0 01066000
  1121. LA R1,SAVEWRK2 @V4075A0 01067000
  1122. CALL DMKSCNAU @V4075A0 01068000
  1123. BNZ CFS045 NOT THERE @V4075A0 01069000
  1124. STC R6,VMAFF-VMBLOK(R1) SET AFFINITY @V4075A0 01070000
  1125. B SETCOMP @V4075A0 01071000
  1126. SPACE 3 @V4075A0 01072000
  1127. AFFUID EQU * IS A USERID SPECIFIED @V4075A0 01073000
  1128. MVC SAVEWRK2(8),SAVEWRK5 SAVE PARM AS USERID @V4075A0 01074000
  1129. CALL DMKSCNFD LOOK FOR MORE PARMS @V4075A0 01075000
  1130. BNZ SETAFFON NONE, DEFAULT IS TO SET ON @V4075A0 01076000
  1131. C R0,F8 MAX LENGTH OF COMMAND PARM @V4075A0 01077000
  1132. BH CFS026 USER INPUT ERROR @V4075A0 01078000
  1133. MVC SAVEWRK5(8),BLANKS NO LEFTOVERS FROM LAST ARG@V4075A0 01079000
  1134. LR R15,R0 MOVE PARM LENGTH TO A USEFUL REG@V4075A0 01080000
  1135. BCTR R15,0 DECREMENT FOR EXECUTE INSTR @V4075A0 01081000
  1136. EX R15,MOVEARG2 TO SAVEWRK5 FOR TSTONOFF @V4075A0 01082000
  1137. BAL R7,TSTONOFF RETURN REGS STILL VALID R8, R10 @V4075A0 01083000
  1138. CALL DMKCVTDB @V4075A0 01084000
  1139. BNZ CFS026 ONLY NUMERIC VALID AT THIS POINT@V4075A0 01085000
  1140. B CHKNUMBA @V4075A0 01086000
  1141. SPACE 1 01087000
  1142. SETAFFOF DS 0H @VA07492 01088000
  1143. SR R6,R6 SET AFFINITY OFF @VA07492 01089000
  1144. B STPRAD @V4075A0 01090000
  1145. SPACE 1 @V4075A0 01091000
  1146. SETAFFON EQU * @V4075A0 01092000
  1147. * GET USER'S DIRECTORY BLOCK & SET AFFINITY FROM UMACAFF @V4075A0 01093000
  1148. LA R0,UDBFSIZE SPACE FOR DMKUDR @V4075A0 01094000
  1149. CALL DMKFREE @V4075A0 01095000
  1150. LR R2,R1 DMKUDR LIKES HIS BUFFER POINTER IN R2 @V4075A0 01096000
  1151. LA R1,SAVEWRK2 POINT TO APPROPRIATE USERID @V4075A0 01097000
  1152. LA R0,8 @V4075A0 01098000
  1153. CALL DMKUDRFU FIND ITS DIRECTORY ENTRY @V4075A0 01099000
  1154. BC 4,CFS053 USER NOT FOUND IN DIRECTORY @V4075A0 01100000
  1155. BC 1,CFS052 OTHER DIRECTORY PROBS @V4075A0 01101000
  1156. USING UDIRBLOK,R2 @V4075A0 01102000
  1157. LA R1,UDIRDISP @V4075A0 01103000
  1158. USING UDBFBLOK,R2 OVERLAY UDIRBLOK, THAT'S O.K@V4075A0 01104000
  1159. MVC UDBFVADD(8),ZEROES 0-OUT LAST 8 BYTES FOR UDR @V4075A0 01105000
  1160. CALL DMKUDRMD GET THE MACHINE BLOCK ENTRY FROM DIR@V4075A0 01106000
  1161. BNZ CFS052 CAN'T READ THE DIRECTORY @V4075A0 01107000
  1162. USING UMACBLOK,R2 @V4075A0 01108000
  1163. SR R6,R6 @V4075A0 01109000
  1164. IC R6,UMACAFF THAT'S THE BYTE WE WANT @V4075A0 01110000
  1165. CALL DMKUDRRV RELEASE DIRECTORY PAGE @V4075A0 01111000
  1166. LA R0,UDBFSIZE AND FREE STORAGE WE USED @V4075A0 01112000
  1167. LR R1,R2 @V4075A0 01113000
  1168. CALL DMKFRET @V4075A0 01114000
  1169. LTR R6,R6 USER HAVE AFFINITY IN DIRECTORY? @V4075A0 01115000
  1170. BNZ CMPADDR GO SET IT, ELSE ... @V4075A0 01116000
  1171. SPACE 2 @V4075A0 01117000
  1172. CFS190 LA R2,190 NO AFFINITY SPECIFIED IN THE DIRECTO@V4075A0 01118000
  1173. B NOVAR SET UP REST OF PARMS FOR ERMSG @V4075A0 01119000
  1174. SPACE 1 @V4075A0 01120000
  1175. CFS052 LA R2,52 ERROR IN CP DIRECTORY @V4075A0 01121000
  1176. B NOVAR SET UP REST OF PARMS FOR ERMSG @V4075A0 01122000
  1177. SPACE 1 01123000
  1178. CFS188 LA R2,188 SPECIFIED PROCESSOR NOT AVAILABLE @V4075A0 01124000
  1179. B NOVAR SET UP REST OF PARMS FOR ERMSG @V4075A0 01125000
  1180. SPACE 1 @V4075A0 01126000
  1181. CFS045 LA R2,45 $ NOT LOGGED ON @@V4075A0 01127000
  1182. B CFS053U TELL WHO $ IS @V4075A0 01128000
  1183. SPACE 1 01129000
  1184. CFS053 LA R2,53 $ NOT IN CP DIRECTORY @V4057A0 01130000
  1185. CFS053U LA R1,SAVEWRK2 $ NOW UNMASKED @V4075A0 01131000
  1186. LA R0,8 @V4075A0 01132000
  1187. B CALLERM @V4075A0 01133000
  1188. EJECT 01134000
  1189. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01135000
  1190. * SET CPUID BBBBBB COMMAND * 01136000
  1191. * * 01137000
  1192. * THE 'BBBBBB' CPU SERIAL IS CONVERTED FROM HEXADECIMAL TO BINARY * 01138000
  1193. * AND THE RESULT STORED IN THE VMBLOK. THIS CPU SERIAL WILL BECOME * 01139000
  1194. * PART OF THE CPUID STORED IN RESPONSE TO A 'STIDP' INSTRUCTION. * 01140000
  1195. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01141000
  1196. SPACE 2 01142000
  1197. SETCPUID EQU * @V407466 01143000
  1198. TM SAVEWRK1,NARGTWO ANY SECOND ARGUMENT @V407466 01144000
  1199. BO CFS026 BAD NEWS @V407466 01145000
  1200. C R0,=F'6' BBBBBB > 6 ? @V407466 01146000
  1201. BH CFS026 INVALID OPERAND @V407466 01147000
  1202. CALL DMKCVTHB CONVERT TO BINARY @V407466 01148000
  1203. BNZ CFS026 DOES NOT PASS VALIDITY CHECK @V407466 01149000
  1204. STCM R1,B'0111',VMCPUID STORE IN VMBLOK @V407466 01150000
  1205. B SETCOMP EXIT @V407466 01151000
  1206. ***** 01152000
  1207. * 01153000
  1208. * ERROR MESSAGES 01154000
  1209. * 01155000
  1210. ***** 01156000
  1211. SPACE 01157000
  1212. CFS003 LA R2,3 ERROR CODE 01158000
  1213. B CALLERM ... 01159000
  1214. SPACE 01160000
  1215. CFS026 LA R2,26 ERROR CODE 01161000
  1216. B NOVAR ... 01162000
  1217. SPACE 1 01163000
  1218. CFS183 LA R2,183 ERROR CODE FOR 'NOT ACTIVE' @V4M0134 01164000
  1219. B NOVAR @V4M0134 01165000
  1220. SPACE 1 @V4M0134 01166000
  1221. CFS184 LA R2,184 ERROR CODE FOR 'NOT AVAILABLE' @V4M0134 01167000
  1222. B NOVAR @V4M0134 01168000
  1223. SPACE 01169000
  1224. CFS187 LA R2,187 ERROR CODE TIMER ASSIST NOT AVL. @V3M4026 01170000
  1225. SPACE 01171000
  1226. NOVAR SLR R1,R1 ZERO PARM REG 01172000
  1227. SPACE 01173000
  1228. CALLERM ICM R0,14,MODID+3 INSERT MODULE IDENTITY 01174000
  1229. CALL DMKERMSG SEND MESSAGE 01175000
  1230. * 01176000
  1231. * ERMSG WILL RETURN TO DMKCFM INSTEAD OF HERE 01177000
  1232. * 01178000
  1233. EJECT 01179000
  1234. F63 DC F'63' @V4075A0 01180000
  1235. OPT184 DC C' ON PROC ' @V4M0134 01181000
  1236. LTORG 01182000
  1237. EJECT 01183000
  1238. PSA , @V306638 01184000
  1239. COPY CONBUF @V306638 01185000
  1240. COPY EQU @V306638 01186000
  1241. COPY MICBLOK @V306638 01187000
  1242. COPY SAVE @V306638 01188000
  1243. SYSLOCS , @V306638 01189000
  1244. COPY TIMER @V306638 01190000
  1245. COPY VMBLOK @V306638 01191000
  1246. COPY UDIRECT @V4075A0 01192000
  1247. EJECT 01193000
  1248. * EQUATES FOR CLASSES 01194000
  1249. * 01195000
  1250. A EQU VMCLASSA 01196000
  1251. B EQU VMCLASSB 01197000
  1252. C EQU VMCLASSC 01198000
  1253. D EQU VMCLASSD 01199000
  1254. E EQU VMCLASSE 01200000
  1255. F EQU VMCLASSF 01201000
  1256. G EQU VMCLASSG 01202000
  1257. END DMKCFS 01203000