Table of Contents

DMSDBG Source

References

Source Listing

DMSDBG.ASSEMBLE.txt
  1. DBG TITLE 'DMSDBG (CMS) VM/370 - RELEASE 6' 00001000
  2. SPACE 2 00002000
  3. *. 00006000
  4. * 00007000
  5. * MODULE NAME - 00008000
  6. * 00009000
  7. * DMSDBG (DEBUG) 00010000
  8. * 00011000
  9. * FUNCTION - 00012000
  10. * 00013000
  11. * TO ENABLE THE USER TO DEBUG HIS PROGRAM FROM THE 00014000
  12. * TERMINAL. 00015000
  13. * 00016000
  14. * ATTRIBUTES - 00017000
  15. * 00018000
  16. * REENTRANT, NUCLEUS RESIDENT 00019000
  17. * 00020000
  18. * ENTRY POINT - 00021000
  19. * 00022000
  20. * 1. DMSDBGP, PRGINT - PROGRAM INTERRUPTS 00023000
  21. * 2. DMSDBG - ALL OTHER INTERRUPTS CAUSING ENTRY TO DEBUG 00024000
  22. * 00025000
  23. * ENTRY CONDITIONS - 00026000
  24. * 00027000
  25. * R1 = A(PLIST) 00028000
  26. * PLIST = CL8'DEBUG' 00029000
  27. * 00030000
  28. *|EXIT CONDITIONS - 00031000
  29. *| 00032000
  30. *| NORMAL - 00033000
  31. * USER TYPES IN RETURN, GO, HX, IPL 00034000
  32. *| 00035000
  33. *| ERROR - 00036000
  34. *| NONE 00037000
  35. *| 00038000
  36. *|CALLS TO OTHER ROUTINES - 00039000
  37. *| WAITRD 00040000
  38. *| DMSDBD - DUMP THE DESIRED LOCATIONS OF USERS VIRTUAL MACHINE 00041000
  39. *| KILLEX - RE-IPL CMS 00042000
  40. * DMSABNRT - ABEND RECOVERY 00043000
  41. *| 00044000
  42. *|EXTERNAL REFERENCES - 00045000
  43. *| 00046000
  44. *| NUCON - NUCLEUS AREA CONSTANTS AND VARIABLES 00047000
  45. *| DBGSECT - DEBUG STORAGE AREA 00048000
  46. * DMSABW - WORK AREA FOR ABEND RECOVERY 00049000
  47. * OPSECT - I/O OPERATION LISTS 00050000
  48. * DEVTAB - CONSOLE DEVICE ADDRESS 00051000
  49. *| 00052000
  50. *|TABLES /WORKAREAS - 00053000
  51. *| 00054000
  52. *| SEE DBGSECT 00055000
  53. *| VARIOUS CONSTANTS AND ERROR MESSAGES 00056000
  54. *| 00057000
  55. *|REGISTER USAGE - 00058000
  56. *| 00059000
  57. *| GPR2, GPR3 = USED AS EVEN ODD REGISTER PAIR 00060000
  58. *| GPR4 = COUNT REGISTER 00061000
  59. *| GPR5, GPR8 = WORK REGISTERS 00062000
  60. *| GPR6 = A(ARGUMENT IN PLIST BEING PROCESSED) 00063000
  61. *| GPR7 = DEBUG'S OWN I/O 00064000
  62. *| GPR10 = A(DBGSECT) 00065000
  63. *| GPR11, GPR14 = LINK REGISTER 00066000
  64. *| 00067000
  65. *|NOTES - 00068000
  66. *| 00069000
  67. *| NONE 00070000
  68. * 00071000
  69. * OPERATION - 00072000
  70. * 00073000
  71. * THE DISCUSSION OF THE DEBUG COMMAND PROGRAM WILL BE 00074000
  72. * DIVIDED INTO TWO PARTS; PROCESSING ON ENTRY, AND 00075000
  73. * REQUEST ENVIRONMENT PROCESSING. 00076000
  74. * 00077000
  75. * PROCESSING ON ENTRY - 00078000
  76. * 00079000
  77. * THE PROCESSING PERFORMED BY THE DEBUG COMMAND PROGRAM 00080000
  78. * WHEN IT RECEIVES CONTROL DEPENDS ON WHETHER IT WAS 00081000
  79. * GIVEN CONTROL BECAUSE OF EITHER A DEBUG COMMAND 00082000
  80. * ENTERED FROM THE TERMINAL, AN EXTERNAL INTERRUPTION, 00083000
  81. * OR A PROGRAM INTERRUPTION. 00084000
  82. * 00085000
  83. * DEBUG COMMAND - 00086000
  84. * 00087000
  85. * DEBUG SAVES THE CONTENTS OF THE GENERAL PURPOSE 00088000
  86. * REGISTERS AND SAVES THE CSW AND CAW. IT THEN TYPES 00089000
  87. * THE MESSAGE 'DEBUG ENTERED' AT THE TERMINAL AND 00090000
  88. * ENTERS THE REQUEST ENVIRONMENT. 00091000
  89. * 00092000
  90. * EXTERNAL INTERRUPTION - 00093000
  91. * 00094000
  92. *| SAVES THE CONTENTS 00095000
  93. * OF THE GENERAL PURPOSE REGISTERS, AND SAVES THE CSW 00096000
  94. * AND CAW. IT THEN TYPES THE MESSAGE 'DEBUG ENTERED' 00097000
  95. * AT THE TERMINAL. NEXT, IT TYPES THE MESSAGE 00098000
  96. * 'EXTERNAL INT.' AT THE TERMINAL AND ENTERS THE 00099000
  97. * REQUEST ENVIRONMENT. 00100000
  98. * 00101000
  99. * PROGRAM INTERRUPTION - 00102000
  100. * 00103000
  101. *| SAVES THE CONTENTS 00104000
  102. * OF THE GENERAL PURPOSE REGISTERS, AND SAVES THE CSW 00105000
  103. * AND CAW. IT THEN DETERMINES IF THE PROGRAM 00106000
  104. * INTERRUPTION OCCURRED AT A BREAKPOINT. (IF THE 00107000
  105. * ADDRESS OF THE INSTRUCTION THAT CAUSED THE 00108000
  106. * INTERRUPTION MATCHES THE ADDRESS IN AN ENTRY IN THE 00109000
  107. * BREAKPOINT TABLE (REFER TO "BREAK REQUEST", LATER IN 00110000
  108. * THIS SECTION, THE INTERRUPTION OCCURRED AT A 00111000
  109. * BREAKPOINT). IF THE PROGRAM INTERRUPTION OCCURRED AT 00112000
  110. * A BREAKPOINT, DEBUG MOVES THE ABSOLUTE ADDRESS OF THE 00114000
  111. * BREAKPOINT TO THE LAST THREE BYTES OF THE SAVED PSW 00115000
  112. * AND RESTORES THE OPERATION OF THE INSTRUCTION LOCATED 00116000
  113. * AT THE BREAKPOINT. IT THEN TYPES THE MESSAGE 00117000
  114. * 'BREAKPOINT XX AT YYYYYY' (WHERE XX IS THE BREAKPOINT 00118000
  115. * NUMBER AND YYYYYY THE CORE-ADDRESS OF THE BREAKPOINT 00119000
  116. * REACHED) AND ENTERS THE REQUEST ENVIRONMENT. 00120000
  117. * IF THE PROGRAM CHECK IS NOT A BREAKPOINT, 00121000
  118. * CONTROL IS PASSED TO DMSITP. 00122000
  119. * 00123000
  120. * ON ANY ENTRY, DEBUG WILL SAVE LOWCORE LOCATIONS 00124000
  121. * 0-160; THAT IS A DUMP OF LOW CORE WILL REFLECT ITS 00125000
  122. * VALUE AT THE TIME OF ENTERING DEBUG. 00126000
  123. * 00127000
  124. * REQUEST ENVIRONMENT PROCESSING - 00128000
  125. * 00129000
  126. * WHEN THIS ENVIRONMENT IS ENTERED, THE USER IS GIVEN 00130000
  127. * THE OPPORTUNITY TO MAKE DEBUG REQUESTS FROM THE 00131000
  128. * TERMINAL. FOR EACH SUCH REQUEST, DEBUG DETERMINES 00132000
  129. * ITS NATURE THROUGH A TABLE-LOOKUP PROCEDURE AND 00133000
  130. * PASSES CONTROL TO A CORRESPONDING PROGRAM TO 00134000
  131. * IMPLEMENT THE REQUEST. WHEN THE EXECUTION OF THAT 00135000
  132. * PROGRAM IS COMPLETE, IT RETURNS CONTROL TO THE 00136000
  133. * CONTROL ELEMENT, WHICH OBTAINS THE NEXT REQUEST. 00137000
  134. * THIS REQUEST IS PROCESSED SIMILARLY. 00138000
  135. * 00139000
  136. * ADDRESSING - 00140000
  137. * 00141000
  138. * AN ADDRESS MAY BE SPECIFIED TWO WAYS: (1) AS A 00142000
  139. * SYMBOLIC ADDRESS IF PREVIOUSLY DEFINED, (2) AS A 00143000
  140. * HEXADECIMAL CONSTANT. THE CURRENT VALUE OF THE 00144000
  141. * ORIGIN WILL BE ADDED TO THE ADDRESS IF IT WAS 00145000
  142. * HEXADECIMAL. 00146000
  143. * 00147000
  144. * ORIGIN REQUEST - 00148000
  145. * 00149000
  146. * DEBUG CONVERTS THE ORIGIN VALUE SUPPLIED ON THE 00150000
  147. * REQUEST TO BINARY, SAVES IT FOR FUTURE USE, AND 00151000
  148. * RETURNS FOR THE NEXT REQUEST. THE ORIGIN VALUE MAY 00152000
  149. * BE A SYMBOLIC ADDRESS OR A HEXADECIMAL ADDRESS. THE 00153000
  150. * PREVIOUS ORIGIN VALUE IS NOT ADDED INTO THE 00154000
  151. * HEXADECIMAL ADDRESS. 00155000
  152. * 00156000
  153. * DEFINE REQUEST - 00157000
  154. * 00158000
  155. * DEBUG CONVERTS THE HEXADECIMAL ADDRESS TO BINARY, 00159000
  156. * MAKES THE ADDRESS ABSOLUTE BY ADDING THE CURRENT 00160000
  157. * ORIGIN VALUE TO IT, AND STORES THE RESULTANT ABSOLUTE 00161000
  158. * ADDRESS IN THE TEMPORARY SYMBOL TABLE (TSYM). IT THEN 00162000
  159. * RETRIEVES THE SYMBOL BEING DEFINED AND PLACES IT INTO 00163000
  160. * THE TEMPORARY SYMBOL TABLE. NEXT, DEBUG RETRIEVES 00164000
  161. * THE LENGTH VALUE FOR THE SYMBOL (IF ANY) SUPPLIED ON 00165000
  162. * THE REQUEST AND PLACES IT INTO THE TEMPORARY SYMBOL 00166000
  163. * TABLE. (IF A LENGTH VALUE IS NOT PROVIDED, A DEFAULT 00167000
  164. * VALUE OF FOUR IS ASSUMED.) FINALLY, DEBUG MOVES THE 00168000
  165. * CONTENTS OF THE TEMPORARY SYMBOL TABLE INTO THE NEXT 00169000
  166. * AVAILABLE ENTRY IN THE DEFINED SYMBOL TABLE (SYMTBG) 00170000
  167. * AND RETURNS FOR THE NEXT REQUEST. 00171000
  168. * 00172000
  169. * EXAMINE (X) REQUEST - DEBUG USES THE ADDRESS 00173000
  170. * SPECIFIED TO DETERMINE THE LOCATIONS TO BE EXAMINED 00174000
  171. * (SEE THE FOREGOING DESCRIPTION UNDER "ADDRESSING"). 00175000
  172. * IF THE LENGTH IS SPECIFIED, THAT IS USED; OTHERWISE, 00176000
  173. * THE LENGTH IS OBTAINED FROM THE SYMBOL TABLE IF THE 00177000
  174. * ADDRESS WAS SYMBOLIC OR IS ASSUMED TO BE THE DEFAULT 00178000
  175. * VALUE OF FOUR IF THE ADDRESS WAS HEXADECIMAL. 00179000
  176. * FINALLY, DEBUG MOVES THE NUMBER OF BYTES SPECIFIED BY 00180000
  177. * THE LENGTH STARTING FROM THE LOCATION OF THE FIRST 00181000
  178. * BYTE TO AN OUTPUT BUFFER, TYPES THEM AT THE TERMINAL, 00182000
  179. * AND RETURNS FOR THE NEXT REQUEST. 00183000
  180. * 00184000
  181. * BREAK REQUEST - 00185000
  182. * 00186000
  183. * DEBUG USES THE ADDRESS SPECIFIED TO DETERMINE THE 00187000
  184. * BREAKPOINT LOCATION (SEE "ADDRESSING"). THIS ADDRESS 00188000
  185. * IS STORED IN THE BREAKPOINT TABLE ENTRY CORRESPONDING 00189000
  186. * TO THE BREAKPOINT NUMBER SUPPLIED WITH THE REQUEST. 00190000
  187. * DEBUG SAVES THE OPERATION CODE (THE FIRST BYTE) 00191000
  188. * LOCATED AT THE BREAKPOINT, REPLACES THE OPERATION 00192000
  189. * CODE LOCATED AT THE BREAKPOINT WITH AN INVALID 00193000
  190. * OPERATION CODE, AND RETURNS FOR THE NEXT REQUEST. 00194000
  191. * (WHEN THE INVALID OPERATION CODE IS ENCOUNTERED 00195000
  192. * DURING EXECUTION OF THE PROGRAM CONTAINING THE 00196000
  193. * BREAKPOINT, A PROGRAM INTERRUPTION OCCURS AND CONTROL 00197000
  194. * IS PASSED TO DEBUG, WHICH TYPES A MESSAGE AT THE 00198000
  195. * TERMINAL INDICATING THAT THE BREAKPOINT HAS BEEN 00199000
  196. * REACHED. AN INVALID OPERATION CODE IS X'EX', WHERE X 00200000
  197. * IS THE BREAKPOINT ID (0-15) IN HEXADECIMAL NOTATION.) 00201000
  198. * 00202000
  199. * STORE REQUEST - 00203000
  200. * 00204000
  201. * DEBUG USES THE ADDRESS SPECIFIED TO DETERMINE THE 00205000
  202. * ABSOLUTE LOCATION WHERE THE DATA IS TO BE STORED (SEE 00206000
  203. * "ADDRESSING"). IT THEN CONVERTS THE DATA TO BE 00207000
  204. * STORED TO BINARY, MOVES IT OT THE ABSOLUTE CORE 00208000
  205. * LOCATIONS, AND RETURNS FOR THE NEXT REQUEST. 00209000
  206. * 00210000
  207. * DUMP REQUEST - 00211000
  208. * 00212000
  209. * DEBUG DETERMINES FROM THE COMMAND LINE THE ABSOLUTE 00213000
  210. * LIMITS OF THE MAIN STORAGE TO BE DUMPED AND PLACES 00214000
  211. * THE APPROPRIATE VALUES INTO THE DUMPLIST PLIST. NOTE 00215000
  212. *| THAT THE DUMPLIST PLIST IS LOCATED IN NUCON. 00216000
  213. *| ALSO PLACED INTO THE PLIST ARE THE ADDRESSES 00217000
  214. * OF THE GENERAL REGISTER SAVE AREA, THE FLOATING-POINT 00218000
  215. * REGISTER SAVE AREA, AND THE ADDRESS OF A LOW CORE 00219000
  216. *| (0-160) SAVE AREA. DESCRIPTION OF THE PLIST AND ITS 00220000
  217. * USE CAN BE FOUND IN THE ROUTINE DEBDUMP, WHICH IS THE 00221000
  218. * DUMP EXECUTIONER. DEBUG THEN BALR'S TO THE DEBDUMP 00222000
  219. * ROUTINE, THE DUMP IS EXECUTED AND THE NEXT COMMAND 00223000
  220. * MAY BE ISSUED. 00224000
  221. * 00225000
  222. * SET REQUEST - 00226000
  223. * 00227000
  224. * IF THE PSW IS TO BE SET, DEBUG CONVERTS THE DATA TO 00228000
  225. * BINARY, OVERLAYS THE PSW IT SAVED ON ENTRY WITH THE 00229000
  226. * CONVERTED DATA, AND RETURNS FOR THE NEXT REQUEST. 00230000
  227. * DEBUG SETS THE CSW, CAW, AND CONTENTS OF THE 00231000
  228. * SPECIFIED REGISTER IN A SIMILAR MANNER. 00232000
  229. * 00233000
  230. * PSW REQUEST - 00234000
  231. * 00235000
  232. * DEBUG MOVES THE PSW IT SAVED ON ENTRY TO AN OUTPUT 00236000
  233. * BUFFER, TYPES IT AT THE TERMINAL, AND RETURNS FOR THE 00237000
  234. * NEXT REQUEST. (THE PSW SAVED BY DEBUG ON ENTRY MAY 00238000
  235. * HAVE BEEN MODIFIED BY A SET COMMAND.) 00239000
  236. * 00240000
  237. * CSW REQUEST - 00241000
  238. * 00242000
  239. * DEBUG MOVES THE CSW IT SAVED ON ENTRY TO AN OUTPUT 00243000
  240. * BUFFER, TYPES IT AT THE TERMINAL, AND RETURNS FOR THE 00244000
  241. * NEXT REQUEST. (THE CSW SAVED BY DEBUG ON ENTRY MAY 00245000
  242. * HAVE BEEN MODIFIED BY A SET REQUEST.) 00246000
  243. * 00247000
  244. * CAW REQUEST - 00248000
  245. * 00249000
  246. * DEBUG MOVES THE CAW IT SAVED ON ENTRY TO AN OUTPUT 00250000
  247. * BUFFER, TYPES IT AT THE TERMINAL, AND RETURNS FOR THE 00251000
  248. * NEXT REQUEST. (THE CAW SAVED BY DEBUG ON ENTRY MAY 00252000
  249. * HAVE BEEN MODIFIED BY A SET REQUEST.) 00253000
  250. * 00254000
  251. * GPR REQUEST - 00255000
  252. * 00256000
  253. * DEBUG DETERMINES THE FIRST REGISTER SPECIFIED. IT 00257000
  254. * THEN MOVES THE CONTENTS OF THAT REGISTER (SAVED UPON 00258000
  255. * ENTRY) TO AN OUTPUT BUFFER AND TYPES IT AT THE 00259000
  256. * TERMINAL. DEBUG REPEATS THIS PROCESS FOR EACH 00260000
  257. * REGISTER TO BE CONSIDERED. IT THEN RETURNS FOR THE 00261000
  258. * NEXT REQUEST. (THE CONTENTS OF THE REGISTERS SAVED 00262000
  259. * BY DEBUG ON ENTRY MAY HAVE BEEN MODIFIED BY A SET 00263000
  260. * REQUEST.) 00264000
  261. * 00265000
  262. * GO REQUEST - 00266000
  263. * 00267000
  264. * IF AN ADDRESS WAS SPECIFIED (SEE "ADDRESSING"), ITS 00268000
  265. * ABSOLUTE VALUE IS STORED INTO THE SAVED PSW. DEBUG 00269000
  266. * RESTORES THE CSW AND CAW IT SAVED ON ENTRY TO THEIR 00270000
  267. * CORRESPONDING LOCATIONS IN LOWER MAIN STORAGE, 00271000
  268. * RESTORES THE REGISTERS WITH THE CONTENTS IT SAVED ON 00272000
  269. * ENTRY, AND LOADS THE PSW IT SAVED ON ENTRY. (THE 00273000
  270. * CONTENTS OF THE REGISTERS AND THE CSW AND CAW SAVED 00274000
  271. * BY DEBUG ON ENTRY MAY HAVE BEEN MODIFIED BY A SET 00275000
  272. * REQUEST.) IF THE GO ADDRESS WAS NOT SPECIFIED, 00276000
  273. * LOADING OF THE PSW CAUSES CONTROL TO BE RETURNED TO 00277000
  274. * THE INTERRUPTED PROGRAM AT THE POINT OF INTERRUPTION, 00278000
  275. * OR PASSED TO THE LOCATION SPECIFIED IF THE USER 00279000
  276. * MODIFIED THE ADDRESS PORTION OF THE PSW WITH A SET 00280000
  277. * REQUEST. 00281000
  278. * 00282000
  279. * RETURN REQUEST - 00291000
  280. * 00292000
  281. * IF DEBUG HAD NOT BEEN ENTERED AFTER AN ABEND, THEN 00293000
  282. * DEBUG RESTORES THE REGISTERS WITH THE CONTENTS IT 00294000
  283. * SAVED ON ENTRY, CLEARS REGISTER 15, AND BRANCHES 00295000
  284. * UNCONDITIONALLY THROUGH REGISTER 14. (THE CONTENTS OF 00296000
  285. * THE REGISTERS SAVED BY DEBUG ON ENTRY MAY HAVE BEEN 00297000
  286. * MODIFIED BY A SET REQUEST.) RETURN IS VALID ONLY IF 00298000
  287. * DEBUG WAS ENTERED VIA THE DEBUG COMMAND. 00299000
  288. * IF DEBUG HAD BEEN ENTERED AFTER AN ABEND, THEN 00300000
  289. * CONTROL IS PASSED BACK TO DMSABN. 00301000
  290. * 00302000
  291. * HX REQUEST - 00316000
  292. * 00317000
  293. * IF HX IS REQUESTED, THE HALT EXECUTION LOGIC IS INVOKED 00318000
  294. * AS IF HX HAD BEEN ENTERED VIA THE CMS COMMAND ENVIRON- 00319000
  295. * MENT. THE HALT EXECUTION LOGIC CLOSES ALL OPEN FILES, 00320000
  296. * AND UPDATES THE USER FILE DIRECTORY. 00321000
  297. * 00322000
  298. *. 00323000
  299. EJECT 00324000
  300. MACRO 00325000
  301. DEFINE &LIST 00326000
  302. LCLA &I 00327000
  303. LCLC &T 00328000
  304. .LUP ANOP 00329000
  305. &I SETA &I+1 00330000
  306. &T SETC '&SYSLIST(&I)'(1,7) 00331000
  307. L&T EQU LOWSAVE+&SYSLIST(&I)-NUCON 00332000
  308. AIF (&I LT N'&SYSLIST).LUP 00333000
  309. MEND 00334000
  310. SPACE 00335000
  311. DMSDBGP CSECT 00336000
  312. REGEQU 00337000
  313. DMSDBGP CSECT , PROGRAM INTERRUPT ENTRY POINT 00338000
  314. ENTRY PRGINT ********** REMOVE ******** 00339000
  315. PRGINT EQU * ********** REMOVE ******** 00340000
  316. USING NUCON,R0 00341000
  317. TM DBGFLAGS,DBGRECUR RECURSION? 00342000
  318. BCR 1,TEMP (PIDDLING USAGE, I KNOW.) 00343000
  319. OI DBGFLAGS,DBGPGMCK TURN ON PROGRAM CHECK FLAG 00344000
  320. SPACE 00345000
  321. ENTRY DMSDBG 00346000
  322. DMSDBG EQU * ENTRY FOR ALL OTHER TYPES 00347000
  323. USING NUCON,R0 ACCESS NUCLEUS AREA CONSTANTS 00348000
  324. STM 0,15,GPRLOG SAVE ALL REGISTERS 00349000
  325. * 00350000
  326. * NOTE -- R14 = RETURN-ADDRESS. 00351000
  327. * 00352000
  328. CNOP 2,4 LOCATION COUNTER ON FULLWORD BOUNDARY 00353000
  329. BALR BASE,0 ADDRESSABILITY 00354000
  330. USING *,BASE ... 00355000
  331. L R10,=V(DBGSECT) A(DBGSECT) 00356000
  332. USING DBGSECT,R10 ACCESS DEBUG STORAGE AND CONSTANTS 00357000
  333. OI DBGFLAGS,DBGEXEC INDICATE ENTRANCE TO EXEC 00358000
  334. MVI OUTPT1,X'01' SET OUTPUT BUFF LEN @VA04318 00358100
  335. MVI DBGOUT,X'17' CARR RET (IDLE CHAR) @VA04318 00358200
  336. MVC LOWSAVE,0 SAVE LOWCORE 00359000
  337. STDM F0,F6,FPRLOG STORE FLOATING POINT REGS 00360000
  338. * 00361000
  339. * NOTE: CP/CMS SHARED SEGMENT PROTECTION (SSP) FEATURE NOW 00362100
  340. * PERMITS MODIFICATION BY A USER OF A SHARED SEGMENT. 00363100
  341. * 00364100
  342. NI DBGFLAGS,255-DBGRECUR CLEAR "RECURSION" FLAG @V304732 00365100
  343. TM DBGFLAGS,DBGABN ENTRY FROM DMSABN? 00386000
  344. BO ABNENT YES 00387000
  345. TM DBGFLAGS,DBGPGMCK ENTRANCE FROM A PROGRAM CHECK ? 00388000
  346. BO BRKENT YES 00389000
  347. TM DBGFLAGS,DBGEXINT ENTRANCE FROM EXTERNAL INTERRUPT 00390000
  348. BO INTENT YES 00391000
  349. * 00392000
  350. * "REGULAR" (ON-PURPOSE) ENTRY ... 00393000
  351. * 00394000
  352. L R1,CURRSAVE POINT TO 'DEBUG' SAVE AREA 00395000
  353. USING SSAVE,R1 00396000
  354. OI TYPFLAG,TPFUSR MAKE US A 'USER' PROGRAM 00397000
  355. XC OUTPT1,OUTPT1 INITIALIZE BYTE COUNT @VA01159 00398100
  356. MVC XPSW(8),PSW1 SET UP A PSW (SO WE HAVE SOMETHING) 00403000
  357. TM PROTFLAG,PRFPOFF NUCLEUS PROTECTION TURNED OFF? 00404000
  358. BO *+8 SKIP IF SO 00405000
  359. OI XPSW+1,USERKEY PUT USER KEY INTO XPSW 00406000
  360. USERKEY EQU X'E0' 00407000
  361. B CHEKTYPE TYPE DEBUG ENTERED @VA01159 00408100
  362. * ENTRY FROM DMSABN. WE MUST COPY PSW AND REGISTERS FROM DMSABN 00409000
  363. * WORK AREA. 00410000
  364. ABNENT EQU * 00411000
  365. L R1,CURRSAVE POINT TO CURRENT SAVE AREA 00412000
  366. USING SSAVE,R1 00413000
  367. OI TYPFLAG,TPFUSR MAKE US A 'USER' PROGRAM 00414000
  368. L R1,=V(DMSABW) POINT TO DMSABN WORK AREA 00415000
  369. USING ABWSECT,R1 00416000
  370. MVC XPSW,ABNPSW COPY PSW 00417000
  371. MVC GPRLOG(4*16),ABNREGS COPY REGISTERS 00418000
  372. EJECT 00419100
  373. CHEKTYPE EQU * 00423000
  374. DMSERR TEXT='DEBUG ENTERED',NUM=728,LET=I, *00424000
  375. MF=(E,'SYS'),TYPCALL=BALR @VA04738 00425000
  376. L R1,AOPSECT GET OPSECT ADDRESSABILITY 00426000
  377. USING OPSECT,R1 00427000
  378. LA R1,WAITLIST POINT TO CONWAIT PLIST 00428000
  379. L R15,=V(DMSCWT) GET CONWAIT ADDRESS @VA01039 00429100
  380. LA IOLINK,JPRINT GET RETURN ADDRESS FROM BALRCALL @VA01039 00429200
  381. BALRCALL STM R0,R14,DBGSAV1 SAVE ALL REGS @VA01039 00429300
  382. LA R13,DBGSAV2 GET SAVE AREA FOR BALR @VA01039 00429400
  383. BALR R14,R15 GO TO CONWAIT OR CONREAD @VA01039 00429500
  384. USING *,R14 GET ADDRESSABILITY @VA01039 00429600
  385. L R10,=V(DBGSECT) A(DBGSECT) @VA01039 00429700
  386. LM R0,R14,DBGSAV1 RESTORE ALL REGS @VA01039 00429800
  387. BR IOLINK RETURN TO CALLER @VA01039 00429900
  388. DROP R14 DROP TEMP BASE @VA01039 00430000
  389. DROP R1 00431000
  390. EJECT 00439000
  391. ********************************************************************** 00440000
  392. * * 00441000
  393. * 'NEWLIN' * 00442000
  394. * GET NEXT COMMAND LINE * 00443000
  395. * * 00444000
  396. ********************************************************************** 00445000
  397. * 00446000
  398. * NOTE -- COMES TO 'JPRINT' IF TYPEOUT TO BE FOLLOWED BY READ... 00447000
  399. JPRINT BAL IOLINK,IOPRT GIVE TYPEOUT (ALREADY SET UP) 00448000
  400. * 00449000
  401. NEWLIN MVI OUTPT1,X'01' SET OUTPUT BUFF LEN @VA01159 00450100
  402. MVI DBGOUT,X'17' CARR RETURN (VIA IDLE CHAR) @VA01159 00450200
  403. BAL IOLINK,IOPRT GO TYPE LINE @VA01159 00450300
  404. XC INPUT(132),INPUT ZERO OUT INPUT BUFFER @VA01159 00450400
  405. MVC ARGS(MVCNT2),INPUT CLEAR ARGS, JFLAGS, ARGSCT 00451000
  406. BAL IOLINK,IORD GET READ A LINE @VA01159 00452100
  407. CH R15,WTRDCNT ANYTHING READ ? @VA01159 00452200
  408. BNE NOTCAR BNE IF NOT, SOMETHING THERE. 00460000
  409. MVI OUTPT1,5 IF 'PLAIN' CARRIAGE RETURN, 00462000
  410. MVC DBGOUT(5),=C'DEBUG' SET UP TO TYPE 'DEBUG' AND 00463000
  411. B JPRINT GO GET A NEW LINE. (15 JAN 67) 00464000
  412. * 00465000
  413. * CLEAN UP INPUT LINE AND FORCE UPPER CASE 00466000
  414. * 00467000
  415. * R1 CONSTANT = 1 00468000
  416. * R2 PROCESSED CHARACTER COUNT 00469000
  417. * R4 ADDRESS OF INPUT BUFFER - 1 00470000
  418. * R5 BCT COUNTER FOR INPUT BUFFER 00471000
  419. * R9 POINTS TO INPUT BUFFER 00472000
  420. * R3 POINTS TO END OF PROCESSED CHARACTER STRING 00473000
  421. * R12 ADDRESSABILITY 00474000
  422. * 00475000
  423. NOTCAR EQU * 00489000
  424. LA R4,INPUT-1 LOAD THE INITIAL BUFFER ADDRESS 00490000
  425. LA R1,1 INITIALIZE THE CONSTANT 1 00491000
  426. LH R5,WTRDCNT GET NUMBER BYTES READ @VA01159 00492100
  427. LR R9,R4 LOAD THE INPUT BUFFER POINTER 00493000
  428. SR22 SR R2,R2 CLEAR THE PROCESSED CHARACTER COUNT 00494000
  429. LR R3,R4 LOAD THE PROCESSED CHARACTER POINTER 00495000
  430. FB EQU * 00496000
  431. CLI 1(R9),C' ' TEST FOR INITIAL BLANK 00497000
  432. BNE IC 00498000
  433. AR R9,R1 INCREMENT THE INPUT POINTER 00499000
  434. BCT R5,FB TEST FOR END OF LINE 00500000
  435. B NEWLIN 00501000
  436. * 00502000
  437. * CHARACTER PROCESSING LOOP 00503000
  438. * 00504000
  439. IC EQU * 00505000
  440. AR R9,R1 INCREMENT THE INPUT POINTER 00506000
  441. CLI 0(R9),0 TEST FOR END OF LINE 00507000
  442. BE EOL 00508000
  443. AR R3,R1 INCREMENT THE PROCESSED CHARACTER POINTER 00513000
  444. AR R2,R1 INCREMENT THE PROCESSED CHAR. COUNT 00514000
  445. MVC 0(1,R3),0(R9) MOVE INPUT CHAR. INTO PROCESSED STRING 00515000
  446. STC1 EQU * 00516000
  447. BCT R5,IC TEST FOR END OF INPUT BUFFER 00517000
  448. * 00518000
  449. * END OF LINE PROCESSING - BLANK FILL REMAINDER OF LINE 00519000
  450. * 00520000
  451. EOL EQU * 00521000
  452. LTR R2,R2 TEST FOR EMPTY INPUT LINE 00522000
  453. BNH NEWLIN 00523000
  454. LA R5,130 LOAD LENGTH OF PROCESSED STRING - 2 00524000
  455. SR R5,R2 COMPUTE NUMBER OF BLANKS NEEDED 00525000
  456. MVI 1(R3),C' ' STORE BLANK AFTER END OF PROCESSED LINE 00526000
  457. EX R5,EOLMVC BLANK FILL REMAINDER OF THE LINE 00527000
  458. STH R2,INPUTSIZ STORE LENGTH OF INPUT LINE FOR LATER USE 00528000
  459. EJECT 00529000
  460. ********************************************************************** 00530000
  461. * * 00531000
  462. * 'CONTRL' * 00532000
  463. * ROUTINE TO TEAR APART COMMAND INPUT LINE * 00533000
  464. * * 00534000
  465. ********************************************************************** 00535000
  466. CONTRL LA COUNT,INPUT SET POINTER 00536000
  467. LA R9,JFLAGS SET R9 FOR JFLAGS (NEW -- JAS) 00537000
  468. LA TEMP,ARGS SET THE OTHER POINTER 00538000
  469. LA R7,SAVE1 POINT TO SAVE1 00539000
  470. CONTL1 SR EVEN,EVEN INITIALE REGISTERS = 0 00540000
  471. SR ODD,ODD ... 00541000
  472. LA R13,8 SET FOR 8 CHARACTERS MAXIMUM 00542000
  473. CONTL2 SLDL EVEN,8 SHIFT TO ALLOW ROOM FOR NEXT CHARACTER 00543000
  474. IC ODD,0(,COUNT) INSERT CHARACTER 00544000
  475. CLI 0(COUNT),C'0' IS IT = 0 OR MORE? 00545000
  476. BNL LACNT BNL IF 0 OR MORE (NUMERIC) 00546000
  477. CLI 0(COUNT),C'F' IF < 0, IS IT = F OR LESS? 00547000
  478. BH JWASALF BH IF > F, DEFINITELY 'ALPHABETIC' 00548000
  479. OI 0(R9),X'F0' OR IN A 'MIXED' FLAG FOR PROBABLY HEX 00549000
  480. CLI 0(COUNT),C'A' MAKE SURE BETWEEN A AND F INCLUSIVE 00550000
  481. BNL LACNT BNL IF 'A' OR MORE (LOOKS LIKE HEX) 00551000
  482. JWASALF OI 0(R9),X'FF' SET FLAG ALL ONES IF NOT A-F OR 0-9. 00552000
  483. LACNT LA COUNT,1(,COUNT) INCREMENT INPUT-INDEXER, 00553000
  484. CLI 0(COUNT),C' ' LOOK AT 'NEXT' CHARACTER 00554000
  485. BE JWASBLNK BE IF A BLANK 00555000
  486. BCT R13,CONTL2 IF NOT, CONTINUE UP TO 8 TIMES 00556000
  487. TRUNC LA COUNT,1(,COUNT) IF 8 ALREADY, AND NEXT NOT BLANK, 00557000
  488. CLI 0(COUNT),C' ' TRUNCATE THE FIELD AFTER 8 CHARS., 00558000
  489. BNE TRUNC AND KEEP SCANNING FOR A BLANK. 00559000
  490. JWASBLNK LA AC,ARGMAX IF BLANK FOUND, TEST IF ROOM IN AR. LIST 00560000
  491. BCTR R13,R0 DECREMENT BY 1 00561000
  492. SH R13,=H'8' DETERMINE LENGTH OF OPERAND 00562000
  493. LPR R13,R13 COMPLEMENT IT 00563000
  494. STC R13,0(,R7) SAVE THE LENGTH OF THE ARG. 00564000
  495. LA R7,1(,R7) POINT TO THE NEXT SAVE LOCATION 00565000
  496. CR TEMP,AC ... 00566000
  497. BNL ERR06 BNL IF NOT ENOUGH ROOM, ERROR 6 00567000
  498. STM EVEN,ODD,0(TEMP) STORE PARAMETER ARGUMENT 00568000
  499. LA TEMP,8(0,TEMP) INCREMENT ARGUMENT LIST POINTER 00569000
  500. LA R9,1(,R9) INCREMENTER POINTER TO 'JFLAGS' FOR NEXT 00570000
  501. LA AC,INPUT+2 SET UP TEST FOR END-OF-LINE (PLUS 2 BYTES) 00571000
  502. AH AC,INPUTSIZ EXTRA BYTES GIVE TERMINATING BLANKS 00572000
  503. CONTL3 LA COUNT,1(0,COUNT) INCREMENT COUNTER 00573000
  504. CLI 0(COUNT),C' ' HAVE WE REACHED ANOTHER PARAMETER 00574000
  505. BC 7,CONTL1 YES, PROCESS IT 00575000
  506. CR COUNT,AC HAVE WE REACHED END OF LINE 00576000
  507. BL CONTL3 NO, KEEP LOOKING FOR ANOTHER PARAMETER 00577000
  508. LA TEMP,JFLAGS YES, CALCULATE NO. OF ARGUMENTS 00578000
  509. SR R9,TEMP ... 00579000
  510. STC R9,ARGSCT AND STORE. 00580000
  511. EJECT 00581000
  512. ********************************************************************** 00582000
  513. * * 00583000
  514. * 'ANALYS' * 00584000
  515. * COMMAND WORD ANALYSIS ROUTINE * 00585000
  516. * * 00586000
  517. ********************************************************************** 00587000
  518. ANALYS EQU * 00588000
  519. LA AC,3 LOAD LENGTH OF STRING COUNT FOR SEARCH 00589000
  520. ANALYS1 EQU * 00590000
  521. CLI ARGS,0 TEST FOR LEADING ZERO IN COMMAND 00591000
  522. BNE ANALYS2 BRANCH IF NO LEADING ZERO 00592000
  523. MVC ARGS(7),ARGS+1 SHIFT COMMAND LEFT 1 BYTE 00593000
  524. MVI ARGS+7,C' ' INSERT TRAILING BLANK INTO COMMAND 00594000
  525. B ANALYS1 00595000
  526. SPACE 00596000
  527. ANALYS2 EQU * 00597000
  528. SR R8,R8 ZERO OUT REGISTER 8 00598000
  529. IC R8,SAVE1 GET LENGTH OF ENTERED COMMAND 00599000
  530. BCTR R8,R0 REDUCE BY 1 FOR EXECUTE INSTR. 00600000
  531. LA R5,ENTRY1 POINT R5 TO FIRST ENTRY IN COMMAND TABLE 00601000
  532. LA R6,14 R6 = LENGTH OF ENTRY IN COMMAND TABLE 00602000
  533. LA R7,ENDTAB R7 = A(LAST ENTRY IN COMMAND TABLE) 00603000
  534. DEBUG10 EQU * SEE WHICH COMMAND WAS SPECIFIED 00604000
  535. CLC SAVE1(1),8(R5) GT. OR EQ. MINIMUM LENGTH OF CMMND 00605000
  536. BL DEBUG20 NO, SEE IF NEXT COMMAND NAME MATCHES 00606000
  537. EX R8,COMPNAME YES, SEE IF NAME MATCHES 00607000
  538. BE FOUND YES, THE NAMES MATCH, CHECK ARGS. 00608000
  539. DEBUG20 EQU * NAMES DO NOT MATCH 00609000
  540. BXLE R5,R6,DEBUG10 SEE IF NEXT COMMAND NAME MATCHES 00610000
  541. ERR02 EQU * COULD NOT FIND COMMAND IN TABLE 00611000
  542. LA AC,MESS02 POINT TO ERROR MESSAGE 00612000
  543. B ERRPRT TYPE IT OUT 00613000
  544. FOUND EQU * CHECK MIN. AND MAX. NUM. OF ARGS. 00614000
  545. L R8,10(,R5) POINT TO CODE HANDLING COMMAND 00615000
  546. CLC ARGSCT,9(R5) MIN. NO. ARGS. SPECIFIED 00616000
  547. BNL CHKMAX YS, SEE IF NO MORE THAN MAX. ARGS. SPEC. 00617000
  548. MISSOP EQU * MISSING OPERAND MESSAGE 00618000
  549. LA AC,MESS06 NO, POINT TO ERROR MESSAGE 00619000
  550. B ERRPRT TYPE IT OUT 00620000
  551. CHKMAX EQU * SEE IF NO MORE THAN MAX. ARGS. SPEC. 00621000
  552. CLC ARGSCT,10(R5) COMPARE NUM. ARGS. SPEC. 00622000
  553. BCR 13,R8 NO MORE THAN MAX. SPEC., EX. COMMAND 00623000
  554. B ERR06 TOO MANY ARGS., TYPE ERROR MESSAGE 00624000
  555. SPACE 00625000
  556. * 00626000
  557. * INSTRUCTION TO COMPARE COMMAND NAME ENTERED FROM TERMINAL 00627000
  558. * TO COMMAND NAME IN COMMAND NAME TABLE 00628000
  559. * 00629000
  560. COMPNAME CLC 0(*-*,R5),ARGS 00630000
  561. EJECT 00631000
  562. * 00632000
  563. * DEBUG COMMAND NAME TABLE 00633000
  564. * FORMAT OF TABLE : 00634000
  565. * CL8 - NAME OF COMMAND 00635000
  566. * AL1 - MINIMUM TRUNCATION OF COMMAND NAME 00636000
  567. * AL1 - MINIMUM NUMBER OF ARGUMENTS REQUIRED FOR EXECUTION 00637000
  568. * AL1 - MAXIMUM NUMBER OF ARGUMENTS ALLOWED 00638000
  569. * AL3 - ADDRESS OF CODE IN DMSDBG HANDLING EXECUTION OF 00639000
  570. * COMMAND 00640000
  571. * 00641000
  572. SPACE 2 00642000
  573. ENTRY1 DS 0F 00643000
  574. * 00644000
  575. DC CL8'BREAK',AL1(2),AL1(3),AL1(3),AL3(BREAK) 00645000
  576. * 00646000
  577. ACAW DC CL8'CAW',AL1(3),AL1(1),AL1(1),AL3(DEBCAW) 00647000
  578. * 00648000
  579. ACSW DC CL8'CSW',AL1(3),AL1(1),AL1(1),AL3(DEBCSW) 00649000
  580. * 00650000
  581. DC CL8'DEFINE',AL1(3),AL1(3),AL1(4),AL3(DEFINE) 00651000
  582. * 00652000
  583. DC CL8'DUMP',AL1(2),AL1(1),AL1(4),AL3(DUMP) 00653000
  584. * 00654000
  585. DC CL8'GO',AL1(2),AL1(1),AL1(2),AL3(GO) 00655000
  586. * 00656000
  587. AGPR DC CL8'GPR',AL1(3),AL1(2),AL1(3),AL3(GPR) 00657000
  588. * 00658000
  589. DC CL8'HX',AL1(2),AL1(1),AL1(1),AL3(KX) 00659000
  590. * 00660000
  591. DC CL8'ORIGIN',AL1(2),AL1(2),AL1(2),AL3(ORIGIN) 00661000
  592. * 00662000
  593. APSW DC CL8'PSW',AL1(3),AL1(1),AL1(1),AL3(PSWCMND) 00663000
  594. * 00664000
  595. DC CL8'RETURN',AL1(3),AL1(1),AL1(1),AL3(RTURN) 00665000
  596. * 00666000
  597. DC CL8'SET',AL1(3),AL1(3),AL1(5),AL3(SET) 00667000
  598. * 00668000
  599. DC CL8'STORE',AL1(2),AL1(3),AL1(6),AL3(STORE) 00669000
  600. * 00670000
  601. DC CL8'X',AL1(1),AL1(2),AL1(3),AL3(EXAM) 00673000
  602. * 00674000
  603. ENDTAB EQU *-14 END OF COMMAND NAME TABLE 00675000
  604. EJECT 00676000
  605. ********************************************************************** 00677000
  606. * * 00678000
  607. * 'SYMSTO' AND 'SYMGET' * 00679000
  608. * SYMBOL TABLE STORER AND RETRIVER ROUTINES * 00680000
  609. * * 00681000
  610. ********************************************************************** 00682000
  611. SYMSTO ST RETURN,SAVE1 SAVE RETURN AND ARGUMENT 00683000
  612. ST ARG,SAVE2 00684000
  613. BAL RETURN,SYMGET TEST IF SYMBOL DEFINED ALREADY 00685000
  614. L RETURN,SAVE1 RESTORE RETURN AND ARGUMENT 00686000
  615. LR TEMP,ARG 00687000
  616. L ARG,SAVE2 00688000
  617. LTR TEMP,TEMP TEMP=-1 MEANS UNDEFINED 00689000
  618. BC 10,DOIT DEFINED ALREADY, USE PRESENT ENTRY 00690000
  619. L TEMP,SYMTBG GET NUMBER OF ENTRIES IN TABLE 00691000
  620. LA AC,SYMMAX GET SIZE OF TABLE IN BYTES 00692000
  621. CR TEMP,AC TEST FOR TABLE OVERFLOW 00693000
  622. BNL ERR03 TOO MANY ENTRIES 00694000
  623. LA AC,SYMTABLE GET TABLE LOCATION 00696000
  624. L TEMP,SYMTBG GET TABLE COUNT 00699000
  625. LA TEMP,1(,TEMP) INCREASE BY 1 00700000
  626. ST TEMP,SYMTBG 00701000
  627. BCTR TEMP,0 -1 FROM COUNT @VA03403 00701100
  628. SLL TEMP,4 DISPLACEMENT OF ENTRY IN TABLE @VA03403 00701200
  629. AR TEMP,AC ADD DISPLACEMENT @VA03403 00701300
  630. DOIT MVC 0(16,TEMP),0(ARG) MOVE SYMBOL INTO SYMBOL TABLE @VA03403 00701400
  631. BR RETURN RETURN 00702000
  632. SYMGET L COUNT,SYMTBG GET TABLE LENGTH 00703000
  633. LTR COUNT,COUNT 00704000
  634. BC 8,SYMNO TABLE EMPTY 00705000
  635. LA TEMP,SYMTABLE GET LOCATION OF SYMBOL TABLE 00706000
  636. SYMGTL EQU * 00707000
  637. CLC 0(8,ARG),0(TEMP) COMPARE SYMBOLS 00708000
  638. BC 8,SYMFND ARE THEY EQUAL 00709000
  639. LA TEMP,16(,TEMP) ADVANCE TO NEXT ENTRY 00710000
  640. BCT COUNT,SYMGTL TEST FOR END OF TABLE 00711000
  641. SYMNO SR ARG,ARG SYMBOL NOT FOUND IN TABLE 00712000
  642. BCTR ARG,RETURN RETURN WITH ARG SET TO -1 00713000
  643. SYMFND LR ARG,TEMP RETURN VALUE ADDRESS 00714000
  644. BR RETURN 00715000
  645. EJECT 00716000
  646. ********************************************************************** 00717000
  647. * * 00718000
  648. * 'HEXIN' AND 'HEXOUT' * 00719000
  649. * ROUTINES TO CONVERT TO AND FROM HEXADECIMAL GRAPHICS * 00720000
  650. * * 00721000
  651. * FOR 'HEXIN', 'ARG' POINTS TO 8-BYTE INPUT NUMBER 00722000
  652. * ANSWER IS IN 'HEX' (1 FULL-WORD) 00723000
  653. * 00724000
  654. * FOR 'HEXOUT', 'ARG' POINTS TO 4-BYTE INPUT NUMBER, 00725000
  655. * ANSWER IS IN 'HEXHEX' (2 FULL-WORDS) 00726000
  656. * 00727000
  657. ********************************************************************** 00728000
  658. * 00729000
  659. * 00730000
  660. * NOTE -- AT ENTRY, R13 POINTS TO 'JFLAG' CORRESPONDING TO ARG. 00731000
  661. * 00732000
  662. HEXIN TM 0(R13),X'FF' CHECK FLAG, MUST BE 0 OR MIXED 00733000
  663. BO ERR04 ERROR IF NOT NUMERIC OR A-F. 00734000
  664. MVC HEXHEX(8),0(ARG) IF OK, GET ARGUMENT 00735000
  665. OC HEXHEX(8),BITS CONVERT 00 TO C0 00736000
  666. TRT HEXHEX(8),INVTBL CHARS. MUST BE VALID HEX 00737000
  667. BNZ ERR04 ERROR 00738000
  668. TR HEXHEX(8),CONHXT TRANSLATE LETTER A-E TO FA-FE 00739000
  669. PACK HEX(5),HEXHEX(9) PACK TO FORM BINARY NUMBER 00740000
  670. BR RETURN RETURN 00741000
  671. HEXOUT MVC HEX(4),0(ARG) GET ARGUMENT 00742000
  672. JHEXOUT EQU * (CAN ENTER HERE IF INPUT NO. IN 'HEX') 00743000
  673. UNPK HEXHEX(9),HEX(5) EXPAND 00744000
  674. TR HEXHEX(8),CONHXT TRANSLATE TO PRINTER GRAPHICS 00745000
  675. BR RETURN RETURN 00746000
  676. EJECT 00747000
  677. ********************************************************************** 00748000
  678. * * 00749000
  679. * 'DECIN' AND 'DECOUT' * 00750000
  680. * ROUTINES TO CONVERT TO AND FROM DECIMAL * 00751000
  681. * * 00752000
  682. ********************************************************************** 00753000
  683. * 00754000
  684. DECIN2 LA R13,JFLAGS+2 CONVENIENT ENTRY FOR 'ARGS+16' 00755000
  685. * 00756000
  686. * NOTE -- AT ENTRY, R13 POINTS TO 'JFLAG' CORRESPONDING TO ARG. 00757000
  687. * 00758000
  688. DECIN TM 0(R13),X'FF' CHECK FLAG, MUST BE 0 FOR NUMERIC 00759000
  689. BNZ ERR04 ERROR IF NOT NUMERIC. 00760000
  690. MVC DECDEC(8),0(ARG) IF OK, GET ARGUMENT 00761000
  691. PACK DEC(8),DECDEC(8) PACK 00762000
  692. CVB TEMP,DEC CONVERT TO BINARY 00763000
  693. ST TEMP,DEC STORE IN DEC 00764000
  694. BR RETURN 00765000
  695. DECOUT L TEMP,0(,ARG) GET ARGUMENT 00766000
  696. CVD TEMP,DEC CONVERT 00767000
  697. JDECOUT EQU * ENTER HERE IF NO. IS ALREADY IN 'DEC'... 00768000
  698. UNPK DECDEC(8),DEC(8) UNPACK 00769000
  699. OI DECDEC+7,X'F0' MAKE SIGN CORRECT 00770000
  700. BR RETURN 00771000
  701. EJECT 00772000
  702. ********************************************************************** 00773000
  703. * * 00774000
  704. * 'VALUE' * 00775000
  705. * ROUTINE TO DETERMINE VALUE OF PARAMETER * 00776000
  706. * * 00777000
  707. ********************************************************************** 00778000
  708. * 00779000
  709. * NOW CHECKS TO MAKE SURE OBTAINED-VALUE IS WITHIN CORE LIMITS. 00780000
  710. * ERR05 (INVALID CORE-ADDRESS) IF IT ISN'T 00781000
  711. * 00782000
  712. * 00783000
  713. VALUE2 LA R13,JFLAGS+2 CONVENIENT ENTRY CORRESPONDING TO ARGS+16 00784000
  714. * 00785000
  715. * AT ENTRY, R13 POINTS TO 'JFLAGS' CORRESPOND TO 'ARGS' 00786000
  716. * 00787000
  717. VALUE L R15,ORG 'ORIGIN' INTO R15 FOR 'VALUE' ENTRY 00788000
  718. VALJOIN EQU * ... 00789000
  719. ST RETURN,RETSAV SAVE RETURN 00790000
  720. ST ARG,ARGSAV SAVE ARGUMENT LOCATION 00791000
  721. TM 0(R13),X'FF' CHECK NATURE OF SYMBOL, 00792000
  722. BZ HEXQ FORGET 'SYMGET' IF ALL NUMERIC 00793000
  723. BAL RETURN,SYMGET CHECK IF PARAMETER IS A SYMBOL 00794000
  724. LTR ARG,ARG (IF NOT, ARG=-1) 00795000
  725. BC 4,HEXQ NOPE, ASSUME HEX 00796000
  726. L ARG,8(,ARG) GET VALUE 00797000
  727. BACK L RETURN,RETSAV RESTORE RETURN 00798000
  728. LTR ARG,ARG BE SURE STORAGE ADDR. GT. 0 00799000
  729. BM ERR05 IT'S NOT, TYPE ERROR MESSAGE 00800000
  730. ST TEMP,ARGSAV SAVE 'TEMP' REG. (TO BE SAFE) @V304732 00801100
  731. LA TEMP,ERR05PGM SET 'TEMP' REG. FOR PROG. INT. @V304732 00801200
  732. OI DBGFLAGS,DBGRECUR SIGNAL WE MIGHT GET PROG INT @V304732 00801300
  733. ICM TEMP,BIN1000,0(ARG) REFERENCE THE STORAGE ADDR @V305066 00801400
  734. NI DBGFLAGS,255-DBGRECUR OK - RESET FLAGBIT @V304732 00801500
  735. L TEMP,ARGSAV AND RECOVER 'TEMP' REGISTER. @V304732 00801600
  736. ST ARG,ARGSAV STORE IN 'ARGSAV' FOR CONVENIENCE LATER 00803000
  737. * NOTE -- ANSWER IS BOTH IN REGISTER 'ARG' AND STORAGE 'ARGSAV' 00804000
  738. BR RETURN RETURN 00805000
  739. HEXQ L ARG,ARGSAV RESTORE ARGUMENT LOCATION 00806000
  740. * NOTE -- R13 IS STILL SET UP FROM CALL TO 'VALUE' 00807000
  741. BAL RETURN,HEXIN CONVERT FROM HEX 00808000
  742. L ARG,HEX GET VALUE 00809000
  743. AR ARG,R15 ADD R15 = 0 FOR 'AVALUE', 'ORG' FOR 'VALUE' 00810000
  744. B BACK BRANCH TO RETURN ROUTINE 00811000
  745. * 00812000
  746. * ENTRY FOR 'ABSOLUTE' VALUE (DON'T ADD IN 'ORG') ... 00813000
  747. AVALUE SR R15,R15 CLEAR R15 FOR 'AVALUE' ENTRY 00814000
  748. B VALJOIN ... 00815000
  749. EJECT 00816000
  750. ********************************************************************** 00839000
  751. * * 00840000
  752. * 'IORD' AND 'IOPRT' * 00841000
  753. * TYPEWRITER INPUT AND DBGOUT ROUTINES * 00842000
  754. * * 00843000
  755. ********************************************************************** 00844000
  756. IORD EQU * @VA01159 00845100
  757. LR IOTEMP,IOLINK SAVE RETURN REG @VA01159 00845200
  758. LA R1,WAITRD GET CONREAD PLIST @VA01159 00845300
  759. L R15,ADMSCRD GET CONREAD ADDR @VA01159 00845400
  760. BAL IOLINK,BALRCALL CALL CONREAD VIA BALR @VA01159 00845500
  761. LR IOLINK,IOTEMP RESTORE RETURN REG @VA01159 00845600
  762. BR IOLINK RETURN TO CALLER @VA01159 00845700
  763. SPACE 00845800
  764. IOPRT EQU * @VA01159 00845900
  765. CLI OUTPT1,X'00' ANYTHING TO TYPE ? @VA01159 00846000
  766. BER IOLINK NO, JUST RETURN @VA01159 00846100
  767. LR IOTEMP,IOLINK SAVE RETURN REG @VA01159 00846200
  768. MVC CONWRL(1),OUTPT1 SET LENGTH IN PLIST @VA01159 00846300
  769. LA R1,CONWR GET TYPLIN PLIST @VA01159 00846400
  770. L R15,=V(DMSCWR) GET TYPLIN ADDR @VA01159 00846500
  771. BAL IOLINK,BALRCALL CALL TYPLIN VIA BALR @VA01159 00846600
  772. LR IOLINK,IOTEMP RESTORE RETURN REG @VA01159 00846700
  773. BR IOLINK RETURN TO CALLER @VA01159 00846800
  774. EJECT 00865000
  775. *********************************************************************** 00866000
  776. * 00867000
  777. * 'BRKADDR' AND 'BRKLKP' 00868000
  778. * 00869000
  779. *********************************************************************** 00870000
  780. SPACE 00871000
  781. BRKADDR CLI 0(TEMP),X'B2' DOES THIS LOOK AT ALL LIKE A BRKPNT? 00872000
  782. BCR 7,RETURN IF NOT, EXIT. 00873000
  783. TM 1(TEMP),X'E0' LOOK EVEN MORE LIKE ONE? 00874000
  784. BCR 14,RETURN IF NOT, EXIT. 00875000
  785. ST RETURN,RETSAV SAVE RETURN. 00876000
  786. IC AC,1(,TEMP) GET BREAKPOINT NUMBER. 00877000
  787. BAL RETURN,BRKLKP GET ITS TABLE ENTRY. 00878000
  788. L RETURN,RETSAV RETURN RETURN. 00879000
  789. TM 4(AC),X'FF' ENTRY ACTIVE? 00880000
  790. BCR 1,RETURN NOPE. EXIT. 00881000
  791. C TEMP,4(,AC) TALKING ABOUT THE SAME PLACE? 00882000
  792. BCR 7,RETURN NO. EXIT. 00883000
  793. MVC 0(2,TEMP),0(AC) RESTORE THE OLD OP-CODE. 00884000
  794. MVI 4(AC),X'FF' DEACTIVATE THE ENTRY. 00885000
  795. BR RETURN EXIT. 00886000
  796. SPACE 00887000
  797. BRKLKP N AC,MASK SAVE THE GOOD PART. 00888000
  798. SLL AC,3 MULTIPLY BY 8. 00889000
  799. LA AC,BRKPNTBL(AC) GET ADDR OF CORRECT ENTRY. 00890000
  800. BR RETURN EXIT. 00891000
  801. EJECT 00892000
  802. ********************************************************************** 00893000
  803. * * 00894000
  804. * 'ORIGIN' * 00895000
  805. * * 00896000
  806. ********************************************************************** 00897000
  807. ORIGIN LA ARG,ARGS+8 GET PARAMETER 00898000
  808. LA R13,JFLAGS+1 SET R13 CORRESPONDING TO 'ARGS+8' 00899000
  809. BAL RETURN,AVALUE CONVERT PARAMETER TO ABSOLUTE BINARY 00900000
  810. ST ARG,ORG STORE ORIGIN LOCATION 00901000
  811. B NEWLIN GET NEXT COMMAND LINE 00902000
  812. SPACE 2 00903000
  813. ********************************************************************** 00904000
  814. * * 00905000
  815. * 'DEFINE' * 00906000
  816. * * 00907000
  817. ********************************************************************** 00908000
  818. DEFINE LA ARG,ARGS+16 GET PARAMETER 00909000
  819. LA R13,JFLAGS+2 SET R13 CORRESPONDING TO 'ARGS+16' 00910000
  820. BAL RETURN,HEXIN CONVERT FROM HEX 00911000
  821. LR RETURN,TEMP SAVE 'TEMP' REG. (TO BE SAFE) @V304732 00912100
  822. LA TEMP,ERR05PGM SET 'TEMP' REG. FOR PROG. INT. @V304732 00912200
  823. OI DBGFLAGS,DBGRECUR SIGNAL WE MIGHT GET PROG INT @V304732 00912300
  824. L ARG,HEX PICK UP BINARY VALUE OF HEX NO. @V304732 00912400
  825. ICM TEMP,BIN1000,0(ARG) REFERENCE THE STORAGE ADDR @V305066 00912500
  826. A ARG,ORG ADD "ORIGIN" (IF ANY) @V304732 00912600
  827. ICM TEMP,BIN1000,0(ARG) REFERENCE THE STORAGE ADDR @V305066 00912700
  828. NI DBGFLAGS,255-DBGRECUR OK - RESET FLAGBIT @V304732 00912800
  829. LR TEMP,RETURN AND RECOVER 'TEMP' REGISTER. @V304732 00912900
  830. ST ARG,TSYM+8 ENTER INTO TABLE ENTRY 00919000
  831. TM JFLAGS+1,X'FF' CHECK PROPERTY OF DEFINED SYMBOL, 00920000
  832. BZ ERR04 ERROR IF ALL NUMERIC 00921000
  833. * DEFINED-SYMBOL SHOULD NOT START WITH AN ASTERISK (*) 00922000
  834. * (HARD TO CHECK BECAUSE ARGUMENT IS RIGHT-JUSTIFIED) 00923000
  835. MVC TSYM(8),ARGS+8 GET SYMBOL INTO ENTRY 00924000
  836. LA ARG,4 SET LENGTH ENTRY TO FOUR BYTES 00925000
  837. ST ARG,TSYM+12 00926000
  838. CLI ARGSCT,X'03' CHECK IF LENGTH SPECIFIED 00927000
  839. BC 8,NOLENG NOPE 00928000
  840. LA ARG,ARGS+24 GET LOCATION OF LENGTH 00929000
  841. LA R13,JFLAGS+3 SET R13 CORRESPONDING TO 'ARGS+24' 00930000
  842. BAL RETURN,DECIN CONVERT TO BINARY FROM DECIMAL 00931000
  843. LTR TEMP,TEMP CHECK LENGTH--STILL IN 'TEMP' AFTER DECIN 00932000
  844. BNP ERR04 ERROR IF = 0. 00933000
  845. C TEMP,MAXX IF > 0, MAKE SURE DOESN'T EXCEED 00934000
  846. BH ERR04 PRACTICAL LIMIT, ERROR IF IT DOES. 00935000
  847. ST TEMP,TSYM+12 IF OK, STORE IN ENTRY 00936000
  848. NOLENG LA ARG,TSYM ENTER ENTRY IN TABLE 00937000
  849. BAL RETURN,SYMSTO 00938000
  850. B NEWLIN GET NEXT COMMAND 00939000
  851. EJECT 00940000
  852. ********************************************************************** 00941000
  853. * * 00942000
  854. * 'EXAMINE' * 00943000
  855. * * 00944000
  856. ********************************************************************** 00945000
  857. EXAM LA ARG,ARGS+8 GET ARGUMENT 00946000
  858. BAL RETURN,SYMGET DETERMINE IF SYMBOL 00947000
  859. LTR ARG,ARG (-1 IF NOT SYMBOL) 00948000
  860. BC 4,TRYHEX IF NOT SYMBOL, TRY HEX 00949000
  861. LM R14,R15,8(ARG) GET VALUE & LENGTH FROM TABLE, 00950000
  862. STM R14,R15,EXAMLC STORE IN 'EXAMLC' AND 'EXAMLG' 00951000
  863. * NOTE -- R15 STILL HOLDS 'EXAMLG' -- NEEDED FOR USE BELOW 00952000
  864. B LENGTH CHECK IF LENGTH SPECIGIED 00953000
  865. TRYHEX LA ARG,ARGS+8 GET LOCATION OF ARGUMENT 00954000
  866. LA R13,JFLAGS+1 SET R13 CORRESPONDING TO 'ARGS+8' 00955000
  867. BAL RETURN,HEXIN CONVERT TO HEX 00956000
  868. L TEMP,HEX MAKE ABSOLUTE 00957000
  869. A TEMP,ORG 00958000
  870. ST TEMP,EXAMLC 00959000
  871. LA R15,4 ASSUME LENGTH IS FOUR BYTES 00960000
  872. ST R15,EXAMLG (AND LEAVE COUNT IN R15 FOR LATER) 00961000
  873. LENGTH EQU * 00962000
  874. CLI ARGSCT,X'02' CHECK IF LENGTH SPECIFIED 00963000
  875. BC 8,OK NOPE 00964000
  876. LA ARG,ARGS+16 GET LOCATION OF LENGTH 00965000
  877. BAL RETURN,DECIN2 CONVERT TO BINARY FROM DECIMAL 00966000
  878. * NOTE -- ON RETURNING FROM 'DECIN', 'TEMP' STILL HOLDS NO. 00967000
  879. LTR R15,TEMP BYTE-COUNT INTO R15 AND CHECK IT 00968000
  880. BNP ERR04 ERROR IF NOT > 0 (CAN'T TYPE 0 BYTES) 00969000
  881. C TEMP,MAXX CHECK NO. OF BYTES FOR PRACTICAL MAXIMUM 00970000
  882. BH ERR04 ERROR IF TOO LARGE A NUMBER 00971000
  883. ST TEMP,EXAMLG SAVE LENGTH IF NOT TOO LARGE 00972000
  884. * NOTE -- WHEN COMES TO 'OK', R15 MUST HOLD 'EXAMLG' ... 00973000
  885. OK L ARG,EXAMLC GET LOCATION 00974000
  886. SR COUNT,COUNT SET COUNT = 0 00975000
  887. * 00976000
  888. LA TEMP,ERR05PGM SET 'TEMP' REG. FOR PROG. INT. @V304732 00977100
  889. OI DBGFLAGS,DBGRECUR SIGNAL WE MIGHT GET PROG INT @V304732 00977200
  890. L R14,EXAMLC GET ADDRESS OF START OF DATA @V304732 00977300
  891. ICM TEMP,BIN1000,0(R14) REFERENCE THE STORAGE ADDR @V305066 00977400
  892. A R14,EXAMLG GET ADDRESS OF END OF DATA @V304732 00977500
  893. BCTR R14,0 ... @V304732 00977600
  894. ICM TEMP,BIN1000,0(R14) REFERENCE THE STORAGE ADDR @V305066 00977700
  895. NI DBGFLAGS,255-DBGRECUR OK - RESET FLAGBIT @V304732 00977800
  896. * 00981000
  897. BCTR R15,0 DECREMENT BYTE-COUNT FOR 'EX', 00982000
  898. EX R15,MVCINP MOVE BYTES TO BE EXAMINED TO 'INPUT' AND 00983000
  899. LA ARG,INPUT1 CONVERT THEM TO 'PRINTABLE' FROM THERE 00984000
  900. * (THE ABOVE TO AVOID ADDRESSING ERROR IF VERY NEAR 'COREND') 00985000
  901. * 00986000
  902. L TEMP,EXAMLG MULTIPLY LENGTH BY TWO 00987000
  903. AR TEMP,TEMP ... 00988000
  904. STC TEMP,OUTPT1 STORE COUNT FOR FINISHED DBGOUT. 00989000
  905. LA TEMP,DBGOUT SET LOCATION FOR DBGOUT 00990000
  906. OKLOOP BAL RETURN,HEXOUT CONVERT 4 BYTES AT A TIME 00991000
  907. MVC 0(8,TEMP),HEXHEX MOVE TO DBGOUT AREA 00992000
  908. LA COUNT,4(,COUNT) INCREASE COUNT 00993000
  909. C COUNT,EXAMLG TEST IF ENOUGH CONVERTED YET 00994000
  910. BNL JPRINT OK, FINISHED (DBGOUT ALL SET TO GO) 00995000
  911. LA TEMP,8(,TEMP) INCREASE COUNTERS 00996000
  912. LA ARG,4(,ARG) GET MORE 00997000
  913. B OKLOOP 00998000
  914. EJECT 00999000
  915. ********************************************************************** 01000000
  916. * * 01001000
  917. * 'GO' * 01002000
  918. * * 01003000
  919. ********************************************************************** 01004000
  920. GO OI XPSW,X'01' TURN INTERRUPT BIT ON 01005000
  921. CLI ARGSCT,X'01' IS ADDRESS SPECIFIED ? 01006000
  922. BE JCHECK NO, CHECK TO SEE WHICH ENTRY WE CAME IN 01007000
  923. LA ARG,ARGS+8 GET ADDRESS 01008000
  924. LA R13,JFLAGS+1 SET R13 CORRESPONDING TO 'ARGS+8' 01009000
  925. BAL RETURN,VALUE DETERMINE LOCATION 01010000
  926. * 01011000
  927. * NOTE -- VALUE IS STILL IN 'ARGSAV' 01012000
  928. * 01013000
  929. TM ARGSAV+3,X'01' MAKE SURE NOT AN ODD NUMBER 01014000
  930. BNZ ERR05 ERROR IF IT IS. 01015000
  931. ST ARG,HEX INSERT INTO PSW 01016000
  932. * 01017000
  933. * NOTE -- MAYBE SHOULD STORE IN SAVED-R15 HERE ??? 01018000
  934. * 01019000
  935. MVC XPSW+5(3),HEX+1 01020000
  936. B ISIO ... 01021000
  937. JCHECK EQU * 01022000
  938. TM DBGFLAGS,DBGABN+DBGEXINT+DBGPGMCK CHECK DEBUG ENTRY 01023000
  939. BZ ERR01 BZ IF YES, AN ERROR (SHOULD BE RETURN) 01024000
  940. * 01025000
  941. ISIO EQU * SEE IF 1050 ACTIVE UPON ENTERING 01026000
  942. MVC IOOPSW(20),LIOOPSW RESTORE IOOPSW,CAW,CSW 01034000
  943. MVC RSTNPSW,XPSW MOVE PSW TO LOWER CORE 01035000
  944. TM DBGSWTCH,2 SPECIAL EXTERNAL CASE ? @VA00770 01035100
  945. BZ RSTREGS NO..KEEP GOING @VA00770 01035150
  946. NI DBGSWTCH,253 RESET SPECIAL SWITCH @VA00770 01035200
  947. * VA05275 01035240
  948. MVC WAITSAVE(64),BALRSAVE RESTORE DMSIOW REGS @VA00770 01035250
  949. L R14,AIOSECT GET I/O SAVE AREA ADDR. @VA00770 01035300
  950. MVC 0(64,R14),GPRLOG RESTORE ALL I/O REGS @VA00770 01035350
  951. RSTREGS EQU * @VA00770 01035400
  952. LM R0,R15,GPRLOG RESTORE REGISTERS 01036000
  953. MVI DBGFLAGS,OFF CLEAR DBGFLAGS FLAG @V305066 01037100
  954. LPSW RSTNPSW GO AWAY 01038000
  955. EJECT 01039000
  956. ********************************************************************** 01040000
  957. * * 01041000
  958. * 'DUMP' * 01042000
  959. * * 01043000
  960. ********************************************************************** 01044000
  961. DUMP EQU * 01045000
  962. LA R13,JFLAGS+1 POINT R13 TO ARGUMENT FLAG 01046000
  963. LA ARG,ARGS+8 GET LOCATION OF PARAMETER 01047000
  964. BAL RETURN,VALUE GET VALUE OF PARAMETER 01048000
  965. N ARG,TRUNFUL TRUNCATE TO FULL-WORD BOUNDARY (JAS) 01049000
  966. ST ARG,FIRSTDMP SAVE BEGINNING LOCATION 01050000
  967. L ARG,VMSIZE END-OF-CORE (LESS ONE BYTE) 01051000
  968. BCTR ARG,0 INTO REGISTER 'ARG' FOR BELOW, 01052000
  969. CLI ARGS+23,C'*' IS ENDING-ADDRESS = '*' ??? 01053000
  970. BE STARGL BE IF YES, USE 'VMSIZE' FOR ENDING LIMIT. 01054000
  971. LA ARG,ARGS+16 GET LOCATION OF SECOND PARAMETER 01055000
  972. BAL RETURN,VALUE2 GET VALUE OF PARAMETER 01056000
  973. CLI ARGSCT,X'02' WAS SECOND LOC. SPECIFIED P0482 01057000
  974. BE STARGL NO, OMIT CHECK P0482 01058000
  975. C ARG,FIRSTDMP SEE IF LEXSS THAN 1ST LINIT 01059000
  976. BL ERR04 RIDICULOUS IF LESS THAN 1ST LIMIT. 01060000
  977. STARGL EQU * 01061000
  978. ST ARG,LASTDMP SAVE ENDING-ADDRESS 01062000
  979. LA R7,DMPTITLE R7 = A(DMPTITLE) 01063000
  980. MVI DMPTITLE,C' ' CLEAR BUFFER 01064000
  981. MVC DMPTITLE+1(L'DMPTITLE-1),DMPTITLE ALL OF IT 01065000
  982. MVC 42(8,R7),ARGS+24 INCLUDE ID IF GIVEN 01066000
  983. MVI 50(R7),C':' MAKE HEADING LINE PRETTY 01067000
  984. MVC 53(4,R7),=CL4'FROM' 01068000
  985. MVC 58(8,R7),ARGS+8 01069000
  986. MVC 67(2,R7),=CL2'TO' 01070000
  987. MVC 70(8,R7),ARGS+16 01071000
  988. LA R1,DUMPLIST POINT TO PARAMETER LIST 01072000
  989. L R15,=V(DMSDBD) GET ADDRESS OF DUMP EXECUTIONER 01073000
  990. TM DBGFLAGS,DBGEXINT WAS THIS AN EXTERNAL INTERRUPT 01074000
  991. BNO DUMP10 NO, PGRAMCHK OR ENTERED ON PURPOSE 01075000
  992. LA R0,EXTOPSW YES, SET R0 TO IT'S ADDRESS 01076000
  993. B DUMPOUT GO TO DEBDUMP 01077000
  994. DUMP10 EQU * 01078000
  995. LA R0,PGMOPSW SET R0 TO PROGRAM OLD PSW 01079000
  996. DUMPOUT EQU * GO TO DEBDUMP 01080000
  997. LA R14,NEWLIN FOR RETURN TO DEBUG 01081000
  998. BR R15 OFF TO DEBDUMP (DUMP EXEC.) 01082000
  999. EJECT 01083000
  1000. ********************************************************************** 01084000
  1001. * * 01085000
  1002. * 'PSW' * 01086000
  1003. * * 01087000
  1004. ********************************************************************** 01088000
  1005. PSWCMND EQU * 01089000
  1006. LA ARG,XPSW SET LOCATION OF OLD PSW 01090000
  1007. PSWPRT ST ARG,EXAMLC STORE STARTING LOCATION OF PRINT 01091000
  1008. LA R15,8 SET NUMBER OF BYTES TO PRINT 01092000
  1009. ST R15,EXAMLG LEAVING IN BOTH R15 AND 'EXAMLG' 01093000
  1010. B OK LET EXAMINE ROUTINE DO REST OF WORK 01094000
  1011. SPACE 2 01095000
  1012. ********************************************************************** 01096000
  1013. * * 01097000
  1014. * 'GPR' * 01098000
  1015. * * 01099000
  1016. ********************************************************************** 01100000
  1017. GPR LA ARG,ARGS+8 GET FIRST NUMBER 01101000
  1018. LA R13,JFLAGS+1 SET R13 CORRESPONDING TO 'ARGS+8' 01102000
  1019. BAL RETURN,DECIN CONVERT TO BINARY 01103000
  1020. L AC,DEC SAVE IT 01104000
  1021. C AC,F15 (MAKE SURE NO MORE THAN 15) 01105000
  1022. BH ERR04 (ERROR IF > 15) 01106000
  1023. LR ARG,AC EQUAL IF ONLY ONE 01107000
  1024. CLI ARGSCT,X'02' IS ANOTHER GPR SPECIFIED ? 01108000
  1025. BC 8,ONEREG ONLY ONE REGISTER 01109000
  1026. LA ARG,ARGS+16 GET SECOND REGISTER 01110000
  1027. BAL RETURN,DECIN2 CONVERT TO BINARY FROM DECIMAL 01111000
  1028. L ARG,DEC GET SECOND REGISTER 01112000
  1029. C ARG,F15 (MAKE SURE NO MORE THAN 15) 01113000
  1030. BH ERR04 (ERROR IF > 15) 01114000
  1031. CR ARG,AC MUST NOT BE LESS THAN 1ST REG. 01115000
  1032. BL ERR04 ERROR IF IT IS--WE WON'T GIVE WRAP-AROUND 01116000
  1033. ONEREG SR ARG,AC DETERMINE NUMBER OF REGISTERS DESIRED 01117000
  1034. LA COUNT,1(,ARG) 01118000
  1035. SLL AC,2 MULTIPLY BY 4 01119000
  1036. LA AC,GPRLOG(AC) LOCATION OF FIRST REGISTER 01120000
  1037. MVI DBGOUT-1,X'08' SET PRINTER COUNT 01121000
  1038. GPRLOP LR ARG,AC SET ARGUMENT FOR HEX CONVERT 01122000
  1039. BAL RETURN,HEXOUT CONVERT TO HEX 01123000
  1040. MVC DBGOUT(8),HEXHEX MOVE TO PTINT BUFFER 01124000
  1041. BAL IOLINK,IOPRT PRINT 01125000
  1042. LA AC,4(,AC) ADVANCE COUNTER 01126000
  1043. BCT COUNT,GPRLOP PRINT ALL REGISTERS DESIRED 01127000
  1044. B NEWLIN GET NEXT COMMAND 01128000
  1045. EJECT 01129000
  1046. SPACE 2 01130000
  1047. ********************************************************************** 01131000
  1048. * * 01132000
  1049. * 'STORE' * 01133000
  1050. * * 01134000
  1051. ********************************************************************** 01135000
  1052. STORE EQU * STORE COMMAND 01136000
  1053. NI DBGSWTCH,255-DBGSET INDICATE IT IN SWITCH 01137000
  1054. LA ARG,ARGS+8 POINT TO THE LOCATION 01138000
  1055. LA R13,JFLAGS+1 SET R13 CORRESPONDING TO 'ARGS+8' 01139000
  1056. BAL RETURN,VALUE GET VALUE 01140000
  1057. STOR2 LR TEMP,ARG SAVE VALUE 01141000
  1058. SR COUNT,COUNT ZERO COUNT REGISTER 01142000
  1059. IC COUNT,ARGSCT GET NUMBER OF PARAMETERS 01143000
  1060. SLL COUNT,3 MULTIPLY B8 (DOUBLE WORDS) 01144000
  1061. LA COUNT,ARGS(COUNT) GET LOCATION OF LAST PARAMETER 01145000
  1062. BCTR COUNT,0 SUBTRACT 1 01146000
  1063. ST COUNT,STOPAT SAVE TO TERMINATE LOOP 01147000
  1064. LA COUNT,ARGS+15 INITIALIZE FOR LOOP 01148000
  1065. STSAVE ST COUNT,BEGAT SAVE LOCATION OF PARAMETER POINTER 01149000
  1066. STCONT LA COUNT,1(,COUNT) INCREMENT POINTER 01150000
  1067. CLI 0(COUNT),X'00' TEST FOR '00' 01151000
  1068. BC 8,STCONT KEEP LOOKING 01152000
  1069. L ARG,BEGAT FIRST INPUT BYTE FOUND 01153000
  1070. LA AC,10(,ARG) CALCULATE NUMBER OF BYTES INPUTTED 01154000
  1071. SR AC,COUNT 01155000
  1072. SRL AC,1 DIVIDE BY 2 (PACKING) 01156000
  1073. LA ARG,1(,ARG) SET ARGUMENT FOR HEXIN 01157000
  1074. LA R13,1(,R13) ALSO INCREMENT R13 ... 01158000
  1075. BAL RETURN,HEXIN CONVERT TO BINARY 01159000
  1076. LA ARG,HEX+4 DETERMINE WHICH BYTES TO MOVE 01160000
  1077. SR ARG,AC 01161000
  1078. BCTR AC,0 SUBTRACT 1 FOR MVC INSTRUCTION 01162000
  1079. * NOTE: MODIFICATION OF A SHARED SEGMENT PERMITTED NOW 01163100
  1080. LR RETURN,TEMP USE "RETURN" REG INSTEAD OF TEMP @V304732 01163200
  1081. LA TEMP,ERR05PGM SET 'TEMP' REG. FOR PROG. INT. @V304732 01163300
  1082. OI DBGFLAGS,DBGRECUR SIGNAL WE MIGHT GET PROG INT @V304732 01163400
  1083. EX AC,STMOVE MOVE BYTES INTO STORAGE @V304732 01163500
  1084. NI DBGFLAGS,255-DBGRECUR OK - RESET FLAGBIT @V304732 01163600
  1085. LR TEMP,RETURN AND RECOVER 'TEMP' REGISTER. @V304732 01163700
  1086. TM DBGSWTCH,DBGSET IS SET COMMAND REQUESTED 01165000
  1087. BNO STORE10 NO, STORE COMMAND IS 01166000
  1088. LA TEMP,4(,TEMP) YES, INCREMENT FULLWORD 01167000
  1089. B STORE20 CONTINUE TO STORE NEXT ENTRY 01168000
  1090. STORE10 EQU * INCREMENT STORAGE POINTER 01169000
  1091. LA TEMP,1(TEMP,AC) TO NEXT ADDRESS. 01170000
  1092. STORE20 EQU * STORE THE NEXT ENTRY 01171000
  1093. L COUNT,BEGAT SET PARAMETER POINTER 01172000
  1094. LA COUNT,8(,COUNT) INCREMENT 01173000
  1095. C COUNT,STOPAT TEST FOR END OF PARAMETER LIST 01174000
  1096. BC 6,STSAVE IF NOT CONTINUE 01175000
  1097. B NEWLIN OTHERWISE, GET NEXT COMMAND 01176000
  1098. EJECT 01177000
  1099. ********************************************************************** 01179000
  1100. * * 01180000
  1101. * 'CSW' * 01181000
  1102. * * 01182000
  1103. ********************************************************************** 01183000
  1104. DEBCSW EQU * 01184000
  1105. LA ARG,LCSW SET ADDRESS OF CSW 01185000
  1106. B PSWPRT USE PSW ROUTINE TO DO THE WORK 01186000
  1107. SPACE 2 01187000
  1108. ********************************************************************** 01188000
  1109. * * 01189000
  1110. * 'CAW' * 01190000
  1111. * * 01191000
  1112. ********************************************************************** 01192000
  1113. DEBCAW EQU * 01193000
  1114. LA AC,LCAW SET ADDRESS OF CAW 01194000
  1115. LA COUNT,1 NECESSARY FUDGE 01195000
  1116. B GPRLOP-4 LET GPR ROUTINE DO THE WORK 01196000
  1117. SPACE 2 01197000
  1118. ********************************************************************** 01198000
  1119. * * 01199000
  1120. * 'BREAK' * 01200000
  1121. * * 01201000
  1122. ********************************************************************** 01202000
  1123. * 01203000
  1124. * NEED 16 CONSECUTIVE ILLEGAL-INSTRUCTIONS FOR BREAKPOINT LOGIC 01204000
  1125. * X'B2E0' THRU X'B2EF' ARE "ARCHITECTURE-SAFE" 01205000
  1126. * 01209000
  1127. BREAK LA ARG,ARGS+8 GET BREAKPOINT NUMBER 01210000
  1128. LA R13,JFLAGS+1 SET R13 CORRESPONDING TO 'ARGS+8' 01211000
  1129. BAL RETURN,DECIN CONVERT TO BINARY 01212000
  1130. L AC,DEC GET BREAKPOINT NUMBER. 01213000
  1131. C AC,F15 (MAKE SURE NO MORE THAN 15) 01214000
  1132. BH ERR04 (ERROR IF > 15) 01215000
  1133. LA ARG,ARGS+16 GET LOCATION OF BREAKPOINT 01216000
  1134. BAL RETURN,VALUE2 CONVERT TO BINARY 01217000
  1135. TM ARGSAV+3,X'01' MAKE SURE NOT AN ODD NUMBER 01218000
  1136. BNZ ERR05 ERROR IF IT IS. 01219000
  1137. L TEMP,ARGSAV GET TARGET ADDR. 01220000
  1138. LA AC,1 LOAD OFFSET OF MAXIMUM ADDR 01221000
  1139. * NOTE: MODIFICATION OF A SHARED SEGMENT PERMITTED NOW 01222000
  1140. BAL RETURN,BRKADDR CHECK WHAT'S THERE. 01223000
  1141. L AC,DEC GET THE BREAKPOINT NUMBER. 01224000
  1142. BAL RETURN,BRKLKP GET IT'S TABLE ENTRY. 01225000
  1143. LR R15,AC SAVE ENTRY ADDRESS. 01226000
  1144. CLI 4(AC),X'FF' AVAILABLE? 01227000
  1145. L AC,DEC JUST IN CASE. 01228000
  1146. BE SETBRK JUST SET THE NEW ONE. 01229000
  1147. L TEMP,4(,R15) GET ITS TARGET ADDRESS. 01230000
  1148. BAL RETURN,BRKADDR CHECK IT OUT. 01231000
  1149. L AC,DEC GET BREAKPOINT NUMBER @VA01159 01232100
  1150. SETBRK ST ARG,4(,R15) STORE ADDRESS IN TABLE. 01243000
  1151. MVC 0(2,R15),0(ARG) SAVE (PART OF) INSTR MADE INVALID 01244000
  1152. MVC 0(2,ARG),=XL2'B2E0' MOVE INVALID OP-CODE INTO P3121 01245000
  1153. EX AC,OI INSERT THE BREAKPOINT NUMBER P3121 01246000
  1154. B NEWLIN NEXT COMMAND PLEASE P3121 01247000
  1155. SPACE 01248000
  1156. OI OI 1(ARG),0 EXECUTED-OR TO MOVE BREAKPOINT ID P3121 01249000
  1157. SPACE 01250000
  1158. * 01251000
  1159. * PROGRAM INTERRUPTS CAUSE CONTROL TO RETURN HERE 01252000
  1160. * 01253000
  1161. BRKENT SR EVEN,EVEN ZERO OUT EVEN 01254000
  1162. L ODD,PGMOPSW+4 GET ADDRESS IN PSW 01255000
  1163. LA AC,0(,ODD) GET ADDRESS 01256000
  1164. SLDL EVEN,2 GET ILC LENGTH (BACK SPACE ILC) 01257000
  1165. AR EVEN,EVEN SHIFT LEFT 1 01258000
  1166. SR AC,EVEN CORRECT ILC ADDRESS 01259000
  1167. BM NOTBRK CAN'T BE A BREAKPOINT IF 'AC' < 0 (6 FEB 68) 01260000
  1168. LA TEMP,NOTBRPGM SET 'TEMP' REG. FOR PROG. INT. @V304732 01261100
  1169. OI DBGFLAGS,DBGRECUR SIGNAL WE MIGHT GET PROG INT @V304732 01261200
  1170. CLI 0(AC),X'B2' DOES OP-CODE LOOK LIKE A BREAKPOINT P3121 01263000
  1171. BNE NOTBRK LOOK NO FURTHER P3121 01264000
  1172. TM 1(AC),X'E0' REST OF MASK THERE? 01265000
  1173. BNO NOTBRK NO. NOT A BREAKPOINT. 01266000
  1174. NI DBGFLAGS,255-DBGRECUR OK - RESET FLAGBIT @V304732 01266100
  1175. IC TEMP,1(,AC) GET THE NUMBER-BYTE. P3121 01267000
  1176. N TEMP,MASK DETERMINE BREAK POIJT NUMBER 01268000
  1177. ST TEMP,DEC SAVE IT 01269000
  1178. SLL TEMP,3 MULTIPLY BY 8. P3121 01270000
  1179. LA TEMP,BRKPNTBL(TEMP) FIND ENTRY IN BREAKPOINT TABLE 01271000
  1180. L ARG,4(,TEMP) GET THE N'TH BREAKPOINT ADDR P3121 01272000
  1181. CR ARG,AC COMPARE ADDRESSES 01273000
  1182. BC 6,NOTBRK NOT A BREAKPOINT 01274000
  1183. ST AC,HEX SET PSW LOCATION 01275000
  1184. MVC XPSW(5),PGMOPSW COPY FIRST 5 BYTES OF PSW 01276000
  1185. MVC XPSW+5(3),HEX+1 01277000
  1186. MVC 0(2,AC),0(TEMP) RESTORE ORIGINAL INSTRUCTION P3121 01278000
  1187. MVI 4(TEMP),X'FF' MAKE NEG. (VERY BAD ADDR) 01279000
  1188. LA ARG,DEC CONVERT NUMBER TO DECIMAL 01280000
  1189. BAL RETURN,DECOUT 01281000
  1190. MVC DBGOUT(LP4),P4 MOVE 1ST. PART OF MSG @VA01159 01281100
  1191. MVC DBGOUT+LP4AA(2),DECDEC+6 INSERT BREAK NO. @VA01159 01281200
  1192. BAL RETURN,JHEXOUT CONVERT ADDRESS (ALREADY IN 'HEX') 01284000
  1193. MVC DBGOUT+LP4(6),HEXHEX+2 INSERT BREAK ADDR @VA01159 01285100
  1194. MVI OUTPT1,LP4A SET LENGTH FOR CCW @VA01159 01285200
  1195. B CHEKTYPE CHECK CONSOLE I/O TYPE. 01287000
  1196. * 01288000
  1197. * IF THE PROGRAM CHECK IS NOT A BREAKPOINT, THEN WE TRANSFER CONTROL 01289000
  1198. * DMSITP. THAT ROUTINE WILL CHECK FOR A SPIE EXIT, AND IF THERE IS 01290000
  1199. * NONE, WILL ABEND THE GUY. ONCE IN THE ABEND ROUTINE, THE USER MA Y 01291000
  1200. * SPECIFY THAT HE WANTS TO COME RIGHT BACK TO DEBUG, THUS COMPLETING 01292000
  1201. * THE CIRCLE. 01293000
  1202. SPACE 01293200
  1203. * PROGRAM INTERRUPT WHILE CHECKING FOR POTENTIAL BREAKPOINT: 01293400
  1204. NOTBRPGM MVC PGMOPSW(8),LPGMOPSW PUT BACK PROG OLD PSW @V304732 01293600
  1205. * NOT A BREAKPOINT: 01293800
  1206. NOTBRK NI DBGFLAGS,255-DBGRECUR RESET FLAGBIT @V304732 01294000
  1207. MVC IPLPSW,=A(0,DMSITP) POINT TO DMSITP ROUTINE 01295000
  1208. EXTRN DMSITP 01296000
  1209. LM R0,R15,GPRLOG RESTORE GPRS 01297000
  1210. MVI DBGFLAGS,OFF CLEAR DBGFLAGS FLAG @V305066 01298000
  1211. LPSW IPLPSW GO TO DMSITP 01299000
  1212. * 01300000
  1213. * GIVE TYPEOUT FOR 'EXTERNAL INTERRUPT' 01301000
  1214. * 01302000
  1215. INTENT MVC OUTPT1(LP2A),P2CNT EXTERNAL MSG TO BUFFER @VA01159 01303100
  1216. MVC XPSW(8),EXTOPSW SAVE EXTERNAL OLD PSW 01304000
  1217. TM EXTOPSW+1,2 IS EXT OLD PSW IN WAIT ? @VA00770 01305100
  1218. BZ CHEKTYPE NO..GO CHECK TYPEWRITER @VA00770 01305150
  1219. L R1,=V(DMSIOWR) GET CMS I/O WAIT RTNE @VA00770 01305200
  1220. C R1,EXTOPSW+4 ARE WE IN CMS I/O WAIT ? @VA00770 01305250
  1221. BNE CHEKTYPE NO..GO CHECK TYPEWRITER @VA00770 01305300
  1222. NI XPSW+1,253 TURN WAIT BIT OFF @VA01159 01305350
  1223. OI DBGSWTCH,2 SET SPECIAL EXTERNAL CASE @VA00770 01305400
  1224. MVC BALRSAVE(64),WAITSAVE SAVE DMSIOW REGS @VA00770 01305450
  1225. B CHEKTYPE GO CHECK TYPEWRITER AND GET GOING. 01306000
  1226. SPACE 01307000
  1227. SPACE 01308000
  1228. SPACE 2 01309000
  1229. ********************************************************************** 01310000
  1230. * * 01311000
  1231. * 'SET' * 01312000
  1232. * * 01313000
  1233. ********************************************************************** 01314000
  1234. SET EQU * 01315000
  1235. OI DBGSWTCH,DBGSET INDICATE SET COMMAND 01316000
  1236. CLC APSW(3),ARGS+13 IS IT PSW 01317000
  1237. BC 8,SPSW 01318000
  1238. CLC ACAW(3),ARGS+13 IS IT CAW 01319000
  1239. BC 8,SCAW 01320000
  1240. CLC ACSW(3),ARGS+13 IS IT CSW 01321000
  1241. BC 8,SCSW 01322000
  1242. CLC AGPR(3),ARGS+13 IS IT GPR 01323000
  1243. BC 8,SGPR 01324000
  1244. B ERR04 INVALID ARGUMENT IF NONE OF THESE 01325000
  1245. SPSW EQU * SET PSW LOCATION 01326000
  1246. CLI ARGSCT,X'04' CHECK MAX.NUMBER OF AGS. 01327000
  1247. BH ERR06 TOO MANY ENTERED, TYPE ERROR MSG. 01328000
  1248. LA ARG,XPSW POINT TO PSW LOCATION 01329000
  1249. B STOR2 USE STORE ROUTINE 01330000
  1250. SCAW EQU * 01331000
  1251. CLI ARGSCT,X'03' CHECK MAX.NUMBER OF ARGS. 01332000
  1252. BH ERR06 TOO MANY ENTERED, TYPE ERROR MSG. 01333000
  1253. LA ARG,LCAW SET CAW LOCATION 01334000
  1254. B STOR2 01335000
  1255. SCSW EQU * 01336000
  1256. CLI ARGSCT,X'04' CHECK NO. OF ARGUMENTS 01337000
  1257. BH ERR06 TOO MANY 01338000
  1258. LA ARG,LCSW SET CSW LOCATION 01339000
  1259. B STOR2 01340000
  1260. SGPR EQU * 01341000
  1261. CLI ARGSCT,X'04' BE SURE ALL ARGS. SPECIFIED 01342000
  1262. BL MISSOP IF NOT TYPE OUT ERROR MESSAGE 01343000
  1263. CLI ARGSCT,X'05' CHECK MAX. NUMBER OF ARGS. 01344000
  1264. BH ERR06 TOO MANY ENTERED, TYPE ERROR MSG. 01345000
  1265. LA ARG,ARGS+16 POINT TO GPR 01346000
  1266. BAL RETURN,DECIN2 DETERMIN REGISTER NUMBER 01347000
  1267. L ARG,DEC MULTIPLY BY 4 01348000
  1268. C ARG,F15 (MAKE SURE NO MORE THAN 15) 01349000
  1269. BH ERR04 (ERROR IF > 15) 01350000
  1270. SLL ARG,2 01351000
  1271. LA ARG,GPRLOG(ARG) FORM ACTUAL CORE LOCATION 01352000
  1272. MVC ARGS(MVCNT),ARGS+8 MOVE ARGUMENTS LEFT 01353000
  1273. SR COUNT,COUNT ZERO COUNT REGISTER 01354000
  1274. IC COUNT,ARGSCT ADJUST PARAMETER COUNT TO FOOL STOR2 01355000
  1275. BCTR COUNT,0 01356000
  1276. STC COUNT,ARGSCT 01357000
  1277. B STOR2 NOW CALL STOR2 01358000
  1278. SPACE 2 01359000
  1279. * 01360000
  1280. * 'KX' (KILL-EXECUTION) ... 01361000
  1281. * 01362000
  1282. KX EQU * 01363000
  1283. TM DBGFLAGS,DBGABN ENTRY FROM DMSABN MEANS THAT 01364000
  1284. BO RTNABN 'KX' EQUALS 'RETURN' 01365000
  1285. L R15,AKILLEX A(KILLEX) 01366000
  1286. MVI DBGFLAGS,OFF CLEAR DBGFLAGS FLAG @V305066 01367000
  1287. BR R15 ... 01368000
  1288. EJECT 01369000
  1289. ********************************************************************* 01370000
  1290. * * 01371000
  1291. * 'RETURN' * 01372000
  1292. * * 01373000
  1293. ********************************************************************* 01374000
  1294. * 01375000
  1295. RTURN TM DBGFLAGS,DBGABN ENTRY FROM DMSABN? 01376000
  1296. BO RTNABN RETURN TO DMSABN 01377000
  1297. TM DBGFLAGS,DBGPGMCK+DBGEXINT VERIFY DEBUG ENTRY 01378000
  1298. BM ERR01 NO: PRGRAM CHECK OR EXTERNAL INTERRUPT 01379000
  1299. MVI DBGFLAGS,OFF CLEAR DBGFLAGS FLAG @V305066 01380000
  1300. LM R0,R14,GPRLOG RESTORE REGISTERS 01381000
  1301. SR 15,15 INDICATE NO ERROR IN 15 01382000
  1302. BR 14 NORMAL-TYPE CMS RETURN 01383000
  1303. SPACE 2 01384000
  1304. * RETURN TO DMSABN TO PROCEED WITH ABEND RECOVERY 01385000
  1305. RTNABN EQU * 01386000
  1306. MVI DBGFLAGS,OFF CLEAR DBGFLAGS FLAG @V305066 01387000
  1307. L R14,=V(DMSABNRT) POINT TO RETURN LOCATION 01388000
  1308. BR R14 AND JUST DROP IN 01389000
  1309. SPACE 2 01403000
  1310. EJECT 01404000
  1311. ********************************************************************** 01405000
  1312. * * 01406000
  1313. * ERROR CODES * 01407000
  1314. * * 01408000
  1315. ********************************************************************** 01409000
  1316. ERR01 EQU * INCORRECT DEBUG EXIT 01410000
  1317. LA AC,MESS01 01411000
  1318. B ERRPRT 01412000
  1319. * 01413000
  1320. * ('ERR02' = 'INVALID DEBUG REQUEST' CODE IS ELSEWHERE) 01414000
  1321. * 01415000
  1322. ERR03 EQU * SYMBOL TABLE OVERFLOW 01416000
  1323. LA AC,MESS03 01417000
  1324. B ERRPRT 01418000
  1325. ERR04 EQU * INVALID ARGUMENT 01419000
  1326. LA AC,MESS04 01420000
  1327. B ERRPRT 01421000
  1328. * 01422000
  1329. * INVALID STORAGE-ADDRESS VIA PROGRAM INTERRUPT WHILE IN DEBUG: 01423100
  1330. ERR05PGM MVC PGMOPSW(8),LPGMOPSW RESTORE PROGRAM OLD PSW @V304732 01423200
  1331. * INVALID STORAGE ADDRESS SPECIFIED BY SOME DEBUG REQUEST: 01423300
  1332. ERR05 NI DBGFLAGS,255-DBGRECUR ENSURE "RECUR" FLAG CLEAR @V304732 01423400
  1333. LA AC,MESS05 SET FOR INVALID STORAGE ADDRESS; @V304732 01423500
  1334. B ERRPRT TYPE OUT THE MESSAGE 01424000
  1335. * 01425000
  1336. ERR06 EQU * 01426000
  1337. LA AC,MESS07 TOO MANY ARGUMENTS 01427000
  1338. * CONTINUE TO "ERRPRT" ... 01428100
  1339. * 01438000
  1340. ERRPRT EQU * (PROCEED DIRECTLY TO ERROR MESSAGE) 01439000
  1341. MVC DBGOUT-1(80),0(AC) PRINT ERROR MESSAGE 01440000
  1342. B JPRINT GO GIVE TYPEOUT, AND THEN GET NEW LINE... 01441000
  1343. SPACE 01442000
  1344. EJECT 01443000
  1345. * * 01444000
  1346. * CONSTANTS 01445000
  1347. * * 01446000
  1348. SPACE 01447000
  1349. DS 0D 01448000
  1350. PSW1 DC 4X'00' PART OF WT 01450000
  1351. DC A(DMSDBG) PART OF PSW1 01451000
  1352. * 01452000
  1353. EOLMVC MVC 2(*-*,R3),1(R3) INST. TO BLANK FILL PROCESSED STRIN 01453000
  1354. MVCINP MVC INPUT1(*-*),0(ARG) MOVE WORDS TO INPUT1 AS SCRATCH AREA 01454000
  1355. STMOVE MVC 0(*-*,RETURN),0(ARG) MOVE USER BYTES TO STORAGE @V304732 01455100
  1356. * 01456000
  1357. F15 DC F'15' FOR CHECKING MAXIMUM REGISTER NO. ETC. 01457000
  1358. MAXX DC F'56' PRACTICAL MAXIMUM FOR 'X' COMMAND 01458000
  1359. * 01459000
  1360. TRUNFUL DC X'00FFFFFC' ROUNDER UPPER 01460000
  1361. MASK EQU F15 = X'0000000F' @V304732 01461000
  1362. BIN1000 EQU B'1000' @V305066 01461100
  1363. SPACE 01463000
  1364. * 01464000
  1365. MESS01 DC AL1(MESS02-MESS01-1) 01465000
  1366. DC C'INCORRECT DEBUG EXIT' 01466000
  1367. MESS02 DC AL1(MESS03-MESS02-1) 01467000
  1368. DC C'INVALID DEBUG REQUEST' 01468000
  1369. MESS03 DC AL1(MESS04-MESS03-1) 01469000
  1370. DC C'16 SYMBOLS ALREADY DEFINED' 01470000
  1371. MESS04 DC AL1(MESS05-MESS04-1) 01471000
  1372. DC C'INVALID OPERAND' 01472000
  1373. MESS05 DC AL1(MESS06-MESS05-1) 01473000
  1374. DC C'INVALID STORAGE ADDRESS' 01474000
  1375. MESS06 DC AL1(MESS07-MESS06-1) 01475000
  1376. DC C'MISSING OPERAND' 01476000
  1377. MESS07 DC AL1(MESS08-MESS07-1) 01477000
  1378. DC C'TOO MANY OPERANDS' 01478000
  1379. MESS08 EQU * 01479000
  1380. * 01480000
  1381. P2CNT DC AL1(LP2A-1) COUNT FOR CCW @VA01159 01481100
  1382. P2 DC C'EXTERNAL INTERRUPT' @VA01159 01481200
  1383. LP2A EQU *-P2CNT SIZE FOR MVC @VA01159 01481300
  1384. * 01495000
  1385. P4AA DC C'BREAKPOINT ' @VA01159 01496100
  1386. P4 EQU P4AA 01497000
  1387. LP4AA EQU *-P4AA ITS LENGTH 01498000
  1388. P4A DC C'XX AT ' MESSAGE TO USER 01500000
  1389. LP4 EQU *-P4 (SIZE FOR 'MVC') 01501000
  1390. LP4A EQU LP4+6 COUNT FOR CCW @VA01159 01502100
  1391. * 01509000
  1392. DS 0D (256 BYTES, PRECEDES LTORG) @V304732 01514100
  1393. INVTBL DC 192X'FF' INVALID HEX REPRESENTATION TABLE 01515000
  1394. DC 7X'00' THESE GUYS ARE VALID 01516000
  1395. DC 41X'FF' THESE GUYS AREN'T 01517000
  1396. DC 10X'00' NUMBERS 0-9 OK 01518000
  1397. DC 6X'FF' 01519000
  1398. * 01520000
  1399. * REGISTER USAGE * 01521000
  1400. * * 01522000
  1401. EVEN EQU 2 01523000
  1402. ODD EQU 3 01524000
  1403. COUNT EQU 4 01525000
  1404. TEMP EQU 5 01526000
  1405. ARG EQU 6 01527000
  1406. IOTEMP EQU 7 01528000
  1407. AC EQU 8 01529000
  1408. IOLINK EQU 14 01530000
  1409. RETURN EQU 11 01531000
  1410. BASE EQU 12 01532000
  1411. OFF EQU X'00' @V305066 01532100
  1412. SPACE 2 01533000
  1413. LTORG 01534000
  1414. EJECT 01535000
  1415. DBGSECT 01536000
  1416. NUCON 01537000
  1417. * 01538000
  1418. * EQUATES OF NUCON DEPENDENT PARAMETERS 01539000
  1419. * 01540000
  1420. SYMMAX EQU (BRKPNTBL-SYMTABLE)/16 NUMBER OF ENTRIES 01541000
  1421. SPACE 2 01542000
  1422. * 01543000
  1423. * DEFINE DISPLACEMENTS OF NUCON VARIABLES LOCATED IN LOWSAVE 01544000
  1424. * 01545000
  1425. DEFINE PGMOPSW,IOOPSW,CSW,CAW V0004 01546100
  1426. EJECT 01547000
  1427. IO 01548000
  1428. EQUATES 01549000
  1429. DMSABW 01550000
  1430. SVCSAVE 01551000
  1431. * 01552000
  1432. END 01553000