Table of Contents

DMKCDS Source

References

Source Listing

DMKCDS.ASSEMBLE.txt
  1. CDS TITLE 'DMKCDS (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 VALIDATE SEQUENCING OF INPUT 00002000
  3. *. 00003000
  4. * MODULE NAME - 00004000
  5. * 00005000
  6. * DMKCDS 00006000
  7. * 00007000
  8. * FUNCTION - 00008000
  9. * EXECUTES THE STORE AND STCP COMMANDS. 00009000
  10. * 00010000
  11. * ATTRIBUTES - 00011000
  12. * REENTRANT, PAGEABLE,CALLED VIA SVC 00012000
  13. * 00013000
  14. * ENTRY POINTS - 00014000
  15. * DMKCDSTO - STORE DATA INTO VIRTUAL STORAGE. 00015000
  16. * DMKCDSCP - STORE DATA INTO REAL STORAGE. 00016000
  17. * 00017000
  18. * ENTRY CONDITIONS - 00018000
  19. * GPR9 - ADDRESS OF THE COMMAND LINE BUFFER. 00019000
  20. * GPR11- ADDRESS OF THE USERS VMBLOK. 00020000
  21. * GPR12 - ADDRESS OF THE ENTRY POINT. 00021000
  22. * GPR13 - ADDRESS OF THE STANDARD SAVE AREA. 00022000
  23. * 00023000
  24. * EXIT CONDITIONS - 00024000
  25. * NORMAL - 00025000
  26. * GPR2 = 0 00026000
  27. * 00027000
  28. * ERROR - 00028000
  29. * GPR2 = ERROR MESSAGE CODE NUMBER. 00029000
  30. * 00030000
  31. * CALLS TO OTHER ROUTINES - 00031000
  32. * DMKSCNFD - LOCATE THE NEXT ARGUMENT IN THE COMMAND LINE BUFFER 00032000
  33. * DMKCVTBH - CONVERT A BINARY NUMBER TO HEXADECIMAL 00033000
  34. * DMKCVTDB - TO CONVERT A DECIMAL NUMBER TO BINARY 00034000
  35. * DMKCVTHB - TO CONVERT A HEXADECIMAL NUMBER TO BINARY 00035000
  36. * DMKVATAB - TO MAINTAIN SHADOW PAGE AND SEGMENT TABLES 00036000
  37. * DMKVATMD - TO ALLOCATE AND INITIALIZE SHADOW TABLES 00037000
  38. * DMKPSASC - TO CHECK IF STORE IS BEING MADE INTO A SHARED PAGE 00038000
  39. * DMKPSACC - TO VERIFY IF THE SHARED PAGE WAS CHANGED BY RUNUSER 00039000
  40. * DMKATSCF - TO UNSHARE A NAMED SYSTEM FOR THIS USER 00040000
  41. * DMKPAGIO - TO WRITE OUT A SHARED PAGE TO BACK-UP STORAGE 00041000
  42. * DMKVMASH - TO SCAN/UNSHARE A NAMED SYSTEM FROM RUNUSER 00042000
  43. * DMKVATBC - TO RELEASE SHADOW PAGE ANDSEGMENT TABLE 00043000
  44. * DMKQCNWT - TO SEND MESSAGE TO THE TERMINAL 00044000
  45. * DMKPTRAN - TO BRING USER PAGE INTO STORAGE 00045000
  46. * DMKERMSG - TO SEND ERROR MESSAGES TO THE TERMINAL. 00046000
  47. * DMKTRCPB - TO PUT BACK OLD USER INSTRUCTIONS (IF TRACING) 00047000
  48. * DMKTRCIT - TO SET NEW "SVC B2" FOR TRACING INSTRUCTIONS 00048000
  49. * DMKPGTPG - ALLOCATE A NEW SLOT FOR A CHANGED SHARED PAGE 00048100
  50. * 00049000
  51. * TABLES/WORKAREAS - 00050000
  52. * ECBLOK 00051000
  53. * 00052000
  54. * REGISTER USAGE - 00053000
  55. * GPR0 - FIELD LENGTH REGISTER 00054000
  56. * GPR1 - ADDRESS OF ARGUMENT IN COMMAND LINE BUFFER 00055000
  57. * GPR2 - PARAMETER REGISTER FOR CALLED ROUTINES 00056000
  58. * GPR3 - VIRTUAL STORAGE ADDRESS FOR STORE FUNCTION 00057000
  59. * GPR4 - WORK REGISTER 00058000
  60. * GPR5 - WORK REGISTER 00059000
  61. * GPR6 - WORK REGISTER 00060000
  62. * GPR7 - WORK REGISTER 00061000
  63. * GPR8 - BAL REGISTER 00062000
  64. * GPR9 - ADDRESS OF THE COMMAND LINE BUFFER 00063000
  65. * GPR10- WORK REGISTER 00064000
  66. * GPR11- ADDRESS OF VMBLOK 00065000
  67. * GPR12- BASE REGISTER FOR THIS MODULE 00066000
  68. * GPR13- ADDRESS OF STANDARD SAVE AREA 00067000
  69. * GPR14- LINKAGE REGISTER 00068000
  70. * GPR15- LINKAGE REGISTER 00069000
  71. * 00070000
  72. * NOTES - 00071000
  73. * NONE 00072000
  74. * 00073000
  75. * OPERATION - 00074000
  76. * THE DESCRIPTION FOR THIS MODULE ARE LISTED IN SEPARATE PROLOGS 00075000
  77. * BELOW. 00076000
  78. * 00077000
  79. *. 00078000
  80. EJECT 00079000
  81. COPY OPTIONS 00080000
  82. COPY LOCAL 00081000
  83. DMKCDS START 00082000
  84. SPACE 00083000
  85. MODID DC CL8'DMKCDS' 00084000
  86. USING PSA,R0 00085000
  87. USING VMBLOK,R11 00086000
  88. USING SAVEAREA,R13 00087000
  89. SPACE 3 00088000
  90. EXTRN DMKERMSG 00089000
  91. EXTRN DMKVSPRT @V200820 00090000
  92. EXTRN DMKCVTBD,DMKCVTBH,DMKCVTDB,DMKCVTHB,DMKCVTFP 00091000
  93. EXTRN DMKSYSRM 00092000
  94. EXTRN DMKSCNFD 00093000
  95. EXTRN DMKPSASC,DMKPSACC,DMKPTRWQ,DMKPAGIO @V60BC11 00094000
  96. EXTRN DMKATSCF @V60BC11 00094500
  97. EXTRN DMKPGTPG @V4075A0 00095100
  98. EXTRN DMKDMPTR 00096000
  99. EXTRN DMKVATMD,DMKVATBC,DMKVATAB 00097000
  100. EXTRN DMKVMASH @VA07351 00097100
  101. AIF (NOT &TRACE(6)).NTR1 00098000
  102. EXTRN DMKTRCPB,DMKTRCIT 00099000
  103. .NTR1 ANOP 00100000
  104. SPACE 3 00101000
  105. EXTRN DMKSYSAP @V4075A0 00101100
  106. * 00102000
  107. * EQUATES USED IN SAVEWRK1 FOR STORE FUNCTIONS 00103000
  108. * 00104000
  109. REALM EQU X'00' 00105000
  110. VIRTM EQU X'80' 00106000
  111. STORED EQU X'40' 00107000
  112. CALTRCIT EQU X'20' 00108000
  113. SHPGNWRT EQU X'10' @V4075A0 00108100
  114. MPREF EQU X'08' @V4075A0 00108200
  115. NPREF EQU X'04' @V4075A0 00108300
  116. SHRPAGE EQU X'02' @V304735 00109000
  117. STOBIT EQU X'01' 00110000
  118. * 00110100
  119. * EQUATES USED IN SAVEWRK1+3 00110200
  120. * 00110300
  121. STOWORD EQU X'08' @VA07033 00110400
  122. NEEDDATA EQU X'04' INDICATE SEARCHING FOR DATA @VA07340 00110500
  123. SPACE 2 00111000
  124. ********************************************************************** 00112000
  125. * SWITCH DEFINITIONS 00113000
  126. * X'80' - 0= REAL STORAGE, 1= VIRTUAL STORAGE 00114000
  127. * X'40' - 0= NOTHING STORED, 1= SOMETHING STORED 00115000
  128. * X'20' - 0=NOT TRACING, 1= CALL TO DMKTRCIT NEEDED BEFORE EXIT 00116000
  129. * X'10' - 1= CHANGED SHARED PAGE NOT WRITTEN OUT @V4075A0 00116100
  130. * X'08' - 1= TREAT ADDRESS AS MAIN PREFIXED @V4075A0 00116200
  131. * X'04' - 1= TREAT ADDRESS AS ATTACHED PROC PREFIXED @V4075A0 00116300
  132. * X'02' - 0= NOT A SHARED PAGE, 1= SHARED PAGE 00117000
  133. * X'01' - TURNED ON THROUGHOUT STORE OPERATION 00118000
  134. ********************************************************************** 00119000
  135. EJECT 00120000
  136. *********************************************************************** 00121000
  137. * * 00122000
  138. * STCP * 00123000
  139. * * 00124000
  140. *********************************************************************** 00125000
  141. *. 00126000
  142. * SUBROUTINE NAME - 00127000
  143. * DMKCDSCP 00128000
  144. * 00129000
  145. * FUNCTION - 00130000
  146. * TO ALTER THE CONTENTS OF REAL STORAGE. 00131000
  147. * 00132000
  148. * COMMAND FORMAT - 00133000
  149. * +--------+-------------------------+ 00134000
  150. * | STCP | (M|N| )||HEXLOC HEXDATA . . .| 00135000
  151. * | | (ML|NL|L)||HEXLOC | 00136000
  152. * | | (MS|NS|S)||HEXLOC | 00137000
  153. * +--------+-------------------------+ 00138000
  154. * 00139000
  155. * OPERATION - 00140000
  156. * 1. SET A BIT IN SAVEWRK1 TO INDICATE THAT THIS IS A STORE 00141000
  157. * TO REAL STORAGE. IN AN AP SYSTEM THE LETTER 'M' CAUSES THE 00142000
  158. * ADDRESS TO BE TREATED AS SEEN THROUGH THE MAIN PROCESSOR'S 00142100
  159. * PREFIX REGISTER. THE LETTER 'N' DESIGNATES THE ATTACHED 00142200
  160. * PROCESSOR. OTHERWISE THE ADDRESS IS TREATED AS AN ABSOLUTE 00142300
  161. * ADDRESS. 'N' IS VALID ONLY WHEN THE ATTACHED PROCESSOR IS 00142400
  162. * IN OPERATION. 'M' IS VALID IF THE SYSTEM HAS BEEN GEN'D 00142500
  163. * FOR AP. THE REST OF THE OPERATION IS DESCRIBED IN THE PRO- 00142600
  164. * LOGUE FOR STORE. 00142700
  165. * 00144000
  166. * RESPONSES - 00145000
  167. * 00146000
  168. * STORE COMPLETE 00147000
  169. * 00148000
  170. * ERROR MESSAGES - 00149000
  171. * DMKCDS004E INVALID HEXLOC - (HEXLOC) 00150000
  172. * DMKCDS005E INVALID HEXDATA - (HEXDATA) 00151000
  173. * DMKCDS026E OPERAND MISSING OR INVALID 00152000
  174. * DMKCDS033E HEXLOC MISSING OR INVALID 00153000
  175. * DMKCDS160E HEXLOC (HEXLOC) EXCEEDS STORAGE 00154000
  176. *. 00155000
  177. SPACE 2 00156000
  178. DMKCDSCP RELOC STORE INTO REAL STORAGE 00157000
  179. MVI SAVEWRK1,REALM+STOBIT REMEMBER TO STORE INTO REAL STORAG 00158000
  180. B STONEXT CONTINUE 00159000
  181. SPACE 20 00160000
  182. *********************************************************************** 00161000
  183. * * 00162000
  184. * STORE * 00163000
  185. * * 00164000
  186. *********************************************************************** 00165000
  187. *. 00166000
  188. * SUBROUTINE NAME - 00167000
  189. * DMKCDSTO 00168000
  190. * 00169000
  191. * FUNCTION - 00170000
  192. * 00171000
  193. * TO ALTER THE CONTENTS OF VIRTUAL STORAGE LOCATIONS, REGISTERS, 00172000
  194. * OR PSW. 00173000
  195. * 00174000
  196. * COMMAND FORMAT - 00175000
  197. * +---------+--------------------------------+ 00176000
  198. * | STORE | HEXLOC HEXDATA . . . . | 00177000
  199. * | | LHEXLOC | 00178000
  200. * | ST | SHEXLOC | 00179000
  201. * | | GREG | 00180000
  202. * | | YREG | 00181000
  203. * | | XREG | 00182000
  204. * | | | 00183000
  205. * | | PSW HEXDATA1 HEXDATA2 | 00184000
  206. * | | | 00185000
  207. * | | STATUS | 00186000
  208. * +---------+--------------------------------+ 00187000
  209. * 00188000
  210. * OPERATION - 00189000
  211. * 1. SET A FLAG TO INDICATE A STORE VIRTUAL REQUEST. THEN GO TO 00190000
  212. * STEP 2 WHICH IS THE START OF THE SUBROUTINES COMMON TO BOTH 00191000
  213. * STORE AND STCP. 00192000
  214. * 2. SET UP RETURN REG 8 TO GO TO HEXLOC PROCESSING IN THE 00193000
  215. * EVENT NONE OF THE OTHER TYPES OF REQUEST ARE FOUND IN THE 00194000
  216. * COMMAND LINE. 00195000
  217. * 3. CALL DMKSCNFD TO LOCATE THE NEXT ARGUMENT. IF NONE FOUND, 00196000
  218. * GO TO STEP 3A. CHECK THE ARGUMENT TO DETERMINE THE TYPE 00197000
  219. * OF REQUEST. IF ONE IS FOUND, GO TO THE APPROPRIATE 00198000
  220. * SUBROUTINE. IF NOT RETURN ON REG 8. 00199000
  221. * 3A. IF NO ARGUMENTS AT ALL HAVE BEEN FOUND IN THE COMMAND 00200000
  222. * LINE, CALL DMKERMSG TO SEND ERROR MESSAGE DMKCDS026 -EXIT. 00201000
  223. * IF SOME PROCESSING HAS BEEN DONE, JUST EXIT. 00202000
  224. * 4. STOLOC - THIS SUBROUTINE WILL PROCESS THE HEXLOC REQUESTS. 00203000
  225. * FIRST CHECK IF ANY ADDRESS HAS BEEN SPECIFIED. IF NOT, 00204000
  226. * CALL DMKERMSG TO SEND ERROR MESSAGE DMKCDS033E - EXIT. 00205000
  227. * IF THE LENGTH OF THE ARGUMENT IS OVER SIX CHARACTERS, CALL 00206000
  228. * DMKERMSG TO SEND ERROR MESSAGE DMKCDS004E AND EXIT. 00207000
  229. * IF LENGTH IS VALID, CALL DMKCVTHB TO CONVERT THE 00208000
  230. * ADDRESS TO BINARY. IF CONVERT FAILS, CALL DMKERMSG TO 00209000
  231. * SEND ERROR MESSAGE DMKCDS004E - EXIT.IF ADDRESS IS VALID, 00210000
  232. * BAL ON REG 8 TO STEP 3 TO SCAN FOR DATA ARGUMENT. CALL 00211000
  233. * DMKCVTHB TO CONVERT THE DATA ARGUMENT TO BINARY. IF CON- 00212000
  234. * VERT FAILS, CALL DMKERMSG TO SEND ERROR MESSAGE DMKCDS173E 00213000
  235. * AND EXIT. IF DATA OK, GO TO STEP 4A TO GET THE REAL 00214000
  236. * STORAGE ADDRESS FOR THE STORE. WHEN RETURN FROM STEP 4A, 00215000
  237. * STORE THE DATA AND BUMP THE ADDRESS TO THE NEXT STORAGE 00216000
  238. * LOCATION. THEN BAL BACK TO STEP 3 FOR MORE DATA IF ANY. 00217000
  239. * 4A. STOLOCA - THIS SUBROUTINE SETS UP THE REAL STORAGE 00218000
  240. * ADDRESS FOR THE STORE. A CHECK IS MADE TO DETERMINE 00219000
  241. * IF THE REQUESTED ADDRESS EXCEEDS THE MAXIMUM STORAGE 00220000
  242. * LOCATION (EITHER REAL OR VIRTUAL). IF IT DOES, CALL 00221000
  243. * DMKERMSG TO SEND ERROR MESSAGE DMKCDS160 - EXIT. 00222000
  244. * IF A REAL REQUEST, SET UP AND RETURN. IF VIRTUAL, TRANS 00223000
  245. * IN THE REQUESTED VIRTUAL ADDRESS. IF LOCATION IS IN A 00224000
  246. * SHARED PAGE, CALL DMKERMSG TO SEND ERROR MESSAGE 00225000
  247. * DMKCDS161 - EXIT. IF OK, SET UP THE REAL STORAGE ADDRESS 00226000
  248. * AND RETURN. 00227000
  249. * IN AN AP SYSTEM WE RELOCATE ADDRESSES FOR STCP BASED UPON 00227100
  250. * THE M/N SPECIFICATION AND WHICH PROCESSOR WE ARE EXECUTING 00227200
  251. * ON. THE PURPOSE IS TO REACH THE PROPER PAGE GIVEN THE 00227300
  252. * VALUES OF THE TWO PREFIX REGISTERS 00227400
  253. * 5. STOLOS - THIS SUBROUTINE WILL PROCESS A SINGLE LOCATION 00228000
  254. * REQUEST. FIRST CHECK IF ANY HEXLOC HAS BEEN SPECIFIED. IF 00229000
  255. * NOT, CALL DMKERMSG TO SEND ERROR MESSAGE DMKCDS033E - EXIT. 00230000
  256. * IF LENGTH IS OVER SIX CHARACTERS, CALL DMKERMSG TO SEND 00231000
  257. * MESSAGE DMKCDS004E - EXIT. IF OK, CALL DMKCVTHB TO CONVERT 00232000
  258. * THE HEXLOC TO BINARY. IF THE CONVERT FAILS, CALL DMKERMSG 00233000
  259. * TO SEND ERROR MESSAGE DMKCDS004E - EXIT. ELSE, BAL ON REG 8 00234000
  260. * TO STEP 3 TO GET A DATA ARGUMENT. CALL DMKCVTHB TO 00235000
  261. * CONVERT THE DATA ARGUMENT TO BINARY. IF CONVERT FAILS, CALL 00236000
  262. * DMKERMSG TO SEND ERROR MESSAGE DMKCDS005E. IF OK, STORE THE 00237000
  263. * DATA AND BUMP THE STORAGE ADDRESS. THEN BAL ON R8 TO 00238000
  264. * STEP 3 TO GET MORE DATA IF ANY. 00239000
  265. * 6. STOPSW - THIS SUBROUTINE WILL PROCESS THE STORE INTO THE 00240000
  266. * VIRTUAL PSW. FIRST BAL ON REG 8 TO STEP 3 TO GET THE FIRST 00241000
  267. * DATA WORD TO STORE. THEN CALL DMKCVTHB TO CONVERT THE 00242000
  268. * DATA TO BINARY. IF THE CONVERT FAILS, CALL DMKERMSG TO 00243000
  269. * SEND ERROR MESSAGE DMKCDS005E - EXIT. ELSE, STORE THE DATA 00244000
  270. * INTO THE VIRTUAL PSW. THEN BAL ON REG 8 AGAIN TO STEP 3 TO 00245000
  271. * GET THE NEXT DATA WORD IF ANY. THEN CALL DMKCVTHB TO 00246000
  272. * CONVERT THIS WORD TO BINARY. AGAIN, IF THE CONVERT FAILS, 00247000
  273. * CALL DMKERMSG TO SEND ERROR MESSAGE DMKCDS005E - EXIT. 00248000
  274. * ELSE, STORE THE DATA AND GO BACK TO STEP 2 . 00249000
  275. * 7. STOGPR - THIS SUBROUTINE WILL PROCESS THE STORE INTO A 00250000
  276. * VIRTUAL GENERAL PURPOSE REGISTER. FIRST CHECK THE LENGTH 00251000
  277. * OF THE ADDRESS ARGUMENT. IF INVALID, CALL DMKERMSG TO SEND 00252000
  278. * ERROR MESSAGE DMKCDS010E - EXIT. IF OK, CALL DMKCVTDB TO 00253000
  279. * TRY A DECIMAL TO BINARY CONVERT. IF THIS FAILS, CALL 00254000
  280. * DMKCVTHB TO TRY A HEX TO BINARY CONVERT. IF THIS FAILS, 00255000
  281. * CALL DMKERMSG TO SEND ERROR MESSAGE DMKCDS010E - EXIT. 00256000
  282. * IF EITHER CONVERT IS GOOD GO TO NEXT STEP. 00257000
  283. * 7A. BAL ON REG 8 TO STEP 3 TO GET NEXT DATA ARGUMENT. THEN 00258000
  284. * CHECK IF REGISTER ADDRESS IS OVER 15. IF IT IS, CALL 00259000
  285. * DMKERMSG TO SEND ERROR MESSAGE DMKCDS163E - EXIT. IF 00260000
  286. * OK, CALL DMKCVTHB TO CONVERT THE DATA TO BINARY. IF 00261000
  287. * CONVERT FAILS, CALL DMKERMSG TO SEND ERROR MESSAGE 00262000
  288. * DMKCDS005E - EXIT. ELSE, STORE THE DATA AND BUMP THE 00263000
  289. * REGISTER ADDRESS. REPEAT THIS STEP UNTIL EITHER RUN 00264000
  290. * OUT OF DATA OR A DIFFERENT REQUEST TYPE IS ENCOUNTERED 00265000
  291. * IN THE COMMAND LINE IN STEP 3. 00266000
  292. * 8. STOFPR - THIS SUBROUTINE WILL PROCESS THE STORE INTO THE 00267000
  293. * VIRTUAL FLOATING POINT REGISTERS. FIRST CHECK THE LENGTH 00268000
  294. * OF THE ADDRESS ARGUMENT. IF NOT VALID, CALL DMKERMSG TO 00269000
  295. * SEND ERROR MESSAGE DMKCDS010E - EXIT. CALL DMKCVTDB TO 00270000
  296. * CONVERT THE ADDRESS TO BINARY. IF CONVERT FAILS, CALL 00271000
  297. * DMKERMSG TO SEND ERROR MESSAGE DMKCDS010E - EXIT. IF OK, 00272000
  298. * GO ON TO NEXT STEP. 00273000
  299. * 8A. BAL ON REG 8 TO STEP 3 TO GET NEXT DATA ARGUMENT. IF 00274000
  300. * RETURN HERE WITH DATA, CHECK IF REGISTER ADDRESS IS OVER 00275000
  301. * SIX. IF IT IS, CALL DMKERMSG TO SEND ERROR MESSAGE 00276000
  302. * DMKCDS163E - EXIT. IF OK, CALL DMKCVTHB TO CONVERT THE 00277000
  303. * DATA TO BINARY. IF CONVERT FAILS, CALL DMKERMSG TO 00278000
  304. * SEND ERROR MESSAGE DMKCDS005E - EXIT. IF OK, STORE THE 00279000
  305. * DATA INTO THE VIRTUAL FLOATING POINT REGISTER AND BUMP 00280000
  306. * THE REGISTER ADDRESS. REPEAT THIS STEP UNTIL RUN OUT OF 00281000
  307. * DATA OR A DIFFERENT REQUEST IS ENCOUNTERED IN THE COMMAND 00282000
  308. * LINE. 00283000
  309. * 9. STOCRG - THIS SUBROUTINE WILL PROCESS THE STORE INTO 00284000
  310. * VIRTUAL CONTROL REGISTERS. FIRST CHECK THE LENGTH OF THE 00285000
  311. * ADDRESS ARGUMENT. IF INVALID, CALL DMKERMSG TO SEND THE 00286000
  312. * DMKCDS010E ERROR MESSAGE. CALL DMKCVTDB TO TRY A DECIMAL 00287000
  313. * TO BINARY CONVERT. IF THIS FAILS, CALL DMKCVTHB TO TRY A 00288000
  314. * HEX TO BINARY CONVERT. IF THIS FAILS, CALL DMKERMSG TO 00289000
  315. * SEND ERROR MESSAGE DMKCDS010E - EXIT. IF EITHER CONVERT IS 00290000
  316. * GOOD, GO ON TO NEXT STEP. 00291000
  317. * 9A. BAL ON REG 8 TO STEP 3 TO GET NEXT DATA ARGUMENT. THEN 00292000
  318. * CHECK IF REGISTER ADDRESS IS OVER 15. IF IT IS, CALL 00293000
  319. * DMKERMSG TO SEND ERROR MESSAGE DMKCDS163E - EXIT. IF OK, 00294000
  320. * CALL DMKCVTHB TO CONVERT THE DATA TO BINARY. IF CONVERT 00295000
  321. * FAILS, CALL DMKERMSG TO SEND ERROR MESSAGE DMKCDS005E AND 00296000
  322. * EXIT. IF STORING INTO CREG 0, CHECK IF THE DATA IS THE 00297000
  323. * RESET VALUE. IF SO, CALL DMKERMSG TO SEND THE DMKCDS162W 00298000
  324. * WARNING MESSAGE AND COMPLETE THE STORE. IF NOT THE RESET 00299000
  325. * VALUE, CHECK FOR VALID CREG0 DATA. IF NOT VALID, CALL 00300000
  326. * DMKERMSG TO SEND ERROR MESSAGE DMKCDS162E. IF STORING INTO 00301000
  327. * CREG 1, CHECK THE DATA FOR VALIDITY. IF NOT VALID CREG 1 00302000
  328. * DATA, CALL DMKERMSG TO SEND ERROR MESSAGE DMKCDS162E. IF 00303000
  329. * EVERYTHING IS OK, STORE THE DATA INTO THE VIRTUAL CONTROL 00304000
  330. * REGISTER AND BUMP THE REGISTER ADDRESS BY ONE. REPEAT THIS 00305000
  331. * STEP UNTIL THE DATA ARGUMENTS ARE EXHAUSTED. 00306000
  332. * 10. STOSTAT - THIS SUBROUTINE SIMULATES THE HARDWARE STORE 00307000
  333. * STATUS FACILITY. FIRST CHECK TO SEE IF USER HAS ECMODE 00308000
  334. * OPTION. IF NOT CALL DMKERMSG TO SEND DMKCDS026E ERROR 00309000
  335. * MESSAGE. IF SO CHECK TO SEE IF USER ISSUED A 'STCP' 00310000
  336. * TO STORE INTO REAL MAIN STORAGE. IF SO, ISSUE 00311000
  337. * DMKCDS026E ERROR MESSAGE. IF NOT CONTINUE PROCESSING, 00312000
  338. * TRANS IN THE USER'S PAGE ZERO AND STORE PSW AND 00313000
  339. * PROGRAM ADDRESSABLE REGISTERS AS FOLLOWS: 00314000
  340. * 00315000
  341. * FIELD ADDRESS LENGTH 00316000
  342. * (IN DEC.) IN BYTES 00317000
  343. * ______________________________________________ 00318000
  344. * CPU TIMER 216 8 00319000
  345. * CLOCK COMPARATOR 224 8 00320000
  346. * CURRENT PSW 256 8 00321000
  347. * F-P REGISTERS 0-6 352 32 00322000
  348. * GENERAL REGISTERS 0-15 384 64 00323000
  349. * CONTROL REGISTERS 0-15 448 64 00324000
  350. * 00325000
  351. * RESPONSES - 00326000
  352. * 00327000
  353. * STORE COMPLETE 00328000
  354. * 00329000
  355. * ERROR MESSAGES - 00330000
  356. * DMKCDS004E INVALID HEXLOC - (HEXLOC) 00331000
  357. * DMKCDS005E INVALID HEXDATA - (HEXDATA) 00332000
  358. * DMKCDS010E INVALID REGISTER - (REGISTER) 00333000
  359. * DMKCDS012E INVALID PSW - (PSW) 00334000
  360. * DMKCDS026E OPERAND MISSING OR INVALID 00335000
  361. * DMKCDS033E HEXLOC MISSING OR INVALID 00336000
  362. * DMKCDS160E HEXLOC (HEXLOC) EXCEEDS STORAGE 00337000
  363. * DMKCDS161E SHARED PAGE (HEXLOC) ALTERED BY (USERID) 00338000
  364. * DMKCDS162E INVALID ECR (X) - (HEXDATA) 00339000
  365. * DMKCDS162W INVALID ECR (X) - (HEXDATA) 00340000
  366. * DMKCDS163E STORE EXCEEDS MAXIMUM REGISTER 00341000
  367. *. 00342000
  368. SPACE 4 00343000
  369. DMKCDSTO RELOC STORE INTO VIRT. STORAGE 00344000
  370. MVI SAVEWRK1,VIRTM+STOBIT REMEMBER TO STORE INTO VIRT. STORA 00345000
  371. B STONEXT 00346000
  372. EJECT 00347000
  373. STONEXT DS 0H START OF COMMON CODE @VA07033 00348100
  374. MVI SAVEWRK1+3,X'00' CLEAR NEW FLAG BYTE @VA07033 00348200
  375. LA R8,STOLOCD LOAD RETURN ADDR FOR NO TYPE CODE@VA07033 00348300
  376. STOSCAN CALL DMKSCNFD SCAN FOR THE NEXT FIELD IN THE BUFFER 00349000
  377. BNZ STOEXIT BRANCH IF NO MORE ARGUMENTS 00350000
  378. TM SAVEWRK1+3,NEEDDATA WANT DATA SPECIFICALLY?? @VA07340 00350110
  379. BOR R8 YES, DON'T SEARCH FOR KEYWORDS @VA06311 00350200
  380. CLC 0(6,R1),=C'STATUS' IS IT STORE STATUS? 00351000
  381. BNE NOTSTAT NO - CHECK OTHER OPTIONS 00352000
  382. CL R0,F6 LENGTH OF SIX? 00353000
  383. BE STOSTAT YES - GO STORE STATUS 00354000
  384. NOTSTAT DS 0H 00355000
  385. CLI 0(R1),C'0' IF IT'S NUMERIC, NOT TYPE-DESIGN @V4075A0 00355100
  386. BNLR R8 SO RETURN / SKIP TEST FOR TYPE @V4075A0 00355150
  387. CLI 0(R1),C'F' ALSO IF HEX DIGIT @V4075A0 00355200
  388. BNHR R8 RETURN @V4075A0 00355250
  389. NI SAVEWRK1,X'FF'-(MPREF+NPREF) RESET PREFIX FLAGS @V4075A0 00355300
  390. CLI 0(R1),C'N' IF USER SPECIFIED M|N, @V4075A0 00355350
  391. BH NOTMORN @V4075A0 00355400
  392. CLI 0(R1),C'M' @V4075A0 00355450
  393. BNL ITSMORN CHECK VALIDITY AND SET FLAGS @V4075A0 00355500
  394. NOTMORN EQU * @V4075A0 00355550
  395. CLI 0(R1),C'S' STORE INTO STORAGE ON A BYTE BOUNDARY ? 00356000
  396. BE STOLOS BRANCH IF YES 00357000
  397. CLI 0(R1),C'L' WAS 'L' SPECIFIED ??? 00358000
  398. BE STOLOC BRANCH IF YES 00359000
  399. TM SAVEWRK1,VIRTM IS THIS STORE INTO VIRTUAL STORAGE ? 00360000
  400. BCR 8,R8 NO, NO OTHER TYPE CODES FOR STCP 00361000
  401. CLI 0(R1),C'P' STORE PSW ? 00362000
  402. BE STOPSW MAYBE, CHECK FURTHER 00363000
  403. CLI 0(R1),C'G' STORE GENERAL PURPOSE REGISTER(S) ? 00364000
  404. BE STOGPR BRANCH IF YES 00365000
  405. CLI 0(R1),C'Y' STORE FLOATING POINT REGISTER(S) ? 00366000
  406. BE STOFPR BRANCH IF YES 00367000
  407. CLI 0(R1),C'X' STORE CONTROL REGISTER(S) ? 00368000
  408. BE STOCRG BRANCH IF YES 00369000
  409. BR R8 NO TYPE DESIGNATION 00370000
  410. STOSTAT DS 0H STORE STATUS SIMULATION 00371000
  411. TM VMPSTAT,VMV370R CHECK FOR ECMODE OPTION 00372000
  412. BZ CDS026 NO EC, WRITE ERROR MESSAGE 00373000
  413. TM SAVEWRK1,VIRTM WAS HE TRYING TO STCP ? 00374000
  414. BZ CDS026 YES - DON'T LET HIM DO IT 00375000
  415. SR R1,R1 ZERO R1 FOR TRANS 00376000
  416. TRANS 2,1,OPT=(BRING,DEFER) GET USER PAGE ZERO 00377000
  417. L R5,VMECEXT GET EC EXTENSION BLOK ADDRESS 00378000
  418. USING ECBLOK,R5 ADDRESSABILITY FOR ECBLOK 00379000
  419. MVC 216(8,R2),EXTCPTMR CPU TIMER 00380000
  420. L R14,EXTCCTRQ GET ADDRESS OF TIMER REQ BLOK 00381000
  421. USING TRQBLOK,R14 ADDRESSABILITY FOR TIMER BLOK 00382000
  422. MVC 224(8,R2),TRQBVAL CLOCK COMPARATOR 00383000
  423. MVC 256(8,R2),VMPSW PSW 00384000
  424. MVC 352(32,R2),VMFPRS FLOATING POINT REGS 00385000
  425. MVC 384(64,R2),VMGPRS GENERAL PURPOSE REGS 00386000
  426. MVC 448(64,R2),EXTCR0 CONTROL REGS 00387000
  427. DROP R5 00388000
  428. DROP R14 00389000
  429. OI SAVEWRK1,STORED INDICATE THAT STORE IS COMPLETE 00390000
  430. B STONEXT SCAN FOR MORE OPERANDS @VA04212 00390100
  431. SPACE 2 00390200
  432. SPACE 2 00391000
  433. ITSMORN TM SAVEWRK1,VIRTM IF IT'S VIRTUAL STORE, @V4075A0 00391100
  434. BNZ CDS026 M,N ARE NOT ACCEPTABLE @V4075A0 00391125
  435. L R15,=A(DMKSYSAP) IF NOT GEN'D FOR AP, @V4075A0 00391150
  436. CLI 0(R15),C'Y' (VIA THE SYSCOR MACRO) @V4075A0 00391175
  437. BNE CDS026 M,N NOT ACCEPTABLE @V4075A0 00391200
  438. CLI 0(R1),C'N' @V4075A0 00391225
  439. BE ITSN @V4075A0 00391250
  440. OI SAVEWRK1,MPREF USER SPECIFIED 'M' @V4075A0 00391275
  441. PASSMN STM R0,R1,SAVEWRK2 DECREMENT PARM LEN OF FIELD @V4075A0 00391300
  442. BCT R0,NOERRA @V4075A0 00391325
  443. LA R0,1 IF NO MORE IN FIELD, PARM IS@V4075A0 00391350
  444. B CDS033 INVALID @V4075A0 00391375
  445. NOERRA LA R1,1(R1) @V4075A0 00391400
  446. STM R0,R1,SAVEWRK2 SEE IF THERE IS ANOTHER @V4075A0 00391425
  447. B NOTMORN TYPE DESIGNATOR @V4075A0 00391450
  448. SPACE 2 @V4075A0 00391475
  449. ITSN TM APSTAT1,APUOPER 'N' IS NOT VALID WHEN THE @V4075A0 00391500
  450. BNO CDS026 ATTACHED PROCESSOR NOT UP @V4075A0 00391525
  451. OI SAVEWRK1,NPREF USER SPECIFIED 'N' @V4075A0 00391550
  452. B PASSMN @V4075A0 00391575
  453. SPACE 2 @V4075A0 00391600
  454. STOEXIT TM SAVEWRK1,STORED HAS ANY DATA BEEN STORED ? 00392000
  455. BZ CDS026 BRANCH IF NO ARGUMENTS FOUND 00393000
  456. MSG 0,'STORE COMPLETE' 00394000
  457. CALL DMKQCNWT,PARM=NORET 00395000
  458. B EXIT RETURN 00396000
  459. SPACE 00397000
  460. EJECT 00398000
  461. * 00399000
  462. * STORE INTO STORAGE 00400000
  463. * 00401000
  464. STOLOC STM R0,R1,SAVEWRK2 SAVE ADDRESS AND LENGTH OF ARGUMENT 00402000
  465. BCT R0,STOBMPLL SUBTRACT ONE FOR TYPE CODE 00403000
  466. LA R0,1 BUMP BACK TO '1' FOR ERROR MSG. 00404000
  467. B CDS033 BRANCH IF INVALID ARGUMENT 00405000
  468. STOBMPLL LA R1,1(,R1) BUMP PAST TYPE CODE 00406000
  469. STOLOCD STM R0,R1,SAVEWRK2 SAVE ARGUMENT LENGTH AND ADDRESS 00407000
  470. CL R0,F6 FIELD LONGER THAN SIX CHARACTERS ??? 00408000
  471. BH CDS004 IF IT IS -- GOT AN ERROR 00409000
  472. CALL DMKCVTHB ... 00410000
  473. BNZ BADADDR1 BRANCH ON INVALID HEXLOC 00411000
  474. N R1,=XL4'FFFFFFFC' TRUNCATE TO A FULL WORD BOUNDARY 00412000
  475. LR R3,R1 SAVE THE ADDRESS 00413000
  476. OI SAVEWRK1+3,NEEDDATA INDICATE DATA SEARCH @VA07340 00413110
  477. STOLOCL BAL R8,STOSCAN SCAN FOR THE DATA TO STORE 00414000
  478. NI SAVEWRK1+3,X'FF'-NEEDDATA @VA07340 00414110
  479. STM R0,R1,SAVEWRK8 SAVE LENGTH AND ADR. OF HEXDATA ARG 00415000
  480. CL R0,F8 MAX OF 8 DIGITS PER WORD 00416000
  481. BH CDS005 ERROR IF THERE ARE MORE 00417000
  482. CALL DMKCVTHB CONVERT THE DATA TO BINARY 00418000
  483. BNZ CDS005 BRANCH IF INVALID HEXDATA FOUND 00419000
  484. LR R4,R1 SAVE THE DATA 00420000
  485. OI SAVEWRK1+3,STOWORD INDICATE STORING A FULL WORD @VA07033 00420500
  486. ALTER1 BAL R8,STOLOCA GET THE REAL STORAGE ADDRESS @V304735 00421000
  487. NI SAVEWRK1+3,X'FF'-STOWORD @VA07033 00421500
  488. SLR R0,R0 CLEAR FOR PROTECT KEY OF ZERO @V304735 00422000
  489. CALL DMKPSASC CHECK FOR SHARED PAGE. @V304735 00423000
  490. BZ NOTSHR1 NOT A SHARED PAGE @V304735 00424000
  491. TM APSTAT1,APUOPER IF WE ARE IN AP MODE, @V4075A0 00424100
  492. BNO NOAPSHR1 @V4075A0 00424200
  493. TM SAVEWRK1,VIRTM STCP TO SHARED PAGES @V4075A0 00424300
  494. BNO CDS004 GETS ERROR MESSAGES @V4075A0 00424400
  495. NOAPSHR1 EQU * @V4075A0 00424500
  496. OI SAVEWRK1,SHRPAGE INDICATE A SHARED PAGE @V304735 00425000
  497. CALL DMKPSACC CHECK IF PAGE CHANGED BY RUNUSER @V304735 00426000
  498. BZ NOTCHG1 NOT CHANGED BY RUNUSER @V304735 00427000
  499. TM SAVEWRK1,VIRTM WAS REQUEST FOR VIRT STORAGE ? @V304735 00428000
  500. BZ CDS161 NO - SEND ERROR MESSAGE @V304735 00429000
  501. NOTSHR1 EQU * @V304735 00430000
  502. NOTCHG1 EQU * @V304735 00431000
  503. TM SAVEWRK1,SHRPAGE IS IT A SHARED PAGE ? @V304735 00432000
  504. BZ NOTSHR2 NO @V304735 00433000
  505. TM SAVEWRK1,VIRTM WAS REQUEST FOR REAL STORAGE ? @V304735 00434000
  506. BZ NOTSHR2 YES - @V304735 00435000
  507. LR R2,R3 GET VITURAL ADDRESS @VA12533 00435500
  508. CALL DMKATSCF GIVE USER NON-SHARED SYSTEM @V60BC11 00436000
  509. NI SAVEWRK1,X'FF'-SHRPAGE UNFLAG SHARED @V304735 00437000
  510. B ALTER1 RE-ISSUE TRANS CALL @V304735 00438000
  511. SPACE 1 00439000
  512. NOTSHR2 ST R4,0(,R1) STORE 4 BYTES OF DATA @V304735 00440000
  513. OI SAVEWRK1,STORED INDICATE DATA STORED @V304735 00441000
  514. AL R3,F4 BUMP ADDRESS BY 4 BYTES @V304735 00442000
  515. TM SAVEWRK1,SHRPAGE SHARED PAGE ? @V304735 00443000
  516. BO WRTOUT1 YES - WRITE TO BACK-UP STORAGE. @V304735 00444000
  517. TM SAVEWRK1,VIRTM REQUEST FOR VIRTUAL STORAGE ? @V304735 00445000
  518. BO STOLOCL YES - GET NEXT ARGUMENT @V304735 00446000
  519. WRTOUT1 BAL R8,WRTSHR WRITE DATA TO BACK-UP STORAGE @V304735 00447000
  520. B STOLOCL PROCESS NEXT ARGUMENT @V304735 00448000
  521. EJECT 00449000
  522. * 00450000
  523. * STORE DATA ON A BYTE BOUNDARY 00451000
  524. * 00452000
  525. STOLOS STM R0,R1,SAVEWRK2 SAVE ARGUMENT LENGTH AND ADDRESS 00453000
  526. BCT R0,STOBMPSL SUBTRACT ONE FOR TYPE CODE 00454000
  527. LA R0,1 BUMP BACK FOR ERR MSG 00455000
  528. B CDS033 BRANCH ON INVALID ARGUMENT 00456000
  529. STOBMPSL LA R1,1(,R1) BUMP PAS TTYPE CODE 00457000
  530. STM R0,R1,SAVEWRK2 SAVE LENGTH AND ADDRESS OF ARGUMENT 00458000
  531. C R0,F6 IS ADDRESS FIELD LONGER THAN 6 CHARS ? 00459000
  532. BH CDS004 BRANCH ON INVALID ADDRESS 00460000
  533. CALL DMKCVTHB CONVERT THE ADDRESS TO BINARY 00461000
  534. BNZ BADADDR1 GBR. IF BAD 00462000
  535. LR R3,R1 SAVE THE ADDRESS 00463000
  536. OI SAVEWRK1+3,NEEDDATA INDICATE DATA SEARCH @VA07340 00463110
  537. BAL R8,STOSCAN SCAN FOR THE DATA TO STORE 00464000
  538. NI SAVEWRK1+3,X'FF'-NEEDDATA @VA07340 00464110
  539. LR R5,R0 SAVE THE DATA LENGTH 00465000
  540. LR R6,R1 SAVE THE DATA LOCATION 00466000
  541. STOLOSL LA R0,2 LOAD A DATA LENGTH OF 2 00467000
  542. LR R1,R6 LOAD THE DATA LOCATION 00468000
  543. STM R0,R1,SAVEWRK8 SAVE IN CASE OF ERROR 00469000
  544. CALL DMKCVTHB CONVERT 1 BYTE OF DATA TO BINARY 00470000
  545. BNZ CDS005 INVALID HEXDATA 00471000
  546. LR R4,R1 SAVE THE DATA 00472000
  547. ALTER2 BAL R8,STOLOCA GET THE REAL STORAGE ADDRESS @V304735 00473000
  548. SLR R0,R0 CLEAR FOR PROTECT KEY OF ZERO @V304735 00474000
  549. CALL DMKPSASC CHECK FOR SHARED PAGE. @V304735 00475000
  550. BZ NOTSHR3 NOT A SHARED PAGE @V304735 00476000
  551. TM APSTAT1,APUOPER IF WE ARE IN AP MODE, @V4075A0 00476100
  552. BNO NOAPSHR2 @V4075A0 00476200
  553. TM SAVEWRK1,VIRTM STCP TO SHARED PAGES @V4075A0 00476300
  554. BNO CDS004 GETS ERROR MESSAGES @V4075A0 00476400
  555. NOAPSHR2 EQU * @V4075A0 00476500
  556. OI SAVEWRK1,SHRPAGE INDICATE A SHARED PAGE @V304735 00477000
  557. CALL DMKPSACC CHECK IF PAGE CHANGED BY RUNUSER @V304735 00478000
  558. BZ NOTCHG3 NOT CHANGED BY RUNUSER @V304735 00479000
  559. TM SAVEWRK1,VIRTM WAS REQUEST FOR VIRT STORAGE ? @V304735 00480000
  560. BZ CDS161 NO - SEND ERROR MESSAGE @V304735 00481000
  561. NOTSHR3 EQU * @V304735 00482000
  562. NOTCHG3 EQU * @V304735 00483000
  563. TM SAVEWRK1,SHRPAGE IS IT A SHARED PAGE ? @V304735 00484000
  564. BZ NOTSHR4 NO @V304735 00485000
  565. TM SAVEWRK1,VIRTM WAS REQUEST FOR REAL STORAGE ? @VA04923 00486100
  566. BZ NOTSHR4 YES - @V304735 00487000
  567. LR R2,R3 GET VITURAL ADDRESS @VA12533 00487500
  568. CALL DMKATSCF GIVE USER NON-SHARED SYSTEM @V60BC11 00488000
  569. NI SAVEWRK1,X'FF'-SHRPAGE UNFLAG SHARED @V304735 00489000
  570. B ALTER2 RE-ISSUE TRANS CALL @V304735 00490000
  571. SPACE 1 00491000
  572. NOTSHR4 STC R4,0(,R1) STORE 1 BYTES OF DATA @V304735 00492000
  573. OI SAVEWRK1,STORED INDICATE DATA STORED @V304735 00493000
  574. S R5,F2 SUBTRACT 2 FROM LENGTH @V304735 00494000
  575. TM SAVEWRK1,SHRPAGE CHANGING A SHARED PAGE ? @V304735 00495000
  576. BO WRTOUT2 YES - WRITE IT TO BACK-UP STORAGE@V304735 00496000
  577. TM SAVEWRK1,VIRTM REQUEST FOR VIRTUAL STORAGE ? @V304735 00497000
  578. BO CHKLEN YES- CHECK REMAINING LENGTH @V304735 00498000
  579. WRTOUT2 BAL R8,WRTSHR WRITE DATA TO BACK-UP STORAGE @V304735 00499000
  580. CHKLEN LTR R5,R5 ANY MORE DATA LEFT TO PROCESS @V304735 00500000
  581. BNP STONEXT EXIT IF NO MORE DATA @V304735 00501000
  582. AL R3,F1 BUMP THE ADDRESS BY 1 @V304735 00502000
  583. LA R6,2(,R6) POINT TO NEXT BYTE OF DATA @V304735 00503000
  584. B STOLOSL STORE IN THE NEXT DATA BYTE @V304735 00504000
  585. EJECT 00505000
  586. STOLOCA TM SAVEWRK1,VIRTM IS THIS STORE INTO VIRTUAL STORAGE ? 00506000
  587. BZ STOLOCR NO, INTO REAL STORAGE 00507000
  588. CL R3,VMSIZE IS THIS A VALID VIRTUAL STORAGE ADDRESS ? 00508000
  589. BNL BIGADDR NO, IT IS TOO HIGH 00509000
  590. LR R1,R3 LOAD ADDRESS FOR TRANS MACRO 00510000
  591. TRANS 2,1,OPT=(BRING,DEFER),ADEX=CDS164 BRING IN @V304635 00511000
  592. * USER'S PAGE 00512000
  593. * INTO REAL STORAGE 00513000
  594. LR R1,R2 SAVE THE REAL ADDRESS 00514000
  595. TM SAVEWRK1+3,STOWORD IS A FULLWORD TO BE STORED? @VA07033 00514300
  596. BZ STOLOCAB NO @VA07033 00514600
  597. C R3,=XL4'50' IS THIS THE ADDRESS OF THE TIMER ? 00515000
  598. BNER R8 BRANCH IF NOT @V304735 00516000
  599. ST R4,VMTIMER YES - ALSO SAVE IT ON VMBLOK @V304735 00517000
  600. BR R8 RETURN REAL ADDRESS @V304735 00518000
  601. STOLOCAB DS 0H @VA07033 00518100
  602. C R3,=XL4'50' IS BYTE TO BE STORED IN TIMER? @VA07033 00518200
  603. BLR R8 NO - RETURN TO CALLER @VA07033 00518300
  604. C R3,=XL4'53' IS BYTE TO BE STORED IN TIMER? @VA07033 00518400
  605. BHR R8 NO - RETURN TO CALLER @VA07033 00518500
  606. STC R4,VMTIMER-X'50'(R3) UPDATE TIMER IN VMBLOK @VA07033 00518600
  607. BR R8 @VA07033 00518700
  608. SPACE 00519000
  609. STOLOCR L R2,=A(DMKSYSRM) 00520000
  610. L R2,0(,R2) LOAD THE REAL STORAGE SIZE 00521000
  611. CLR R3,R2 IS THIS A VALID REAL STORAGE ADDRESS ? 00522000
  612. BNL BIGADDR NO, IT IS TOO HIGH 00523000
  613. LR R1,R3 REAL ADDRESS TO R1 FOR STORE 00524000
  614. L R15,=A(DMKSYSAP) IF THE SYSTEM HAS THE @V4075A0 00524100
  615. CLI 0(R15),C'Y' USER SPEC'D SYSCOR @V4075A0 00524125
  616. BNE EQATR2R1 AP OPTION, WE CHECK AND@V4075A0 00524150
  617. L R0,XPAGNUM @V4075A0 00524175
  618. TM SAVEWRK1,MPREF+NPREF PERHAPS RECOMPUTE THE @V4075A0 00524200
  619. BZ ABSPEC EFFECTIVE ADDRESS @V4075A0 00524225
  620. TM SAVEWRK1,NPREF DID USER SAY 'M' OR 'N' @V4075A0 00524250
  621. BO RWEN GO FIX UP FOR 'N' SPECIFIED @V4075A0 00524275
  622. RWEM TM APSTAT1,PROCIO HE SAID 'M', ARE WE 'M' ? @V4075A0 00524300
  623. BO EQATR2R1 YES, DO NOT RECOMPUTE ADDRES@V4075A0 00524325
  624. PFIXCOMP NR R0,R1 GET PAGE NUMBER @V4075A0 00524350
  625. BZ ADDPREFB OTHER PROCESSOR'S PSA. POINT 2 IT@V4075A0 00524375
  626. C R0,PREFIXB ABSOLUTE 0 IN OTHER PROCESSOR'S @V4075A0 00524400
  627. BNE ISITPRFA NO. GO SEE IF IT IS OUR PSA! @V4075A0 00524425
  628. GETABS0 S R1,PREFIXB YES, POINT TO ABSOLUTE 0 VIA OUR @V4075A0 00524450
  629. ADDPREFA A R1,PREFIXA PREFIX REGISTER @V4075A0 00524475
  630. B EQATR2R1 @V4075A0 00524500
  631. SPACE 2 00524525
  632. ADDPREFB A R1,PREFIXB POINT TO OTHER PROCESSOR PSA @V4075A0 00524550
  633. B EQATR2R1 @V4075A0 00524575
  634. SPACE 2 00524600
  635. RWEN TM APSTAT1,PROCIO USER SAID 'N'. ARE WE 'N' ? @V4075A0 00524625
  636. BNO EQATR2R1 YES @V4075A0 00524650
  637. B PFIXCOMP NO. SEE ABOUT RECOMPUTING @V4075A0 00524675
  638. SPACE 2 00524700
  639. ABSPEC NR R0,R1 ABSOLUTE 0 ? @V4075A0 00524725
  640. BZ ADDPREFA YES, UNDO EFFECT OF PREFIX REG @V4075A0 00524750
  641. ISITPRFA C R0,PREFIXA OUR PSA ? @V4075A0 00524775
  642. BNE EQATR2R1 NO @V4075A0 00524800
  643. SUBPREFA S R1,PREFIXA YES, UNDO OUR PREFIX REG @V4075A0 00524825
  644. EQATR2R1 LR R2,R1 SAVE ADDRESS IN R2 ALSO @V4075A0 00524850
  645. BR R8 RETURN REAL ADDRESS 00526000
  646. SPACE 2 00527000
  647. EJECT 00528000
  648. * 00529000
  649. * STORE PSW 00530000
  650. * 00531000
  651. STOPSW EQU * 00532000
  652. LR R2,R0 LENGTH TO R2 00533000
  653. BCTR R2,0 MINUS ONE FOR 'EX' 00534000
  654. EX R2,PSWCOMP MAKE SURE IS PSW 00535000
  655. BNE CDS026 BRANCH IF NO GOOD 00536000
  656. OI SAVEWRK1+3,NEEDDATA INDICATE DATA SEARCH @VA07340 00536110
  657. BAL R8,STOSCAN SCAN FOR DATA 00537000
  658. NI SAVEWRK1+3,X'FF'-NEEDDATA @VA07340 00537110
  659. STM R0,R1,SAVEWRK8 SAVE FOR POSSIBLE ERR MSG 00538000
  660. CL R0,F8 MORE THAN EIGHT DIGITS 00539000
  661. BH CDS005 INVALID IF IT IS 00540000
  662. CALL DMKCVTHB CONVERT THE DATA TO BINARY 00541000
  663. BNZ CDS005 INVALID HEXDATA 00542000
  664. MVC SAVEWRK4(4),VMPSW+4 MAY HAVE TO PUT BACK LATER @VA04210 00542300
  665. ST R1,SAVEWRK5 SAVE 1ST ARG IN BINARY FORM @VA04210 00542600
  666. ST R1,VMPSW+4 STORE IN THE 2ND HALF OF THE VIRTUAL PSW 00543000
  667. OI SAVEWRK1,STORED INDICATE DATA STORED 00544000
  668. AIF (NOT &TRACE(6)).NTR2 00545000
  669. BAL R8,CHKTRACE CHECK WHETHER TRACE CALLS ARE NEEDED 00546000
  670. .NTR2 BAL R8,STOSCAN SCAN FOR THE NEXT ARGUMENT 00547000
  671. STM R0,R1,SAVEWRK8 SAVE ADDR AND LENGTH @VA04214 00547100
  672. MVC VMPSW+4(4),SAVEWRK4 RESTORE VMPSW TO ORIG VALUE @VA04210 00547200
  673. CL R0,F8 ARGUMENT TOO LONG ??? 00548000
  674. BH CDS005 YES - GO SEND ERROR MESSAGE @VA04210 00549100
  675. CALL DMKCVTHB CONVERT 2ND ARG TO BINARY @VA04210 00550100
  676. BNZ CDS005 BRANCH ON INVALID HEXDATA @VA04210 00551100
  677. L R0,SAVEWRK5 RESTORE 1ST ARG IN BINARY FORM @VA04210 00552100
  678. STM R0,R1,VMPSW ESTABLISH NEW VMPSW @VA04210 00553100
  679. TM VMPSTAT,VMV370R ALLOWED EC MODE ??? 00554000
  680. BZ STONOTR BRANCH IF NO 00555000
  681. TM VMPSW+1,EXTMODE EXTENDED PSW? 00556000
  682. BO STOPSWEX YES - CHECK IT 00557000
  683. TM VMESTAT,VMEXTCM OUT OF EC MODE? 00558000
  684. BZ STONEXT NO - GET THE NEXT ARGUMENT @VA04210 00559100
  685. CALL DMKVATBC CLEAR SHADOW TABLES 00560000
  686. NI VMESTAT,X'FF'-VMEXTCM ...AND STATUS BIT 00561000
  687. B STONEXT GET THE NEXT ARGUMENT @VA04210 00562000
  688. EJECT 00562500
  689. STOPSWEX EQU * EC-MODE PSW STORED 00563000
  690. OI VMESTAT,VMEXTCM INTO EC MODE 00564000
  691. TM VMPSW,TRANMODE TRANSLATE MODE ALSO? 00565000
  692. BZ STOPSWEC NO 00566000
  693. TM VMOSTAT,VMSHR IS USER EC,TRANSLATE AND SHARED? @VA09151 00566100
  694. BNO NOTSHR NO NOT SHARED....... @VA09151 00566200
  695. CALL DMKVATBC YES MUST THROW AWAY SHADOW TABLES@VA09151 00566300
  696. NOTSHR DS 0H @VA09151 00566400
  697. CALL DMKVATMD ENTER TRANSLATE MODE 00567000
  698. STOPSWEC EQU * CHECK "MUST BE ZERO" BITS 00568000
  699. TM VMPSW,X'B8' ARE BITS 0 AND 2-4 ZERO ???? 00569000
  700. BNZ STOPSWBD NO - THAT'S ILLEGAL @VA04210 00570500
  701. TM VMPSW+2,X'C0' HOW ABOUT BITS 16, 17 ???? @VA04210 00571000
  702. BNZ STOPSWBD NO - INVALID PSW @VA04210 00571500
  703. CLC VMPSW+3(2),ZEROES BITS 24-39 ???? @VA04210 00572000
  704. BE STONEXT OK - ALL TESTS PASSED @VA04210 00572500
  705. STOPSWBD EQU * ILLEGAL PSW STORED @VA04210 00573000
  706. CALL DMKCVTBH GET 2ND HALF IN PRT'BLE HEX FORM @VA04210 00573500
  707. STCM R0,15,SAVEWRK4+2 STASH AWAY 00575000
  708. STCM R1,15,SAVEWRK5+2 . . . 00576000
  709. L R1,VMPSW LOAD BAD FIRST HALF 00577000
  710. CALL DMKCVTBH CONVERT TO PRINTABLE FORM 00578000
  711. STM R0,R1,SAVEWRK2 STASH IT AWAY 00579000
  712. MVC SAVEWRK4(2),BLANKS BLANK SPACE BETWEEN FIRST & LAST 00580000
  713. LA R0,18 LENGTH OF FIELD 00581000
  714. LA R1,SAVEWRK2 ADDRESS OF FIELD 00582000
  715. AIF (NOT &TRACE(6)).NTR3 00584000
  716. NI SAVEWRK1,255-CALTRCIT DON'T TRY TO CALL DMKTRCIT 00585000
  717. .NTR3 ANOP 00586000
  718. B CDS012 GO SEND THE ERROR MESSAGE 00587000
  719. SPACE 00588000
  720. STONOTR EQU * 00589000
  721. TM VMPSW+1,EXTMODE ASCII BIT ON? 00590000
  722. BO STOPSWBD YES - ILLEGAL 00591000
  723. B STONEXT GET THE NEXT ARGUMENT 00596000
  724. SPACE 2 00597000
  725. PSWCOMP CLC 0(0,R1),=C'PSW ' EXECUTED COMPARE 00598000
  726. AIF (NOT &TRACE(6)).NTR4 00599000
  727. CHKTRACE TM VMTRCTL,VMTRBRIN TRACING INSTRUCTIONS / BRANCHES ? 00600000
  728. BCR 8,R8 <BZ> NOPE - FORGET IT. 00601000
  729. CALL DMKTRCPB PUT BACK OLD USER INSTRUCTIONS 00602000
  730. OI SAVEWRK1,CALTRCIT SET FLAGBIT TO CALL DMKTRCIT LATER 00603000
  731. BR R8 AND EXIT 00604000
  732. .NTR4 ANOP 00605000
  733. EJECT 00606000
  734. * 00607000
  735. * STORE GENERAL PURPOSE REGISTER(S) 00608000
  736. * 00609000
  737. STOGPR STM R0,R1,SAVEWRK2 SAVE ARGUMENT LENGTH AND ADDRESS 00610000
  738. BCT R0,STOBMPGP SUBTRACT ONE FOR TYPE CODE 00611000
  739. LA R0,1 BUMP BACK FOR ERR MSG 00612000
  740. B CDS010 BRANCH IF NO REG. ADDRESS 00613000
  741. STOBMPGP LA R1,1(,R1) BUMP PAST TYPE CODE 00614000
  742. C R0,F2 IS ADDRESS FIELD LONGER THAN 2 CHARS ? 00615000
  743. BH CDS010 INVALID REG REQUEST 00616000
  744. CALL DMKCVTDB ASSUME DECIMAL NUMBER - TRY TO CONVERT 00617000
  745. BZ STOGPRA BRANCH IF SUCCESSFUL CONVERSION 00618000
  746. CALL DMKCVTHB TRY HEX TO BINARY CONVERSION 00619000
  747. BNZ BADREG BRANCH IF ERROR IN CONVERT 00620000
  748. STOGPRA LR R3,R1 SAVE THE REGISTER NUMBER 00621000
  749. OI SAVEWRK1+3,NEEDDATA INDICATE DATA SEARCH @VA07340 00621110
  750. STOGPRL BAL R8,STOSCAN SCAN FOR THE DATA TO STORE 00622000
  751. NI SAVEWRK1+3,X'FF'-NEEDDATA @VA07340 00622110
  752. STM R0,R1,SAVEWRK8 SAVE LEN AND ADR FOR POSSIBLE ERROR 00623000
  753. CL R3,F15 IS THE REGISTER NUMBER GREATER THAN 15 ? 00624000
  754. BH CDS163 BRANCH IF MAX. REG. ADDRESS EXCEEDED 00625000
  755. CL R0,F8 MAX OF 8 DIGITS 00626000
  756. BH CDS005 SEND ERROR MESSAGE IF THERE ARE MORE 00627000
  757. CALL DMKCVTHB CONVERT THE DATA TO BINARY 00628000
  758. BNZ CDS005 BR. ON INVALID HEXDATA 00629000
  759. LR R4,R3 SAVE THE REGISTER NUMBER 00630000
  760. SLA R4,2 CONVERT IT TO A FULL WORD DISPLACEMENT 00631000
  761. ST R1,VMGPRS(R4) STORE THE DATA INTO THE VIRTUAL GPR 00632000
  762. OI SAVEWRK1,STORED INDICATE DATA STORED 00633000
  763. LA R3,1(,R3) ADD 1 TO THE REGISTER NUMBER 00634000
  764. B STOGPRL STORE INTO THE NEXT REGISTER 00635000
  765. EJECT 00636000
  766. * 00637000
  767. * STORE FLOATING POINT REGISTER(S) 00638000
  768. * 00639000
  769. STOFPR STM R0,R1,SAVEWRK2 SAVE ARGUMENT LENGTH AND ADDRESS 00640000
  770. BCT R0,STOBMPFP SUBTRACT ONE FOR TYPE CODE 00641000
  771. LA R0,1 BUMP BACK FOR ERR MSG 00642000
  772. B CDS010 BRANCH IF NO REG ADDRESS IS FOUND 00643000
  773. STOBMPFP LA R1,1(,R1) BIMP PAST TYPE CODE 00644000
  774. C R0,F1 IS ADDRESS FIELD LONGER THAN 1 CHAR ? 00645000
  775. BH CDS010 INVALID REG. REQUEST 00646000
  776. CALL DMKCVTDB CONVERT THE REGISTER NUMBER TO BINARY 00647000
  777. BNZ CDS010 ADDRESS DIDN'T CONVERT - TAKE BRANCH 00648000
  778. N R1,=XL4'FFFFFFFE' TRUNCATE IT TO AN EVEN NUMBER 00649000
  779. LR R3,R1 SAVE THE REGISTER NUMBER 00650000
  780. OI SAVEWRK1+3,NEEDDATA INDICATE DATA SEARCH @VA07340 00650110
  781. STOFPRL BAL R8,STOSCAN SCAN FOR THE DATA TO STORE 00651000
  782. NI SAVEWRK1+3,X'FF'-NEEDDATA @VA07340 00651110
  783. STM R0,R1,SAVEWRK8 SAVE FOR POSSIBLE ERROR 00652000
  784. CL R3,F6 IS THE REGISTER NUMBER GREATER THAN 6 ? 00653000
  785. BH CDS163 MAX. REG. ADDRESS EXCEEDED 00654000
  786. CL R0,F16 UP TO 16 DIGITS ALLOWED FOR FPR 00655000
  787. BH CDS005 ERROR IF HAVE MORE 00656000
  788. MVI SAVEWRK2,X'F0' MOVE HEX ZEROES INTO WORK AREA 00657000
  789. MVC SAVEWRK2+1(15),SAVEWRK2 ... 00658000
  790. LR R2,R0 SAVE THE FIELD LENGTH 00659000
  791. BCTR R2,0 SUBTRACT 1 FROM LENGTH FOR THE MVC INSTR 00660000
  792. EX R2,MVCFPR MOVE THE DATA TO THE WORK AREA 00661000
  793. LA R0,8 LOAD A DATA LENGTH OF 8 00662000
  794. LA R1,SAVEWRK2 LOAD THE DATA ADDRESS 00663000
  795. CALL DMKCVTHB CONVERT THE 1ST HALF TO BINARY 00664000
  796. BNZ CDS005 INVALID HEXDATA FOUND IF BRANCH 00665000
  797. LR R4,R3 SAVE THE REGISTER NUMBER 00666000
  798. SLA R4,2 CONVERT IT TO A DOUBLE WORD DISPLACEMENT 00667000
  799. ST R1,VMFPRS(R4) STORE IN THE 1ST HALF OF THE VIRTUAL FPR 00668000
  800. OI SAVEWRK1,STORED INDICATD DATA STORED 00669000
  801. LA R0,8 LOAD A DATA LENGTH OF 8 00670000
  802. LA R1,SAVEWRK4 LOAD THE DATA ADDRESS 00671000
  803. CALL DMKCVTHB CONVERT THE 2ND HALF TO BINARY 00672000
  804. BNZ CDS005 INVALID HEXDATA-TAKE BRANCH 00673000
  805. ST R1,VMFPRS+4(R4) STORE IN 2ND HALF OF THE VIRTUAL FPR 00674000
  806. LA R3,2(,R3) ADD 2 TO THE REGISTER NUMBER 00675000
  807. B STOFPRL STORE INTO THE NEXT REGISTER 00676000
  808. SPACE 3 00677000
  809. MVCFPR MVC SAVEWRK2(0),0(R1) MOVE THE DATA TO THE WORK AREA 00678000
  810. EJECT 00679000
  811. * 00680000
  812. * STORE CONTROL REGISTER(S) 00681000
  813. * 00682000
  814. STOCRG EQU * 00683000
  815. MVI SAVEWRK1+2,X'00' ZIP THE FLAG BYTE 00684000
  816. STM R0,R1,SAVEWRK2 SAVE ADDRESS AND LENGTH OF ARGUMENT 00685000
  817. BCT R0,STOBMPCR SUBTRACT ONE FOR TYPE CODE 00686000
  818. LA R0,1 BUMP BACK FOR ERR MSG 00687000
  819. B CDS010 NO REG ADDRESS FOUND 00688000
  820. STOBMPCR LA R1,1(,R1) BUMP PAST TYPE CODE 00689000
  821. C R0,F2 IS ADDRESS FIELD LONGER THAN 2 CHARS ? 00690000
  822. BH CDS010 INVALID REG REQUEST 00691000
  823. CALL DMKCVTDB ASSUME DECIMAL NUMBER - TRY TO CONVERT 00692000
  824. BZ STOCRGB BRANCH IF SUCCESSFUL CONVERSION 00693000
  825. CALL DMKCVTHB TRY HEX TO BINARY CONVERSION 00694000
  826. BNZ BADREG REG. ADDRESS DIDN'T CONVERT 00695000
  827. STOCRGB LR R3,R1 SAVE THE REGISTER NUMBER 00696000
  828. OI SAVEWRK1+3,NEEDDATA INDICATE DATA SEARCH @VA07340 00696110
  829. STOCRGL BAL R8,STOSCAN SCAN FOR THE DATA TO STORE 00697000
  830. NI SAVEWRK1+3,X'FF'-NEEDDATA @VA07340 00697110
  831. STM R0,R1,SAVEWRK8 SAVE FOR POSSIBLE ERROR 00698000
  832. CL R3,F15 IS THE REGISTER NUMBER GREATER THAN 15 ? 00699000
  833. BH CDS163 MAX. REG. ADDRESS EXCEEDED 00700000
  834. CL R0,F8 MAX OF 8 DIGITS 00701000
  835. BH CDS005 SEND ERROR MESSAGE IF MORE 00702000
  836. CALL DMKCVTHB CONVERT THE DATA TO BINARY 00703000
  837. BNZ CDS005 INVALID HEXDATA FOUND 00704000
  838. LTR R4,R3 SAVE REGISTER NUMBER 00705000
  839. BZ STOCRG0 CHECK DATA VALIDITY 00706000
  840. TM VMPSTAT,VMV370R ANY OTHER C-REGS? 00707000
  841. BZ STOCRGA NO - SKIP ALL OF THEM 00708000
  842. C R4,F1 C-REG 1? 00709000
  843. BE STOCRG1 YES - CHECK VALIDITY 00710000
  844. STOCRGS EQU * STORE CONTROL REG DATA 00711000
  845. SLA R4,2(0) CONVERT REG NO. TO FULL-WORD INDEX 00712000
  846. L R5,VMECEXT LOAD ECBLOK BASE REGISTER 00713000
  847. USING ECBLOK,R5 00714000
  848. ST R1,EXTCR0(R4) STORE DATA INTO VIRTUAL CONTROL REGISTER 00715000
  849. OI SAVEWRK1,STORED INDICATE DATA STORED 00716000
  850. DROP R5 00717000
  851. STOCRGA LA R3,1(,R3) ADD 1 TO THE REGISTER NUMBER 00718000
  852. B STOCRGL STORE INTO THE NEXT REGISTER 00719000
  853. EJECT 00720000
  854. STOCRG0 EQU * C-REG 0 SPECIFIED 00721000
  855. TM VMPSTAT,VMV370R C - REGS IN ECBLOK ??? 00722000
  856. BZ STOCRGC NO - SKIP THE ERROR-CHECKING 00723000
  857. AIF (NOT &TRACE(6)).NTR5 00724000
  858. BAL R8,CHKTRACE CHECK WHETHER TRACE CALLS ARE NEEDED 00725000
  859. .NTR5 ANOP 00726000
  860. LA R8,STOCREG0 SET "RETURN REGISTER" IN CASE OF AN ERROR 00727000
  861. CL R1,=X'000000E0' RESET VALUE ??? 00728000
  862. BE STOCRGE YES - SEND WARNING 00729000
  863. STCM R1,4,SAVEWRK1+1 SAVE CONTROL BYTE 00730000
  864. TM SAVEWRK1+1,X'C0' CHECK PAGE SIZE BITS 00731000
  865. BNM STOCRGE NO GOOD - SEND WARNING 00732000
  866. TM SAVEWRK1+1,X'0F' MUST BE ZERO BITS OFF ??? 00733000
  867. BNZ STOCRGE NO - SEND WARNING 00734000
  868. STOCREG0 EQU * 00735000
  869. OI VMESTAT,VMNEWCR0 NEW C-REG 0 00736000
  870. B STOCRGS CONTINUE SCAN 00737000
  871. STOCRGC EQU * BC-MODE MACHINE "ST X0" 00738000
  872. ST R1,VMVCR0 C-REG 0 IS IN VMBLOK 00739000
  873. OI SAVEWRK1,STORED INDICATE DATA STORED 00740000
  874. B STOCRGL CONTINUE SCAN 00741000
  875. SPACE 00742000
  876. STOCRG1 EQU * C-REG 1 SPECIFIED 00743000
  877. AIF (NOT &TRACE(6)).NTR6 00744000
  878. BAL R8,CHKTRACE CHECK WHETHER TRACE CALLS ARE NEEDED 00745000
  879. .NTR6 ANOP 00746000
  880. LA R5,X'3F' CHECK LOW SIX BITS 00747000
  881. NR R5,R1 ...MUST BE ZERO 00748000
  882. BZ STOCREG1 IT'S OK 00749000
  883. BAL R8,STOCRGE NO GOOD - SEND WARNING (& CONTINUE) 00750000
  884. STOCREG1 OI VMESTAT,VMINVSEG NEW SEGMENT TABLE ORIGIN 00751000
  885. B STOCRGS GO DO STORE 00752000
  886. SPACE 00753000
  887. STOCRGE EQU * SEND 'W' ERROR MESSAGE (R8 = RETURN-REGISTER) 00754000
  888. STM R0,R2,SAVEWRK5 REMEMBER R0 THRU R2 (RESTORED LATER) 00755000
  889. AIF (NOT &TRACE(6)).NTR7 00756000
  890. NI SAVEWRK1,255-CALTRCIT DON'T TRY TO CALL DMKTRCIT 00757000
  891. .NTR7 ANOP 00758000
  892. MVC SAVEWRK2+2(2),ZEROES BINARY ZEROS TO SEP. THE FIELDS 00759000
  893. CALL DMKCVTBH CONVERT THE HEXDATA 00760000
  894. STM R0,R1,SAVEWRK3 STORE HEXDATA FIELD 00761000
  895. LR R1,R4 REG NUMBER TO R1 00762000
  896. CALL DMKCVTBH CONVERT THIS NUMBER 00763000
  897. STH R1,SAVEWRK2 STORE REG NUMBER 00764000
  898. LA R0,12 LENGTH OF FIELDS 00765000
  899. LA R1,SAVEWRK2 WHERE ITS AT 00766000
  900. STOWRNG L R2,=X'80E600A2' LOAD PARM REG FOR ERM 00767000
  901. ICM R0,14,MODID+3 LOAD MODULE ID 00768000
  902. CALL DMKERMSG SEND THE WARNING 00769000
  903. LM R0,R2,SAVEWRK5 RESTORE REGISTERS FOR STORE 00770000
  904. BR R8 RETURN TO STOCREG0 OR STOCREG1. 00771000
  905. EJECT 00772000
  906. BADADDR LM R0,R1,SAVEWRK2 LOAD LENGTH AND ADDRESS OF BAD ARG. 00773000
  907. BCTR R0,0 REDUCE COUNT BY ONE 00774000
  908. LA R1,1(,R1) SKIP PAST TYPE CODE 00775000
  909. B CDS004 . . . 00776000
  910. SPACE 00777000
  911. BADADDR1 LM R0,R1,SAVEWRK2 LENGTH AND ADDRESS OF BAD ARG. 00778000
  912. B CDS004 . . . 00779000
  913. SPACE 00780000
  914. BIGADDR LM R0,R1,SAVEWRK2 LOAD LENGTH AND ADDRESS OF BAD ARG. 00781000
  915. B CDS160 . . . 00782000
  916. SPACE 00783000
  917. BADREG LM R0,R1,SAVEWRK2 LENGTH AND ADDRESS OF BAD ARG. 00784000
  918. B CDS010 . . . 00785000
  919. SPACE 00786000
  920. CDS004 LA R2,4 ERROR CODE 00787000
  921. B CALLERM . . . 00788000
  922. SPACE 00789000
  923. CDS005 LM R0,R1,SAVEWRK8 LOAD LEN AND ADR OF FIELD 00790000
  924. LA R2,5 ERROR CODE 00791000
  925. B CALLERM . . . 00792000
  926. SPACE 00793000
  927. CDS010 LA R2,10 ERROR CODE 00794000
  928. B CALLERM . . . 00795000
  929. SPACE 00796000
  930. CDS012 LA R2,12 ERROR CODE 00797000
  931. B CALLERM . . . 00798000
  932. SPACE 00799000
  933. CDS026 LA R2,26 ERROR CODE 00800000
  934. B NOVAR . . . 00801000
  935. SPACE 00802000
  936. CDS033 LA R2,33 ERROR CODE 00803000
  937. B NOVAR . . . 00804000
  938. SPACE 00805000
  939. CDS160 LA R2,160 ERROR CODE 00806000
  940. B CALLERM . . . 00807000
  941. SPACE 00808000
  942. CDS161 DS 0H @VA07351 00809100
  943. CALL DMKVMASH FLAG ALL CHANGED SHARED PAGES @VA07351 00809200
  944. XC SAVEWRK2(20),SAVEWRK2 CLEAR AREA FOR MESSAGE @V304735 00810000
  945. LR R1,R2 CONVERT ADDRESS TO PRINTABLE @V304735 00811000
  946. CALL DMKCVTBH ..... @V304735 00812000
  947. STCM R0,B'0011',SAVEWRK2 SAVE FIRST PART @V304735 00813000
  948. STCM R1,B'1111',SAVEWRK2+2 COMPLETE FULL ADDRESS @V304735 00814000
  949. L R15,RUNUSER GET VMBLOK FOR CURRENT RUNUSER @V304735 00815000
  950. MVC SAVEWRK4(8),VMUSER-VMBLOK(R15) GET USERID @V304735 00816000
  951. LA R0,16 LENGTH FOR MESSAGE WRITTER @V304735 00817000
  952. LA R1,SAVEWRK2 AND ADDRESS OF MESSAGE @V304735 00818000
  953. LA R2,161 AND THE MESSAGE NUMBER @V304735 00819000
  954. B CALLERM NOW CALL THE MESSAGE WRITTER @V304735 00820000
  955. LA R2,161 ERROR CODE 00821000
  956. B CALLERM . . . 00822000
  957. SPACE 00823000
  958. CDS162 LA R2,162 ERROR CODE 00824000
  959. B CALLERM . . . 00825000
  960. SPACE 00826000
  961. CDS163 LA R2,163 ERROR CODE 00827000
  962. B NOVAR ... @V304635 00828000
  963. SPACE 1 00829000
  964. CDS164 LM R0,R1,SAVEWRK2 LENGTH AND ADDRESS OF FIELD @V304635 00830000
  965. LA R2,164 ERROR = NON-ADDRESSABLE STORAGE @V304635 00831000
  966. B CALLERM ... @V304635 00832000
  967. SPACE 1 00833000
  968. SPACE 00834000
  969. NOVAR SR R1,R1 ZERO ARGUMENT REG 00835000
  970. CALLERM ICM R0,14,MODID+3 LOAD MODULE ID 00836000
  971. ST R2,SAVER2 STASH THE RETURN CODE 00837000
  972. O R2,=XL4'80000000' INDICATE TO RETURN HERE 00838000
  973. CALL DMKERMSG 00839000
  974. SPACE 00840000
  975. EJECT 00841000
  976. EXIT EQU * 00842000
  977. TM SAVEWRK1,SHPGNWRT DID WE FAIL TO WRITE A @V4075A0 00842100
  978. BNO SHPGWTN CHANGED SHARED PAGE ? @V4075A0 00842200
  979. NI SAVEWRK1,X'FF'-SHPGNWRT YES, RESET FLAG TO @V4075A0 00842300
  980. LA R2,166 SEND ERROR MSG @V4075A0 00842400
  981. B NOVAR VIA DMKERMSG @V4075A0 00842500
  982. SHPGWTN EQU * @V4075A0 00842600
  983. TM VMPSTAT,VMV370R EXTENDED-CONTROL MACHINE? 00843000
  984. BZ RETURN NO - CONTINUE 00844000
  985. TM VMESTAT,VMNEWCR0+VMINVSEG+VMINVPAG 00845000
  986. BZ RETURN NOTHING NEEDS CLEANUP 00846000
  987. CALL DMKVATAB CLEAN UP SHADOW TABLES 00847000
  988. RETURN EQU * NOW EXIT (SHORTLY, ANYHOW) ... 00848000
  989. AIF (NOT &TRACE(6)).NTR8 00849000
  990. TM SAVEWRK1,CALTRCIT CALL TO DMKTRCIT NEEDED ? 00850000
  991. BZ RETURNX NOPE - NO PROBLEM. 00851000
  992. TM VMPSW+1,WAIT IS USER IN THE WAIT STATE ? 00852000
  993. BO RETURNX IF YES, LEAVE WELL ENOUGH ALONE. 00853000
  994. L R1,VMPSW+4 OK - WHERE-TO-GO INTO R1, 00854000
  995. CALL DMKTRCIT CALL INSTRUCTION-TRACE SETTER-UPPER 00855000
  996. RETURNX DS 0H NOW REALLY EXIT ... 00856000
  997. .NTR8 EXIT 00857000
  998. EJECT 00858000
  999. WRTSHR LR R15,R1 TRANSFER REAL PAGE ADDRESS @V304735 00859000
  1000. N R15,XPAGNUM DROP OFF DISPLACEMENT @V304735 00860000
  1001. SRL R15,8 GET INDEX INTO CORTABLE @V304735 00861000
  1002. AL R15,ACORETBL NOW ADDRESS OF CORTABLE ENTRY @V304735 00862000
  1003. TM CORFLAG-CORTABLE(R15),CORSHARE SHARED PAGE ? @V304735 00865000
  1004. BZR R8 RETURN IF NOT SHARED PAGE @V304735 00866000
  1005. LR R2,R1 SAVE REAL PAGE ADDRESS @V304735 00867000
  1006. LA R0,CPEXSIZE SIZE OF ONE CPEXBLOK @V304735 00868000
  1007. CALL DMKFREE GET IT FROM FREE STORAGE @V304735 00869000
  1008. USING CPEXBLOK,R1 ADDRESSABILITY @V304735 00870000
  1009. STM R0,R15,CPEXR0 SAVE ALL REGISTERS @V304735 00871000
  1010. ST R5,CPEXR14 R5 WILL BE DESTROYED @V304735 00872000
  1011. ST R7,CPEXR15 SAME HOLDS TRUE FOR R7 @V304735 00873000
  1012. LA R15,WRTRTN CPEXBLOK RETURN ADDRESS @V304735 00874000
  1013. ST R15,CPEXADD STORE IT AWAY @V304735 00875000
  1014. LR R15,R2 LOAD REAL PAGE ADDRESS @V304735 00876000
  1015. N R15,XPAGNUM STRIP OFF DISPLACEMENT @V304735 00877000
  1016. LR R14,R15 SAVE PAGE ADDRESS MINUS DISP. @V304735 00878000
  1017. SRL R15,8 GET INDEX INTO CORTABLE @V304735 00879000
  1018. AL R15,ACORETBL FIND ACTUAL CORTABLE ENTRY @V304735 00880000
  1019. ST R15,CPEXR7 SAVE THE ADDRESS FOR DMKPAG @V304735 00881000
  1020. ISK R0,R14 GET REAL STORAGE KEY @V304735 00882000
  1021. N R0,=A(X'FFFFF8') CLEAR REF/CHG BITS. @V304735 00883000
  1022. SSK R0,R14 SET HARDWARE KEY @V304735 00884000
  1023. LA R14,2048(,R14) SECOND HALF OF REAL PAGE @V304735 00885000
  1024. ISK R0,R14 GET REAL STORAGE KEY @V304735 00886000
  1025. N R0,=A(X'FFFFF8') CLEAR REF/CHG BITS @V304735 00887000
  1026. SSK R0,R14 SET IN NEW STORAGE KEY @V304735 00888000
  1027. MVC CPEXR0,F5 INDICATE 'WRITE' TO DMKPAG @V304735 00889000
  1028. L R14,CORSWPNT-CORTABLE(,R15) GET SWAP TABLE ENTRY@V304735 00890000
  1029. TM SWPFLAG-SWPFLAG(R14),SWPRECMP DO WE HAVE TO @V4075A0 00890100
  1030. BNO GOTSLOT REALLOCATE AUX STOR FOR PAGE@V4075A0 00890150
  1031. ST R14,TEMPR14 SAVE OVER PGT CALL @VA09046 00890175
  1032. LR R0,R1 YES, TUCK AWAY CPEXBLOK POINTER @V4075A0 00890200
  1033. LR R9,R14 SAVE SWAPTABLE ENTRY ADDRESS @VA09046 00890210
  1034. LR R10,R15 SAVE CORE TABLE ENTRY ADDRESS @VA09046 00890220
  1035. CALL DMKPGTPG ASK FOR NEW AUX STOR SLOT @V4075A0 00890250
  1036. LR R14,R9 RESTORE SWAPTABLE ENTRY ADDRESS @VA09046 00890260
  1037. LR R15,R10 RESTORE CORE TABLE ENTRY ADDRESS @VA09046 00890270
  1038. LTR R1,R1 DID WE GET ONE @V4075A0 00890300
  1039. BZ NOAUXAVL NO, TELL USER @V4075A0 00890350
  1040. L R14,TEMPR14 RESTORE @VA09046 00890375
  1041. NI SWPFLAG-SWPFLAG(R14),X'FF'-SWPRECMP @V4075A0 00890400
  1042. ST R1,SWPCYL-SWPFLAG(R14) SET NEW AUX POINTER @V4075A0 00890450
  1043. LR R1,R0 RESTORE CPEXBLOK ADDRESSING @V4075A0 00890500
  1044. GOTSLOT EQU * @V4075A0 00890550
  1045. ST R14,CPEXR5 SAVE IT FOR DMKPAG @V304735 00891000
  1046. OI SWPFLAG-SWPFLAG(R14),SWPTRANS FLAG PAGE IN @V304735 00892000
  1047. * TRANS. 00893000
  1048. L R14,CORPGPNT-CORTABLE(,R15) GET ADDRESS OF @V304735 00894000
  1049. * PAGE TBL 00895000
  1050. OI PAGCORE+1-PAGCORE(R14),PAGINVAL ENQUEUE ON PAGE @V304735 00896000
  1051. L R14,=A(DMKPTRWQ) STACK OF WRITE QUEUE FOR DMKPAG@V304735 00897000
  1052. L R0,0(,R14) PUSH DOWN PAGE @V304735 00898000
  1053. ST R1,0(,R14) WRITE REQUEST @V304735 00899000
  1054. ST R0,CPEXFPNT PUT IT IN THE CHAIN @V304735 00900000
  1055. GOTO DMKPAGIO START UP THIS I/O @V304735 00901000
  1056. SPACE 1 00902000
  1057. WRTRTN STM R14,R15,TEMPR14 SAVE ORIGINAL R5+R7 @V304735 00903000
  1058. L R14,CORPGPNT-CORTABLE(,R7) PAGE TABLE ENTRY @V304735 00904000
  1059. NI PAGCORE+1-PAGCORE(R14),X'FF'-PAGINVAL DEQUEUE @V304735 00905000
  1060. * IT... 00906000
  1061. NI SWPFLAG-SWPFLAG(R5),X'FF'-SWPTRANS NO-LONGER @V304735 00907000
  1062. * TRANS 00908000
  1063. NI SAVEWRK1,X'FF'-(SHRPAGE+SHPGNWRT) UNSET FLAGS @V4075A0 00909100
  1064. L R5,TEMPR14 RESTORE REGISTER @V304735 00910000
  1065. L R7,TEMPR15 ..... @V304735 00911000
  1066. LR R1,R2 RESTORE REAL PAGE ADDRESS @V304735 00912000
  1067. BR R8 RETURN TO CALLER @V304735 00913000
  1068. SPACE 1 00914000
  1069. DROP R1 @V304735 00915000
  1070. SPACE 2 00916199
  1071. NOAUXAVL EQU * @V4075A0 00916299
  1072. OI SAVEWRK1,SHPGNWRT INDICATE NOT WRITTEN @V4075A0 00916399
  1073. LR R1,R0 CPEXBLOK ADDRESS @V4075A0 00916499
  1074. LA R0,CPEXSIZE DOUBLEWORD SIZE @V4075A0 00916599
  1075. CALL DMKFRET GIVE IT BACK @V4075A0 00916699
  1076. LR R1,R2 RESTORE REAL PAGE ADDR @V4075A0 00916799
  1077. BR R8 RETURN TO USER @V4075A0 00916899
  1078. EJECT @V4075A0 00916999
  1079. *********************************************************************** 00917000
  1080. * 00918000
  1081. * CONSTANTS * 00919000
  1082. * * 00920000
  1083. KEYEQ DC C'KEY =' 00921000
  1084. SUPPLMSG DC C'SUPPRESSED LINE(S) SAME AS ABOVE .....' 00922000
  1085. SPACE 00923000
  1086. LTORG 00924000
  1087. EJECT 00925000
  1088. PSA , @V306638 00926000
  1089. COPY CORE @V304735 00927000
  1090. COPY EQU @V306638 00928000
  1091. COPY SAVE @V306638 00929000
  1092. COPY TIMER @V306638 00930000
  1093. COPY VMBLOK @V306638 00931000
  1094. END 00932000