Table of Contents

DMKDIB Source

References

Source Listing

DMKDIB.ASSEMBLE.txt
  1. DIB TITLE 'DMKDIB (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 VALIDATE SEQUENCING OF SYSIN 00002000
  3. COPY OPTIONS 00003000
  4. COPY LOCAL 00004000
  5. EJECT 00005000
  6. DMKDIB START 00006000
  7. SPACE 00007000
  8. DC CL8'DMKDIB' PAGEABLE MODULE IDENTIFIER 00008000
  9. SPACE 00009000
  10. USING PSA,R0 00010000
  11. USING VMBLOK,R11 00011000
  12. USING SAVEAREA,R13 00012000
  13. SPACE 00013000
  14. EXTRN DMKACODV,DMKBLDVM,DMKCFPRD,DMKCVTBD @VA13704 00014000
  15. EXTRN DMKCVTBH,DMKCVTHB,DMKERMSG,DMKRIORN @VA13704 00014200
  16. EXTRN DMKRNHND,DMKSCHRT,DMKSCNAU,DMKSCNFD @VA13704 00014400
  17. EXTRN DMKSCNRD,DMKSCNRN,DMKSCNRU,DMKSCNVD @VA13704 00014600
  18. EXTRN DMKSCNVU,DMKSTKCP,DMKSYSND,DMKVCARS @VA13704 00014800
  19. EXTRN DMKSTKIO @V407510 00015000
  20. EXTRN DMKSYSRM @V407510 00016000
  21. EJECT 00924000
  22. *. 00925000
  23. * MODULE NAME - 00926000
  24. * 00927000
  25. * 00927100
  26. * DMKDIB 00927200
  27. * 00927300
  28. * CONTENTS - 00927400
  29. * 00927500
  30. * DMKDIBDR - DROP A DIALED LINE FROM A VIRTUAL MACHINE @VA13704 00927600
  31. * DMKDIBCP - 'COUPLE' VIRTUAL CHANNEL-TO-CHANNEL ADAPTER@VA13704 00927700
  32. * DMKDIBSM - SIMULATE STATUS FOR NOT-YET-DIALED LINE OR FOR 00928000
  33. * NOT-YET-COUPLED CHANNEL-TO-CHANNEL ADAPTER 00929000
  34. * 00930000
  35. * FUNCTION - 00931000
  36. * 00932000
  37. * DMKDIBSM WILL SIMULATE SENSE DATA AND STATUS FOR VIRTUAL 00933000
  38. * I/O TO A SIMULATED I/O DEVICE (2702 LINE OR CTCA) WHICH 00934000
  39. * HAS NOT YET BEEN 'ACTIVATED' THROUGH EITHER THE CONSOLE 00935000
  40. * FUNCTION 'DIAL' (FOR 2702 LINES) OR THE CONSOLE FUNCTION 00936000
  41. * 'COUPLE' (FOR VIRTUAL CTCA'S). 00937000
  42. * 00938000
  43. * ENTRY POINT - 00939000
  44. * 00940000
  45. * DMKDIBSM 00941000
  46. * 00942000
  47. * ENTRY CONDITIONS - 00943000
  48. * 00944000
  49. * GPR 2 = 0 (FOR 2702 LINE) OR 'TYPCTCA' (FOR CTCA) 00945000
  50. * OR TYP3277 FOR 3270 00946000
  51. * GPR 8 = DISPLACEMENT (FROM VMDVSTRT) TO VDEVBLOK 00947000
  52. * GPR 10 = ADDRESS OF IOBLOK AND CCW PACKAGES FOR I/O 00948000
  53. * GPR 11 = VMBLOK ADDRESS 00949000
  54. * GPR 12 = ADDRESS OF DMKDIBSM 00950000
  55. * GPR 13 = ADDRESS OF STANDARD SAVE-AREA 00951000
  56. * 00952000
  57. * EXIT CONDITIONS - 00953000
  58. * 00954000
  59. * GPRS 0-15 UNCHANGED 00955000
  60. * IOBLOK HAS BEEN UPDATED AND STACKED VIA 'DMKSTKIO' 00956000
  61. * 00957000
  62. * CALLS TO OTHER ROUTINES - 00958000
  63. * 00959000
  64. * DMKSTKIO - TO STACK THE IOBLOK FOR HANDLING BY DMKVIO 00960000
  65. * DMKFREE - TO OBTAIN STORAGE FOR AN IOERBLOK, IF NEEDED 00961000
  66. * DMKDIBDR - TO DROP A DIALED LINE @VA13704 00962000
  67. * 00963000
  68. * EXTERNAL REFERENCES - NONE 00964000
  69. * 00965000
  70. * TABLES / WORK AREAS - IOBLOK 00966000
  71. * 00967000
  72. * REGISTER USAGE - 00968000
  73. * 00969000
  74. * GPR 13 = SAVE-AREA ADDRESSABILITY 00970000
  75. * GPR 12 = MODULE BASE ADDRESSABILITY 00971000
  76. * GPR 11 = VMBLOK ADDRESSABILITY 00972000
  77. * GPR 10 = IOBLOK ADDRESSABILITY 00973000
  78. * GPR 9 = RCWCCW ADDRESSABILITY 00974000
  79. * GPR 8 = VDEVBLOK ADDRESSABILITY 00975000
  80. * GPR 7 = CSW CCW ADDRESS 00976000
  81. * GPR 4 = CSW RESIDUAL COUNT 00977000
  82. * GPRS 0-3, 5-6 ARE WORK REGISTERS 00978000
  83. * 00979000
  84. EJECT 00980000
  85. * OPERATION - 00981000
  86. * 00982000
  87. * DMKDIBSM EXAMINES EACH CCW IN THE CCW STRING TO DETERMINE 00983000
  88. * WHAT STATUS AND/OR ACTION SHOULD BE TAKEN TO SIMULATE THE 00984000
  89. * ACTUAL OPERATION OF THE SIMULATED DEVICE BEING PROCESSED. 00985000
  90. * FOR A NOT-YET-DIALED 2702 LINE: 00986000
  91. * A. IF CCW IS A SENSE, SIMULATE SENSE DATA, ADVANCE 00987000
  92. * B. IF CCW IS A NO-OP, ADVANCE 00988000
  93. * C. IF CCW IS AN ENABLE, SET UP FOR PROCESSING BY D 00989000
  94. * 'DMKDIAL' WHEN 'DIAL' COMMAND IS ISSUED. 00990000
  95. * D. IF CCW IS NONE OF THE ABOVE, PRESENT UNIT CHECK, 00991000
  96. * INTERVENTION REQUIRED. 00992000
  97. * FOR AN ALREADY-DIALED LINE: (CCW STRING CONTAINS A DISABLE) 00993000
  98. * A. IF CCW IS NOT A DISABLE, ADVANCE 00994000
  99. * B. IF CCW IS A DISABLE, CALL DMKDIBDR TO DROP LINE 00995000
  100. * AND RESUME PROCESSING AS IF LINE IS NOT DIALED 00996000
  101. * FOR A NOT-YET-COUPLED CTCA: 00997000
  102. * A. IF CCW IS A SENSE, SIMULATE SENSE DATA, ADVANCE 00998000
  103. * B. IF CCW IS A NO-OP, ADVANCE 00999000
  104. * C. IF CCW IS NONE OF THE ABOVE, PRESENT UNIT CHECK, 01000000
  105. * INTERVENTIONREQUIRED. 01001000
  106. * FOR ALL CASES, AN INVALID CCW WILL CAUSE A PROGRAM CHECK 01002000
  107. * A SENSE INTO PROTECTED CORE WILL CAUSE A PROTECTION CHECK 01003000
  108. * 2702 LINES NEVER PRODUCE CC = 1 TO SIO, CTCA'S WILL. 01004000
  109. *. 01005000
  110. EJECT 01006000
  111. DMKDIBSM RELOC , SIMULATE ENDING STATUS FOR NOT-YET-DIAL-ED LINE 01007000
  112. USING IOBLOK,R10 01008000
  113. USING RCWCCW,R9 01009000
  114. USING VDEVBLOK,R8 01010000
  115. AL R8,VMDVSTRT RE-COMPUTE VDEVBLOK ADDRESS 01011000
  116. SPACE 01012000
  117. SLR R4,R4 SET RESIDUAL COUNT REGISTER ZERO 01013000
  118. SLR R6,R6 SET IOERBLOK POINTER ZERO, ALSO 01014000
  119. ST R6,SAVEWRK1 SET STATUS AND SENSE AREA ZERO 01015000
  120. MVI SAVEWRK1,CE+DE INITIALIZE FOR ENDING STATUS 01016000
  121. MVC IOBCSW(8),ZEROES CLEAR IOBCSW 01017000
  122. SPACE 01018000
  123. L R9,IOBCAW FIRST CCW ADDRESS 01019000
  124. TM IOBCAW,X'0F' CAW BITS 4-7 ZERO? @VA02143 01020000
  125. BC 5,DIAPRGC1 NO, CHAN. PROG. CK. @VA02143 01021000
  126. DIACCWS EQU * INTERPRET CCW STRING 01022000
  127. LA R7,8(0,R9) ADDRESS FOR CSW 01023000
  128. ICM R4,B'0011',RCWCNT RESIDUAL COUNT FOR CSW 01024000
  129. TM RCWCTL,RCWINVL IS THIS AN INVALID CCW ? 01025000
  130. BO DIASTAT YES - CHECK FOR WHY 01026000
  131. CLI RCWCOMND,X'08' IS THIS A TIC ? 01027000
  132. BE DIALTIC YES - DO THE TRANSFER 01028000
  133. CLI RCWCOMND,X'18' IS IT TIC AFTER CHAIN DATA ? 01029000
  134. BE DIALTIC YES - GO DO IT 01030000
  135. TM RCWFLAG,X'03' ARE THE 'MUST-BE-ZERO' BITS ZERO?@VA02143 01031000
  136. BNZ DIAPRGC1 NO, CHAN. PROG. CK. @VA02143 01032000
  137. CLI SAVER2+3,TYPCTCA CALLED FOR VIRT. CTCA ? 01033000
  138. BE DIALNOP YES - DON'T WORRY ABOUT ENABLE, DISABLE 01034000
  139. CLI SAVER2+3,TYP3277 3270 DEVICE ?? @V200730 01035000
  140. BE DIALNOP YES, DONT TEST FOR DISABLE @V200730 01036000
  141. CLI RCWCOMND,X'2F' IS THIS A DISABLE ? 01037000
  142. BE DISABLE YES - VERY SPECIAL TYPE CCW 01038000
  143. TM VDEVFLAG,VDEVDIAL IS THE LINE STILL DIALED ? 01039000
  144. BO DIALADV YES - SKIP OTHER CHECKING FOR NOW 01040000
  145. CLI RCWCOMND,X'27' IS THIS A RE-ENABLE ? 01041000
  146. BE RENABLE YES - SPECIAL STUFF HERE, TOO 01042000
  147. DIALNOP EQU * CHECK FOR SENSE OR NO-OP COMMAND 01043000
  148. TM RCWCOMND,B'00001011' IS IT A SENSE ? 01044000
  149. BZ DIASENS YES - PROCESS IT SPECIALLY 01045000
  150. TM RCWCOMND,X'03' CONTROL-TYPE COMMAND ? 01046000
  151. BNO DIASTAT NO -- GIVE UNIT CHECK, INT. REQ. 01047000
  152. TM RCWCOMND,X'0C' NO-OP OR SOME OTHER CONTROL ? 01048000
  153. BNZ DIASTAT SOME OTHER KIND - UNIT CHECK 01049000
  154. TM RCWFLAG,CC CHAINED NOP ? @VA03261 01050000
  155. BZ DIALCC1 NO..CHECK IF FIRST CCW @VA03261 01051000
  156. DIALADV EQU * ADVANCE TO NEXT CCW 01052000
  157. TM RCWFLAG,CC+CD CHAINED ? 01053000
  158. BZ DIALCSW NO - CLEAN ENDING 01054000
  159. LR R9,R7 NEXT ONE IN LINE... 01055000
  160. B DIACCWS ...AND KEEP ON LOOKING 01056000
  161. SPACE 01057000
  162. DIALTIC EQU * PROCESS TRANSFER IN CHANNEL 01058000
  163. CL R9,IOBCAW WORKING ON FIRST CCW? @VA02143 01059000
  164. BE DIAPRGC1 YES, CC=1 PROG. CK. @VA02143 01060000
  165. TM RCWCCW+3,X'07' DOUBLE-WORD ALIGNED? @VA02143 01061000
  166. BNZ DIAPRGC NO, CHAN. PROG. CK. @VA02143 01062000
  167. L R9,RCWADDR GET NEXT CCW ADDRESS @VA02143 01063000
  168. CLI RCWCOMND,X'08' TIC TO A TIC? @VA02143 01064000
  169. BE DIAPRGC YES, CHAN. PROG. CK. @VA02143 01065000
  170. B DIACCWS NO, KEEP GOING... @VA02143 01066000
  171. SPACE 2 01067000
  172. DIASTAT EQU * SET SENSE BYTE, CSW STATUS 01068000
  173. CLI RCWCOMND,X'00' IF OP-CODE IS ZERO, 01069000
  174. BNE DIASTA1 NO -- MUST BE INVALID OP-CODE 01070000
  175. CL R9,IOBCAW WORKING ON FIRST CCW? @VA02143 01071000
  176. BNZ DIAPRGC NO, CHAN. PROG. CK. WITH CE/DE @VA02143 01072000
  177. DIAPRGC1 EQU * NO C.E./D.E. STATUS @VA02143 01073000
  178. MVI SAVEWRK1,X'00' RESET CE/DE STATUS @VA02143 01074000
  179. DIAPRGC EQU * YES - CHANNEL PROGRAM CHECK 01075000
  180. MVI SAVEWRK1+1,PRGC ADD THIS TO STATUS 01076000
  181. B DIALCC1 ...AND GO SET THE CSW @VA02143 01077000
  182. DIASTA1 EQU * CHECK FOR INTREQ OR CMDREJ 01078000
  183. OI SAVEWRK1,UC SET UNIT CHECK IN STATUS 01079000
  184. MVI SAVEWRK1+2,INTREQ SET INTREQ IN SENSE DATA 01080000
  185. TM RCWCTL,RCWINVL IS IT ALSO INVALID OP ? 01081000
  186. BZ DIALCSW NO - ALL SET AS IS 01082000
  187. OI SAVEWRK1+2,CMDREJ COMMAND REJECT ALSO 01083000
  188. DIALCSW EQU * CONSTRUCT DUMMY CSW 01084000
  189. CLI SAVER2+3,TYPCTCA CALLED FROM DMKVCA ? 01085000
  190. BE DIALCC1 YES, CONT @V200730 01086000
  191. CLI SAVER2+3,TYP3277 3270 DEVICE ?? @V200730 01087000
  192. BE DIALCC1 YES - MIGHT BE CC=1 @VA04021 01088000
  193. CLI 0(R9),X'03' NO-OP TO A DIAL LINE? @VA04021 01089000
  194. BNE DIALINT NO--FORCE CC=0, LATER INTERRUPT @VA04021 01090000
  195. DIALCC1 DS 0H CHECK FOR CC=1 WITH STATUS @VA04021 01091000
  196. CL R9,IOBCAW WORKING ON FIRST CCW ? 01092000
  197. BNE DIALINT NO -- PRESENT THE ERROR AS AN INTERRUPT 01093000
  198. CLI SAVEWRK1+3,X'80' WAS IT A SENSE COMMAND ? @V200820 01094000
  199. BE DIALINT YES - CANNOT GIVE CC = 1 @V200820 01095000
  200. CLI SAVER2+3,TYPCTCA @VA10350 01095100
  201. BNE DIALCC1A @VA10350 01095200
  202. TM VDEVSTAT,VDEVNRDY IS CTCA COUPLED? @VA10350 01095300
  203. BZ DIALCC1A YES @VA10350 01095400
  204. MVI IOBSTAT,IOBCC3 GIVE CC=3 @VA10350 01095500
  205. B DIALSTK @VA14572 01095650
  206. DIALCC1A DS 0H @VA10350 01095700
  207. MVI IOBSTAT,IOBCC1 SET CC = 1 TO SIO 01096000
  208. CLI SAVER2+3,TYP3277 3270 TYPE DEVICE @VA09176 01096100
  209. BNE DIALSAT @VA09176 01096200
  210. TM VDEVFLAG,VDEVDIAL IS THE LINE DIALED @VA09176 01096300
  211. BO DIALSAT @VA09176 01096400
  212. CLI RCWCOMND,X'03' IS THIS A NO-OP COMMAND @VA10844 01096430
  213. BE DIALSAT @VA10844 01096460
  214. NI SAVEWRK1,X'F3' NO-TURN OFF CE AND DE @VA09176 01096500
  215. B DIALSAT ...AND GO FILL IN CSW STATUS 01097000
  216. EJECT 01098000
  217. DIALINT EQU * PRESENT STATUS AS AN I/O INTERRUPT 01099000
  218. NI VMRSTAT,255-VMIOWAIT TAKE USER OUT OF IOWAIT 01100000
  219. STH R4,IOBCSW+6 RESIDUAL COUNT INTO CSW 01101000
  220. ST R7,IOBCSW SET CSW ADDRESS... 01102000
  221. IC R1,IOBCAW GET PROTECTION KEY FROM CAW 01103000
  222. STC R1,IOBCSW ...AND FILL IN CSW 01104000
  223. DIALSAT EQU * STORE CSW STATUS ONLY 01105000
  224. LH R1,SAVEWRK1 CSW STATUS... 01106000
  225. STH R1,IOBCSW+4 ... 01107000
  226. TM IOBCSW+4,UC DID WE CREATE A UNIT CHECK ? 01108000
  227. BZ DIALSTK NO - THAT'S MUCH EASIER 01109000
  228. LA R0,IOERSIZE GET AN IOERBLOK 01110000
  229. CALL DMKFREE ...FOR SENSE DATA 01111000
  230. LR R6,R1 01112000
  231. USING IOERBLOK,R6 01113000
  232. XC IOERBLOK(IOERSIZE*8),IOERBLOK CLEAR TO ZEROES 01114000
  233. MVC IOERCSW(8),IOBCSW FILL IN CSW 01115000
  234. LA R1,IOERDATA CONSTRUCT DUMMY SENSE CCW 01116000
  235. ST R1,IOERCCW ... 01117000
  236. MVI IOERCCW,X'04' ...MAKE IT A SENSE 01118000
  237. MVC IOERCCW+4(4),=AL1(SILI,0,0,1) FLAGS+LENGTH 01119000
  238. MVC IOERDATA(1),SAVEWRK1+2 SENSE BYTE 01120000
  239. DROP R6 01121000
  240. DIALSTK EQU * SETUP IOBLOK, STACK FOR DMKVIOEX 01122000
  241. ST R6,IOBIOER SET IOERBLOK PTR, IF ANY 01123000
  242. ST R11,IOBUSER MAKE SURE THIS IS CORRECT 01124000
  243. CALL DMKSTKIO ...AND STACK THE IOBLOK 01125000
  244. EXIT , RETURN TO DMKCCWTR 01126000
  245. EJECT 01127000
  246. DIASENS EQU * MIGHT BE A REAL SENSE 01128000
  247. MVI SAVEWRK1+3,X'80' REMEMBER THE 'SENSE' @V200820 01129000
  248. TM RCWFLAG,SKIP IF SKIP IS SET... 01130000
  249. BO SETCNT DMKCCW FAKED IT -- ADJUST COUNT @VM01012 01131000
  250. L R1,RCWADDR GET DATA ADDRESS 01132000
  251. LA R1,0(0,R1) STRIP OFF OP-CODE 01133000
  252. TM RCWFLAG,IDA IS IDA BIT SET ? 01134000
  253. BZ *+8 THANK HEAVENS -- IT'S NOT 01135000
  254. L R1,0(0,R1) GET ADDRESS FROM IDAL 01136000
  255. L R2,=A(DMKSYSRM) GET REAL MACHINE @VA03162 01137000
  256. L R2,0(,R2) SIZE... @VA03162 01138000
  257. CLR R1,R2 VALID ADDRESS @VA03162 01139000
  258. BNL DIAPRGC NO..CHANNEL PROGRAM CHECK @VA03162 01140000
  259. LR R2,R1 SAVE THE REAL ADDRESS 01141000
  260. CLI IOBCAW,0 CAW KEY ZERO ? @VA03814 01142000
  261. BE SETSENS YES..STORE SENSE BYTE.. @VA03814 01143000
  262. N R1,=X'00FFFFF0' ALIGN FOR AN 'ISK' 01144000
  263. ISK R1,R1 GET THE REAL STORAGE KEY 01145000
  264. N R1,F240 ISOLATE THE FOUR-BIT HUNK 01146000
  265. CLM R1,B'0001',IOBCAW DOES IT MATCH THE CAW ? 01147000
  266. BE SETSENS YES - LET HIM HAVE SOME DATA 01148000
  267. MVI SAVEWRK1+1,PRTC PROTECTION CHECK 01149000
  268. B DIALCSW GO SET CSW 01150000
  269. SETSENS EQU * RETURN SENSE DATA TO USER 01151000
  270. MVI 0(R2),X'40' SENSE IR @VA09186 01152100
  271. SETCNT BCTR R4,0 ADJUST GR4 FOR RESIDUAL COUNT @VM01012 01153000
  272. TM RCWFLAG,CD WAS THE SENSE DATA-CHAINED ? @VM01010 01154000
  273. BZ DIALADV NO -- CHECK FOR CMD CHAIN @VM01010 01155000
  274. MVI SAVEWRK1+1,IL INCORRECT LENGTH INDICATION @VM01010 01156000
  275. B DIALCSW GO PRESENT STATUS @VM01010 01157000
  276. SPACE 2 01158000
  277. DISABLE EQU * 'DISABLE' CCW ENCOUNTERED 01159000
  278. MVI SAVEWRK1+3,X'80' FORCE INTERRUPT IF 1ST CCW @VA08754 01159500
  279. MVI RCWCOMND,X'03' MAKE IT A NO-OP 01160000
  280. TM VDEVFLAG,VDEVDIAL IS THE LINE ACTIVE ? 01161000
  281. BZ DIALADV NO - SKIP 'DROP' CALL 01162000
  282. CALL DMKDIBDR DROP THE DIALED LINE @VA13704 01163000
  283. B DIALADV GO CONTINUE WITH CCW SCAN 01164000
  284. SPACE 01165000
  285. RENABLE EQU * 'ENABLE' CCW ENCOUNTERED AFTER 'DISABLE' 01166000
  286. MVI RCWCOMND,X'01' CHANGE ENABLE INTO WRITE CIRCLE-C 01167000
  287. LA R1,1(0,0) DATA COUNT 01168000
  288. STH R1,RCWCNT ... 01169000
  289. * DMKCCWTR HAS ALREADY SET UP THE DATA ADDRESS AND CIRCLE-C BYTE 01170000
  290. OI RCWFLAG,SILI ENSURE NO UNEXPECTED ERRORS 01171000
  291. ICM R9,B'1000',IOBCAW GET ORIGINAL CAW KEY 01172000
  292. ST R9,IOBRCAW ...AND SET THE RESTART CAW 01173000
  293. OI IOBFLAG,IOBRSTRT ...FOR 'DIAL' SEQUENCE 01174000
  294. OI VDEVFLAG,VDEVENAB DEVICE NOW ENABLED AGAIN 01175000
  295. ST R10,VDEVIOB PRESERVE THE IOBLOK ADDRESS 01176000
  296. EXIT , ...AND PASS IT BACK TO DMKCCWTR 01177000
  297. EJECT 01178000
  298. *. 01179000
  299. * SUBROUTINE NAME - 01180000
  300. * 01181000
  301. * DMKDIBDR - DROP A DIALED LINE FROM A VIRTUAL SYSTEM @VA13704 01182000
  302. * 01183000
  303. * FUNCTION - 01184000
  304. * 01185000
  305. * TO RELEASE A TERMINAL LINE WHICH HAS BEEN IN USE BY A 01186000
  306. * VIRTUAL SYSTEM VIA THE 'DIAL' COMMAND. THE LINE IS 01187000
  307. * DETACHED FROM THE VIRTUAL SYSTEM AND MADE AVAILABLE FOR 01188000
  308. * NORMAL LOGON TO VM/370. 01189000
  309. * 01190000
  310. * ENTRY POINT - 01191000
  311. * 01192000
  312. * DMKDIBDR @VA13704 01193000
  313. * 01194000
  314. * ENTRY CONDITIONS - 01195000
  315. * 01196000
  316. * GPR 8 = ADDRESS OF VDEVBLOK FOR DIALED LINE 01197000
  317. * GPR 11 = VMBLOK ADDRESS OF DIALED SYSTEM 01198000
  318. * GPR 12 = ADDRESS OF DMKDIBDR @VA13704 01199000
  319. * GPR 13 = ADDRESS OF STANDARD SAVE AREA 01200000
  320. * 01201000
  321. * EXIT CONDITIONS - 01202000
  322. * 01203000
  323. * GPRS 0-15 UNCHANGED 01204000
  324. * THE VDEVBLOK HAS BEEN MARKED NOT ENABLED, NOT DIALED, 01205000
  325. * THE OPERATOR AND THE DIALED USER HAVE BEEN INFORMED 01206000
  326. * OF THE LINE DROP, AND THE TERMINAL LINE IS AVAILABLE 01207000
  327. * FOR VM/370 LOGON OR ANOTHER 'DIAL'. 01208000
  328. * 01209000
  329. * CALLS TO OTHER ROUTINES - 01210000
  330. * 01211000
  331. * DMKACODV - FOR ACCOUNTING OF DEDICATED DEVICES 01212000
  332. * DMKBLDVM - TO BUILD A DUMMY VMBLOK FOR MESSAGES 01213000
  333. * DMKQCNWT - TO TYPE MESSAGES TO THE DIALED USER 01214000
  334. * DMKSCNRD - TO GET THE REAL ADDRESS OF THE TERMINAL 01215000
  335. * DMKSCNVD - TO GET THE VIRTUAL ADDRESS OF THE LINE 01216000
  336. * DMKCVTBH - TO CONVERT THE ADDRESSES TO EBCDIC 01217000
  337. * DMKFREE - TO OBTAIN FREE STORAGE FOR MESSAGE BUFFER 01218000
  338. * DMKFRET - TO RETURN DUMMY VMBLOK TO FREE STORAGE 01219000
  339. * DMKDSPCH - TO WAIT FOR MESSAGE COMPLETION 01220000
  340. * 01221000
  341. * EXTERNAL REFERENCES - 01222000
  342. * 01223000
  343. * DMKSYSND - NUMBER OF DIALED USERS 01224000
  344. * DMKSYSVM - SYSTEM VMBLOK CHAIN ANCHOR 01225000
  345. * 01226000
  346. * TABLES / WORK AREAS 01227000
  347. * 01228000
  348. * VDEVBLOK, RDEVBLOK, VMBLOK 01229000
  349. * 01230000
  350. EJECT 01231000
  351. * REGISTER USAGE - 01232000
  352. * 01233000
  353. * GPR 13 = SAVE-AREA ADDRESSABILITY 01234000
  354. * GPR 12 = MODULE BASE ADDRESSABILITY 01235000
  355. * GPR 11 = VMBLOK ADDRESSABILITY 01236000
  356. * GPR 9 = ADDRESS OF MESSAGE BUFFER 01237000
  357. * GPR 8 = VDEVBLOK, RDEVBLOK ADDRESSES 01238000
  358. * GPR 7 = CONSTANT ZERO 01239000
  359. * GPRS 0-6 ARE WORK REGISTERS 01240000
  360. * 01241000
  361. * OPERATION - 01242000
  362. * 01243000
  363. * DMKDIBDR FIRST CALLS DMKACODV TO HANDLE THE TIME ACCOUT- 01244000
  364. * ING FOR THE TIME THAT THE DIALED LINE WAS DEDICATED TO THE 01245000
  365. * VIRTUAL SYSTEM. NEXT, THE VIRTUAL DEVICE IS DISCONNECTED 01246000
  366. * FROM THE REAL DEVICE AND MARKED NON-ENABLED, NON-DIALED. 01247000
  367. * DMKBLDVM IS CALLED TO BUILD A TEMPORARY VMBLOK ASSOC- 01248000
  368. * IATED WITH THE PREVIOUSLY DIALED TERMINAL LINE, SUCH 01249000
  369. * THAT DMKDIBDR CAN SEND THE 'LINE XXX DROP' MESSAGE TO 01250000
  370. * THE DIALED USER. THE SYSTEM OPERATOR IS ALSO INFORMED OF 01251000
  371. * THE LINE DROP AND THE NUMBER OF DIALED USERS, DMKSYSND, 01252000
  372. * IS UPDATED. AFTER THE USER MESSAGE HAS COMPLETED, THE 01253000
  373. * DUMMY VMBLOK IS REMOVED FROM THE VMBLOK CHAIN AND RETURNED 01254000
  374. * TO FREE STORAGE VIA DMKFRET. EXIT. 01255000
  375. *. 01256000
  376. SPACE 4 01257000
  377. DMKDIBDR RELOC , DROP DIALED LINE FROM VIRTUAL SYSTEM @VA13704 01258000
  378. XC SAVEWRK1(4),SAVEWRK1 CLEAR FLAG BYTE AREA @V240820 01259000
  379. EJECT 01260000
  380. USING VDEVBLOK,R8 01261000
  381. L R6,VDEVREAL POINTER TO RDEVBLOK 01262000
  382. SLR R7,R7 GET A ZERO CONSTANT 01263000
  383. CALL DMKACODV DO DEVICE RELEASE ACCOUNTING 01264000
  384. * NOW START TO UN-DIAL THE LINE 01265000
  385. NI VDEVSTAT,X'FF'-VDEVDED NO LONGER DEDICATED DEVICE 01266000
  386. ST R7,VDEVREAL ... 01267000
  387. NI VDEVFLAG,X'FF'-(VDEVENAB+VDEVDIAL) MARK IT FREE 01268000
  388. CLI VDEVTYPC,CLASGRAF GRAF DEVICE ?? @V200730 01269000
  389. BNE NOGRAF NO,DO NOT MAKE IT @VA09186 01270000
  390. OI VDEVSTAT,VDEVNRDY NOT READY @VA09186 01271000
  391. B NRSET SKIP RESET @VA09186 01272000
  392. NOGRAF EQU * @VA09186 01273000
  393. NI VDEVTYPE,X'F0' LEAVE ONLY ADAPTER TYPE @VA09186 01274000
  394. NRSET LR R8,R6 ...WERE FINISHED WITH VDEVBLOK @VA09186 01275000
  395. SWITCH SWITCH TO MAIN PROCESSOR @V407510 01276000
  396. USING RDEVBLOK,R8 01277000
  397. NI RDEVSTAT,X'FF'-RDEVDED REAL DEVICE NOT DEDICATED 01278000
  398. STH R7,RDEVATT NO VIRTUAL ADDRESS 01279000
  399. TM RDEVFLAG,RDEVEPMD SWITCHED-MODE 370X LINE ? @V240820 01280000
  400. BZ SETUSER NO -- NO SPECIAL HANDLING @V240820 01281000
  401. LH R9,RDEVCYL RESOURCE I.D. OF THE NCP LINE @V240820 01282000
  402. L R7,RDEVCUA BACK UP TO THE CONTROL UNIT @V240820 01283000
  403. USING RCUBLOK,R7 . . . @V240820 01284000
  404. LH R1,RDEVADD DEVICE ADDRESS ALONE @V240820 01285000
  405. SLL R1,1(0) SHIFT FOR INDEX TO RCUDVTBL @V240820 01286000
  406. LA R1,RCUDVTBL(R1) POINT TO RDEVBLOK INDEX SLOT@V240820 01287000
  407. MVC 0(2,R1),FFS DISCONNECT RDEVBLOK FROM RCUBLOK @V240820 01288000
  408. DROP R7 @V240820 01289000
  409. LR R4,R8 SAVE THE DYNAMIC RDEVBLOK ADDRESS@V240820 01290000
  410. LH R1,RDEVBASE ADDRESS OF THE NATIVE SUB-CHANNEL@V240820 01291000
  411. CALL DMKSCNRU GET THE 370X NATIVE BLOCKS @V240820 01292000
  412. L R3,RDEVEPDV DYNAMIC RDEVBLOK CHAIN @V240820 01293000
  413. ST R4,RDEVEPDV ADD RELEASED BLOCK TO THE CHAIN @V240820 01294000
  414. ST R3,RDEVEPDV-RDEVBLOK(,R4) . . . @V240820 01295000
  415. L R2,=A(DMKRIORN) TABLE OF 370X RDEVBLOK'S @V240820 01296000
  416. L R3,0(0,R2) COUNT OF TABLE ENTRIES @V240820 01297000
  417. GETCODE EQU * COMPUTE 370X DEVICE CODE @V240820 01298000
  418. CH R1,6(0,R2) IS THIS THE CORRECT ENTRY ? @V240820 01299000
  419. BE SETCODE YES - BUILD RESOURCE REFERENCE @V240820 01300000
  420. LA R2,4(0,R2) NEXT ENTRY IN TABLE @V240820 01301000
  421. BCT R3,GETCODE . . . @V240820 01302000
  422. SETCODE EQU * BUILD TERMINAL RESOURCE REFERENCE@V240820 01303000
  423. S R2,=A(DMKRIORN) COMPUTE TABLE DISPLACEMENT @V240820 01304000
  424. SLL R2,10(0) SHIFT FOR REFERENCE FIELD @V240820 01305000
  425. LA R2,1(R2,R9) ADD ONE TO LINE RESOURCE I.D. @V240820 01306000
  426. STH R2,SAVEWRK3 SAVE THE VALUE FOR MESSAGES @V240820 01307000
  427. EJECT 01308000
  428. TM RDEVSTAT,RDEVNRDY IS THE NCP STILL ALIVE ? @V240820 01309000
  429. BO SETDEAD NO -- DON'T PANIC OVER IT @V240820 01310000
  430. TM RDEVFLAG,RDEVRCVY IS THE NCP STILL DYING ? @V240820 01311000
  431. BO SETDEAD YES - LEAVE IT ALONE @V240820 01312000
  432. TM RDEVFLAG,RDEVLNCP+RDEVLCEP MUST BE A PEP @V240820 01313000
  433. BNO SETDEAD NO -- WE MISSED THE FUNERAL @V240820 01314000
  434. MH R9,=AL2(NICSIZE*8) INDEX INTO THE NICBLOK LIST @V240820 01315000
  435. AL R9,RDEVNICL GR9 = LINE NICBLOK ADDRESS @V240820 01316000
  436. USING NICBLOK,R9 @V240820 01317000
  437. TM NICSTAT,NICSWEP+NICEPMD STILL AS WE LEFT IT ? @V240820 01318000
  438. BNO SETDEAD NO -- DO NOT DISTURB @V240820 01319000
  439. LA R0,CSWLNCP SWITCH LINE MODE TO THE NCP @V240820 01320000
  440. CALL DMKRNHND,PARM=0,AFFINITY SWITCH BACK TO NCP @V407510 01321000
  441. BNZ SETDEAD BAIL OUT IF THE NCP DIES @V240820 01322000
  442. LH R0,0(0,R1) SIZE OF THE RESPONSE BUFFER @V240820 01323000
  443. CALL DMKFRET RETURN THE FREE STORAGE @V240820 01324000
  444. NI NICSTAT,255-(NICDISA+NICEPMD) BACK IN NCP MODE @V240820 01325000
  445. LA R9,NICSIZE*8(0,R9) FORWARD TO THE TERMINAL @V240820 01326000
  446. NI NICSTAT,255-NICDISA TERMINAL IS BACK ONLINE @V240820 01327000
  447. OI NICFLAG,NICSESN+NICENAB ENABLED AGAIN @V240820 01328000
  448. OI SAVEWRK1,NCPTERM REMEMBER THE 370X NCP @V240820 01329000
  449. DROP R9 @V240820 01330000
  450. SPACE 01331000
  451. SETUSER EQU * CREATE A TEMPORARY DUMMY USER @V240820 01332000
  452. CALL DMKBLDVM,AFFINITY BUILD A VMBLOK AROUND RDEVBLOK @V407510 01333000
  453. OI VMOSTAT,VMCF PREVENT ENTERING LOGOFF @VA01827 01334000
  454. SPACE 01335000
  455. CLI RDEVTYPC,CLASGRAF DIAL VIA A 3277 ? @V200820 01336000
  456. BE SETGRAF YES - ADJUST FLAGS @V200820 01337000
  457. CLI RDEVTYPC,CLASSPEC DROP FROM AN NCP LINE ? @V240820 01338000
  458. BE SETMSG YES - FLAGS ARE ALL SET @V240820 01339000
  459. NI RDEVTFLG,255-RDEVCTL TURN OFF CONTROL FLAG @V200820 01340000
  460. NI RDEVFLAG,255-(RDEVACTV+RDEVPREP+RDEVHIO) @V200820 01341000
  461. B SETMSG GO SEND DROP MESSAGES TO USERS @V200820 01342000
  462. EJECT 01343000
  463. SETDEAD EQU * COULD NOT RECOVER THE NCP LINE @V240820 01344000
  464. OI SAVEWRK1,EPABORT REMEMBER THE SITUATION @V240820 01345000
  465. B SETMSG CONTINUE NORMALLY FOR NOW @V240820 01346000
  466. SPACE 01347000
  467. SETGRAF EQU * SETUP FLAGS FOR DMKGRF @V200820 01348000
  468. MVI RDEVTFLG,RDEVRUN SET TO RUNNING STATE @V200730 01349000
  469. MVI RDEVCORD,00 WRITE AT LINE 00 @V200730 01350000
  470. OI RDEVSTA3,RDEVEWRT An erase write required HRC071DK 01350100
  471. SPACE 01351000
  472. SETMSG EQU * SEND DROP MESSAGES @V200820 01352000
  473. LA R0,MSGSIZE MESSAGE SIZE 01353000
  474. CALL DMKFREE GET CORE FOR MESSAGES 01354000
  475. LR R4,R1 ... 01355000
  476. USING MSGDIAL,R4 USE OUR CONVENIENT DSECT 01356000
  477. MVC MSGDIAL(8),BLANKS CLEAR IT 01357000
  478. MVC MSGDIAL+8((MSGSIZE-1)*8),MSGDIAL 01358000
  479. CLI RDEVTYPC,CLASSPEC DROP FROM A 370X NCP LINE ? @V240820 01359000
  480. BE PEPTEXT YES - DIFFERENT TEXT IN MSG @V240820 01360000
  481. TM RDEVADD,RDEVLDEV Is this an LDEV? HRC065DK 01360100
  482. BO DROPLDEV Yes HRC065DK 01360200
  483. CALL DMKSCNRN GET DEVICE NAME @V200730 01361000
  484. ST R1,MSGDIAL SET DEVICE NAME IN MSG BUFFER @V240820 01362000
  485. CALL DMKSCNRD RDEVBLOK IS STILL IN R8 01363000
  486. CALL DMKCVTBH GET ADDRESS IN EBCDIC 01364000
  487. STCM R1,B'0111',MSGRADD REAL ADDRESS TO MESSAGE 01365000
  488. B GETUSER FINISH BUILDING USER MESSAGE @V240820 01366000
  489. DROPLDEV EQU * HRC065DK 01366100
  490. LH R1,RDEVADD Get the LDEV address HRC065DK 01366120
  491. N R1,F4095 Keep only the dev num HRC065DK 01366140
  492. CALL DMKCVTBH Make it displayable HRC065DK 01366160
  493. STCM R1,7,MSGRADD Put dev addr in message HRC065DK 01366180
  494. MVI MSGRADD-1,C'L' Move in LDEV indicator HRC065DK 01366200
  495. MVC MSGDIAL(3),=CL3'GRF' Use short GRAF name HRC065DK 01366220
  496. B GETUSER Go display msg HRC065DK 01366240
  497. SPACE 01367000
  498. PEPTEXT EQU * SETUP TYPE RADDR FOR PEP LINES @V240820 01368000
  499. LH R1,SAVEWRK3 TERMINAL RESOURCE REFERENCE @V240820 01369000
  500. CALL DMKCVTBH CONVERT FOR OUTPUT @V240820 01370000
  501. L R0,=C'DEV ' 370X RESOURCE IS A 'DEV' @V240820 01371000
  502. STM R0,R1,MSGDIAL SET TYPE AND REFERENCE IN MSG @V240820 01372000
  503. * B GETUSER @V240820 01373000
  504. EJECT 01374000
  505. GETUSER EQU * FILL OUT MESSAGE FIELDS @V240820 01375000
  506. MVC MSGFLD1(10),=C'DROP FROM ' ACTION CUE 01376000
  507. LR R10,R11 SAVE VMBLOK CREATED BY BLDVM 01377000
  508. * CPU TIMER DOES NOT MATCH CURRENT VMBLOK - OK IF CONTROL ISN'T LOST 01378000
  509. L R11,SAVER11 BACK TO VMBLOK OF CALLER 01379000
  510. MVC MSGUSER(8),VMUSER MOVE USERID TO MESSAGE 01380000
  511. LR R9,R8 Save RDEVBLOK addr HRC065DK 01380100
  512. L R8,SAVER8 VDEVBLOK ADDRESS 01381000
  513. DROP R8 01382000
  514. CALL DMKSCNVD GET VIRTUAL LINE ADDRESS 01383000
  515. CALL DMKCVTBH CONVERT TO EBCDIC 01384000
  516. STCM R1,B'0111',MSGVADD ...INTO MESSAGE 01385000
  517. LR R11,R10 RESTORE VMBLOK - CPU TIMER MATCHES AGAIN 01386000
  518. TM SAVEWRK1,EPABORT SHOULD WE SEND THE MESSAGE ?@V240820 01387000
  519. BO OPERMSG NO -- JUST TELL THE OPERATOR@V240820 01388000
  520. USING RDEVBLOK,R9 HRC065DK 01388100
  521. TM RDEVADD,RDEVLDTR This LDEV terminating? HRC065DK 01388200
  522. BO OPERMSG Yes, no msg to device HRC065DK 01388300
  523. DROP R9 RDEVBLOK HRC065DK 01388400
  524. LA R0,MSGVADD+4-MSGFLD1 SIZE FOR USER 01389000
  525. LA R1,MSGFLD1 START OF MSG TO USER 01390000
  526. CALL DMKQCNWT,PARM=PRIORITY+LOGHOLD WRITE, WAIT 01391000
  527. SPACE 2 01392000
  528. OPERMSG EQU * SEND DROP MESSAGE TO OPERATOR @V240820 01393000
  529. LA R3,MSGSIZE FOR 'DFRET' LATER 01394000
  530. MVC MSGVADD(8),=C'DIALED= ' OPERATOR CUE 01395000
  531. L R2,=A(DMKSYSND) NUMBER OF DIALED USERS 01396000
  532. L R1,0(0,R2) ... 01397000
  533. S R1,F1 DECREMENT... 01398000
  534. BNM *+6 DON'T LET IT GO NEGATIVE 01399000
  535. SLR R1,R1 ... 01400000
  536. ST R1,0(0,R2) RESET DIALED USER COUNT 01401000
  537. CALL DMKCVTBD CONVERT TO DECIMAL FOR MSG 01402000
  538. STCM R1,B'0111',MSGNDIL ... 01403000
  539. LR R1,R4 MESSAGE ADDRESS @V240820 01404000
  540. LA R0,MSGSIZE*8 ...LENGTH 01405000
  541. CALL DMKQCNWT,PARM=NORET+DFRET+OPERATOR 01406000
  542. DROP R4 01407000
  543. EJECT 01408000
  544. TM SAVEWRK1,EPABORT IS THERE A DUMMY VMBLOK ? @V240820 01409000
  545. BO DROPEXT NO -- JUST EXIT GRACEFULLY @V240820 01410000
  546. NI VMOSTAT,255-VMCF LET DSP CALL USO @VA01827 01411000
  547. BAL R9,FRETVMB RELEASE DUMMY VMBLOK 01412000
  548. DROPEXT EQU * @V240820 01413000
  549. L R1,SAVER11 GET CALLER VMBLOK @V407510 01414000
  550. SWTCHVM SWITCH BACK TO CALLER @V407510 01415000
  551. DROPEXIT DS 0H @VA13704 01416000
  552. EXIT ALL DONE 01417000
  553. EJECT 01418000
  554. * 01419000
  555. * REMOVE VMBLOK FROM CHAIN OF ACTIVE VMBLOKS 01420000
  556. * RETURN VMBLOK TO FREE STORAGE 01421000
  557. * 01422000
  558. FRETVMB EQU * REMOVE + FRET VMBLOK 01423000
  559. LA R0,8 LENGTH OF USERID @VA13441 01424000
  560. LA R1,VMUSER POINT TO USERID @VA13441 01425000
  561. CALL DMKSCNAU SEE IF VMBLOK STILL VALID @VA13441 01426000
  562. BMR R9 ALREADY GONE - RETURN @VA13441 01427000
  563. BZ FRETVMB1 STILL THERE - NOW FRET IT @VA13441 01428000
  564. TM VMRSTAT,VMLOGOFF IS LOGOFF IN PROCESS @VA13441 01429000
  565. BOR R9 IF YES - BETTER DO NOTHING HERE @VA13441 01430000
  566. TM VMOSTAT,VMKILL WILL DISPATCHER FORCE HIM OFF @VA13441 01431000
  567. BOR R9 IF YES - STAY CLEAR OF FRETTING @VA13441 01432000
  568. * VMBLOK 01433000
  569. FRETVMB1 DS 0H @VA13441 01434000
  570. L R2,ASYSVM THIS IS THE CHAIN ANCHOR @VA13441 01435000
  571. CL R11,RUNUSER THIS IS EXTREMELY UNLIKELY 01436000
  572. BNE FRETVM0 CHECK LASTUSER @V407510 01437000
  573. ST R2,RUNUSER DON'T POINT AT FRET'ED BLOCK 01438000
  574. B FRETVM1 START FREEING BLOK @V407510 01439000
  575. FRETVM0 DS 0H @V407510 01440000
  576. CL R11,LASTUSER SAME AS LASTUSER? @V407510 01441000
  577. BNE FRETVM1 NO, START FREEING BLOK @V407510 01442000
  578. ST R2,LASTUSER DON'T POINT AT FRET'ED BLOK @V407510 01443000
  579. FRETVM1 EQU * HANDLE CHAIN ANCHOR PROBLEMS 01444000
  580. L R3,VMPNT-VMBLOK(0,R2) FIRST USER AFTER ANCHOR 01445000
  581. L R4,VMPNT USER AFTER OUR VMBLOK 01446000
  582. CLR R4,R11 IF HE POINTS TO HIMSELF... 01447000
  583. BNE FRETVM2 NO - GREAT 01448000
  584. SLR R5,R5 ...ZERO ANCHOR BECAUSE NOBODY IS LEFT 01449000
  585. B FRETVM3 ... 01450000
  586. FRETVM2 EQU * NOW CHASE THE VMBLOK CHAIN 01451000
  587. LR R5,R3 PREVIOUS BLOCK 01452000
  588. L R3,VMPNT-VMBLOK(,R3) NEXT ONE... 01453000
  589. CLR R3,R11 POINTED TO US THIS TIME ? 01454000
  590. BNE FRETVM2 NO - KEEP CHASING 01455000
  591. ST R4,VMPNT-VMBLOK(,R5) TAKE US OUT OF CHAIN 01456000
  592. FRETVM3 EQU * NOW MOVE THE CHAIN ANCHOR JUST IN CASE 01457000
  593. ST R5,VMPNT-VMBLOK(,R2) ...WE DELETED FIRST USER 01458000
  594. XR R2,R11 EXCHANGE R11 & R2 @V4M0204 01459000
  595. XR R11,R2 R11 = SYSTEM VMBLOK @V4M0204 01460000
  596. XR R2,R11 R2 = VMBLOK TO BE FRET'D @V4M0204 01461000
  597. CHARGE START CHARGE SYSTEM VMBLOK @V4M0204 01462000
  598. L R1,VMDELAY-VMBLOK(,R2) @VA11836 01463000
  599. LTR R1,R1 DO WE HAVE ONE? @VA08708 01464000
  600. BZ FRETVM3A NO - DO NOT TRY TO FRET TRQ @VA08708 01465000
  601. CLC TRQBFPNT-TRQBLOK(4,R1),ZEROES HAS THE TRQ BEEN @VA08708 01466000
  602. * QUED? 01467000
  603. BE FRETTRQ NO - GO FRET IT @VA08708 01468000
  604. CALL DMKSCHRT YES - RESET IT THEN FRET IT @VA08708 01469000
  605. FRETTRQ LA R0,TRQBSIZE LOAD TRQ SIZE FOR FRET @VA08708 01470000
  606. CALL DMKFRET NOW GIVE IT BACK @VA08708 01471000
  607. FRETVM3A EQU * @VA08708 01472000
  608. L R1,VMDFTPNT-VMBLOK(,R2) GET DEFERRED POINTER @V4M0204 01473000
  609. LTR R1,R1 DOES ONE EXIST? @V4M0204 01474000
  610. BZ FRETVM4 NO, FRET VMBLOK @V4M0204 01475000
  611. LA R0,CPEXSIZE GET SIZE OF DEFERRED BLOK @V4M0204 01476000
  612. CALL DMKFRET FREE DEFERRED TASK BLOK @V4M0204 01477000
  613. FRETVM4 DS 0H @V4M0204 01478000
  614. LR R1,R2 GET ADDRESS OF VMBLOK @V4M0204 01479000
  615. LA R0,VMBSIZE BLOCK SIZE = HUGE 01480000
  616. MVI VMUSER-VMBLOK+7(R1),X'00' NULLIFY USERID @VA13441 01481000
  617. CALL DMKFRET RELEASE THE VMBLOK 01482000
  618. BR R9 RETURN TO CALLER 01483000
  619. EJECT 01484000
  620. *. 01485000
  621. * SUBROUTINE NAME - 01486000
  622. * 01487000
  623. * DMKDIBCP - 'COUPLE' VIRTUAL CHANNEL-TO-CHANNEL ADAPTER@VA13704 01488000
  624. * 01489000
  625. * FUNCTION - 01490000
  626. * 01491000
  627. * TO ESTABLISH A VIRTUAL CONNECTION BETWEEN TWO VIRTUAL 01492000
  628. * CHANNEL-TO-CHANNEL ADAPTERS, EITHER ON SEPARATE VIRTUAL 01493000
  629. * MACHINES OR TWO ADAPTERS ON A SINGLE VIRTUAL MACHINE. 01494000
  630. * 01495000
  631. * COMMAND LINE FORMAT - 01496000
  632. * 01497000
  633. * +----------+-------------------------------+ 01498000
  634. * | | | 01499000
  635. * | COUPLE | VADDR <TO> USERID VADDR | 01500000
  636. * | ---- | VADDR <TO> * VADDR | 01501000
  637. * | | | 01502000
  638. * +----------+-------------------------------+ 01503000
  639. * 01504000
  640. * ENTRY POINT - 01505000
  641. * 01506000
  642. * DMKDIBCP @VA13704 01507000
  643. * 01508000
  644. * ENTRY CONDITIONS - 01509000
  645. * 01510000
  646. * GPR 13 = ADDRESS OF STANDARD SAVE-AREA 01511000
  647. * GPR 12 = ADDRESS OF DMKDIBCP @VA13704 01512000
  648. * GPR 11 = ADDRESS OF CALLER'S VMBLOK 01513000
  649. * GPR 9 = ADDRESS OF COMMAND BUFFER 01514000
  650. * 01515000
  651. * EXIT CONDITIONS - 01516000
  652. * 01517000
  653. * GPR 2 = ERROR CODE, OR ZERO IF NO ERRORS 01518000
  654. * 01519000
  655. * IF GPR 2 = 0, THE TWO CTCA'S SPECIFIED HAVE BEEN 01520000
  656. * COUPLED TOGETHER AND ARE READY FOR USE BY THE VM. 01521000
  657. * 01522000
  658. * CALLS TO OTHER ROUTINES - 01523000
  659. * 01524000
  660. * DMKSCNFD 01525000
  661. * DMKSCNVU 01526000
  662. * DMKSCNAU 01527000
  663. * DMKQCNWT 01528000
  664. * DMKCVTHB 01529000
  665. * DMKCVTBH 01530000
  666. * DMKFREE 01531000
  667. * DMKERMSG 01532000
  668. * DMKVCARS 01533000
  669. * 01534000
  670. * EXTERNAL REFERENCES - NONE 01535000
  671. * 01536000
  672. * TABLES / WORK AREAS - 01537000
  673. * 01538000
  674. * VDEVBLOK, VCUBLOK, CHXBLOK, CHYBLOK 01539000
  675. * 01540000
  676. * REGISTER USAGE - 01541000
  677. * 01542000
  678. * GPR 13 = SAVE-AREA ADDRESSABILITY 01543000
  679. * GPR 12 = MODULE BASE ADDRESSABILITY 01544000
  680. * GPR 11 = VMBLOK ADDRESS OF X-SIDE USER 01545000
  681. * GPR 10 = VMBLOK ADDRESS OF Y-SIDE USER 01546000
  682. * GPR 9 = COMMAND BUFFER ADDRESS 01547000
  683. * GPR 8 = VDEVBLOK ADDRESS, X-SIDE CTCA 01548000
  684. * GPR 7 = VDEVBLOK ADDRESS, Y-SIDE CTCA 01549000
  685. * GPRS 0-6 ARE WORK REGISTERS 01550000
  686. * 01551000
  687. * NOTES - 01552000
  688. * 01553000
  689. * THE 'CHXBLOK' AND 'CHYBLOK' CREATED BY DMKDIBCP IS IN @VA13704 01554000
  690. * REALITY A SINGLE CONTROL BLOCK, ADDRESSED VIA TWO 01555000
  691. * IDENTICAL DSECT'S FOR SYMMETRY. (SEE ACTUAL DSECTS) 01556000
  692. * 01557000
  693. * OPERATION - 01558000
  694. * 01559000
  695. * 1. THE COMMAND LINE IS SCANNED FOR ALL REQUIRED PARMS 01560000
  696. * AND THE SPECIFIED DEVICES ARE CHECKED TO INSURE THAT 01561000
  697. * THEY ARE CHANNEL-TO-CHANNEL ADAPTERS AND ARE AVAILABLE 01562000
  698. * FOR USE. ERROR MESSAGES ARE TYPED IF ANY CHECKS FAIL. 01563000
  699. * 01564000
  700. * 2. THE INTERMEDIATE CONTROL BLOCKS, CHXBLOK AND CHYBLOK, 01565000
  701. * ARE ALLOCATED FROM FREE STORAGE AND CONNECTED TO THE 01566000
  702. * VDEVBLOKS OF THE X-SIDE AND Y-SIDE ADAPTERS. THE NOT- 01567000
  703. * READY BIT IN THE VDEVBLOKS IS REMOVED AND THE ADAPTERS 01568000
  704. * ARE READY FOR VIRTUAL MACHINE USE. VERIFICATION MESSAGES 01569000
  705. * ARE SENT TO BOTH THE X-SIDE AND Y-SIDE USERS. 01570000
  706. * 01571000
  707. * RESPONSES - 01572000
  708. * 01573000
  709. * 'CTCA VADDR COUPLE TO USERID1 VADDR' (X-SIDE) 01574000
  710. * 01575000
  711. * 'CTCA VADDR COUPLE BY USERID2 VADDR' (Y-SIDE) 01576000
  712. * 01577000
  713. * ERROR MESSAGES - 01578000
  714. * 01579000
  715. * DMKDIB006E INVALID DEVICE TYPE - VADDR @VA13704 01580000
  716. * DMKDIB011E INVALID DEVICE TYPE - $USERID$ VADDR @VA13704 01581000
  717. * DMKDIB020E USERID MISSING OR INVALID @VA13704 01582000
  718. * DMKDIB022E VADDR MISSING OR INVALID @VA13704 01583000
  719. * DMKDIB040E DEV VADDR DOES NOT EXIST @VA13704 01584000
  720. * DMKDIB045E $USERID$ NOT LOGGED ON @VA13704 01585000
  721. * DMKDIB047E $USERID$ VADDR DOES NOT EXIST @VA13704 01586000
  722. * DMKDIB058E CTCA VADDR BUSY ON $USERID$ @VA13704 01587000
  723. *. 01588000
  724. EJECT 01589000
  725. DMKDIBCP RELOC , "COUPLE VADDR TO USERID VADDR" @VA13704 01590000
  726. SPACE 2 01591000
  727. MVI SAVEWRK1,X'00' CLEAR A FLAG BYTE 01592000
  728. LA R6,INVVADD RETURN IF NO OPERAND FOUND @V240820 01593000
  729. BAL R10,SCANCVT SCAN AND CONVERT DEVICE ADDRESS @V240820 01594000
  730. SPACE 01595000
  731. CALL DMKSCNFD SECOND PARM = OPTION 'TO' 01596000
  732. BNZ NOUSRID USERID MISSING OR INVLAID 01597000
  733. LR R2,R0 01598000
  734. BCTR R2,0 DECREMENT COUNT FOR EXECUTED COMPARE 01599000
  735. EX R2,CLCOPTO CLC 0(*-*,R1),=C'TO ' 01600000
  736. BNE DIACPUSR MUST BE A USERID 01601000
  737. CALL DMKSCNFD SCAN FOR USERID 01602000
  738. BNZ NOUSRID 01603000
  739. DIACPUSR EQU * FIND SPECIFIED USER VMBLOK 01604000
  740. CLC 0(2,R1),=C'* ' WRAP CONNECTION TO HIMSELF ? 01605000
  741. BNE DIACPOTH NO 01606000
  742. LR R10,R11 SAME VMBLOK FOR BOTH DEVICES 01607000
  743. OI SAVEWRK1,CTCWRAP REMEMBER SPECIAL COUPLE @VA02003 01608000
  744. B DIACPAD2 GO GET SECOND VADDR 01609000
  745. EJECT 01610000
  746. DIACPOTH EQU * LOCATE VMBLOK OF REMOTE USER 01611000
  747. CALL DMKSCNAU 01612000
  748. BC 2,NOUSRID USERID INVALID 01613000
  749. BC 5,NOTLOGD NOT LOGGED ON, OR WON'T BE SOON 01614000
  750. LR R10,R1 SAVE VMBLOK ADDRESS IN GPR10 01615000
  751. CLR R10,R11 WRAP CONNECTION TO HIMSELF ? 01616000
  752. BNE DIACPAD2 NO - 01617000
  753. OI SAVEWRK1,CTCWRAP INDICATE WRAP TO HIMSELF @VA02003 01618000
  754. DIACPAD2 EQU * SCAN FOR REMOTE VADDR 01619000
  755. ST R10,SAVEWRK5 SAVE ADDRESS OF REMOTE VMBLOK @V240820 01620000
  756. BAL R14,SWPUSER SWITCH TO REMOTE VMBLOK @V240820 01621000
  757. LA R6,INVVADD RETURN IF NO OPERAND @V240820 01622000
  758. BAL R10,SCANCVT SCAN AND CONVERT DEVICE ADDRESS @V240820 01623000
  759. BAL R14,SWPCALL BACK TO THE CALLER'S VMBLOK @V240820 01624000
  760. L R10,SAVEWRK5 RESTORE ADDR OF REMOTE VMBLOK @VM01004 01625000
  761. SPACE 01626000
  762. LH R1,SAVEWRK2 VADDR OF LOCAL CTCA 01627000
  763. CALL DMKSCNVU FIND THE VDEVBLOK 01628000
  764. USING VDEVBLOK,R8 01629000
  765. CLC VDEVTYPC(2),=AL1(CLASSPEC,TYPCTCA) 01630000
  766. BNE BADVADD2 INVALID DEVICE TYPE - VADDR 01631000
  767. TM VDEVSTAT,VDEVDED IS THE DEVICE DEDICATED ? 01632000
  768. BO BADVADD2 YES - WE CAN'T DO THAT 01633000
  769. CALL DMKCFPRD RESET LOCAL CTCA 01634000
  770. CALL DMKVCARS RELEASE ANY PREVIOUS CONNECTION 01635000
  771. LA R0,CPEXSIZE GET FREE STORAGE FOR A CPEXBLOK 01636000
  772. CALL DMKFREE .. 01637000
  773. LA R15,DIACPGO EXECTUION ADDRESS AFTER DELAY 01638000
  774. STM R15,R14,CPEXADD-CPEXBLOK(R1) SET ADDR, REGISTERS 01639000
  775. XC 0(12,R1),0(R1) CLEAR CPEXFPNT, CPEXBPNT, CPEXMISC 01640000
  776. CALL DMKSTKCP STACK BLOCK FOR SEQUENCING DELAY 01641000
  777. GOTO DMKDSPCH WAIT FOR THINGS TO QUIET DOWN 01642000
  778. EJECT 01643000
  779. DIACPGO EQU * RETURN AFTER NECESSARY DELAY 01644000
  780. BAL R14,SWPUSER SWITCH TO REMOTE VMBLOK 01645000
  781. LH R1,SAVEWRK2+2 VADDR OF REMOTE CTCA 01646000
  782. CALL DMKSCNVU FIND THE VDEVBLOK 01647000
  783. CLC VDEVTYPC(2),=AL1(CLASSPEC,TYPCTCA) 01648000
  784. BNE BADVADD INVALID DEVICE TYPE - USERID VADDR 01649000
  785. TM VDEVSTAT,VDEVDED IS IT DEDICATED ? 01650000
  786. BO BADVADD YES - WE CAN'T DO THAT 01651000
  787. TM VDEVSTAT,VDEVNRDY THIS IS SET IF DEVICE IS AVAILABLE 01652000
  788. BZ CTCBUSY CTCA VADDR BUSY ON USERID 01653000
  789. TM SAVEWRK1,CTCWRAP COUPLE TO HIMSELF ? @VA02003 01654000
  790. BZ DIADBLCK NO -- SKIP DOUBLE-CHECK 01655000
  791. CLC SAVEWRK2(2),SAVEWRK2+2 WRAP TO SAME DEVICE ? 01656000
  792. BE CTCBUSY YES - CALL THE DEVICE BUSY 01657000
  793. DIADBLCK EQU * ALL SET TO CONNECT THE ADAPTERS 01658000
  794. BAL R14,SWPCALL GO BACK TO CALLER'S VMBLOK 01659000
  795. LH R1,SAVEWRK2 VADDR OF LOCAL CTCA 01660000
  796. CALL DMKSCNVU GET THE VDEVBLOK AGAIN 01661000
  797. LA R0,CHBSIZE SIZE OF INTERCONNECTOR BLOCK 01662000
  798. CALL DMKFREE GET FREE STORAGE FOR VIRTUAL CABLES 01663000
  799. LR R9,R1 ADDRESS VIA GR9 01664000
  800. USING CHXBLOK,R9 ... 01665000
  801. XC CHXBLOK(CHBSIZE*8),CHXBLOK CLEAR ENTIRE BLOCK 01666000
  802. ST R9,VDEVREAL PLUG IN THE X-SIDE 01667000
  803. ST R10,CHXOTHR CONNECT Y-SIDE VMBLOK 01668000
  804. LH R1,SAVEWRK2+2 Y-SIDE VADDR 01669000
  805. STH R1,CHXYADD ...NEEDED BY X-SIDE ADAPTER 01670000
  806. NI VDEVSTAT,X'FF'-VDEVNRDY THIS SIDE NOW READY 01671000
  807. LA R9,4(0,R9) FLIP TO Y-SIDE BLOCK 01672000
  808. USING CHYBLOK,R9 ... 01673000
  809. L R1,SAVEWRK5 GET REMOTE VMBLOK ADDRESS @V407510 01674000
  810. SWTCHVM SWITCH TO REMOTE USER @V407510 01675000
  811. LH R1,SAVEWRK2+2 GET Y-SIDE VADDR FOR DMKSCNVU @V4M0170 01676000
  812. CALL DMKSCNVU GET REMOTE VDEVBLOK (VADDR IS IN R1) 01677000
  813. ST R9,VDEVREAL PLUG IN THE Y-SIDE 01678000
  814. L R1,SAVER11 ADDRESS OF X-SIDE VMBLOK 01679000
  815. ST R1,CHYOTHR SET FOR USE FROM Y-SIDE 01680000
  816. LH R1,SAVEWRK2 X-SIDE VADDR 01681000
  817. STH R1,CHYXADD ...NEEDED BY Y-SIDE ADAPTER 01682000
  818. NI VDEVSTAT,X'FF'-VDEVNRDY NOW THIS SIDE IS READY 01683000
  819. DROP R9 01684000
  820. EJECT 01685000
  821. MVC SAVEWRK8(8),BLANKS BLANK OUT THESE FIELDS @VA08677 01686000
  822. MVC SAVEWRK9(3),SAVEWRK3+1 MOVE LOCAL VADDR DOWN @V240820 01687000
  823. MVC SAVEWRK3(4),SAVEWRK4 MOVE REMOTE VADDR UP @V240820 01688000
  824. MVC SAVEWRK2(4),=C'CTCA' NOW FILL IT OUT 01689000
  825. MVC SAVEWRK4(12),=C' COUPLE BY ' 01690000
  826. TM SAVEWRK1,CTCWRAP COUPLING TWO LOCAL CTCA'S @VA02003 01691000
  827. BO DIACPLOC YES -- SKIP DOUBLE MESSAGES 01692000
  828. L R11,SAVER11 GET CALLER'S VMBLOK JUST LONG ENOUGH... 01693000
  829. MVC SAVEWRK6+3(8),VMUSER ...TO GET THE X-SIDE USERID 01694000
  830. LR R11,R10 BACK TO REMOTE VMBLOK 01695000
  831. LA R0,SAVEWRK9+3-SAVEWRK2 DATA LENGTH @VM01044 01696000
  832. LA R1,SAVEWRK2 MSG START 01697000
  833. CALL DMKQCNWT,PARM=NORET 01698000
  834. DIACPLOC EQU * SEND MESSAGE ONLY ONCE 01699000
  835. L R1,SAVER11 GET CALLER'S VMBLOK @V407510 01700000
  836. SWTCHVM SWITCH BACK TO CALLER @V407510 01701000
  837. L R1,SAVEWRK3 NOW SWAP THE TWO ADDRESSES 01702000
  838. L R2,SAVEWRK9 ...FOR LOCAL USER MESSAGE 01703000
  839. STCM R1,B'0111',SAVEWRK9 ... 01704000
  840. STCM R2,B'1110',SAVEWRK3+1 01705000
  841. MVC SAVEWRK6(3),=C'TO ' CHANGE THE PARTICIPLE 01706000
  842. MVC SAVEWRK6+3(8),VMUSER-VMBLOK(R10) 01707000
  843. LA R0,SAVEWRK9+3-SAVEWRK2 DATA LENGTH @VM01044 01708000
  844. LA R1,SAVEWRK2 ADDRESS 01709000
  845. CALL DMKQCNWT,PARM=NORET SEND LOCAL USER MESSAGE 01710000
  846. SLR R2,R2 01711000
  847. ST R2,SAVER2 ZERO RETURN CODE 01712000
  848. EXIT , RETURN TO DMKCFM 01713000
  849. SPACE 01714000
  850. CLCOPTO CLC 0(*-*,R1),=C'TO ' OPTIONAL WORD TEST 01715000
  851. EJECT 01716000
  852. SWPUSER EQU * SWITCH TO OBJECTIVE VMBLOK 01717000
  853. ST R14,SAVEWRK6 SAVE R14 ACROSS CHARGE @V4M0116 01718000
  854. CHARGE SWITCH,SAVEWRK5 CHARGE 'OTHER' VMBLOK @V407510 01719000
  855. L R14,SAVEWRK6 RESTORE REG 14 @V4M0116 01720000
  856. BR R14 01721000
  857. SPACE 01722000
  858. SWPCALL EQU * SWITCH TO CALLER'S VMBLOK 01723000
  859. ST R14,SAVEWRK6 SAVE R14 ACROSS CHARGE @V4M0116 01724000
  860. CHARGE SWITCH,SAVER11 CHARGE CALLER @V407510 01725000
  861. L R14,SAVEWRK6 RESTORE REG 14 @V4M0116 01726000
  862. BR R14 01727000
  863. SPACE 2 01728000
  864. SCANCVT EQU * SCAN AND CONVERT DEVICE ADDRESS @V240820 01729000
  865. CALL DMKSCNFD SCAN FOR THE NEXT OPERAND @V240820 01730000
  866. BNZR R6 ERROR EXIT IF NOT FOUND @V240820 01731000
  867. CL R0,F3 THREE CHARACTERS MAXIMUM @V240820 01732000
  868. BH INVVADD INVALID VADDR @V240820 01733000
  869. CALL DMKCVTHB CONVERT ADDRESS TO BINARY @V240820 01734000
  870. BNZ INVVADD CONVERT FAILED - INVALID @V240820 01735000
  871. MAXDV R15 GET MAXIMUM VALID ADDRESS IN GR15@V240820 01736000
  872. CLR R1,R15 IS THE DEVICE ADDRESS POSSIBLE ? @V240820 01737000
  873. BH INVVADD NO -- KICK IT OUT @V240820 01738000
  874. LR R6,R1 REMEMBER ADDRESS FOR DMKSCNVU @V240820 01739000
  875. CALL DMKCVTBH RE-CONVERT IT FOR MESSAGES @V240820 01740000
  876. ICM R1,8,BLANKS GET A HIGH-ORDER BLANK @V240820 01741000
  877. TM SAVEWRK1,FIRSTAD IS THIS THE FIRST PASS ? @V240820 01742000
  878. BO SCANTWO NO -- USE REMOTE SLOTS @V240820 01743000
  879. OI SAVEWRK1,FIRSTAD REMEMBER THE FIRST PASS @V240820 01744000
  880. STH R6,SAVEWRK2 SAVE 'LOCAL' DEVICE ADDRESS @V240820 01745000
  881. ST R1,SAVEWRK3 SAVE EBCDIC EQUIVALENT OF ADDRESS@V240820 01746000
  882. B SCANSCN TRY TO FIND THE VIRTUAL BLOCKS @V240820 01747000
  883. SCANTWO EQU * SAVE VALUES FOR REMOTE DEVICE @V240820 01748000
  884. STH R6,SAVEWRK2+2 SLOT FOR REMOTE VIRTUAL ADDRESS @V240820 01749000
  885. ST R1,SAVEWRK4 SLOT FOR EBCDIC EQUIVALENT @V240820 01750000
  886. SCANSCN EQU * FIND THE VIRTUAL BLOCKS @V240820 01751000
  887. LR R1,R6 ADDRESS BACK TO GR1 @V240820 01752000
  888. CALL DMKSCNVU SCAN FOR THE DEVICE @V240820 01753000
  889. BNZ UNKNOWN DEVICE DOES NOT EXIST @V240820 01754000
  890. BR R10 RETURN INTERNALLY @V240820 01755000
  891. EJECT 01756000
  892. UNKNWN2 EQU * DEV VADDR DOES NOT EXIST 01757000
  893. LA R2,040(,0) MSG= DMKDIB040E @VA13704 01758000
  894. B VADONLY SET UP VARIABLE DATA 01759000
  895. SPACE 01760000
  896. BADVADD2 EQU * INVALID DEVICE TYPE - VADDR 01761000
  897. LA R2,006(,0) MSG= DMKDIB006E @VA13704 01762000
  898. VADONLY EQU * SET VARIABLE 'VADDR' 01763000
  899. CALL DMKCVTBH CONVERT 01764000
  900. STCM R1,B'0111',SAVEWRK2 01765000
  901. LA R0,3 LENGTH 01766000
  902. B MSGSEND 01767000
  903. SPACE 01768000
  904. NOUSRID EQU * USERID MISSING OR INVALID 01769000
  905. LA R2,020(,0) MSG= DMKDIB020E @VA13704 01770000
  906. B MSGONLY NO EXTRA DATA NEEDED 01771000
  907. SPACE 01772000
  908. NOTLOGD EQU * USERID NOT LOGGED ON 01773000
  909. MVC SAVEWRK2(8),BALRSAVE USERID LEFT BY 'SCNAU' 01774000
  910. LA R0,8 DATA LENGTH 01775000
  911. LA R2,045(,0) MSG= DMKDIB045E @VA13704 01776000
  912. B MSGSEND 01777000
  913. SPACE 01778000
  914. INVVADD EQU * VIRTUAL ADDRESS MISSING OR INVALID 01779000
  915. LA R2,022(,0) MSG= DMKDIB022E @VA13704 01780000
  916. B MSGONLY NO EXTRA DATA NEEDED 01781000
  917. SPACE 01782000
  918. CTCBUSY EQU * CTCA VADDR BUSY ON USERID 01783000
  919. LA R2,058(,0) MSG= DMKDIB058E @VA13704 01784000
  920. VADDUSR EQU * SET VARIABLES 'VADDR USERID' 01785000
  921. CALL DMKSCNVD GET DEVICE ADDRESS IN 'CCU' FORM 01786000
  922. CALL DMKCVTBH CONVERT TO HEX 01787000
  923. STCM R1,B'0111',SAVEWRK2 01788000
  924. MVI SAVEWRK2+3,X'00' DELIMITER 01789000
  925. MVC SAVEWRK3(8),VMUSER SECOND FIELD 01790000
  926. LA R0,12 DATA LENGTH 01791000
  927. B MSGSEND SEND ERROR MSG AND EXIT @VA03704 01792000
  928. EJECT 01793000
  929. BADVADD EQU * VIRTUAL DEVICE IS NOT A LINE 01794000
  930. LA R2,011(,0) MSG= DMKDIB011E @VA13704 01795000
  931. B USRVADD SET UP VARIABLE STRING 01796000
  932. SPACE 01797000
  933. UNKNOWN EQU * USERID VADDR DOES NOT EXIST 01798000
  934. CH R1,SAVEWRK2 IS THIS THE LOCAL DEVICE ? @VA02009 01799000
  935. BE UNKNWN2 YES - DIFFERENT MESSAGE @V240820 01800000
  936. LA R2,047(,0) MSG= DMKDIB047E @VA13704 01801000
  937. USRVADD EQU * SET VARIABLES 'USERID VADDR' 01802000
  938. MVC SAVEWRK2(8),VMUSER 01803000
  939. MVI SAVEWRK4,X'00' DELIMITER 01804000
  940. LA R0,12 01805000
  941. B MSGSEND 01806000
  942. SPACE 01807000
  943. MSGONLY EQU * NO DATA TO BE ADDED TO MESSAGE 01808000
  944. SLR R0,R0 01809000
  945. SLR R1,R1 01810000
  946. B MSGSEND+4 01811000
  947. SPACE 01812000
  948. MSGSEND EQU * SEND ERROR MSG TO USER 01813000
  949. LA R1,SAVEWRK2 POINT TO START OF VARIABLE DATA 01814000
  950. BAL R14,SWPCALL BACK TO CALLER'S VMBLOK 01815000
  951. ICM R0,B'1110',DMKDIB+3 MODULE IDENTIFIER @VA13704 01816000
  952. ST R2,SAVER2 PASS RETURN CODE BACK TO DMKCFM @V240820 01817000
  953. LA R14,707(0) @VA09464 01818000
  954. CR R14,R2 DOES R2 CONTAIN 707 MESSAGE ? @VA09464 01819000
  955. BNE MSGBLD NO, DON'T PUT'A' IN MESSAGE @VA09464 01820000
  956. ICM R2,4,=X'C1' DMKDIB707A @VA13704 01821000
  957. MSGBLD ICM R2,8,=X'80' RETURN HERE AFTER ERROR MESSAGE @VA09464 01822000
  958. CALL DMKERMSG BUILD + TYPE ERROR MESSAGE 01823000
  959. B DROPEXIT CHECK FOR CLEAN-UP WORK TO DO @VA13704 01824000
  960. EJECT 01825000
  961. * 01826000
  962. * MESSAGE MODEL FOR USER AND OPERATOR RESPONSES 01827000
  963. * 01828000
  964. SPACE 01829000
  965. MSGDIAL DSECT 01830000
  966. DC C'LINE ' REAL DEVICE TYPE 01831000
  967. MSGRADD DC C'XXX ' " " " ADDRESS 01832000
  968. MSGFLD1 DC C'DIALED TO ' ACTIVITY CUE 01833000
  969. MSGUSER DC C'$USERID$ ' DIAL-ED USER 01834000
  970. MSGVADD DC C'XXX ' DIAL-ED VIRTUAL ADDRESS 01835000
  971. ORG MSGVADD ...OR... 01836000
  972. DC C'DIALED= ' OPERATOR INFO 01837000
  973. MSGNDIL DC C'NNN' NO. OF DIALED USERS 01838000
  974. ORG 01839000
  975. MSGSIZE EQU (*-MSGDIAL+7)/8 BUFFER LENGTH 01840000
  976. SPACE 2 01841000
  977. * EQUATES USED IN 'SAVEWRK1' FLAG BYTE: @V240820 01842000
  978. GRAPHIC EQU X'80' DIAL VIA GRAPHIC TERMINAL @V240820 01843000
  979. STRTSTP EQU X'40' DIAL VIA 270X/EMULATOR TERMINAL @V240820 01844000
  980. NCPTERM EQU X'20' DIAL VIA PEP/NCP TERMINAL @V240820 01845000
  981. FIRSTAD EQU X'10' FIRST ADDRESS HAS BEEN SCANNED @V240820 01846000
  982. DYNABLK EQU X'08' DYNAMIC RDEVBLOK IS RESERVED @V240820 01847000
  983. MSGFRET EQU X'04' MESSAGE BUFFER IS IN USE @V240820 01848000
  984. CTCWRAP EQU X'02' 'COUPLE' FOR TWO LOCAL CTCA'S @VA02003 01849000
  985. EPABORT EQU X'01' SWITCH TO EP-MODE FAILED @V240820 01850000
  986. SPACE 2 01851000
  987. DMKDIB CSECT , RE-ENTER PROGRAM CSECT @VA13704 01852000
  988. EJECT 01853000
  989. LTORG 01854000
  990. EJECT 01855000
  991. COPY VCTCA VIRTUAL CHANNEL-TO-CHANNEL ADAPTER BLOCKS 01856000
  992. COPY TIMER @V200730 01857000
  993. COPY NETWORK @V240820 01858000
  994. COPY BTUCMD @V240820 01859000
  995. COPY EQU 01860000
  996. COPY DEVTYPES 01861000
  997. PSA 01862000
  998. COPY SAVE 01863000
  999. COPY VMBLOK 01864000
  1000. COPY RBLOKS 01865000
  1001. COPY VBLOKS 01866000
  1002. COPY IOBLOKS 01867000
  1003. COPY IOER 01868000
  1004. END DMKDIB @VA13704 01869000