Table of Contents

DMKCDM Source

References

Source Listing

DMKCDM.ASSEMBLE.txt
  1. CDM TITLE 'DMKCDM (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 VALIDATE SEQUENCING OF INPUT 00002000
  3. *. 00003000
  4. * MODULE NAME - 00004000
  5. * DMKCDM 00005000
  6. * FUNCTION - 00006000
  7. * TO EXECUTE THE DUMP AND DMCP COMMANDS. 00007000
  8. * 00008000
  9. * ATTRIBUTES - 00009000
  10. * REENTRANT, PAGEABLE, CALLED VIA SVC 00010000
  11. * 00011000
  12. * ENTRY POINTS - 00012000
  13. * DMKCDMDM - TO DUMP REAL STORAGE TO THE SPOOLED PRINTER. 00013000
  14. * DMKCDMDU - TO DUMP VIRTUAL STORAGE TO THE SPOOLED PRINTER. 00014000
  15. * 00015000
  16. * ENTRY CONDITIONS - 00016000
  17. * GPR9 - ADDRESS OF THE COMMAND LINE. 00017000
  18. * GPR11 - ADDRESS OF THE USERS VMBLOK. 00018000
  19. * GPR12 - ADDRESS OF THE ENTRY POINT. 00019000
  20. * GPR13 - ADDRESS OF THE STANDARD SAVE AREA. 00020000
  21. * 00021000
  22. * EXIT CONDITIONS - 00022000
  23. * NORMAL - 00023000
  24. * GPR2 = 0 00024000
  25. * 00025000
  26. * ERROR - 00026000
  27. * GPR2 = ERROR MESSAGE CODE NUMBER 00027000
  28. * 00028000
  29. * CALLS TO OTHER ROUTINES - 00029000
  30. * DMKSCNFD - TO LOCATE THE NEXT ARGUMENT IN THE COMMAND LINE 00030000
  31. * DMKCVTBD - CONVERT BINARY NUMBER TO DECIMAL 00031000
  32. * DMKCVTBH - CONVERT BINARY NUMBER TO HEXADECIMAL 00032000
  33. * DMKCVTDB - CONVERT DECIMAL NUMBER TO BINARY 00033000
  34. * DMKCVTHB - CONVERT HEXADECIMAL NUMBER TO BINARY 00034000
  35. * DMKCVTFP - CONVERT FLOATING POINT NUMBER TO PRINTABLE FORM 00035000
  36. * DMKFREE - TO GET STORAGE FOR AN OUTPUT BUFFER 00036000
  37. * DMKFRET - TO RETURN STORAGE TO THE SYSTEM 00037000
  38. * DMKVATAB - TO MAINTAIN SHADOW PAGE AND SEGMENT TABLES 00038000
  39. * DMKQCNWT - TO SEND MESSAGES TO THE TERMINAL 00039000
  40. * DMKVSPRT - PRINT LINE OF DUMP TO THE SPOOL PRINTER 00040000
  41. * DMKPTRAN - TO BRING USER PAGE INTO STORAGE 00041000
  42. * DMKERMSG - TO TYPE ERROR MESSAGES 00042000
  43. * 00043000
  44. * TABLES/WORKAREAS 00044000
  45. * ECBLOK 00045000
  46. * PSA 00046000
  47. * SAVEAREA 00047000
  48. * VMBLOK 00048000
  49. * OUTPUT BUFFER CONTAINS CONTROL INFORMATION 00049000
  50. * USED BY THE DUMP ROUTINES. THE FORMAT AND DESCRIPTION 00050000
  51. * OF THE BUFFER ARE IN A DSECT BELOW. 00051000
  52. * 00052000
  53. * REGISTER USAGE - 00053000
  54. * GPR0 - FIELD LENGTH REGISTER 00054000
  55. * GPR1 - POINTER TO NEXT FIELD IN BUFFER AND REAL STORAGE ADDR. 00055000
  56. * GPR2 - PARAMETER REGISTER FOR CALLED ROUTINES. 00056000
  57. * GPR3 - ADDRESS OF THE PAGE TABLE 00057000
  58. * GPR4 - BAL REGISTER (3RD LEVEL) 00058000
  59. * GPR5 - POINTER TO THE NEXT ARGUMENT IN THE INPUT BUFFER 00059000
  60. * GPR6 - LENGTH ON NEXT ARGUMENT IN THE INPUT BUFFER 00060000
  61. * GPR7 - BAL REGISTER (1ST LEVEL) 00061000
  62. * GPR8 - BAL REGISTER (2ND LEVEL) 00062000
  63. * GPR9 - ADDRESS OF THE COMMAND LINE 00063000
  64. * GPR10 - BASE REGISTER FOR THE OUTPUT BUFFER 00064000
  65. * GPR11 - ADDRESS OF THE VMBLOK 00065000
  66. * GPR12 - BASE REGISTER FOR THIS PROGRAM 00066000
  67. * GPR13 - ADDRESS OF THE STANDARD SAVEAREA 00067000
  68. * GPR14 - LINKAGE REGISTER 00068000
  69. * GPR15 - LINKAGE REGISTER 00069000
  70. * 00070000
  71. * NOTES - 00071000
  72. * NONE 00072000
  73. * 00073000
  74. * OPERATION - 00074000
  75. * THE COMMAND ROUTINES ARE CALLED BY THE COMMAND 00075000
  76. * ANALYSIS ROUTINE DMKCFM. 00076000
  77. * THE FORMAT AND DESCRIPTION OF EACH COMMAND IS LISTED IN 00077000
  78. * SEPARATE PROLOGUES BELOW. 00078000
  79. *. 00079000
  80. EJECT 00080000
  81. ISEQ 73,80 00081000
  82. COPY OPTIONS 00082000
  83. EJECT 00083000
  84. COPY LOCAL 00084000
  85. EJECT 00085000
  86. PUNCH 'SPB' 00086000
  87. SPACE 2 00087000
  88. DMKCDM START 00088000
  89. SPACE 00089000
  90. MODID DC CL8'DMKCDM' 00090000
  91. USING PSA,R0 00091000
  92. USING DISPBFR,R10 **** THIS COVERS AN INTERNAL DSECT **** 00092000
  93. USING VMBLOK,R11 00093000
  94. USING SAVEAREA,R13 00094000
  95. SPACE 3 00095000
  96. EXTRN DMKERMSG 00096000
  97. EXTRN DMKVSPRT @V200820 00097000
  98. EXTRN DMKCVTBD,DMKCVTBH,DMKCVTDB,DMKCVTHB,DMKCVTFP 00098000
  99. EXTRN DMKSYSRM 00099000
  100. EXTRN DMKSCNFD 00100000
  101. EXTRN DMKDMPTR 00101000
  102. EXTRN DMKVATAB @V200820 00102000
  103. EXTRN DMKSYSAP @V4075A0 00103000
  104. EXTRN DMKVMASH @VA08317 00103400
  105. EJECT 00104000
  106. * EQUATES FOR SAVEWRK1 ON DUMP OR DISPLAY 00105000
  107. DISPC EQU X'00' 00106000
  108. DUMPC EQU X'80' 00107000
  109. REALC EQU X'00' 00108000
  110. VIRTC EQU X'40' 00109000
  111. RANGE EQU X'20' 00110000
  112. DISLEN EQU X'10' LENGTH RANGE INDICATION @V200930 00111000
  113. HEXLOC EQU X'08' INDICATES A LOCATION REQUEST 00112000
  114. BYPGPR EQU X'02' BYPAS DUMP REGS ON NEXT ARG @V200930 00113000
  115. PROC1 EQU X'01' INDICATE AT LEAST ONE OPERAND PROCESSED 00114000
  116. SPACE 00115000
  117. * EQUATES FOR SAVEWRK1+1 ON DUMP OR DISPLAY 00116000
  118. CONVLEN EQU X'80' INDICATE TO CONVERT LENGTH @V200930 00117000
  119. MPREF EQU X'08' @V4075A0 00118000
  120. NPREF EQU X'04' @V4075A0 00119000
  121. CHEX EQU X'01' 00120000
  122. SPACE 2 00121000
  123. ********************************************************************* 00122000
  124. * SAVEWRK1 SWITCH USAGE DURING DUMP OR DISPLAY 00123000
  125. * SAVEWRK1 00124000
  126. * X'80' - 0 = DISPLAY, 1 = DUMP 00125000
  127. * X'40' - 0 = REAL MACHINE, 1 = VIRTUAL MACHINE 00126000
  128. * X'20' - 0 = ONLY ONE ADDRESS, 1 = RANGE OF ADDRESSES 00127000
  129. * X'10' - 0 = NO LENGTH, 1 = LENGTH RANGE 00128000
  130. * 00129000
  131. * 00130000
  132. * 00131000
  133. * SAVEWRK1+1 00132000
  134. * X'80' - FIELD CONTAINS AN ARGUMENT 00133000
  135. * X'40' - LOGICAL CARRIAGE RETURN FOUND 00134000
  136. * X'08' - 1= TREAT ADDRESS AS MAIN PREFIXED @V4075A0 00135000
  137. * X'04' - 1= TREAT ADDRESS AS ATTACHED PROC PREFIXED @V4075A0 00136000
  138. * X'01' - HEXIDECIMAL FIELD CONVERSION 00137000
  139. ********************************************************************9 00138000
  140. EJECT 00139000
  141. *********************************************************************** 00140000
  142. * * 00141000
  143. * 'DUMP' * 00142000
  144. * * 00143000
  145. *********************************************************************** 00144000
  146. *. 00145000
  147. * SUBROUTINE NAME - 00146000
  148. * DMKCDMDU 00147000
  149. * FUNCTION - 00148000
  150. * 00149000
  151. * TO DUMP TO THE SPOOL PRINTER THE CONTENTS OF THE SPECIFIED 00150000
  152. * LOCATIONS ALONG WITH THE REGISTERS,PSW,AND STORAGE KEYS. 00151000
  153. * 00152000
  154. * COMMAND FORMAT - 00153000
  155. * +--------+------------------------------------------+ 00154000
  156. * | DUMP | <M|N>LHEXLOC1 <<-> > | 00155000
  157. * | DU | <M|N>THEXLOC1 <<:> > <*USERID> | 00156000
  158. * | | <M|N>HEXLOC1 <<-HEXLOC2> > | 00157000
  159. * | | 0 <<:HEXLOC2> > | 00158000
  160. * | | <<-END> > | 00159000
  161. * | | <<:END> > | 00160000
  162. * | | <<.> > | 00161000
  163. * | | <<.BYTECOUNT > | 00162000
  164. * | | <<.END> > | 00163000
  165. * +--------+------------------------------------------+ 00164000
  166. * 00165000
  167. * THE FOLLOWING EXAMPLES WILL PRODUCE ONE FULL DUMP EACH 00166000
  168. * 00167000
  169. * DU L DU T DU - DU : DU . 00168000
  170. * DU . DU L- DU T- DU L: DU T: 00169000
  171. * DU L. DU T. DU 0- DU 0: DU 0. 00170000
  172. * DU 0:END DU L.END DU T.END DU 0.END DU T:END 00171000
  173. * DU 0:END DU L.END DU T.END DU 0.END 00172000
  174. * 00173000
  175. * 00174000
  176. * THE FOLLOWING WILL PRODUCE 3 FULL DUMPS. 00175000
  177. * DU T . L 00176000
  178. * 00177000
  179. * OPERATION - 00178000
  180. * 1. SET A BIT IN SAVEWRK1 TO INDICATE THAT A DUMP OF VIRTUAL 00179000
  181. * STORAGE, REGISTERS, PSW, AND STORAGE KEYS. 00180000
  182. * CONTROL IS THEN PASSED THRU THE REGISTER, PSW, AND DUMP 00181000
  183. * SUBROUTINES AS DESCRIBED IN THE PROLOGUE FOR DISPLAY. 00182000
  184. * 00183000
  185. * RESPONSES - 00184000
  186. * 00185000
  187. * COMMAND COMPLETE 00186000
  188. * 00187000
  189. * ERROR MESSAGES - 00188000
  190. * DMKCDM003E INVALID OPTION - (OPTION) 00189000
  191. * DMKCDM004E INVALID HEXLOC - (HEXLOC) 00190000
  192. * DMKCDM009E INVALID RANGE - (RANGE) 00191000
  193. * DMKCDM033E HEXLOC MISSING OR INVALID 00192000
  194. * DMKCDM060E DUMP FAILED; VIRTUAL PRINTER UNAVAILABLE 00193000
  195. * DMKCDM061E DUMP FAILED; VIRTUAL PRINTER ERROR 00194000
  196. * DMKCDM160E HEXLOC (HEXLOC) EXCEEDS STORAGE 00195000
  197. *. 00196000
  198. DMKCDMDU RELOC 00197000
  199. TM VMOSTAT,VMSHR IS USER RUNNING SHARED SYSTEM ? @VA08317 00197100
  200. BNO NOCHANGE NO, CONTINUE DUMP PROCESSING @VA08317 00197200
  201. C R11,LASTUSER DID USER CHANGE ? @VA08317 00197300
  202. BNE NOCHANGE YES, CONTINUE DUMP PROCESSING @VA08317 00197400
  203. CALL DMKVMASH PROCESS ANY CHANGED SHARED PAGES @VA08317 00197500
  204. NOCHANGE EQU * CONTINUE DUMP PROCESSING @VA08317 00197600
  205. MVI SAVEWRK1,DUMPC+VIRTC REMEMBER TO DUMP VIRTUAL STORAGE 00198000
  206. B DISGETB 00199000
  207. EJECT 00200000
  208. *********************************************************************** 00201000
  209. * * 00202000
  210. * 'DUMP' * 00203000
  211. * * 00204000
  212. *********************************************************************** 00205000
  213. *. 00206000
  214. * SUBROUTINE NAME - 00207000
  215. * DMKCDMDU 00208000
  216. * FUNCTION - 00209000
  217. * TO DUMP TO THE VIRTUAL PRINTER VIRTUAL STORAGE LOCATIONS, 00210000
  218. * REGISTERS AND PSW 00211000
  219. * 00212000
  220. * OPERATION - 00213000
  221. * 00214000
  222. * THE FOLLOWING DESCRIBES THE OPERATION OF DUMP AND DMCP 00215000
  223. * 00216000
  224. * 1. CALL DMKFREE TO OBTAIN A BUFFER. THIS BUFFER WILL CONTAIN 00217000
  225. * THE DATA,FLAGS,ADDRESS INCREMENT COUNTS, AND POINTERS USED 00218000
  226. * IN CONSTRUCTING A LINE OF OUTPUT. 00219000
  227. * 2. SET UP THE NUMBER OF CHARACTERS PER LINE 00220000
  228. * 3. GO TO STEP 20 TO OUTPUT A LINE AND REINITIALIZE THE BUFFER. 00221000
  229. * 4. CALL DMKSCNFD TO LOCATE THE TYPE OF REQUEST (E.G., M,N,L,T) 00222000
  230. * IF NO ARGUMENTS AT ALL HAVE BEEN PROCESSED, CALL DMKERMSG 00223000
  231. * TO SEND ERROR MESSAGE DMKCDM033E 00224000
  232. * 5. CHECK THE ARGUMENT FOR A VALID TYPE. IF NONE FOUND 00225000
  233. * ASSUME THE SAME TYPE AS THE LAST VALID ARGUMENT. 00226000
  234. * GO TO THE SUBROUTINE TO HANDLE THE PARTICULAR TYPE. 00227000
  235. * 6. DUMPPSW - PLACES THE PSW INTO THE DUMP 00228000
  236. * 7. DUMPGPR - SET THE BEGINNING ADDRESS TO 0, ENDING ADDRESS 00229000
  237. * TO 15 AND CONTINUE. 00230000
  238. * 8A. DISCOMM-THIS IS A SUBROUTINE USED BY SEVERAL OTHERS TO 00231000
  239. * SET UP THE DATA IN THE BUFFER. FIRST CHECK IF AT THE 00232000
  240. * BEGINNING OF THE BUFFER. IF NOT GO TO STEP 10B. IF SO, 00233000
  241. * GO TO STEP 19 TO BUILD A LINE HEADER. THEN CONTINUE. 00234000
  242. * 10B. CONVERT THE NEXT PIECE OF DATA TO BE DISPLAYED VIA A CALL 00235000
  243. * TO DMKCVTBH. PLACE THIS DATA IN THE BUFFER. ADJUST THE 00236000
  244. * BUFFER POINTER AND BUFFER COUNT. THEN IF THE BUFFER IS 00237000
  245. * FULL, GO TO STEP 20 TO OUTPUT THE BUFFER AND REINITIALIZE 00238000
  246. * IT. IF THE BUFFER IS NOT FULL, GO TO STEP 17 TO GET THE 00239000
  247. * NEXT ADDRESS TO DISPLAY. 00240000
  248. * 11. DUMPFPR SET UP BEGINNING AND ENDING ADDRESSES 00241000
  249. * TO INCLUDE ALL FLOATING POINT REGISTERS. 00242000
  250. * THEN VIA CALLS TO DMKCVTBH, CONVERT THE VIRTUAL FLOATING 00243000
  251. * POINT REGISTERS FOUND IN THE VMBLOK TO PRINTABLE 'HEX' AND 00244000
  252. * ALSO CALL DMKCVTFP TO GET THE FLOATING POINT FORMAT. PLACE 00245000
  253. * THIS IN THE BUFFER AND GO TO STEP 20 TO OUTPUT. 00246000
  254. * 12. DUMPECR DEFAULT ADDRESSES TO INCLUDE ALL THE 00247000
  255. * CONTROL REGISTERS. LOAD THE VALUE OF THE NEXT CONTROL 00248000
  256. * REGISTER AND GO TO STEP 10B TO FORMAT AND PROCESS. 00249000
  257. * WHEN THE NEXT REGISTER IS NEEDED CONTROL WILL BE RETURNED 00250000
  258. * TO THIS ROUTINE TO GET THE DATA. 00251000
  259. * 13.DUMPLOC-SET A FLAG TO INDICATE A HEXLOC 00252000
  260. * REQUEST, ZERO SAVEWRK2. THIS WILL BE USED FOR INDEXING 00253000
  261. * THRU THE DUMP FUNCTIONS. GO TO STEP 18 00254000
  262. * TO OUTPUT THE DUMPID (IF ANY). THEN GO TO STEP 10 TO 00255000
  263. * START PROCESSING THE REGISTERS. 00256000
  264. * 13A. SET UP THE MAXIMUM ENDING ADDRESS FOR EITHER THE VIRTUAL 00257000
  265. * MACHINE OR REAL MACHINE DEPENDING ON REQUEST. THEN GO TO 00258000
  266. * STEP 16 TO INITIALIZE BEGINNING AND ENDING ADDRESSES. 00259000
  267. * IF A VIRTUAL REQUEST, TRANS IN THE NEXT ADDRESS TO BE 00260000
  268. * DUMPED. IF A REAL REQUEST, JUST PICK UP THE NEXT REAL 00261000
  269. * ADDRESS. IN AN AP SYSTEM THE ADDRESS IS TRANSLATED 00262000
  270. * BASED UPON THE M/N SPECIFICATION AND WHICH PROCESSOR WE 00263000
  271. * ON. THE PURPOSE IS TO REACH THE PROPER PAGE GIVEN THE 00264000
  272. * VALUES OF THE TWO PREFIX REGISTERS. 00265000
  273. * GO TO STEP 10A. TO FORMAT THE OUTPUT. CONTROL WILL BE 00266000
  274. * RETURNED TO THIS STEP FOR EACH ADDRESS UNTIL - 00267000
  275. * ALL THE REQUESTED LOCATIONS HAVE BEEN DUMPED. 00268000
  276. * IN AN AP SYSTEM THE PARAMETER PREFIX 'M' CAUSES THE 00269000
  277. * ADDRESS TO BE TREATED AS SEEN THROUGH THE MAIN PROCESSOR 00270000
  278. * PREFIX REGISTER. THE LETTER 'N' DESIGNATES THE ATTACHED 00271000
  279. * PROCESSOR. OTHERWISE THE ADDRESS IS TREATED AS AN ABSOLUT 00272000
  280. * ADDRESS. 'N' IS VALID ONLY WHEN THE ATTACHED PROCESSOR IS 00273000
  281. * IN OPERATION. 'M' IS VALID IF THE SYSTEM HAS BEEN GEN'D 00274000
  282. * FOR AP OPERATION 00275000
  283. * 16. DISINIT-THIS IS THE SUBROUTINE USED TO INITIALIZE THE 00276000
  284. * RANGE OF ADDRESSES FOR LOC,REGISTER, AND KEY REQUESTS. 00277000
  285. * FIRST CHECK IF ANY ADDRESS HAS BEEN SPECIFIED. IF NOT, 00278000
  286. * SET THE BEGINNING ADDRESS TO ZERO AND RETURN. IF HAVE AN 00279000
  287. * ADDRESS, SCAN THRU THE ARGUMENT CHECKING FOR ':','_', OR 00280000
  288. * BLANK. IF BLANK IS FOUND GO TO STEP 16A. IF ':' OR '-' 00281000
  289. * AND THE ENDING FIELD IS IN THE SAME ARGUMENT, COMPUTE THE 00282000
  290. * LENGTHS OF THE BEGINNING AND ENDING FIELDS AND GO TO 00283000
  291. * STEP 16B. 00284000
  292. * IF THE DELIMITER IS NOT : OR - THEN TEST FOR A DOT '.' 00285000
  293. * IF IT IS A DOT CHECK NEXT ARGUMENT. IF IT IS BLANK 00286000
  294. * THEN GO TO STEP 16C FOR DEFUALT END, ELSE CONVERT 00287000
  295. * THE FIELD AS A HEX LENGTH AND SAVE TO CALCULATE 00288000
  296. * THE END ADDRESS. 00289000
  297. * 16A. - CALL DMKSCNFD TO SEE IF HAVE A ':' OR '-' AS THE NEXT 00290000
  298. * ARGUMENT. IF THERE IS AND THE 'HEXLOC2' IS IN THE 00291000
  299. * SAME ARGUMENT, GO TO STEP 16B. IF HAVE ':' OR'-' WITH 00292000
  300. * NOTHING ELSE, CALL DMKSCNFD TO PICK UP NEXT ARGUMENT. 00293000
  301. * IF NONE FOUND, GO TO STEP 16C. IF HAVE ONE, CONTINUE. 00294000
  302. * IF THE DELIMITER WAS A DOT '.' THEN THE FIELD IS A 00295000
  303. * LENGTH SPECIFICATION. CONVERT IT FROM HEX AND GIVE AN 00296000
  304. * ERROR MESSAGE IF THAT FAILS. IF THE CONVERTION 00297000
  305. * IS GOOD SAVE THE VALUE TO CALCULATE THE END ADDRESS. 00298000
  306. * 16B. CHECK IF THE ENDING ADDRESS IS THE WORD 'END'. IF SO GO 00299000
  307. * TO STEP 16C. IF A 'HEXLOC', CALL DMKCVTHB TO CONVERT 00300000
  308. * TO BINARY. IF THE CONVERT FAILS, CALL DMKERMSG TO SEND 00301000
  309. * ERROR MESSAGE DMKCDM004E. IF THE CONVERT IS OK, USE THE 00302000
  310. * NUMBER TO INITIALIZE THE ENDING ADDRESS AND CONTINUE. 00303000
  311. * 16C. CALL DMKCVTHB TO CONVERT THE BEGINNING ADDRESS TO BINARY. 00304000
  312. * IF THE CONVERT FAILS, CALL DMKERMSG TO SEND ERROR 00305000
  313. * MESSAGE DMKCDM004E. IF CONVERT IS GOOD, INITIALIZE THE 00306000
  314. * BEGINNING ADDRESS WITH THIS NUMBER. THEN CHECK IF 00307000
  315. * BEGINNING ADDRESS IS LARGER THAN THE ENDING NUMBER. IF 00308000
  316. * IT IS , CALL DMKERMSG TO SEND ERROR MESSAGE DMKCDM009E. 00309000
  317. * IF THE ADDRESS IS LARGER THAN THE MAXIMUM AND IT IS 00310000
  318. * A HEXLOC, CALL DMKERM TO SEND ERROR MESSAGE DMKCDM160E. 00311000
  319. * IF IT IS A REGISTER, SEND ERROR MESSAGE DMKCDM010E. IF 00312000
  320. * ADDRESS IS OK - RETURN. 00313000
  321. * 17. DISNEXTA-THIS IS THE SUBROUTINE TO GET THE NEXT ADDRESS. 00314000
  322. * FIRST - ADD THE INCREMENT VALUE TO THE PRESENT ADDRESS. 00315000
  323. * IF THE RESULT IS LARGER THAN THE ENDING ADDRESS,GO TO 00316000
  324. * STEP 17A. IF NOT STORE THE NEW ADDRESS IN THE BUFFER AND 00317000
  325. * RETURN. 00318000
  326. * 17A. GO TO STEP 20 TO OUTPUT THE LINE. THEN 00319000
  327. * IF IT IS 'DMCP', EXIT. IF IT IS DUMP VIRTUAL, LOAD THE 00320000
  328. * INDEX VALUE FROM SAVEWRK2. BUMP IT AND STORE BACK FOR 00321000
  329. * THE NEXT TIME. USE THE ORIGINAL VALUE TO INDEX INTO A 00322000
  330. * BRANCH TABLE WHICH WILL GO TO THE NEXT PART 00323000
  331. * OF THE DUMP FUNCTION. 00324000
  332. * 18. DISDMPID-THIS SUBROUTINE IS USED TO OUTPUT THE DUMPID. 00325000
  333. * FIRST SAVE THE 'BUFNXT' AND 'BUFCNT' OUT OF THE COMMAND 00326000
  334. * LINE BUFFER. THEN VIA CALLS TO DMKSCNFD SCAN DOWN THE 00327000
  335. * COMMAND LINE SEARCHING FOR A DUMPID. IF NONE IS FOUND, 00328000
  336. * RESTORE THE 'BUFNXT' AND 'BUFCNT' IN THE COMMAND 00329000
  337. * LINE AND RETURN. IF A DUMPID IS FOUND, PLACE IT IN THE 00330000
  338. * OUTPUT BUFFER AND GO TO STEP 20 TO OUTPUT. THEN RESTORE 00331000
  339. * THE 'BUFNXT' AND 'BUFCNT' AND RETURN. 00332000
  340. * 19. DISHEAD-THIS SUBROUTINE FORMATS THE LINE HEADER AND 00333000
  341. * TRAILER. FIRST CHECK IF THIS IS A LOCATION REQUEST. IF IT 00334000
  342. * IS, GO TO STEP 19A. IF NOT, CALL DMKCVTBD TO CONVERT THE 00335000
  343. * REGISTER NUMBER TO DECIMAL. SET REGISTER NUMBER IN THE 00336000
  344. * BUFFER AND RETURN. 00337000
  345. * 19A. IF THIS IS THE FIRST LINE, GO TO STEP 19C. IF LINES ARE 00338000
  346. * ALREADY BEING SUPPRESSED, GO TO STEP 19D. IF NEITHER OF 00339000
  347. * THESE, CHECK IF THIS LINE IS THE SAME AS THE LAST. IF NOT 00340000
  348. * GO TO STEP 19C. IF IT IS, SET UP THE SUPPRESSED LINES 00341000
  349. * MESSAGE. 00342000
  350. * 19B. DUMP THE ADDRESS TO THE NEXT LINE. CALL DMKCVTBH 00343000
  351. * TO CONVERT THIS ADDRESS TO HEX AND INSERT THIS ADDRESS 00344000
  352. * INTO THE BUFFER. THEN GO TO STEP 17 TO CONTINUE. 00345000
  353. * 19C. CALL DMKCVTBH TO CONVERT THE ADDRESS TO HEX. 00346000
  354. * TRANSLATE THE LINE TO EBCDIC AND RETURN 00347000
  355. * 19D. IF THIS LINE IS THE SAME AS THE LAST ONE, GO TO STEP 19B. 00348000
  356. * IF NOT, GO TO STEP 20 TO OUTPUT THE SUPPRESSED LINES 00349000
  357. * MESSAGE. THEN GO TO STEP 19C. 00350000
  358. * 20. DISWRITE-THIS SUBROUTINE WILL OUTPUT A LINE OF DATA TO 00351000
  359. * EITHER A TERMINAL(DISPLAY) OR THE PRINTER(DUMP). IF THE 00352000
  360. * BYTE COUNT FOR THE DATA IN THE BUFFER IS ZERO, GO TO 00353000
  361. * STEP 20B. IF THE OUTPUT IS FOR A PRINTER, GO TO STEP 00354000
  362. * 20A. ELSE SET UP FOR A TERMINAL AND CALL DMKQCNWT TO SEND 00355000
  363. * THE LINE OF DATA. THEN GO TO STEP 20B. 00356000
  364. * 20A. SET UP FOR A PRINTER AND CALL DMKVSPRT TO OUTPUT THE 00357000
  365. * LINE TO THE USERS VIRTUAL PRINTER. 00358000
  366. * 20B. RESET THE BUFFER POINTER TO THE START OF THE BUFFER. 00359000
  367. * BLANK OUT THE DATA PORTION OF THE BUFFER AND RETURN. 00360000
  368. * 00361000
  369. * RESPONSES - 00362000
  370. * 00363000
  371. * THE FOLLOWING ARE TYPICAL RESPONSES TO THE VARIOUS 00364000
  372. * DUMP COMMANDS: 00365000
  373. * 00366000
  374. * HEXLOCS - 00367000
  375. * XXXXXX = WORD1 WORD2 WORD3 WORD4 * EBCIDIC TRANSLATION * 00368000
  376. * 00369000
  377. * 00370000
  378. * ERROR MESSAGES - 00371000
  379. * DMKCDM004E INVALID HEXLOC - (HEXLOC) 00372000
  380. * DMKCDM009E INVALID RANGE - (RANGE) 00373000
  381. * DMKCDM010E INVALID REGISTER - (REGISTER) 00374000
  382. * DMKCDM026E OPERAND MISSING OR INVALID 00375000
  383. * DMKCDM160E HEXLOC (HEXLOC) EXCEEDS STORAGE 00376000
  384. *. 00377000
  385. EJECT 00378000
  386. *********************************************************************** 00379000
  387. * * 00380000
  388. * 'DMCP' * 00381000
  389. * * 00382000
  390. *********************************************************************** 00383000
  391. *. 00384000
  392. * SUBROUTINE NAME - 00385000
  393. * DMKCDMDM 00386000
  394. * 00387000
  395. * FUNCTION - 00388000
  396. * TO DUMP TO THE VIRTUAL SPOOL PRINTER THE CONTENTS OF 00389000
  397. * THE REAL STORAGE LOCATIONS SPECIFIED. 00390000
  398. * 00391000
  399. * COMMAND FORMAT - 00392000
  400. * +--------+------------------------------------------+ 00393000
  401. * | DMCP | <M|N>LHEXLOC1 <<-> > | 00394000
  402. * | DMCP | <M|N>LHEXLOC1 <<:> > <*DUMPID> | 00395000
  403. * | | <M|N>HEXLOC1 <<-HEXLOC2> > | 00396000
  404. * | | 0 <<:HEXLOC2> > | 00397000
  405. * | | <<-END> > | 00398000
  406. * | | <<:END> > | 00399000
  407. * | | <<.> > | 00400000
  408. * | | <<.BYTECOUNT>> | 00401000
  409. * | | <<.END> > | 00402000
  410. * +--------+------------------------------------------+ 00403000
  411. * 00404000
  412. * OPERATION - 00405000
  413. * 1. SET A BIT IN SAVEWRK1 TO INDICATE THAT THIS IS A DUMP 00406000
  414. * REAL STORAGE REQUEST.THEN A BRANCH IS MADE TO COMMON ROUTIN 00407000
  415. * DESCRIBED IN THE PROLOGUE FOR DISPLAY. 00408000
  416. * 00409000
  417. * RESPONSES - 00410000
  418. * 00411000
  419. * COMMAND COMPLETE 00412000
  420. * 00413000
  421. * ERROR MESSAGES - 00414000
  422. * DMKCDM003E INVALID OPTION - (OPTION) 00415000
  423. * DMKCDM004E INVALID HEXLOC - (HEXLOC) 00416000
  424. * DMKCDM009E INVALID RANGE - (RANGE) 00417000
  425. * DMKCDM033E HEXLOC MISSING OR INVALID 00418000
  426. * DMKCDM060E DUMP FAILED; VIRTUAL PRINTER UNAVAILABLE 00419000
  427. * DMKCDM061E DUMP FAILED; VIRTUAL PRINTER ERROR 00420000
  428. * DMKCDM160E HEXLOC (HEXLOC) EXCEEDS STORAGE 00421000
  429. *. 00422000
  430. SPACE 4 00423000
  431. DMKCDMDM RELOC 00424000
  432. MVI SAVEWRK1,DUMPC+REALC REMEMBER TO DUMP REAL STORAGE 00425000
  433. B DISGETB 00426000
  434. EJECT 00427000
  435. DISGETB LA R0,BFRSIZE LOAD SIZE OF BUFFER 00428000
  436. CALL DMKFREE GET OUTPUT BUFFER 00429000
  437. STCM R1,7,SAVEWRK4+1 SAVE ADDRESS OF BUFFER 00430000
  438. STC R0,SAVEWRK4 AND THE LENGTH IN DOUBLE WORDS 00431000
  439. LR R10,R1 LOAD BASE REGISTER 00432000
  440. MVI SAVEWRK1+1,X'00' CLEAR @V200930 00433000
  441. MVI SAVEWRK1+2,X'00' CLEAR LAST REQ @V200930 00434000
  442. XC BFRCNT(8),BFRCNT ZERO COUNT AND FLAGS 00435000
  443. SPACE 00436000
  444. DISGPRT OI BUFLAG,PRINTER INDICATE OUTPUT GOES TO THE PRINTER 00437000
  445. MVC BUFMAX,=H'92' SET MAX BYTE COUNT 00438000
  446. MVC BUFTRC,=H'32' SET TRANSLATE COUNT 00439000
  447. SPACE 00440000
  448. DISGETN BAL R4,DISWRITE WRITE OUT BUFFER & REINITIALIZE 00441000
  449. CALL DMKSCNFD GET NEXT OPERAND @VM08515 00442000
  450. BNZ DISEND NO MORE ARGUMENTS 00443000
  451. OI SAVEWRK1,PROC1 FLAG AS PROCESS AT LEAST ONE 00444000
  452. TM SAVEWRK1,BYPGPR TEST FOR NEXT DUMP ARG @V200930 00445000
  453. BZ DISRSTFL NO, START FIELD @V200930 00446000
  454. CLI 0(R1),C'*' IS THIS THE DUMP ID ?? @V200930 00447000
  455. BE DISEND YES, ALL DONE @V200930 00448000
  456. SPACE 00449000
  457. DISRSTFL STM R0,R1,SAVEWRK8 SAVE ARG. LENGTH AND ADDRESS 00450000
  458. MVC FLDLEN(4),F6 SET MAX FIELD LENGTH @VM08524 00451000
  459. NI SAVEWRK1,X'FF'-HEXLOC RESET FLAG @V200930 00452000
  460. LR R5,R1 STARTING ADDRESS TO R5 00453000
  461. LR R6,R0 LENGTH TO R6 00454000
  462. * 00455000
  463. * GPR 5 CONTAINS THE ADDRESS OF THE FIRST BYTE OF THE FIELD. 00456000
  464. * GPR 6 CONTAINS THE LENGTH (IN BYTES) OF THE FIELD. 00457000
  465. * 00458000
  466. TM VMRSTAT,VMLOGOFF GONE INTO LOGOFF WHILE OUT? 00459000
  467. BO EXIT YES, GET OUT 00460000
  468. NI BUFLAG,PRINTER RESET ALL BUT PRINTER FLAG 00461000
  469. OI BUFLAG,TRANSLAT INDICATE TRANSLATE LINE TO EBCDIC 00462000
  470. MVC BFRCNT,F1+2 SET BYTE COUNT = 1 @V4075A0 00463000
  471. BAL R4,DISWRITE PRINT A BLANK LINE 00464000
  472. DISGTYPE EQU * 00465000
  473. CLI 0(R5),C'L' LOCATION REQUEST ? 00466000
  474. BE DUMPTEST YES 00467000
  475. CLI 0(R5),C'T' STORAGE LOCATION(S) + EBCDIC ? 00468000
  476. BE DUMPTEST YES 00469000
  477. CLI 0(R5),C'N' IF USER SPECIFIED M|N, @V4075A0 00470000
  478. BE ITSN @V4075A0 00471000
  479. CLI 0(R5),C'M' @V4075A0 00472000
  480. BE ITSM CHECK VALIDITY AND SET FLAGS @V4075A0 00473000
  481. CLI SAVEWRK1+2,X'00' PREVIOUS REQ VALID ?? @V200930 00474000
  482. BNE SETR5 YES, DEFAULT TO LAST REQ @V200930 00475000
  483. DEFAULTL EQU * @V4075A0 00476000
  484. MVI SAVEWRK1+2,C'L' DEFAULT TO LOCATION @V200930 00477000
  485. SETR5 BCTR R5,R0 BACKUP 1 POSITION @V200930 00478000
  486. LA R6,1(R6) UP COUNT BY ONE @V200930 00479000
  487. MVC 0(1,R5),SAVEWRK1+2 SET REQ CHARACTER @V200930 00480000
  488. B DISGTYPE ANALYSE TYPE @V200930 00481000
  489. SPACE 4 00482000
  490. DISEND EQU * 00483000
  491. TM SAVEWRK1,PROC1 ANY PROCESSING DONE ??? 00484000
  492. BZ CDM033 NO - GO SEND ERR MSG @V4075A0 00485000
  493. B CONFMSG YES, JUST EXIT @V4075A0 00486000
  494. SPACE 4 00487000
  495. ITSM L R15,=A(DMKSYSAP) CHECK USER SPEC @V4075A0 00488000
  496. CLI 0(R15),C'Y' IF NOT GEN'D FOR AP, @V4075A0 00489000
  497. BNE CDM026 M,N NOT ACCEPTABLE @V4075A0 00490000
  498. OI SAVEWRK1+1,MPREF USER SPECIFIED 'M' @V4M0120 00491000
  499. MNCOMM TM SAVEWRK1,VIRTC M,N ONLY FOR CP STORAGE @V4075A0 00492000
  500. BO CDM026 ERROR IF VIRTUAL DIS/DUMP @V4075A0 00493000
  501. LA R5,1(R5) POINT TO NEXT CHAR IN PARM @V4075A0 00494000
  502. BCT R6,DISGTYPE REDUCE COUNT & RESCAN PARM @V4075A0 00495000
  503. B DEFAULTL NO MORE CHARS, DEFAULT TO 'L'@V4075A0 00496000
  504. SPACE 2 @V4075A0 00497000
  505. ITSN TM APSTAT1,APUOPER 'N' IS NOT VALID WHEN THE @V4075A0 00498000
  506. BNO CDM026 ATTACHED PROCESSOR NOT UP @V4075A0 00499000
  507. OI SAVEWRK1+1,NPREF USER SPECIFIED 'N' @V4075A0 00500000
  508. B MNCOMM @V4075A0 00501000
  509. SPACE 2 @V4075A0 00502000
  510. EJECT 00503000
  511. * 00504000
  512. * THE FOLLOWING POINT DUMPS THE PSW 00505000
  513. * 00506000
  514. DUMPPSW MVC BUFBUF(5),CPSWEQ PUT IN 'PSW =' @V4075A0 00507000
  515. L R1,VMPSW LOAD 1ST HALF OF VIRTUAL PSW 00508000
  516. TM VMESTAT,VMEXTCM IN EXTENDED-MODE? 00509000
  517. BO *+8 YES - DISPLAY ENTIRE PSW 00510000
  518. N R1,=XL4'FFFF0000' ZERO INTERUPTION CODE 00511000
  519. CALL DMKCVTBH CONVERT TO PRINTABLE CHARACTERS 00512000
  520. STCM R0,B'1111',BUFBUF+6 STORE IN 1ST QUARTER PSW @V4075A0 00513000
  521. STCM R1,B'1111',BUFBUF+10 THEN 2ND QUARTER @V4075A0 00514000
  522. L R1,VMPSW+4 LOAD 2ND HALF OF VIRTUAL PSW 00515000
  523. CALL DMKCVTBH CONVERT TO PRINTABLE CHARACTERS 00516000
  524. STCM R0,B'1111',BUFBUF+15 3RD QUARTER OF PSW @V4075A0 00517000
  525. STCM R1,B'1111',BUFBUF+19 FINAL QUARTER @V4075A0 00518000
  526. MVC BFRCNT,=H'23' SET LINE LENGTH 00519000
  527. B DUMPCHEK GO PRINT LINE AND CONTINUE 00520000
  528. EJECT 00521000
  529. * 00522000
  530. * DUMP THE GENERAL PURPOSE REGISTERS 00523000
  531. * 00524000
  532. DUMPGPR MVC IDCHAR,=C'GPR' SAVE IDENTIFICATION CHARACTERS 00525000
  533. LA R1,15 SET DEFAULT END REGISTER @V4075A0 00526000
  534. ST R1,ENDADD INTO ENDING CONTROL FIELD @V4075A0 00527000
  535. ST R1,ENDMAX AND MAXIMUM END FIELD @V4075A0 00528000
  536. MVC INCRMT(2),F1+2 SET ADDRESS INCREMENT 00529000
  537. MVC FLDLEN(4),F2 SET MAX FIELD LENGTH @VM08524 00530000
  538. SR R1,R1 SIMULATE DISINIT DEFAULT 00531000
  539. ST R1,NXTADD SET NEXT ADDRESS TO ZERO @V4075A0 00532000
  540. LA R7,GPRRET SET UP RETURN FOR OUTPUT LOOP 00533000
  541. GPRRET SLA R1,2 CONVERT TO FULL WORD DISPLACEMENT 00534000
  542. L R3,VMGPRS(R1) LOAD VALUE IN REGISTER 00535000
  543. SPACE 2 00536000
  544. DISCOMM CL R10,BUFPNT IS POINTER AT BEGINNING OF BUFFER ? 00537000
  545. BNE DISCOMMC BRANCH IF NO 00538000
  546. L R1,NXTADD LOAD DATA ADDRESS 00539000
  547. BAL R8,DISHEAD YES - BUILD LINE HEADER 00540000
  548. DISCOMMC LR R1,R3 LOAD DATA TO BE DISPLAYED 00541000
  549. CALL DMKCVTBH CONVERT DATA TO PRINTABLE CHARACTERS 00542000
  550. STM R0,R1,FIELD STORE IN WORK AREA 00543000
  551. L R1,BUFPNT LOAD BUFFER POINTER 00544000
  552. MVC 0(8,R1),FIELD MOVE DATA 00545000
  553. LA R1,10(R1) BUMP POINTER BY 10 00546000
  554. LH R14,BFRCNT GET BUFFER COUNT 00547000
  555. LA R14,10(R14) UP THE COUNT 00548000
  556. CH R14,=H'50' AT THE MID POINT ?? 00549000
  557. BNE NOSHFT NO, CONT 00550000
  558. LA R14,2(R14) TWO MORE 00551000
  559. LA R1,2(R1) TWO MORE 00552000
  560. NOSHFT ST R1,BUFPNT SET NEW POINTER 00553000
  561. STH R14,BFRCNT SET NEW COUNT 00554000
  562. CH R14,BUFMAX AT END OF BUFFER ?? 00555000
  563. BL DISNEXTA NO - CONTINUE DISPLAY 00556000
  564. SH R14,F2+2 ADJUST LENGTH 00557000
  565. STH R14,BFRCNT SET COUNT 00558000
  566. LA R4,DISNEXTA LOAD RETURN ADDRESS 00559000
  567. B DISWRITE YES - OUTPUT LINE 00560000
  568. EJECT 00561000
  569. * 00562000
  570. * ENTER HERE WHEN PROCESSING DUMP FUNCTION 00563000
  571. * 00564000
  572. DUMPFPR MVC IDCHAR,=C'FPR' SAVE IDENTIFICATION CHARACTERS 00565000
  573. LA R1,6 BIGGEST FPR @V4075A0 00566000
  574. ST R1,ENDADD SET DEFAULT END REGISTER @V4075A0 00567000
  575. ST R1,ENDMAX SET MAXIMUM END REGISTER @V4075A0 00568000
  576. MVC INCRMT(2),F2+2 SET ADDR INCREMENT 00569000
  577. MVC FLDLEN(4),F1 SET MAX FIELD LENGTH @VM08524 00570000
  578. SR R1,R1 SIMULATE DISINIT DEFAULT 00571000
  579. ST R1,NXTADD SET NEXT ADDRESS TO ZERO @V4075A0 00572000
  580. LA R7,FPRRET SET UP RETURN 00573000
  581. FPRRET BAL R8,DISHEAD BUILD LINE HEADER 00574000
  582. L R1,NXTADD RELOAD REGISTER NUMBER 00575000
  583. SLA R1,2 CONVERT TO DOUBLE WORD BISPLACEMENT 00576000
  584. LA R2,VMFPRS(R1) POINT TO VIRTUAL FPR 00577000
  585. L R1,0(R2) LOAD 1ST HALF OF VIRTUAL REGISTER 00578000
  586. CALL DMKCVTBH CONVERT TO PRINTABLE CHARACTERS 00579000
  587. STCM R0,B'1111',BUFBUF+10 @V4075A0 00580000
  588. STCM R1,B'1111',BUFBUF+14 @V4075A0 00581000
  589. L R1,4(R2) LOAD 2ND HALF OF VIRTUAL REGISTER 00582000
  590. CALL DMKCVTBH CONVERT TO PRINTABLE CHARACTERS 00583000
  591. STCM R0,B'1111',BUFBUF+18 @V4075A0 00584000
  592. STCM R1,B'1111',BUFBUF+22 @V4075A0 00585000
  593. LA R1,BUFBUF+30 LOAD OUTPUT POINTER 00586000
  594. CALL DMKCVTFP CONVERT TO PRINTABLE FLOATING OINT 00587000
  595. MVC BFRCNT,=H'54' SET LINE LENGTH 00588000
  596. LA R4,DISNEXTA LOAD RETURN ADDRESS 00589000
  597. B DISWRITE OUTPUT LINE 00590000
  598. EJECT 00591000
  599. * 00592000
  600. * ENTER HERE WHEN DUMPING CONTROL REGISTERS 00593000
  601. * 00594000
  602. DUMPECR MVC IDCHAR,=C'ECR' SAVE IDENTIFICATION CHARACTERS 00595000
  603. MVC INCRMT,F1+2 SET BYTE COUNT = 1 @V4075A0 00596000
  604. LA R1,15 DEFAULT END REG = 15 @VA07527 00597100
  605. ST R1,ENDADD DEFAULT END REG @V4075A0 00598000
  606. ST R1,ENDMAX SAVE MAXIMUM REG ADDRESS @V4075A0 00599000
  607. MVC FLDLEN(4),F2 SET MAX FIELD LENGTH @VM08524 00600000
  608. SR R1,R1 SIMULATE DISINIT DEFAULT 00601000
  609. MVC NXTADD(4),ZEROES SET NEXT ADDRESS TO ZERO 00602000
  610. LA R7,CRRET SET UP RETURN 00603000
  611. CRRET EQU * 00604000
  612. TM VMPSTAT,VMV370R IS THIS A VIRTUAL 370 ??? 00605000
  613. BZ DISECR0 NO- DISPLAY CREG 0 ONLY 00606000
  614. SLA R1,2 CONVERT TO FULL WORD DISPLACMENT 00607000
  615. L R14,VMECEXT LOAD VMBLOK EXTENTION ADDRESS 00608000
  616. USING ECBLOK,R14 00609000
  617. L R3,EXTCR0(R1) LOAD VALUE IN REGISTER 00610000
  618. DROP R14 00611000
  619. B DISCOMM PUT IN BUFFER & DISPLAY 00612000
  620. DISECR0 EQU * DISPLAY ONLY C-REG 0 00613000
  621. SLR R1,R1 C-REG 0 00614000
  622. ST R1,ENDADD ...ONLY 00615000
  623. ST R1,NXTADD ... 00616000
  624. LA R7,DUMPCHEK RETURN ADDRESS 00617000
  625. L R3,VMVCR0 DATA TO BE DISPLAYED 00618000
  626. B DISCOMM PUT IN BUFFER + DISPLAY 00619000
  627. EJECT 00620000
  628. * 00621000
  629. * DUMP STORAGE 00622000
  630. * 00623000
  631. DUMPTEST OI SAVEWRK1,HEXLOC INDICATE A LOCATION REQUEST 00624000
  632. MVI SAVEWRK1+2,C'L' DEFAULT TO LOC @V200930 00625000
  633. DMPTST DS 0H @V200930 00626000
  634. TM SAVEWRK1,VIRTC DISPLAY VIRTUAL STORAGE ? 00627000
  635. BZ DISLOCR BRANCH IF NO - REAL STORAGE 00628000
  636. L R2,VMSIZE LOAD VIRTUAL MACHINE SIZE 00629000
  637. DISLOCS BCTR R2,0 -1 @VM08524 00630000
  638. ST R2,TENDADD SAVE MAX ADDRESS @VM08524 00631000
  639. ST R2,ENDMAX .. @VM08524 00632000
  640. S R2,F3 SUBTRACT 3 @VA03720 00633000
  641. ST R2,ENDADD SET DEFAULT ENDING ADDRESS 00634000
  642. OI SAVEWRK1+1,CHEX HEX ADDRESS CONVERT @V200930 00635000
  643. MVC INCRMT(2),F4+2 SET WORD INCREMENT @V200930 00636000
  644. BAL R7,DISINIT INITIALIZE BEGINNING & ENDING ADDRESSES 00637000
  645. NI SAVEWRK1+1,255-CHEX TURN OFF HEX CONVERSION SWITCH 00638000
  646. BAL R7,DISDMPID GET AND PRINT DUMP ID IF ANY @V200930 00639000
  647. L R0,ENDADD GET END ADDRESS @V200930 00640000
  648. L R1,NXTADD GET NEXT ADDRESS @V200930 00641000
  649. STM R0,R1,SAVEWRK8 SAVE FOR AFTER DUMP REGS @V200930 00642000
  650. SR R2,R2 CLEAR FOR INDEX @V200930 00643000
  651. ST R2,SAVEWRK2 INDEX THROUGH DUMP FUNCTIONS @V200930 00644000
  652. TM SAVEWRK1,VIRTC DUMP VIRTUAL ?? @V200930 00645000
  653. BO DUMPSTRT START DUMP OUTPUT @V200930 00646000
  654. OI SAVEWRK1,BYPGPR INDICATE START FIELD FOUND @VM08525 00647000
  655. DISLOC OI BUFLAG,TRANSLAT TRANSLATE HEX DATA FOR DUMP @V200930 00648000
  656. LM R0,R1,SAVEWRK8 GET END AND START VALUES @V200930 00649000
  657. ST R0,ENDADD SET END ADDRESS @V200930 00650000
  658. ST R1,NXTADD SET START ADDRESS @V200930 00651000
  659. DISLOCD MVC INCRMT(2),F4+2 SET WORD INCREMENT @V200930 00652000
  660. OI BUFLAG,FIRSTL FLAG FIRST LINE @V200930 00653000
  661. MVC IDCHAR,CLOC 'LOC' ID FOR DATA @V4075A0 00654000
  662. L R1,ENDADD GET END ADDRESS 00655000
  663. LH R0,BUFTRC GET TRANSLATE COUNT 00656000
  664. BCTR R0,R0 DECREMENT BY 1 00657000
  665. OR R1,R0 ALIGN TO END 00658000
  666. ST R1,ENDADD SET NEW END 00659000
  667. L R1,NXTADD GET START ADDRESS 00660000
  668. LH R0,BUFTRC LOAD TRANSLATE COUNT 00661000
  669. LCR R0,R0 LOAD ITS COMPLEMENT 00662000
  670. NR R1,R0 TRUNCATE TO 16 OR 32 BYTE BOUNDARY 00663000
  671. ST R1,NXTADD STORE NEW BEGINNING ADDRESS 00664000
  672. DISLOCA LA R7,DISLOCA+4 RESET RETURN ADDRESS 00665000
  673. LR R2,R1 LOAD ADDRESS TO BE DISPLAYED 00666000
  674. TM SAVEWRK1,VIRTC DISPLAY VIRTUAL STORAGE ? 00667000
  675. BZ PREFLOC NO, REAL, MAY HAVE TO RECOMP ADDR@V4075A0 00668000
  676. TRANS 2,1,OPT=(BRING,DEFER) GET USER PAGE ADDRESS 00669000
  677. DISLOCL L R3,0(R2) LOAD WORD TO BE DISPLAYED 00670000
  678. BZ DISCOMM PUT DATA INTO BUFFER & DISPLAY @V304635 00671000
  679. OI BUFLAG,INVLD INDICATE INVALID PAGE @V304635 00672000
  680. BAL R4,DISWRITE OUTPUT LINE @V304635 00673000
  681. L R1,NXTADD CONVERT ADDRESS TO PRINTABLE @V304635 00674000
  682. CALL DMKCVTBH @V304635 00675000
  683. STCM R0,B'0011',BUFBUF MOVE BEGINNING ADDRESS @V4075A0 00676000
  684. STCM R1,B'1111',BUFBUF+2 TO OUTPUT BUFFER @V4075A0 00677000
  685. MVC BUFBUF+7(2),=C'TO' @V304635 00678000
  686. MVC BUFBUF+19(23),=C'NON-ADDRESSABLE STORAGE' @V304635 00679000
  687. MVC BFRCNT,=AL2(19+23) SET BYTE COUNT @V304635 00680000
  688. L R1,NXTADD RELOAD ADDRESS @V304635 00681000
  689. NXTINVLD AL R1,F4096 BUMP TO NEXT PAGE ADDRESS @V304635 00682000
  690. N R1,XPAGNUM DROP DISPLACEMENT @V304635 00683000
  691. ST R1,NXTADD SAVE IT AS CURRENT ADDRESS @V304635 00684000
  692. CALL DMKCVTBH CONVERT IT TO HEX PRINTABLE @V304635 00685000
  693. STCM R0,B'1111',BUFBUF+10 PUT ENDING ADDRESS @V4075A0 00686000
  694. STCM R1,B'1111',BUFBUF+12 INTO OUTPUT BUFFER @V4075A0 00687000
  695. L R1,NXTADD RESTORE CURRENT ADDRESS @V304635 00688000
  696. CL R1,VMSIZE STILL WITHIN VM STORAGE SIZE @V304635 00689000
  697. BNL GETOUT IF NOT - GET OUT @V304635 00690000
  698. LCTL C1,C1,VMSEG GET SEGMENT TABLE @V304635 00691000
  699. LRA R0,0(,R1) EXAMINE NEXT PAGE @V304635 00692000
  700. BC 8+2,NXTINV1 CONTINUE IF NOT A SEG EXCEPTION @V408246 00693000
  701. CALL DMKPTRAN,PARM=DEFER OTHERWISE LET PTRAN HANDLE @V408246 00694000
  702. BC 2,NXTINVLD ADDRESSING ERROR @V408246 00695000
  703. NXTINV1 DS 0H @V408246 00696000
  704. CL R1,ENDADD AT END OF DISPLAY ? @V304635 00697000
  705. BNL GETOUT IF YES - FINISH UP @V304635 00698000
  706. BAL R4,DISWRITE NOW DISPLAY THIS LINE @V304635 00699000
  707. BAL R7,DISNCOMM IF DUMPING DISPLAY RESPONSE @VA04637 00700000
  708. B DISLOCA LOAD UP THE DATA @V304635 00701000
  709. GETOUT BAL R4,DISWRITE DISPLAY THE LINE AND FRET THE @V304635 00702000
  710. * BUFFER 00703000
  711. B DUMPCHEK CHECK FOR DUMP FUNCTION @V304635 00704000
  712. SPACE 00705000
  713. DISLOCR L R2,=A(DMKSYSRM) GET REAL MACHINE SIZE 00706000
  714. L R2,0(R2) .. 00707000
  715. B DISLOCS 00708000
  716. SPACE 3 00709000
  717. PREFLOC EQU * 00710000
  718. L R15,=A(DMKSYSAP) SEE WHAT USER PUT IN @V4075A0 00711000
  719. CLI 0(R15),C'Y' THE SYSCOR MACRO @V4075A0 00712000
  720. BNE FETCHRL AP OPTION, WE CHECK AND@V4075A0 00713000
  721. L R0,XPAGNUM @V4075A0 00714000
  722. TM SAVEWRK1+1,MPREF+NPREF PERHAPS RECOMPUTE THE @V4075A0 00715000
  723. BZ ABSPEC EFFECTIVE ADDRESS @V4075A0 00716000
  724. TM SAVEWRK1+1,NPREF DID USER SAY 'M' OR 'N' @V4075A0 00717000
  725. BO RWEN GO FIX UP FOR 'N' SPECIFIED @V4075A0 00718000
  726. RWEM TM APSTAT1,PROCIO HE SAID 'M', ARE WE 'M' ? @V4075A0 00719000
  727. BO FETCHRL YES, DO NOT RECOMPUTE ADDRES@V4075A0 00720000
  728. PFIXCOMP NR R0,R1 GET PAGE NUMBER @V4075A0 00721000
  729. BZ ADDPREFB OTHER PROCESSOR'S PSA. POINT 2 IT@V4075A0 00722000
  730. C R0,PREFIXB ABSOLUTE 0 IN OTHER PROCESSOR'S @V4075A0 00723000
  731. BNE ISITPRFA NO. GO SEE IF IT IS OUR PSA! @V4075A0 00724000
  732. GETABS0 S R1,PREFIXB YES, POINT TO ABSOLUTE 0 VIA OUR @V4075A0 00725000
  733. ADDPREFA A R1,PREFIXA PREFIX REGISTER @V4075A0 00726000
  734. B FETCHRL @V4075A0 00727000
  735. SPACE 2 @V4075A0 00728000
  736. ADDPREFB A R1,PREFIXB POINT TO OTHER PROCESSOR PSA @V4075A0 00729000
  737. B FETCHRL @V4075A0 00730000
  738. SPACE 2 @V4075A0 00731000
  739. RWEN TM APSTAT1,PROCIO USER SAID 'N'. ARE WE 'N' ? @V4075A0 00732000
  740. BNO FETCHRL YES @V4075A0 00733000
  741. B PFIXCOMP NO. SEE ABOUT RECOMPUTING @V4075A0 00734000
  742. SPACE 2 @V4075A0 00735000
  743. ABSPEC NR R0,R1 ABSOLUTE 0 ? @V4075A0 00736000
  744. BZ ADDPREFA YES, UNDO EFFECT OF PREFIX REG @V4075A0 00737000
  745. ISITPRFA C R0,PREFIXA OUR PSA ? @V4075A0 00738000
  746. BNE FETCHRL NO @V4075A0 00739000
  747. SUBPREFA S R1,PREFIXA YES, UNDO OUR PREFIX REG @V4075A0 00740000
  748. FETCHRL L R3,0(R1) FETCH THE DATA WORD ! @V4075A0 00741000
  749. B DISCOMM PUT DATA INTO BUFFER & SHOW IT @V4075A0 00742000
  750. EJECT 00743000
  751. * 00744000
  752. * DUMP STORAGE KEY 00745000
  753. * 00746000
  754. DUMPKEY OI SAVEWRK1+1,CHEX TURN ON HEX CONVERSION SWITCH 00747000
  755. OI SAVEWRK1,HEXLOC FLAG AS BEING HEXLOC REQUEST 00748000
  756. OI BUFLAG,FIRSTL TURN ON FIRST LINE SWITCH 00749000
  757. MVC IDCHAR,KEYEQ SAVE IDENTIFICATION CHARACTERS 00750000
  758. LA R15,2048 LOAD ADDRESS INCREMENT @VA03720 00751000
  759. STH R15,INCRMT SET INCREMENT VALUE 00752000
  760. L R2,VMSIZE LOAD VIRTUAL MACHINE SIZE 00753000
  761. BCTR R2,0 MAKE IT LAST ADDRESS @VM08524 00754000
  762. ST R2,TENDADD SAVE END ADDRESS @VM08524 00755000
  763. ST R2,ENDMAX SET MAXIMUM ADDRESS @VM08524 00756000
  764. S R2,=F'2047' BACK UP TO LAST PAGE ADDR @VM08854 00757000
  765. ST R2,ENDADD SET DEFAULT ENDING ADDRESS 00758000
  766. SR R1,R1 SIMULATE DISINIT DEFAULT 00759000
  767. ST R1,NXTADD SET START ADDRESS TO ZERO 00760000
  768. LA R7,KEYRET SET UP RETURN 00761000
  769. KEYRET NI SAVEWRK1+1,255-CHEX TURN OFF HEX CONVERSION SWITCH 00762000
  770. LA R15,HAVEKEY SET RETURN ADDRESS @VM08553 00763000
  771. GETKEY EQU * HERE TO CALCULATE KEY VALUES @VM08553 00764000
  772. ST R15,SAVEWRK5 SAVE RETURN ADDR @VM08553 00765000
  773. LR R14,R1 LOAD CURRENT ADDRESS 00766000
  774. L R3,VMSEG OBTAIN STO @V408246 00767000
  775. SRDL R14,16 GET SEGMENT NUMBER 00768000
  776. SLL R14,2 MULTIPLY BY 4 00769000
  777. LA R3,0(R14,R3) INDEX TO STE FOR THIS SEGMENT @V408246 00770000
  778. TM 3(R3),1 IS THE STE INVALID? @V408246 00771000
  779. BZ VLDKEY NO, PNTR ALL RIGHT @V408246 00772000
  780. LR R0,R15 SAVE 2ND PART @V408246 00773000
  781. TRANS 2,1,OPT=(DEFER) LET PTR CHECK ON SEGMENT @V408246 00774000
  782. LR R15,R0 RESTORE 2ND PART @V408246 00775000
  783. TM 3(R3),1 DID PTR CLEAR UP PAGE TABLE @V408246 00776000
  784. * POINTER? 00777000
  785. BZ VLDKEY NO, RETURN ZERO KEY @V408246 00778000
  786. L R1,FFS INDICATE MINUS IF NON-ADDRESSABLE@V304635 00779000
  787. B NOKEY PROCESS NON-ADDRESSABLE KEY @V304635 00780000
  788. VLDKEY EQU * HERE FOR ADDRESSABLE STORAGE @V304635 00781000
  789. L R3,0(,R3) GET PAGE TABLE POINTER @V408246 00782000
  790. LA R2,16*2+8(,R3) GET SWAPTABLE ORIGIN @V408246 00783000
  791. SR R14,R14 ZERO WORK REGISTER 00784000
  792. SLDL R14,4 GET PAGE NUMBER 00785000
  793. SLL R14,2 MULTIPLY BY 8 AND 00786000
  794. SLDL R14,1 ADD 1 IF 2ND HALF OF PAGE 00787000
  795. SR R1,R1 ZERO REGISTER 00788000
  796. IC R1,2(R14,R2) INSERT STORAGE KEY 00789000
  797. SRDL R14,1 GET PAGE NUMBER X 2 00790000
  798. SRL R14,1 .. 00791000
  799. LA R3,0(R14,R3) LOAD PAGE TABLE ENTRY ADDRESS 00792000
  800. SR R2,R2 CLEAR FOR ISK (OR LACK OF IT) @VM08553 00793000
  801. TM 1(R3),X'08' IS THE PAGE IN STORAGE ? 00794000
  802. BO GOTPART BRANCH IF NO @VM08553 00795000
  803. LH R14,0(,R3) LOAD REAL PAGE ADDRESS 00796000
  804. SRL R14,4 .. 00797000
  805. SLDL R14,12 ADD DISPLACEMENT ADDRESS 00798000
  806. ISK R2,R14 GET THE REAL STORAGE KEY 00799000
  807. GOTPART TM VMOSTAT,VMSHR IS THIS A SHARED SYSTEM? @VA01666 00800000
  808. BZ *+8 NOPE, SKIP @VA01666 00801000
  809. N R2,=A(X'0E') SHUT OFF PHONEY KEY @VA01666 00802000
  810. OR R1,R2 PUT REAL AND VIRT TOGETHER @VA01666 00803000
  811. LA R3,X'FE' SET FOR ECMODE @VA01666 00804000
  812. TM VMPSTAT,VMV370R DOES THIS MACHINE HAVE EC? @VA01666 00805000
  813. BO *+8 YES, MASK OK @VA01666 00806000
  814. LA R3,X'F8' SET MASK FOR BC TYPE MACHINE @VA01666 00807000
  815. NR R1,R3 SHUT OFF WHATEVER IS NECESSARY. @VA01666 00808000
  816. NOKEY L R15,SAVEWRK5 RESTORE RETURN ADDRESS @V304635 00809000
  817. BR R15 RETURN @VM08553 00810000
  818. HAVEKEY EQU * @VM08553 00811000
  819. TM BUFLAG,FIRSTL IS THIS THE FIRST LINE ? 00812000
  820. BO DISK1STL BRANCH IF YES 00813000
  821. CL R1,LNSAVE SAME AS LAST KEY ? 00814000
  822. BE DISKBUMP BRANCH IF YES 00815000
  823. BAL R4,DISWRITE OUTPUT PREVIOUS LINE 00816000
  824. DISK1STL NI BUFLAG,NFIRSTL TURN OFF IST LINE SWITCH 00817000
  825. MVC BUFBUF+18(5),KEYEQ MOVE 'KEY =' TO BUFFER 00818000
  826. ST R1,LNSAVE SAVE KEY 00819000
  827. CALL DMKCVTBH CONVERT TO PRINTABLE CHARACTERS 00820000
  828. STH R1,BUFBUF+24 STORE KEY IN BUFFER 00821000
  829. LA R1,26 STANDARD LINE LENGTH @V304635 00822000
  830. CLI LNSAVE,X'FF' IS IT NON-ADDRESSABLE STORAGE ? @V304635 00823000
  831. BNE SETBUFLG NO - SET UP BUFFER LENGTH @V304635 00824000
  832. MVC BUFBUF+18(23),=C'NON-ADDRESSABLE STORAGE' @V304635 00825000
  833. LA R1,15(,R1) LENGTH-EN MESSAGE LINE @V304635 00826000
  834. SETBUFLG STH R1,BFRCNT SET LINE LENGTH. @V304635 00827000
  835. L R1,NXTADD LOAD BEGINNING ADDRESS 00828000
  836. CALL DMKCVTBH CONVERT TO PRINTABLE CHARACTERS 00829000
  837. STCM R0,B'0011',BUFBUF MOVE IT TO @V4075A0 00830000
  838. STCM R1,B'1111',BUFBUF+2 OUTPUT BUFFER @V4075A0 00831000
  839. MVC BUFBUF+7(2),=C'TO' 00832000
  840. DISKBUMP L R1,NXTADD LOAD CURRENT ADDRESS 00833000
  841. LA R1,2047(R1) ADD 2047 00834000
  842. CALL DMKCVTBH CONVERT TO PRINTABLE CHARACTERS 00835000
  843. STM R0,R1,FIELD STORE IN WORK AREA 00836000
  844. MVC BUFBUF+10(6),FIELD+2 MOVE TO BUFFER 00837000
  845. B DISNEXTA GET NEXT ADDRESS 00838000
  846. EJECT 00839000
  847. * THE FOLLOWING TWO SUBROUTINES ARE USED TO INITIALIZE AND 00840000
  848. * CONTROL THE DUMPING OF A RANGE OF ADDRESSES. REGISTER 7 IS 00841000
  849. * LOADED BY A BAL TO DISINIT FROM THE VARIOUS DUMP ROUTINES. 00842000
  850. * IT IS LATER USED BY DISNEXTA TO RETURN TO THE ROUTINE THAT 00843000
  851. * LAST CALLED DISINIT TO DISPLAY THE NEXT ADDRESS. 00844000
  852. * 00845000
  853. * INITIALIZE BEGINNING AND ENDING ADDRESSES SUBROUTINE 00846000
  854. * 00847000
  855. DISINIT EQU * 00848000
  856. MVC TENDADD(4),ENDMAX SET UP TRUE END DEFAULT @VM08524 00849000
  857. NI SAVEWRK1,X'FF'-RANGE-DISLEN RESET FLAGS @V200930 00850000
  858. LA R1,1(,R5) BUMP PAST TYPE CODE 00851000
  859. CH R6,F1+2 ANY ADDRESS SPECIFIED ???? 00852000
  860. BH DISISCAN BRANCH IF YES 00853000
  861. SPACE 00854000
  862. OI SAVEWRK1,RANGE INDICATE RANGE OF OPERANDS @VM08515 00855000
  863. B DISIBLNK GO SET DEFAULTS 00856000
  864. SPACE 00857000
  865. * NOW CHECK FOR A COLON OR HYPHEN 00858000
  866. SPACE 00859000
  867. DISISCAN EQU * 00860000
  868. LR R14,R6 LENGTH TO R14 00861000
  869. BCTR R14,0 MINUS ONE FOR TYPE CODE BYPASS 00862000
  870. DISICOLN CLI 0(R1),C':' CHECK FOR A COLON 00863000
  871. BE DISIHYPH BRANCH IF YES 00864000
  872. CLI 0(R1),C'-' HYPHEN ???? 00865000
  873. BE DISIHYPH YES --- 00866000
  874. CLI 0(R1),C'.' IS IT A LENGTH ?? @V200930 00867000
  875. BE DISDOT YES, FLAG AND CONTINUE @V200930 00868000
  876. CLI 0(R1),C' ' BLANK ??? 00869000
  877. BNH DISIBLNK BRANCH IF IT IS @VM08515 00870000
  878. LA R1,1(,R1) BUMP TO NEXT CHAR. 00871000
  879. BCT R14,DISICOLN LOOP BACK IF HAVE MORE CHARACTERS TO CHK. 00872000
  880. B DISIBLNK NO MORE - TREAT AS BLANK @VM08515 00873000
  881. SPACE 00874000
  882. DISDOT OI SAVEWRK1,DISLEN FLAG LENGTH RANGE @V200930 00875000
  883. DISIHYPH OI SAVEWRK1,RANGE SET RANGE SWITCH 00876000
  884. BCTR R6,0 MINUS ONE FROM LENGTH FOR HYPHEN 00877000
  885. LA R0,1(R5,R6) COMPUTE LENGTH OF ENDING FIELD 00878000
  886. LA R1,1(,R1) . . . 00879000
  887. SR R0,R1 . . . 00880000
  888. BNP DISIBLNK NO ENDING FIELD - TREAT AS BLANK @VM08515 00881000
  889. SR R6,R0 COMPUTE LENGTH OF BEGINNING FIELD 00882000
  890. SPACE 00883000
  891. CL R0,F3 THREE CHARACTERS ???? 00884000
  892. BNE DISICNVT NOT 'END' - BRANCH @VM08515 00885000
  893. LR R14,R0 COUNT TO GPR 14 00886000
  894. BCTR R14,0 LESS ONE FOR 'EX' 00887000
  895. EX R14,ENDCOMP IS IT 'END' ???? 00888000
  896. BE DISIBLNK BRANCH IF IT IS 00889000
  897. DISICNVT STM R0,R1,SAVEWRK8 SAVE FOR POSSIBLE ERROR MSG 00890000
  898. NI SAVEWRK1+1,X'FF'-CONVLEN RESET FLAG @V200930 00891000
  899. TM SAVEWRK1,RANGE+DISLEN LENGTH RANGE ?? @V200930 00892000
  900. BNO *+8 NO, NOT LENGTH FIELD @V200930 00893000
  901. OI SAVEWRK1+1,CONVLEN INDICATE CONVERT LENGTH @V200930 00894000
  902. BAL R4,CNVTBIN CONVERT END ADDRESS TO BINARY 00895000
  903. BNZ BADADDR BRANCH IF BAD CONVERT 00896000
  904. ST R15,TENDADD SAVE TRUE END ADDRESS @VM08524 00897000
  905. CLI SAVEWRK1+2,C'Y' FLOATING POINT FUNCTION @VM08524 00898000
  906. BNE REMEND NO -- @VM08524 00899000
  907. TM SAVEWRK1,DISLEN+RANGE REG COUNT @VM08524 00900000
  908. BO YREGCNT YES - VALIDATE REG COUNT @VM08524 00901000
  909. TM TENDADD+3,X'01' VALID Y REG NUMBER @VM08524 00902000
  910. BO CDM010 NO - REG ODD ERROR @VA01634 00903000
  911. CL R15,F6 Y REG 0 2 4 6 @VM08524 00904000
  912. BH CDM010 NO - Y REG ERROR @VA01634 00905000
  913. B REMEND CONT @VM08524 00906000
  914. YREGCNT SLL R15,1 X 2 (0 2 4 6) @VA01634 00907000
  915. BCTR R15,0 -1 FOR LENGTH COUNT @VM08524 00908000
  916. ST R15,TENDADD UPDATE NEW LENGTH COUNT @VM08524 00909000
  917. LR R1,R15 CORRECT LENGTH REG @VM08524 00910000
  918. REMEND LR R2,R1 REMEMBER END ADDRESS @VM08524 00911000
  919. NI SAVEWRK1+1,X'FF'-CONVLEN RESET LENGTH FLAG @V200930 00912000
  920. DISTRT LR R0,R6 GET LENGTH OF START CODE @VM08524 00913000
  921. BCT R0,DISIBGNA SUBTRACT 1 FROM LENGTH FOR TYPE CODE 00914000
  922. SR R1,R1 SET DEFAULT BEGINNING ADDRESS TO ZERO 00915000
  923. ST R1,NXTADD .. 00916000
  924. ST R1,TBEGADD SAVE TRUE BEGIN ADDRESS @VM08524 00917000
  925. B DISTDOT TEST FOR LENGTH RANGE @V200930 00918000
  926. DISIBGNA LA R1,1(R5) LOAD ADDRESS OF BEGINNING FIELD 00919000
  927. STM R0,R1,SAVEWRK6 SAVE FOR POSSIBLE ERROR @VM08524 00920000
  928. BAL R4,CNVTBIN CONVERT BEGINNING ADDRESS 00921000
  929. BNZ BADADDR1 BRANCH IF BAD CONVERSION @VM08524 00922000
  930. ST R15,TBEGADD SAVE TRUE BEGIN ADDRESS @VM08524 00923000
  931. CL R15,ENDMAX IS IT ABOVE MAXIMUM ? @VM08524 00924000
  932. BNH RANGOK1 NO, CONTINUE... @VA01634 00925000
  933. MVC SAVEWRK8(8),SAVEWRK6 FOR ERROR MESSAGE @VA03060 00926000
  934. TM SAVEWRK1,HEXLOC WHICH KIND OF ERROR? @VA01634 00927000
  935. BO CDM160 HEXADDR ERROR @VA01634 00928000
  936. B CDM010 REG ERROR. @VA01634 00929000
  937. RANGOK1 EQU * @VA01634 00930000
  938. ST R1,NXTADD INITIALIZE BEGINNING ADDRESS 00931000
  939. CLI SAVEWRK1+2,C'Y' YREG PROCESSING @VM08524 00932000
  940. BNE DISTDOT NO -- @VM08524 00933000
  941. TM TBEGADD+3,X'01' YREG 0 2 4 6 @VM08524 00934000
  942. BO BADADDR1 NO - YREG ERROR @VM08524 00935000
  943. DISTDOT TM SAVEWRK1,RANGE+DISLEN IS IT LENGTH RANGE ?? @V200930 00936000
  944. BNO DISENDA NO, SAVE END ADDRESS @V200930 00937000
  945. L R15,TENDADD GET BYTE OR REG COUNT VALUE @VM08524 00938000
  946. A R15,TBEGADD UPDATE TRUE END ADDRESS @VM08524 00939000
  947. BCTR R15,0 -1 @VM08524 00940000
  948. ST R15,TENDADD .. @VM08524 00941000
  949. AL R2,TBEGADD ADD TO THE TRUE BEGIN ADDR @VA03502 00942000
  950. DISENDA ST R2,ENDADD SET END ADDRESS @VM08524 00943000
  951. CLC TBEGADD(4),TENDADD START LARGER THAN END @VM08524 00944000
  952. BH CKRANGE YES, ERROR @VM08524 00945000
  953. CLC TENDADD(4),ENDMAX END ADDRESS ABOVE MAXIMUM @VM08524 00946000
  954. BH CKRANGE YES, ERROR @VM08524 00947000
  955. TM SAVEWRK1,RANGE DISPLAY A RANGE OF ADDRESSES ? 00948000
  956. BCR 1,R7 YES - RETURN 00949000
  957. MVC ENDADD,NXTADD MAKE ENDING ADDRESS SAME AS BEGINNING 00950000
  958. BR R7 RETURN 00951000
  959. SPACE 00952000
  960. CKRANGE TM SAVEWRK1,RANGE RANGE OF ADDRESSES ??? 00953000
  961. BO CDM009 SEND BAD RANGE MESSAGE 00954000
  962. MVC SAVEWRK8(8),SAVEWRK6 FOR ERROR MESSAGE @VA03060 00955000
  963. TM SAVEWRK1,HEXLOC LOCATION OR REGISTER ???? 00956000
  964. BO CDM160 BRANCH IF LOCATION 00957000
  965. B CDM010 MUST BE REGISTER 00958000
  966. DISIBLNK L R2,ENDADD SET DEFAULT END ADDRESS @V200930 00959000
  967. NI SAVEWRK1,X'FF'-DISLEN NO LENGTH ON DEFAULT @V200930 00960000
  968. B DISTRT CONTINUE @V200930 00961000
  969. EJECT 00962000
  970. * 00963000
  971. * GET NEXT ADDRESS SUBROUTINE 00964000
  972. * 00965000
  973. DISNEXTA TM VMRSTAT,VMLOGOFF IS USER LOGGING OFF? @VA03502 00966000
  974. BO EXIT YES--TERMINATE IT @VA03502 00967000
  975. L R1,NXTADD LOAD CURRENT ADDRESS @VA03502 00968000
  976. AH R1,INCRMT GET NEXT ADDRESS @VA03720 00969000
  977. CL R1,ENDADD GREATER THAN ENDING ADDRESS? @VA03720 00970000
  978. BH DUMPCHEK YES, GO OUTPUT IF DUMP FUNCTION @VA03720 00971000
  979. ST R1,NXTADD STORE NEXT ADDR @VA03502 00972000
  980. B CKDUMP @VA03502 00973000
  981. DISNCOMM TM VMRSTAT,VMLOGOFF IS USER LOGGING OFF ? 00974000
  982. BO EXIT YES TERMINATE THE DUMP OR DISPLAY 00975000
  983. CL R1,ENDADD GREATER THAN ENDING ADDRESS ? 00976000
  984. BH DUMPCHEK YES-GO SEE IF DUMP FUNCTION 00977000
  985. ST R1,NXTADD STORE NEXT ADDRESS 00978000
  986. CKDUMP EQU * @VA03502 00979000
  987. LH R4,INCRMT GET CURRENT INCREMENT @V200930 00980000
  988. CH R4,F4+2 IS IT STORAGE INCREMENT ?? @V200930 00981000
  989. BCR 7,R7 NO, CONT @V200930 00982000
  990. LR R4,R1 GET NEXT ADDRESS .... ASSUME @V200930 00983000
  991. * LOCATION 00984000
  992. N R4,XRIGHT16 TEST FOR SEG BOUND START @V200930 00985000
  993. BCR 7,R7 NO, CONT @V200930 00986000
  994. CALL DMKCVTBH CONVERT ADDRESS @V200930 00987000
  995. MVC FIELD(L'DUMPMSG),DUMPMSG SET IN MSG @V4075A0 00988000
  996. STCM R0,B'0011',FIELD+L'DUMPMSG PUT INTO USER MSG @V4075A0 00989000
  997. STCM R1,B'1111',FIELD+L'DUMPMSG+2 6 BYTES OF VAR INF @V4075A0 00990000
  998. LA R0,L'DUMPMSG+6 SIZE @V4075A0 00991000
  999. LA R1,FIELD MESSAGE FOR DUMPING @V4075A0 00992000
  1000. CALL DMKQCNWT,PARM=0 WIAT FOR WRITE @V200930 00993000
  1001. BNZ EXIT STOP THE DUMP @V200930 00994000
  1002. L R1,NXTADD SET NEXT ADDRESS FOR DISPLAY @V200930 00995000
  1003. BR R7 CONTINUE 00996000
  1004. DUMPCHEK EQU * 00997000
  1005. BAL R4,DISWRITE OUTPUT LINE 00998000
  1006. MVC BFRCNT(2),BUFMAX PUT SOMETHING IN BFRCNT 00999000
  1007. BAL R4,DISWRITE PRINT BLANK LINE 01000000
  1008. TM SAVEWRK1,DUMPC+VIRTC IS THIS A VIRTUAL DUMP ???? 01001000
  1009. BNO DISGETN GET NEXT FILED @V200930 01002000
  1010. TM SAVEWRK1,BYPGPR FINISHED NEXT DUMP FIELD ?? @V200930 01003000
  1011. BO DISGETN YES, GET NEXT FIELD @V200930 01004000
  1012. L R15,SAVEWRK2 LOAD INDEX 01005000
  1013. LA R15,4(,R15) BUMP INDEX COUNT 01006000
  1014. ST R15,SAVEWRK2 STORE NEW INDEX COUNT 01007000
  1015. B DUMPINDX(R15) DO NEXT DUMP FUNCTION @V200930 01008000
  1016. DUMPSTRT TM SAVEWRK1,BYPGPR DOING NEXT DUMP FILED ?? @V200930 01009000
  1017. BO DISLOC YES, LOCATIONS ONLY @V200930 01010000
  1018. DUMPINDX B DUMPGPR GO DUMP GENERAL REGISTERS @V200930 01011000
  1019. B DUMPECR GO DUMP CONTROL REGISTERS 01012000
  1020. B DUMPFPR GO DUMP FLOATING POINT REGISTERS 01013000
  1021. B DUMPKEY GO DUMP THE STORAGE KEYS 01014000
  1022. B DUMPPSW GO DUMP THE PSW 01015000
  1023. B DISLOC DUMP LOCATIONS 01016000
  1024. OI SAVEWRK1,BYPGPR DONE REGS,DONT DO AGAIN @V200930 01017000
  1025. B DISGETN GET NEXT FIELD @V200930 01018000
  1026. SPACE 01019000
  1027. DUMPMSG DC C'DUMPING LOC ' @V200930 01020000
  1028. EJECT 01021000
  1029. USING BUFFER,R9 01022000
  1030. SPACE 01023000
  1031. DISDMPID LM R0,R1,BUFNXT SAVE NEXT AND COUNT FOR COMMAND LINE 01024000
  1032. STM R0,R1,SAVEWRK8 . . . 01025000
  1033. GETDMPID CALL DMKSCNFD GET FIELD NEXT @V200930 01026000
  1034. BNZ DMPIDAD NONE, SET DUMP ADDRESSES @V200930 01027000
  1035. CLI 0(R1),C'*' IS IT THE DUMP ID ?? @V200930 01028000
  1036. BNE GETDMPID NO, LOOP TIL FOUND OR END @V200930 01029000
  1037. LR R3,R1 REMEMBER START OF FIELD @V200930 01030000
  1038. DMPID CALL DMKSCNFD GET MORE FILEDS OF ID @V200930 01031000
  1039. BZ DMPID LOOP TIL END @V200930 01032000
  1040. L R2,BUFNXT GET LAST POSITION ADDRESS @V200930 01033000
  1041. SR R2,R3 MINUS BEGGINING IS THE LENGTH @V200930 01034000
  1042. BNP DMPIDAD NONE SET DUMP ADDRESSES @V200930 01035000
  1043. CL R2,=F'100' ONLY 100 CHARACTERS ALLOWED @V200930 01036000
  1044. BL *+8 OK, CONT @V200930 01037000
  1045. LA R2,100 SET MAX @V200930 01038000
  1046. BCTR R2,R0 SET FOR EXECUTE @V200930 01039000
  1047. EX R2,MOVEID SET DUMP ID @V200930 01040000
  1048. DMPIDAD MVC BUFBUF(8),CDUMPLOC 'DUMP LOC' FOR HEADER @V4075A0 01041000
  1049. L R1,NXTADD GET DUMP START @V200930 01042000
  1050. CALL DMKCVTBH CONVERT @V200930 01043000
  1051. STCM R0,B'0011',BUFBUF+9 PUT START ADDRESS (6 @V4075A0 01044000
  1052. STCM R1,B'1111',BUFBUF+11 BYTES) INTO OUTPUT @V4075A0 01045000
  1053. MVI BUFBUF+15,C'-' EDIT @V200930 01046000
  1054. L R1,ENDADD GET END ADDRESS @V200930 01047000
  1055. CALL DMKCVTBH CONVERT @V200930 01048000
  1056. STCM R0,B'0011',BUFBUF+16 @V4075A0 01049000
  1057. STCM R1,B'1111',BUFBUF+18 PUT END ADDRESS INTO BUF@V4075A0 01050000
  1058. MVC BFRCNT(2),BUFMAX PUT COUNT IN BFRCNT FOR DISWRITE 01051000
  1059. BAL R4,DISWRITE GO OUTPUT LINE 01052000
  1060. MVC BFRCNT(2),BUFMAX PUT COUNT IN BFRCNT AGAIN 01053000
  1061. BAL R4,DISWRITE NOW PRINT BLANK LINE 01054000
  1062. SPACE 01055000
  1063. LM R0,R1,SAVEWRK8 RESTORE BUFNXT AND BUFCOUNT @VM08515 01056000
  1064. STM R0,R1,BUFNXT . . . 01057000
  1065. BR R7 RETURN 01058000
  1066. SPACE 01059000
  1067. ENDCOMP CLC 0(0,R1),=C'END ' EXECUTED COMPARE 01060000
  1068. EJECT 01061000
  1069. ********************************************************************* 01062000
  1070. * 01063000
  1071. * SUBROUTINE TO FORMAT LINE HEADER & TRAILER 01064000
  1072. * 01065000
  1073. ********************************************************************* 01066000
  1074. DISHEAD L R1,NXTADD GET NEXT ADDRESS 01067000
  1075. CLC IDCHAR,CLOC DISPLAY OR DUMP STORAGE COMMAND? @V4075A0 01068000
  1076. BE DISHCORE BRANCH IF YES 01069000
  1077. MVC BUFBUF(3),IDCHAR MOVE IDENTIFICATION TO BUFFER 01070000
  1078. CALL DMKCVTBD CONVERT REGISTER NUMBER TO DECIMAL 01071000
  1079. STH R1,BUFBUF+4 STORE IN BUFFER 01072000
  1080. CLI BUFBUF+4,C'0' LEADING ZERO ? 01073000
  1081. BNE DISHSETP BRANCH IF NO 01074000
  1082. MVI BUFBUF+4,C' ' YES - REPLACE WITH A BLANK 01075000
  1083. DISHSETP MVI BUFBUF+7,C'=' 01076000
  1084. DISHSETC LA R1,BUFBUF+10 SET ADDRESS 01077000
  1085. ST R1,BUFPNT STORE POINTER 01078000
  1086. MVC BFRCNT,F10+2 SET COUNT = 10 @V4075A0 01079000
  1087. BR R8 RETURN 01080000
  1088. SPACE 2 01081000
  1089. DISHCORE EQU * 01082000
  1090. TM BUFLAG,FIRSTL IS THIS THE 1ST LINE ? 01083000
  1091. BO DISH1STL BRANCH IF YES 01084000
  1092. TM BUFLAG,SAMEL LINES ALREADY SUPPRESSED ? 01085000
  1093. BO DISHSUPP BRANCH IF YES 01086000
  1094. BAL R15,SETR14 GO SET UP 'EX' REG. 01087000
  1095. L R1,NXTADD RELOAD NEXT ADDRESS 01088000
  1096. EX R14,DISHCLCL SAME AS LAST LINE ? 01089000
  1097. BNE DISHSAVE BRANCH IF NO 01090000
  1098. OI BUFLAG,SAMEL TURN ON SAME AS LAST LINE SWITCH 01091000
  1099. CALL DMKCVTBH CONVERT ADDRESS TO HEX 01092000
  1100. STCM R0,B'0011',BUFBUF @V4075A0 01093000
  1101. STCM R1,B'1111',BUFBUF+2 MOVE ADDR (6 BYTES) TO BUF@V4075A0 01094000
  1102. L R1,NXTADD RELOAD CURRENT ADDRESS 01095000
  1103. MVC BUFBUF+7(2),=C'TO' 01096000
  1104. MVC BUFBUF+19(L'SUPPLMSG),SUPPLMSG MOVE MESSAGE TEXT 01097000
  1105. MVC BFRCNT,=AL2(L'SUPPLMSG+19) SET BYTE COUNT 01098000
  1106. DISHBUMP AH R1,BUFTRC BUMP TO NEXT LINE ADDRESS 01099000
  1107. TM SAVEWRK1,VIRTC REAL OR VIRTUAL 01100000
  1108. BO DISHVIRT BRANCH AROUND IF IT'S VIRTUAL 01101000
  1109. L R14,=A(DMKSYSRM) GET ADDRESS OF TOP 01102000
  1110. L R14,0(,R14) LOAD THE ADDRESS 01103000
  1111. B DISHCKR1 GO SEE IF IT WILL FIT 01104000
  1112. DISHVIRT EQU * 01105000
  1113. L R14,VMSIZE LOAD VIRTUAL MACHINE SIZE 01106000
  1114. DISHCKR1 EQU * 01107000
  1115. CR R1,R14 ADDRESS IN R1 TOO HIGH 01108000
  1116. BNH DISHSTR1 BRANCH IF IT ISN'T 01109000
  1117. LR R1,R14 MAKE IT VALID 01110000
  1118. DISHSTR1 EQU * 01111000
  1119. ST R1,NXTADD SAVE NEW ADDRESS 01112000
  1120. CALL DMKCVTBH CONVERT ADDRESS TO HEX 01113000
  1121. STCM R0,B'0011',BUFBUF+10 AND STORE INTO OUTPUT @V4075A0 01114000
  1122. STCM R1,B'1111',BUFBUF+12 @V4075A0 01115000
  1123. L R1,NXTADD RELOAD NEXT ADDRESS 01116000
  1124. B DISNCOMM CHECK NEXT ADDRESS 01117000
  1125. EJECT 01118000
  1126. DISH1STL NI BUFLAG,NFIRSTL TURN OFF 1ST LINE SWITCH 01119000
  1127. DISHSAVE NI BUFLAG,NSAMEL TURN OFF SUPPRESSED LINES SWITCH 01120000
  1128. CALL DMKCVTBH CONVERT ADDRESS TO HEX @VM08515 01121000
  1129. STCM R0,B'0011',BUFBUF @V4075A0 01122000
  1130. STCM R1,B'1111',BUFBUF+2 PLACE INTO OUTPUT BUFFER @V4075A0 01123000
  1131. BAL R15,SETR14 GO SET UP 'EX' REG. 01124000
  1132. EX R14,DISHMVCL SAVE NEXT 16 OR 32 BYTES 01125000
  1133. LA R1,BUFBUF+92 POINT TO KEY AREA 01126000
  1134. CH R14,=H'31' LONG LINE ?? 01127000
  1135. BE *+8 YES 01128000
  1136. LA R1,BUFBUF+49 POINT TO KEY IN SHORT LINE @V200930 01129000
  1137. LR R4,R1 SAVE BUFFER ADDRESS 01130000
  1138. LR R1,R2 GET DATA ADDRESS 01131000
  1139. N R1,=F'2047' AT 2K BOUNDARY ?? 01132000
  1140. BNZ BUFUP NO .. 01133000
  1141. ST R14,REGSAVE SAVE ACROSS SUBROUTINE @VM08553 01134000
  1142. STM R2,R3,REGSAVE+4 ... @VM08553 01135000
  1143. L R1,NXTADD GET THE ADDRESS OF THIS PAGE @VM08854 01136000
  1144. TM SAVEWRK1,VIRTC IS THIS VIRT STORAGE? @VM08854 01137000
  1145. BO CDMK01 VIRT, LET SUBROUTINE DO IT @VM08854 01138000
  1146. SR R1,R1 CLEAR OUT FOR CVT ROUTINE @VM08854 01139000
  1147. ISK R1,R2 GET THE REAL STUFF @VM08854 01140000
  1148. B CDMK02 AND CONTINUE NORMALLY @VM08854 01141000
  1149. SPACE 01142000
  1150. CDMK01 BAL R15,GETKEY GO GET THE KEY @VM08854 01143000
  1151. CDMK02 CALL DMKCVTBH CONVERT @VM08854 01144000
  1152. L R14,REGSAVE RESTORE FOR RETURN 01145000
  1153. LM R2,R3,REGSAVE+4 RESTORE THE REGS @VM08553 01146000
  1154. STH R1,0(R4) PUT KEY IN LINE 01147000
  1155. BUFUP LR R1,R4 RESTORE BUFFER ADDRESS 01148000
  1156. LA R1,4(R1) POINT TO TRANSLATE AREA 01149000
  1157. MVI 0(R1),C'*' 01150000
  1158. EX R14,DISHMVCB MOVE LINE TO BUFFER 01151000
  1159. L R15,=A(DMKDMPTR) LOAD TRANSLATE TABLE ADDRESS 01152000
  1160. EX R14,DISHTRLN TRANSLATE TO PRINTABLE CHARACTERS 01153000
  1161. LA R1,2(R14,R1) BUMP POINTER TO NEXT BYTE 01154000
  1162. MVI 0(R1),C'*' 01155000
  1163. B DISHSETC SET POINTER AND COUNT 01156000
  1164. SPACE 2 01157000
  1165. DISHSUPP EQU * 01158000
  1166. BAL R15,SETR14 GO SET UP 'EX' REG. 01159000
  1167. L R1,NXTADD RELOAD NEXT ADDRESS 01160000
  1168. EX R14,DISHCLCL SAME AS LAST LINE ? 01161000
  1169. BE DISHBUMP BRANCH IF YES 01162000
  1170. BAL R4,DISWRITE OUTPUT SUPPRESSED LINES MESSAGE 01163000
  1171. TM SAVEWRK1,VIRTC VIRTUAL REQUEST ????? 01164000
  1172. BZ DISHSAVE NO -- NO NEED TO DO TRANS 01165000
  1173. TRANS 2,1,OPT=(BRING,DEFER) MAKE SURE ADDRESS STILL IN !! 01166000
  1174. B DISHSAVE SAVE THIS LINE 01167000
  1175. SPACE 2 01168000
  1176. ********************************************************************* 01169000
  1177. * * 01170000
  1178. * THIS SUBROUTINE INSURES THAT R14 WHICH IS USED FOR EXECUTED * 01171000
  1179. * COMPARES AND MOVES DOES NOT CONTAIN A COUNT THAT WILL * 01172000
  1180. * GO PAST THE END OF REAL STORAGE * 01173000
  1181. * * 01174000
  1182. ********************************************************************** 01175000
  1183. SPACE 2 01176000
  1184. SETR14 LH R14,BUFTRC LOAD NORMAL TRANSLAT COUNT 01177000
  1185. L R1,=A(DMKSYSRM) ADDRESS OF TOP OF STORAGE CONST. 01178000
  1186. L R0,0(,R1) TOP OF STORAGE TO R0 01179000
  1187. SR R0,R2 DIFFERENCE BETWEEN PRESENT AND TOP 01180000
  1188. CR R0,R14 COMPARE THE COUNTS 01181000
  1189. BH R14OK R14 IS VALID IF BRANCH 01182000
  1190. LR R14,R0 IF NOT - MAKE IT VALID 01183000
  1191. R14OK BCTR R14,0 MINUS ONE FOR THE EXECUTES 01184000
  1192. BR R15 GO BACK 01185000
  1193. SPACE 6 01186000
  1194. * EXECUTED INSTRUCTIONS 01187000
  1195. SPACE 01188000
  1196. DISHCLCL CLC LNSAVE(0),0(R2) 01189000
  1197. DISHMVCL MVC LNSAVE(0),0(R2) 01190000
  1198. DISHMVCB MVC 1(0,R1),0(R2) 01191000
  1199. DISHTRLN TR 1(0,R1),0(R15) 01192000
  1200. MOVEID MVC BUFBUF+25(*-*),0(R3) EXECUTED FOR DUMP ID @V200930 01193000
  1201. EJECT 01194000
  1202. * 01195000
  1203. * OUTPUT SUBROUTINE 01196000
  1204. * 01197000
  1205. DISWRITE TM VMRSTAT,VMLOGOFF IS USER LOGGING OFF ? 01198000
  1206. BO EXIT YES TERMINATE THE DUMP OR DISPLAY 01199000
  1207. TM VMOSTAT,VMKILL IS USER BEING FORCED OFF @VA05493 01200000
  1208. BO EXIT YES, TERMINATE DUMP OR DISPLAY @VA05493 01201000
  1209. STM R0,R3,REGSAVE SAVE REGISTERS 01202000
  1210. LH R0,BFRCNT LOAD BUFFER BYTE COUNT 01203000
  1211. LTR R0,R0 IS IT ZERO ? 01204000
  1212. BZ DISWRTOK YES - NOTHING TO OUTPUT 01205000
  1213. LR R1,R10 LOAD BUFFER ADDRESS 01206000
  1214. DISWPRT EQU * 01207000
  1215. TM LINECNT,X'FF' TEST IF LINECOUNT IS ZERO 01208000
  1216. BZ DISSKIP BRANCH IF IT IS 01209000
  1217. DISWPRTA LA R0,132 SIZE OF LINE 01210000
  1218. CALL DMKVSPRT OUTPUT LINE 01211000
  1219. LTR R2,R2 GOOD RETURN FROM VSPOOL @VA01024 01212000
  1220. BZ DISBMPLC YES - GO BUMP LINE COUNT @VA01024 01213000
  1221. CL R2,F4 PRINTER NOT AVAILABLE ????? @VA01024 01214000
  1222. BE CDM060 YEP - GO SEND MESSAGE @VA01024 01215000
  1223. B CDM061 MUST BE SPOOL PROBLEM @VA01024 01216000
  1224. DISBMPLC EQU * @VA01024 01217000
  1225. IC R2,LINECNT INSERT LINECOUNT 01218000
  1226. BCTR R2,0 SUBTRACT ONE 01219000
  1227. STC R2,LINECNT STORE DECREMENTED COUNT 01220000
  1228. DISWRTOK ST R10,BUFPNT RESET BUFFER POINTER 01221000
  1229. MVC BFRCNT(2),ZEROES ZERO THE BYTE COUNT 01222000
  1230. MVI BUFBUF,C' ' CLEAR BUFFER 01223000
  1231. MVC BUFBUF+1(131),BUFBUF 01224000
  1232. LM R0,R3,REGSAVE RESTORE REGISTERS 01225000
  1233. BR R4 RETURN 01226000
  1234. SPACE 01227000
  1235. DISSKIP SR R0,R0 ZERO GPR0 01228000
  1236. CALL DMKVSPRT SKIP TO NEXT PAGE 01229000
  1237. MVI LINECNT,60 SET NUMBER OF LINES TO 60/PAGE 01230000
  1238. B DISWPRTA NOW GO OUTPUT LINE 01231000
  1239. EJECT 01232000
  1240. ********************************************************************* 01233000
  1241. * SUBROUTINE TO CONVERT AN ADDRESS TO BINARY 01234000
  1242. * 01235000
  1243. * ON ENTRY - R0 = LENGTH OF FIELD 01236000
  1244. * R1 = LOCATION OF FIELD 01237000
  1245. * ON EXIT - R1 = RESULT OF CONVERSION TRUNCATED 01238000
  1246. * TO INCREMENT BOUNDARY 01239000
  1247. * CC = 0 IF CONVERSION IS SUCCESSFUL 01240000
  1248. * CC = 1 IF CONVERSION ERROR 01241000
  1249. * 01242000
  1250. ********************************************************************* 01243000
  1251. CNVTBIN CL R0,FLDLEN LENGTH GREATER THAN MAX ? @VM08524 01244000
  1252. BH CDM003 YES - ERROR DMKCDM003 @VM08524 01245000
  1253. STM R0,R1,REGSAVE SAVE INPUT CONDITIONS @VM08524 01246000
  1254. TM SAVEWRK1+1,CHEX HEXADECIMAL FIELD ? 01247000
  1255. BO CNVTHEX BRANCH IF YES 01248000
  1256. CALL DMKCVTDB CONVERT TO BINARY 01249000
  1257. BZ CNVTCOMM BRANCH IF CONVERSION OK 01250000
  1258. LM R0,R1,REGSAVE RESTORE INPUT CONDITIONS 01251000
  1259. CNVTHEX CALL DMKCVTHB CONVERT TO BINARY 01252000
  1260. BCR 7,R4 RETURN IF BAD CONVERSION 01253000
  1261. CNVTCOMM LH R0,INCRMT LOAD ADDRESS INCREMENT 01254000
  1262. LCR R0,R0 LOAD COMPLEMENT OF INCREMENT 01255000
  1263. LR R15,R1 SAVE TRUE ADDRESS @VM08524 01256000
  1264. TM SAVEWRK1+1,CONVLEN CONVERT LENGTH FIELD ?? @V200930 01257000
  1265. BZ TRUNC NO, TRUNC FOR ALIGN @V200930 01258000
  1266. LTR R1,R1 IS LENGTH ZERO ?? @V200930 01259000
  1267. BZ BADADDR YES, INVALID LENGTH @VM08524 01260000
  1268. BCTR R1,R0 ONE LESS IN R1 FOR RANGE @V200930 01261000
  1269. TRUNC DS 0H @V200930 01262000
  1270. NR R1,R0 TRUNCATE TO INCREMENT BOUNDARY 01263000
  1271. SR R0,R0 SET CC = 0 01264000
  1272. BR R4 RETURN TO CALLER 01265000
  1273. EJECT 01266000
  1274. CONFMSG MSG 'COMMAND COMPLETE' 01267000
  1275. CALL DMKQCNWT,PARM=NORET 01268000
  1276. B EXIT 01269000
  1277. BADADDR1 LM R0,R1,SAVEWRK6 LEN AND ADDRESS OF STARTING FIELD@VM08524 01270000
  1278. B *+8 CHECK WHICH ERROR @VM08524 01271000
  1279. BADADDR LM R0,R1,SAVEWRK8 LOAD LEN. AND ADDRESS OF BAD ARGUMENT 01272000
  1280. TM SAVEWRK1+1,CONVLEN CONVERT LENGTH ERROR? @VA03060 01273000
  1281. BO CDM003 BRANCH IF YES @VA03060 01274000
  1282. TM SAVEWRK1,HEXLOC LOCATION REQUEST 01275000
  1283. BO CDM004 BR. IF YES 01276000
  1284. CDM003 LA R2,3 ERROR CODE 01277000
  1285. B PARMLEN SET PARM LENGTH @VM08524 01278000
  1286. SPACE 01279000
  1287. CDM004 LA R2,4 ERROR CODE 01280000
  1288. B PARMLEN SET PARM LENGTH @VM08524 01281000
  1289. SPACE 01282000
  1290. CDM009 LA R2,009 ERROR CODE 01283000
  1291. L R1,TBEGADD GET TRUE BEGIN ADDRESS @VM08524 01284000
  1292. TM SAVEWRK1,HEXLOC HEX LOC OR REGISTER ?? @V200930 01285000
  1293. BO CVTH1 HEX @V200930 01286000
  1294. CALL DMKCVTBD CONVERT TO DEC @V200930 01287000
  1295. B STCM1 SAVE VALUES @V200930 01288000
  1296. CVTH1 CALL DMKCVTBH CONVERT TO HEX @V200930 01289000
  1297. STCM1 DS 0H @V200930 01290000
  1298. STCM R0,3,BUFBUF STORE HEXLOC 01291000
  1299. STCM R1,15,BUFBUF+2 . . . 01292000
  1300. MVI BUFBUF+6,C'-' INSERT HYPHEN 01293000
  1301. L R1,TENDADD LOAD TRUE END ADDRESS @VM08524 01294000
  1302. TM SAVEWRK1,HEXLOC HEX OR DEC CONVERT ?? @V200930 01295000
  1303. BO CVTH2 HEX @V200930 01296000
  1304. CALL DMKCVTBD CONVERT TO DEC @V200930 01297000
  1305. B STCM2 SAVE VALUES @V200930 01298000
  1306. CVTH2 CALL DMKCVTBH CONVERT TO HEX @V200930 01299000
  1307. STCM2 DS 0H @V200930 01300000
  1308. STCM R0,3,BUFBUF+7 STORE AWAY 01301000
  1309. STCM R1,15,BUFBUF+9 . . . 01302000
  1310. TM SAVEWRK1,HEXLOC HEX LOCATION ?? @V200930 01303000
  1311. BO STCM3 YES, CONT @V200930 01304000
  1312. STCM R1,3,BUFBUF+7 SET VALUE FOR REG @V200930 01305000
  1313. LA R0,5 SIZE @V200930 01306000
  1314. LA R1,BUFBUF+4 DATA ADDRESS @V200930 01307000
  1315. B CALLERM DO ERROR MESSAGE @V200930 01308000
  1316. STCM3 DS 0H @V200930 01309000
  1317. LA R0,13 LENGTH OF FIELD 01310000
  1318. LA R1,BUFBUF SET DATA ADDRESS @V200930 01311000
  1319. B CALLERM 01312000
  1320. SPACE 01313000
  1321. CDM010 LA R2,010 ERROR CODE - MESSAGE DMKCDM010 @VM08524 01314000
  1322. B ERRPARM GO SET UP ERROR PARM @VM08524 01315000
  1323. SPACE 01316000
  1324. CDM026 LA R2,26 ERROR CODE 01317000
  1325. B NOVAR . . . 01318000
  1326. SPACE 01319000
  1327. CDM033 LA R2,33 ERROR CODE 01320000
  1328. B NOVAR . . . 01321000
  1329. SPACE 01322000
  1330. CDM060 LA R2,60 ERROR CODE @VA01024 01323000
  1331. B NOVAR . . . @VA01024 01324000
  1332. SPACE 01325000
  1333. CDM061 LA R2,61 ERROR CODE @VA01024 01326000
  1334. B NOVAR . . . @VA01024 01327000
  1335. SPACE 01328000
  1336. CDM160 LA R2,160 ERROR CODE - MESSAGE DMKCDM160 @VM08524 01329000
  1337. ERRPARM LM R0,R1,SAVEWRK8 COUNT AND ADDRESS OF ERROR OPTION@VM08524 01330000
  1338. PARMLEN C R0,F24 COUNT OVER MAX @VM08524 01331000
  1339. BNH *+8 NO - @VM08524 01332000
  1340. LA R0,24 SET MAX COUNT @VM08524 01333000
  1341. B CALLERM . . . 01334000
  1342. SPACE 01335000
  1343. NOVAR SR R1,R1 ZERO PARM REG 01336000
  1344. SPACE 01337000
  1345. SPACE 01338000
  1346. CALLERM ICM R0,14,MODID+3 INSERT MODULE ID 01339000
  1347. ICM R2,B'1000',X40FFS FLAG TO FRET BUFFER, NOT RTN@V4075A0 01340000
  1348. L R3,SAVEWRK4 LOAD ADDRESS AND LENGTH OF BUFFER 01341000
  1349. CALL DMKERMSG . . . 01342000
  1350. * 01343000
  1351. * DMKERM MODULE WILL FRET THE BUFFER, SVC16 THE SAVEAREA OUT, 01344000
  1352. * AND RETURN DIRECTLY TO DMKCFM TO PROCESS THE NEXT COMMAND. 01345000
  1353. * 01346000
  1354. EJECT 01347000
  1355. EXIT EQU * 01348000
  1356. TM VMPSTAT,VMV370R EXTENDED-CONTROL MACHINE? 01349000
  1357. BZ EXITOUT NO - CONTINUE 01350000
  1358. TM VMESTAT,VMNEWCR0+VMINVSEG+VMINVPAG 01351000
  1359. BZ EXITOUT NOTHING NEEDS CLEANUP 01352000
  1360. CALL DMKVATAB CLEAN UP SHADOW TABLES 01353000
  1361. EXITOUT LA R0,BFRSIZE FRET OUTPUT BUFFER @VM08524 01354000
  1362. LR R1,R10 ADDRESS OF BUFFER @VM08524 01355000
  1363. CALL DMKFRET .. @VM08524 01356000
  1364. EXIT @VM08515 01357000
  1365. EJECT 01358000
  1366. *********************************************************************** 01359000
  1367. * 01360000
  1368. * CONSTANTS * 01361000
  1369. * * 01362000
  1370. KEYEQ DC C'KEY =' 01363000
  1371. SUPPLMSG DC C'SUPPRESSED LINE(S) SAME AS ABOVE .....' 01364000
  1372. CPSWEQ DC C'PSW =' @V4075A0 01365000
  1373. CDUMPLOC DC C'DUMP LOC' @V4075A0 01366000
  1374. CLOC EQU CDUMPLOC+5 @V4075A0 01367000
  1375. SPACE 01368000
  1376. LTORG 01369000
  1377. EJECT 01370000
  1378. * 01371000
  1379. * OUTPUT BUFFER DSECT 01372000
  1380. * 01373000
  1381. SPACE 3 01374000
  1382. DISPBFR DSECT 01375000
  1383. BUFBUF DS CL132 132 CHARACTER BUFFER 01376000
  1384. BUFPNT DS F POINTER TO NEXT AVAILABLE BYTE 01377000
  1385. BFRCNT DS H BYTE COUNT OF CHARACTERS IN BUFFER 01378000
  1386. BUFMAX DS H MAXIMUM VALUE OF BUFCNT 01379000
  1387. BUFTRC DS H NUMBER OF BYTES TO BE TRANSLATED 01380000
  1388. BUFLAG DS XL1 FLAG BYTE 01381000
  1389. * 01382000
  1390. * X'80' - THE OUTPUT IS TO BE PRINTED 01383000
  1391. * X'40' - THIS IS THE 1ST LINE OF OUTPUT 01384000
  1392. * X'20' - THIS DUMP LINE IS THE SAME AS THE LAST LINE 01385000
  1393. * X'10' - THIS LINE HAS BEEN TRANSLATED TO EBCDIC 01386000
  1394. * X'08' - INVALID VIRTUAL PAGE WITHIN ADDRESS RANGE 01387000
  1395. * 01388000
  1396. LINECNT DS XL1 COUNT OF LINES ON PAGE OF DUMP 01389000
  1397. INCRMT DS H ADDRESS INCREMENT 01390000
  1398. DS H 01391000
  1399. IDCHAR DS CL3 LINE IDENTIFICATION CHARACTERS 01392000
  1400. DS XL1 01393000
  1401. NXTADD DS F NEXT ADDRESS TO BE DISPLAYED 01394000
  1402. ENDADD DS F LAST ADDRESS TO BE DISPLAYED 01395000
  1403. TBEGADD DS F TRUE BEGIN ADDRESS @VM08524 01396000
  1404. TENDADD DS F TRUE END ADDRESS @VM08524 01397000
  1405. ENDMAX DS F MAXIMUM END ADDRESS @VM08524 01398000
  1406. FLDLEN DS F MAXIMUM ADDRESS LENGTH @VM08524 01399000
  1407. FIELD DS 3D WORK AREA 01400000
  1408. DUMPLOC EQU FIELD+L'DUMPMSG VARIABLE LOC ADDR GOES HERE @V4075A0 01401000
  1409. LNSAVE DS XL32 DUMP SAVE AREA 01402000
  1410. REGSAVE DS 4F TEMPORARY SAVE AREA FOR R0-R3 01403000
  1411. BFRSIZE EQU (*-BUFBUF+7)/8 BUFFER SIZE IN DOUBLE WORDS @VM08524 01404000
  1412. SPACE 3 01405000
  1413. * EQUATES FOR BUFLAG 01406000
  1414. PRINTER EQU X'80' 01407000
  1415. FIRSTL EQU X'40' 01408000
  1416. NFIRSTL EQU X'BF' 01409000
  1417. SAMEL EQU X'20' 01410000
  1418. NSAMEL EQU X'DF' 01411000
  1419. TRANSLAT EQU X'10' 01412000
  1420. INVLD EQU X'08' INVALID VIRTUAL PAGE WITHIN @V304635 01413000
  1421. * ADDRESS RANGE 01414000
  1422. EJECT 01415000
  1423. DMKCDM CSECT 01416000
  1424. EJECT 01417000
  1425. PSA , @V306638 01418000
  1426. COPY CONBUF @V306638 01419000
  1427. COPY EQU @V306638 01420000
  1428. COPY SAVE @V306638 01421000
  1429. COPY VMBLOK @V306638 01422000
  1430. END 01423000