Table of Contents

DMKTAP Source

References

Source Listing

DMKTAP.ASSEMBLE.txt
  1. TAP TITLE 'DMKTAP (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 VALIDATE INPUT SERIALIZATION 00002000
  3. *. 00003000
  4. * MODULE NAME : DMKTAP 00004000
  5. * 00005000
  6. * 00006000
  7. * 00007000
  8. * FUNCTION : TO EXAMINE THE ERROR CONDITION RESULTING FROM A UNIT CHECK 00008000
  9. * WHILE EXECUTING A CP GENERATED TAPE CHANNEL PROGRAM. 00009000
  10. * POSITIONING OF THE TAPE WILL BE REQUIRED ON READ/WRITE 00010000
  11. * COMMANDS AND THE CHANNEL PROGRAM RE-EXECUTED. 00011000
  12. * IF THE ERROR CONDITION IS UNCORRECTABLE A CALL WILL BE 00012000
  13. * ISSUED TO THE MESSAGE WRITER (DMKMSW) FOR OPERATOR 00013000
  14. * AWARENESS. ON REGAINING CONTROL FROM DMKMSW THE ORIGINAL 00014000
  15. * CHANNEL PROGRAM MAY BE RE-EXECUTED OR TERMINATED. 00015000
  16. * 00016000
  17. * TO ISSUE A RELEASE CCW TO TAPE DEVICE TO DETERMINE 00017000
  18. * IF HARDWARE HAS 2/4 CHANNEL SWITCH. 00018000
  19. * 00019000
  20. * 00020000
  21. * 00021000
  22. * ATTRIBUTES : REENTRANT,PAGEABLE,CALLED VIA SVC. 00022000
  23. * 00023000
  24. * 00024000
  25. * ENTRY POINTS : DMKTAPER - TO RETRY THE FAILING TAPE CHANNEL PROGRAM. 00025000
  26. * - ENTRY AFTER A TAPE POSITIONING COMMAND HAS 00026000
  27. * BEEN EXECUTED. 00027000
  28. * DMKTAPRL - TO ISSUE RELEASE CCW TO TAPE DEVICE 00028000
  29. * TO DETERMINE IF 2/4 CHANNEL SWITCH 00029000
  30. * FEATURE IS ON THE HARDWARE. 00030000
  31. * 00031000
  32. * ENTRY CONDITIONS: 00032000
  33. * DMKTAPER - 00033000
  34. * GPR8=ADDRESS OF RDEVBLOK 00034000
  35. * GPR10=ADDRESS OF IOBLOK 00035000
  36. * GPR12=BASE ADDRESS 00036000
  37. * GPR13=ADDRESS OF SAVE AREA 00037000
  38. * 00038000
  39. * DMKTAPRL - 00039000
  40. * GPR2=DEVICE ADDRESS 00040000
  41. * GPR6=RCHBLOK ADDRESS 00041000
  42. * GPR7=RCUBLOK ADDRESS 00042000
  43. * GPR8=RDEVBLOK ADDRESS 00043000
  44. * 00044000
  45. * 00045000
  46. * EXIT CONDITIONS: 00046000
  47. * DMKTAPER - 00047000
  48. * 1. WHEN RETRY IS POSSIBLE. 00048000
  49. * IOBFLAG=IOBRSTRT 00049000
  50. * IOBRCAW=ADDRESS OF RESTART CCW STRING OR 00050000
  51. * ADDRESS OF REPOSITIONING COMMAND. 00051000
  52. * 2. WHEN RETRY IS NOT POSSIBLE. 00052000
  53. * IOBFLAG=IOBFATAL 00053000
  54. * 00054000
  55. * DMKTAPRL - 00055000
  56. * RETURN TO THE DISPATCHER. 00056000
  57. * 00057000
  58. * 00058000
  59. * CALLS TO OTHER ROUTINES : 00059000
  60. * DMKTAPER - 00060000
  61. * 1. DMKMSW - TO PROVIDE OPERATOR COMMUNICATION 00061000
  62. * IN ATTEMPTING TO CORRECT THE ERROR 00062000
  63. * CONDITION. 00063000
  64. * 2. DMKIOEST - TO UPDATE STATISTICAL COUNTERS 00064000
  65. * 00065000
  66. * DMKTAPRL - 00066000
  67. * 1. DMKIOSQR - PERFORM TIO/REL 00067000
  68. * 2. DMKPTRUL - UNLOCK DMKTAP PAGE 00068000
  69. * 00069000
  70. * DMKTAPER/DMKTAPRL 00070000
  71. * 1. DMKFREE - TO OBTAIN STORAGE FOR WORK AREAS 00071000
  72. * 2. DMKFRET - TO RETURN STORAGE WORK AREAS. 00072000
  73. * 4. DMKIOEST - TO UPDATE STATISTICAL COUNTERS 00073000
  74. * 00074000
  75. * 00075000
  76. * 00076000
  77. * EXTERNAL REFERENCES : NONE 00077000
  78. * 00078000
  79. * 00079000
  80. * 00080000
  81. * TABLES AND WORK AREAS : IOBLOK,IOERBLOK,RDEVBLOK. 00081000
  82. * INTERNAL WORK AREA - TAPREL (2 DWDS.) 00082000
  83. * 00083000
  84. * 00084000
  85. * 00085000
  86. * REGISTER USAGE : 00086000
  87. * GPR0-6=SCRATCH 00087000
  88. * GPR 7=IOERBLOK ADDRESS. 00088000
  89. * GPR 8=RDEVBLOK ADDRESS. 00089000
  90. * GPR 9=SCRATCH 00090000
  91. * GPR 10=IOBLOK ADDRESS. 00091000
  92. * GPR 11=VMBLOK ADDRESS. 00092000
  93. * GPR 12=BASE ADDRESS. 00093000
  94. * GPR 13=SAVE AREA ADDRESS. 00094000
  95. * GPR 14=EXTERNAL LINKAGE REGISTER. 00095000
  96. * GPR 15=EXTERNAL LINKAGE REGISTER. 00096000
  97. * 00097000
  98. * 00098000
  99. * NOTES : NONE 00099000
  100. * 00100000
  101. * 00101000
  102. * 00102000
  103. * DMKTAPER - 00103000
  104. * 00104000
  105. * OPERATION : A. IF THE RETRY COUNT IN THE IOBLOK IS ZERO, STORE THE 00105000
  106. * ADDRESS OF THE IOERBLOK IN THE RDEVBLOK. 00106000
  107. * B. TEST FOR CHANNEL ERROR. 00107000
  108. * 1. INTERFACE AND CHANNEL CONTROL CHECKS ARE RETURNED 00108000
  109. * TO THE CALLER WITH IOBSTAT=IOBFATAL. 00109000
  110. * C. TEST FOR OTHER TYPE ERROR. 00110000
  111. * DESIGNATION OF COMMAND BEING EXECUTED 00111000
  112. * C=CONTROL 00112000
  113. * R=READ 00113000
  114. * W=WRITE 00114000
  115. * 1. EQUIPMENT CHECK (C,R,W) PERFORM ACTION 10. 00115000
  116. * 2. BUS-OUT CHECK (C,R,W) PERFORM ACTION 4. 00116000
  117. * 3. INTERVENTION REQUIRED (C,R,W) PERFORM ACTION 3. 00117000
  118. * 4. COMMAND REJECT (C,R,W) PERFORM ACTION 13. 00118000
  119. * 5. OVERRUN (R,W) PERFORM ACTION 7. 00119000
  120. * 6. LOAD POINT (C,R) PERFORM ACTION 12. 00120000
  121. * 7. DATA CHECK (R) PERFORM ACTION 5. 00121000
  122. * 8. DATA CHECK (W) PERFORM ACTION 6. 00122000
  123. * 9. DATA CHECK (C) PERFORM ACTION 8. 00123000
  124. * 10. CHANNEL DATA CHECK (R,W) PERFORM ACTION 7. 00124000
  125. * 11. CHANNEL DATA CHECK WITH DATA CONV ON (R) PERFORM 00125000
  126. * ACTION 13. 00126000
  127. * 12. CHANNEL DATA CHECK AND NOT CAPABLE ON (R) PERFORM 00127000
  128. * ACTION 9. 00128000
  129. * 13. CHANNEL DATA CHECK AND NO PREVIOUS SENSE BITS ON 00129000
  130. * (R,W,C) PERFORM ACTION 10. 00130000
  131. * 14. CHAINING CHECK (R) PERFORM ACTION 7. 00131000
  132. * 15. PROGRAM CHECK (R,W) PERFORM ACTION 12. 00132000
  133. * 16. PROTECTION CHECK (R,W) PERFORM ACTION 12. 00133000
  134. * 17. INCORRECT LENGTH (R,W) PERFORM ACTION 12. 00134000
  135. * 00135000
  136. * **************** 00136000
  137. * * ACTION LIST * 00137000
  138. * **************** 00138000
  139. * 00139000
  140. * 3. CHECK TO SEE IF TAPE DRIVE IS EXISTENT. IF 00140000
  141. * NON-EXISTENT ISSUE OPERATOR MESSAGE. 00141000
  142. * IF THE COMMAND WAS A REWIND-UNLOAD EXIT. OTHERWISE 00142000
  143. * SET INTERVENTION REQUIRED FLAGS AND WAIT FOR THE 00143000
  144. * DEVICE END INTERRUPT. WHEN THE DEVICE END 00144000
  145. * INTERRUPT OCCURS RE-ISSUE THE ORGINAL CCW STRING. 00145000
  146. * 4. RE-ISSUE THE COMMAND IF 'DEVICE END' STATUS IS 00146000
  147. * NOT PRESENT. IF 'DEVICE END' IS PRESENT DURING A 00147000
  148. * WRITE, REPOSITION THE TAPE AND RE-ISSUE THE 00148000
  149. * COMMAND. ALLOW A MAXIMUM OF 5 RETRIES. 00149000
  150. * 5. RETRY ORIGINAL CCW STRING 40 TIMES WITH TAPE 00150000
  151. * CLEANING ACTION PERFORMED EVERY 4'TH TIME. IF THE 00151000
  152. * ERROR STILL PERSISTS READ OPPOSITE RECOVERY WILL 00152000
  153. * BE ATTEMPTED. 00153000
  154. * 6. REPOSITION TAPE AND ISSUE AN ERASE COMMAND, THEN 00154000
  155. * FOLLOW WITH THE ORIGINAL CCW STRING FOR A MAXIMUM 00155000
  156. * OF 15 RETRIES. 00156000
  157. * 7. REPOSITION TAPE AND RE-ISSUE COMMAND FOR A MAXIMUM 00157000
  158. * OF 5 RETRIES. 00158000
  159. * 8. IF COMMAND IS A 'WTM', EXECUTE ACTION 6. IF THE 00159000
  160. * COMMAND IS AN 'ERASE GAP' RETRY THE COMMAND FOR 3 00160000
  161. * RETRIES. 00161000
  162. * 9. REPOSITION TAPE TO LOAD POINT AND ISSUE OPERATOR 00162000
  163. * MESSAGE. 00163000
  164. * 10. CALL DMKMSW. 00164000
  165. * 12. SET IOBSTAT=IOBFATAL AND RETURN TO CALLER. 00165000
  166. * 13. CALL DMKMSW. 00166000
  167. * 00167000
  168. * 00168000
  169. * 00169000
  170. * D. IF THE RETRY PROCEDURE HAS BEEN EXHAUSTED AND 00170000
  171. * UNSUCCESSFUL CALL DMKMSW FOR OPERATOR OPTIONS. 00171000
  172. * (CANCEL,RETRY,IGNORE) 00172000
  173. * THE RESPONSES ALLOWED WILL BE BASED ON THE CONDITION 00173000
  174. * CAUSING THIS ERROR. 00174000
  175. * 00175000
  176. *. 00176000
  177. * E. WHEN THE ERROR IS EITHER CORRECTED OR IS FATAL, 00177000
  178. * CALL DMKIOEST PASSING A PARAMETER STRING TO UPDATE 00178000
  179. * THE STATISTICAL COUNTERS. THE PARAMETER STRING IS 00179000
  180. * PASSED ONLY FOR 2400'S, REG 1 WILL CONTAIN ZEROES 00180000
  181. * FOR OTHER DRIVES. 00181000
  182. EJECT @V4075A0 00182000
  183. COPY OPTIONS @V4075A0 00183000
  184. EJECT @V4075A0 00184000
  185. EJECT 00185000
  186. PUNCH 'SPB' FORCE PAGE BOUNDARY ALIGNMENT @VM08783 00186000
  187. DMKTAP CSECT 00187000
  188. EXTRN DMKFREE,DMKFRET,DMKMSWR 00188000
  189. EXTRN DMKIOEST STATISTICAL COUNTER UPDATE @VA03757 00189000
  190. EXTRN DMKIOSQR @V407466 00190000
  191. EXTRN DMKPTRUL @V407466 00191000
  192. EXTRN DMKSTKCP @VA12941 00191100
  193. USING SAVEAREA,R13 00192000
  194. USING PSA,R0 00193000
  195. USING RDEVBLOK,R8 00194000
  196. USING IOBLOK,R10 00195000
  197. DC CL8'DMKTAP' 00196000
  198. DMKTAPER RELOC 00197000
  199. SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 00198000
  200. ICM R7,15,RDEVIOER GET THE FIRST IOERBLOK, IF ANY. 00199000
  201. BP NOTFIRST IF NONE THIS IS THE FIRST TIME IN 00200000
  202. L R7,IOBIOER LOAD IOERBLOK IN REG.7 00201000
  203. USING IOERBLOK,R7 ESTABLISH ADDRESSABILTY. 00202000
  204. ST R7,RDEVIOER STORE ADDRESS IN RDEVBLOK. 00203000
  205. SR R3,R3 CLEAR REG.3 00204000
  206. ST R3,IOBIOER CLEAR ADDR. OF IOERBLOK IN IOBLOK. 00205000
  207. STH R3,IOBRCNT ZERO THE IOBRCNT FOR THE FIRST TIME IN 00206000
  208. NI IOBSTAT,X'FF'-IOBFATAL INSURE BIT IS OFF. 00207000
  209. NI IOBFLAG,X'FF'-(IOBRSTRT+IOBERP) MASK OFF BITS @VM08912 00208000
  210. NI IOERFLG2,X'FF'-IOERMSW CLEAR MSG. WRITER FLAG @VM08912 00209000
  211. SPACE 00210000
  212. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00211000
  213. * NOTE: NEXT FEW LINES DETERMINE WHETHER CALL TO DMKTAPER CAUSED BY * 00212000
  214. * CALL FROM DMKTAPRL (PERFORM TAPE REL. CCW TO DETERMINE 2/4 * 00213000
  215. * CHANNEL SWITCH CAPABILITY. IF SO, DON'T WANT TO CALL DMKMSW. * 00214000
  216. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00215000
  217. SPACE 2 00216000
  218. LA R3,RELDONE RETURN ADDR IN 'TAPRL' AFTER REL.@V407466 00217000
  219. C R3,IOBIRA IS THIS ENTRY FROM DMKTAPRL @V407466 00218000
  220. BNE CONTINUE NO, CONTINUE TO PROCESS ERRORS @V407466 00219000
  221. OI IOBSTAT,IOBFATAL INDICATE FATAL, OMIT MESSAGE @V407466 00220000
  222. B EXIT4 EXIT TO DMKIOS @V407466 00221000
  223. CONTINUE LTR R7,R7 IS THERE AN IOERBLOK @V407466 00222000
  224. BZ EXIT4 NO, GO EXIT @VM08912 00223000
  225. OI IOBFLAG,IOBERP SET ERP IN CONTROL. 00224000
  226. NI IOERFLG3,X'FF'-IOERREAD RESET FLAG @VA03757 00225000
  227. LA R0,CCWAREA GET AREA OF FREE STORAGE 00226000
  228. CALL DMKFREE 00227000
  229. STH R0,IOERDW REMEMBER AMOUNT OF STORAGE ASKED FOR. 00228000
  230. ST R1,IOERLOC ALSO REMEMBER AT WHAT ADDRESS. 00229000
  231. XC 0(CCWAREA*8,R1),0(R1) CLEAR THE CCW AREA 00230000
  232. NOTFIRST EQU * R7 WILL POINT TO THE FIRST IOERBLOK 00231000
  233. TM IOERFLG1,IOERCLN+IOERBSR+IOERFSR+IOERERG 00232000
  234. BNZ DONTCNT BRANCH ON ANY MOTION CONTROL CMD. 00233000
  235. LH R4,IOBRCNT LOAD ERROR COUNT. 00234000
  236. A R4,F1 AND INCREASE BY 1 @VM08812 00235000
  237. STH R4,IOBRCNT STORE RESULT IN IOBRCNT. 00236000
  238. DONTCNT XC IOERMSG,IOERMSG CLEAR MESSAGE AREA. 00237000
  239. L R3,IOBIOER GET ADDRESS OF SECOND IOERBLOK @VA01254 00238000
  240. TM IOERCSW+5,IFCC+CCC IS THIS A CHANNEL ERROR @VM08812 00239000
  241. BNZ CHANICCC YES, INDICATE CHANNEL ERROR @VM08812 00240000
  242. LTR R3,R3 IS THERE A SECOND IOERBLOK ? @VA01254 00241000
  243. BZ TAPDEND NO, GO TEST FOR DEVICE END @VA01254 00242000
  244. TM IOERCSW+5-IOERBLOK(R3),IFCC+CCC IS CHANNEL @VM08812 00243000
  245. BNZ CHANICCC YES, INDICATE CHANNEL ERROR @VM08812 00244000
  246. TAPDEND EQU * @VA01254 00245000
  247. TM IOERFLG1,IOERPEND IS A DEVICE END PENDING? 00246000
  248. BO PENDING BRANCH IF YES. 00247000
  249. TM IOERFLG2,IOERMSW IS THE MSG WRITER ACTIVE? @VA04628 00248000
  250. BZ TAPBYPAS NO, CHECK FOR REWIND CONDITION @VA04628 00249000
  251. NI IOBFLAG,X'FF'-IOBRSTRT CLEAR RESTART FLAG @VA04628 00250000
  252. BAL R9,CKIOB FRET THE IOERBLOK @VA04628 00251000
  253. B EXIT4 GO EXIT @VA04628 00252000
  254. TAPBYPAS EQU * @VA04628 00253000
  255. TM IOERFLG1,X'FF' IS INT. FROM RECOVERY ACTION? 00254000
  256. BNZ REENTRY BRANCH ON YES. 00255000
  257. MVI IOERNUM,COMPAT SET ERROR MSG FOR REWIND @VM08812 00256000
  258. TM IOERFLG2,IOERREW WAS REWIND COMMAND ISSUE @VM08812 00257000
  259. BO CALLWTR1 GO WRITE ERROR MESSAGE TO CONSOLE@VM08812 00258000
  260. CLC IOBRCNT,F1+2 IS THIS THE FIRST ERROR ? @VM08812 00259000
  261. BNE RECUR NO, CHECK FOR IOERBLOK @VM08812 00260000
  262. LR R3,R7 GET THE FIRST IOERBLOK ADDR @VM08812 00261000
  263. RECUR EQU * @VM08812 00262000
  264. LTR R3,R3 DOES AN IOERBLOK EXIST ? @VM08812 00263000
  265. BZ SDREXIT2 NO, ERROR CORRECTED @VA03757 00264000
  266. TM IOERCSW+5-IOERBLOK(R3),CDC IS CHANNEL DATA @VM08812 00265000
  267. * CHECK PRESENT 00266000
  268. BO BADCHAN YES, CHECK RETRY COUNT @VM08812 00267000
  269. MVC IOERCSW,IOERCSW-IOERBLOK(R3) SAVE CSW IN FIRST @VM08812 00268000
  270. * IOERBLOK 00269000
  271. UNITCK EQU * @VM08812 00270000
  272. MVI IOERNUM,EQUIP INDICATE EQUIPMENT CHECK MSG @VM08812 00271000
  273. TM IOERDATA,EQUI1 IS THIS AN EQUIPMENT CHECK @VM08812 00272000
  274. BO CALLWTR1 YES, GO WRITE ERROR MESSAGE @VM08812 00273000
  275. BUSCK EQU * @VM08812 00274000
  276. TM IOERDATA,BUSCE IS THIS A BUS OUT CHECK @VM08812 00275000
  277. BZ INTREQID NO, CHECK FOR INTERVENTION @VM08812 00276000
  278. MVI IOERNUM,BUSOUTCK INDICATE BUS OUT CHECK MSG @VM08812 00277000
  279. CLC IOBRCNT,F5+2 IS THIS THE 6TH ERROR @VM08812 00278000
  280. BH CALLWTR1 YES, GO WRITE ERROR MESSAGE @VM08812 00279000
  281. TM IOERCSW+4,DE IS DEVICE END PRESENT @VM08812 00280000
  282. BZ TRYAGAIN NO, GO RETRY ERROR @VM08812 00281000
  283. BAL R5,GETCUCCW GET FAILING CCW ADDR IN R4 @VM08812 00282000
  284. BAL R5,DATCHAIN @VA04842 00283000
  285. LR R4,R2 @VA04842 00284000
  286. BAL R5,CTLWRTRD CHECK FOR WRITE AND CONTROL CMD @VM08812 00285000
  287. B TRYAGAIN GO RETRY ERROR @VM08812 00286000
  288. INTREQID EQU * @VM08812 00287000
  289. TM IOERDATA,INTRV IS THIS AN INTERVENTION CONDITION@VM08812 00288000
  290. BZ TRYREJ NO, GO CHECK COMMAND REJECT @VM08812 00289000
  291. TM IOERCSW+4,DE IS DEVICE END PRESENT @VM08812 00290000
  292. BO TRYREW YES, GO RETRY ERROR @VM08812 00291000
  293. MVI IOERNUM,NODEV INDICATE NO DEVICE MESSAGE @VM08812 00292000
  294. TM IOERDATA+1,TAUST IS TAU UNIT STATUS 'B' ON @VM08812 00293000
  295. * INDICATE DEVICE EXIST 00294000
  296. BZ CALLWTR1 NO, GO WRITE ERROR MESSAGE @VM08812 00295000
  297. L R4,IOBCAW GET STARTING ADDRESS OF CCWS @VM08812 00296000
  298. CLI 0(R4),X'0F' IS THIS A REWIND-UNLOAD CMD @VM08812 00297000
  299. BE FINISH YES, THIS IS A NORMAL CONDITION @VM08812 00298000
  300. OI IOERFLG1,IOERPEND SET DEVICE END PENDING FLAG @VM08812 00299000
  301. OI RDEVSTAT,RDEVNRDY MARK DEVICE NOT READY @VA12941 00299100
  302. OI IOERIND3,IOERACT TURN ON ACTION FLAG FOR @VM08812 00300000
  303. * OPERATOR 00301000
  304. MVI IOERNUM,INTREQU INDICATE INTERV. REQUEST MSG. @VM08812 00302000
  305. B CALLWTR GO CALL MESSAGE WRITER @VM08812 00303000
  306. PENDING TM IOERFLG2,IOERMSW MESSAGE WRITER IN PROGRESS @VA12941 00304000
  307. BO BLDCPEX WAIT FOR MSW TO FINISH @VA12941 00304100
  308. NI IOERFLG1,X'FF'-IOERPEND TURN OFF D.E. PENDING @VM08812 00305000
  309. NI RDEVSTAT,X'FF'-RDEVNRDY RESET NOT READY FLAG @VM08812 00306000
  310. BAL R9,CKIOB FRET IOERBLOK @VA04628 00309000
  311. NI IOBFLAG,X'FF'-IOBERP CLEAR ERP IN CONTROL FLAG @VA04628 00310000
  312. OI IOBFLAG,IOBRSTRT SET IOS RESTART FLAG @VM08812 00311000
  313. SR R2,R2 CLEAR REGISTER 2 @VM08812 00312000
  314. STH R2,IOBRCNT CLEAR ERROR COUNT @VM08812 00313000
  315. MVC IOBRCAW,IOBCAW SET UP I/O RESTART ADDRESS @VM08812 00314000
  316. B EXIT3 GO RETURN TO IOS FOR RESTART @VM08812 00315000
  317. TRYREW EQU * @VM08812 00316000
  318. CLI IOERCSW+4,CUE+DE+UC IS THIS A REWIND UNLOAD @VM08812 00317000
  319. * INTERRUPT 00318000
  320. BE FINISH YES, GO TO NORMAL EXIT @VM08812 00319000
  321. TRYREJ EQU * @VM08812 00320000
  322. MVI IOERNUM,REJ INDICATE COMMAND REJECT MESSAGE @VM08812 00321000
  323. TM IOERDATA,COMRJ IS THIS A COMMAND REJECT @VM08812 00322000
  324. BO CALLWTR1 YES, GO WRITE ERROR MESSAGE @VM08812 00323000
  325. MVI IOERNUM,OVERERR INDICATE OVERRUN MESSAGE @VM08812 00324000
  326. TM IOERDATA,OVERN IS THIS A OVERRUN CONDITION @VM08812 00325000
  327. BZ TRYLDPNT NO, GO CHECK FOR LOAD POINT @VM08812 00326000
  328. CLC IOBRCNT,F6+2 HAS OVERRUN OCCURRED 6 TIMES @VM08812 00327000
  329. BH CALLWTR1 YES, GO WRITE ERROR MESSAGE @VM08812 00328000
  330. BAL R5,GETCUCCW GET FAILING CCW ADDRESS IN REG 4 @VM08812 00329000
  331. BAL R5,DATCHAIN REALLY POINT AT FAILING CCW @VA04842 00330000
  332. LR R4,R2 WITH REG 4, PLEASE @VA04842 00331000
  333. BAL R5,CTLWRTRD CHECK FOR WRITE & CONTROL CCW @VM08812 00332000
  334. B RDREP GO TO READ REPOSITION SECTION @VM08812 00333000
  335. SPACE 1 00333025
  336. BLDCPEX LA R0,CPEXSIZE SIZE OF CPEXBLOK @VA12941 00333050
  337. CALL DMKFREE GET STORAGE FOR CPEXBLOK @VA12941 00333075
  338. USING CPEXBLOK,R1 CPEXBLOK ADDRESSABILIY @VA12941 00333100
  339. XC CPEXBLOK(CPEXSIZE*8),CPEXBLOK CLEAR BLOCK @VA12941 00333125
  340. MVC CPEXR0(CPEXR12-CPEXR0),SAVER0 SETUP CPEXBLOK @VA12941 00333150
  341. LR R15,R12 INCREM R12 BY 8 FOR TAPER REENTRY@VA12941 00333175
  342. A R15,F8 ... @VA12941 00333200
  343. ST R15,CPEXR12 SAVE NEW R12 IN CPEXBLOK @VA12941 00333225
  344. ST R13,CPEXR13 R13 AS WELL @VA12941 00333250
  345. ST R15,CPEXADD CPEXBLOK RETURN ADDRESS @VA12941 00333300
  346. DROP R1 ... @VA12941 00333325
  347. L R5,IOERCPEX ANCHOR FOR CPEXBLOKS @VA12941 00333350
  348. USING CPEXBLOK,R5 ADDRESSABILITY @VA12941 00333375
  349. LTR R5,R5 ANY CPEXBLOKS ON QUEUE @VA12941 00333400
  350. BNZ NEXTCPEX YES, FIND END OF CHAIN @VA12941 00333425
  351. ST R1,IOERCPEX ADD TO THE CHAIN @VA12941 00333450
  352. B GOTODSP GOTO THE DISPATCHER @VA12941 00333475
  353. SPACE 1 00333500
  354. NEXTCPEX L R14,CPEXFPNT GET POINTER TO NEXT ONE ON CHAIN @VA12941 00333525
  355. LTR R14,R14 END OF QUEUE @VA12941 00333550
  356. BZ QUEUE END OF QUEUE - ADD CPEXBLOK @VA12941 00333575
  357. LR R5,R14 CONTINUE TO LOOK FOR END @VA12941 00333600
  358. B NEXTCPEX ... @VA12941 00333625
  359. SPACE 2 ... @VA12941 00333650
  360. QUEUE ST R1,CPEXFPNT ADD CPEXBLOK TO QUEUE AT END @VA12941 00333675
  361. GOTODSP GOTO DMKDSPCH EXIT TO DISPATCHER FOR NOW @VA12941 00333700
  362. DROP R5 DROP CPEXBLOK ADDRESSABILITY @VA12941 00333725
  363. TRYLDPNT EQU * @VM08812 00334000
  364. MVI IOERNUM,LDPNT INDICATE LOAD POINT ERROR MESSAGE@VM08812 00335000
  365. TM IOERDATA+1,LDPONT IS THIS AT LOAD POINT @VM08812 00336000
  366. BO CALLWTR1 YES, GO WRITE ERROR MESSAGE @VM08812 00337000
  367. TM IOERDATA,DATACK IS THIS A DATA CHECK ERROR @VM08812 00338000
  368. BZ TRYSEC NO, GO CHECK DEVICE TYPE @VM08812 00339000
  369. BAL R5,GETCUCCW GET FAILING CCW ADDRESS IN REG4 @VM08812 00340000
  370. BAL R5,DATCHAIN @VA04842 00341000
  371. LR R4,R2 @VA04842 00342000
  372. TM 0(R4),X'03' IS THIS A CONTROL CMD CCW @VM08812 00343000
  373. BNO TSTWRT NO, GO CHECK FOR READ CMD @VM08812 00344000
  374. MVI IOERNUM,CTLCMD INDICATE CONTROL COMMAND MESSAGE @VM08812 00345000
  375. CLI 0(R4),X'1F' IS THIS A WRITE TAPE MARK CMD @VM08812 00346000
  376. BE WRTERR YES, GO TO WRITE SECTION @VM08812 00347000
  377. CLI 0(R4),X'17' IS THIS A ERASE GAP CMD @VM08812 00348000
  378. BNE CALLWTR1 NO, GO WRITE ERROR MESSAGE @VM08812 00349000
  379. LR R1,R4 GET THE RESTART ADDRESS @VM08812 00350000
  380. CLC IOBRCNT,F3+2 HAS ERROR OCCURRED 3 TIMES @VM08812 00351000
  381. BNH RETRY1 NO, GO RETRY OPERATION @VM08812 00352000
  382. MVI IOERNUM,ERGFAIL INDICATE ERROR CONDITION MSG @VM08812 00353000
  383. B CALLWTR1 GO WRITE ERROR MESSAGE @VM08812 00354000
  384. TSTWRT EQU * @VM08812 00355000
  385. TM 0(R4),X'02' IS THIS A READ COMMAND CCW @VM08812 00356000
  386. BO RDERR YES, GO TO READ SECTION @VM08812 00357000
  387. TM 0(R4),X'0C' IS THIS A READ BACKWARD CMD @VM08812 00358000
  388. BO RDERR1 YES, GO SET READ BACKWARD CMD @VM08812 00359000
  389. CLI 0(R4),X'04' IS THIS A SENSE OP-CODE @VA01599 00360000
  390. BNE WRTERR NO, GO TO WRITE SECTION @VA01599 00361000
  391. MVI IOERNUM,DATAER INDICATE DATA CHECK MESSAGE @VA01599 00362000
  392. CLC IOBRCNT,F5+2 HAS ERROR OCCURRED 6 TIMES @VA01599 00363000
  393. BH CALLWTR1 YES, GO WRITE ERROR MESSAGE @VA01599 00364000
  394. B TRYAGAIN GO RETRY OPERATION @VA01599 00365000
  395. WRTERR EQU * @VM08812 00366000
  396. MVI IOERNUM,DATAER INDICATE DATA CHECK MESSAGE @VM08812 00367000
  397. CLC IOBRCNT,F15+2 HAS ERROR OCCURRED 15 TIMES @VM08812 00368000
  398. BH CALLWTR1 YES, GO WRITE ERROR MESSAGE @VM08812 00369000
  399. BAL R5,CTLWRTRD CHECK FOR WRITE & CONTROL CCW @VA08511 00369500
  400. WRTREP EQU * @VM08812 00370000
  401. L R1,IOERLOC GET ADDRESS OF ALLOCATED STORAGE @VM08812 00371000
  402. MVC 0(8,R1),BKSPACE MOVE BACKSPACE CMD IN AREA @VM08812 00372000
  403. MVC 8(8,R1),ERASE MOVE ERASE GAP CMD IN AREA @VM08812 00373000
  404. MVC 16(8,R1),NOP MOVE NO-OP CMD IN AREA @VM08812 00374000
  405. OI IOERFLG1,IOERBSR+IOERERG SET ERG & BSR FLAG'S ON@VM08812 00375000
  406. B RETRY1 GO RETRY OPERATION @VM08812 00376000
  407. RDERR1 EQU * @VM08812 00377000
  408. OI IOERFLG2,IOERRBK INDICATE READ BACKWARD CMD @VM08812 00378000
  409. RDERR EQU * @VM08812 00379000
  410. CLC IOBRCNT,F1+2 IS THIS THE FIRST ERROR ?? @VA03757 00380000
  411. BNE NOTREAD NO, FORGET READ FLAG @VA03757 00381000
  412. OI IOERFLG3,IOERREAD TURN ON READ FLAG @VA03757 00382000
  413. NOTREAD EQU * @VA03757 00383000
  414. TM IOERDATA+1-IOERBLOK(R3),NOISRECD IS THIS A @VM08812 00384000
  415. * NOISE RECORD 00385000
  416. BO RDREP YES, GO CHECK FOR SECOND IOERBLOK@VM08812 00386000
  417. BAL R5,GETCUCCW POINT AT CCW THAT FAILED WITH R4 @VA04842 00387000
  418. BAL R5,DATCHAIN POINT AT FIRST CCW IN DATA CHAIN @VA04842 00388000
  419. * WITH R2 @VA04842 00389000
  420. LR R1,R2 MOVE WORKING COPY TO R1 @VA04842 00390000
  421. SLR R0,R0 CLEAR REG TO ACCUMULATE LENGTH @VA04842 00391000
  422. CNTBLOCK L R5,4(,R1) GET 2ND WORD OF CCW @VA04842 00392000
  423. N R5,XRIGHT16 MASK ALL BUT CCW COUNT FIELD @VA04842 00393000
  424. ALR R0,R5 ADD IT IN @VA04842 00394000
  425. CLR R1,R4 REACHED FAILING CCW YET? @VA04842 00395000
  426. BE CNTDONE YES, DONE COUNTING UP @VA04842 00396000
  427. LA R1,8(,R1) POINT AT NEXT CCW @VA04842 00397000
  428. CLI 0(R1),CDTIC IS IT A TIC? @VA04842 00398000
  429. * (NOTE MUST BE DATA CHAINING VARIETY IF IT IS ANYTHING) @VA04842 00399000
  430. BNE CNTBLOCK NO, GO ADD IN THIS LENGTH @VA04842 00400000
  431. ICM R1,B'0111',1(R1) FOLLOW THE TIC @VA04842 00401000
  432. B CNTBLOCK AND KEEP GOING @VA04842 00402000
  433. CNTDONE L R5,IOERCSW+4 GET 2ND WORD OF CSW @VA04842 00403000
  434. N R5,XRIGHT16 CLEAR ALL BUT RESIDUAL COUNT @VA04842 00404000
  435. SR R0,R5 SUBTRACT THAT FROM TOTAL LENGTH @VA04842 00405000
  436. BM NOCCW HMMM...SOMETHING WRONG WITH CSW @VA04842 00406000
  437. CH R0,=H'12' NOISE RECORD OR NOT? @VA04842 00407000
  438. BNL RDREP NOT NOISE, BACKSPACE AND REREAD @VA04842 00408000
  439. LR R1,R2 RESTART AT START OF DATA CHAIN @VA04842 00409000
  440. * ENCOUNTERED NOISE RECORD ... JUST REISSUE READ (NO REPOSITION) 00410000
  441. CLC IOBRCNT,=H'80' HAS RETRY COUNT EXCEEDED 80 @VA03463 00411000
  442. BNH RETRY1 NOT YET...CONTINUE @VA03463 00412000
  443. MVI IOERNUM,DATAER INDICATE DATA CHECK MSG @VA03463 00413000
  444. B CALLWTR1 GO WRITE ERROR MSG @VA03463 00414000
  445. RDREP EQU * @VM08812 00415000
  446. BAL R5,GETCUCCW GET FAILING CCW ADDRESS IN REG 4 @VM08812 00416000
  447. BAL R5,DATCHAIN POINT AT START OF DATA CHAIN @VA04842 00417000
  448. LR R4,R2 WITH R4 @VA04842 00418000
  449. TM 0(R4),X'0C' IS THIS A READ BACKWARD CMD CCW @VM08812 00419000
  450. BZ TESTIOB NO, TEST FOR SECOND IOERBLOK @VM08812 00420000
  451. OI IOERFLG2,IOERRBK INDICATE READ BACKWARD CMD @VM08812 00421000
  452. TESTIOB EQU * @VM08812 00422000
  453. ICM R3,15,IOBIOER IS THERE A SECOND IOERBLOK @VM08812 00423000
  454. BZ *+10 NO, GO CHECK MAXIMUN RETRY COUNT @VM08812 00424000
  455. MVC IOERADR-IOERBLOK(1,R7),IOERDATA-IOERBLOK+2(R3) @VM08812 00425000
  456. * GET TRACK-IN-ERROR DATA 00426000
  457. CLC IOBRCNT,=H'40' HAS RETRY EXCEEDED 40 @VM08812 00427000
  458. BH OPPREV40 YES, CHECK FLAG FOR OPPOSITE @VM08812 00428000
  459. * RECOVERY 00429000
  460. SR R4,R4 CLEAR REGISTER 4 @VM08812 00430000
  461. LH R5,IOBRCNT GET THE ERROR COUNT @VM08812 00431000
  462. D R4,F4 DIVIDE BY 4 @VM08812 00432000
  463. LTR R4,R4 IS THIS A MULTIPLE OF 4 @VM08812 00433000
  464. BNZ CHANPRG GO BUILD CHANNEL PROGRAM & RETRY @VM08812 00434000
  465. CLNFWD EQU * @VM08812 00435000
  466. MVI IOERWRK,5 NUMBER OF BACKSPACES @VM08812 00436000
  467. TM IOERFLG2,IOERRBK IS THIS A READ BACKWARD CMD @VM08812 00437000
  468. BZ *+8 NO, BYPASS CHANGING COUNT @VM08812 00438000
  469. MVI IOERWRK,4 NUMBER OF BACKSPACES @VM08812 00439000
  470. BAL R5,CHANBSR GO BUILD CHANNEL PROGRAM & RETRY @VM08812 00440000
  471. OI IOERFLG1,IOERCLN SET TAPE CLEANING FLAG @VM08812 00441000
  472. B RETRY1 GO RETRY OPERATION @VM08812 00442000
  473. OPPREV40 EQU * @VM08812 00443000
  474. TM IOERFLG1,IOERORA IS OPPOSITE RECOVERY ACTIVE @VM08812 00444000
  475. BO NOT7TRK YES, CHECK ERROR COUNT @VM08812 00445000
  476. MVI IOERNUM,DATAER INDICATE DATA CHECK MESSAGE @VM08812 00446000
  477. CLC IOBRCNT,=H'80' HAS ERROR EXCEEDED 80 TIMES @VM08812 00447000
  478. BH CALLWTR1 YES, GO WRITE ERROR MESSAGE @VM08812 00448000
  479. BAL R5,GETCUCCW GET FAILING CCW ADDRESS IN REG4 @VM08812 00449000
  480. BAL R5,DATCHAIN AND POINT AT START OF DATA CHAIN @VA04842 00450000
  481. CLR R2,R4 ARE THEY ONE AND THE SAME? @VA04842 00451000
  482. BNE CALLWTR1 NO - DATA CHAINING IN EFFECT - @VA04842 00452000
  483. * READ OPPOSITE RECOVERY NOT ALLOWED 00453000
  484. TM 4(R4),IDA+SKIP+CD IF ANY OF THESE ON, @VA04842 00454000
  485. * THAT'S A NO-NO FOR R.O.R. @VA04842 00455000
  486. BNZ CALLWTR1 TOO BAD, TELL USER THE NEWS @VA04842 00456000
  487. TM IOERDATA+1,TRACK7 IS THIS A 7 TRACK DRIVE @VM08812 00457000
  488. BZ NOT7TRK NO, CHECK ERROR COUNT @VM08812 00458000
  489. L R5,IOBCAW GET ADDRESS OF CCW STRING @VM08812 00459000
  490. TM 0(R5),DCMODE IS DRIVE IN DC MODE @VM08812 00460000
  491. BO CALLWTR1 YES, GO WRITE ERROR MESSAGE @VM08812 00461000
  492. NOT7TRK EQU * @VM08812 00462000
  493. SR R4,R4 CLEAR REGISTER 4 @VM08812 00463000
  494. LH R5,IOBRCNT GET THE ERROR COUNT @VM08812 00464000
  495. D R4,F4 DIVIDE BY 4 @VM08812 00465000
  496. LTR R4,R4 IS THIS A MULTIPLE OF 4 @VM08812 00466000
  497. BZ CLNFWD YES, GO TO TAPE CLEANING SECTION @VM08812 00467000
  498. ENTRYORA EQU * @VM08812 00468000
  499. TM IOERFLG1,IOERORA IS OPPOSITE RECOVERY ACTIVE @VM08812 00469000
  500. BO COPYCCW YES, GO BUILD CHANNEL PROGRAM @VM08812 00470000
  501. BAL R5,GETCUCCW GET FAILING CCW ADDRESS @VM08812 00471000
  502. L R1,IOERLOC GET ALLOCATED STORAGE ADDRESS @VM08812 00472000
  503. MVC 0(8,R1),TIE MOVE REQUEST TRACK-IN-ERROR CCW @VM08812 00473000
  504. MVC 8(8,R1),0(R4) MOVE FAILING CCW IN AREA @VM08812 00474000
  505. TM 4(R4),CC ARE WE COMMAND CHAINING @VA06204 00475000
  506. BZ NOTCC NO LEAVE AS IS @VA06204 00476000
  507. TM 8(R4),X'08' NEXT COMMAND A TIC @VA06204 00477000
  508. BNO NOTTIC NO THATS OK @VA06204 00478000
  509. TM 8(R4),X'07' IF THESE BITS ON THIS @VA07177 00479000
  510. BNZ NOTTIC IS NOT A TIC @VA07177 00480000
  511. SR R5,R5 @VA06204 00481000
  512. ICM R5,7,9(R4) GET THE TIC TO ADDRESS @VA06204 00482000
  513. BZ CALLWTR1 MIGHTY STRANGE IF ITS ZERO @VA06204 00483000
  514. ST R5,40(R1) @VA06204 00484000
  515. B NOTCC RETURN TO INLINE CODE @VA06204 00485000
  516. NOTTIC EQU * @VA06204 00486000
  517. MVC 41(3,R1),IOERCSW+1 @VA06204 00487000
  518. NOTCC EQU * @VA06204 00488000
  519. MVI 8(R1),X'0C' CHANGE COMMAND CODE TO READ @VM08812 00489000
  520. * BACKWARD 00490000
  521. OI 12(R1),SKIP TURN ON SUPPRESS DATA FLAG @VM08812 00491000
  522. NI 12(R1),X'FF'-(SILI+CC) RESET SILI AND CC' @VA06204 00492000
  523. * LENGTH 00493000
  524. TM IOERFLG2,IOERRBK IS READ BACKWARD CMD INDICATED @VM08812 00494000
  525. BZ *+8 NO, DON'T CHANGE COMMAND CODE @VM08812 00495000
  526. MVI 8(R1),X'02' CHANGE COMMAND CODE TO A READ @VM08812 00496000
  527. MVC 24(8,R1),8(R1) SAVE CHANGED CCW @VM08812 00497000
  528. LA R5,IOERADR GET ADDRESS OF TRACK-IN-ERROR @VM08812 00498000
  529. * DATA 00499000
  530. STCM R5,7,1(R1) SAVE TIE DATA ADDRESS @VM08812 00500000
  531. OI IOERFLG1,IOERORA+IOERSUPP SET OPPOSITE @VM08812 00501000
  532. * RECOVERY & SUPPRESS DATA FLAG 00502000
  533. LTR R3,R3 IS THERE A SECOND IOERBLOK @VM08812 00503000
  534. BZ RETRY1 NO, GO RETRY OPERATION @VM08812 00504000
  535. MVC IOERADR-IOERBLOK(1,R7),IOERDATA-IOERBLOK+2(R3) @VM08812 00505000
  536. * GET TRACK-IN-ERROR DATA 00506000
  537. B RETRY1 GO RETRY OPERATION @VM08812 00507000
  538. COPYCCW EQU * @VM08812 00508000
  539. BAL R5,CHANCOPY GET THE CHANGE CCW AND STORAGE @VM08812 00509000
  540. LA R5,IOERADR GET ADDRESS OF TRACK-IN-ERROR @VM08812 00510000
  541. * DATA 00511000
  542. STCM R5,7,1(R1) PUT DATA ADDRESS IN TIE CCW @VM08812 00512000
  543. B RETRY1 GO RETRY OPERATION @VM08812 00513000
  544. TRYSEC EQU * @VM08812 00514000
  545. BAL R5,DEVRTN CHECK FOR 3410/3420 DEVICES @VM08812 00515000
  546. B TRYCONV DEVICES DOESN'T EXIST @VM08812 00516000
  547. TESTDSE EQU * @VM08812 00517000
  548. MVI IOERNUM,PROTECT INDICATE SECURITY MESSAGE @VM08812 00518000
  549. TM IOERDATA+7,SECESE IS THIS SECURITY ERASE CMDE @VM08812 00519000
  550. BO CALLWTR1 YES, GO WRITE ERROR MESSAGE @VM08812 00520000
  551. TRYCONV EQU * @VM08812 00521000
  552. MVI IOERNUM,CONV INDICATE DATA CONVERT MESSAGE @VM08812 00522000
  553. TM IOERDATA,DATACONV IS THIS A DATA CONVERTOR ERROR@VM08812 00523000
  554. BO CALLWTR1 YES, GO WRITE ERROR MESSAGE @VM08812 00524000
  555. TM IOERDATA+1,NOTCAPA IS 'NOT CAPABLE' FLAG ON @VM08812 00525000
  556. BZ TRYPE NO, GO CHECK FOR DEVICES @VM08812 00526000
  557. L R1,IOERLOC GET ADDRESS OF ALLOCATED STORAGE @VM08812 00527000
  558. MVC 0(8,R1),REWIND MOVE REWIND CCW IN AREA @VM08812 00528000
  559. MVC 8(8,R1),NOP MOVE NO-OP CCW IN AREA @VM08812 00529000
  560. OI IOERFLG2,IOERREW TURN ON REWIND FLAG @VM08812 00530000
  561. B RETRY1 GO RETRY OPERATION @VM08812 00531000
  562. TRYPE EQU * @VM08812 00532000
  563. BAL R5,GETCUCCW GET FAILING CCW ADDRESS IN REG4 @VM08812 00533000
  564. BAL R5,DATCHAIN @VA04842 00534000
  565. LR R4,R2 @VA04842 00535000
  566. BAL R5,DEVRTN GO CHECK FOR 3410/3420 DEVICES @VM08812 00536000
  567. B TRYCHAIN DEVICES DOESN'T EXIST @VM08812 00537000
  568. TM IOERDATA+5,PEBURST1 IS THIS A P.E. BURST CHECK @VM08812 00538000
  569. BZ TRYCHAIN NO, TEST FOR CHANNEL CHAINING @VM08812 00539000
  570. * CHECK 00540000
  571. MVI IOERNUM,PEBURST INDICATE P.E. BURST MESSAGE @VM08812 00541000
  572. CLC IOBRCNT,=H'14' HAS ERROR OCCURRED 14 TIMES @VM08812 00542000
  573. BNL CALLWTR1 YES, GO WRITE ERROR MESSAGE @VM08812 00543000
  574. BAL R5,CTLWRTRD CHECK FOR WRITE & CONTROL CCW @VM08812 00544000
  575. B CALLWTR1 GO WRITE ERROR MESSAGE @VM08812 00545000
  576. TRYCHAIN EQU * @VM08812 00546000
  577. MVI IOERNUM,BDSNS INDICATE INVALID SENSE MESSAGE @VA03892 00547000
  578. TM IOERCSW+5,PRGC+PRTC+CHC IS THIS CHAINING CHECK,@VA02055 00548000
  579. * CHANNEL PROGRAM CHECK, PROTECTION CHECK @VA02055 00549000
  580. BZ NOSTAT BRANCH IF NOT @VA02055 00550000
  581. MVI IOERNUM,CHANERR INDICATE CHANNEL ERROR MESSAGE @VA02055 00551000
  582. TM IOERCSW+5,CHC IS CHANNEL CHAINING ON @VA02055 00552000
  583. BO CHANERRR @VA02055 00553000
  584. NOSTAT EQU * @VA02055 00554000
  585. TM IOBFLAG,IOBCP IS THIS CP GENERATED @VA02055 00555000
  586. BZ IGNORE NO, BYPASS ERROR MESSAGE @VA02055 00556000
  587. B CALLWTR1 GO WRITE ERROR MESSAGE @VA02055 00557000
  588. CHANERRR EQU * @VA02055 00558000
  589. BAL R5,GETCUCCW GET FAILING CCW ADDRESS @VA02055 00559000
  590. BAL R5,DATCHAIN @VA04842 00560000
  591. LR R4,R2 @VA04842 00561000
  592. CLC IOBRCNT,F5+2 IS COUNT GREATER THAN 5 @VM08812 00562000
  593. BH CALLWTR1 YES, GO WRITE ERROR MESSAGE @VM08812 00563000
  594. BAL R5,CTLWRTRD CHECK FOR CONTROL & WRITE CMD @VM08812 00564000
  595. B RDREP GO TO READ SECTION @VM08812 00565000
  596. BADCHAN EQU * @VM08812 00566000
  597. BAL R5,GETCUCCW GET FAILING CCW ADDRESS @VM08812 00567000
  598. BAL R5,DATCHAIN @VA04842 00568000
  599. LR R4,R2 @VA04842 00569000
  600. CLC IOBRCNT,F5+2 IS COUNT GREATER THAN 5 @VM08812 00570000
  601. BH CHANICCC YES, INDICATE CHANNEL ERROR MSG @VM08812 00571000
  602. TM 0(R4),X'03' IS THIS A CONTROL CMD CCW @VM08812 00572000
  603. BNO TRYAGAIN NO - RETRY @VA04287 00573000
  604. CHANICCC EQU * @VM08812 00574000
  605. MVI IOERNUM,CHANERR INDICATE CHANNEL ERROR MESSAGE @VM08812 00575000
  606. BAL R9,FRETPTR RELEASE ALLOCATED STORAGE @VM08812 00576000
  607. ICM R3,15,IOBIOER IS THIS A SECOND IOERBLOK @VM08812 00577000
  608. BZ CALLWTR1 NO, GO WRITE ERROR MESSAGE @VM08812 00578000
  609. TM IOERCSW+5,CDC+CCC+IFCC IS THIS A CHANNEL ERROR @VM08812 00579000
  610. BNZ CALLWTR1 YES, GO WRITE ERROR MESSAGE @VM08812 00580000
  611. ST R3,RDEVIOER SAVE CURRENT IOERBLOK ADDRESS @VM08812 00581000
  612. ST R7,IOBIOER SAVE ORIGINAL IOERBLOK ADDRESS @VM08812 00582000
  613. LR R7,R3 GET CURRENT IOERBLOK ADDRESS @VM08812 00583000
  614. BAL R9,CKIOB RELEASE SECOND IOERBLOK @VM08812 00584000
  615. MVI IOERNUM,CHANERR INDICATE CHANNEL ERROR MSG. @VM08812 00585000
  616. B CALLWTR1 GO WRITE ERROR MESSAGE @VM08812 00586000
  617. REENTRY EQU * @VM08812 00587000
  618. TM IOERFLG1,IOERERG IS RE-ENTRY FROM WRITE @VM08812 00588000
  619. BZ READING NO, GO TO RE-ENTRY READ SECTION @VM08812 00589000
  620. WRITING EQU * @VM08812 00590000
  621. ICM R3,15,IOBIOER IS THERE A SECOND IOERBLOK @VM08812 00591000
  622. BZ GDBSR NO, GO SET UP A RETRY OPERATION @VM08812 00592000
  623. L R4,IOERCSW-IOERBLOK(R3) GET FAILING CCW ADDR+8 @VM08812 00593000
  624. MVI IOERNUM,RECERR INDICATE RECOVERY ERROR MESSAGE @VM08812 00594000
  625. S R4,F8 GET FAILING CCW ADDRESS @VM08812 00595000
  626. BM CALLWTR1 IF INVALID, WRITE ERROR MESSAGE @VM08812 00596000
  627. CLI 0(R4),X'17' IS THIS A ERASE GAP COMMAND @VM08812 00597000
  628. BNE CALLWTR1 NO, GO WRITE ERROR MESSAGE @VM08812 00598000
  629. L R1,IOERLOC GET ALLOCATED STORAGE ADDRESS @VM08812 00599000
  630. MVC 0(8,R1),ERASE MOVE ERASE GAP CMD IN AREA @VM08812 00600000
  631. MVC 8(8,R1),NOP MOVE NO-OP CCW IN AREA @VM08812 00601000
  632. NI IOERFLG1,X'FF'-IOERBSR CLEAR BACKSPACE FLAG @VM08812 00602000
  633. B RETRY1 GO RETRY OPERATION @VM08812 00603000
  634. GDBSR EQU * @VM08812 00604000
  635. NI IOERFLG1,X'FF'-(IOERBSR+IOERERG) CLEAR BSR & @VM08812 00605000
  636. * ERG FLAG 00606000
  637. BAL R5,GETCUCCW GET FAILING CCW ADDRESS IN REG 4 @VM08812 00607000
  638. BAL R5,DATCHAIN GET ADDRESS OF DATA CHAINING CCW @VM08812 00608000
  639. LR R1,R2 GET RESTART ADDRESS @VM08812 00609000
  640. B RETRY1 GO RETRY OPERATION @VM08812 00610000
  641. READING EQU * @VM08812 00611000
  642. TM IOERFLG1,IOERCLN IS TAPE CLEANING ACTIVE @VM08812 00612000
  643. BO CLNINT YES, GET NUMBER OF REPOSITIONS @VM08812 00613000
  644. * REMAINING 00614000
  645. TM IOERFLG1,IOERORA IS OPPOSITE RECOVERY ACTIVE @VM08812 00615000
  646. BO ENTRYRTY YES, GO CHECK SUPPRESS FLAG @VM08812 00616000
  647. MVI IOERNUM,RECERR INDICATE RECOVERY ERROR MESSAGE @VM08812 00617000
  648. ICM R3,15,IOBIOER IS THERE A SECOND IOERBLOK @VM08812 00618000
  649. BNZ CALLWTR1 YES, GO WRITE ERROR MESSAGE @VM08812 00619000
  650. NI IOERFLG1,X'FF'-(IOERBSR+IOERFSR) RESET FORWARD @VM08812 00620000
  651. * SPACE AND BACKSPACING 00621000
  652. BAL R5,GETCUCCW GET FAILING CCW ADDRESS IN REG 4 @VM08812 00622000
  653. BAL R5,CHANTIC SET UP TIC CCW WITH RESTART ADDR @VM08812 00623000
  654. BAL R5,DATCHAIN GET DATA CHAINING CCW @VM08812 00624000
  655. LR R4,R2 GET THE RESTART CCW ADDRESS @VM08812 00625000
  656. STCM R4,7,9(R1) PUT RESTART ADDRESS IN TIC CCW @VM08812 00626000
  657. LA R4,IOERADR GET ADDRESS OF TRACK-IN-ERROR @VM08812 00627000
  658. * DATA 00628000
  659. STCM R4,7,1(R1) PUT TRACK-IN-ERROR ADDRESS IN CCW@VM08812 00629000
  660. B RETRY1 GO RETRY OPERATION @VM08812 00630000
  661. CLNINT EQU * @VM08812 00631000
  662. SR R5,R5 CLEAR REGISTER 5 @VM08812 00632000
  663. IC R5,IOERWRK GET NUMBER OF REPOSITIONS @VM08812 00633000
  664. * REMAINING 00634000
  665. S R5,F1 SUBTRACT 1 AND @VM08812 00635000
  666. STC R5,IOERWRK SAVE RESULT @VM08812 00636000
  667. ICM R3,15,IOBIOER IS THERE A SECOND IOERBLOK @VM08812 00637000
  668. BZ GDCLN NO, GET NUMBER OF REPOSITIONS @VM08812 00638000
  669. MVI IOERNUM,RECERR INDICATE RECOVERY ERROR MESSAGE @VM08812 00639000
  670. TM IOERDATA-IOERBLOK+1(R3),LDPONT IS THIS LOAD @VM08812 00640000
  671. * POINT 00641000
  672. BZ CALLWTR1 NO, GO WRITE ERROR MESSAGE @VM08812 00642000
  673. TM IOERDATA-IOERBLOK(R3),X'FF' ANY OTHER ERRORS ? @VA03468 00643000
  674. BNZ CALLWTR1 YES, GO WRITE ERROR MESSAGE @VA03468 00644000
  675. SR R6,R6 CLEAR REGISTER 6 @VM08812 00645000
  676. LA R5,5 GET MAXIMUN REPOSITION COUNT @VM08812 00646000
  677. TM IOERFLG2,IOERRBK IS THIS A READ BACKWARD CMD @VM08812 00647000
  678. BZ *+8 NO, BYPASS @VM08812 00648000
  679. LA R5,4 GET MAX. COUNT FOR READ BACKWARD @VM08812 00649000
  680. IC R6,IOERWRK GET NUMBER OF REPOSITIONS @VM08812 00650000
  681. SR R5,R6 SUBTRACT NUMBER OF REPOSITIONS @VM08812 00651000
  682. * REMAINING FROM MAXIMUN 00652000
  683. TM IOERFLG1,IOERORA IS OPPOSITE RECOVERY ACTIVE @VM08812 00653000
  684. BO ENTRYINT YES, REDUCE REPOSITION COUNT BY 1@VM08812 00654000
  685. TM IOERFLG2,IOERRBK IS THIS A READ BACKWARD CCW @VM08812 00655000
  686. BO ENTRYINS YES, SAVE REPOSITION COUNT @VM08812 00656000
  687. S R5,F2 REDUCE REPOSITION COUNT BY 2 @VM08812 00657000
  688. B ENTRYINS GO SAVE REPOSITION COUNT @VM08812 00658000
  689. ENTRYINT EQU * @VM08812 00659000
  690. S R5,F1 REDUCE REPOSITION COUNT BY 1 @VM08812 00660000
  691. ENTRYINS EQU * @VM08812 00661000
  692. STC R5,IOERWRK SAVE REPOSITION COUNT @VM08812 00662000
  693. BAL R5,CHANFSR GO BUILD CHANNEL PROGRAM & RETRY @VM08812 00663000
  694. B RETRY1 GO RETRY OPERATION @VM08812 00664000
  695. GDCLN EQU * @VM08812 00665000
  696. ICM R5,1,IOERWRK GET REPOSITION COUNT @VM08812 00666000
  697. BNZ RETRY IF NOT ZERO, GO RETRY OPERATION @VM08812 00667000
  698. TM IOERFLG1,IOERORA IS OPPOSITE RECOVERY ACTIVE @VM08812 00668000
  699. BO ENTRYCLN YES, GO MOVE TAPE FORWARD @VM08812 00669000
  700. TM IOERFLG1,IOERBSR WAS TAPE DRIVE BACKSPACING @VM08812 00670000
  701. BZ ENTRYFSR NO, GO BUILD CCWS FOR RESTART @VM08812 00671000
  702. MVI IOERWRK,4 SET UP 4 SPACES FORWARD @VM08812 00672000
  703. TM IOERFLG2,IOERRBK IS THIS A READ BACKWARD CMD @VM08812 00673000
  704. BZ *+8 NO, BYPASS @VM08812 00674000
  705. MVI IOERWRK,5 SET UP 5 SPACES FORWARD @VM08812 00675000
  706. BAL R5,CHANFSR GO BUILD CHANNEL PROGRAM & RETRY @VM08812 00676000
  707. B RETRY1 GO RETRY OPERATION @VM08812 00677000
  708. ENTRYFSR EQU * @VM08812 00678000
  709. NI IOERFLG1,X'FF'-(IOERFSR+IOERCLN) RESET FLAGS @VM08812 00679000
  710. BAL R5,CHANTIC SET UP TIC CCW WITH RESTART ADDR @VM08812 00680000
  711. LA R5,IOERADR GET ADDR OF TRACK-IN-ERROR DATA @VM08812 00681000
  712. STCM R5,7,1(R1) PUT DATA ADDRESS IN TIE CCW @VM08812 00682000
  713. L R5,IOBCAW GET ADDRESS OF CCW STRING @VM08812 00683000
  714. STCM R5,7,9(R1) PUT CCW STRING ADDRESS IN TIC CCW@VM08812 00684000
  715. B RETRY1 GO RETRY OPERATION @VM08812 00685000
  716. ENTRYCLN EQU * @VM08812 00686000
  717. TM IOERFLG1,IOERBSR IS TAPE DRIVE BACKSPACING @VM08812 00687000
  718. BZ ENTRYRDR NO, CHECK DATA SUPPRESS FLAG @VM08812 00688000
  719. MVI IOERWRK,5 SET UP 5 SPACES FORWARD @VM08812 00689000
  720. TM IOERFLG2,IOERRBK IS THIS A READ BACKWARD CMD @VM08812 00690000
  721. BZ *+8 NO, BYPASS @VM08812 00691000
  722. MVI IOERWRK,4 SET UP 4 SPACES FORWARD @VM08812 00692000
  723. BAL R5,CHANFSR GO BUILD CHANNEL PROGRAM & RETRY @VM08812 00693000
  724. B RETRY1 GO RETRY OPERATION @VM08812 00694000
  725. ENTRYRDR EQU * @VM08812 00695000
  726. NI IOERFLG1,X'FF'-(IOERFSR+IOERBSR+IOERCLN) RESET @VM08812 00696000
  727. * FLAGS 00697000
  728. TM IOERFLG1,IOERSUPP IS IT A READ WITH SUPPRESS @VM08812 00698000
  729. * DATA 00699000
  730. BO ENTRYORA YES, CHECK FOR OPPOSITE RECOVERY @VM08812 00700000
  731. BAL R5,CHANCOPY BUILD CHANNEL PROGRAM WITH SAVE @VM08812 00701000
  732. * CCW 00702000
  733. LA R5,IOERADR GET TRACK-IN-ERROR DATA ADDRESS @VM08812 00703000
  734. STCM R5,7,1(R1) PUT TIE DATA ADDRESS IN CCW @VM08812 00704000
  735. ICM R3,15,IOBIOER IS THIS A SECOND IOERBLOK @VM08812 00705000
  736. BZ RETRY1 NO, GO RETRY OPERATION @VM08812 00706000
  737. MVC IOERADR-IOERBLOK(1,R7),IOERDATA-IOERBLOK+2(R3) @VM08812 00707000
  738. * GET TRACK-IN-ERROR DATA 00708000
  739. B RETRY1 GO RETRY OPERATION @VM08812 00709000
  740. ENTRYRTY EQU * @VM08812 00710000
  741. TM IOERFLG1,IOERORA+IOERSUPP @VM08812 00711000
  742. BNO ENTRYNSK NO, CHECK OPPOSITE RECOVERY @VM08812 00712000
  743. * ACTIVE 00713000
  744. TM IOERFLG2,IOERRBK IS THIS A READ BACKWARD CMD @VM08812 00714000
  745. BZ TSTROBS NO, CHECK OPPOSITE RECOVERY @VM08812 00715000
  746. * ACTIVE 00716000
  747. TM IOERFLG1,IOERORA+IOERSUPP+IOERBSR @VM08812 00717000
  748. BNO TSTUNIT NO, CHECK FOR SECOND IOERBLOK @VM08812 00718000
  749. LABELIOB EQU * @VM08812 00719000
  750. MVI IOERNUM,RECERR INDICATE RECOVERY ERROR MESSAGE @VM08812 00720000
  751. ICM R3,15,IOBIOER IS THERE A SECOND IOERBLOK @VM08812 00721000
  752. BNZ CALLWTR1 NO, GO WRITE ERROR MESSAGE @VM08812 00722000
  753. NI IOERFLG1,X'FF'-(IOERFSR+IOERBSR) RESET FLAGS @VM08812 00723000
  754. B OPPREV40 GO CHECK FOR OPPOSITE RECOVERY @VM08812 00724000
  755. TSTROBS EQU * @VM08812 00725000
  756. TM IOERFLG1,IOERORA+IOERSUPP+IOERFSR @VM08812 00726000
  757. BO LABELIOB YES, CHECK FOR SECOND IOERBLOK @VM08812 00727000
  758. TSTUNIT EQU * @VM08812 00728000
  759. ICM R3,15,IOBIOER IS THERE A SECOND IOERBLOK @VM08812 00729000
  760. BNZ SPFWD YES, GO CHECK ERROR COUNT @VM08812 00730000
  761. LH R5,IOBCSW+6 GET RESIDUAL COUNT @VM08812 00731000
  762. LTR R5,R5 IS RESIDUAL COUNT ZERO @VM08812 00732000
  763. BNZ TSTWLR NO, GET FAILING CCW ADDRESS @VM08812 00733000
  764. MVI IOERNUM,DATAER INDICATE DATA CHECK MESSAGE @VM08812 00734000
  765. TM IOBCSW+5,IL IS INCORRECT LENGTH ACTIVE @VM08812 00735000
  766. BO CALLWTR1 YES, GO WRITE ERROR MESSAGE @VM08812 00736000
  767. TSTWLR EQU * @VM08812 00737000
  768. BAL R5,GETCUCCW GET FAILING CCW ADDRESS @VM08812 00738000
  769. LH R5,6(R4) GET CCW COUNT @VM08812 00739000
  770. S R5,F1 SUBTRACT ONE FROM CCW COUNT @VM08812 00740000
  771. SH R5,IOBCSW+6 SUBTRACT RESIDUAL COUNT FROM @VM08812 00741000
  772. * CCW COUNT 00742000
  773. L R1,IOERLOC GET ALLOCATED STORAGE ADDRESS @VM08812 00743000
  774. MVC 28(1,R1),4(R4) RESTORE CCW FLAGS @VM08812 00744000
  775. L R4,24(R1) GET DATA ADDRESS FROM CCW @VM08812 00745000
  776. AR R4,R5 ADD COUNT TO DATA ADDRESS @VM08812 00746000
  777. ST R4,24(R1) PUT DATA ADDRESS IN CCW @VM08812 00747000
  778. NI IOERFLG1,X'FF'-IOERSUPP RESET SUPPRESS FLAG @VM08812 00748000
  779. SPFWD EQU * @VM08812 00749000
  780. MVI IOERNUM,DATAER INDICATE DATA CHECK MESSAGE @VM08812 00750000
  781. CLC IOBRCNT,=H'81' ERROR COUNT REACH 81 @VA13107 00751100
  782. BE FORWARD IF OVER 81, GO FORWARD ONE RECORD@VA13107 00751200
  783. BH CALLWTR1 IF OVER 81, WRITE ERROR RECORD @VA13107 00751300
  784. ICM R3,15,IOBIOER IS THERE A SECOND IOERBLOK @VM08812 00753000
  785. BZ CHANPRG1 NO, BUILD CHANNEL PROG. & RETRY @VM08812 00754000
  786. MVC IOERADR-IOERBLOK(1,R7),IOERDATA-IOERBLOK+2(R3) @VM08812 00755000
  787. * GET TRACK-IN-ERROR DATA 00756000
  788. B CHANPRG1 GO BUILD CHANNEL PROGRAM & RETRY @VM08812 00757000
  789. FORWARD DS 0H @VA13107 00757100
  790. LH R4,IOBRCNT LOAD ERROR COUNT @VA13107 00757200
  791. LA R4,1(R4) AND INCREASE BY 1 @VA13107 00757300
  792. STH R4,IOBRCNT STORE RESULT IN IOBRCNT @VA13107 00757400
  793. BAL R5,CHANFSR SET UP FORWARD SPACE CCW @VA13107 00757500
  794. NI IOERFLG1,X'FF'-IOERFSR NO FORWARD FLAG @VA13107 00757600
  795. B RETRY1 GO RERTY OPERATION @VA13107 00757700
  796. ENTRYNSK EQU * @VM08812 00758000
  797. TM IOERFLG2,IOERRBK IS THIS A READ BACKWARD CMD @VM08812 00759000
  798. BZ TSTFLAG1 NO, CHECK FOR OPPOSITE RECOVERY @VM08812 00760000
  799. TM IOERFLG1,IOERORA+IOERBSR IS OPPOSITE RECOVERY @VM08812 00761000
  800. * & BACKSPACING ACTIVE 00762000
  801. BO ENTRNSK1 YES, CLEAR SPACE FLAGS @VM08812 00763000
  802. TSTORA EQU * @VM08812 00764000
  803. ICM R3,15,IOBIOER IS THERE A SECOND IOERBLOK @VM08812 00765000
  804. BNZ *+8 YES, GET TRACK-IN-ERROR DATA @VM08812 00766000
  805. OI IOERFLG1,IOERVLD SET RECORD VALID FLAG @VM08812 00767000
  806. B SPFWD GO RESTORE TRACK-IN-ERROR DATA @VM08812 00768000
  807. * & RETRY OPERATION 00769000
  808. TSTFLAG1 EQU * @VM08812 00770000
  809. TM IOERFLG1,IOERORA+IOERFSR IS OPPOSITE RECOVERY @VM08812 00771000
  810. * & FORWARD SPACE ACTIVE 00772000
  811. BNO TSTORA NO, CHECK FOR SECOND IOERBLOK @VM08812 00773000
  812. ENTRNSK1 EQU * @VM08812 00774000
  813. NI IOERFLG1,X'FF'-(IOERFSR+IOERBSR) RESET FLAGS @VM08812 00775000
  814. MVI IOERNUM,RECERR INDICATE RECOVERY ERROR MESSAGE @VM08812 00776000
  815. ICM R3,15,IOBIOER IS THER A SECOND IOERBLOK @VM08812 00777000
  816. BNZ CALLWTR1 YES, GO WRITE ERROR MESSAGE @VM08812 00778000
  817. TM IOERFLG1,IOERVLD IS THIS A VALID RECORD @VM08812 00779000
  818. BO CCTEST CHECK FOR COMMAND CHAIN @VA06204 00780000
  819. L R1,IOERLOC GET ALLOCATED STORAGE ADDRESS @VM08812 00781000
  820. MVC 0(8,R1),24(R1) RESTORE SAVE CCW @VM08812 00782000
  821. B RETRY1 GO RETRY OPERATION @VM08812 00783000
  822. CCTEST EQU * @VA06204 00784000
  823. L R1,IOERLOC GET AUX STORAGE ADDRESS @VA06204 00785000
  824. SR R9,R9 @VA06204 00786000
  825. ICM R9,7,41(R1) WAS THIS R.O.R. WITH CC ?? @VA06204 00787000
  826. BZ FINISH NO THATS FINE @VA06204 00788000
  827. NI IOERFLG1,255-(IOERORA+IOERFSR+IOERBSR+IOERCLN+IOERVLD) 00789000
  828. * RESET THE FLAGS 00790000
  829. XC 40(4,R1),40(R1) CLEAR R.O.R. AND CC @VA06204 00791000
  830. LR R1,R9 @VA06204 00792000
  831. B RETRY1 @VA06204 00793000
  832. CHANPRG EQU * @VM08812 00794000
  833. BAL R5,CHANFSR SET UP FORWARD SPACE CCW @VM08812 00795000
  834. TM IOERFLG2,IOERRBK IS THIE A READ BACKWARD CMD @VM08812 00796000
  835. BO RETRY1 YES, GO RETRY OPERATION @VM08812 00797000
  836. BAL R5,CHANBSR SET UP BACKSPACING CCW @VM08812 00798000
  837. B RETRY1 GO RETRY OPERATION @VM08812 00799000
  838. CHANPRG1 EQU * @VM08812 00800000
  839. BAL R5,CHANBSR SET UP BACKSPACING CCW @VM08812 00801000
  840. TM IOERFLG2,IOERRBK IS THIS A READ BACKWARD CMD @VM08812 00802000
  841. BO RETRY1 YES, GO RETRY OPERATION @VM08812 00803000
  842. BAL R5,CHANFSR SET UP FORWARD SPACE CCW @VM08812 00804000
  843. RETRY1 EQU * @VM08812 00805000
  844. MVC IOBRCAW(1),IOBCAW GET PROTECTION KEY @VA01599 00806000
  845. STCM R1,7,IOBRCAW+1 SAVE RESTART CCW ADDRESS @VA01599 00807000
  846. RETRY EQU * @VM08812 00808000
  847. OI IOBFLAG,IOBRSTRT TURN ON RESTART FLAG FOR IOS @VM08812 00809000
  848. BAL R9,CKIOB FRET SECOND IOERBLOK @VM08812 00810000
  849. B EXIT4 GO RETURN TO IOS @VM08812 00811000
  850. NOCCW EQU * @VM08812 00812000
  851. MVI IOERNUM,FALSE INDICATE NOT/KNOWN MESSAGE @VA03892 00813000
  852. B NOSTAT CHECK FOR PRINTING ERROR MESSAGE @VA02055 00814000
  853. CALLWTR1 EQU * @VM08812 00815000
  854. OI IOERIND3,IOERCAN+IOERINFO TURN ON CANCEL & @VM08812 00816000
  855. * INFORMATION FLAG 00817000
  856. CALLWTR EQU * @VM08812 00818000
  857. BAL R9,CKIOB FRET SECOND IOERBLOK @VM08812 00819000
  858. L R0,=C'TAP ' IDENTIFICATION OF MODULE @VM08812 00820000
  859. OI IOERFLG2,IOERMSW SET MSG WRITER ACTIVE @VA04628 00821000
  860. CALL DMKMSWR,AFFINITY @V4075A0 00822000
  861. NI IOERFLG2,X'FF'-IOERMSW CLEAR MSG WRITER FLAG @VA04628 00823000
  862. TM IOERFLG1,IOERPEND WAS INTERVENTION REQUEST SET @VM08812 00824000
  863. BZ NOTINT NO, CHECK OPERATOR RESPONSE @VM08812 00825000
  864. NI IOBFLAG,X'FF'-IOBRSTRT TURN OFF RESTART FLAG @VM08812 00826000
  865. L R1,IOERCPEX SEE IF DEVICE END I/O TO REDRIVE @VA12941 00827000
  866. LTR R1,R1 ANY CPEXBLOKS ON QUEUE @VA12941 00827100
  867. BZ TAPEXIT4 NO DE I/O TO REDRIVE @VA12941 00827200
  868. UNSTKNXT L R5,CPEXFPNT-CPEXBLOK(R1) NEXT CPEX ON CHAIN @VA12941 00827300
  869. CALL DMKSTKCP STACK CPEXBLOK @VA12941 00827400
  870. LTR R5,R5 ANY MORE ON CHAIN @VA12941 00827500
  871. BZ CLEARPNT NO, ZERO ANCHOR AND EXIT @VA12941 00827600
  872. LR R1,R5 CPEXBLOK ADDRESS TO R5 @VA12941 00827700
  873. B UNSTKNXT STACK THEM ALL @VA12941 00827800
  874. CLEARPNT ST R5,IOERCPEX CLEAR ANCHOR @VA12941 00827900
  875. TAPEXIT4 B EXIT4 EXIT @VA12941 00828000
  876. NOTINT EQU * @VM08812 00830000
  877. TM IOERIND4,IOERSTRT WAS OPERATOR RESPONSE (RETRY) @VM08812 00831000
  878. BZ IGNORE NO, CHECK FOR IGNORE AND CANCEL @VM08812 00832000
  879. MVC IOBRCNT,F1+2 SET ERROR COUNT TO ONE @VM08812 00833000
  880. TRYAGAIN EQU * @VM08812 00834000
  881. MVC IOBRCAW,IOBCAW SET UP RESTART CAW @VM08812 00835000
  882. B RETRY GO RETRY OPERATION 00836000
  883. IGNORE EQU * @VM08812 00837000
  884. OI IOBSTAT,IOBFATAL SET I/O FATAL FLAG @VM08812 00838000
  885. TM IOBFLAG,IOBCP IS THIS CP GENERATED ?? @VA03757 00839000
  886. BO SDREXIT YES, BRANCH @VA03757 00840000
  887. TM IOERIND4,IOERIGNR WAS OPERATOR RESPONSE (IGNORE)@VM08812 00841000
  888. BZ EXIT1 NO, GO FRET SECOND IOERBLOK @VM08812 00842000
  889. FINISH EQU * @VM08812 00843000
  890. NI IOBSTAT,X'FF'-IOBFATAL RESET I/O FATAL FLAG @VM08812 00844000
  891. EXIT1 EQU * @VM08812 00845000
  892. BAL R9,CKIOB FRET SECOND IOERBLOK @VM08812 00846000
  893. EXIT2 EQU * @VM08812 00847000
  894. NI IOBFLAG,X'FF'-(IOBRSTRT+IOBERP) RESET ERP & @VM08812 00848000
  895. * RESTART FLAG 00849000
  896. EXIT3 EQU * @VM08812 00850000
  897. BAL R9,FRETPTR FRET ALLOCATED STORAGE @VM08812 00851000
  898. EXIT4 EQU * @VM08812 00852000
  899. EXIT RETURN TO IOS @VM08812 00853000
  900. SPACE 4 00854000
  901. CKIOB EQU * @VM08812 00855000
  902. ICM R1,15,IOBIOER IS THERE A SECOND IOERBLOK @VM08812 00856000
  903. BZ NOTUSED NO, RETURN TO IN LINE CODE @VM08812 00857000
  904. TM IOERCSW+5-IOERBLOK(R1),IFCC+CCC+CDC IS CHANNEL @VM08812 00858000
  905. * ERROR INDICATED 00859000
  906. BZ CKEND NO, GO FRET IOERBLOK @VM08812 00860000
  907. LR R3,R1 SAVE SECOND IOERBLOK ADDRESS @VM08812 00861000
  908. L R1,IOERCCRA-IOERBLOK(R3) CHANNEL REC ADDR @V508690 00862000
  909. L R0,IOERCCRL-IOERBLOK(R3) CHANNEL REC LENGTH @V508690 00863000
  910. CALL DMKFRET RELEASE STORAGE FOR RECORD @VM08812 00864000
  911. LR R1,R3 RESTORE SECOND IOERBLOK ADDRESS @VM08812 00865000
  912. CKEND EQU * @VM08812 00866000
  913. LA R0,IOERSIZE GET SIZE IN DOUBLEWORDS FOR @VM08812 00867000
  914. * IOERBLOK 00868000
  915. AH R0,IOEREXT-IOERBLOK(,R1) ADD EXTRA LENGTH @VM08812 00869000
  916. CALL DMKFRET RELEASE STORAGE FOR IOERBLOK @VM08812 00870000
  917. NOTUSED EQU * @VM08812 00871000
  918. MVC IOBIOER,ZEROES CLEAR POINTER TO IOERBLOK @VM08812 00872000
  919. BR R9 RETURN TO IN LINE CODE @VM08812 00873000
  920. ********************************************************* 00874000
  921. SPACE 4 00875000
  922. FRETPTR EQU * @VM08812 00876000
  923. SR R0,R0 CLEAR REGISTER ZERO @VM08812 00877000
  924. ICM R0,3,IOERDW GET ALLOCATED SIZE IN DOUBLEWORDS@VM08812 00878000
  925. BCR 8,R9 IF ZERO, DON'T FRET STORAGE @VM08812 00879000
  926. L R1,IOERLOC GET ADDRESS OF ALLOCATED STORAGE @VM08812 00880000
  927. CALL DMKFRET RELEASE STORAGE @VM08812 00881000
  928. SR R0,R0 CLEAR REGISTER 0 @VM08812 00882000
  929. ST R0,IOERLOC CLEAR ADDR OF ALLOCATED STORAGE @VM08812 00883000
  930. STH R0,IOERDW CLEAR SIZE AREA @VM08812 00884000
  931. BR R9 RETURN TO IN LINE CODE @VM08812 00885000
  932. ****************************************************************** 00886000
  933. SPACE 4 00887000
  934. GETCUCCW EQU * @VM08812 00888000
  935. L R4,IOERCSW GET FAILING CCW ADDRESS PLUS 8 @VM08812 00889000
  936. LA R4,0(R4) CLEAR HIGH ORDER BYTE @VM08812 00890000
  937. S R4,F8 GET FAILING CCW ADDRESS @VM08812 00891000
  938. BM TESTCCW TEST CCW ADDRESS @VA12173 00892100
  939. BR R5 RETURN TO INLINE CODE @VA12173 00892200
  940. TESTCCW DS 0H @VA12173 00892300
  941. L R4,IOBMISC2 GET SAVE AREA BASE ADDRESS @VA12173 00892400
  942. L R4,SAVEWRK8-SAVERETN(R4) GET SAVED CSW @VA12173 00892500
  943. LA R4,0(R4) CLEAR HIGH ORDER BYTE @VA12173 00892600
  944. S R4,F8 GET FAILING CCW ADDRESS @VA12173 00892700
  945. BM NOCCW IF STILL NEG WRITE ERR. MSG. @VA12173 00892800
  946. BR R5 RETURN TO INLINE CODE @VA12173 00892900
  947. ****************************************************************** 00894000
  948. SPACE 4 00895000
  949. CTLWRTRD EQU * @VM08812 00896000
  950. TM 0(R4),X'03' IS THIS A CONTROL CMD CCW @VM08812 00897000
  951. BO TRYAGAIN YES, GO RETRY OPERATION @VM08812 00898000
  952. CLI 0(R4),X'04' IS THIS A SENSE CMD CCW @VA01599 00899000
  953. BE TRYAGAIN YES, GO RETRY OPERATION @VA01599 00900000
  954. TM 0(R4),X'01' IS THIS A WRITE CMD CCW @VM08812 00901000
  955. BO WRTREP YES, GO REPOSITION TAPE DRIVE @VM08812 00902000
  956. BR R5 RETURN TO IN LINE CODE @VM08812 00903000
  957. ***************************************************************** 00904000
  958. SPACE 4 00905000
  959. DATCHAIN EQU * @VM08812 00906000
  960. L R2,IOBCAW GET BEGINNING OF CCW STRING @VM08812 00907000
  961. LA R2,0(,R2) CLEAR HIGH ORDER BYTE (KEY) @VA03809 00908000
  962. L R0,FFS FOR RCWHEAD COMPARE @VA04842 00909000
  963. SLR R9,R9 CLEAR RESTART REGISTER @VA04842 00910000
  964. ST R1,SAVEWRK1 SAVE REG 1 @VA04842 00911000
  965. ST R4,SAVEWRK4 AND REG 4 @VA04842 00912000
  966. LA CCWREG,0(,CCWREG) MAKE SURE HI-ORDER IS ZERO @VA04842 00913000
  967. CHKZERO CLI 0(CCWREG),X'00' CHECK CCW OPCODE FOR ZERO @VA04842 00914000
  968. BE CHKFIRST IT IS...BACK UP TO FIND NON-ZERO @VA04842 00915000
  969. LR R1,CCWREG LOOK AT ... @VA04842 00916000
  970. S R1,F8 PREVIOUS CCW @VA04842 00917000
  971. CH R0,4(,R1) IS THIS HEAD OF RCWTASK? @VA04842 00918000
  972. BE CHKCD IF SO, WE MAY BE IN TROUBLE @VA04842 00919000
  973. B BYPASSW NOT HEAD, VALID RESTART CCW @VA04842 00920000
  974. SPACE , @VA04842 00921000
  975. CHKFIRST S CCWREG,F8 BACK UP TO PREVIOUS CCW @VA04842 00922000
  976. B CHKZERO KEEP LOOKING FOR NON-ZERO OPCODE @VA04842 00923000
  977. SPACE , @VA04842 00924000
  978. CHKCD S R2,F16 POINT AT VERY FIRST RCWTASK @VA04842 00925000
  979. CHKCD1 LH R0,10(,R2) GET NUMBER OF CCWS IN RCWTASK @VA04842 00926000
  980. LR R1,R2 SAVE ADDR OF RCWTASK IN R1 @VA04842 00927000
  981. LA R2,8(,R2) READY FOR FIRST CCW IN RCWTASK @VA04842 00928000
  982. NEXTCCW LA R2,8(,R2) LOOK AT NEXT CCW @VA04842 00929000
  983. CLR R2,CCWREG HAVE WE REACHED OUR ORIGINAL CCW?@VA04842 00930000
  984. BE CHKCCW2 YES, THAT'S ALL WE NEED TO DO @VA04842 00931000
  985. CLI 0(R2),CDTIC IS IT A DATA CHAINING TIC? @VA04842 00932000
  986. BE CHKCCW YES, SEE IF IT'S GOING TO OUR CCW@VA04842 00933000
  987. CLI 0(R2),X'08' MAYBE A REGULAR TIC @VA04842 00934000
  988. BE NEXTCCW1 YES, GO CLEAR RESTART REG @VA04842 00935000
  989. TM 4(R2),CD DATA CHAINING? @VA04842 00936000
  990. BO MAYBE YES, GO SEE IF START OF NEW CHAIN@VA04842 00937000
  991. NEXTCCW1 SLR R9,R9 CLEAR R9 TO SAY NOT IN DATA CHAIN@VA04842 00938000
  992. B CHKCCW1 KEEP SCANNING RCWTASK @VA04842 00939000
  993. SPACE , @VA04842 00940000
  994. CHKCCW CLM CCWREG,B'0111',1(R2) CDTIC TO OUR CCW? @VA04842 00941000
  995. BE DATACCW YES, WE HAVE START OF CHAIN IN R9@VA04842 00942000
  996. B CHKCCW1 NO, KEEP SCANNING RCWTASK @VA04842 00943000
  997. SPACE , @VA04842 00944000
  998. MAYBE LTR R9,R9 SEE IF A CHAIN ALREADY STARTED @VA04842 00945000
  999. BNZ CHKCCW1 YES, KEEP START ADDR IN R9 @VA04842 00946000
  1000. LR R9,R2 NO, START NEW CHAIN @VA04842 00947000
  1001. CHKCCW1 BCT R0,NEXTCCW LOOP THROUGH RCWTASK @VA04842 00948000
  1002. L R2,0(,R1) WHEN DONE WITH THIS, GO TO NEXT @VA04842 00949000
  1003. LTR R2,R2 IS THERE ANOTHER RCWTASK? @VA04842 00950000
  1004. BNZ CHKCD1 YES, GO EXAMINE IT @VA04842 00951000
  1005. CHKCCW2 LTR R9,R9 EXAMINE START-OF-CHAIN POINTER @VA04842 00952000
  1006. BZ BYPASSW WE WEREN'T DATA CHAINING - SKIP @VA04842 00953000
  1007. DATACCW LR CCWREG,R9 PUT START OF CHAIN IN CCWREG @VA04842 00954000
  1008. BYPASSW LR R2,CCWREG ADDR OF START OF DATA CHAIN IN R2@VA04842 00955000
  1009. L R1,SAVEWRK1 RESTORE REG 1 @VA04842 00956000
  1010. L R4,SAVEWRK4 AND REG 4 @VA04842 00957000
  1011. BR R5 RETURN TO IN LINE CODE @VM08812 00958000
  1012. ************************************************************ 00959000
  1013. SPACE 4 00960000
  1014. CHANFSR EQU * @VM08812 00961000
  1015. L R1,IOERLOC GET ALLOCATED STORAGE ADDRESS @VM08812 00962000
  1016. MVC 0(8,R1),FWDSPACE MOVE FORWARD SPACE CCW IN AREA @VM08812 00963000
  1017. MVC 8(8,R1),NOP MOVE NO-OP CCW IN AREA @VM08812 00964000
  1018. NI IOERFLG1,X'FF'-IOERBSR RESET BACKSPACING FLAG @VM08812 00965000
  1019. OI IOERFLG1,IOERFSR SET FORWARD SPACE FLAG @VM08812 00966000
  1020. BR R5 RETURN TO IN LINE CODE @VM08812 00967000
  1021. ***************************************************************** 00968000
  1022. SPACE 4 00969000
  1023. CHANBSR EQU * @VM08812 00970000
  1024. L R1,IOERLOC GET ALLOCATED STORAGE ADDRESS @VM08812 00971000
  1025. MVC 0(8,R1),BKSPACE MOVE BACKSPACING CCW IN AREA @VM08812 00972000
  1026. MVC 8(8,R1),NOP MOVE NO-OP CCW IN AREA @VM08812 00973000
  1027. NI IOERFLG1,X'FF'-IOERFSR RESET FORWARD FLAG @VM08812 00974000
  1028. OI IOERFLG1,IOERBSR SET BACKSPACING FLAG @VM08812 00975000
  1029. BR R5 RETURN TO IN LINE CODE @VM08812 00976000
  1030. **************************************************************** 00977000
  1031. SPACE 4 00978000
  1032. DEVRTN EQU * @VM08812 00979000
  1033. CLI RDEVTYPE,TYP3410 IS THIS A 3410 DEVICE @VM08812 00980000
  1034. BE 4(R5) YES, RETURN TO IN LINE CODE @VM08812 00981000
  1035. CLI RDEVTYPE,TYP3420 IS THIS A 3420 DEVICE @VM08812 00982000
  1036. BE 4(R5) YES, RETURN TO IN LINE CODE @VM08812 00983000
  1037. BR R5 RETURN TO IN LINE CODE @VM08812 00984000
  1038. ***************************************************************** 00985000
  1039. SPACE 4 00986000
  1040. CHANTIC EQU * @VM08812 00987000
  1041. L R1,IOERLOC GET ADDRESS OF ALLOCATED AREA @VM08812 00988000
  1042. MVC 0(8,R1),TIE TRACK-IN-ERROR CCW IN AREA @VM08812 00989000
  1043. MVC 8(8,R1),TIC MOVE TIC CCW IN AREA @VM08812 00990000
  1044. BR R5 RETURN TO IN LINE CODE @VM08812 00991000
  1045. ***************************************************************** 00992000
  1046. SPACE 4 00993000
  1047. CHANCOPY EQU * @VM08812 00994000
  1048. L R1,IOERLOC GET ADDRESS OF ALLOCATED AREA @VM08812 00995000
  1049. MVC 0(8,R1),TIE MOVE TRACK-IN-ERROR CCW IN AREA @VM08812 00996000
  1050. MVC 8(8,R1),24(R1) MOVE SAVE CCW IN AREA @VM08812 00997000
  1051. BR R5 RETURN TO IN LINE CODE @VM08812 00998000
  1052. ***************************************************************** 00999000
  1053. SPACE 1 01000000
  1054. SDREXIT EQU * @VA03757 01001000
  1055. TM IOERIND4,IOERIGNR WAS OPERATOR RESPONSE(IGNORE) @VA03757 01002000
  1056. BZ SDREXIT1 NO, GO FRET SECOND IOERBLOK @VA03757 01003000
  1057. NI IOBSTAT,X'FF'-IOBFATAL RESET I/O FATAL FLAG @VA03757 01004000
  1058. SDREXIT1 EQU * @VA03757 01005000
  1059. BAL R9,CKIOB FRET SECOND IOERBLOK @VA03757 01006000
  1060. SDREXIT2 EQU * @VA03757 01007000
  1061. NI IOBFLAG,X'FF'-(IOBRSTRT+IOBERP) RESET FLAGS @VA03757 01008000
  1062. BAL R9,FRETPTR FRET ALLOCATED STORAGE @VA03757 01009000
  1063. SDRPROC EQU * @VA03757 01010000
  1064. SLR R1,R1 CLEAR PARAMETER REG @VA03757 01011000
  1065. TM RDEVTYPE,TYP2401+TYP2415+TYP2420 2400 ?? @VA03757 01012000
  1066. BZ GOCOUNT NO, NOT 2400 @VA03757 01013000
  1067. LA R0,PARMLEN GET LENGTH OF PARAMETER LIST @VA03757 01014000
  1068. CALL DMKFREE GET STORAGE FOR PARAMETER LIST @VA03757 01015000
  1069. MVC 0(16,R1),PARM2400 GET PARM LIST FOR UPDATE @VA03757 01016000
  1070. TM IOERFLG3,IOERREAD ERROR ON READ ?? @VA03757 01017000
  1071. BZ GOCOUNT NO, GO TO STATISTICAL UPDATE @VA03757 01018000
  1072. TM IOERFLG1,IOERORA OPPOSITE RECOVERY ACTION @VA03757 01019000
  1073. BZ GOCOUNT NO, GO TO STATISTICAL UPDATE @VA03757 01020000
  1074. MVI 14(R1),X'2F' TURN ON DEVICE DEPENDENT COUNTER @VA03757 01021000
  1075. GOCOUNT EQU * @VA03757 01022000
  1076. CALL DMKIOEST GO TO STATISTICAL COUNTER UPDATE @VA03757 01023000
  1077. LTR R1,R1 WAS A PARAMETER LIST PASSED ?? @VA03757 01024000
  1078. BZ NOPARM NO @VA03757 01025000
  1079. LA R0,PARMLEN GET PARAMETER LIST LENGTH @VA03757 01026000
  1080. CALL DMKFRET GO RELEASE STORAGE USED FOR LIST @VA03757 01027000
  1081. NOPARM EQU * @VA03757 01028000
  1082. B EXIT4 EXIT TO IOS @VA03757 01029000
  1083. EJECT 01030000
  1084. **************************************************************** 01031000
  1085. EQUI1 EQU X'10' EQUIPMENT CHECK @VM08812 01032000
  1086. BUSCE EQU X'20' BUS OUT CHECK @VM08812 01033000
  1087. INTRV EQU X'40' INTERVENTION CONDITION @VM08812 01034000
  1088. TAUST EQU X'20' TAU UNIT STATUS 'B' INDICATOR @VM08812 01035000
  1089. COMRJ EQU X'80' COMMAND REJECT @VM08812 01036000
  1090. OVERN EQU X'04' OVERRUN CONDITION @VM08812 01037000
  1091. LDPONT EQU X'08' BACKSPACE AT LOAD POINT @VM08812 01038000
  1092. DATACK EQU X'08' DATA CHECK ERROR @VM08812 01039000
  1093. NOISRECD EQU X'80' NOISE RECORD @VM08812 01040000
  1094. TRACK7 EQU X'10' 7 TRACK TAPE DRIVE @VM08812 01041000
  1095. DCMODE EQU X'10' DRIVE IN DC MODE @VM08812 01042000
  1096. SECESE EQU X'08' SECURITY ERASE COMMAND @VM08812 01043000
  1097. DATACONV EQU X'01' DATA CONVERTOR @VM08812 01044000
  1098. NOTCAPA EQU X'01' NOT CAPABLE FLAG @VM08812 01045000
  1099. PEBURST1 EQU X'10' P. E. BURST CHECK @VM08812 01046000
  1100. ***************************************************************** 01047000
  1101. SPACE 4 01048000
  1102. ***************************************************************** 01049000
  1103. REJ EQU 0 COMMAND REJECT @VM08812 01050000
  1104. INTREQU EQU 1 INTERVENTION REQUEST @VM08812 01051000
  1105. BUSOUTCK EQU 2 BUSOUT CHECK @VM08812 01052000
  1106. EQUIP EQU 3 EQUIPMENT CHECK @VM08812 01053000
  1107. DATAER EQU 4 DATA CHECK @VM08812 01054000
  1108. OVERERR EQU 5 OVERRUN CHECK @VM08812 01055000
  1109. PERM EQU 8 PERMANENT ERROR @VM08812 01056000
  1110. CONV EQU 10 CONVERT CHECK @VM08812 01057000
  1111. COMPAT EQU 11 COMPAT CHECK @VM08812 01058000
  1112. LDPNT EQU 12 LOAD POINT @VM08812 01059000
  1113. PROTECT EQU 13 FILE PROTECT @VM08812 01060000
  1114. BDSNS EQU 16 BAD SENSE INFORMATION @VM08812 01061000
  1115. FALSE EQU 17 NOT/KNOWN @VM08812 01062000
  1116. RECERR EQU 18 RECOVERY ERROR @VM08812 01063000
  1117. PEBURST EQU 19 P.E. BURST @VM08812 01064000
  1118. CHANERR EQU 20 CHANNEL ERROR @VM08812 01065000
  1119. NODEV EQU 21 NO DEVICE @VM08812 01066000
  1120. ERGFAIL EQU 22 ERASE CHECK @VM08812 01067000
  1121. CTLCMD EQU 23 CONTROL CHECK @VM08812 01068000
  1122. CCWAREA EQU 6 NUMBER OF DOUBLE WORDS FOR @VA06204 01069000
  1123. * ALLOCATED STORAGE 01070000
  1124. PARMLEN EQU 2 NO OF DOUBLEWORDS IN PARM LIST @VA03757 01071000
  1125. CDTIC EQU X'18' DATA-CHAINING TIC OPCODE @VA04842 01072000
  1126. CCWREG EQU 4 NO COMMENT @VA04842 01073000
  1127. *************************************************************** 01074000
  1128. ******* THE ABOVE CODES MUST BE IDENTICAL TO THE **************** 01075000
  1129. ******* CODES IN THE MESSAGE WRITER (DMKMSW) **************** 01076000
  1130. **************************************************************** 01077000
  1131. EJECT 01078000
  1132. **************************************************************** 01079000
  1133. DS 0D @VM08812 01080000
  1134. REWIND DC X'07',AL3(0),X'60',AL3(1) REWIND CCW @VM08812 01081000
  1135. NOP DC X'03',AL3(0),X'20',AL3(1) NO-OPERATION CCW @VM08812 01082000
  1136. ERASE DC X'17',AL3(0),X'60',AL3(1) ERASE GAP CCW @VM08812 01083000
  1137. BKSPACE DC X'27',AL3(0),X'60',AL3(1) BACKSPACING CCW @VM08812 01084000
  1138. TIE DC X'1B',AL3(0),X'60',AL3(1) TRACK-IN-ERRO CCW @VM08812 01085000
  1139. TIC DC X'08',AL3(0),X'60',AL3(0) TRANFER IN CONTROL CCW@VM08812 01086000
  1140. FWDSPACE DC X'37',AL3(0),X'60',AL3(1) FORWARD SPACE CCW @VM08812 01087000
  1141. PARM2400 DC X'04040102030506073031323334100F3F' @VA03757 01088000
  1142. SPACE 2 01089000
  1143. ******************************************************************** 01090000
  1144. *. 01091000
  1145. * SUBROUTINE NAME - 01092000
  1146. * 01093000
  1147. * DMKTAPRL 01094000
  1148. * 01095000
  1149. * FUNCTION - 01096000
  1150. * 01097000
  1151. * TO ISSUE RELEASE CCW TO TAPE DEVICE TO DETERMINE IF 01098000
  1152. * HARDWARE HAS 2/4 CHANNEL SWITCH FEATURE. 01099000
  1153. * 01100000
  1154. * DMKTAPRL IS CALLED FROM DMKCPS (VARY) WHEN DEVICE IS VARIED 01101000
  1155. * ONLINE. 01102000
  1156. * 01103000
  1157. * OPERATION - 01104000
  1158. * 01105000
  1159. * 1. ACQUIRE WORK AREA (2 DWDS.). 01106000
  1160. * 2. ACQUIRE IOBLOK 01107000
  1161. * 3. ACQUIRE CPEXBLOK 01108000
  1162. * 4. ISSUE TIO TO TAPE DEVICE. 01109000
  1163. * 5. ISSUE RELEASE CCW TO TAPE DEVICE. 01110000
  1164. * 6. IF TAPE HAS 2/4 CHANNEL SWITCH FEATURE, TURN ON 01111000
  1165. * FTRRSRL BIT IN THE RDEVFTR FIELD. 01112000
  1166. * 7. RELEASE ALL ACQUIRED STORAGE. 01113000
  1167. * 8. GO OFF TO THE DISPATCHER. 01114000
  1168. * 01115000
  1169. * MESSAGES - 01116000
  1170. * 01117000
  1171. * NONE 01118000
  1172. EJECT 01119000
  1173. ENTRY DMKTAPRL @VA07763 01120000
  1174. DMKTAPRL DS 0H @VA07763 01121000
  1175. USING *,12 @VA07763 01122000
  1176. SL R12,=A(DMKTAPRL-DMKTAP) @VA07763 01123000
  1177. USING DMKTAP,R12 @VA07763 01124000
  1178. * DMKTAPRL WILL PERFORM RELEASE CCW TO TAPE FOR PURPOSES 01125000
  1179. * OF DETERMINING WHEN HARDWARE HAS 2/4 CHANNEL SWITCH. 01126000
  1180. * R2 CONTAINS DEVICE ADDRESS 01127000
  1181. * R6, R7, R8 CONTAIN ADDRESS OF RCHBLOK, RCUBLOK, RDEVBLOK, 01128000
  1182. * RESPECTIVELY. 01129000
  1183. SPACE 01130000
  1184. USING RDEVBLOK,R8 @V407466 01131000
  1185. LA R0,TAPRLSZ SIZE OF RELEASE DATA FIELD IN @V407466 01132000
  1186. * DWDS. 01133000
  1187. CALL DMKFREE ACQUIRE 2 DOUBLEWORDS @V407466 01134000
  1188. LR R9,R1 ADDRESS OF STORAGE TO R9 @V407466 01135000
  1189. USING TAPREL,R9 ADDRESSABILITY @V407466 01136000
  1190. XC TAPREL(TAPRLSZ*8),TAPREL CLEAR BLOCK @V407466 01137000
  1191. MVC RELCCW(TAPEND-TAPCCWRL),TAPCCWRL MOVE RELEASE @V407466 01138000
  1192. * CCW 01139000
  1193. LA R1,RELCCW POINT TO REL. CCW @V407466 01140000
  1194. L R15,0(R1) RESOLVE CCW ADDRESS IN WORK AREA @V407466 01141000
  1195. ALR R15,R9 PLUS WORK AREA ADDRESS @V407466 01142000
  1196. ST R15,0(R1) RESTORE ADDRESS @V407466 01143000
  1197. SPACE 01144000
  1198. * ACQUIRE IOBLOK FOR CALL TO DMKIOSQR 01145000
  1199. LA R0,IOBSIZE SIZE OF IOBLOK @V407466 01146000
  1200. CALL DMKFREE ACQUIRE BLOCK @V407466 01147000
  1201. LR R10,R1 ADDRESS TO R10 @V407466 01148000
  1202. USING IOBLOK,R10 @V407466 01149000
  1203. XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR BLOCK @V407466 01150000
  1204. ST R10,IOBLINK LINK TO ITSELF @V407466 01151000
  1205. ST R11,IOBUSER STORE VMBLOK @VA10443 01152500
  1206. STH R2,IOBRADD STORE ADDR PASSED FROM DMKCPS @V407466 01154000
  1207. * ACQUIRE CPEXBLOK TO STORE CALLER'S REGISTERS 01155000
  1208. LA R0,CPEXSIZE SIZE OF CPEXBLOK IN DWDS. @V407466 01156000
  1209. CALL DMKFREE ACQUIRE BLOCK @V407466 01157000
  1210. LR R5,R1 ADDR TO R5 @V407466 01158000
  1211. USING CPEXBLOK,R5 @V407466 01159000
  1212. ST R5,IOBMISC CPEXBLOK ADDR IN IOBLOK @V407466 01160000
  1213. OI IOBSPEC,IOBTIO REQUEST FOR TIO @V407466 01161000
  1214. OI IOBSPEC,IOBUNSL FLAG AS UNSOLICITED INT. @V407466 01162000
  1215. LA R2,TIODONE RETURN ADDRESS AFTER TIO @V407466 01163000
  1216. ST R2,IOBIRA STORE IN IOBLOK @V407466 01164000
  1217. STM R0,R15,CPEXREGS STORE CALLER'S REGISTERS @V407466 01165000
  1218. CALL DMKIOSQR ISSUE I/O REQUEST @V407466 01166000
  1219. GOTO DMKDSPCH WAIT FOR I/O TO COMPLETE @V407466 01167000
  1220. SPACE 01168000
  1221. DROP R7 @V407466 01169000
  1222. TIODONE EQU * @V407466 01170000
  1223. L R5,IOBMISC CPEXBLOK ADDR @V407466 01171000
  1224. LM R0,R15,CPEXR0 REGAIN REGISTERS @V407466 01172000
  1225. TM IOBSTAT,IOBCC3 DID WE GET CC=3?? @V407466 01173000
  1226. BO TAPCC3 YES, BRANCH @V407466 01174000
  1227. BZ TAPCC0 NO, CC=0, BRANCH @V407466 01175000
  1228. L R1,IOBIOER GET IOERBLOK @V407466 01176000
  1229. LTR R1,R1 IS THERE ONE? @V407466 01177000
  1230. BZ TAPCC3 NO, JUST EXIT @V407466 01178000
  1231. USING IOERBLOK,R1 @V407466 01179000
  1232. TM IOERDATA,X'40' INT. REQ. @V407466 01180000
  1233. BZ TAPCC0 NOT FATAL @V407466 01181000
  1234. TM IOERDATA+1,X'60' STATUS A & B ON @V407466 01182000
  1235. BNZ TAPCC0 NOT FATAL @V407466 01183000
  1236. SPACE 01184000
  1237. TAPCC3 EQU * @V407466 01185000
  1238. FRETBLKS EQU * @V407466 01186000
  1239. LR R1,R9 ADDRESS OF DMKTAP WORK AREA @V407466 01187000
  1240. LA R0,TAPRLSZ SIZE OF WORK AREA IN DWDS. @V407466 01188000
  1241. CALL DMKFRET RELEASE STORAGE @V407466 01189000
  1242. LR R1,R10 IOBLOK ADDRESS @V407466 01190000
  1243. LA R0,IOBSIZE SIZE OF IOBLOK @V407466 01191000
  1244. CALL DMKFRET RELEASE IOBLOK @V407466 01192000
  1245. LR R1,R5 CPEXBLOK ADDRESS @V407466 01193000
  1246. LA R0,CPEXSIZE SIZE OF CPEXBLOK @V407466 01194000
  1247. CALL DMKFRET RELEASE STORAGE @V407466 01195000
  1248. LR R2,R12 PREPARE TO UNLOCK DMKTAP @V407466 01196000
  1249. CALL DMKPTRUL UNLOCK THIS PAGE @V407466 01197000
  1250. GOTO DMKDSPCH RETURN TO DMKDSPCH @V407466 01198000
  1251. SPACE 01199000
  1252. TAPCC0 EQU * @V407466 01200000
  1253. ST R9,IOBCAW PREPARE FOR ISSUING RELEASE @V407466 01201000
  1254. NI IOBSPEC,X'FF'-IOBTIO RESET IOBTIO FLAG @V407466 01202000
  1255. LA R2,RELDONE RETURN ADDR AFTER RELEASE @V407466 01203000
  1256. ST R2,IOBIRA STORE IN IOBLOK @V407466 01204000
  1257. STM R0,R15,CPEXREGS STORE REGISTERS FOR RETURN @V407466 01205000
  1258. CALL DMKIOSQR ISSUE I/O REQUEST @V407466 01206000
  1259. GOTO DMKDSPCH GO TO DISPATCHER TO WAIT FOR @V407466 01207000
  1260. * AWHILE 01208000
  1261. SPACE 01209000
  1262. RELDONE EQU * @V407466 01210000
  1263. L R5,IOBMISC CPEXBLOK ADDR @V407466 01211000
  1264. LM R0,R15,CPEXREGS RESTORE REGISTERS @V407466 01212000
  1265. TM IOBSTAT,IOBFATAL+IOBCC3 REQUEST FATAL? @V407466 01213000
  1266. BNZ TAPCC3 YES @V407466 01214000
  1267. LA R14,RELCCW+8 ADDR OF REL. CCW PLUS 8 @V407466 01215000
  1268. L R1,IOBCSW GET ENDING CSW ADDRESS @V407466 01216000
  1269. LA R1,0(,R1) CLEAR OUT THE GARBAGE @V407466 01217000
  1270. CLR R1,R14 DID THE RELEASE GET PERFORMED? @V407466 01218000
  1271. BL FRETBLKS NO @V407466 01219000
  1272. L R14,RDEVCUB GET ADDRESS OF ALTCU @VA07875 01219200
  1273. LTR R14,R14 IS THERE ALTCU ? @VA07875 01219400
  1274. BNZ FRETBLKS YES, CAN NOT ALLOW RES/REL @VA07875 01219600
  1275. OI RDEVFTR,FTRRSRL R/R CCWS VALID ON THIS DEVICE @V407466 01220000
  1276. B FRETBLKS RELEASE STORAGE ACQUIRED & EXIT @V407466 01221000
  1277. SPACE 01222000
  1278. TAPCCWRL CCW X'D4',TAPRL-TAPREL,SILI,6 TAPE RELEASE CCW @V407466 01223000
  1279. TAPEND EQU * @V407466 01224000
  1280. SPACE 01225000
  1281. EJECT 01226000
  1282. LTORG 01227000
  1283. TAPREL DSECT WORK AREA DSECT @V407466 01228000
  1284. RELCCW DS D RELEASE CCW @V407466 01229000
  1285. TAPRL DS D SENSE BYTES ASSOCIATED WITH @V407466 01230000
  1286. * RELEASE 01231000
  1287. TAPRLSZ EQU (*-TAPREL)/8 SIZE OF RELEASE DATA FIELD IN @V407466 01232000
  1288. * DWDS. 01233000
  1289. EJECT 01234000
  1290. COPY CCHREC @VM08812 01235000
  1291. EJECT 01236000
  1292. COPY IOER 01237000
  1293. COPY RBLOKS 01238000
  1294. COPY IOBLOKS 01239000
  1295. COPY CONBUF 01240000
  1296. COPY DEVTYPES 01241000
  1297. COPY EQU 01242000
  1298. COPY SAVE 01243000
  1299. PSA 01244000
  1300. END 01245000