Table of Contents

DMTREX Source

References

Source Listing

DMTREX.ASSEMBLE.txt
  1. REX TITLE 'DMTREX (RSCS) VM/370 - RELEASE 6' 00001000
  2. *. 00002000
  3. * MODULE NAME - 00003000
  4. * 00004000
  5. * DMTREX 00005000
  6. * 00006000
  7. * FUNCTION - 00007000
  8. * 00008000
  9. * THIS ROUTINE FUNCTIONS AS THE CONTROLLING SUPERVISOR 00009000
  10. * TASK AND TOGETHER WITH DMTCMX, DMTMGX, DMTSYS, DMTCOM, 00010000
  11. * DMTMSG, AND DMTCRE MAKE UP THE REX SUPERVISOR TASK. 00011000
  12. * 00012000
  13. * ATTRIBUTES - 00013000
  14. * 00014000
  15. * NON-REUSABLE 00015000
  16. * 00016000
  17. * ENTRY POINTS - 00017000
  18. * 00018000
  19. * DMTREX - AT TASK INITIATION TIME 00019000
  20. * DMTREXHC - CP WRITE ENTRY 00020000
  21. * DMTREXVL - VERSION AND TITLE ENTRY POINT 00021000
  22. * DMTREXCN - REX CONSOLE I/O REQ TABLE 00022000
  23. * DMTREXID - OP MSG XFER ID 00023000
  24. * 00024000
  25. * ENTRY CONDITIONS - 00025000
  26. * 00026000
  27. * R15= ENTRY ADDRESS 00027000
  28. * 00028000
  29. * EXIT CONDITIONS - 00029000
  30. * 00030000
  31. * NORMAL - THIS ROUTINE IS ALWAYS ACTIVE 00031000
  32. * ERROR - THIS ROUTINE IS ALWAYS ACTIVE 00032000
  33. * 00033000
  34. EJECT 00034000
  35. * 00035000
  36. * CALLS TO OTHER ROUTINES - 00036000
  37. * 00037000
  38. * SEE ENTRY TO EACH ROUTINE 00038000
  39. * 00039000
  40. * EXTERNAL REFERENCES - 00040000
  41. * 00041000
  42. * TCOM - COMMON ROUTINE VECTOR TABLE 00042000
  43. * TLINKS - LINK TABLE CHAIN 00043000
  44. * 00044000
  45. * TABLES / WORKAREAS - 00045000
  46. * 00046000
  47. * SEE ENTRY TO EACH ROUTINE 00047000
  48. * 00048000
  49. * REGISTER USAGE - 00049000
  50. * 00050000
  51. * ALL SUBROUTINES IN THE MODULE CONFORM GENERALLY TO THIS USAGE; 00051000
  52. * ANY INDIVIDUAL DEVIATIONS OR EXTENSIONS ARE LISTED WITH THE 00052000
  53. * COMMAND DESCRIPTION 00053000
  54. * 00054000
  55. * GPR0 = PARM REGISTER 00055000
  56. * GPR1 = IOTABLE ADDRESSABILITY 00056000
  57. * GPR2 = LINK TABLE ADDRESSABILITY 00057000
  58. * GPR3 = WORK 00058000
  59. * GPR4 = WORK 00059000
  60. * GPR5 = WORK 00060000
  61. * GPR6 = WORK 00061000
  62. * GPR7 = WORK 00062000
  63. * GPR8 = WORK 00063000
  64. * GPR9 = WORK 00064000
  65. * GPR10 = WORK 00065000
  66. * GPR11 = WORK 00066000
  67. * GPR12 = BASE REGISTER 00067000
  68. * GPR13 = WORK 00068000
  69. * GPR14 = RETURN 00069000
  70. * GPR15 = COMMON VECTOR TABLE ADDRESSABILITY 00070000
  71. * 00071000
  72. * NOTES - 00072000
  73. * 00073000
  74. * NONE 00074000
  75. * 00075000
  76. * OPERATION - 00076000
  77. * 00077000
  78. * SEE EACH SECTION 00078000
  79. * 00079000
  80. *. 00080000
  81. EJECT 00081000
  82. PUNCH 'SLC 010000' 00082000
  83. SPACE 00083000
  84. DMTREX CSECT 00084000
  85. SPACE 00085000
  86. ENTRY DMTREXHC CP WRITE ENTRY 00086000
  87. ENTRY DMTREXVL VERSIO AND TITLE ENTRY POINT 00087000
  88. ENTRY DMTREXCN REX CONSOLE I/O REQ TABLE 00088000
  89. ENTRY DMTREXID OP MSG XFER ID 00089000
  90. SPACE 00090000
  91. REXSAVE DC 0D'0' BEGINNING OF MONITOR SAVE AREA 00091000
  92. SPACE 00092000
  93. REXPSW DC X'FF04',AL2(0),A(REXINIT) INITIAL PSW FOR DISPATCH 00093000
  94. SPACE 00094000
  95. REXREG0 DC F'0' INITIAL REGISTER CONTENTS 00095000
  96. REXREG1 DC F'0' 00096000
  97. REXREG2 DC F'0' 00097000
  98. REXREG3 DC F'0' 00098000
  99. REXREG4 DC F'0' 00099000
  100. REXREG5 DC F'0' 00100000
  101. REXREG6 DC F'0' 00101000
  102. REXREG7 DC F'0' 00102000
  103. REXREG8 DC F'0' 00103000
  104. REXREG9 DC F'0' 00104000
  105. REXREG10 DC F'0' 00105000
  106. REXREG11 DC F'0' 00106000
  107. REXREG12 DC A(DMTREX) BASE REGISTER FOR FIRST PAGE 00107000
  108. REXREG13 DC F'0' 00108000
  109. REXREG14 DC F'0' 00109000
  110. REXREG15 DC A(REXINIT) ENTRY ADDRESS AT INITIATION 00110000
  111. SPACE 00111000
  112. REQLOCK DC F'0' SYNCH LOCK FOR REQUEST ARRIVAL 00112000
  113. SPACE 3 00113000
  114. REXSTOPD DC 9D'0' TASK SAVE AREA SAVE AREA @VM01109 00113200
  115. SPACE 1 @VM01109 00113400
  116. REXEPTAF DC 16F'0' PROG CHEK REG SAVE AREA @VM01109 00113600
  117. SPACE 1 @VM01109 00113800
  118. DMTREXVL DC 0F'0' ENTRY POINT FOR VERSION AND TITLE 00114000
  119. REXVER DC CL8'6' RELEASE LEVEL @VA10186 00115100
  120. REXLEV DC CL8'0' LEVEL 00116000
  121. REXDATE DC CL8'08/09/79' MONTH/DAY/YEAR @VA10186 00117100
  122. EJECT 00118000
  123. *. 00119000
  124. * 00120000
  125. * ENTRY NAME - 00121000
  126. * 00122000
  127. * REXINIT 00123000
  128. * 00124000
  129. * FUNCTION - 00125000
  130. * 00126000
  131. * THIS ROUTINE PERFORMS THE INITIALIZATION FOR THE DMTREX TASK 00127000
  132. * 00128000
  133. * CALLS TO OTHER ROUTINES - 00129000
  134. * 00130000
  135. * DMTASY - TO INITIATE CONSOLE ASYNCH EXIT 00131000
  136. * DMTCRE - TO CREATE DMTAXS AND DMTLAX TASKS 00132000
  137. * DMTMSG - TO WRITE THE INITIAL MSG 00133000
  138. * 00134000
  139. * OPERATION - 00135000
  140. * 00136000
  141. * 1. SET UP STORAGE DUMP COMMAND 00137000
  142. * 00138000
  143. * 2. RESERVE REX STORAGE 00139000
  144. * 00140000
  145. * 3. INITIALIZE TVECTORS 00141000
  146. * 00142000
  147. * 4. INITIALIZE CONSOLE ASYNCH EXIT 00143000
  148. * 00144000
  149. * 5. INITIALIZE AXS AND LAX 00145000
  150. * 00146000
  151. * 6. INITIALIZE PROGRAM CHECK HANDLER 00147000
  152. * 00148000
  153. * RESPONSES - 00149000
  154. * 00150000
  155. * DMTREX000I RSS (VER V, LEV 1, MM/DD/YY) READY 00151000
  156. * 00152000
  157. * ERROR MESSAGES - 00153000
  158. * 00154000
  159. * NONE 00155000
  160. * 00156000
  161. *. 00157000
  162. SPACE 00158000
  163. REXINIT DC 0H'0' SET ALIGNMENT FOR START OF CODE 00159000
  164. SPACE 00160000
  165. USING DMTREX,R12 DEFINE FIRST PAGE ADDRESSABILITY 00161000
  166. USING SVECTORS,0 GET SVECTORS ADDRESSABILITY 00162000
  167. USING COMDSECT,R15 GET COMMON ROUTINE TABLE ADDR 00163000
  168. USING IOTABLE,R1 GET IOTABLE ADDRESSABILITY 00164000
  169. USING LINKTABL,R2 GET LINKTABL ADDRESSABILITY 00165000
  170. EJECT 00166000
  171. * 00167000
  172. * SET UP STORAGE DUMP COMMAND 00168000
  173. * 00169000
  174. L R1,MAINSIZE RSCS VIRTUAL PAGE COUNT 00170000
  175. BCTR R1,0 ADDR OF LAST PAGE 00171000
  176. ST R1,REXWORK TO STORAGE FOR CONVERSION 00172000
  177. UNPK REXDUMPR+9(5),REXWORK+2(3) SPREAD HEX DIGITS 00173000
  178. MVI REXDUMPR+9,C'-' RESTORE LEFT CLOBBERED CHAR 00174000
  179. MVI REXDUMPR+13,C'F' RESTORE RIGHT CLOBBERED CHAR 00175000
  180. TR REXDUMPR+10(3),REXTOEBC-240 TRANSLATE ABCDEF 00176000
  181. SPACE 2 00177000
  182. * 00178000
  183. * RESERVE STORAGE 00179000
  184. * 00180000
  185. LA R13,REXCSAVE GET COMMON SAVE ADDR 00181000
  186. LR R0,R12 ADDR OF START OF FIRST PAGE 00182000
  187. L R1,REXEND LAST ADDRESS OF REX 00183000
  188. SLR R1,R0 TOTAL STORAGE IN USE 00184000
  189. SRL R1,12 TOTAL PAGES IN USE BY REX -1 00185000
  190. SRL R0,12 PAGE NUMBER OF FIRST PAGE 00186000
  191. L R2,MAINMAP GET MAINSTORAGE MAP 00187000
  192. ALR R2,R0 ADDR OF MAP BYTE FOR FIRST PAGE 00188000
  193. BCTR R1,0 REDUCE BY ONE 00189000
  194. LTR R1,R1 ANY TO RESERVE? 00190000
  195. BM REXINAME NO 00191000
  196. EX R1,REXSQUAT RESERVE REX STORAGE 00192000
  197. EJECT 00193000
  198. * 00194000
  199. * INITIALIZE TASK NAME 00195000
  200. * 00196000
  201. REXINAME EQU * 00197000
  202. L R1,ACTIVE GET THIS TASK TABLE ENTRY 00198000
  203. MVC TASKNAME-TASKE(4,R1),REXREX SET TASK NAME 00199000
  204. SPACE 2 00200000
  205. * 00201000
  206. * INITIALIZE TVECTORS 00202000
  207. * 00203000
  208. MVC TVECTOR0(20),REXTVECT MOVE IN THE ADDRS 00204000
  209. SPACE 2 00205000
  210. * 00206000
  211. * GET VIRTUAL CONSOLE DEVICE ADDRESS 00207000
  212. * 00208000
  213. SR R1,R1 ZERO 00209000
  214. BCTR R1,0 -1 FOR CONS ADDR REQ 00210000
  215. DIAG R1,R2,X'24' ASK VM/370 FOR CONS ADDR 00211000
  216. BC 14,REXICGOT CONS ADDR IN REG.1 00212000
  217. MVI REXCONSL+DEVCODE-IOTABLE,X'FF' SET DISCON 00213000
  218. LA R1,CONSADDR AND DEFAULT CONS ADDR 00214000
  219. REXICGOT EQU * 00215000
  220. STH R1,REXCONSL+DEVCUU-IOTABLE SET CONS ADDR 00216000
  221. SPACE 2 00217000
  222. * 00218000
  223. * INITIALIZE CONSOLE ASYN EXIT 00219000
  224. * 00220000
  225. LH R0,REXCONSL+DEVCUU-IOTABLE CLEAR TOP HALF 00221000
  226. LA R1,REXASYN GET ASYN ADDR 00222000
  227. L R15,ASYNREQ GET SYSTEM ASYN SET ROUTINE 00223000
  228. BALR R14,R15 GO SET THE EXIT 00224000
  229. EJECT 00225000
  230. * 00226000
  231. * INITIALIZE AXS AND LAX 00227000
  232. * 00228000
  233. L R2,TLINKS GET START OF LINK TABLE CHAIN 00229000
  234. LA R2,8(R2) GET THE ACTUAL ENTRY 00230000
  235. MVC LACTTNME(4),REXAXS+3 SET THE NAME TO INIT AXS 00231000
  236. MVC LACTDRVR(8),REXAXS AND THE DRIVER TYPE 00232000
  237. SR R0,R0 00233000
  238. L R15,=V(DMTCRE) GET TASK START ROUTINE ADDR 00234000
  239. BALR R14,R15 AND INITIATE AXS 00235000
  240. LTR R15,R15 DID IT WORK? 00236000
  241. BNZ REXITERM NO - ERROR EXIT 00237000
  242. SPACE 1 00238000
  243. MVC LACTTNME(4),REXLAX+3 SET THE NAME TO INIT LAX 00239000
  244. MVC LACTDRVR(8),REXLAX AND THE DRIVER TYPE 00240000
  245. SR R0,R0 00241000
  246. L R15,=V(DMTCRE) GET TASK START ROUTINE ADDR 00242000
  247. BALR R14,R15 AND INITIATE LAX 00243000
  248. LTR R15,R15 DID IT WORK? 00244000
  249. BNZ REXITERM NO - ERROR EXIT 00245000
  250. MVC LACTTNME(4),REXREX RESET REX NAME IN LINK TABLE 00246000
  251. MVC LACTDRVR(8),LDEFDRVR DRIVER ID TO DEFAULT 00247000
  252. SPACE 2 00248000
  253. * 00249000
  254. * INITIALIZE ACTIVE LINK COUNT 00250000
  255. * 00251000
  256. L R1,TLINKS ADDR OF LINK TABLE 00252000
  257. XC 6(2,R1),6(R1) NONE ACTIVE TO START 00253000
  258. SPACE 2 00254000
  259. * 00255000
  260. * INITIALIZE PROGRAM CHECK MANAGER 00256000
  261. * 00257000
  262. MVC NEWPROG(8),REXPROG SET PROG CHEC EXIT TO REX 00258000
  263. SPACE 2 00259000
  264. * 00260000
  265. * ISSUE INITIAL MESSAGE 00261000
  266. * 00262000
  267. MSG 000,(REXVER,REXLEV,REXDATE) INITIAL MSG 00263000
  268. SPACE 00264000
  269. B REXCYCLE GO 00265000
  270. SPACE 1 00266000
  271. REXSQUAT MVC 1(0,R2),0(R2) TO BE EXECUTED FROM ABOVE 00267000
  272. EJECT 00268000
  273. *. 00269000
  274. * 00270000
  275. * ENTRY NAME - 00271000
  276. * 00272000
  277. * REXCYCLE 00273000
  278. * 00274000
  279. * FUNCTION - 00275000
  280. * 00276000
  281. * THIS ROUTINE MONITORS A LIST OF SYNCH LOCKS LOOKING FOR 00277000
  282. * WORK FOR DMTREX TO PERFORM 00278000
  283. * 00279000
  284. * CALLS TO OTHER ROUTINES - 00280000
  285. * 00281000
  286. * DMTWAT - TO WAIT FOR WORK TO DO 00282000
  287. * DMTAKE - TO TAKE A REQUEST FROM ANOTHER TASK 00283000
  288. * DMTPST - TO POST COMPLETION OF A CONSOLE ATTN 00284000
  289. * 00285000
  290. * OPERATION - 00286000
  291. * 00287000
  292. * 1. CHECK PROGRAM CHECK, REQUEST ARRIVAL, CONSOLE ATTN, 00288000
  293. * AND CONSOLE I/O SYNCH LOCKS. 00289000
  294. * 00290000
  295. * 2. IF ANY ARE POSTED BRANCH TO THE APPROPRIATE ROUTINE 00291000
  296. * TO PROCESS THE REQUEST. 00292000
  297. * 00293000
  298. * 3. AFTER ALL SYNCH LOCKS ARE CHECKED, WAIT ON THE 00294000
  299. * SYNCH LOCK LIST 00295000
  300. * 00296000
  301. * RESPONSES - 00297000
  302. * 00298000
  303. * NONE 00299000
  304. * 00300000
  305. * ERROR MESSAGES - 00301000
  306. * 00302000
  307. * NONE 00303000
  308. * 00304000
  309. *. 00305000
  310. SPACE 00306000
  311. REXCYCLE DC 0H'0' 00307000
  312. CLI PROGLOCK,X'00' PROGRAM CHECKS AFOOT? 00308000
  313. BNE REXPCHEK YEP - KILL A DRIVER OR SO 00309000
  314. CLI REQLOCK,X'00' REQUEST AROUND HERE? 00310000
  315. BNE REXACCPT YES - TAKE AND PROCESS ONE 00311000
  316. CLI ATTNLOCK,X'00' ATTN SEEN? 00312000
  317. BNE REXWHA YEP 00313000
  318. TM REXLOCKS+8,X'40' WAS CONSOLE RUNNING? 00314000
  319. BO REXNOIO NO - SKIP COMPLETION CHECK 00315000
  320. CLI REXCONSL,X'00' POSTED 00316000
  321. BE REXWAIT STILL RUNNING - WAIT 00317000
  322. OI REXLOCKS+8,X'40' MARK CONSOLE IDLE 00318000
  323. L R1,REXCONSL+PROGADDR-IOTABLE LOOK AT LAST I/O 00319000
  324. TM 0(R1),X'01' WAS IT A WRITE? 00320000
  325. BNO REXLINE NO - PROCESS INPUT LINE 00321000
  326. TM REXCONSL+ENDCSW+4-IOTABLE,ATTN ATTN ON WRITE? 00322000
  327. BO REXQUERY YES - STOP TYPING AND READ 00323000
  328. REXNOIO EQU * 00324000
  329. TM REXLOCKS+4,X'40' READ REQUESTED? 00325000
  330. BO REXQUERY YES - START THE READ 00326000
  331. SPACE 00327000
  332. REXOUTRY EQU * 00328000
  333. LA R1,REXOUT CONSOLE LINE BUFFER 00329000
  334. L R2,TLINKS GET LINK TABLE CHAIN ADDR 00330000
  335. LA R2,8(R2) GET MY LINK TABLE ENTRY 00331000
  336. L R15,TCOM GET COMMON ROUTINE ADDR 00332000
  337. L R15,GMSGREQ AND GET A LINE TO TYPE 00333000
  338. BALR R14,R15 GO UNSTACK A MSG 00334000
  339. LTR R15,R15 TEST RETURN CODE 00335000
  340. BZ REXTYPE START THE CONSOLE WRITE 00336000
  341. SPACE 00337000
  342. REXWAIT EQU * 00338000
  343. LA R1,REXLOCKS GET THE SYNCH LOCK LIST 00339000
  344. L R15,WAITREQ SYSTEM WAIT ROUTINE 00340000
  345. BALR R14,R15 GO WAIT 00341000
  346. B REXCYCLE AND GO TO TOP 00342000
  347. SPACE 1 00343000
  348. REXWHA EQU * 00344000
  349. XC ATTNLOCK(4),ATTNLOCK CLEAR THE SYNCH LOCK 00345000
  350. TM REXLOCKS+8,X'40' WAS THE CONSOLE RUNNING? 00346000
  351. BNO REXDEFER YES 00347000
  352. REXQUERY EQU * 00348000
  353. NI REXLOCKS+8,X'FF'-X'40' SET CONSOLE RUNNING 00349000
  354. LA R0,REXREAD ADDR OF CONSOLE READ PROG 00350000
  355. LA R1,REXCONSL ADDR OF CONSOLE I/O TABLE 00351000
  356. ST R0,PROGADDR STORE CCW INTO CAW 00352000
  357. XC IOSYNCH(4),IOSYNCH CLEAR SYNCH LOCK 00353000
  358. L R15,IOREQ SYSTEM I/O REQUEST ROUTINE 00354000
  359. BALR R14,R15 ISSUE THE I/O REQUEST 00355000
  360. B REXCYCLE AND CONTINUE 00356000
  361. SPACE 1 00357000
  362. REXDEFER EQU * 00358000
  363. OI REXLOCKS+4,X'40' SKIP ATTN FROM CONSOLE 00359000
  364. B REXCYCLE AND CONTINUE 00360000
  365. EJECT 00361000
  366. REXLINE EQU * 00362000
  367. TM REXCONSL+ENDCSW+4-IOTABLE,UE #CP COMMAND? @VA03114 00362400
  368. BO REXCYCLE YES, DO ANOTHER READ @VA03114 00362800
  369. LA R1,REXCONSL GET CONSOLE IOTABLE ADDR 00363000
  370. MVI REXREQ,X'03' INITIALIZE COUNT FOR NULL REQUEST 00364000
  371. MVI REXREQ+1,X'00' AND INIT CON FUNCT REQ CODE 00365000
  372. LH R2,REXREAD+6 INIT CCW READ CHAR COUNT 00366000
  373. SH R2,ENDCSW+6 NUMBER OF CHARS ACTUALLY READ 00367000
  374. BZ REXSET PASS NULL LINE ALONG TO CONSOLE FUNS 00368000
  375. LA R3,REXIN ADDR OF INPUT BUFFER 00369000
  376. LA R4,3(R2) ADD THREE FOR THE CONTROL BYTES 00370000
  377. STC R4,REXREQ AND SET THE COUNT IN THE REQUEST BUF 00371000
  378. MVI REXREQ+4,X'40' BLANK FIRST BYTE 00372000
  379. MVC REXREQ+5(L'REXREQ-5),REXREQ+4 BLANK REST OF BUF 00373000
  380. BCTR R2,0 BUMP CHAR CNT DOWN BY ONE 00374000
  381. EX R2,REXUPPER FORCE UPPER CASE 00375000
  382. EX R2,REXMOVER MOVE THE INPUT LINE TO REQ BUFFER 00376000
  383. REXSET EQU * 00377000
  384. XC REXTAKE(4),REXTAKE CLEAR ORIGIN TASK NAME 00378000
  385. BAL R14,REQXEQ RATTLE DOWN THROUGH THE REQ EXECUTOR 00379000
  386. NI REXLOCKS+4,X'FF'-X'40' NOW WATCH ATTNS 00380000
  387. B REXCYCLE AND CONTINUE 00381000
  388. SPACE 00382000
  389. REXUPPER OC 0(0,R3),REXREQ+4 EXECUTED TO FORCE UPPER CASE 00383000
  390. REXMOVER MVC REXREQ+4(0),0(R3) EXECUTED TO SET CONSOLE LINE REQ 00384000
  391. EJECT 00385000
  392. REXTYPE EQU * 00386000
  393. LA R1,REXOUT+10 GET THE START OF MESSAGE TEX @VA03279 00387100
  394. SR R2,R2 CLEAR R2 FOR IC 00388000
  395. IC R2,REXOUT GET LENGTH OF MSG 00389000
  396. SH R2,=H'8' ADJUST FOR LOCID @VA03279 00389100
  397. DIAG R1,R2,X'5C' EDIT THE MSG ACCORDING TO EMSG 00390000
  398. LTR R2,R2 ANYTHING TO WRITE? 00391000
  399. BZ REXOUTRY NO..TRY ANOTHER 00392000
  400. SPACE 00393000
  401. CLI REXCONSL+DEVCODE-IOTABLE,TYP3210 CONNECTED? 00394000
  402. BE REXCONON YEP - USE IT 00395000
  403. CLI DMTREXID,C' ' ANY MSG ID? 00396000
  404. BE REXCYCLE NOPE - THROW MSG AWAY 00397000
  405. BCTR R2,0 DECREMENT COUNT ONE 00398000
  406. EX R2,REXLJUST LEFT JUSTIFY MSG TEXT 00399000
  407. LA R2,L'REXMSG+1(R2) TOTAL VM/370 CMD LENGTH 00400000
  408. LA R1,REXMSG START ADDR OF VM/370 CMD 00401000
  409. BAL R14,DMTREXHC GIVE IT TO VM/370 00402000
  410. * 00403000
  411. * IGNORE REJECTS FOR NOW 00404000
  412. * 00405000
  413. B REXCYCLE LOOK FOR MORE TO DO 00406000
  414. SPACE 00407000
  415. REXCONON EQU * 00408000
  416. NI REXLOCKS+8,X'FF'-X'40' RESET CONSOLE RUNNING 00409000
  417. STH R2,REXWRITE+6 STORE COUNT IN CCW 00410000
  418. STCM R1,B'0111',REXWRITE+1 AND THE ADDR 00411000
  419. LA R0,REXWRITE R0=ADDR OF REPLY OUT CHAN PROG 00412000
  420. LA R1,REXCONSL R1 = ADDRESS OF CONSOLE I/O TABLE 00413000
  421. ST R0,PROGADDR SET REPLY PROG ADDR IN CON I/O TABLE 00414000
  422. XC IOSYNCH(4),IOSYNCH CLEAR SYNCH LOCK FOR REPLY I/O 00415000
  423. L R15,IOREQ R15 = ENTRY FOR I/O SERVICE 00416000
  424. BALR R14,R15 DO THE CONSOLE OUTPUT 00417000
  425. B REXCYCLE GO TRY SOMETHING ELSE 00418000
  426. SPACE 00419000
  427. REXLJUST MVC REXOUT(0),0(1) EXECUTED TO LEFT JUSTIFY 00420000
  428. SPACE 3 00421000
  429. REXACCPT EQU * 00422000
  430. LR R0,R15 ERROR RET CODE --> POST CODE 00423000
  431. LA R1,REXTAKE R1 = TAKE TABLE ADDRESS 00424000
  432. L R15,TAKEREQ R15 = ENTRY FOR REQUEST TAKE SERVICE 00425000
  433. BALR R14,R15 RESP TO LAST REQ, TAKE ANOTHER 00426000
  434. SRA R15,3 CHECK RETURN CODE FOR A NEW REQUEST 00427000
  435. BNZ REXCYCLE NO REQ LEFT-GO LOOK AT THE CONSOLE 00428000
  436. BAL R14,REQXEQ GO DIRECTLY TO EXECUTE THE TAKEN REQ 00429000
  437. B REXACCPT RESPOND AND TRY TO TAKE ANOTHER 00430000
  438. EJECT 00431000
  439. * 00432000
  440. * ASYNCHRONOUS CONSOLE INTERRUPT ROUTINE 00433000
  441. * 00434000
  442. REXASYN EQU * 00435000
  443. TM CSW+4,X'80' IS ATTENTION STATUS SET? 00436000
  444. BCR 14,R14 (BNO) FAST RETURN TO DISPATCH IF NOT 00437000
  445. L R12,TASKSAVE-TASKE(R13) RESET REX BASE REGISTER 00438000
  446. SPACE 00439000
  447. CLI REXCONSL+DEVCODE-IOTABLE,TYP3210 DISCONNECTED? 00440000
  448. BNE REXASYHI YEP - RECONNECT TIME 00441000
  449. REXASYNA SR R0,R0 CLEAR CODE REGISTER FOR POST @VA04494 00442100
  450. LA R1,ATTNLOCK R1=ADDR OF CONSOLE ATTN SYN LOCK 00443000
  451. L R15,POSTREQ R15 = ENTRY ADDRESS FOR POST ROUTINE 00444000
  452. BR R15 POST THE ATTN SYN LOCK AND RET 00445000
  453. SPACE 00446000
  454. REXASYHI EQU * 00447000
  455. MVI REXCONSL+DEVCODE-IOTABLE,TYP3210 RECONNECT 00448000
  456. B REXASYNA OK TO READ NOW @VA04494 00449100
  457. EJECT 00450000
  458. *. 00451000
  459. * 00452000
  460. * ENTRY NAME - 00453000
  461. * 00454000
  462. * REXPCHEK 00455000
  463. * 00456000
  464. * FUNCTION - 00457000
  465. * 00458000
  466. * PROGRAM CHECK HANDLER 00459000
  467. * 00460000
  468. * CALLS TO OTHER ROUTINES - 00461000
  469. * 00462000
  470. * DMTDSP - EXIT TO DISPATCHER 00463000
  471. * DMTPST - TO POST THE PROGRAM CHECK SYNCH LOCK 00464000
  472. * 00465000
  473. * OPERATION - 00466000
  474. * 00467000
  475. * 1. SCAN FOR PGAM CHECK FLAG IN EACH LINK TABLE 00468000
  476. * ENTRY. 00469000
  477. * 00470000
  478. * 2. IF FOUND, DUMP MAIN STORAGE. 00471000
  479. * 00472000
  480. * 3. AND DEACTIVATE THE LINK 00473000
  481. * 00474000
  482. * RESPONSES - 00475000
  483. * 00476000
  484. * NONE 00477000
  485. * 00478000
  486. * ERROR MESSAGES - 00479000
  487. * 00480000
  488. * NONE 00481000
  489. * 00482000
  490. *. 00483000
  491. SPACE 00484000
  492. REXPCHEK EQU * 00485000
  493. XC PROGLOCK(4),PROGLOCK CLEAR THE PROG CHEK SYN LOCK 00486000
  494. L R2,TLINKS SET UP FOR LINK SCAN 00487000
  495. L R3,0(R2) TOTAL LINK COUNT 00488000
  496. BCTR R3,0 SKIP LOCAL ENTRY 00489000
  497. LTR R3,R3 ANY MORE DEFINED? 00490000
  498. BNP REXCYCLE NOPE - WHA...? 00491000
  499. LA R2,8(R2) SET START AT FIRST NON-LOCAL 00492000
  500. REXPLTAB EQU * 00493000
  501. LA R2,LINKLEN(R2) BUMP TO NEXT LINK TABL 00494000
  502. TM LFLAG,LACTIVE+LHALT FORCE THIS ONE? 00495000
  503. BO REXPFORC YEP - GO TO IT 00496000
  504. REXPNEXT EQU * 00497000
  505. BCT R3,REXPLTAB DO ANOTHER 00498000
  506. B REXCYCLE AND QUIT WHEN AT END 00499000
  507. EJECT 00500000
  508. REXPFORC EQU * 00501000
  509. NI LFLAG,X'FF'-LHALT RESET FORCE FLAG 00502000
  510. SPACE 00503000
  511. USING TASKE,R4 TASK ELEMENT ADDRESSABILITY 00504000
  512. SPACE 00505000
  513. LA R4,TASKQ INITIALIZE FOR TASK SCAN 00506000
  514. REXPTEL EQU * 00507000
  515. ICM R4,B'1111',TASKNEXT GO TO NEXT TASK ELM 00508000
  516. BZ REXPTMIS DIDN'T FIND IT 00509000
  517. CLC TASKNAME(4),LACTTNME IS THIS IT? 00510000
  518. BNE REXPTEL NOPE - TRY NEXT 00511000
  519. SPACE 00512000
  520. * 00513000
  521. * TASK ELEMENT TO BE FORCED ADDRESSED BY REG.4 00514000
  522. * 00515000
  523. STM R2,R3,REXCSAVE SAVE LINK TABLE SCAN 00516000
  524. SPACE 00517000
  525. SPACE 00521000
  526. MVI REXREQ+1,X'F3' PROG CHECK TERMINATE REQ CODE 00522000
  527. L R2,REXCSAVE RESTORE LINK TABLE POINTER 00523000
  528. MVC REXTAKE(4),LACTTNME SET TASK NAME FOR TERM 00524000
  529. BAL R14,REQXEQ DO THE TERMINATE 00525000
  530. SPACE 00526000
  531. LM R2,R3,REXCSAVE RESTORE LINK TABLE SCAN 00527000
  532. B REXPNEXT AND BACK FOR MORE 00528000
  533. SPACE 00529000
  534. REXPTMIS EQU * 00530000
  535. BAL R14,DEACT NO MATCHING TASK ...? 00531000
  536. B REXPNEXT TRY ANOTHER 00532000
  537. EJECT 00533000
  538. * 00534000
  539. * PROGRAM CHECK ASYNCHRONOUS EXIT ROUTINE 00535000
  540. * 00536000
  541. SPACE 00537000
  542. REXOUCH EQU * 00538000
  543. STM R12,R13,SSAVE TEMP SAVE 00539000
  544. L R12,NEWPROG+4 A(REXOUCH) 00540000
  545. LA R13,REXOUCH-DMTREX REXOUCH DISPLACEMENT 00541000
  546. SLR R12,R13 RESTORE REX BASE REG 00542000
  547. SPACE 00543000
  548. MVC NEWPROG(8),REXBOMBR TURN OFF PROG CHECKS 00544000
  549. SPACE 00545000
  550. STM R0,R15,REXEPTAF SAVE PROGRAM CHECK REGS @VM01109 00545300
  551. MVC REXEPTAF+4*R12(2*4),SSAVE CORRECT R12 & R13 @VM01109 00545500
  552. LA R1,REXDUMPR GET START OF DUMP MSG @VA04352 00545510
  553. LA R2,L'REXDUMPR AND THE LENGTH @VA04352 00545520
  554. BAL R14,DMTREXHC AND WRITE TO CP @VA04352 00545530
  555. LA R1,REXDUMPC GET DUMP CLOSE REQ @VA08751 00545540
  556. LA R2,L'REXDUMPC GET LENGTH OF REQ @VA08751 00545550
  557. BAL R14,DMTREXHC ISSUE DIAGNOSE FOR CP CL@VA08751 00545560
  558. SPACE 1 @VM01109 00545700
  559. CLI ACTIVE,X'00' RUNNING DISPATCHED? 00546000
  560. BE REXDIE NOPE - FORGET IT 00547000
  561. L R13,ACTIVE EXECUTING TASK ELEMENT 00548000
  562. L R13,TASKSAVE-TASKE(R13) EXECUTING TASK SAVE AREA 00549000
  563. SPACE 00550000
  564. USING TAREA,R13 TEMP ADDRESSABILITY 00551000
  565. SPACE 00552000
  566. MVC TPSW(8),OLDPROG SAVE HIS INTERRUPTED PSW 00553000
  567. MVC TGREG0(4*16),REXEPTAF AND REGISTER CONTENTS @VM01109 00554500
  568. MVI ACTIVE,X'00' AND MARK US UNDISPATCHED 00556000
  569. DROP R13 00557000
  570. SPACE 00558000
  571. L R4,ACTIVE SET TASK ELEMENT REG 00559000
  572. L R2,TLINKS INITIALIZE FOR LINK TABL SCAN 00560000
  573. L R3,0(R2) COUNT OF LINK TABLES 00561000
  574. LA R2,8(R2) START OF LINK TABLES 00562000
  575. BCTR R3,0 SKIP LOCAL LINK TABLE 00563000
  576. LTR R3,R3 ANY LEFT? 00564000
  577. BZ REXDIE NOPE - PROG CHECK IN SUP 00565000
  578. REXONEXT EQU * 00566000
  579. LA R2,LINKLEN(R2) TO NEXT TABLE ENTRY 00567000
  580. CLC LACTTNME(4),TASKNAME IS THIS THE LINK? 00568000
  581. BE REXHALT YEP - DEACTIVATE HIM 00569000
  582. BCT R3,REXONEXT KEEP LOOKING 00570000
  583. SPACE 00571000
  584. * 00572000
  585. * NO MATCH FOUND - MUST BE PROG CHECK IN REX, AXS, OR LAX 00573000
  586. * 00574000
  587. REXDIE EQU * 00575000
  588. LA R4,TASKQ INITIALIZE FOR FINAL TASK SCAN 00576000
  589. REXDTEL EQU * 00577000
  590. ICM R4,B'1111',TASKNEXT TO NEXT TASK ELEMENT 00578000
  591. BZ REXDQUIT READY FOR FINAL DISPATCH 00579000
  592. OI TASKSTAT,LIMBO STOP DISPATCHING 00580000
  593. CLC TASKNAME(4),REXREX IS THIS REX? 00581000
  594. BNE REXDTEL NOPE - DO NEXT 00582000
  595. TM TASKSTAT,WAITING+LOCKLIST WAITING ON SINGLE? 00583000
  596. BNM REXDRSET NOPE - NO NEED TO CLEAR 00584000
  597. L R1,REXREG1 ADDR OF SOLE SYNCH LOCK 00585000
  598. XC 1(3,R1),1(R1) CLEAR LINK TABLE ADDR 00586000
  599. EJECT 00587000
  600. REXDRSET EQU * 00588000
  601. NI TASKSTAT,X'FF'-WAITING-LIMBO SET FOR DISPCH 00589000
  602. B REXDTEL AND SCAN ANOTHER TASK 00590000
  603. SPACE 00591000
  604. REXDQUIT EQU * 00592000
  605. MVC REXSTOPD(8+16*4),DMTREX SAVE REX IRRPTED STAT @VM01109 00593010
  606. ST R12,REXREG12 SET BASE REG 00594000
  607. LA R1,REXPTERM TERMINATE ROUTINE ENTRY 00595000
  608. ST R1,REXPSW+4 SET MYSTERIOUS BRANCH 00596000
  609. L R15,DISPATCH DISPATCHER ENTRY 00597000
  610. BALR R14,R15 DISPATCH REX 00598000
  611. SPACE 00599000
  612. REXHALT EQU * 00600000
  613. OI TASKSTAT,LIMBO SET TASK UNDISPATCHABLE 00601000
  614. OI LFLAG,LHALT AND LINK TO BE FORCED 00602000
  615. CLI PROGLOCK,X'00' PROGCHEK SYNLOCK POSTED? 00603000
  616. BNE REXHEXIT YEP - NO NEED TO POST AGAIN 00604000
  617. SR R0,R0 SET POST CODE TO 0 00605000
  618. LA R1,PROGLOCK ADDR OF PROGCHEK SYNLOCK 00606000
  619. L R15,POSTREQ ENTRY FOR POST SERVICE 00607000
  620. BALR R14,R15 TELL REX ABOUT PROG CHECK 00608000
  621. REXHEXIT EQU * 00609000
  622. MVC NEWPROG(8),REXPROG ALLOW MORE PROGRAM CHECKS 00610000
  623. L R15,DISPATCH DISPATCHER ENTRY POINT 00611000
  624. BALR R14,R15 RESTART NORMAL OPERATION 00612000
  625. SPACE 00613000
  626. DROP R4 00614000
  627. EJECT 00615000
  628. *. 00616000
  629. * 00617000
  630. * ENTRY NAME - 00618000
  631. * 00619000
  632. * REXITERM 00620000
  633. * 00621000
  634. * FUNCTION - 00622000
  635. * 00623000
  636. * THIS ROUTINE IS ENTERED WHEN THE INITIALIZATION OF RSCS 00624000
  637. * FAILS 00625000
  638. * 00626000
  639. * CALLS TO OTHER ROUTINES - 00627000
  640. * 00628000
  641. * GMSGREQ - TO UNSTACK A MESSAGE BUFFER 00629000
  642. * DMTWAT - TO WAIT FOR COMPLETION OF A MSG WRITE 00630000
  643. * 00631000
  644. * OPERATION - 00632000
  645. * 00633000
  646. * 1. ISSUE INITIALIZATION FAILURE MSG 00634000
  647. * 00635000
  648. * 2. DUMP CONTENTS OF MAIN STORAGE 00636000
  649. * 00637000
  650. * 3. TYPE ANY REMAINING MESSAGES 00638000
  651. * 00639000
  652. * 4. LOAD DIABLED WAIT PSW 00640000
  653. * 00641000
  654. * RESPONSES - 00642000
  655. * 00643000
  656. * NONE 00644000
  657. * 00645000
  658. * ERROR MESSAGES - 00646000
  659. * 00647000
  660. * DMTREX090T PROGRAM CHECK IN SUPERVISOR -- RSS SHUTDOWN 00648000
  661. * DMTREX091T INITIALIZATION FIALURE -- RSS SHUTDOWN 00649000
  662. * 00650000
  663. *. 00651000
  664. SPACE 2 00652000
  665. REXITERM DC 0H'0' 00653000
  666. MVC LACTTNME(4),REXREX MOVE IN TASKNAME 00654000
  667. STM R0,R15,REXEPTAF SAVE REGISTERS @VM01109 00655010
  668. MSG 091 TELL OF DISTRESS 00656000
  669. B REXSHUT TERMINATE RSCS PROCESSING 00657000
  670. EJECT 00658000
  671. REXPTERM EQU * 00659000
  672. MSG 090 FATAL PROGRAM CHECK MSG 00660000
  673. SPACE 00661000
  674. REXSHUT EQU * 00662000
  675. EJECT 00666000
  676. * 00667000
  677. * TYPE THE REMAINING MESSAGES 00668000
  678. * 00669000
  679. TM REXLOCKS+8,X'40' CONSOLE RUNNING? 00670000
  680. LA R1,REXCONSL GET THE CONSOLE 00671000
  681. BNO REXSWAIT YEP - WAIT 00672000
  682. REXFLUSH EQU * 00673000
  683. LA R1,REXOUT ADDR OF MSG LINE BUFFER 00674000
  684. L R2,TLINKS GET MY LINK TABLE ENTRY 00675000
  685. LA R2,8(R2) REALLY START HERE 00676000
  686. L R15,TCOM GET COMMON ENTRY VECTOR 00677000
  687. L R15,GMSGREQ AND THE MSG DECHAIN ROUTINE ADDR 00678000
  688. BALR R14,R15 AND TRY TO GET A MESSAGE 00679000
  689. LTR R15,R15 GET ANY? 00680000
  690. BNZ REXHANG NO 00681000
  691. SPACE 00682000
  692. LA R1,REXOUT+2 ADDR OF START OF MSG 00683000
  693. SR R2,R2 CLEAR FOR IC 00684000
  694. IC R2,REXOUT MSG CHAR COUNT 00685000
  695. DIAG R1,R2,X'5C' EDIT MSG A LA EMSG 00686000
  696. LTR R2,R2 ANY COUNT LEFT? 00687000
  697. BZ REXFLUSH NOPE - TRY ANOTHER 00688000
  698. SPACE 00689000
  699. CLI REXCONSL+DEVCODE-IOTABLE,TYP3210 CONNECTED? 00690000
  700. BE REXFCONF YES - WRITE IT 00691000
  701. CLI DMTREXID,C' ' ANY ID FOR MSG? 00692000
  702. BE REXHANG NOPE - QUIT NOW 00693000
  703. BCTR R2,0 DECREMENT COUNT 00694000
  704. EX R2,REXLJUST LEFT JUSTIFY MSG TEXT 00695000
  705. LA R2,L'REXMSG+1(R2) TOTAL VM/370 CMD LEN 00696000
  706. LA R1,REXMSG START ADDR OF VM/370 CMD 00697000
  707. BAL R14,DMTREXHC GIVE IT TO VM/370 00698000
  708. B REXFLUSH AND FLUSH SOME MORE 00699000
  709. SPACE 00700000
  710. REXFCONF EQU * 00701000
  711. SH R2,=H'8' UPDATE COUNT FOR LOCID @VA03279 00701100
  712. LA R1,8(R1) AND THE START OF MSG FOR LOC @VA03279 00701200
  713. STH R2,REXWRITE+6 SET THE COUNT 00702000
  714. STCM R1,B'0111',REXWRITE+1 AND THE ADDR 00703000
  715. LA R1,REXCONSL GET THE CONSOLE IOTABLE 00704000
  716. USING IOTABLE,R1 GET IOTABLE ADDRESSABILITY 00705000
  717. LA R0,REXWRITE CONSOLE WRITE CCW ADDR 00706000
  718. ST R0,PROGADDR STORE IN THE IOTABLE CAW 00707000
  719. XC IOSYNCH(4),IOSYNCH CLEAR THE SYNCH LOCK 00708000
  720. L R15,IOREQ GET THE SYSTEM I/O EXECUTATOR 00709000
  721. BALR R14,R15 AND ISSUE THE I/O 00710000
  722. REXSWAIT EQU * 00711000
  723. L R15,WAITREQ SYSTEM WAIT ROUTINE 00712000
  724. BALR R14,R15 GO WAIT 00713000
  725. B REXFLUSH AND CONTINUE 00714000
  726. SPACE 00715000
  727. REXHANG EQU * 00716000
  728. LPSW REXBOMBR ALL OVER WITH 00717000
  729. EJECT 00718000
  730. *---------------------------------------------------------------------* 00719000
  731. * * 00720000
  732. * REX MONITOR CONTROL AREA * 00721000
  733. * * 00722000
  734. *---------------------------------------------------------------------* 00723000
  735. SPACE 2 00724000
  736. REXREX DC 0F'0',CL4'REX ' TASK NAME 00725000
  737. REXAXS DC 0F'0',CL8'DMTAXS' AXSNAME 00726000
  738. REXLAX DC 0F'0',CL8'DMTLAX' LAXNAME 00727000
  739. SPACE 00728000
  740. REXTVECT DC 0F'0' 00729000
  741. DC V(DMTSYSLK) LINK TABLE CHAIN 00730000
  742. DC V(DMTSYSRT) ROUTE TABLE CHAIN 00731000
  743. DC V(DMTSYSPT) SWITCHABLE PORT CHAIN 00732000
  744. DC V(DMTSYSTQ) TAG SLOT QUEUE 00733000
  745. DC V(DMTCOMVC) COMMON ROUTINE VECTOR 00734000
  746. SPACE 00735000
  747. REXEND DC V(DMTSYSND) END OF REX INITIAL LOAD 00736000
  748. SPACE 3 00737000
  749. REXLOCKS DC 0F'0' MAIN REX WAIT LIST 00738000
  750. DC X'00',AL3(REQLOCK) REQ ARRVL SYN LOCK ADDR 00739000
  751. DC X'00',AL3(ATTNLOCK) CONS ATTN SYN LOCK ADDR 00740000
  752. DC X'40',AL3(REXCONSL) CONS I/O SYN LOCK ADDR 00741000
  753. DC X'80',AL3(PROGLOCK) PROG CHEK SYN LOCK ADDR 00742000
  754. EJECT 00743000
  755. ATTNLOCK DC 0F'0',X'00',AL3(0) CONS ATTNLOCK LOCK 00744000
  756. SPACE 00745000
  757. REXCONSL DC F'0' SYNCHRONIZATION LOCK FOR I/O OPERATION 00746000
  758. DC AL2(CONSADDR) CUU CONSOLE DEVICE ADDRESS 00747000
  759. DC AL1(1) ONE BYTE REQUESTED ON UNIT CHECK 00748000
  760. DC AL1(TYP3210) CONSOLE DEVICE TYPE CODE 00749000
  761. DC A(0) CHANNEL PROGRAM ADDRESS TO BE FILLED IN 00750000
  762. DC 2F'0' SIO COND CODE AND ENDING CSW RETURN INFORMATION 00751000
  763. DC X'00' SENSE RETURN INFORMATION ON UNIT CHECK 00752000
  764. DC 3X'00' UNUSED 00753000
  765. DMTREXCN EQU REXCONSL EXTERNAL NAME 00754000
  766. SPACE 00755000
  767. CONSADDR EQU X'009' DEFAULT CONSOLE CUU 00756000
  768. SPACE 2 00757000
  769. REXREAD CCW X'0A',REXIN,SILI,L'REXIN READ OPERATOR RESPONSE 00758000
  770. REXWRITE CCW X'09',REXOUT+2,SILI,0 TYPE A CONS MSG 00759000
  771. SPACE 2 00760000
  772. REXIN DC CL130' ' CONS INPUT BUFFER 00761000
  773. SPACE 00762000
  774. REXMSG DC CL11'M OP' MSG COMMAND START 00763000
  775. DMTREXID EQU REXMSG+2 XFER USER ID 00764000
  776. REXOUT DC CL130' ' OUTPUT BUFFER 00765000
  777. EJECT 00766000
  778. REXTAKE DC 0F'0' REQUEST TAKE TABLE 00767000
  779. DC CL4' ' SENDING TASK NAME FILLED IN BY TAKE MANAGER 00768000
  780. DC AL1(L'REXREQ),AL3(REXREQ) ADDR AND LENGTH OF REQ BUFFER 00769000
  781. DC A(REXRESP) ADDRESS OF RESPONSE BUFFER 00770000
  782. SPACE 2 00771000
  783. REXREQ DC XL140'00' TAKE REQUEST BUFFER 00772000
  784. SPACE 00773000
  785. REXRESP DC AL1(0) NEVER ANY RESPONSE MESSAGES 00774000
  786. SPACE 3 00775000
  787. REXCSAVE DC 18F'0' COMMON SAVE AREA ADDR 00776000
  788. SPACE 3 00777000
  789. PROGLOCK DC 0F'0',X'00',AL3(0) PROGRAM CHECK SYNCH LOCK 00778000
  790. SPACE 2 00779000
  791. REXPROG DC 0D'0',X'00040000',A(REXOUCH) NORMAL PROG NEW 00780000
  792. REXBOMBR DC 0D'0',X'00020000',A(X'001') HANG UP PSW @VM01136 00781010
  793. SPACE 2 00782000
  794. REXTOEBC DC C'0123456789ABCDEF' TRANS HEX TO EBCDIC 00783000
  795. SPACE 00784000
  796. REXDUMPR DC C'DU 000000-000FFF' VM/370 DUMP COMMAND 00785000
  797. REXDUMPC DC C'CL PRINTER' VM/370 CL PRT REQUEST @VA08751 00785100
  798. SPACE 2 00786000
  799. REXWORK DC 2F'0' FOR NUMBER CONVERSION 00787000
  800. EJECT 00790000
  801. *. 00791000
  802. * 00792000
  803. * ENTRY NAME - 00793000
  804. * 00794000
  805. * REQXEQ 00795000
  806. * 00796000
  807. * FUNCTION - 00797000
  808. * 00798000
  809. * 00799000
  810. * THIS ROUTINE SCANS THE FUNCTION TABLE AND CALLS THE 00800000
  811. * APPROPRIATE ROUTINE BASED ON THAT CODE. 00801000
  812. * 00802000
  813. * CALLS TO OTHER ROUTINES - 00803000
  814. * 00804000
  815. * DMTCMX - FOR CODE X'00' - COMMAND 00805000
  816. * DMTMGX - FOR CODE X'02' - MESSAGE 00806000
  817. * 00807000
  818. * OPERATION - 00808000
  819. * 00809000
  820. * 1. SCAN THE REQUEST TABLE FOR A MATCH 00810000
  821. * 00811000
  822. * 2. CALL THE ROUTINE SPECIFIED WHEN A MATCH IS FOUND 00812000
  823. * 00813000
  824. * RESPONSES - 00814000
  825. * 00815000
  826. * NONE 00816000
  827. * 00817000
  828. * ERROR MESSAGES - 00818000
  829. * 00819000
  830. * NONE 00820000
  831. * 00821000
  832. *. 00822000
  833. SPACE 00823000
  834. REQXEQ DC 0H'0' 00824000
  835. LM R3,R5,REQSETUP SET REGS FOR REQUEST TABLE SCAN 00825000
  836. REQSCAN EQU * 00826000
  837. CLC 0(1,R3),REXREQ+1 DOES THE TABLE ENTRY MATCH THE REQ CODE 00827000
  838. BE REQCALL YEP - GO EXIT TO THE INDICATED EXECUTOR ROUTINE 00828000
  839. BXLE R3,R4,REQSCAN OTHERWISE SCAN TO THE END OF THE TABLE 00829000
  840. SPACE 00830000
  841. LA R15,REQNOHIT R15 = ERROR CODE FOR NO CODE MATCH 00831000
  842. BR R14 RETURN TO CALLER 00832000
  843. SPACE 00833000
  844. REQCALL EQU * 00834000
  845. MVI REXRESP,X'00' INITIALIZE THE RESPONSE COUNT TO ZERO 00835000
  846. LM R0,R1,REXTAKE PASS SENDING TASK NAME AND REQ BUFF ADDR 00836000
  847. L R15,0(R3) R15 = ENTRY ADDRESS FOR INDICATED EXECUTOR 00837000
  848. BR R15 GO TO EXECUTOR WITH R14 AS SET BY CALLER 00838000
  849. EJECT 00839000
  850. *---------------------------------------------------------------------* 00840000
  851. * * 00841000
  852. * REQUEST EXECUTION CONTROL AREA * 00842000
  853. * * 00843000
  854. *---------------------------------------------------------------------* 00844000
  855. SPACE 00845000
  856. REQSETUP DC A(REQTABLE) 00846000
  857. DC A(REQINC) 00847000
  858. DC A(REQEND-REQINC) 00848000
  859. SPACE 00849000
  860. REQINC EQU 4 LENGTH OF A TABLE ENTRY 00850000
  861. SPACE 00851000
  862. REQTABLE DC 0F'0' 00852000
  863. DC X'00',VL3(DMTCMX) CODE X'00' => CONSOLE FUNCTION 00853000
  864. DC X'02',VL3(DMTMGX) CODE X'02' => MESSAGE REQUEST 00854000
  865. DC X'03',AL3(TERMINAT) CODE X'03' => TERMINATE REQUEST 00855000
  866. DC X'F3',AL3(TERMINAT) CODE X'F3' => PROG CHECK TERMINATE 00856000
  867. REQEND EQU * 00857000
  868. SPACE 00858000
  869. REQNOHIT EQU X'FF' ERROR (POST) CODE FOR CODE NOT FOUND 00859000
  870. EJECT 00860000
  871. *. 00861000
  872. * 00862000
  873. * ENTRY NAME - 00863000
  874. * 00864000
  875. * DEACT 00865000
  876. * 00866000
  877. * FUNCTION - 00867000
  878. * 00868000
  879. * DEACTIVATE LINK TABLE ENTRY 00869000
  880. * 00870000
  881. * CALLS TO OTHER ROUTINES - 00871000
  882. * 00872000
  883. * NONE 00873000
  884. * 00874000
  885. * ENTRY: 00875000
  886. * 00876000
  887. * R2 = ADDR OF LINK TABLE TO BE DEACTIVATED 00877000
  888. * R14 = RETURN ADDRESS 00878000
  889. * 00879000
  890. * OPERATION - 00880000
  891. * 00881000
  892. * 1. FREE ASSOCIATED PORT FOR THIS LINKID 00882000
  893. * 00883000
  894. * 2. MARK LINK NOT ACTIVE AND CLEAR ACTIVE TASK NAME 00884000
  895. * 00885000
  896. * 00886000
  897. * RESPONSES - 00887000
  898. * 00888000
  899. * NONE 00889000
  900. * 00890000
  901. * ERROR MESSAGES - 00891000
  902. * 00892000
  903. * NONE 00893000
  904. * 00894000
  905. *. 00895000
  906. SPACE 00896000
  907. DEACT DC 0H'0' 00897000
  908. STM R14,R15,REXWORK SAVE REGS TO BE USED 00898000
  909. L R14,TPORTS START OF PORT TABLE 00899000
  910. ICM R15,B'1111',0(R14) COUNT OF ENTRIES 00900000
  911. BZ DEALFREE NO ENTRIES - NO WORK 00901000
  912. LA R14,8(R14) FIRST ENTRY 00902000
  913. OI LACTLINE,X'F0' MARK AS IF ACTIVE ENTRY 00903000
  914. DEAFRENX EQU * 00904000
  915. CLC LACTLINE(2),0(R14) IS THIS THE ONE? 00905000
  916. BE DEAFREGT FOUND IT 00906000
  917. LA R14,2(R14) NEXT ENTRY 00907000
  918. BCT R15,DEAFRENX TRY IT 00908000
  919. EJECT 00909000
  920. * 00910000
  921. * ENTRY NOT FOUND 00911000
  922. * 00912000
  923. SPACE 00913000
  924. DEALFREE EQU * 00914000
  925. L R14,TLINKS ADDR OF START OF LINK TABLES 00915000
  926. LH R15,6(R14) COUNT OF CURRENT ACTIVE LINKS 00916000
  927. BCTR R15,0 ONE LESS THAN BEFORE 00917000
  928. LTR R15,R15 IS NUMBER NOW NEGATIVE 00918000
  929. BNM DEASTOW NO - USE IT AS IS 00919000
  930. SLR R15,R15 MINIMUM ACTIVE LINKS IS ZERO 00920000
  931. DEASTOW EQU * 00921000
  932. STH R15,6(R14) SET NEW ACTIVE COUNT 00922000
  933. SPACE 00923000
  934. NI LFLAG,X'FF'-LACTIVE MARK LINK TABLE ENTRY INACTIVE 00924000
  935. XC LMSGQ(4),LMSGQ CLEAR ANY PENDING MESSAGES @VA03645 00924100
  936. XC LACTTNME(4),LACTTNME ALSO CLEAR ACTIVE TASK NAME 00925000
  937. SPACE 00926000
  938. LM R14,R15,REXWORK RESTORE CALLER'S REGS 00927000
  939. BR R14 AND RETURN TO HIM 00928000
  940. SPACE 2 00929000
  941. DEAFREGT EQU * 00930000
  942. NI 0(R14),X'0F' SET ENTRY FREE 00931000
  943. B DEALFREE AND DECREMENT ACTIVE 00932000
  944. EJECT 00933000
  945. *. 00934000
  946. * 00935000
  947. * ENTRY NAME - 00936000
  948. * 00937000
  949. * MSG 00938000
  950. * 00939000
  951. * FUNCTION - 00940000
  952. * 00941000
  953. * MESSAGE WRITE SUBROUTINE 00942000
  954. * 00943000
  955. * CALLS TO OTHER ROUTINES - 00944000
  956. * 00945000
  957. * DMTMGX - TO WRITE MESSAGE 00946000
  958. * 00947000
  959. * OPERATION - 00948000
  960. * 00949000
  961. * 1. CONTRUCT PARAMETER LIST 00950000
  962. * 00951000
  963. * 2. ISSUE CALL TO DMTMGX TO WRITE MESSAGE 00952000
  964. * 00953000
  965. * RESPONSES - 00954000
  966. * 00955000
  967. * NONE 00956000
  968. * 00957000
  969. * ERROR MESSAGES - 00958000
  970. * 00959000
  971. * NONE 00960000
  972. * 00961000
  973. *. 00962000
  974. SPACE 1 00963000
  975. MSG EQU * 00964000
  976. STM R14,R2,MSGSAVE SAVE REGISTERS 00965000
  977. LTR R2,R0 ANYTHING SPECIFIED? 00966000
  978. BNP MSGEXIT NO 00967000
  979. BCTR R2,0 REDUCE COUNT BY ONE 00968000
  980. EX R2,MSGRFILL MOVE VARIABLE FIELD TO MSG REQ 00969000
  981. LA R2,MSGRHLEN(R2) GET MSG LENGTH 00970000
  982. STC R2,MSGREQ AND STORE IN REQ 00971000
  983. LA R1,MSGREQ GET THE MSG REQ ADDR 00972000
  984. L R15,=V(DMTMGX) MSG MANAGER ADDR 00973000
  985. BALR R14,R15 AND WRITE THE MSG 00974000
  986. L R14,MSGSAVE RESTORE RETURN REGISTER 00975000
  987. MSGEXIT EQU * 00976000
  988. LM R0,R2,MSGSAVE+8 RESTORE OTHER REGISTERS 00977000
  989. BR R14 AND RETURN 00978000
  990. SPACE 00979000
  991. MSGRFILL MVC MSGRINFO(0),0(R1) TO BE EXECUTED FROM ABOVE 00980000
  992. SPACE 2 00981000
  993. MSGREQ DC 0F'0',AL1(0),X'02',AL1(0,0) CNT, CODE 00982000
  994. MSGRLINK DC CL8' ' LINKID 00983000
  995. MSGRVM DC CL8' ' RESPONSE VM 00984000
  996. MSGRMOD DC C'REX' MODULE NAME 00985000
  997. DC C' ' ACTION CODE 00986000
  998. MSGRINFO DC H'0',AL2(0) MSG NUMBER 00987000
  999. DC 7CL8' ' MAX NUMBER OF VARIABLE FIELDS 00988000
  1000. MSGRHLEN EQU MSGRINFO-MSGREQ HEADER LENGTH 00989000
  1001. SPACE 00990000
  1002. MSGSAVE DC 6F'0' SAVE AREA 00991000
  1003. EJECT 00992000
  1004. *---------------------------------------------------------------------* 00993000
  1005. * * 00994000
  1006. * HVC -- HYPERVISOR CALL SUBROUTINE * 00995000
  1007. * * 00996000
  1008. *---------------------------------------------------------------------* 00997000
  1009. SPACE 00998000
  1010. * ON ENTRY: R1 = ADDR OF CP CONSOLE COMMAND LINE 00999000
  1011. * R2 = TOTAL CHARACTER COUNT FOR THE COMMAND 01000000
  1012. * 01001000
  1013. * ON EXIT: R1 = UNMODIFIED 01002000
  1014. * R2 = RETURN CODE FROM CP 01003000
  1015. * R15 = NUMBER OF INVALID PARAMETER 01004000
  1016. * (SET ONLY WHEN INVALID PARAMETER SPECIFIED) 01005000
  1017. SPACE 01006000
  1018. DMTREXHC DC 0H'0' 01007000
  1019. DC X'83120008' DIAGNOSE INSTRUCTION ENTRY TO CP CONS FUNCT 01008000
  1020. BR R14 VERY SHORT ROUTINE 01009000
  1021. EJECT 01010000
  1022. *---------------------------------------------------------------------* 01011000
  1023. * * 01012000
  1024. * PARMGET -- LINE SCANNING SUBROUTINE * 01013000
  1025. * * 01014000
  1026. *---------------------------------------------------------------------* 01015000
  1027. SPACE 01016000
  1028. * ON ENTRY: R3 = ADDRESS OF START OF STRING 01017000
  1029. * R5 = ADDRESS OF END OF STRING 01018000
  1030. * 01019000
  1031. * ON EXIT: R3 = FIRST NONDELIMETER CHARACTER SCANNED; 01020000
  1032. * IF NONE FOUND, END OF STRING 01021000
  1033. * R4 = UNMODIFIED IF NO NONDELIMETER CHAR SCANNED; 01022000
  1034. * OTHERWISE, ADDRESS OF FIRST DELIMETER CHAR 01023000
  1035. * IF NONE, END OF STRING. 01024000
  1036. * R5 = UNMODIFIED 01025000
  1037. * 01026000
  1038. * A DELIMETER CHAR IS ANY CHARACTER OF THE FORM B'XX000000' 01027000
  1039. SPACE 01028000
  1040. PARMGET DC 0H'0' 01029000
  1041. LA R5,0(R5) CLEAR HIGH ORDER BYTE JUST IN CASE 01030000
  1042. BCTR R3,0 BUMP START OF STRING POINTER BACK FOR CONVENIENCE 01031000
  1043. PARMFIND EQU * 01032000
  1044. LA R3,1(R3) LOOK AT THE NEXT CHARACTER 01033000
  1045. CLR R3,R5 HAVE WE HIT THE END OF THE STRING? 01034000
  1046. BCR 11,R14 (BNL) YEP - LOOK NO MORE 01035000
  1047. TM 0(R3),X'3F' IS THIS CHARACTER A DELIMETER? 01036000
  1048. BZ PARMFIND YEP - KEEP LOOKING FOR A NONDELIMETER 01037000
  1049. LR R4,R3 OTHERWISE SET UP FOR NEXT PHASE OF SCAN 01038000
  1050. PARMSCAN EQU * 01039000
  1051. LA R4,1(R4) LOOK AT THE NEXT CHARACTER 01040000
  1052. CLR R4,R5 ARE WE AT THE END OF THE STRING YET? 01041000
  1053. BCR 11,R14 (BNL) RETURN IMMEDIATELY IF SO 01042000
  1054. TM 0(R4),X'3F' IS THIS CHARACTER A DELIMETER? 01043000
  1055. BNZ PARMSCAN KEEP SCANNING FOR A DELIMETER IF NOT 01044000
  1056. BR R14 OTHERWISE ALL DONE - RETURN 01045000
  1057. EJECT 01046000
  1058. *. 01047000
  1059. * 01048000
  1060. * ENTRY NAME - 01049000
  1061. * 01050000
  1062. * TERMINAT 01051000
  1063. * 01052000
  1064. * FUNCTION - 01053000
  1065. * 01054000
  1066. * TO TERMINATE A SPECIFIED TASK 01055000
  1067. * 01056000
  1068. * CALLS TO OTHER ROUTINES - 01057000
  1069. * 01058000
  1070. * DMTASK - TO TERMINATE THE SPECIFIED TASK 01059000
  1071. * DMTMGX - TO WRITE THE TERMINATION MSG 01060000
  1072. * 01061000
  1073. * OPERATION - 01062000
  1074. * 01063000
  1075. * 1. FIND THE LINK TABLE ENTRY FOR THE SPECIFIED 01064000
  1076. * TASK 01065000
  1077. * 01066000
  1078. * 2. REQUEST TASK TERMINATION, IF SUCCESSFUL RETURN 01067000
  1079. * 01068000
  1080. * 3. IF NOT SUCCESSFUL, MODIFY THE TASK TO POINT 01069000
  1081. * TO QUIESCE, TO ALLOW FOR I/O COMPLETION 01070000
  1082. * 01071000
  1083. * 4. DEACTIVATE THE LINK ENTRY 01072000
  1084. * 01073000
  1085. * 5. WRITE TERMINATION MSG 01074000
  1086. * 01075000
  1087. * RESPONSES - 01076000
  1088. * 01077000
  1089. * DMTREX002I LINK 'LINKID' DEACTIVATED 01078000
  1090. * 01079000
  1091. * ERROR MESSAGES - 01080000
  1092. * 01081000
  1093. * DMTREX080E PROGRAM CHECK -- LINK 'LINKID' DEACTIVATED 01082000
  1094. * 01083000
  1095. *. 01084000
  1096. SPACE 2 01085000
  1097. TERMINAT DC 0H'0' 01086000
  1098. STM R14,R3,TERSAVE SAVE REGISTERS 01087000
  1099. L R3,TLINKS START OF LINK TABLE CHAIN 01088000
  1100. LA R2,8(R3) FIRST LINK TABLE ENTRY 01089000
  1101. L R3,0(R3) NUMBER OF LINK TABLE ENTRIES 01090000
  1102. SPACE 01091000
  1103. TERLSCAN EQU * 01092000
  1104. TM LFLAG,LACTIVE IS THE LINK ACTIVE? 01093000
  1105. BNO TERSKIP NO - SKIP IT 01094000
  1106. CL R0,LACTTNME IS THIS THE ONE WE SEEK? 01095000
  1107. BE TERLHIT YES - DEACTIVATE IT 01096000
  1108. EJECT 01097000
  1109. TERSKIP EQU * 01098000
  1110. LA R2,LINKLEN(R2) BUMP TO NEXT LINK 01099000
  1111. BCT R3,TERLSCAN KEEP LOOKING FOR THE LINK 01100000
  1112. SPACE 01101000
  1113. * 01102000
  1114. * NONE FOUND - JUST TERMINATE THE TASK 01103000
  1115. * 01104000
  1116. EJECT 01105000
  1117. TERTKILL EQU * 01106000
  1118. * 01107000
  1119. * R0 CONTAINS NAME OF TASK TO BE TERMINATED 01108000
  1120. * 01109000
  1121. SR R1,R1 ZERO 01110000
  1122. BCTR R1,0 -1 TO SIGNAL TERMINATE REQ 01111000
  1123. L R15,TASKREQ GET SYSTEM TASK ROUTINE 01112000
  1124. BALR R14,R15 GO TERMINATE THE TASK 01113000
  1125. LTR R15,R15 DID IT WORK? 01114000
  1126. BZ TEREXIT YES - DONE 01115000
  1127. SRA R15,3 /8 AND TEST (RETURN CODE) 01116000
  1128. BNZ TEREXIT NO SUCH TASK FOUND 01117000
  1129. * 01118000
  1130. * TASK STILL HAS ACTIVE I/O - EXECUTION SUSPENDED 01119000
  1131. * 01120000
  1132. LA R3,TASKQ INITIALIZE TASK QUEUE ELEMENT POINTE 01121000
  1133. SPACE 01122000
  1134. USING TASKE,R3 GET TASK ELEMENT ADDRESSABILITY 01123000
  1135. SPACE 01124000
  1136. TERTSCAN EQU * 01125000
  1137. ICM R3,B'1111',TASKNEXT LOAD NEXT ELEMT AND TEST FOR END 01126000
  1138. BZ TEREXIT TASK NOT FOUND - EXIT 01127000
  1139. CL R0,TASKNAME IS THIS THE ONE? 01128000
  1140. BNE TERTSCAN LOOK THROUGH THE TASK QUEUE 01129000
  1141. * 01130000
  1142. * FOUND IT - TERMINATING TASK'S TABLE ADDR IS IN R3 01131000
  1143. * 01132000
  1144. L R1,TASKSAVE GET THIS TASKS SAVE AREA 01133000
  1145. SPACE 01134000
  1146. USING TAREA,R1 GET TASK SAVE AREA ADDRESSABILITY 01135000
  1147. SPACE 01136000
  1148. XC TPSW(4),TPSW MASK HIM OFF 01137000
  1149. LA R14,QUIESCE GET THE QUIESCE ROUT ADDR 01138000
  1150. ST R14,TPSW+4 RESUME ADDR = QUIESCE 01139000
  1151. ST R1,TASKNAME UNIQUE, UNPRINTABLE TASK NAME 01140000
  1152. ST R1,TGREG0 SAME TO QUIESCEE'S R0 01141000
  1153. ST R14,TGREG2 QUIESCEE'S BASE REG 01142000
  1154. MVC TGREG4+3(1),TASKID GIVE QUIESCEE TASK ID 01143000
  1155. LA R14,TGREG13 SET UP HANGUP SYNCH LOCK 01144000
  1156. ST R14,TGREG12 SET HANGUP SYNCH LOCK 01145000
  1157. XC TGREG13(4),TGREG13 SET HANGUP SYNCH LOCK 01146000
  1158. MVI TASKSTAT,X'00' RESTART QUIESCEE 01147000
  1159. TEREXIT EQU * 01148000
  1160. LM R14,R3,TERSAVE RESTORE REGISTERS 01149000
  1161. BR R14 AND RETURN 01150000
  1162. EJECT 01151000
  1163. TERLHIT EQU * 01152000
  1164. BAL R14,DEACT DEACTIVATE THE TABLE ENTRY 01153000
  1165. SPACE 01154000
  1166. LA R15,002 TERMINATE MSG CODE 01155000
  1167. CLI REXREQ+1,X'F3' PROGRAM CHECK TERMINATE? 01156000
  1168. BNE TERMSET NOPE - NORMAL MSG 01157000
  1169. LA R15,80 SET PROGCHEK TERM MSG CODE 01158000
  1170. TERMSET EQU * 01159000
  1171. STH R15,MSGRINFO SET IN REQ ELEMENT 01160000
  1172. MVC MSGRINFO+4(8),LINKID SET DEACTIVATED LINK ID 01161000
  1173. MVI MSGREQ,28+8-1 SET MSG REQ LENGTH 01162000
  1174. LA R1,MSGREQ ADDR OF MSG REQUEST 01163000
  1175. L R15,=V(DMTMGX) MESSAGE EXECUTOR ENTRY POINT 01164000
  1176. BALR R14,R15 ISSUE TERMINATE MESSAGE 01165000
  1177. SPACE 01166000
  1178. B TERTKILL AND CONTINUE 01167000
  1179. SPACE 01168000
  1180. DROP R1,R2,R3 01169000
  1181. SPACE 3 01170000
  1182. TERSAVE DC 6F'0' SAVE AREA 01171000
  1183. EJECT 01172000
  1184. *. 01173000
  1185. * 01174000
  1186. * ENTRY NAME - 01175000
  1187. * 01176000
  1188. * QUIESCE 01177000
  1189. * 01178000
  1190. * FUNCTION - 01179000
  1191. * 01180000
  1192. * THIS ROUTINE BECOMES THE TASK CODE FOR A TASK IN THE 01181000
  1193. * PROCESS OF TERMINATION. 01182000
  1194. * 01183000
  1195. * CALLS TO OTHER ROUTINES - 01184000
  1196. * 01185000
  1197. * DMTASK - TO TERMINATE THE TASK 01186000
  1198. * DMTWAT - TO WAIT FOR I/O COMPLETION 01187000
  1199. * 01188000
  1200. * OPERATION - 01189000
  1201. * 01190000
  1202. * 1. LOOK FOR ANY OUTSTANDING I/O FOR THE 01191000
  1203. * TERMINATING TASK. 01192000
  1204. * 01193000
  1205. * 2. IF FOUND ISSUE HIO AND WAIT FOR COMPLETION 01194000
  1206. * 01195000
  1207. * 3. WHEN ALL I/O IS COMPLETE TERMINATE 01196000
  1208. * THE TASK 01197000
  1209. * 01198000
  1210. * RESPONSES - 01199000
  1211. * 01200000
  1212. * NONE 01201000
  1213. * 01202000
  1214. * ERROR MESSAGES - 01203000
  1215. * 01204000
  1216. * NONE 01205000
  1217. * 01206000
  1218. *. 01207000
  1219. SPACE 2 01208000
  1220. QUIESCE EQU * 01209000
  1221. SPACE 01210000
  1222. USING QUIESCE,R2 GET ADDRESSABILITY 01211000
  1223. USING IOE,R3 GET IOE ADDRESSABILITY 01212000
  1224. SPACE 01213000
  1225. BALR R14,0 RETURN ADDR 01214000
  1226. LA R3,MPXIOQ GET START OF MPX CHAIN 01215000
  1227. B QUIOPURG AND PURGE THE I/O 01216000
  1228. SPACE 1 01217000
  1229. BALR R14,0 RETURN ADDR 01218000
  1230. LA R3,SELIOQ GET START OF SEL CHAIN 01219000
  1231. B QUIOPURG AND PURGE THE I/O 01220000
  1232. SPACE 01221000
  1233. SR R1,R1 CLEAR R1 01222000
  1234. BCTR R1,0 -1 (TERMINATE REQ CODE) 01223000
  1235. L R15,TASKREQ GIVE THE SYSTEM TASK ROUT ADDR 01224000
  1236. BALR R14,R15 AND CALL THE ROUTINE 01225000
  1237. * 01226000
  1238. * FAILED - GIVE UP 01227000
  1239. * 01228000
  1240. LR R1,R12 POINTS AT R13 SAVE SLOT 01229000
  1241. * WAS CLEARED BY TERMINAT 01230000
  1242. L R15,WAITREQ GET SYSTEM WAIT ROUTINE 01231000
  1243. BALR R14,R15 AND WAIT FOREVER 01232000
  1244. EJECT 01233000
  1245. QUIOPURG EQU * 01234000
  1246. ICM R3,B'1111',IONEXT POINT TO THE NEXT ELEMENT 01235000
  1247. BZ 8(R14) END OF CHAIN 01236000
  1248. CLM R4,B'0001',IOID IS THIS ONE OURS? 01237000
  1249. BNE QUIOPURG NO - TRY NEXT 01238000
  1250. SPACE 01239000
  1251. LH R1,IOADDR BUSY DEVICE ADDRESS 01240000
  1252. HIO 0(R1) STOP THE I/O 01241000
  1253. ICM R1,B'1111',IOTABLEA GET THE IOTABLE 01242000
  1254. BNM QUICK NOT SENSE 01243000
  1255. L R1,IOTABLEA-IOE(R1) GET THE IOTABLE ADDR 01244000
  1256. SPACE 01245000
  1257. USING IOTABLE,R1 GET IOTABLE ADDRESSABILITY 01246000
  1258. SPACE 01247000
  1259. QUICK EQU * 01248000
  1260. * 01249000
  1261. * BELOW IS VALID ONLY BECAUSE QUIESCE RUNS MASKED OFF 01250000
  1262. * 01251000
  1263. XC IOSYNCH(4),IOSYNCH CLEAR SYNCH LOCK 01252000
  1264. L R15,WAITREQ GET SYSTEM WAIT PROCESSOR 01253000
  1265. BR R15 RETURN DIRECTLY 01254000
  1266. SPACE 01255000
  1267. DROP R1 01256000
  1268. LTORG @VA04356 01256500
  1269. EJECT 01257000
  1270. COPY SVECTORS 01258000
  1271. EJECT 01259000
  1272. COPY TAREA 01260000
  1273. EJECT 01261000
  1274. COPY IOE 01262000
  1275. EJECT 01263000
  1276. COPY IOTABLE 01264000
  1277. EJECT 01265000
  1278. COPY TASKE 01266000
  1279. EJECT 01267000
  1280. COPY LINKTABL 01268000
  1281. EJECT 01269000
  1282. COPY RSSEQU 01270000
  1283. EJECT 01271000
  1284. COPY DEVTYPES 01272000
  1285. END 01273000