Table of Contents

DMKCPB Source

References

Source Listing

DMKCPB.ASSEMBLE.txt
  1. CPB TITLE 'DMKCPB (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 VALIDATE SEQUENCING OF INPUT 00002000
  3. *. 00003000
  4. * 00004000
  5. * MODULE NAME - 00005000
  6. * 00006000
  7. * DMKCPB 00007000
  8. * 00008000
  9. * FUNCTION - 00009000
  10. * 00010000
  11. * TO SIMULATE THE REAL MACHINES PUSH BUTTONS. 00011000
  12. * 00012000
  13. * ATTRIBUTES - 00013000
  14. * 00014000
  15. * REENTRANT, PAGEABLE, CALLED VIA SVC 00015000
  16. * 00016000
  17. * ENTRY POINTS - 00017000
  18. * DMKCPBSR - TO PROCESS THE 'SYSTEM' COMMAND. 00018000
  19. * DMKCPBEX - TO PROCESS THE 'EXTERNAL' COMMAND. 00019000
  20. * DMKCPBRY - TO PROCESS THE 'READY' COMMAND. 00020000
  21. * DMKCPBNR - TO PROCESS THE 'NOTREADY' COMMAND. 00021000
  22. * DMKCPBRS - TO PROCESS THE 'RESET' COMMAND. 00022000
  23. * DMKCPBRW - TO PROCESS THE 'REWIND' COMMAND. 00023000
  24. * 00024000
  25. * ENTRY CONDITIONS - 00025000
  26. * 00026000
  27. * GPR9 - ADDRESS OF COMMAND LINE BUFFER 00027000
  28. * GPR11 - ADDRESS OF VMBLOK 00028000
  29. * GPR12 - ADDRESS OF ENTRY POINT 00029000
  30. * GPR13 - ADDRESS OF SAVEAREA 00030000
  31. * 00031000
  32. * 00032000
  33. * EXIT CONDITIONS - 00033000
  34. * 00034000
  35. * NORMAL - 00035000
  36. * GPR2 = 0 00036000
  37. * 00037000
  38. * ERROR - 00038000
  39. * GPR2 = ERROR MESSAGE CODE NUMBER 00039000
  40. * 00040000
  41. * 00041000
  42. * CALLS TO OTHER ROUTINES - 00042000
  43. * 00043000
  44. * DMKSCNFD - TO LOCATE NEXT ARGUMENT IN THE COMMAND LINE 00044000
  45. * DMKCVTHB - CONVERT HEXADECIMAL ADDRESSES TO BINARY 00045000
  46. * DMKSCNVU - TO LOCATE ADDRESSES OF THE VIRTUAL DEVICE BLOKS 00046000
  47. * DMKQCNWT - TO OUTPUT MESSAGES TO THE TERMINAL 00047000
  48. * DMKVATBC - TO RELEASE SHADOW TABLES FOR V370R 00048000
  49. * DMKFREE - TO OBTAIN STORAGE FROM FREE STORAGE 00049000
  50. * DMKFRET - TO RETURN STORAGE TO FREE STORAGE 00050000
  51. * DMKIOSQR - TO PERFORM REAL I/O OPERATIONS 00051000
  52. * DMKPGSPO - TO CLEAR VIRTUAL STORAGE TO BINARY ZEROS 00052000
  53. * DMKERMSG - TO SEND ERROR MESSAGES TO THE TERMINAL. 00053000
  54. * DMKCFPRR - TO HANDLE SYSTEM RESET FUNCTION 00054000
  55. * DMKPTRAN - TO BRING A PAGE IN CORE 00055000
  56. * DMKVATMD - TO ENTER TRANSLATE MODE 00056000
  57. * DMKCVTBH - CONVERT BINARY DATA TO HEXADECMAL 00057000
  58. * DMKCFPRD - TO RESET A VIRTUAL DEVICE 00058000
  59. * 00059000
  60. * 00060000
  61. * EXTERNAL REFERENCES - 00061000
  62. * 00062000
  63. * DMKSYSVM - LOCATION OF THE SYSTEM VMBLOK 00063000
  64. * 00064000
  65. * 00065000
  66. * TABLES/WORKAREAS - 00066000
  67. * 00067000
  68. * RDEVBLOK, IOBLOK, VMBLOK, VDEVBLOK, VCUBLOK, VCHBLOK 00068000
  69. * 00069000
  70. * 00070000
  71. * REGISTER USAGE - 00071000
  72. * 00072000
  73. * GPR0 - ARGUMENT LENGTH (PASSED BACK FROM DMKSCNFD) 00073000
  74. * GPR1 - ARGUMENT ADDRESS (PASSED BACK FROM DMKSCNFD) 00074000
  75. * GPR2 -PASS PARAMETERS TO CALLED ROUTINES 00075000
  76. * GPR3 - WORK REG 00076000
  77. * GPR4 - WORK REG 00077000
  78. * GPR5 - WORK REG 00078000
  79. * GPR6 - VCHBLOK ADDRESS 00079000
  80. * GPR7 - VCUBLOK ADDRESS 00080000
  81. * GPR8 - VDEVBLOK ADDRESS 00081000
  82. * GPR9 - RDEVBLOK ADDRESS 00082000
  83. * GPR10 - IOBLOK ADDRESS 00083000
  84. * GPR11 - VMBLOK ADDRESS 00084000
  85. * GPR12 - BASE REG 00085000
  86. * GPR13 - SAVEAREA ADDRESS 00086000
  87. * GPR14 - LINKAGE REG 00087000
  88. * GPR15 - LINKAGE REG 00088000
  89. * 00089000
  90. * 00090000
  91. * 00091000
  92. *** NOTE 00092000
  93. * 00093000
  94. *** THIS MODULE CONTAINS DEACTIVATED CODE NOT SUPPORTED IN 00094000
  95. *** RELEASE 1.0 OF VM/370. 00095000
  96. * 00096000
  97. ***NOTE 00097000
  98. * 00098000
  99. * 00099000
  100. * OPERATION - 00100000
  101. * 00101000
  102. * THE VARIOUS SUBROUTINES IN THIS MODULE ARE CALLED BY DMKCFM. 00102000
  103. * THE FORMAT AND DESCRIPTION OF EACH COMMAND IS LISTED 00103000
  104. * IN SEPARATE PROLOGUES BELOW. 00104000
  105. * 00105000
  106. * 00106000
  107. *. 00107000
  108. EJECT 00108000
  109. COPY OPTIONS 00109000
  110. COPY LOCAL 00110000
  111. SPACE 2 00111000
  112. DMKCPB START 00112000
  113. SPACE 00113000
  114. MODID DC CL8'DMKCPB' 00114000
  115. SPACE 00115000
  116. USING PSA,R0 00116000
  117. USING VMBLOK,R11 00117000
  118. USING SAVEAREA,R13 00118000
  119. SPACE 00119000
  120. EXTRN DMKERMSG 00120000
  121. EXTRN DMKCFPRR,DMKCFPRD 00121000
  122. EXTRN DMKCVTBH 00122000
  123. EXTRN DMKCVTHB 00123000
  124. EXTRN DMKSSSMQ,DMKSTKCP,DMKDSPCH @V60B6B8 00123500
  125. EXTRN DMKVIOMK 00124000
  126. EXTRN DMKPGSPO 00125000
  127. EXTRN DMKIOSQR 00126000
  128. EXTRN DMKSCNFD 00127000
  129. EXTRN DMKSCNVU 00128000
  130. EXTRN DMKIOSRW 00129000
  131. EXTRN DMKVATBC,DMKVATMD 00130000
  132. EXTRN DMKTRCEX @VA09019 00130500
  133. EJECT 00131000
  134. *********************************************************************** 00132000
  135. *********************************************************************** 00133000
  136. * * 00134000
  137. * * 00135000
  138. * 'SYSTEM' * 00136000
  139. *********************************************************************** 00137000
  140. *. 00138000
  141. * SUBROUTINE NAME - 00139000
  142. * DMKCPBSR 00140000
  143. * 00141000
  144. * FUNCTION - 00142000
  145. * SIMULATES SYSTEM RESET AND PSW RESTART. IN ADDITION ALLOWS 00143000
  146. * THE CLEARING OF STORAGE. 00144000
  147. * 00145000
  148. * COMMAND FORMAT - 00146000
  149. * 00147000
  150. * +----------+-----------+ 00148000
  151. * | SYSTEM | CLEAR | 00149000
  152. * | SYS | RESET | 00150000
  153. * | | RESTART | 00151000
  154. * +----------+-----------+ 00152000
  155. * 00153000
  156. * OPERATION - 00154000
  157. * 1. CALL DMKSCNFD TO LOCATE ARGUMENT. IF NO ARGUMENT 00155000
  158. * IS FOUND, CALL DMKERMSG TO SEND ERROR MESSAGE 00156000
  159. * DMKCPB026E. 00157000
  160. * 2. IF ARGUMENT=RESTART, GO TO STEP 6; IF RESET, GO TO 00158000
  161. * STEP 8; IF CLEAR, GO TO NEXT STEP. IF NONE OF 00159000
  162. * THESE, CALL DMKERMSG TO SEND ERROR MESSAGE 00160000
  163. * DMKCPB026E. 00161000
  164. * 3. CLEAR - CALL DMKPGSPO TO CLEAR STORAGE TO BINARY 00162000
  165. * ZERO. 00163000
  166. * 4. CALL DMKCFPRR TO RESET ALL PENDING INTERRUPTS. 00164000
  167. * 5. CALL DMKQCNWT TO SEND THE 'STORAGE CLEARED-SYSTEM 00165000
  168. * RESET' MESSAGE AND EXIT. 00166000
  169. * 6. RESTART - TRANS IN VIRTUAL PAGE ZERO INTO STORAGE. 00167000
  170. * 7. STORE CURRENT VIRTUAL PSW INTO LOCATION EIGHT. THEN 00168000
  171. * SET THE CURRENT PSW TO THE CONTENTS OF LOCATION ZERO 00169000
  172. * AND EXIT. 00170000
  173. * 8. RESET - BAL TO SUBROUTINE AT LABEL RESYSTEM TO 00171000
  174. * RESET ALL THE VIRTUAL DEVICES. 00172000
  175. * 9. CALL DMKQCNWT TO SEND MESSAGE 'SYSTEM RESET' AND 00173000
  176. * EXIT. 00174000
  177. * 00175000
  178. * RESPONSES - 00176000
  179. * STORAGE CLEARED-SYSTEM RESET 00177000
  180. * SYSTEM RESET 00178000
  181. * 00179000
  182. * ERROR MESSAGES - 00180000
  183. * DMKCPB012E INVALID PSW - (PSW) 00181000
  184. * DMKCPB026E OPERAND MISSING OR INVALID 00182000
  185. *. 00183000
  186. EJECT 00184000
  187. DMKCPBSR RELOC SYSTEM RESET, PSW RESTART, OR CLEAR 00185000
  188. CALL DMKSCNFD FIND ARGUMENT 00186000
  189. BNZ CFP026 NONE FOUND 00187000
  190. LR R2,R0 LENGTH TO GPR2 00188000
  191. LR R3,R1 ADDRESS TO GPR3 00189000
  192. BCTR R2,0 MINUS ONE FOR EX 00190000
  193. EX R2,SYSCOMP1 CHECK FOR CLEAR 00191000
  194. BE CLEARMEM BRANCH IF IT IS 00192000
  195. EX R2,SYSCOMP2 TRY RESET 00193000
  196. BE RESALL BRANCH IF COMPARE 00194000
  197. EX R2,SYSCOMP3 HOPE ITS RESTART 00195000
  198. BE PSWREST IF DON'T TAKE THIS BRANCH-- BAD NEWS 00196000
  199. B CFP026 GOT A BAD ARGUMENT 00197000
  200. CLEARMEM CL R2,F4 PROPER LENGTH ????? 00198000
  201. BNE CFP026 NO ------ 00199000
  202. SR R2,R2 INDICATE A CLEAR OPERATION TO PGSPO 00200000
  203. CALL DMKCFPRR SYSTEM RESET 00201000
  204. CALL DMKPGSPO CLEAR ALL OF VIRTUAL MEMORY 00202000
  205. MSG 'STORAGE CLEARED - SYSTEM RESET' 00203000
  206. B WRTAPL GO CLEAR PA2 FLAG @VM03094 00204000
  207. SPACE 2 00205000
  208. RESALL CL R2,F4 PROPER LENGTH ???? 00206000
  209. BNE CFP026 BRANCH IF NOT 00207000
  210. CALL DMKCFPRR SYSTEM RESET 00208000
  211. MSG 'SYSTEM RESET' 00209000
  212. WRTAPL EQU * RESET EXTERNAL INTERRUPT FLAG @VM03094 00210000
  213. NI VMQSTAT,X'FF'-VMPA2APL CLEAR PA2 FLAG @VM03116 00211000
  214. B RESWRT SEND MESSAGE AND EXIT @VM03094 00212000
  215. SPACE 3 00213000
  216. PSWREST CL R2,F6 PROPER LENGTH ???? 00214000
  217. BNE CFP026 NOT IF WE TAKE THIS BRANCH 00215000
  218. SR R1,R1 BRING IN USER PAGE ZERO 00216000
  219. TRANS 2,1,OPT=(BRING,DEFER) 00217000
  220. LM R3,R4,VMPSW LOAD CURRENT PSW 00218000
  221. STM R3,R4,8(R2) STORE INTO USERS LOC. 8 00219000
  222. TM VMPSTAT,VMV370R EC MODE ALLOWED ???? 00220000
  223. BZ CKPSW NO --- 00221000
  224. TM 1(R2),EXTMODE RESTART PSW = EXTENDED ???? 00222000
  225. BZ CKMODE NO ---- 00223000
  226. OI VMESTAT,VMEXTCM TURN ON EC MODE 00224000
  227. TM 0(R2),TRANMODE TRANSLATE MODE 00225000
  228. BZ CKZERO NO ------ 00226000
  229. CALL DMKVATMD ENTER TRANSLATE MODE 00227000
  230. SPACE 00228000
  231. CKZERO TM 2(R2),X'D8' ALLOW ONLY PER OTHER BITS ZERO 00229010
  232. BZ PSWOK YES - PSW OK TO USE 00230000
  233. B ERROR NO - SEND ERROR MESSAGE 00231000
  234. SPACE 00232000
  235. CKMODE TM VMESTAT,VMEXTCM WERE WE IN EC MODE ??? 00233000
  236. BZ PSWOK NO - 00234000
  237. CALL DMKVATBC CLEAR SHADOW TABLES 00235000
  238. NI VMESTAT,X'FF'-VMEXTCM RESET EC MODE 00236000
  239. B PSWOK . . . 00237000
  240. SPACE 00238000
  241. CKPSW TM 1(R2),EXTMODE EXTENDED MODE PSW ???? 00239000
  242. BO ERROR YES - SEND ERROR MESSAGE 00240000
  243. PSWOK EQU * 00241000
  244. LM R0,R1,0(R2) LOAD PSW FROM USERS LOCATION ZERO 00242000
  245. STM R0,R1,VMPSW STORE INTO VIRTUAL PSW IN VMBLOK 00243000
  246. TM VMTRCTL,VMTREX+VMTRBRIN TRACING? @VA09019 00243100
  247. BZ NOTRAC NO - GO ON @VA09019 00243200
  248. L R4,FFS DUMMY INT CODE INTO R4 @VA09019 00243300
  249. LM R0,R1,8(R2) OLD PSW INTO R0,R1 @VA09019 00243400
  250. LM R2,R3,VMPSW NEW PSW INTO R2, R3 @VA09019 00243500
  251. CALL DMKTRCEX CALL EXTERNAL INTERUPT TRACE @VA09019 00243600
  252. NOTRAC EQU * @VA09019 00243700
  253. B RESXRUN GO RUN THE VIRTUAL MACHINE 00244000
  254. SPACE 00245000
  255. ERROR L R1,0(,R2) LOAD FIRST HALF OF BAD PSW 00246000
  256. CALL DMKCVTBH CONVERT TO PRINTABLE FORM 00247000
  257. STM R0,R1,SAVEWRK2 SAVE FOR LATER 00248000
  258. L R1,4(,R2) LOAD SECOND HALF OF PSW 00249000
  259. CALL DMKCVTBH CONVERT IT 00250000
  260. MVC SAVEWRK4(2),BLANKS STICK BLANKS BETWEEN 1ST AND LAST 00251000
  261. STCM R0,15,SAVEWRK4+2 STORE FIELD 00252000
  262. STCM R1,15,SAVEWRK5+2 . . . 00253000
  263. LA R0,18 FIELD LENGTH 00254000
  264. LA R1,SAVEWRK2 ADDRESS OF PSW 00255000
  265. B CFP012 GO SEND MESSAGE 00256000
  266. SPACE 00257000
  267. SYSCOMP1 CLC 0(0,R3),=C'CLEAR ' EXECUTED COMPARE 00258000
  268. SYSCOMP2 CLC 0(0,R3),=C'RESET ' . . . 00259000
  269. SYSCOMP3 CLC 0(0,R3),=C'RESTART ' . . . 00260000
  270. EJECT 00261000
  271. *********************************************************************** 00262000
  272. * * 00263000
  273. * 'EXTERNAL' * 00264000
  274. * * 00265000
  275. *********************************************************************** 00266000
  276. *. 00267000
  277. * 00268000
  278. * SUBROUTINE NAME - 00269000
  279. * DMKCPBEX 00270000
  280. * 00271000
  281. * FUNCTION - 00272000
  282. * TO CAUSE AN EXTERNAL INTERRUPT TO BE PRESENTED TO THE 00273000
  283. * VIRTUAL MACHINE. 00274000
  284. * 00275000
  285. * COMMAND FORMAT - 00276000
  286. * 00277000
  287. * +------------+--------+ 00278000
  288. * | EXTERNAL | CODE | 00279000
  289. * | EXT | | 00280000
  290. * +------------+--------+ 00281000
  291. * 00282000
  292. * OPERATION - 00283000
  293. * 1. SET UP DEFAULT INTERRUPT CODE TO X'40'. THEN CALL 00284000
  294. * DMKSCNFD TO LOCATE ARGUMENT. IF NONE FOUND, GO TO 00285000
  295. * STEP THREE. 00286000
  296. * 2. CALL DMKCVTHB TO CONVERT CODE TO BINARY. IF CONVERT FAILS, 00287000
  297. * CALL DMKERMSG TO SEND ERROR MESSAGE DMKCPB005E. ELSE - 00288000
  298. * SET INTERRUPT CODE TO THIS VALUE. 00289000
  299. * 3. SET EXTERNAL INTERRUPT PENDING FLAG AND EXIT. 00290000
  300. * 00291000
  301. * RESPONSES - 00292000
  302. * SINCE CONTROL IS GIVEN TO THE VIRTUAL MACHINE, ANY RESPONSES 00293000
  303. * WILL COME FROM THE VIRTUAL MACHINE PROCESSING. 00294000
  304. * 00295000
  305. * ERROR MESSAGES - 00296000
  306. * DMKCPB005E INVALID HEXDATA - (HEXDATA) 00297000
  307. *. 00298000
  308. EJECT 00299000
  309. DMKCPBEX RELOC SIMULATE PRESSING THE INTERRUPT KEY 00300000
  310. SLR R3,R3 ZERO REGISTER THREE @V200198 00301000
  311. L R4,=X'00400040' SET DEFAULT CODE @V200198 00302000
  312. CALL DMKSCNFD FIND CODE IF ANY @V200198 00303000
  313. BNZ SETCODE NO CODE, GO SET DEFAULT @V200198 00304000
  314. STM R0,R1,SAVEWRK2 SAVE LENGTH AND ADDRESS @V200198 00305000
  315. CALL DMKCVTHB CONVERT CODE @V200198 00306000
  316. BNZ BADCODE INVALID CODE SPECIFIED @V200198 00307000
  317. CL R1,=A(X'FF') CHECK FOR CLASS ZERO @V200198 00308000
  318. BH NOTZERO MUST BE CLASS ONE @V200198 00309000
  319. LTR R4,R1 PUT CODE IN REG4 @VA04309 00310300
  320. BZ BADCODE IMPOSSIBLE CONDITION @VA04309 00310600
  321. ST R4,SAVEWRK5 STORE FOR TESTING BITS @V200198 00311000
  322. SLL R4,16 MAKE ROOM FOR MASK BITS @V200198 00312000
  323. N R1,=A(X'C0') SELECT BUTTON AND TIMER CODES @V200198 00313000
  324. BZ *+6 NONE THERE, SKIP @VM08922 00314000
  325. OR R4,R1 SAVE RESULTING MASK BITS @V200198 00315000
  326. TM SAVEWRK5+3,X'3F' CHECK FOR SIGNSL LINES @V200198 00316000
  327. BZ SETCODE NONE THERE, GO SET WHAT WE HAVE @V200198 00317000
  328. O R4,=A(X'20') PUT IN MASK BIT FOR SIGNAL LINES @V200198 00318000
  329. B SETCODE ALL DONE,GO SET CODE @V200198 00319000
  330. NOTZERO TM VMPSTAT,VMV370R EXTENDED MACHINE? @V200198 00320000
  331. BZ BADCODE NO, ALL OTHER CODES ILLEGAL @V200198 00321000
  332. LM R3,R4,=X'1040000010040800' CODE FOR COMPARATOR @V200198 00322000
  333. CL R1,=A(X'1004') SETTING COMPARATOR? @V200198 00323000
  334. BE SETCODE YES, SET IT @V200198 00324000
  335. LM R3,R4,=X'1050000010050400' CODE FOR CPU TIMER @V200198 00325000
  336. CL R1,=A(X'1005') SETTING TIMER 00326000
  337. BNE BADCODE NO --- OTHERS NOT SUPPORTED 00327000
  338. SPACE 00328000
  339. SETCODE SLR R5,R5 PARAMETER IS MEANINGLESS HERE @V200198 00329000
  340. LA R2,VMPXINT START OF EXTERNAL INTERRUPT @V200198 00330000
  341. * BLOCKS 00331000
  342. USING XINTBLOK,R2 EXTERNAL INTERRUPT BLOCK @V200198 00332000
  343. XLOOP LR R6,R2 PRESERVE POINTER TO PREVIOUS @V200198 00333000
  344. L R2,XINTNEXT-XINTBLOK(,R6) NEXT? @V200198 00334000
  345. LTR R2,R2 @V200198 00335000
  346. BZ XADD NOPE, ADD TO END OF CHAIN @V200198 00336000
  347. C R3,XINTSORT CHECK FOR COLLATING SEQUENCE @V200198 00337000
  348. BH XLOOP KEEP LOOKING... @V200198 00338000
  349. BL XADD FITS RIGHT IN HERE @V200198 00339000
  350. O R4,XINTCODE SAME COLLATING SEQUENCE @V200198 00340000
  351. ST R4,XINTCODE SO OR TO STORAGE @V200198 00341000
  352. B RESXRUN RETURN TO CALLER @V200198 00342000
  353. XADD LA R0,XINTSIZE NUMBER OF DOUBLEWORDS @V200198 00343000
  354. CALL DMKFREE GET BLOCK FORM FREE STORAGE @V200198 00344000
  355. ST R1,XINTNEXT-XINTBLOK(,R6) CHAIN TO PREVIOUS @V200198 00345000
  356. * BLOCK 00346000
  357. STM R2,R5,XINTNEXT-XINTBLOK(R1) BUILD NEW @V200198 00347000
  358. * INTERRUPT BLOCK 00348000
  359. B RESXRUN GO RUN THE VIRTUAL MACHINE 00349000
  360. SPACE 00350000
  361. BADCODE LM R0,R1,SAVEWRK2 RELOAD LENGTH AND ADDRESS OF ARG. 00351000
  362. B CFP005 . . . 00352000
  363. EJECT 00353000
  364. *********************************************************************** 00354000
  365. * * 00355000
  366. * 'READY' * 00356000
  367. * * 00357000
  368. *********************************************************************** 00358000
  369. *. 00359000
  370. * 00360000
  371. * SUBROUTINE NAME - 00361000
  372. * DMKCPBRY 00362000
  373. * 00363000
  374. * FUNCTION - 00364000
  375. * TO SIMULATE A DEVICE END INTERRUPT TO THE SPECIFIED DEVICE. 00365000
  376. * 00366000
  377. * COMMAND FORMAT - 00367000
  378. * 00368000
  379. * +---------+---------+ 00369000
  380. * | READY | VADDR | 00370000
  381. * | R | | 00371000
  382. * +---------+---------+ 00372000
  383. * 00373000
  384. * OPERATION - 00374000
  385. * 1. BAL R10 TO SUBROUTINE 'FNDVADDR' TO GET ADDRESSES OF THE 00375000
  386. * VBLOKS. 00376000
  387. * 2. IF THE DEVICE IS BUSY, JUST EXIT SINCE THE DEVICE END WILL 00377000
  388. * COME ANYWAY. 00378000
  389. * 2.1 IF THE DEVICE IS A VIRTUAL CHANNEL-TO-CHANNEL ADAPTER, 00379000
  390. * ISSUE MSG DMKCPB006E AND EXIT. 00380000
  391. * 3. SET INTERRUPT PENDING FLAGS IN THE VDEVBLOK,VCUBLOK, 00381000
  392. * VCHBLOK, AND VMBLOK - THEN EXIT. 00382000
  393. * 00383000
  394. * RESPONSES - 00384000
  395. * A NULL LINE WILL BE SENT ON A SUCCESSFUL OPERATION 00385000
  396. * 00386000
  397. * ERROR MESSAGES - 00387000
  398. * DMKCPB006E INVALID DEVICE TYPE - (ADDR) 00388000
  399. * DMKCPB022E VADDR MISSING OR INVALID 00389000
  400. * DMKCPB040E DEV (ADDR) DOES NOT EXIST 00390000
  401. *. 00391000
  402. EJECT 00392000
  403. DMKCPBRY RELOC CAUSE A VIRTUAL DEVICE END INTERRUPT 00393000
  404. BAL R10,FNDVADDR GO GET VBLOKS 00394000
  405. USING VCHBLOK,R6 00395000
  406. USING VCUBLOK,R7 00396000
  407. USING VDEVBLOK,R8 00397000
  408. TM VDEVSTAT,VDEVBUSY IS THE DEVICE BUSY ? 00398000
  409. BO RESEXT RETURN AND LET IT READY NATURALLY 00399000
  410. LA R1,CLASSPEC*256+TYPCTCA CHECK FOR VIRTUAL CTCA 00400000
  411. CH R1,VDEVTYPC IS IT A CHAN-TO-CHAN ADAPTER ? 00401000
  412. BNE CPBRYOK NO -- IT'S O.K. TO READY IT 00402000
  413. TM VDEVSTAT,VDEVDED DEDICATED CTCA ? 00403000
  414. BO CPBRYOK YES - ALSO O.K. 00404000
  415. TM VDEVSTAT,VDEVNRDY IF THE CTCA IS NOT READY NOW... 00405000
  416. BO BADTYPE ...'COUPLE' CMD MUST READY IT, NOT US 00406000
  417. CPBRYOK EQU * MAKE DEVICE READY, PRESENT DEVICE END 00407000
  418. NI VDEVSTAT,255-VDEVNRDY TURN OFF NOT READY FLAG 00408000
  419. OI VDEVSTAT,VDEVPEND INDICATE AN INTERRUPT IS PENDING 00409000
  420. MVI VDEVINTS,DE SET DEVICE END STATUS 00410000
  421. L R1,=A(DMKVIOMK) LOAD ADDRESS OF INTERRUPT MASKS 00411000
  422. LH R2,VDEVADD LOAD THE VIRTUAL DEVICE ADDRESS 00412000
  423. AR R2,R2 MULTIPLY IT BY 2 00413000
  424. LA R2,0(R1,R2) POINT TO PROPER MASK 00414000
  425. OC VCUDVINT,0(R2) SET PENDING FLAG IN VCUBLOK 00415000
  426. LH R2,VCUADD LOAD THE VIRTUAL CONTROL UNIT ADDRESS 00416000
  427. SRL R2,3 MULTIPLY IT BY 2 00417000
  428. LA R2,0(R1,R2) POINT TO THE PROPER MASK 00418000
  429. OC VCHCUINT,0(R2) SET PENDING FLAG IN VCHBLOK 00419000
  430. LH R2,VCHADD LOAD THE VIRTUAL CHANNEL ADDRESS 00420000
  431. SRL R2,7 MULTIPLY IT BY 2 00421000
  432. LA R2,0(R1,R2) POINT TO THE PROPER MASK 00422000
  433. OC VMIOINT,0(R2) FLAG CHANNEL PENDING IN VMBLOK 00423000
  434. OI VMPEND,VMIOPND FLAG SUMMARY PENDING BYTE 00424000
  435. B RESEXT RETURN 00425000
  436. DROP R6,R7,R8 00426000
  437. EJECT 00427000
  438. *. 00428000
  439. * SUBROUTINE NAME - 00429000
  440. * DMKCPBNR 00430000
  441. * 00431000
  442. * FUNCTION - 00432000
  443. * TO CAUSE THE VIRTUAL DEVICE TO APPEAR NOT READY. 00433000
  444. * 00434000
  445. * COMMAND LINE FORMAT - 00435000
  446. * +------------+---------+ 00436000
  447. * | NOTREADY | VADDR | 00437000
  448. * | NOTR | | 00438000
  449. * +------------+---------+ 00439000
  450. * 00440000
  451. * OPERATION - 00441000
  452. * 1. BAL R10 TO SUBROUTINE 'FNDVADDR' TO GET THE ADDRESSES OF 00442000
  453. * THE VBLOKS. 00443000
  454. * 2. IF THE VIRTUAL DEVICE IS NOT A VIRTUAL CONSOLE OR SPOOLED 00444000
  455. * UNIT RECORD DEVICE, CALL DMKERMSG TO SEND ERROR MESSAGE 00445000
  456. * DMKCPB006E. IF OK, SET THE VDEVNRDY FLAG IN THE VDEVSTAT. 00446000
  457. * 00447000
  458. * RESPONSES - 00448000
  459. * NONE 00449000
  460. * 00450000
  461. * ERROR MESSAGES - 00451000
  462. * DMKCPV006E INVALID DEVICE TYPE - (ADDR) 00452000
  463. * DMKCPB022E VADDR MISSING OR INVALID 00453000
  464. * DMKCPB040E DEV (ADDR) DOES NOT EXIST 00454000
  465. *. 00455000
  466. EJECT 00456000
  467. DMKCPBNR RELOC 00457000
  468. BAL R10,FNDVADDR GET VBLOK ADDRESSES 00458000
  469. USING VDEVBLOK,R8 00459000
  470. TM VDEVTYPC,CLASURO+CLASURI UNIT RECORD ????? 00460000
  471. BNZ CHKDED IF UR, GO CHECK IF DEDICATED 00461000
  472. TM VDEVTYPC,CLASTERM MIGHT BE A CONSOLE 00462000
  473. BZ BADTYPE IF IT ISN'T, GO SEND ERROR MESSGAE 00463000
  474. CLI VDEVTYPE,TYP3210 MAKE SURE IT'S A CONSOLE 00464000
  475. BNE BADTYPE NOPE -- CAN'T MAKE NOTREADY 00465000
  476. SPACE 00466000
  477. CHKDED TM VDEVSTAT,VDEVDED DEDICATED ????? 00467000
  478. BO BADTYPE YES -- CAN'T MAKE NOTREADY 00468000
  479. OI VDEVSTAT,VDEVNRDY SET NOT READY FLAG 00469000
  480. DROP R8 00470000
  481. B RESEXT RETURN 00471000
  482. EJECT 00472000
  483. *********************************************************************** 00473000
  484. * * 00474000
  485. * 'RESET' * 00475000
  486. * * 00476000
  487. *********************************************************************** 00477000
  488. *. 00478000
  489. * SUBROUTINE NAME - 00479000
  490. * DMKCPBRS 00480000
  491. * 00481000
  492. * FUNCTION - 00482000
  493. * TO RESET ALL PENDING INTERRUPTS FROM THE SPECIFIED DEVICE. 00483000
  494. * 00484000
  495. * COMMAND FORMAT - 00485000
  496. * 00486000
  497. * +---------+---------+ 00487000
  498. * | RESET | VADDR | 00488000
  499. * | RESET | | 00489000
  500. * +---------+---------+ 00490000
  501. * 00491000
  502. * OPERATION - 00492000
  503. * 1. BAL R10 TO SUBROUTINE 'FNDVADDR' TO GET THE VBLOKS. 00493000
  504. * 2. CALL DMKCFPRD TO RESET THE DEVICE. 00494000
  505. * 3. IF DEVICE TYPE IS TYPIBM1 OR TYPTELE2, CALL DMKVDBRL TO 00495000
  506. * RELEASE THE DEVICE. 00496000
  507. * 4. CALL DMKQCNWT TO SEND THE RESPONSE 'DEVICE RESET' - EXIT. 00497000
  508. * 00498000
  509. * RESPONSES - 00499000
  510. * DEVICE RESET 00500000
  511. * 00501000
  512. * ERROR MESSAGES - 00502000
  513. * DMKCPB022E VADDR MISSING OR INVALID 00503000
  514. * DMKCPB040E DEV (ADDR) DOES NOT EXIST 00504000
  515. *. 00505000
  516. EJECT 00506000
  517. DMKCPBRS RELOC RESET A VIRTUAL DEVICE 00507000
  518. BAL R10,FNDVADDR GET VBLOKS 00508000
  519. USING VCHBLOK,R6 00509000
  520. USING VCUBLOK,R7 00510000
  521. USING VDEVBLOK,R8 00511000
  522. CALL DMKCFPRD RESET THE VIRTUAL DEVICE 00512000
  523. SPACE 00513000
  524. RESMSG MSG 'DEVICE RESET' 00514000
  525. SPACE 00515000
  526. RESWRT CALL DMKQCNWT,PARM=NORET SEND VERIFICATION MESSAGE 00516000
  527. SPACE 00517000
  528. RESEXT EXIT RETURN TO THE CALLER 00518000
  529. SPACE 2 00519000
  530. RESXRUN EQU * ADJUST RETURN ADDRESS FOR RUNNING V.M. 00520000
  531. L R1,SAVERETN ADD FOUR TO RETURN ADDRESS... 00521000
  532. LA R1,4(0,R1) ...TO TAKE MACHINE OUT OF... 00522000
  533. ST R1,SAVERETN ...CONSOLE FUNCTION MODE 00523000
  534. EXIT , EXIT TO DMKCFM, RUN THE VIRTUAL MACHINE 00524000
  535. EJECT 00525000
  536. ********************************************************************** 00526000
  537. * * 00527000
  538. * 'REWIND' * 00528000
  539. * * 00529000
  540. ********************************************************************** 00530000
  541. *. 00531000
  542. * SUBROUTINE NAME - 00532000
  543. * DMKCPBRW 00533000
  544. * 00534000
  545. * FUNCTION - 00535000
  546. * ISSUE A REWIND TO THE REAL TAPE DEVICE ASSOCIATED WITH THE 00536000
  547. * VIRTUAL ADDRESS SPCIFIED. 00537000
  548. * 00538000
  549. * COMMAND FORMAT - 00539000
  550. * 00540000
  551. * +----------+---------+ 00541000
  552. * | REWIND | VADDR | 00542000
  553. * | REW | | 00543000
  554. * +----------+---------+ 00544000
  555. * 00545000
  556. * OPERATION - 00546000
  557. * 1. BAL R10 TO SUBROUTINE 'FNDVADDR' TO GET THE ADDRESSES 00547000
  558. * OF THE VBLOKS. 00548000
  559. * 2. IF THE DEVICE IS NOT A TAPE, CALL DMKERMSG TO SEND ERROR 00549000
  560. * MESSAGE DMKCPB006E. 00550000
  561. * 3. CALL DMKFREE TO OBTAIN STORAGE FOR AN IOBLOK AND CCW. 00551000
  562. * 4. INITIALIZE THE IOBLOK TO DO A SENSE OPERATION. CALL 00552000
  563. * DMKIOSQR TO DO THE SENSE. GO TO DMKDSPCH TO WAIT FOR THE 00553000
  564. * SENSE TO COMPLETE¬ WHEN SENSE IS DONE| CHECK IF THE TAPE 00554000
  565. * IS READY. IF NOT, CALL DMKFRET TO FRET THE IOBLOK AND 00555000
  566. * THEN CALL DMKQCNWT TO SEND THE RESPONSE 'REWIND NOT 00556000
  567. * PERFORMED' AND EXIT. 00557000
  568. * 5. IF TAPE IS READY, SET UP THE IOBLOK FOR A REWIND AND 00558000
  569. * CALL DMKIOSQR TO DO THE REWIND. CALL DMKQCNWT TO SEND THE 00559000
  570. * RESPONSE 'REWIND COMPLETE' AND EXIT. 00560000
  571. * 00561000
  572. * RESPONSES - 00562000
  573. * REWIND COMPLETE 00563000
  574. * REWIND NOT PERFORMED 00564000
  575. * 00565000
  576. * ERROR MESSAGE - 00566000
  577. * DMKCPB006E INVALID DEVICE TYPE - (ADDR) 00567000
  578. * DMKCPB022E VADDR MISSING OR INVALID 00568000
  579. * DMKCPB040E DEV (ADDR) DOES NOT EXIST 00569000
  580. *. 00570000
  581. EJECT 00571000
  582. DMKCPBRW RELOC REWIND A TAPE 00572000
  583. BAL R10,FNDVADDR GET VBLOKS 00573000
  584. USING VDEVBLOK,R8 00574000
  585. CLI VDEVTYPC,CLASTAPE IS THIS A TAPE DEVICE 00575000
  586. BNE BADTYPE INVALID TYPE 00576000
  587. L R8,VDEVREAL LOAD ADDRESS OF RDEVBLOK 00577000
  588. DROP R8 00578000
  589. USING RDEVBLOK,R8 00579000
  590. USING RCUBLOK,R7 00580000
  591. USING RCHBLOK,R6 00581000
  592. L R7,RDEVCUA ADDRESS OF RCUBLOK 00582000
  593. TM RCUTYPE,RCUSUB IS THIS A SUBORDINATE CU @VA01081 00583000
  594. BZ *+8 NO- BRANCH @VA01081 00584000
  595. L R7,RCUPRIME YES- POINT TO THE PRIME CU @VA01081 00585000
  596. L R6,RCUCHA ADDRESS OF RCHBLOK 00586000
  597. LA R0,IOBSIZE LOAD SIZE OF IOBLOK @VA04137 00587100
  598. CALL DMKFREE GET STORAGE FOR IOBLOK 00588000
  599. LR R10,R1 MAKE R10 BASE FOR IOBLOK 00589000
  600. USING IOBLOK,R10 00590000
  601. XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR IOBLOK 00591000
  602. ST R11,IOBUSER REQUESTOR OF THE SERVICE 00592000
  603. LA R0,3 SIZE OF RCWTASK NEEDED @VA04137 00593500
  604. CALL DMKFREE @VA04137 00594000
  605. ST R1,IOBCAW SAVE ADDRESS OF RCWTASK @VA04137 00594500
  606. LA R0,1 GET BUFFER FOR THE SENSE DATA 00595000
  607. CALL DMKFREE ..... 00596000
  608. MVC 0(8,R1),ZEROES CLEAR BUFFER 00597000
  609. LR R7,R1 SAVE THE BUFFER ADDRESS 00598000
  610. LM R3,R6,REWCCWS LOAD THE SENSE AND REWIND CCW'S 00599000
  611. OR R3,R1 ADDRESS OF SENSE BUFFER TO CCW 00600000
  612. L R1,IOBCAW POINT TO RCWTASK @VA04137 00601090
  613. USING RCWTASK,R1 @VA04137 00601180
  614. XC RCWTASK(24),RCWTASK CLEAR RCWTASK @VA04137 00601270
  615. STM R3,R4,RCWCCW MOVE IN SENSE CCW @VA04137 00601360
  616. LA R3,3 ESTABLISH RCWTASK SIZE @VA04137 00601450
  617. STH R3,RCWCCNT STORE TOTAL NO. OF DBL-WORDS @VA04137 00601540
  618. L R15,FFS INITIALIZE RCWHEAD .... @VA04137 00601630
  619. STH R15,RCWHEAD ... TO 'FFFF' @VA04137 00601720
  620. LA R15,RCWCCW NOW WE HAVE TO.... @VA04137 00601810
  621. ST R15,IOBCAW POINT IOBCAW TO CCW @VA04137 00601900
  622. ST R13,IOBMISC SAVE ADDRESS OF SAVEAREA 00602000
  623. STM R5,R8,SAVEWRK2 SAVE REGISTERS NEEDED UPON RETURN 00603000
  624. LA R1,SENSRETN ADDRESS OF RETURN FROM SENSE 00604000
  625. ST R1,IOBIRA STORE IT 00605000
  626. TM RDEVSTAT,RDEVBUSY IF THE DEVICE IS ALREADY BUSY... 00606000
  627. BO NOREW ...WE WON'T START THE REWIND 00607000
  628. CALL DMKIOSQR QUEUE IT 00608000
  629. GOTO DMKDSPCH WAIT FOR IT 00609000
  630. SPACE 00610000
  631. SENSRETN EQU * 00611000
  632. USING *,R12 00612000
  633. SL R12,=A(SENSRETN-DMKCPB) REESTABILISH ADDRESSABLITY 00613000
  634. USING DMKCPB,R12 00614000
  635. L R13,IOBMISC RELOAD SAVEAREA ADDRESS 00615000
  636. LM R5,R8,SAVEWRK2 RESTORE NEEDED REGISTERS 00616000
  637. TM 0(R7),X'40' TEST FOR INT. REQ. 00617000
  638. BO NOREW DON'T DO REWIND IF IT IS 00618000
  639. LR R1,R7 BEFORE DOING REWIND 00619000
  640. LA R0,1 FRET THE SENSE BUFFER 00620000
  641. CALL DMKFRET ..... 00621000
  642. L R1,IOBCAW POINT TO CCW @VA04137 00622150
  643. SL R1,F16 POINT TO BEGINNING OF RCWTASK @VA04137 00622300
  644. STM R5,R6,RCWCCW MOVE REWIND CCW INTO RCWTASK @VA04137 00622450
  645. L R1,=A(DMKIOSRW) IRA ADDRESS 00623000
  646. ST R1,IOBIRA STORE IT 00624000
  647. L R1,ASYSVM USE THE SYSTEM VMBLOK FOR THE REW. 00625000
  648. ST R1,IOBUSER ....... 00626000
  649. CALL DMKIOSQR QUEUE REWIND 00627000
  650. MSG 'REWIND COMPLETE' 00628000
  651. B RESWRT SEND MESSAGE AND GET OUT 00629000
  652. SPACE 00630000
  653. NOREW LR R1,R7 FRET SENSE BUFFER 00631000
  654. LA R0,1 .... 00632000
  655. CALL DMKFRET .... 00633000
  656. L R1,IOBCAW POINT TO CCW @VA04137 00633150
  657. SL R1,F16 POINT TO BEGINNING OF RCWTASK @VA04137 00633300
  658. LH R0,RCWCCNT GET SIZE OF RCWTASK @VA04137 00633450
  659. CALL DMKFRET RELEASE RCWTASK @VA04137 00633600
  660. DROP R1 @VA04137 00633750
  661. LR R1,R10 FRET THE IOBLOK 00634000
  662. LA R0,IOBSIZE .... @VA04137 00635500
  663. CALL DMKFRET .... 00636000
  664. MSG 'REWIND NOT PERFORMED' 00637000
  665. B RESWRT SEND RESPONSE AND EXIT 00638000
  666. SPACE 00639000
  667. DROP R8,R10 00640000
  668. SPACE 00641000
  669. BADTYPE LM R0,R1,SAVEWRK2 LOAD ADDRESS AND LENGTH OF BAD ARG. 00642000
  670. B CFP006 GO SEND ERROR MESSAGE 00643000
  671. SPACE 00644000
  672. REWCCWS CCW 04,0,SILI,6 SENSE CCW 00645000
  673. CCW 07,0,SILI,1 REWIND CCW 00646000
  674. EJECT 00647000
  675. *. 00648000
  676. * SUBROUTINE NAME - 00649000
  677. * FNDVADDR 00650000
  678. * 00651000
  679. * FUNCTION - 00652000
  680. * TO LOCATE AND VERIFY THE EXISTENCE OF A VADDR. 00653000
  681. * 00654000
  682. * OPERATION - 00655000
  683. * 1. CALL DMKSCNFD TO LOCATE THE VADDR. IF NONE IS FOUND, CALL 00656000
  684. * DMKERMSG TO SEND ERROR MESSAGE DMKCFP022E. 00657000
  685. * 2. IF THE LENGTH OF THE ARGUMENT IS OVER THREE CHARACTERS, 00658000
  686. * CALL DMKERMSG TO SEND ERROR MESSAGE DMKCFP 022E. 00659000
  687. * 3. CALL DMKCVTHB TO CONVERT THE ADDRESS TO BINARY. IF THE 00660000
  688. * CONVERT FAILS, CALL DMKERMSG TO SEND ERROR MESSAGE 00661000
  689. * DMKCFP022E. 00662000
  690. * 4. CALL DMKSCNVU TO LOCATE THE VBLOK ADDRESSES. IF NOT FOUND, 00663000
  691. * CALL DMKERMSG TO SEND ERROR MESSAGE DMKCFP040E. 00664000
  692. * 5. IF EVERYTHING OS OK, RETURN ON R10. 00665000
  693. *. 00666000
  694. SPACE 3 00667000
  695. FNDVADDR EQU * 00668000
  696. CALL DMKSCNFD GET DEVICE ADDRESS 00669000
  697. BNZ CFP022 BRANCH IF CAN'T FIND 00670000
  698. STM R0,R1,SAVEWRK2 SAVE LEN AND ADDR FOR POSSIBLE ERROR 00671000
  699. CL R0,F3 CAN ONLY HAVE THREE CHARACTERS 00672000
  700. BH CFP022 BRANCH IF HE GOOFED 00673000
  701. CALL DMKCVTHB CONVERT THE ADDRESS TO BINARY 00674000
  702. BNZ CFP022 BAD CONVERT IF BRANCH 00675000
  703. MAXDV R15 GET HIGHEST VIRTUAL DEVICE 00676000
  704. CLR R1,R15 VALID VIRTUAL ADDRESS ? 00677000
  705. BH CFP022 NOPE ---- 00678000
  706. CALL DMKSCNVU NOW LETS GET THE BLOKS 00679000
  707. BNZ CPBCKMSS MAY BE RESET OF MSS PENDING VADDR@V60B6B8 00680000
  708. BR R10 RETURN--- 00681000
  709. EJECT 00682000
  710. CFP005 LA R2,005 LOAD ERROR CODE 00683000
  711. B CALLERM . . . 00684000
  712. SPACE 00685000
  713. CFP006 LA R2,006 ERROR CODE 00686000
  714. B CALLERM . . . 00687000
  715. SPACE 00688000
  716. CFP012 LA R2,012 ERROR CODE 00689000
  717. B CALLERM . . . 00690000
  718. CFP026 LA R2,26 ERROR CODE 00691000
  719. B NOVAR 00692000
  720. CFP022 LA R2,22 ERROR CODE 00693000
  721. B NOVAR . . . 00694000
  722. CFP040 CALL DMKCVTBH CONVERT TO PRINTABLE FORM 00695000
  723. N R1,X40FFS BLANK HIGH BYTE 00696000
  724. SLR R0,R0 ZERO LENGTH REGISTER 00697000
  725. LA R2,40 ERROR CODE 00698000
  726. B CALLERM . . . 00699000
  727. CPBCKMSS EQU * SEE IF DEVICE HAS I/O PENDING @V60B6B8 00699020
  728. * 00699040
  729. * IF THE VADDR SPECIFIED IS MAPPED TO AN MSS 3330V, 00699060
  730. * THEN IT IS POSSIBLE THAT DMKVSI OR DMKDGD 00699080
  731. * HAS QUEUED A SIO, PENDING THE VOLUME MOUNT 00699100
  732. * AND VDEVBLOK BUILD. IF THIS IS THE CASE, 00699120
  733. * CLEAR THE PENDING I/O. 00699140
  734. * 00699160
  735. L R3,MSSQADD ADDR OF Q OF MSSCOM BLOCKS @V60B6B8 00699180
  736. LTR R3,R3 IS THE VCON = 0,POSSIB. NO DMKSSS@VA09319 00699185
  737. BZ CFP040 NO, BAD RESET COMMAND @VA09319 00699190
  738. L R3,0(R3) POINTER TO FIRST MSSCOM BLOCK @V60B6B8 00699200
  739. USING OSVSCOM,R3 ASSEMBLER ADDRESSABILITY @V60B6B8 00699220
  740. TESTBLOK EQU * SEE IF THERE IS A BLOCK @V60B6B8 00699240
  741. LTR R3,R3 IS THERE A BLOCK PTR @V60B6B8 00699260
  742. BZ CFP040 NO, BAD RESET COMMAND @V60B6B8 00699280
  743. CLC VMUSER(8),MSSUSER IS BLOCK FOR THIS USER @V60B6B8 00699300
  744. BE TESTDEV YES, SEE IF THIS DEVICE @V60B6B8 00699320
  745. NEXTCOM EQU * GET NEXT MSSCOM BLOCK @V60B6B8 00699340
  746. L R3,MSSNEXT NEXT BLOCK CHAIN PTR @V60B6B8 00699360
  747. B TESTBLOK SEE IF THERE IS ONE @V60B6B8 00699380
  748. TESTDEV EQU * SEE IF THIS DEVICE IS PENDING @V60B6B8 00699400
  749. L R4,MSSTASK2 CPEXBLOK PTR @V60B6B8 00699420
  750. LTR R4,R4 IS THERE ONE @V60B6B8 00699440
  751. BZ NEXTCOM NO, TEST FOR ANOTHER MSSCOM @V60B6B8 00699460
  752. DROP R3 @V60B6B8 00699480
  753. * 00699500
  754. * TEST TO SEE IF THE VADDR ON THE RESET COMMAND IS THE 00699520
  755. * SAME AS THE VADDR WHICH HAS MSS I/O PENDING 00699540
  756. * 00699560
  757. C R1,CPEXMISC-CPEXBLOK(R4) IS IT THIS VADDR @V60B6B8 00699580
  758. BNE CFP040 NO, JUST BAD PARAMETER @V60B6B8 00699600
  759. LR R1,R4 CPEXBLOK ADDR @V60B6B8 00699620
  760. LA R0,4 RETURN CODE VALUE @V60B6B8 00699640
  761. ST R0,CPEXMISC-CPEXBLOK(R1) SET ERROR CODE @V60B6B8 00699660
  762. CALL DMKSTKCP STACK THE EXBLOK @V60B6B8 00699680
  763. GOTO DMKDSPCH AND CALL THE DISPATCHER @V60B6B8 00699700
  764. SPACE 00700000
  765. NOVAR SR R1,R1 ZERO ARG REG 00701000
  766. CALLERM ICM R0,14,MODID+3 INSERT MODULE ID 00702000
  767. CALL DMKERMSG CALL MESSAGE MODULE 00703000
  768. * 00704000
  769. * MESSAGE MODULE RETURNS DIRECTLY TO DMKCFM 00705000
  770. * 00706000
  771. MSSQADD DC V(DMKSSSMQ) @V60B6B8 00706500
  772. EJECT 00707000
  773. LTORG 00708000
  774. EJECT 00709000
  775. OSVSCOM MSSCOM @V60B6B8 00709500
  776. PSA , @V306638 00710000
  777. COPY DEVTYPES @V306638 00711000
  778. COPY EQU @V306638 00712000
  779. COPY IOBLOKS @V306638 00713000
  780. COPY RBLOKS @V306638 00714000
  781. COPY SAVE @V306638 00715000
  782. COPY VBLOKS @V306638 00716000
  783. COPY VMBLOK @V306638 00717000
  784. COPY XINTBLOK @V306638 00718000
  785. END DMKCPB 00719000