Table of Contents

DMTCOM Source

References

Source Listing

DMTCOM.ASSEMBLE.txt
  1. COM TITLE 'DMTCOM (RSCS) VM/370 - RELEASE 6' 00001000
  2. *. 00002000
  3. * MODULE NAME - 00003000
  4. * 00004000
  5. * DMTCOM 00005000
  6. * 00006000
  7. * FUNCTION - 00007000
  8. * 00008000
  9. * THIS ROUTINE CONTAINS VARIOUS REENTRANT ROUTINES USED BY 00009000
  10. * RSCS TASKS. 00010000
  11. * 00011000
  12. * ATTRIBUTES - 00012000
  13. * 00013000
  14. * REENTRANT 00014000
  15. * 00015000
  16. * ENTRY POINTS - 00016000
  17. * 00017000
  18. * DMTCOM - MODULE ENTRANCE 00018000
  19. * DMTCOMVC - COMMON ROUTINE ADDRESS VECTOR 00019000
  20. * 00020000
  21. * ENTRY CONDITIONS - 00021000
  22. * 00022000
  23. * SEE ENTRY TO EACH SECTION 00023000
  24. * 00024000
  25. * EXIT CONDITIONS - 00025000
  26. * 00026000
  27. * SEE ENTRY TO EACH SECTION 00027000
  28. * 00028000
  29. EJECT 00029000
  30. * 00030000
  31. * CALLS TO OTHER ROUTINES - 00031000
  32. * 00032000
  33. * SEE ENTRY TO EACH SECTION 00033000
  34. * 00034000
  35. * EXTERNAL REFERENCES - 00035000
  36. * 00036000
  37. * TLINKS - LINK TABLE CHAIN 00037000
  38. * MAINMAP - MAIN STORAGE MAP 00038000
  39. * MAINSIZE - MAIN STORAGE SIZE 00039000
  40. * 00040000
  41. * TABLES / WORKAREAS - 00041000
  42. * 00042000
  43. * MSGSTACK - MESSAGE STACK BUFFER 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 = PARAMETER REGISTERS 00052000
  53. * GPR1 = PARAMETER REGISTERS 00053000
  54. * GPR2 = LINK TABLE ADDRESSABILITY 00054000
  55. * GPR3 = MESSAGE STACK ADDRESSABILITY 00055000
  56. * GPR4 = WORK 00056000
  57. * GPR5 = WORK 00057000
  58. * GPR6 = TASK ELEMENT ADDRESSABILTIY 00058000
  59. * GPR7 = WORK 00059000
  60. * GPR8 = WORK 00060000
  61. * GPR9 = WORK 00061000
  62. * GPR10 = WORK 00062000
  63. * GPR11 = WORK 00063000
  64. * GPR12 = BASE 00064000
  65. * GPR13 = TASK SAVE AREA ADDRESSABILITY 00065000
  66. * GPR14 = RETURN 00066000
  67. * GPR15 = ALTERNATE BASE 00067000
  68. * 00068000
  69. * NOTES - 00069000
  70. * 00070000
  71. * NONE 00071000
  72. * 00072000
  73. * OPERATION - 00073000
  74. * 00074000
  75. * SEE EACH SUBROUTINE 00075000
  76. * 00076000
  77. *. 00077000
  78. EJECT 00078000
  79. DMTCOM CSECT 00079000
  80. ENTRY DMTCOMVC 00080000
  81. SPACE 00081000
  82. DMTCOMVC EQU * 00082000
  83. DC A(GETLINK) GET LINK TABLE ENTRY ROUTINE 00083000
  84. DC A(GETPAGE) GET PAGE OF MAIN STORAGE 00084000
  85. DC A(FREEPAGE) FREE PAGE OF MAIN STORAGE 00085000
  86. DC A(MFI) STACK A MESSAGE ELEMENT 00086000
  87. DC A(MFO) UNSTACK A MESSAGE 00087000
  88. DC A(TODEBCD) CONVERT TIME 00088000
  89. SPACE 3 00089000
  90. USING SVECTORS,0 GET SVECTORS ADDRESSABILITY 00090000
  91. USING TAREA,R13 GET SAVEAREA ADDRESSABILTIY 00091000
  92. USING LINKTABL,R2 GET LINKTABLE ADDRESSABILITY 00092000
  93. USING TASKE,R6 GET TASK ELEMENT ADDRESSABILITY 00093000
  94. USING MSGSTACK,R3 GET MESSAGE STACK ADDRESSABILITY 00094000
  95. EJECT 00095000
  96. *. 00096000
  97. * 00097000
  98. * ENTRY NAME - 00098000
  99. * 00099000
  100. * GETLINK 00100000
  101. * 00101000
  102. * FUNCTION - 00102000
  103. * 00103000
  104. * TO SCAN THE LINK TABLE CHAIN AND RETURN A LINK TABLE ADDRESS 00104000
  105. * 00105000
  106. * CALLS TO OTHER ROUTINES - 00106000
  107. * 00107000
  108. * NONE 00108000
  109. * 00109000
  110. * ENTRY CONDITIONS - 00110000
  111. * 00111000
  112. * R0 - NUMBER OF BYTES IN LINKID FIELD 00112000
  113. * R1 - ADDR OF LINKID FIELD 00113000
  114. * R13- ADDRESS OF AN 18 FW SAVEAREA 00114000
  115. * R14- RETURN ADDRESS 00115000
  116. * 00116000
  117. * EXIT CONDITIONS - 00117000
  118. * 00118000
  119. * R1 = LINK TABLE ADDR IF FOUND 00119000
  120. * R15= 0 IF LINK TABLE MATCH FOUND 00120000
  121. * R15= X'10' IF LINK TABLE MATCH NOT FOUND 00121000
  122. * 00122000
  123. * OPERATION - 00123000
  124. * 00124000
  125. * 1. MOVE SUPPLIED LINK ID TO STAGING AREA. 00125000
  126. * 00126000
  127. * 2. SCAN LINK TABLE CHAIN FOR MATCH. 00127000
  128. * 00128000
  129. * 3. IF FOUND RETURN LINK TABLE ADDR IN R1. 00129000
  130. * 00130000
  131. * 4. IF NOT FOUND INDICATE ERROR AND RETURN. 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 2 00142000
  143. GETLINK DS 0H'0' 00143000
  144. STM R0,R15,TGREG0 SAVE REGISTERS 00144000
  145. USING GETLINK,R12 GET ROUTINE ADDRESSABILITY 00145000
  146. LA R12,0(R15) USE R12 FOR ADDRESSABILITY 00146000
  147. LTR R0,R0 COUNT ZERO? 00147000
  148. BZ GETLMISS NOTHING ELSE TO DO 00148000
  149. LR R2,R0 LOAD DIFFERENT REGISTER 00149000
  150. MVI TPSW+1,X'40' USER THIS FOR STAGING AREA 00150000
  151. MVC TPSW+2(6),TPSW+1 SO CLEAR IT TO BLANKS 00151000
  152. BCTR R2,0 REDUCE COUNT FOR EXECUTE 00152000
  153. EX R2,GETLMOVE AND MOVE INTO STAGING AREA 00153000
  154. L R2,TLINKS GET LINK TABLE CHAIN START 00154000
  155. L R3,0(R2) GET NUMBER OF ENTRIES 00155000
  156. LA R2,8(,R2) AND THE FIRST ENTRY 00156000
  157. GETLNEXT EQU * 00157000
  158. LR R1,R2 UPDATE R1 INCASE OF MATCH 00158000
  159. CLC LINKID(8),TPSW AND SEE IF THIS ONE MATCHS 00159000
  160. BE GETLHIT YES 00160000
  161. LA R2,LINKLEN(,R2) AND BUMP TO NEXT ENTRY 00161000
  162. BCT R3,GETLNEXT NO CHECK THE NEXT ONE 00162000
  163. GETLMISS EQU * 00163000
  164. LA R15,16 SET RETURN CODE 00164000
  165. L R1,TGREG1 RESTORE R1 00165000
  166. B GETLCXIT ENTER COMMON EXIT 00166000
  167. SPACE 1 00167000
  168. GETLHIT EQU * 00168000
  169. SR R15,R15 SET RETURN CODE 00169000
  170. GETLCXIT EQU * 00170000
  171. LM R2,R14,TGREG2 RESTORE THE OTHER REGS 00171000
  172. BR R14 AND RETURN 00172000
  173. DROP R12 00173000
  174. SPACE 1 00174000
  175. GETLMOVE MVC TPSW(0),0(R1) TO BE EXECUTED FROM ABOVE 00175000
  176. EJECT 00176000
  177. *. 00177000
  178. * 00178000
  179. * ENTRY NAME - 00179000
  180. * 00180000
  181. * GETPAGE 00181000
  182. * 00182000
  183. * FUNCTION - 00183000
  184. * 00184000
  185. * TO GET A FREE PAGE OF MAIN STORAGE 00185000
  186. * 00186000
  187. * CALLS TO OTHER ROUTINES - 00187000
  188. * 00188000
  189. * DMTSTO - TO RETRIEVE A PAGE 00189000
  190. * 00190000
  191. * EXIT CONDITIONS - 00191000
  192. * 00192000
  193. * R1 = 0 IF PAGE NOT AVAILABLE 00193000
  194. * R1 = PAGE ADDRESS IF AVAILABLE 00194000
  195. * 00195000
  196. * OPERATION - 00196000
  197. * 00197000
  198. * 1. SCAN THE MAIN STORAGE MAP FOR A FREE PAGE 00198000
  199. * 00199000
  200. * 2. IF FOUND MARK IT IN USE THE THE CALLING TASK 00200000
  201. * 00201000
  202. * 3. RETURN ITS ADDRESS IN R1 00202000
  203. * 00203000
  204. * RESPONSES - 00204000
  205. * 00205000
  206. * NONE 00206000
  207. * 00207000
  208. * ERROR MESSAGES - 00208000
  209. * 00209000
  210. * NONE 00210000
  211. * 00211000
  212. *. 00212000
  213. SPACE 2 00213000
  214. GETPAGE DC 0H'0' 00214000
  215. USING *,R15 GET ADDRESSABILITY 00215000
  216. SR R1,R1 CLEAR RETURN CODE TO START 00216000
  217. STM R0,R15,TGREG0 SAVE CALLERS REGISTERS 00217000
  218. LA R12,0(R15) GET THE RIGHT BASE 00218000
  219. DROP R15 ALL DONE WITH THIS ONE 00219000
  220. USING GETPAGE,R12 USE THIS FOR ADDRESSING 00220000
  221. L R1,MAINSIZE R1=TOTAL PAGES IN VIRTUAL STORAGE 00221000
  222. BCTR R1,0 BUMP BK 1 FOR DISP INTO MAIN TAB 00222000
  223. L R2,MAINMAP R2=ADDRESS OF MAIN STORAGE MAP 00223000
  224. GETPNEXT EQU * 00224000
  225. LA R3,0(1,R2) R3=ADDRESS OF ENTRY TO BE INSPECTED 00225000
  226. CLI 0(R3),X'00' IS THIS PAGE FREE NOW? 00226000
  227. BE GETPTRY YEP - GO TRY TO CLAIM IT 00227000
  228. GETPRTRY EQU * 00228000
  229. BCT R1,GETPNEXT OTHERWISE,TRY NEXT PAGE DOWN IN STOR 00229000
  230. EJECT 00230000
  231. GETPEXIT EQU * 00231000
  232. LM R2,R15,TGREG2 RESTORE REGISTERS 00232000
  233. BR R14 AND RETURN TO THE CALLER 00233000
  234. SPACE 1 00234000
  235. GETPTRY EQU * 00235000
  236. LA R0,1 ASK FOR ONLY ONE PAGE 00236000
  237. L R15,MAINREQ R15=ENTRY ADDRESS FOR MAIN STOR REQ 00237000
  238. BALR R14,R15 REQ THE LOCATED MAIN STORAGE PAGE 00238000
  239. LTR R15,R15 DID WE GET IT O.K.? 00239000
  240. BNZ GETPRTRY NOPE - TRY ANOTHER 00240000
  241. SLL R1,12 OTHERWISE, R1=ADDRESS OF GOTTEN PAGE 00241000
  242. B GETPEXIT AND GO REST AND RET TO THE CALLER 00242000
  243. EJECT 00243000
  244. *. 00244000
  245. * 00245000
  246. * ENTRY NAME - 00246000
  247. * 00247000
  248. * FREEPAGE 00248000
  249. * 00249000
  250. * FUNCTION - 00250000
  251. * 00251000
  252. * TO RETURN A PAGE OF MAIN STORAGE 00252000
  253. * 00253000
  254. * CALLS TO OTHER ROUTINES - 00254000
  255. * 00255000
  256. * NONE 00256000
  257. * 00257000
  258. * ENTRY CONDITIONS - 00258000
  259. * 00259000
  260. * R1 - ADDRESS OF PAGE OF MAIN STORAGE TO BE FREED 00260000
  261. * 00261000
  262. * OPERATION - 00262000
  263. * 00263000
  264. * 1. FREE THE REQUESTED PAGE IN THE MAIN STORAGE 00264000
  265. * MAP 00265000
  266. * 00266000
  267. * RESPONSES - 00267000
  268. * 00268000
  269. * NONE 00269000
  270. * 00270000
  271. * ERROR MESSAGES - 00271000
  272. * 00272000
  273. * NONE 00273000
  274. * 00274000
  275. *. 00275000
  276. SPACE 2 00276000
  277. FREEPAGE DS 0H'0' 00277000
  278. USING *,R15 GET ADDRESSABILITY 00278000
  279. STM R0,R15,TGREG0 SAVE REGISTERS 00279000
  280. LTR R1,R1 SEE OF ZERO? 00280000
  281. BZ FREEDONE YEP NOTHING TO DO 00281000
  282. SRL R1,12 CREATE PAGE TABLE ENTRY 00282000
  283. L R2,MAINMAP GET MAP ADDRESS 00283000
  284. ALR R2,R1 CREATE OFFSET IN TABLE 00284000
  285. MVI 0(R2),X'00' CLEAR PAGE 00285000
  286. FREEDONE EQU * 00286000
  287. LM R0,R15,TGREG0 RESTORE REGISTERS 00287000
  288. BR R14 AND RETURN 00288000
  289. EJECT 00289000
  290. *. 00290000
  291. * 00291000
  292. * ENTRY NAME - 00292000
  293. * 00293000
  294. * MFI 00294000
  295. * 00295000
  296. * FUNCTION - 00296000
  297. * 00297000
  298. * THIS ROUTINE WILL STACK MESSAGE ELEMENTS IN A LIFO 00298000
  299. * FOR LATER PROCESSING. IF NO ROOM IS AVAILABLE IN 00299000
  300. * THE CURRENT PAGE, A NEW PAGE WILL FETCHED IF THERE ARE 00300000
  301. * AT LEAST 5 FREE PAGES REMAINING, IF NOT AN ERROR 00301000
  302. * CONDITION IS RETURNED. 00302000
  303. * ALL TASKS OTHER THAN REX ARE ALLOWED ONLY THREE PAGES OF 00303000
  304. * STORAGE TO STACK MESSAGES. 00304000
  305. * 00305000
  306. * CALLS TO OTHER ROUTINES - 00306000
  307. * 00307000
  308. * NONE 00308000
  309. * 00309000
  310. * ENTRY CONDITIONS - 00310000
  311. * 00311000
  312. * R1 - ADDR OF MESSAGE ELEMENT TO STACK 00312000
  313. * R2 - ADDR OF THIS TASKS LINK TABLE 00313000
  314. * 00314000
  315. * EXIT CONDITIONS - 00315000
  316. * 00316000
  317. * R15 - X'10' IF MESSAGE CANNOT BE QUEUED 00317000
  318. * X'00' IF MESSAGE IS QUEUED 00318000
  319. * 00319000
  320. * OPERATION - 00320000
  321. * 00321000
  322. * 1. SKIP TO THE CURRENT MESSAGE BUFFER. 00322000
  323. * 00323000
  324. * 2. TRY TO FIT MSG IN THE CURRENT BUFFER 00324000
  325. * 00325000
  326. * 3. MIGRATE MSGS TO TOP OF BUFFER IF NECESSARY 00326000
  327. * 00327000
  328. * 4. GET NEW PAGE IF NECESSARY AND IF MAX PAGES 00328000
  329. * FOR THIS TASK HAVE NOT BEEN EXCEEDED. 00329000
  330. * 00330000
  331. * 5. MOVE MESSAGE TO BUFFER 00331000
  332. * 00332000
  333. * RESPONSES - 00333000
  334. * 00334000
  335. * NONE 00335000
  336. * 00336000
  337. * ERROR MESSAGES - 00337000
  338. * 00338000
  339. * NONE 00339000
  340. * 00340000
  341. *. 00341000
  342. EJECT 00342000
  343. MFI DC 0H'0' 00343000
  344. USING *,R15 GET ADDRESSABILITY 00344000
  345. CLI ACTIVE,X'00' ARE WE RUNNING DISPATCHED? 00345000
  346. BE MFINODSP YES 00346000
  347. FREEZE STOP IT ALL 00347000
  348. LA R10,16 INDICATE RUNNING DISPATCHED 00348000
  349. B MFIPNT AND CONTINUE 00349000
  350. SPACE 1 00350000
  351. MFINODSP EQU * 00351000
  352. STM R0,R11,MFSAVE SAVE REGISTERS 00352000
  353. SR R10,R10 INDICATE RUNNING NON DISPATCHED 00353000
  354. MFIPNT EQU * 00354000
  355. SR R11,R11 CLEAR PAGE COUNT REGISTER 00355000
  356. LA R3,LMSGQ-(MSTKPTR-MSGSTACK) LOAD INITIAL BACK ONE 00356000
  357. ICM R4,B'1111',0(R3) ANYTHING IN QUEUE? 00357000
  358. BNZ MFILOP MUST HAVE ALREADY BEEN HERE 00358000
  359. SR R5,R5 CLEAR R5 FOR IC 00359000
  360. IC R5,0(R1) GET THE ELEMENT LENGTH 00360000
  361. S R5,F3 DOWN BY THREE 00361000
  362. B MFIGPGE EMPTY GO GET A NEW PAGE 00362000
  363. SPACE 00363000
  364. MFILOP EQU * 00364000
  365. LA R11,1(,R11) UP COUNT BY ONE 00365000
  366. LR R4,R3 UPDATE POINTER 00366000
  367. ICM R3,B'1111',MSTKPTR GET THE NEXT POINTER 00367000
  368. BNZ MFILOP NO AT END CONTINUE 00368000
  369. MFIFND EQU * 00369000
  370. BCTR R11,0 REDUCE PAGE COUNTER 00370000
  371. LR R3,R4 GET THE LAST ADDR 00371000
  372. SR R5,R5 CLEAR R5 FOR IC 00372000
  373. IC R5,0(R1) GET THE ELEMENT LENGTH 00373000
  374. S R5,F3 DOWN BY THREE 00374000
  375. LR R4,R3 GET READY TO COMPUTE THE NEXT PAGE 00375000
  376. SRL R4,12 GET PAGE ADDR 00376000
  377. LA R4,1(R4) UP BY ONE 00377000
  378. SLL R4,12 AND RESET TO BEGINNING 00378000
  379. L R6,MSTKLOAD GET THE LOAD POINT 00379000
  380. SR R4,R6 ENOUGH ROOM HERE AT END? 00380000
  381. LA R7,1(,R5) ALLOW FOR OVERHEAD CHARS @VA03744 00381100
  382. CR R7,R4 ENOUGH ROOM LEFT? @VA03744 00381200
  383. BL MFISTK YEP GO TO IT 00382000
  384. L R7,MSTKUNLD GET THE UNLOAD POINT 00383000
  385. LA R6,MSTKDATA AND THE START OF THE DATA AREA 00384000
  386. SR R7,R6 FREE SPACE AT BEGINNING 00385000
  387. BZ MFIGPGE NO SPACE GET A PAGE 00386000
  388. AR R4,R7 TOTAL FREE SPACE IN THIS PAGE 00387000
  389. CR R5,R4 ENOUGH ROOM? 00388000
  390. BNL MFIGPGE NO GET A PAGE 00389000
  391. MFIMIG EQU * 00390000
  392. L R8,MSTKUNLD GET UNLOAD POINT IN R8 @VM01114 00391010
  393. L R9,MSTKLOAD GET THE LOAD PNT 00392000
  394. SR R9,R8 AMOUNT TO MOVE @VM01114 00393010
  395. LR R7,R9 ALSO PUT IT HERE 00394000
  396. LR R4,R7 GET LENGTH HERE ALSO @VM01114 00394500
  397. MVCL R6,R8 FINALLY MOVE IT 00395000
  398. LA R6,MSTKDATA GET NEW LOAD POINT ADDR @VM01114 00395500
  399. ST R6,MSTKUNLD STORE NEW UNLOAD POINT 00396000
  400. AR R6,R4 CALCULATE NEW LOAD POINT @VM01114 00397010
  401. ST R6,MSTKLOAD AND SAVE IT 00398000
  402. B MFISTK STACK THE MESSAGE 00399000
  403. SPACE 00400000
  404. MFIGPGE EQU * 00401000
  405. L R6,TLINKS GET LINK TABLE ADDR 00402000
  406. LA R6,8(R6) GET THE FIRST ENTRY 00403000
  407. CLR R6,R2 REX CALLING US? 00404000
  408. BE MFIGPGE1 YES ..NO RESTRICTION 00405000
  409. CL R11,F3 HAVE WE REACHED THE MAX? 00406000
  410. BNL MFIGERR YES..RETURN ERROR 00407000
  411. MFIGPGE1 EQU * 00408000
  412. LA R6,5 MUST HAVE FIVE LEFT 00409000
  413. L R7,MAINSIZE NUMBER OF MAIN STOR PAGES 00410000
  414. L R8,MAINMAP AND THE MAP START 00411000
  415. MFIGLOOP EQU * 00412000
  416. BCT R7,MFIGTEST DOWN BY ONE PAGE 00413000
  417. B MFIGERR NOT ENOUGH LEFT 00414000
  418. MFIGTEST EQU * 00415000
  419. LA R9,0(R8,R7) COMPUTE TABLE OFFSET 00416000
  420. CLI 0(R9),X'00' PAGE FREE? 00417000
  421. BNE MFIGLOOP NO 00418000
  422. BCT R6,MFIGLOOP COUNT IT AND CONTINUE 00419000
  423. L R6,TASKQ GET TASK QUEUE START 00420000
  424. MFIPFLOP EQU * 00421000
  425. CLC TASKNAME(4),LACTTNME IS THIS THE CORRECT TASK NAME? 00422000
  426. BE MFIPTAKE YES TAKE IT 00423000
  427. L R6,TASKNEXT GET THE NEXT TASK ELEMENT 00424000
  428. B MFIPFLOP AND COMPARE IT 00425000
  429. SPACE 1 00426000
  430. MFIPTAKE EQU * 00427000
  431. MVC 0(1,R9),TASKID MOVE THIS TASKID TO TABLE 00428000
  432. SLL R7,12 THIS IS THE PAGE 00429000
  433. LA R6,MSTKDATA-MSGSTACK(R7) THIS IS THE LOAD AND UNLOAD PNT 00430000
  434. ST R6,MSTKLOAD-MSGSTACK(R7) THIS IS THE LOAD POINT 00431000
  435. ST R6,MSTKUNLD-MSGSTACK(R7) AND ALSO THE UNLOAD POINT 00432000
  436. XC 0(4,R7),0(R7) CLEAR FORWARD POINTER 00433000
  437. ST R7,MSTKPTR AND ADD TO CHAIN 00434000
  438. LR R3,R7 AND UPDATE REGISTER POINTER 00435000
  439. EJECT 00436000
  440. MFISTK EQU * 00437000
  441. L R4,MSTKLOAD GET LOAD POINT 00438000
  442. STC R5,2(R1) STORE COUNT IN SAVED ELEMENT 00439000
  443. LA R5,1(R5) UP ONE FOR SEV 00440000
  444. EX R5,MFISTMVC AND MOVE IN STACK 00441000
  445. LA R5,1(R5) ADD IN 1 FOR COUNT 00442000
  446. AR R4,R5 CALCULATE NEW LOAD POINT 00443000
  447. ST R4,MSTKLOAD AND STORE AWAY 00444000
  448. SR R0,R0 CLEAR RETURN CODE 00445000
  449. B MFIXIT AND ENTER COMMON EXIT 00446000
  450. SPACE 1 00447000
  451. MFIGERR EQU * 00448000
  452. LA R0,16 INDICATE ERROR 00449000
  453. MFIXIT EQU * 00450000
  454. LTR R10,R10 RUNNING DISPATCHED? 00451000
  455. BZ MFINDXIT NO CONTINUE 00452000
  456. ST R0,TGREG15-TAREA(R14) STORE RETURN CODE 00453000
  457. L R15,DISPATCH GET DISPATCHER ENTRY POINT 00454000
  458. BALR R14,R15 AND EXIT 00455000
  459. SPACE 1 00456000
  460. MFINDXIT EQU * 00457000
  461. LM R1,R11,MFSAVE+4 RESTORE REGS 00458000
  462. LR R15,R0 SET RETURN CODE 00459000
  463. BR R14 AND RETURN 00460000
  464. SPACE 1 00461000
  465. MFISTMVC MVC 0(0,R4),2(R1) TO BE EXECUTED FROM ABOVE 00462000
  466. EJECT 00463000
  467. *. 00464000
  468. * 00465000
  469. * ENTRY NAME - 00466000
  470. * 00467000
  471. * MFO 00468000
  472. * 00469000
  473. * FUNCTION - 00470000
  474. * 00471000
  475. * THIS ROUTINE WILL UNSTACK MESSAGE ELEMENTS FROM THE 00472000
  476. * MESSAGE QUEUE FOR THIS TASK. IF NONE ARE QUEUED AN 00473000
  477. * ERROR CONDITION IS RETURNED. 00474000
  478. * 00475000
  479. * CALLS TO OTHER ROUTINES - 00476000
  480. * 00477000
  481. * NONE 00478000
  482. * 00479000
  483. * ENTRY CONDITIONS - 00480000
  484. * 00481000
  485. * R1 - ADDR OF USERS MESSAGE BUFFER 00482000
  486. * R2 - ADDR OF THIS TASKS LINK TABLE ENTRY 00483000
  487. * 00484000
  488. * EXIT CONDITIONS - 00485000
  489. * 00486000
  490. * R15 - X'00' MESSAGE IS IN BUFFER 00487000
  491. * X'10' NO MESSAGES ARE QUEUED 00488000
  492. * 00489000
  493. * OPERATION - 00490000
  494. * 00491000
  495. * 1. IF MSGS ARE PRESENT MOVE TO USERS BUFFER. IF NOT 00492000
  496. * RETURN WITH ERROR. 00493000
  497. * 00494000
  498. * 2. IF PAGE IS COMPLETELY EMPTY FREE THE PAGE 00495000
  499. * 00496000
  500. * RESPONSES - 00497000
  501. * 00498000
  502. * NONE 00499000
  503. * 00500000
  504. * ERROR MESSAGES - 00501000
  505. * 00502000
  506. * NONE 00503000
  507. * 00504000
  508. *. 00505000
  509. SPACE 2 00506000
  510. MFO DC 0H'0' 00507000
  511. USING *,R15 GET ADDRESSABILITY 00508000
  512. CLI ACTIVE,X'00' ARE WE RUNNING DISPATCHED? 00509000
  513. BE MFONODSP YES 00510000
  514. FREEZE STOP IT ALL 00511000
  515. LA R10,16 INDICATE RUNNING DISPATCHED 00512000
  516. B MFOPNT AND CONTINUE 00513000
  517. SPACE 1 00514000
  518. MFONODSP EQU * 00515000
  519. STM R0,R10,MFSAVE SAVE REGISTERS 00516000
  520. SR R10,R10 CLEAR INDICATING NON DISPATCHED 00517000
  521. MFOPNT EQU * 00518000
  522. ICM R3,B'1111',LMSGQ GET THE MSG BUFFER POINTER 00519000
  523. BZ MFONOMSG NO MSGS TO BE HAD 00520000
  524. L R4,MSTKUNLD GET THE UNLOAD POINT 00521000
  525. SR R5,R5 CLEAR FOR IC 00522000
  526. IC R5,0(R4) INSERT THE ELEMENT COUNT 00523000
  527. LA R5,1(R5) UP BY ONE FOR SEVERITY 00524000
  528. EX R5,MFOMVC MOVE TO USERS BUFFER 00525000
  529. LA R5,1(R5) INCLUDE THE COUNT BYTE 00526000
  530. AR R4,R5 CALCULATE NEW UNLOAD POINT 00527000
  531. SR R0,R0 CLEAR RETURN BYTE 00528000
  532. ST R4,MSTKUNLD UPDATE UNLOAD POINT 00529000
  533. CL R4,MSTKLOAD NOTHING LEFT IN PAGE? 00530000
  534. BL MFOXIT YES..EXIT 00531000
  535. MVC LMSGQ(4),MSTKPTR DECHAIN PAGE 00532000
  536. SRL R3,12 CALCULATE PAGE TABLE ENTRY 00533000
  537. L R2,MAINMAP GET MAIN STORAGE MAP ADDR 00534000
  538. ALR R2,R3 GET OFFSET INTO TABLE 00535000
  539. MVI 0(R2),X'00' CLEAR IT 00536000
  540. B MFOXIT AND ENTER COMMON EXIT 00537000
  541. SPACE 1 00538000
  542. MFONOMSG EQU * 00539000
  543. LA R0,16 INDICATE NO MESSAGES 00540000
  544. MFOXIT EQU * 00541000
  545. LTR R10,R10 RUNNING DISPATCHED? 00542000
  546. BZ MFONDXIT NO CONTINUE 00543000
  547. ST R0,TGREG15-TAREA(R14) STORE RETURN CODE 00544000
  548. L R15,DISPATCH GET DISPATCHER ENTRY POINT 00545000
  549. BALR R14,R15 AND EXIT 00546000
  550. SPACE 1 00547000
  551. MFONDXIT EQU * 00548000
  552. LM R1,R10,MFSAVE+4 RESTORE REGS 00549000
  553. LR R15,R0 SET RETURN CODE 00550000
  554. BR R14 AND RETURN 00551000
  555. SPACE 1 00552000
  556. MFOMVC MVC 0(0,R1),0(R4) TO BE EXECUTED FROM ABOVE 00553000
  557. SPACE 1 00554000
  558. MFSAVE DS 12F SAVE AREA FOR MFI AND MFO 00555000
  559. EJECT 00556000
  560. *. 00557000
  561. * 00558000
  562. * ENTRY NAME - 00559000
  563. * 00560000
  564. * GTODEBCD 00561000
  565. * 00562000
  566. * FUNCTION - 00563000
  567. * 00564000
  568. * CONVERT A S/370 FORMAT TOD TO EBCDIC DATE AND TIME. 00565000
  569. * 00566000
  570. * CALLS TO OTHER ROUTINES - 00567000
  571. * 00568000
  572. * NONE 00569000
  573. * 00570000
  574. * OPERATION - 00571000
  575. * 00572000
  576. * 1. CONVERT TIME AND DATE AND EDIT INTO USER 00573000
  577. * SUPPLIED FIELD. 00574000
  578. * 00575000
  579. * 2. OBTAIN DAY OF THE WEEK AND TIME ZONE 00576000
  580. * AND MOVE INTO USER SUPPLIED FIELD 00577000
  581. * 00578000
  582. * ENTRY - 00579000
  583. * 00580000
  584. * R0, R1=S/370 FORMAT TOD TO BE CONVERTED 00581000
  585. * R2=ADDRESS OF A FIELD INTO WHICH THE OUTPUT 00582000
  586. * IS TO BE EDITED BY MEANS OF AN EDIT INSTR. 00583000
  587. * (THIS FIELD MUST START WITH A BYTE SET TO 00584000
  588. * ONE LESS THAN THE TOTAL LENGTH OF THE FIELD, 00585000
  589. * WHICH SHOLUD CONTAIN AN EDITING MASK, INTO 00586000
  590. * WHICH THE RESULT IS TO BE PLACED. 00587400
  591. * BLANKS ARE MOVED INTO THE SIX BYTE FIELD 00587800
  592. * IMMEDIATELY FOLLOWING THE SPECIFIED 00588200
  593. * OUTPUT EDITING FIELD.) 00590000
  594. * 00591000
  595. * R13= ADDRESS OF AN 21 FW FIELD OF THE FOLLOWING 00592000
  596. * INITIAL FORMAT: 00593000
  597. * 00594000
  598. * DC 3D'0' FOR DATE AND TIME DECIMAL CONVERSION 00595000
  599. * DC A(0) FIELD TO RECEIVE CONVERTED DAY OF THE WK 00596000
  600. * DC F'-1' TO HOLD LAST CALCULATION ELAPSED HOURS 00597000
  601. * DC A(0+4) SW USED AS AN INDEX, FOR STD VS DLT 00598000
  602. * DC A(TIMEZON+4) ADDR OF TIMEZON TABLE IN CALLERS 00599000
  603. * STORAGE 00600000
  604. * DC 11F'0' SAVE AREA 00601000
  605. * 00602000
  606. * NOTE: THIS AREA SHOULD NOT BE MODIFIED AFTER THE INITIAL CALL 00603000
  607. * 00604000
  608. * EXIT - 00605000
  609. * 00606000
  610. * DATE, TIME, AND TIME ZONE HAVE BEEN GENERATED AND 00607000
  611. * AND MOVED TO THE SPECIFIED OUTPUT AREA. 00608000
  612. * 00609000
  613. EJECT 00610000
  614. * 00611000
  615. * RESPONSES - 00612000
  616. * 00613000
  617. * NONE 00614000
  618. * 00615000
  619. * ERROR MESSAGES - 00616000
  620. * 00617000
  621. * NONE 00618000
  622. * 00619000
  623. *. 00620000
  624. SPACE 2 00621000
  625. TODEBCD DC 0H'0' 00622000
  626. USING *,R15 GET ADDRESSABILITY 00623000
  627. USING TODDSECT,R13 GET COMMON AREA ADDRESSABILITY 00624000
  628. STM R0,R10,TODSAVE+4*R0 SAVE REGISTERS TO BE MODIFIED 00625000
  629. TODRETRY EQU * 00626000
  630. SRDL R0,12 RIGHT JUST TIME OF DAY MICROSECONDS 00627000
  631. LM R3,R5,TODEBCON LOAD KEY VALUES FROM LAST COMP 00628000
  632. LA R10,0(R4,R5) R10=ADDR OF APPROPRIATE TIMEZONE ENT 00629000
  633. SLR R6,R6 CLEAR R6 FOR RETURN FIELD LENGTH 00630000
  634. IC R6,0(R2) R6=LENGTH OF CALLER'S EDIT MASK 00631000
  635. LA R2,1(R6,R2) R2=ADDR OF RETURN FIELD FOR TIMEZONE 00632000
  636. MVC 0(6,R2),2(R10) GIVE CALLER TIMEZONE NAME IN EBCDIC 00633000
  637. D R0,F60MEG 370 TOD BY 60,000,000(NO. USEC/MIN) 00634000
  638. LR R10,R0 R10=ODD MICROSECONDS LESS THAN A MIN 00635000
  639. SLR R0,R0 CLEAR R0 FOR MORE DIVIDING 00636000
  640. AH R1,0(R4,R5) ADJUST TIMEZONE DIFFERENCE FROM GMT 00637000
  641. D R0,F60 DIVIDE MINUTES BY 60 TO GET HOURS 00638000
  642. LR R9,R0 R9=ODD MINUTES LESS THAN AN HOUR 00639000
  643. CLR R1,R3 HOUR SAME AS FOR THE LAST CONV? 00640000
  644. BNE NEWHOUR NOPE-GOTTA GO DO A COMPLETE COMP 00641000
  645. TODFINIS EQU * 00642000
  646. LR R1,R10 R1=ODD MICROSECONDS LESS THAN A MIN 00643000
  647. SLR R0,R0 CLEAR R0 FOR DIVIDE 00644000
  648. D R0,F10 R1=SECONDS TO FIVE DECIMAL PLACES 00645000
  649. M R8,F10MEG SHIFT MINUTES LEFT SEVEN PLACES DEC 00646000
  650. ALR R9,R1 SET SEC AND FRACTION TO RIGHT OF MIN 00647000
  651. CVD R9,MMSSMMMM FIELD=DECIMAL '000000MMSSMMMMMZ' 00648000
  652. IC R0,MMSSMMMM+3 SAVE DECIMAL MINUTES THROUGH MVO 00649000
  653. MVO MMSSMMMM-2(6),MMDDYYHH+3(5) APPEND DATE AND HOUR 00650000
  654. STC R0,MMSSMMMM+3 RESTORE MINUTES CLOBBERED BY ZONE 00651000
  655. L R2,TODSAVE+4*R2 RESTORE CALLER'S R2 00652000
  656. IC R1,0(R2) R1=LENGTH OF CALLER'S EDIT MASK 00653000
  657. MVI 0(R2),C' ' SET FILL CHARACTER OF MASK TO A BLNK 00654000
  658. EX R1,TODEDIT EDIT OUTPUT INTO CALLER'S FIELD 00655000
  659. LM R0,R10,TODSAVE+4*R0 RESTORE MODIFIED CALLER'S REGS 00656000
  660. L R15,DAYNUMBR SET RETURN DAY OF WEEK 0 -> 6 IN R15 00657000
  661. BR R14 AND RETURN TO THE CALLER 00658000
  662. SPACE 00659000
  663. TODEDIT ED 0(0,R2),MMSSMMMM-1 EDIT TO BE EXECUTED BY ABOVE CODE 00660000
  664. SPACE 00661000
  665. NEWHOUR EQU * 00662000
  666. ST R1,TODEBCON SAVE HOUR COMPUTATION FOR NEXT CALL 00663000
  667. SLR R0,R0 CLEAR R0 FOR MORE DIVIDING 00664000
  668. D R0,F24 DIV HRS BY 24 TO GET DAYS AND ODD HR 00665000
  669. LR R8,R0 R8=ODD HOURS LESS THAN ONE DAY 00666000
  670. SPACE 00667000
  671. FIRSTDAY EQU 1 - JANUARY 1, 1900, WAS A MONDAY 00668000
  672. SPACE 00669000
  673. LA R3,FIRSTDAY(R1) R3=DAY COUNT SINCE SUNDAY LONG PAST 00670000
  674. SLR R2,R2 CLEAR R2 FOR DIVIDE TO FOLLOW 00671000
  675. D R2,F7 R2=CURRENT WEEKDAY NUMBER 0 -> 6 00672000
  676. ST R2,DAYNUMBR SAVE WEEKDAY FOR LATER REF AND RET 00673000
  677. SPACE 00674000
  678. SLR R7,R7 ASSUME NO LEAPYEAR FOR NOW 00675000
  679. S R1,F365 SUBTRACT THE DAYS IN 1900 00676000
  680. BM YEAR1900 DEAL WITH SPEC PROB IF YEAR IS 1900 00677000
  681. SLR R0,R0 CLEAR R0 FOR YET MORE DIVIDING 00678000
  682. D R0,F1461 DIV DYS BY DYS IN 4 YEARS((4*365)+1) 00679000
  683. SLL R1,2 MULT QUOTIENT BY FOUR TO GET YEARS 00680000
  684. LA R5,1(R1) R5=YEARS LESS ODD YEARS NORM TO 1900 00681000
  685. LR R3,R0 R3=REMAINING DAYS 00682000
  686. SLR R2,R2 CLEAR R2 FOR IMPENDING DIVIDE 00683000
  687. D R2,F365 GET NUM OF ODD YRS AND ODD DYS LEFT 00684000
  688. CL R3,F3 CHECK FOR PRESENCE OF LEAPYEAR 00685000
  689. BL YEARSET GO FIN YEAR NUMBER IF NOT LEAPYEAR 00686000
  690. LA R7,1 ADJUST EXTRA DAY REG FOR LEAPYEAR 00687000
  691. BE YEARSET COMP YEAR NUM IF NO SPECIAL PROB 00688000
  692. BCTR R3,0 OTHERWISE SET ODD YEAR REG BACK TO 3 00689000
  693. LA R2,365 SET DY OF YR TO LAST DAY OF LEAPYEAR 00690000
  694. YEARSET EQU * 00691000
  695. ALR R5,R3 ADD ODD YRS TO FORM EXACT YEAR IN R5 00692000
  696. DATECALC EQU * 00693000
  697. LA R2,1(R2) BUMP DATE TO STA AT ONE RATH THAN 0 00694000
  698. LA R1,59(R7) R1=60 IF LEAPYEAR, 59 IF NOT 00695000
  699. CLR R2,R1 IS THE DATE PAST FEBRUARY? 00696000
  700. BNH WINTER NOPE - LET THE DATE STAND AS IT IS 00697000
  701. LA R2,2(R2) SET FOR NON LEAPYEAR INITIALLY... 00698000
  702. SLR R2,R7 DEC BY ONE IF DATE IS OF A LEAPYEAR 00699000
  703. WINTER EQU * 00700000
  704. LA R3,91(R2) R3=DATE OF YEAR + 91 00701000
  705. LR R7,R3 R7=SAME THING 00702000
  706. M R2,F2145 MAGIC NUMBER - NO INTUITIVE EXPL 00703000
  707. SRL R3,16 DIV BY 65536 TO GET MONTH NUMBER + 2 00704000
  708. LR R6,R3 R6=NUMBER OF MONTH + 2 00705000
  709. BCTR R6,0 R6=NUMBER OF MONTH + 1 00706000
  710. BCTR R6,0 R6=NUMBER OF MONTH EXACTLY 00707000
  711. M R2,F1955 MULTIPLY BY ANOTHER MAGIC NUMBER 00708000
  712. SRL R3,6 DIV BY 64 GET TOT DYS IN PAST MON+91 00709000
  713. SLR R7,R3 R7=EXACT DATE OF MONTH 00710000
  714. LA R0,4 SET TIME TYPE FLAG TO DIFF TABLE DIS 00711000
  715. LCR R0,R0 SET FLAG TO STAN TIME (-4) INITIALLY 00712000
  716. CL R6,F4 COMPARE MONTH NUMBER TO APRIL NUMBER 00713000
  717. BL FLAGCHEK FLAG IS CORRECT GO LOOK AT CALC FLAG 00714000
  718. LA R1,0 INIT MON INDICATOR INCASE OF BRANCH 00715000
  719. BE DETAILS DO A CLOSE INSP IF DATE IS IN APRIL 00716000
  720. CL R6,F10 AFTER APRIL-COMPARE MONTH TO OCT 00717000
  721. BH FLAGCHEK DATE IS AFT OCT-STANDARD TIME SET OK 00718000
  722. LA R0,4 OTHERWISE RESET FLAG TO DAYLITE TIME 00719000
  723. BL FLAGCHEK FLAG SET PROP IF AFT APR BEFORE OCT 00720000
  724. LA R1,1 MUST CHECK CLOSELY - SET OCT IND 00721000
  725. DETAILS EQU * 00722000
  726. LA R2,30(R1) R2=DAYS IN MONTH - APRIL OR OCTOBER 00723000
  727. LA R4,7(R7) R4=COMPUTED DATE OF MONTH + 7 00724000
  728. SR R4,R2 R4=NUM OF DAYS PAST IN LAST WK OF MO 00725000
  729. BM FLAGCHEK DATE COMP IS PRIOR TO STA OF LAST WK 00726000
  730. CL R4,DAYNUMBR WILL SUNDAY OCCUR BETWEEN 00727000
  731. * TOMORROW AND THE END OF THE MONTH? 00728000
  732. BNH FLAGCHEK YES - TIME FLAG IS SET PROPERLY 00729000
  733. CLI DAYNUMBR+3,X'00' IS COMPUTED DATE SUNDAY, PERHAPS? 00730000
  734. BNE INVERT NOPE-AFTER SUN-INVERT FLAG AND CONT 00731000
  735. L R4,TODEBCON+4 R4=FLAG USED IN PRIOR COMPUTATION 00732000
  736. SRA R4,4 R4=-1 IF STAN USD; 0 IF DAYLITE USD 00733000
  737. LCR R1,R1 R1=0 IF MONTH APR; -1 IF MONTH OCT 00734000
  738. LA R2,3(R1,R4) R2=HOUR CHANGE COMP: 1, 2, OR 3 00735000
  739. CLR R8,R2 IS COMPUTED TIME BEFORE TIME CHANGE? 00736000
  740. BNH FLAGCHEK YES - FLAG HAS BEEN PROPERLY SET @VA07031 00737100
  741. INVERT EQU * 00738000
  742. LCR R0,R0 INVERT TIME FLAG TO PROPER SETTING 00739000
  743. FLAGCHEK EQU * 00740000
  744. CL R0,TODEBCON+4 NOW - DID WE USE THE RIGHT TIME TYPE? 00741000
  745. BNE SETRETRY NO-MUST DO THE WHOLE COMP OVER AGAIN 00742000
  746. SPACE 00743000
  747. LA R2,100 SET DIVISOR FOR DEC MANIPULATIONS 00744000
  748. LR R1,R6 R1=HEXADECIMAL MONTH NUMBER 00745000
  749. MR R0,R2 SHIFT MONTH LEFT TWO PLACES DECIMAL 00746000
  750. ALR R1,R7 SET DAY NUMBER INTO ACCUMULATION 00747000
  751. MR R0,R2 SHIFT MMDD LEFT TWO PLACES DECIMAL 00748000
  752. SLR R4,R4 CLEAR R4 FOR R5 YEAR DIVIDE 00749000
  753. DR R4,R2 R4=YEAR NUMBER MODULO CENTURY 00750000
  754. ALR R1,R4 SET TRUNCATED YEAR NUM INTO ACCUM 00751000
  755. MR R0,R2 SHIFT MMDDYY LEFT TWO PLACES DECIMAL 00752000
  756. ALR R1,R8 SET HOUR NUMBER INTO ACCUMULATION 00753000
  757. CVD R1,MMDDYYHH FIELD=DECIMAL '0000000MMDDYYHHZ' 00754000
  758. B TODFINIS GO BACK TO MAINLINE CODE TO FIN UP 00755000
  759. SPACE 00756000
  760. YEAR1900 EQU * 00757000
  761. LA R2,365(R1) UNDO DAMAGE TO DATE OF YEAR 00758000
  762. SLR R5,R5 SET YEAR NUMBER TO ZERO 00759000
  763. B DATECALC AND GO CALCULATE THE DATE OF YEAR 00760000
  764. SPACE 00761000
  765. SETRETRY EQU * 00762000
  766. SLR R1,R1 SET R1 TO ZERO AND... 00763000
  767. BCTR R1,0 DECREMENT TO SET R1 TO -1 00764000
  768. ST R1,TODEBCON DUM UP LAST HR VAL TO FORCE RECAL 00765000
  769. ST R0,TODEBCON+4 SET PROP TIME TYPE FLAG FOR NEXT TRY 00766000
  770. LM R0,R2,TODSAVE+4*R0 RESTORE CALLER'S INPUT REGISTERS 00767000
  771. B TODRETRY AND START FROM THE TOP AGAIN 00768000
  772. SPACE 00769000
  773. F60MEG DC F'60000000' 00770000
  774. F60 DC F'60' 00771000
  775. F10 DC F'10' 00772000
  776. F10MEG DC F'10000000' 00773000
  777. F24 DC F'24' 00774000
  778. F7 DC F'7' 00775000
  779. F365 DC F'365' 00776000
  780. F1461 DC F'1461' 00777000
  781. F3 DC F'3' 00778000
  782. F2145 DC F'2145' 00779000
  783. F1955 DC F'1955' 00780000
  784. F4 DC F'4' 00781000
  785. EJECT 00782000
  786. TODDSECT DSECT 00783000
  787. MMDDYYHH DS 1D TO HOLD NEW HOUR CALCULATION IN DEC 00784000
  788. DS 1D FOR APPENDING MMDDYYHH TO MMSSMMMM 00785000
  789. MMSSMMMM DS 1D TO RECEIVE DECIMAL MINUTE AND SECOND 00786000
  790. DAYNUMBR DS 1A TO RECEIVE COMPUTED DAY OF WEEK 0->6 00787000
  791. TODEBCON DS 1F,2A SEE BELOW 00788000
  792. * DC F'-1' TO HOLD LAST CALC ELAPSED HRS 00789000
  793. * DC A(0+4) SWITCH, USED AS AN INDEX, FOR STD VS. DLT TIME 00790000
  794. * DC A(TIMEZON+4) EXT ADDR OF TIMEZONE DISP TAB 00791000
  795. TODSAVE DC 11F'0' TODEBCD ROUTINE SAVE AREA 00792000
  796. EJECT 00793000
  797. MSGSTACK DSECT 00794000
  798. SPACE 1 00795000
  799. *** MSGSTACK - MESSAGE STACK BUFFER 00796000
  800. * 00797000
  801. * 0 +-----------------------+-----------------------+ 00798000
  802. * | MSTKPTR | MSTKLOAD | 00799000
  803. * 8 +-----------------------+-----------------------+ 00800000
  804. * | MSTKUNLD | | 00801000
  805. * 10 +-----------------------+ | 00802000
  806. * | | 00803000
  807. * | MSTKDATA | 00804000
  808. * | | 00805000
  809. * 1000 +-----------------------------------------------+ 00806000
  810. * 00807000
  811. *** MSGSTACK - MESSAGE STACK BUFFER 00808000
  812. SPACE 1 00809000
  813. MSTKPTR DS 1A ADDRESS OF NEXT MSG STACK PAGE 00810000
  814. MSTKLOAD DS 1A THIS PAGE LOAD POINT ADDRESS 00811000
  815. MSTKUNLD DS 1A THIS PAGE UNLOAD POINT ADDRESS 00812000
  816. MSTKDATA EQU * THIS PAGE FIRST DATA ADDRESS 00813000
  817. EJECT 00814000
  818. COPY SVECTORS 00815000
  819. EJECT 00816000
  820. COPY TASKE 00817000
  821. EJECT 00818000
  822. COPY TAREA 00819000
  823. EJECT 00820000
  824. COPY LINKTABL 00821000
  825. EJECT 00822000
  826. COPY RSSEQU 00823000
  827. END 00824000