Table of Contents

DMTLAX Source

References

Source Listing

DMTLAX.ASSEMBLE.txt
  1. LAX TITLE 'DMTLAX (RSCS) VM/370 - RELEASE 6' 00001000
  2. *. 00002000
  3. * MODULE NAME - 00003000
  4. * 00004000
  5. * DMTLAX 00005000
  6. * 00006000
  7. * FUNCTION - 00007000
  8. * 00008000
  9. * THIS ROUTINE FUNCTIONS AS THE LINE ALLOCATION TASK FOR 00009000
  10. * RSCS. THE MAJOR PART OF THIS ROUTINE FUNCTIONS AS AN 00010000
  11. * ASYNCHRONOUS EXIT BEING ALERTED BY DMTREX. 00011000
  12. * 00012000
  13. * ATTRIBUTES - 00013000
  14. * 00014000
  15. * REUSABLE 00015000
  16. * 00016000
  17. * ENTRY POINTS - 00017000
  18. * 00018000
  19. * DMTLAX - AT TASK INITIATION 00019000
  20. * 00020000
  21. * ENTRY CONDITIONS - 00021000
  22. * 00022000
  23. * NONE 00023000
  24. * 00024000
  25. * EXIT CONDITIONS - 00025000
  26. * 00026000
  27. * NORMAL - THIS ROUTINE WILL ALWAYS BE ACTIVE 00027000
  28. * ERROR - THIS ROUTINE WILL ALWAYS BE ACTIVE 00028000
  29. * 00029000
  30. * 00030000
  31. * CALLS TO OTHER ROUTINES - 00031000
  32. * 00032000
  33. * DMTWAT - SUPERVISOR WAIT ROUTINE 00033000
  34. * 00034000
  35. * EXTERNAL REFERENCES - 00035000
  36. * 00036000
  37. * TPORTS - SWITCHABLE PORT TABLE 00037000
  38. * 00038000
  39. EJECT 00039000
  40. * TABLES / WORKAREAS - 00040000
  41. * 00041000
  42. * 00042000
  43. * NONE 00043000
  44. * 00044000
  45. * 00045000
  46. * REGISTER USAGE - 00046000
  47. * 00047000
  48. * ALL SUBROUTINES IN THE MODULE CONFORM GENERALLY TO THIS USAGE; 00048000
  49. * ANY INDIVIDUAL DEVIATIONS OR EXTENSIONS ARE LISTED WITH THE 00049000
  50. * COMMAND DESCRIPTION 00050000
  51. * 00051000
  52. * GPR0 = WORK 00052000
  53. * GPR1 = WORK 00053000
  54. * GPR2 = LINK TABLE ADDRESSABILITY 00054000
  55. * GPR3 = WORK 00055000
  56. * GPR4 = WORK 00056000
  57. * GPR5 = WORK 00057000
  58. * GPR6 = WORK 00058000
  59. * GPR7 = WORK 00059000
  60. * GPR8 = WORK 00060000
  61. * GPR9 = WORK 00061000
  62. * GPR10 = WORK 00062000
  63. * GPR11 = WORK 00063000
  64. * GPR12 = BASE REGISTER 00064000
  65. * GPR13 = WORK 00065000
  66. * GPR14 = RETURN REGISTER ON CALL 00066000
  67. * GPR15 = ENTRY ADDRESS ON AN EXTERNAL CALL 00067000
  68. * 00068000
  69. * NOTES - 00069000
  70. * 00070000
  71. * NONE 00071000
  72. * 00072000
  73. * OPERATION - 00073000
  74. * 00074000
  75. * 00075000
  76. * 1. UPON TASK INITIATION, INITIAL SWITCHABLE PORT TABLE 00076000
  77. * AND SETUP AYNCH EXIT REQUEST. 00077000
  78. * 00078000
  79. * 2. IF LINE ADDRESS NOT SUPPLIED, SCAN THE PORT TABLE 00079000
  80. * FOR AN AVAILABLE LINE. IF NONE FOUND RETURN WITH ERROR. 00080000
  81. * 00081000
  82. * 3. WHEN LINE IS FOUND, VALIDATE THAT THE LINE IS NOT IN 00082000
  83. * USE BY ANOTHER LINK. 00083000
  84. * 00084000
  85. * 4. VALIDATE THE DEVICE TYPE OF THE PORT SPECIFIED. IF NOT 00085000
  86. * AVAILABLE OR NOT CORRECT DEVICE TYPE RETURN WITH ERROR. 00086000
  87. * 00087000
  88. *. 00088000
  89. EJECT 00089000
  90. DMTLAX CSECT 00090000
  91. SPACE 00091000
  92. LAXSAVE DC 0D'0' BEGINNING OF MONITOR SAVE AREA 00092000
  93. SPACE 00093000
  94. LAXPSW DC X'FF04',AL2(0),A(LAXINIT) INITIAL PSW FOR DISPATCH 00094000
  95. SPACE 00095000
  96. LAXREG0 DC F'0' INITIAL REGISTER CONTENTS 00096000
  97. LAXREG1 DC F'0' 00097000
  98. LAXREG2 DC F'0' 00098000
  99. LAXREG3 DC F'0' 00099000
  100. LAXREG4 DC F'0' 00100000
  101. LAXREG5 DC F'0' 00101000
  102. LAXREG6 DC F'0' 00102000
  103. LAXREG7 DC F'0' 00103000
  104. LAXREG8 DC F'0' 00104000
  105. LAXREG9 DC F'0' 00105000
  106. LAXREG10 DC F'0' 00106000
  107. LAXREG11 DC F'0' 00107000
  108. LAXREG12 DC A(DMTLAX) BASE REGISTER FOR FIRST PAGE 00108000
  109. LAXREG13 DC F'0' 00109000
  110. LAXREG14 DC F'0' 00110000
  111. LAXREG15 DC A(LAXINIT) ENTRY ADDRESS AT INITIATION 00111000
  112. SPACE 00112000
  113. REQLOCK DC F'0' SYNCH LOCK FOR REQUEST ARRIVAL 00113000
  114. EJECT 00114000
  115. *. 00115000
  116. * 00116000
  117. * ENTRY NAME - 00117000
  118. * 00118000
  119. * 00119000
  120. * 00120000
  121. * FUNCTION - 00121000
  122. * 00122000
  123. * 00123000
  124. * 00124000
  125. * CALLS TO OTHER ROUTINES - 00125000
  126. * 00126000
  127. * 00127000
  128. * 00128000
  129. * OPERATION - 00129000
  130. * 00130000
  131. * 00131000
  132. * 00132000
  133. * RESPONSES - 00133000
  134. * 00134000
  135. * NONE 00135000
  136. * 00136000
  137. * ERROR MESSAGES - 00137000
  138. * 00138000
  139. * NONE 00139000
  140. * 00140000
  141. *. 00141000
  142. SPACE 00142000
  143. LAXINIT DC 0H'0' SET ALIGNMENT FOR START OF CODE 00143000
  144. SPACE 00144000
  145. USING DMTLAX,R12 DEFINE FIRST PAGE ADDRESSABILITY 00145000
  146. USING SVECTORS,0 DEFINE SVECTORS ADDRESSABILITY 00146000
  147. USING LINKTABL,R2 DEFINE LINKTABLE ADDRESSABILITY 00147000
  148. SPACE 2 00148000
  149. * 00149000
  150. * INITIALIZE SCAN REGISTER SETUP 00150000
  151. * 00151000
  152. L R1,TPORTS ADDR OF PORT TABLE START 00152000
  153. L R3,0(R1) COUNT OF ENTRIES 00153000
  154. SLL R3,1 *2 = LENGTH OF ENTRIES 00154000
  155. LA R1,8(R1) ADDR OF FIRST ENTRY 00155000
  156. LR R2,R1 MAKE FIRST ENTRY NEXT 00156000
  157. ALR R3,R1 AND SET END ADDR 00157000
  158. STM R1,R3,LAXSETUP SAVE FOR ALERT CALLS 00158000
  159. EJECT 00159000
  160. * 00160000
  161. * INITIALIZE ALERT EXIT 00161000
  162. * 00162000
  163. SLR R0,R0 => REQ FOR ALERT EXIT 00163000
  164. LA R1,LAXALERT ALERT EXIT ENTRY 00164000
  165. L R15,ASYNREQ ENTRY FOR ASYN SERVICE 00165000
  166. BALR R14,R15 REQUEST THE ALERT EXIT 00166000
  167. SPACE 00167000
  168. * (ASSUME SUCCESSFUL RETURN) 00168000
  169. SPACE 2 00169000
  170. * 00170000
  171. * DONE WITH DISPATCHED WORK 00171000
  172. * 00172000
  173. LAXHANG EQU * 00173000
  174. XC LAXLOCK(4),LAXLOCK CLEAR ENDLESS SYNCH LOCK 00174000
  175. LA R1,LAXLOCK SET TO WAIT ON IT 00175000
  176. L R15,WAITREQ WAIT SERVICE ENTRY 00176000
  177. BALR R14,R15 WAIT FOREVER 00177000
  178. B LAXHANG FOR AESTHETICS 00178000
  179. EJECT 00179000
  180. * 00180000
  181. * LAX ALERT EXIT 00181000
  182. * 00182000
  183. LAXALERT DC 0H'0' 00183000
  184. LR R12,R15 SET LAX BASE 00184000
  185. LA R15,LAXALERT-DMTLAX DISPLACEMENT TO ENTRY 00185000
  186. SLR R12,R15 SET BASE A(DMTREX) 00186000
  187. SPACE 00187000
  188. CL R0,LAXREX IS CALLER 'REX '? 00188000
  189. BNE LAXPRIV REJECT IF NOT 00189000
  190. CLI 0(R1),X'05' REQ LONG ENOUGH? 00190000
  191. BL LAXSHORT NOPE - REJECT 00191000
  192. CLI 1(R1),X'01' ONLY LEGAL REQ CODE? 00192000
  193. BNE LAXCODE NO - REJECT 00193000
  194. SPACE 00194000
  195. MVC LAXPORT(2),4(R1) SET REQUESTED ADDRESS 00195000
  196. SLR R0,R0 CLEAR FOR ICM 00196000
  197. ICM R0,B'0011',4(R1) ANY SPECIFIED? 00197000
  198. BNZ LAXQUERY YES - VALIDATE, SCAN LINKS 00198000
  199. SPACE 2 00199000
  200. * 00200000
  201. * SCAN THE AVAILABLE PORT TABLE 00201000
  202. * 00202000
  203. LM R7,R9,LAXSETUP INITIALIZE FOR SCAN 00203000
  204. CLR R7,R9 TOP = END? 00204000
  205. BE LAXMISS YEP - EMPTY TABLE 00205000
  206. LR R6,R8 KEEP START ADDR IN REG.6 00206000
  207. LAXNEXT EQU * 00207000
  208. LR R4,R8 SAVE CURRENT ADDR IN REG.4 00208000
  209. LA R8,2(R8) SET NEXT ENTRY ADDR 00209000
  210. CLR R8,R9 AT END OF TABLE? 00210000
  211. BL LAXCHECK NO - SO FAR SO GOOD 00211000
  212. LR R8,R7 CONTINUE AT TABLE TOP 00212000
  213. LAXCHECK EQU * 00213000
  214. TM 0(R4),X'F0' IN USE? 00214000
  215. BZ LAXHIT NO - TAKE IT 00215000
  216. LAXRETRY EQU * 00216000
  217. CLR R6,R8 BACK TO START? 00217000
  218. BNE LAXNEXT NOPE - TRY ANOTHER 00218000
  219. SPACE 00219000
  220. * 00220000
  221. * NONE FOUND 00221000
  222. * 00222000
  223. LAXMISS EQU * 00223000
  224. MVI 2(R1),X'02' SET UNAVAILABLE RESPONSE 00224000
  225. BR R14 AND RETURN 00225000
  226. EJECT 00226000
  227. * 00227000
  228. * AVAILABLE ENTRY ADDRESS IN REG.4 00228000
  229. * 00229000
  230. LAXHIT EQU * 00230000
  231. ST R8,LAXSETUP+4 SET NEW NEXT 00231000
  232. LR R5,R4 SAVE R4 FOR LATER @VM01118 00231500
  233. LH R2,0(R4) FREE PORT ADDR 00232000
  234. DIAG R2,R3,X'24' WHAT IS IT REALLY? 00233000
  235. BC 1,LAXRETRY NOT ATTACHED - TRY AGAIN 00234000
  236. CLM R3,B'1100',=AL1(CLASTERM,TYP2700) LINE PORT? @VM01118 00235010
  237. BE *+12 YES, SET UP PORT ADDRESS @V2D3931 00236100
  238. CLM R3,B'1100',=AL1(CLASTERM,TYPBSC) LINE PORT ? @V2D3931 00236200
  239. BNE LAXRETRY NO, TRY AGAIN @V2D3931 00236300
  240. STH R2,LAXPORT SET FREE PORT ADDRESS 00237000
  241. OI 0(R5),X'F0' MARK FREE PORT IN USE @VM01118 00238010
  242. SPACE 00239000
  243. LAXSCAN EQU * 00240000
  244. L R2,TLINKS ADDR OF START OF LINK TABLE 00241000
  245. L R3,0(R2) COUNT OF LINKS 00242000
  246. BCTR R3,0 DO NOT COUNT LOCAL TABLE 00243000
  247. LTR R3,R3 ANY LEFT? 00244000
  248. BZ LAXLKOK NO - NO LINES IN USE ...? 00245000
  249. LA R2,8(R2) START AT LOCAL TABLE 00246000
  250. LAXLKNEX EQU * 00247000
  251. LA R2,LINKLEN(R2) TO NEXT LINK TABLE 00248000
  252. TM LFLAG,LACTIVE IS IT ACTIVE? 00249000
  253. BNO LAXLKSKP NO - SKIP IT 00250000
  254. CLC LAXPORT(2),LACTLINE IS LINE IN USE HERE? 00251000
  255. BNE LAXLKSKP NO - TRY ANOTHER LINK 00252000
  256. LTR R0,R0 IN USE - ADDR SUPPLIED? 00253000
  257. BNZ LAXBUSY YES - QUIT WITH ERROR 00254000
  258. B LAXRETRY NO - TRY TO FIND ANOTHER 00255000
  259. LAXLKSKP EQU * 00256000
  260. BCT R3,LAXLKNEX DO ENTIRE LINK TABLE 00257000
  261. SPACE 00258000
  262. * 00259000
  263. * LINE AVAILABLE -- USE IT 00260000
  264. * 00261000
  265. LAXLKOK EQU * 00262000
  266. MVC 4(2,R1),LAXPORT O.K. EITHER WAY 00263000
  267. SPACE 00264000
  268. MVI 2(R1),X'00' SET SUCCESSFUL RESPONSE 00265000
  269. BR R14 RETURN 00266000
  270. SPACE 2 00267000
  271. LAXBUSY EQU * 00268000
  272. CLI 0(R1),X'0F' REQ LONG ENOUGH FOR LINKID? 00269000
  273. BL LAXSHORT NOPE - GIVE SHORT RETURN 00270000
  274. MVC 8(8,R1),LINKID RETURN ID OF LINK USING IT 00271000
  275. B LAXMISS AND RETURN NOT AVAILABLE 00272000
  276. EJECT 00273000
  277. LAXQUERY EQU * 00274000
  278. LR R6,R0 LINE ADDRESS? 00275000
  279. DIAG R6,R7,X'24' WHAT IS IT REALLY? 00276000
  280. BC 1,LAXCC3 NOT ATTACHED 00277000
  281. CLM R7,B'1100',=AL1(CLASTERM,TYP2700) LINE PORT? 00278000
  282. BE LAXSCAN YES - SEE IF IN USE 00279000
  283. CLM R7,B'1100',=AL1(CLASTERM,TYPBSC) LINE PORT ? @V2D3931 00279100
  284. BE LAXSCAN YES, SEE IF IN USE @V2D3931 00279200
  285. SPACE 00280000
  286. MVI 2(R1),X'04' SAY NOT LINE PORT 00281000
  287. BR R14 AND RETURN 00282000
  288. SPACE 00283000
  289. LAXCC3 EQU * 00284000
  290. MVI 2(R1),X'08' SAY NOT ATTACHED 00285000
  291. BR R14 AND RETURN 00286000
  292. SPACE 00287000
  293. LAXPRIV EQU * 00288000
  294. MVI 2(R1),X'80' SET WRONG TASK NAME 00289000
  295. BR R14 AND RETURN 00290000
  296. SPACE 2 00291000
  297. LAXSHORT EQU * 00292000
  298. MVI 2(R1),X'20' SET SHORT REQ CODE 00293000
  299. BR R14 AND RETURN TO MSUP 00294000
  300. SPACE 2 00295000
  301. LAXCODE EQU * 00296000
  302. MVI 2(R1),X'40' SET INVALID REQ CODE 00297000
  303. BR R14 AND RETURN 00298000
  304. EJECT 00299000
  305. * 00300000
  306. * LAX CONSTANT AND VARIABLE AREA 00301000
  307. * 00302000
  308. SPACE 2 00303000
  309. LAXREX DC 0F'0',CL4'REX' ONLY VALID CALLER 00304000
  310. SPACE 00305000
  311. LAXLOCK DC 0F'0',X'00',AL3(0) TO SUSPEND DISPATCHING 00306000
  312. SPACE 00307000
  313. LAXSETUP DC A(0) START OF PORT TABLE 00308000
  314. DC A(0) NEXT ENTRY TO LOOK AT 00309000
  315. DC A(0) END OF PORT TALBE 00310000
  316. SPACE 00311000
  317. LAXPORT DC X'0000' LINE ADDR WORK FIELD 00312000
  318. EJECT 00313000
  319. COPY SVECTORS 00314000
  320. EJECT 00315000
  321. COPY LINKTABL 00316000
  322. EJECT 00317000
  323. COPY RSSEQU 00318000
  324. EJECT 00319000
  325. COPY DEVTYPES 00320000
  326. EJECT 00321000
  327. END 00322000