Table of Contents

DMKIOF Source

References

Source Listing

DMKIOF.ASSEMBLE.txt
  1. IOF TITLE 'DMKIOF (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 @VA03358 00002000
  3. *************************************************************** 00003000
  4. * 00004000
  5. * MODULE NAME - 00005000
  6. * 00006000
  7. * DMKIOF 00007000
  8. * 00008000
  9. * CONTENTS - 00009000
  10. * 00010000
  11. * DMKIOFOB - RECORD OUTBOARD AND MISCELLENOUS DATA RECORDS 00011000
  12. * DMKIOFVR - RECORD SVC 76 REQUEST RECORDS 00012000
  13. * DMKIOFM1 - RECORD MACHINE CHECK RECORDS 00013000
  14. * DMKIOFC1 - RECORD CHANNEL CHECK RECORDS 00014000
  15. * DMKIOFIN - INITIALIZE POINTERS TO AVAILABLE RECORDING PAGES 00015000
  16. * 00016000
  17. * FUNCTION - 00017000
  18. * 00018000
  19. * THIS PAGABLE MODULE PROVIDES SUPPORT FOR RECORDING OUTBOARD 00019000
  20. * (OBR), INBOARD (CCH), MACHINE CHECK (MCH) AND MISCELLANEOUS 00020000
  21. * DATA (MDR) RECORDS TO THE PREDEFINED ERROR RECORDING 00021000
  22. * CYLINDERS. IT ALSO INITIALIZE POINTERS TO THE AVAILABLE 00022000
  23. * RECORDING PAGES AT IPL TIME AND WHEN THE RECORDING CYLINDERS 00023000
  24. * ARE ERASE. 00024000
  25. * 00025000
  26. COPY OPTIONS @VA12116 00025100
  27. SPACE 3 00026000
  28. DMKIOF CSECT @VA03358 00027000
  29. MODID DC CL8'DMKIOF' MODULE IDENTIFIER @V305435 00028000
  30. SPACE 2 00029000
  31. EXTRN DMKPGTVR,DMKRPAPT,DMKRPAGT,DMKPGTVG @VA03358 00030000
  32. EXTRN DMKIOEES,DMKIOERP,DMKIOEMX,DMKSYSER @V5088AA 00031100
  33. EXTRN DMKIOEIQ,DMKIOEMQ,DMKIOERQ,DMKIOENQ @VA03358 00032000
  34. EXTRN DMKIOEVQ,DMKIOENI,DMKIOEEP,DMKIOECT @V5088AA 00033100
  35. EXTRN DMKPTRUL,DMKIOECQ,DMKSTKCP @VA03358 00034000
  36. EXTRN DMKERMSG,DMKIOESQ,DMKIOCVT @VA03757 00035000
  37. SPACE 2 00036000
  38. USING PSA,R0 SETUP ADDRESSABILITY FOR LOWCORE @VA03358 00037000
  39. USING RECPAG,R2 SETUP ADDRESSABILITY FOR HEADER @VA03358 00038000
  40. USING RDEVBLOK,R8 SETUP ADDRESSABILITY FOR RDEVBLOK@VA03358 00039000
  41. USING SAVEAREA,R13 SETUP ADDRESSABILITY FOR SAVEAREA@VA03358 00040000
  42. USING *,R12 SETUP ADDRESSABILITY FOR MODULE @VA03358 00041000
  43. EJECT 00042000
  44. ********************************************************************** 00043000
  45. * 00044000
  46. * SUBROUTINE NAME - 00045000
  47. * 00046000
  48. * DMKIOFOB 00047000
  49. * 00048000
  50. * FUNCTION - 00049000
  51. * 00050000
  52. * THIS SUBROUTINE BUILDS, FORMATS AND RECORDS OUTBOARD (OBR) 00051000
  53. * AND MISCELLANEOUS DATA (MDR) RECORDS ONTO THE ERROR 00052100
  54. * RECORDING CYLINDERS. 00053100
  55. * 00054000
  56. * ATTRIBUTES - 00055000
  57. * 00056000
  58. * SERIALLY REUSEABLE, PAGABLE, ENTERED VIA SVC 00057000
  59. * 00058000
  60. * ENTRY CONDITIONS - 00059000
  61. * 00060000
  62. * GR 6 = ADDRESS OF ERRBLOK 00061000
  63. * GR 7 = SIZE OF ERRBLOK RECORD IN DOUBLEWORDS 00062000
  64. * GR 8 = ADDRESS OF RDEVBLOK 00063000
  65. * GR 11 = ADDRESS OF VMBLOK 00064000
  66. * GR 12 = ADDRESS OF DMKIOFOB 00065000
  67. * GR 13 = ADDRESS OF SAVE AREA 00066000
  68. * 00067000
  69. * EXIT CONDITIONS - 00068000
  70. * 00069000
  71. * NONE 00070000
  72. * 00071000
  73. * CALL TO OTHER ROUTINES - 00072000
  74. * 00073000
  75. * DMKFRET - TO RETURN ALLOCATED STORAGE FOR RECORD/CPEXBLOK 00074000
  76. * DMKPGTVG - GET A VIRTUAL BUFFER PAGE 00075000
  77. * DMKQCNWT - WRITE A MESSAGE TO THE OPERATOR 00076000
  78. * DMKPGTVR - RELEASE A VIRTUAL BUFFER PAGE 00077000
  79. * DMKRPAGT - READ A PAGE FROM THE RECORDING CYLINDER 00078000
  80. * DMKRPAPT - WRITE PAGE RECORD TO RECORDING CYLINDER 00079000
  81. * DMKPTRUL - UNLOCK RECORDING PAGE 00080000
  82. * DMKPTRAN - LOCK RECORDING PAGE IN STORAGE 00081000
  83. * DMKSTKCP - STACK CPEXBLOK TO GET NEXT REQUEST 00082000
  84. * DMKERMSG - WRITE ERROR MESSAGES 00083000
  85. * DMKIOCVT - CONVERT VM/370 DEVICE TYPE TO OS/VS DEVICE TYPE 00084000
  86. * 00085000
  87. * EXTERNAL REFERENCES - 00086000
  88. * 00087000
  89. * DMKIOERP - RECORDING IN PROGRESS FLAG 00088000
  90. * DMKIOEMX - NO. OF PAGES (MAX) ON A CYLINDER 00089000
  91. * DMKIOENI - NO. OF PAGES ON LAST CYL WHICH CORRESPONDS 00090100
  92. * TO RECORDING AREA 90% FULL 00090200
  93. * DMKIOEIQ - RECORDING QUE CHAIN FOR OBR/MDR RECORDS 00091000
  94. * DMKIOESQ - QUE CHAIN FOR UPDATE REQUESTS 00092000
  95. * DMKIOEES - ERROR RECORDING CYLINDERS FULL FLAG 00093100
  96. * DMKIOERQ - RECORDING QUE CHAIN FOR ERASE REQUEST 00094000
  97. * DMKIOEMQ - RECORDING QUE CHAIN FOR MCH RECORDS 00095000
  98. * DMKIOECQ - RECORDING QUE CHAIN FOR CCH RECORDS 00096000
  99. * DMKIOENQ - RECORDING QUE CHAIN FOR MDR SYNCHRONOUS RECORDS 00097000
  100. * DMKIOEVQ - RECORDING QUE CHAIN FOR SVC 76 REQUESTS 00098000
  101. * 00099000
  102. * TABLES /WORK AREAS - 00100000
  103. * 00101000
  104. * ERRBLOK - CONTAINS DATA TO BUILD OBR/MDR 00102000
  105. * 00103000
  106. * NOTES - 00104000
  107. * 00105000
  108. * NONE 00106000
  109. * 00107000
  110. * REGISTER USAGE - 00108000
  111. * 00109000
  112. * GR14,15 LINKAGE REGISTERS 00110000
  113. * GR12 = MODULE BASE REGISTER 00111000
  114. * GR11 = VMBLOK ADDRESSABILITY 00112000
  115. * GR 9 = WORK REGISTER 00113000
  116. * GR 8 = RDEVBLOK ADDRESSABILITY 00114000
  117. * GR 7 = SIZE OF THE RECORD IN DOUBLEWORDS 00115000
  118. * GR 6 = ADDRESS OF THE RECORD 00116000
  119. * GR 5 = SUBROUTINE BAL REGISTER 00117000
  120. * GR0-4= WORK REGISTERS 00118000
  121. * 00119000
  122. * OPERATION - 00120000
  123. * 00121000
  124. * I. HANDLE RECORDING FOR OBR/MDR RECORDS 00122000
  125. * 00123000
  126. * 1. IF THE RECORDING CYLINDER IS FULL, RELEASE THE 00124000
  127. * OBR/MDR RECORD AND SEND THE FULL CYLINDER ERROR 00125000
  128. * MESSAGE (DMKIOF553E/DMKIOF551E) TO THE OPERATOR IF 00126000
  129. * ONE HAS NOT BEEN SENT BEFORE. AFTERWARD, GO CHECK 00127000
  130. * RECORDING QUES FOR OTHER REQUESTS. 00128000
  131. * 00129000
  132. * 2. IF THERE IS ALREADY A RECORDING PAGE IN STORAGE, 00130000
  133. * BYPASS GETTING A VIRTUAL BUFFER PAGE AND RECORDING 00131000
  134. * PAGE. IF RECORDING PAGE IS NOT IN STORAGE, CALL 00132000
  135. * DMKPGTVG TO OBTAIN A VIRTUAL BUFFER PAGE, CALL 00133000
  136. * DMKRPAGT TO READ A PAGE FROM THE RECORDING CYLINDER 00134000
  137. * INTO STORAGE AND CALL DMKPTRAN TO LOCK RECORDING PAGE 00135000
  138. * IN STORAGE. 00136000
  139. * 00137000
  140. * 3. DETERMINE IF ENOUGH SPACE IS AVAILABLE ON THE 00138000
  141. * RECORDING PAGE FOR THE RECORD. IF NOT, GET ANOTHER 00139000
  142. * PAGE FROM RECORDING CYLINDER AND TRY AGAIN. 00140000
  143. * 00141000
  144. * 4. FOR AN OBR RECORD, THE DEVICE TYPE WILL BE ALTERED 00142000
  145. * TO AN OS DEVICE TYPE IN ORDER TO ALLOW DECODING BY 00143000
  146. * CPEREP (A CALL TO DMKIOC) . 00144000
  147. * 00145000
  148. * 5. BUILD OBR/MDR RECORD USING THE ERRBLOK THEN 00146000
  149. * MOVE THE OBR/MDR RECORD INTO AVAILABLE AREA 00147000
  150. * IN THE RECORDING PAGE AND RELEASE THE ERRBLOK.. 00148000
  151. * 00149000
  152. * 6. IF RUNNING IN A VIRTUAL MACHINE, ISSUE AN SVC 76 00150000
  153. * TO HAVE THE OBR/MDR RECORD ON THE REAL MACHINE 00151000
  154. * RECORDING CYLINDER. IF THIS IS NOT A VIRTUAL 00152000
  155. * MACHINE, UPDATE THE CONTROL HEADER IN THE RECORDING 00153000
  156. * PAGE, TO POINT TO NEXT AVAILABLE AREA ON PAGE. 00154000
  157. * 00155000
  158. * 7. MOVE PAGE NUMBER INTO THE OBR/MDR PAGE FIELD AND 00156000
  159. * RELEASE THE OBR/MDR RECORD. 00157000
  160. * 00158000
  161. * 8. ERASE QUE - IF AN ERASE REQUEST IS ON THE QUE, 00159000
  162. * WRITE OUT LAST RECORDING PAGE TO RECORDING CYLINDER 00160000
  163. * (IF NECESSARY), PUT NEXT REQUEST ON TOP OF QUE AND 00161000
  164. * CALL DMKSTKCP TO STACK A CPEXBLOK TO RETURN TO 00162000
  165. * DMKIOEFM. AFTERWARD, EXIT FROM RECORDER. IF ERASE QUE 00163000
  166. * IS EMPTY, GO CHECK NEXT RECORDING QUE. 00164000
  167. * 00165000
  168. * 9. MACHINE CHECK RECORDING QUE - IF THERE IS A MACHINE 00166000
  169. * CHECK REQUEST ON THE QUE, WRITE OUT LAST RECORDING 00167000
  170. * PAGE (IF NECESSARY), PUT NEXT REQUEST ON TOP OF QUE 00168000
  171. * AND CALL DMKSTKCP TO STACK A CPEXBLOK TO RETURN 00169000
  172. * TO DMKIOEMC. AFTERWARD, EXIT FROM RECORDER. 00170000
  173. * IF MACHINE CHECK QUE IS EMPTY, GO CHECK NEXT 00171000
  174. * RECORDING QUE. 00172000
  175. * 00173000
  176. * 10. CHANNEL CHECK RECORDING QUE - IF THERE IS A CHANNEL 00174000
  177. * CHECK REQUEST ON THE QUE, WRITE OUT LAST RECORDING 00175000
  178. * PAGE TO RECORDING CYLINDER (IF NECESSARY), PUT 00176000
  179. * NEXT REQUEST ON TOP OF QUE, GET POINTERS FOR THE 00177000
  180. * NEXT RECORD, RELEASE THE CPEXBLOK AND GO TO CHANNEL 00178000
  181. * CHECK'S SECTION OF RECORDER. IF CHANNEL CHECK QUE 00179000
  182. * IS EMPTY, GO CHECK NEXT RECORDING QUE. 00180000
  183. * 00181000
  184. * 11. OBR/MDR RECORDING QUE - IF THERE IS A OBR/MDR 00182000
  185. * REQUEST ON THE QUE, PUT THE NEXT REQUEST ON TOP OF 00183000
  186. * QUE, GET POINTERS TO NEXT ERRBLOK, RELEASE 00184000
  187. * THE CPEXBLOK AND GO TO OBR/MDR SECTION OF 00185000
  188. * RECORDER. IF OBR/MDR QUE IS EMPTY, GO CHECK NEXT 00186000
  189. * RECORDING QUE. 00187000
  190. * 00188000
  191. * 12. ENVIRONMENTAL RECORDING QUE - IF THERE AN MDR REQUEST 00189000
  192. * ON THE QUE, PUT THE NEXT REQUEST ON TOP OF QUE 00190000
  193. * AND CALL DMKSTKCP TO STACK CPEXBLOK TO RETURN TO 00191000
  194. * DMKIOESD. AFTERWARD, EXIT FROM THE RECORDER. 00192000
  195. * 00193000
  196. * 13. SVC 76 RECORDING QUE - IF THERE IS AN SVC 76 00194000
  197. * REQUEST ON THE QUE, PUT THE NEXT REQUEST ON TOP OF 00195000
  198. * QUE, GET POINTERS TO THE NEXT RECORD, RELEASE 00196000
  199. * THE CPEXBLOK AND GO TO SVC 76 SECTION OF 00197000
  200. * RECORDER. IF THE SVC 76 QUE IS EMPTY, GO WRITE 00198000
  201. * RECORDING PAGE BACK TO THE RECORDING CYLINDER BY 00199000
  202. * CALLING DMKRPAPT (IF NECESSARY). AFTERWARD, 00200000
  203. * UNLOCK AND RELEASE RECORDING PAGE 00201000
  204. * AND VIRTUAL BUFFER PAGE. 00202000
  205. * 00203000
  206. * 14. STATISTICAL UPDATE QUE - IF THERE IS A UPDATE 00204000
  207. * REQUEST ON THE QUE, PUT THE NEXT REQUEST ON THE TOP 00205000
  208. * OF THE QUE, GET POINTERS TO NEXT ERRBLOK, RELEASE THE 00206000
  209. * THE CPEXBLOK AND GO TO THE STATISTICAL UPDATE SECTION 00207000
  210. * IF SDR QUEUE IS EMPTY GO CHECK 90% FULL CONDITION. 00208000
  211. * 00209000
  212. * 15. DETERMINE IF THE RECORDING CYLINDER IS 90% FULL. 00210000
  213. * IF 90 % FULL, WRITE AN ERROR MESSAGE TO THE 00211000
  214. * OPERATOR (DMKIOF552E/DMKIOF550E). 00212000
  215. * 00213000
  216. * 16. CLEAR THE MCH/CCH ENTRY FLAG AND THE RECORDING IN 00214000
  217. * PROGRESS FLAG AND RETURN TO CALLER. 00215000
  218. * 00216000
  219. * ERROR MESSAGES - 00217000
  220. * 00218000
  221. * DMKIOF550E ERROR RECORDING AREA 90 PERCENT FULL; RUN CPEREP 00219100
  222. * DMKIOF551E ERROR RECORDING AREA FULL; RUN CPEREP 00220100
  223. * 00221000
  224. **************************************************************** 00222000
  225. EJECT 00223000
  226. DMKIOFOB RELOC @VA03358 00224000
  227. IOFOB EQU * HANDLE OBR/MDR RECORDS @VA03358 00225000
  228. MVI MCCHFLAG,X'00' CLEAR MCH/CCH ENTRY FLAG @V5088AA 00225100
  229. BAL R5,CHEKFULL CHECK CYLINDER FULL CONDITION @VA03358 00226000
  230. BAL R5,OBRMDRBL GO BUILD OBR/MDR RECORD @VA03757 00227000
  231. LR R3,R0 SAVE SIZE OF OBR/MDR @VA03757 00228000
  232. LR R4,R1 SAVE ADDRESS OF OBR/MDR @VA03757 00229000
  233. BAL R5,REGSETUP GET READY TO FRET ERRBLOK @VA03757 00230000
  234. BAL R5,FRETRECD GO FRET ERRBLOK @VA03757 00231000
  235. LR R6,R4 ADDRESS OF OBR/MDR @VA03757 00232000
  236. LR R7,R3 GET SIZE IN DOUBLEWORDS @VA03757 00233000
  237. SLL R7,3 CONVERT DOUBLEWORDS TO BYTES @VA03757 00234000
  238. BAL R5,PAGEIN GET VIRT. BUFFER PAGE (IF NEEDED)@VA03358 00235000
  239. BAL R5,CKOBROOM CHECK FOR ENOUGH ROOM FOR RECORD @VA03358 00236000
  240. CLI 4(R6),X'91' IS THIS A MDR RECORD @VA03358 00237000
  241. BE SKIPCALL YES, BYPASS GETTING DEVICE TYPE @VA03757 00238000
  242. SPACE 00239000
  243. CALL DMKIOCVT @VA03757 00240000
  244. SPACE 00241000
  245. SKIPCALL EQU * GO MOVE OBR/MDR @VA03757 00242000
  246. BAL R5,SETUPOBR MOVE OBR/MDR REC. INTO VIRT. PAGE@VA03358 00243000
  247. EJECT 00244000
  248. ********************************************************************** 00245000
  249. * 00246000
  250. * SUBROUTINE NAME - 00247000
  251. * 00248000
  252. * DMKIOFVR 00249000
  253. * 00250000
  254. * FUNCTION - 00251000
  255. * 00252000
  256. * THIS SUBROUTINE RECORD OUTBOARD (OBR) AND MISCELLANEOUS DATA 00253000
  257. * (MDR) RECORDS ONTO THE ERROR RECORDING CYLINDERS 00254100
  258. * SVC 76 REQUESTS. 00255000
  259. * 00256000
  260. * ATTRIBUTES - 00257000
  261. * 00258000
  262. * SERIALLY REUSEABLE, PAGABLE, ENTERED VIA SVC 00259000
  263. * 00260000
  264. * ENTRY CONDITIONS - 00261000
  265. * 00262000
  266. * GR 6 = ADDRESS OF OBR/MDR RECORD 00263000
  267. * GR 7 = SIZE OF OBR/MDR RECORD IN DOUBLEWORDS 00264000
  268. * GR 8 = ADDRESS OF RDEVBLOK 00265000
  269. * GR 11 = ADDRESS OF VMBLOK 00266000
  270. * GR 12 = ADDRESS OF DMKIOFVR 00267000
  271. * GR 13 = ADDRESS OF SAVE AREA 00268000
  272. * 00269000
  273. * EXIT CONDITIONS - 00270000
  274. * 00271000
  275. * NONE 00272000
  276. * 00273000
  277. * CALL TO OTHER ROUTINES - 00274000
  278. * 00275000
  279. * DMKFRET - TO RETURN ALLOCATED STORAGE FOR RECORD/CPEXBLOK 00276000
  280. * DMKPGTVG - GET A VIRTUAL BUFFER PAGE 00277000
  281. * DMKQCNWT - WRITE A MESSAGE TO THE OPERATOR 00278000
  282. * DMKPGTVR - RELEASE A VIRTUAL BUFFER PAGE 00279000
  283. * DMKRPAGT - READ A PAGE FROM THE RECORDING CYLINDER 00280000
  284. * DMKRPAPT - WRITE PAGE RECORD TO RECORDING CYLINDER 00281000
  285. * DMKPTRUL - UNLOCK RECORDING PAGE 00282000
  286. * DMKPTRAN - LOCK RECORDING PAGE IN STORAGE 00283000
  287. * DMKSTKCP - STACK CPEXBLOK TO GET NEXT REQUEST 00284000
  288. * 00285000
  289. * EXTERNAL REFERENCES - 00286000
  290. * 00287000
  291. * DMKIOERP - RECORDING IN PROGRESS FLAG 00288000
  292. * DMKIOEMX - NO. OF PAGES (MAX) ON A CYLINDER 00289000
  293. * DMKIOENI - NO. OF PAGES ON LAST CYL WHICH CORRESPONDS 00290100
  294. * TO RECORDING AREA 90% FULL 00290200
  295. * DMKIOEIQ - RECORDING QUE CHAIN FOR OBR/MDR RECORDS 00291000
  296. * DMKIOEES - ERROR RECORDING CYLINDERS FULL FLAG 00292100
  297. * DMKIOERQ - RECORDING QUE CHAIN FOR ERASE REQUEST 00293000
  298. * DMKIOEMQ - RECORDING QUE CHAIN FOR MCH RECORDS 00294000
  299. * DMKIOECQ - RECORDING QUE CHAIN FOR CCH RECORDS 00295000
  300. * DMKIOENQ - RECORDING QUE CHAIN FOR MDR SYNCHRONOUS RECORDS 00296000
  301. * DMKIOEVQ - RECORDING QUE CHAIN FOR SVC 76 REQUESTS 00297000
  302. * 00298000
  303. * TABLES /WORK AREAS - 00299000
  304. * 00300000
  305. * NONE 00301000
  306. * 00302000
  307. * NOTES - 00303000
  308. * 00304000
  309. * NONE 00305000
  310. * 00306000
  311. * REGISTER USAGE - 00307000
  312. * 00308000
  313. * GR14,15 LINKAGE REGISTERS 00309000
  314. * GR12 = MODULE BASE REGISTER 00310000
  315. * GR11 = VMBLOK ADDRESSABILITY 00311000
  316. * GR 9 = WORK REGISTER 00312000
  317. * GR 8 = RDEVBLOK ADDRESSABILITY 00313000
  318. * GR 7 = SIZE OF THE RECORD IN DOUBLEWORDS 00314000
  319. * GR 6 = ADDRESS OF THE RECORD 00315000
  320. * GR 5 = SUBROUTINE BAL REGISTER 00316000
  321. * GR0-4= WORK REGISTERS 00317000
  322. * 00318000
  323. * OPERATION - 00319000
  324. * 00320000
  325. * I. HANDLE RECORDING FOR SVC 76 REQUEST RECORDS 00321000
  326. * 00322000
  327. * 1. THE OPERATION SECTION FOR SVC76 REQUEST IS THE 00323000
  328. * SAME AS THE OPERATIONS THAT ARE DESCRIBED 00324000
  329. * UNDER DMKIOFOB OPERATIONS SECTION. 00325000
  330. * 00328000
  331. * ERROR MESSAGES - 00329000
  332. * 00330000
  333. * DMKIOF550E ERROR RECORDING AREA 90 PERCENT FULL; RUN CPEREP 00331100
  334. * DMKIOF551E ERROR RECORDING AREA FULL; RUN CPEREP 00332100
  335. * 00333000
  336. **************************************************************** 00334000
  337. EJECT 00335000
  338. DMKIOFVR RELOC @VA03358 00336000
  339. IOFVR EQU * HANDLE SVC 76 REQUESTS @VA03358 00337000
  340. MVI MCCHFLAG,X'00' CLEAR MCH/CCH ENTRY FLAG @V5088AA 00337100
  341. BAL R5,CHEKFULL CHECK CYLINDER FULL CONDITION @VA03358 00338000
  342. BAL R5,PAGEIN GET VIRT. BUFFER PAGE (IF NEEDED)@VA03358 00339000
  343. BAL R5,CKOBROOM CHECK FOR ENOUGH ROOM FOR RECORD @VA03358 00340000
  344. CLI 4(R6),X'30' IS THIS AN OBR RECORD? @VA07413 00340110
  345. BNE SETUPOBR NO, DO NOT CALL DMKIOCVT @VA07413 00340160
  346. * CURRENTLY DMKIOCVT CAN ONLY HANDLE OBR-TYPE RECORDS 00340210
  347. CALL DMKIOCVT @VA06287 00340300
  348. SETUPOBR EQU * HANDLE OBR/MDR RECORDS @VA03358 00341000
  349. BAL R3,MOVEREC MOVE OBR/MDR REC. INTO VIRT. PAGE@VA03358 00342000
  350. BAL R5,SVC76FTN DETERMINE IF SVC 76 IS REQUIRED @VA03358 00343000
  351. * IF YES BYPASS UPDATING CONTROL HEADER 00344000
  352. BAL R5,UPDTHDR UPDATE CONTROL HEADER IN PAGE @VA03358 00345000
  353. MVC CECYL(3),WORKCYL SAVE THE UPDATED CCP @V5088AA 00346100
  354. BAL R5,FRETRECD RELEASE OBR/MDR RECORD @VA03358 00347000
  355. BAL R5,RECDQUE GET NEXT REC. FROM RECORDING QUE @VA03358 00348000
  356. EJECT 00349000
  357. ********************************************************************** 00350000
  358. * 00351000
  359. * SUBROUTINE NAME - 00352000
  360. * 00353000
  361. * DMKIOFM1 00354000
  362. * 00355000
  363. * FUNCTION - 00356000
  364. * 00357000
  365. * THIS SUBROUTINE RECORD MACHINE CHECK (MCH) RECORDS ONTO THE 00358000
  366. * ERROR RECORDING CYLINDERS 00359100
  367. * 00360000
  368. * ATTRIBUTES - 00361000
  369. * 00362000
  370. * SERIALLY REUSEABLE, PAGABLE, ENTERED VIA SVC 00363000
  371. * 00364000
  372. * ENTRY CONDITIONS - 00365000
  373. * 00366000
  374. * GR 6 = ADDRESS OF MCH RECORD 00367000
  375. * GR 7 = SIZE OF OMCH RECORD IN DOUBLEWORDS 00368000
  376. * GR 11 = ADDRESS OF VMBLOK 00369000
  377. * GR 12 = ADDRESS OF DMKIOFM1 00370000
  378. * GR 13 = ADDRESS OF SAVE AREA 00371000
  379. * 00372000
  380. * EXIT CONDITIONS - 00373000
  381. * 00374000
  382. * NONE 00375000
  383. * 00376000
  384. * CALL TO OTHER ROUTINES - 00377000
  385. * 00378000
  386. * DMKPGTVG - GET A VIRTUAL BUFFER PAGE 00379000
  387. * DMKQCNWT - WRITE A MESSAGE TO THE OPERATOR 00380000
  388. * DMKPGTVR - RELEASE A VIRTUAL BUFFER PAGE 00381000
  389. * DMKRPAGT - READ A PAGE FROM THE RECORDING CYLINDER 00382000
  390. * DMKRPAPT - WRITE PAGE RECORD TO RECORDING CYLINDER 00383000
  391. * DMKPTRUL - UNLOCK RECORDING PAGE 00384000
  392. * DMKPTRAN - LOCK RECORDING PAGE IN STORAGE 00385000
  393. * DMKSTKCP - STACK CPEXBLOK TO GET NEXT REQUEST 00386000
  394. * DMKERMSG - WRITE ERROR MESSAGES 00387000
  395. * 00388000
  396. * EXTERNAL REFERENCES - 00389000
  397. * 00390000
  398. * DMKIOERP - RECORDING IN PROGRESS FLAG 00391000
  399. * DMKIOEMX - NO. OF PAGES (MAX) ON A CYLINDER 00392000
  400. * DMKIOENI - NO. OF PAGES ON LAST CYL WHICH CORRESPONDS 00393100
  401. * TO RECORDING AREA 90% FULL 00393200
  402. * DMKIOEIQ - RECORDING QUE CHAIN FOR OBR/MDR RECORDS 00394000
  403. * DMKIOEES - ERROR RECORDING CYLINDERS FULL FLAG 00395100
  404. * DMKIOERQ - RECORDING QUE CHAIN FOR ERASE REQUEST 00396000
  405. * DMKIOEMQ - RECORDING QUE CHAIN FOR MCH RECORDS 00397000
  406. * DMKIOECQ - RECORDING QUE CHAIN FOR CCH RECORDS 00398000
  407. * DMKIOENQ - RECORDING QUE CHAIN FOR MDR SYNCHRONOUS RECORDS 00399000
  408. * DMKIOEVQ - RECORDING QUE CHAIN FOR SVC 76 REQUESTS 00400000
  409. * 00401000
  410. * TABLES /WORK AREAS - 00402000
  411. * 00403000
  412. * NONE 00404000
  413. * 00405000
  414. * NOTES - 00406000
  415. * 00407000
  416. * NONE 00408000
  417. * 00409000
  418. * REGISTER USAGE - 00410000
  419. * 00411000
  420. * GR14,15 LINKAGE REGISTERS 00412000
  421. * GR12 = MODULE BASE REGISTER 00413000
  422. * GR11 = VMBLOK ADDRESSABILITY 00414000
  423. * GR 9 = WORK REGISTER 00415000
  424. * GR 7 = SIZE OF THE RECORD IN DOUBLEWORDS 00416000
  425. * GR 6 = ADDRESS OF THE RECORD 00417000
  426. * GR 5 = SUBROUTINE BAL REGISTER 00418000
  427. * GR0-4= WORK REGISTERS 00419000
  428. * 00420000
  429. * OPERATION - 00421000
  430. * 00422000
  431. * I. HANDLE RECORDING FOR MCH/CCH RECORDS 00423000
  432. * 00424000
  433. * 1. IF THE RECORDING CYLINDER IS FULL, RELEASE THE 00425000
  434. * CCH RECORD AND SEND THE FULL CYLINDER ERROR 00426000
  435. * MESSAGE (DMKIOF553E/DMKIOF551E) TO THE OPERATOR IF 00427000
  436. * ONE HAS NOT BEEN SENT BEFORE. AFTERWARD, GO CHECK 00428000
  437. * RECORDING QUES FOR OTHER REQUESTS. 00429000
  438. * 00430000
  439. * 2. IF THERE IS ALREADY A RECORDING PAGE IN STORAGE, 00431000
  440. * BYPASS GETTING A VIRTUAL BUFFER PAGE AND RECORDING 00432000
  441. * PAGE. IF RECORDING PAGE IS NOT IN STORAGE, CALL 00433000
  442. * DMKPGTVG TO OBTAIN A VIRTUAL BUFFER PAGE, CALL 00434000
  443. * DMKRPAGT TO READ A PAGE FROM THE RECORDING CYLINDER 00435000
  444. * INTO STORAGE AND CALL DMKPTRAN TO LOCK RECORDING PAGE 00436000
  445. * IN STORAGE. 00437000
  446. * 00438000
  447. * 3. DETERMINE IF ENOUGH SPACE IS AVAILABLE ON THE 00439000
  448. * RECORDING PAGE FOR THE RECORD. IF NOT, GET ANOTHER 00440000
  449. * PAGE FROM RECORDING CYLINDER AND TRY AGAIN. 00441000
  450. * 00442000
  451. * 4. MOVE THE MCH/CCH RECORD INTO AVAILABLE AREA 00443000
  452. * IN THE RECORDING PAGE. 00444000
  453. * 00445000
  454. * 5. MOVE PAGE NUMBER INTO THE MCH/CCH PAGE FIELD AND 00446000
  455. * RELEASE THE CCH RECORD. 00447000
  456. * 00448000
  457. * 6. WRITE RECORDING PAGE BACK TO THE RECORDING CYLINDER 00449000
  458. * BY CALLING DMKRPAPT. AFTERWARD, UNLOCK AND RELEASE 00450000
  459. * RECORDING PAGE AND VIRTUAL BUFFER PAGE. 00451000
  460. * 00452000
  461. * 7. ERASE QUE - IF AN ERASE REQUEST IS ON THE QUE, 00453000
  462. * WRITE OUT LAST RECORDING PAGE TO RECORDING CYLINDER 00454000
  463. * (IF NECESSARY), PUT NEXT REQUEST ON TOP OF QUE AND 00455000
  464. * CALL DMKSTKCP TO STACK A CPEXBLOK TO RETURN TO 00456000
  465. * DMKIOEFM. AFTERWARD, EXIT FROM RECORDER. IF ERASE QUE 00457000
  466. * IS EMPTY, GO CHECK NEXT RECORDING QUE. 00458000
  467. * 00459000
  468. * 8. MACHINE CHECK RECORDING QUE - IF THERE IS A MACHINE 00460000
  469. * CHECK REQUEST ON THE QUE, WRITE OUT LAST RECORDING 00461000
  470. * PAGE (IF NECESSARY), PUT NEXT REQUEST ON TOP OF QUE 00462000
  471. * AND CALL DMKSTKCP TO STACK A CPEXBLOK TO RETURN 00463000
  472. * TO DMKIOEMC. AFTERWARD, EXIT FROM RECORDER. 00464000
  473. * IF MACHINE CHECK QUE IS EMPTY, GO CHECK NEXT 00465000
  474. * RECORDING QUE. 00466000
  475. * 00467000
  476. * 9. CHANNEL CHECK RECORDING QUE - IF THERE IS A CHANNEL 00468000
  477. * CHECK REQUEST ON THE QUE, WRITE OUT LAST RECORDING 00469000
  478. * PAGE TO RECORDING CYLINDER (IF NECESSARY), PUT 00470000
  479. * NEXT REQUEST ON TOP OF QUE, GET POINTERS FOR THE 00471000
  480. * NEXT RECORD, RELEASE THE CPEXBLOK AND GO TO CHANNEL 00472000
  481. * CHECK'S SECTION OF RECORDER. IF CHANNEL CHECK QUE 00473000
  482. * IS EMPTY, GO CHECK NEXT RECORDING QUE. 00474000
  483. * 00475000
  484. * 10. OBR/MDR RECORDING QUE - IF THERE IS A OBR/MDR 00476000
  485. * REQUEST ON THE QUE, PUT THE NEXT REQUEST ON TOP OF 00477000
  486. * QUE, GET POINTERS TO NEXT OBR/MDR RECORD, RELEASE 00478000
  487. * THE CPEXBLOK AND GO TO OBR/MDR SECTION OF 00479000
  488. * RECORDER. IF OBR/MDR QUE IS EMPTY, GO CHECK NEXT 00480000
  489. * RECORDING QUE. 00481000
  490. * 00482000
  491. * 11. ENVIRONMENTAL RECORDING QUE - IF THERE AN MDR REQUEST 00483000
  492. * ON THE QUE, PUT THE NEXT REQUEST ON TOP OF QUE 00484000
  493. * AND CALL DMKSTKCP TO STACK CPEXBLOK TO RETURN TO 00485000
  494. * DMKIOESD. AFTERWARD, EXIT FROM THE RECORDER. 00486000
  495. * 00487000
  496. * 12. SVC 76 RECORDING QUE - IF THERE IS AN SVC 76 00488000
  497. * REQUEST ON THE QUE, PUT THE NEXT REQUEST ON TOP OF 00489000
  498. * QUE, GET POINTERS TO THE NEXT RECORD, RELEASE 00490000
  499. * THE CPEXBLOK AND GO TO SVC 76 SECTION OF 00491000
  500. * RECORDER. IF THE SVC 76 QUE IS EMPTY, GO WRITE 00492000
  501. * RECORDING PAGE BACK TO THE RECORDING CYLINDER BY 00493000
  502. * CALLING DMKRPAPT (IF NECESSARY). AFTERWARD, 00494000
  503. * UNLOCK AND RELEASE RECORDING PAGE 00495000
  504. * AND VIRTUAL BUFFER PAGE. 00496000
  505. * 00497000
  506. * 13. DETERMINE IF THE RECORDING CYLINDER IS 90 % FULL. 00498000
  507. * IF 90 % FULL, WRITE AN ERROR MESSAGE TO THE 00499000
  508. * OPERATOR (DMKIOF552E/DMKIOF550E). 00500000
  509. * 00501000
  510. * 14. CLEAR THE MCH/CCH ENTRY FLAG AND THE RECORDING IN 00502000
  511. * PROGRESS FLAG AND RETURN TO CALLER. 00503000
  512. * 00504000
  513. * ERROR MESSAGES - 00505000
  514. * 00506000
  515. * DMKIOF550E ERROR RECORDING AREA 90 PERCENT FULL; RUN CPEREP 00507100
  516. * DMKIOF551E ERROR RECORDING AREA FULL; RUN CPEREP 00508100
  517. * 00509000
  518. **************************************************************** 00510000
  519. EJECT 00511000
  520. DMKIOFM1 RELOC @VA03358 00512000
  521. MVI MCCHFLAG,MCHFLAG SET MCH ENTRY INDICATOR @VA03358 00513000
  522. BAL R5,SETUPMCH MOVE MCH/CCH REC. INTO VIRT. PAGE@VA03358 00514000
  523. EJECT 00515000
  524. ********************************************************************** 00516000
  525. * 00517000
  526. * SUBROUTINE NAME - 00518000
  527. * 00519000
  528. * DMKIOFC1 00520000
  529. * 00521000
  530. * FUNCTION - 00522000
  531. * 00523000
  532. * THIS SUBROUTINE RECORD CHANNEL CHECK (CCH) RECORDS ONTO THE 00524000
  533. * ERROR RECORDING CYLINDERS 00525100
  534. * 00526000
  535. * ATTRIBUTES - 00527000
  536. * 00528000
  537. * SERIALLY REUSEABLE, PAGABLE, ENTERED VIA SVC 00529000
  538. * 00530000
  539. * ENTRY CONDITIONS - 00531000
  540. * 00532000
  541. * GR 6 = ADDRESS OF CCH RECORD 00533000
  542. * GR 7 = SIZE OF CCH RECORD IN DOUBLEWORDS 00534000
  543. * GR 11 = ADDRESS OF VMBLOK 00535000
  544. * GR 12 = ADDRESS OF DMKIOFC1 00536000
  545. * GR 13 = ADDRESS OF SAVE AREA 00537000
  546. * 00538000
  547. * EXIT CONDITIONS - 00539000
  548. * 00540000
  549. * NONE 00541000
  550. * 00542000
  551. * CALL TO OTHER ROUTINES - 00543000
  552. * 00544000
  553. * DMKFRET - TO RETURN ALLOCATED STORAGE FOR RECORD/CPEXBLOK 00545000
  554. * DMKPGTVG - GET A VIRTUAL BUFFER PAGE 00546000
  555. * DMKQCNWT - WRITE A MESSAGE TO THE OPERATOR 00547000
  556. * DMKPGTVR - RELEASE A VIRTUAL BUFFER PAGE 00548000
  557. * DMKRPAGT - READ A PAGE FROM THE RECORDING CYLINDER 00549000
  558. * DMKRPAPT - WRITE PAGE RECORD TO RECORDING CYLINDER 00550000
  559. * DMKPTRUL - UNLOCK RECORDING PAGE 00551000
  560. * DMKPTRAN - LOCK RECORDING PAGE IN STORAGE 00552000
  561. * DMKSTKCP - STACK CPEXBLOK TO GET NEXT REQUEST 00553000
  562. * DMKERMSG - WRITE ERROR MESSAGES 00554000
  563. * 00555000
  564. * EXTERNAL REFERENCES - 00556000
  565. * 00557000
  566. * DMKIOERP - RECORDING IN PROGRESS FLAG 00558000
  567. * DMKIOEMX - NO. OF PAGES (MAX) ON A CYLINDER 00559000
  568. * DMKIOENI - NO. OF PAGES ON LAST CYL WHICH CORRESPONDS 00560100
  569. * TO RECORDING AREA 90% FULL 00560200
  570. * DMKIOEIQ - RECORDING QUE CHAIN FOR OBR/MDR RECORDS 00561000
  571. * DMKIOEES - ERROR RECORDING CYLINDERS FULL FLAG 00562100
  572. * DMKIOERQ - RECORDING QUE CHAIN FOR ERASE REQUEST 00563000
  573. * DMKIOEMQ - RECORDING QUE CHAIN FOR MCH RECORDS 00564000
  574. * DMKIOECQ - RECORDING QUE CHAIN FOR CCH RECORDS 00565000
  575. * DMKIOENQ - RECORDING QUE CHAIN FOR MDR SYNCHRONOUS RECORDS 00566000
  576. * DMKIOEVQ - RECORDING QUE CHAIN FOR SVC 76 REQUESTS 00567000
  577. * 00568000
  578. * TABLES /WORK AREAS - 00569000
  579. * 00570000
  580. * NONE 00571000
  581. * 00572000
  582. * NOTES - 00573000
  583. * 00574000
  584. * NONE 00575000
  585. * 00576000
  586. * REGISTER USAGE - 00577000
  587. * 00578000
  588. * GR14,15 LINKAGE REGISTERS 00579000
  589. * GR12 = MODULE BASE REGISTER 00580000
  590. * GR11 = VMBLOK ADDRESSABILITY 00581000
  591. * GR 9 = WORK REGISTER 00582000
  592. * GR 7 = SIZE OF THE RECORD IN DOUBLEWORDS 00583000
  593. * GR 6 = ADDRESS OF THE RECORD 00584000
  594. * GR 5 = SUBROUTINE BAL REGISTER 00585000
  595. * GR0-4= WORK REGISTERS 00586000
  596. * 00587000
  597. * OPERATION - 00588000
  598. * 00589000
  599. * I. HANDLE RECORDING FOR CCH RECORDS 00590000
  600. * 00591000
  601. * 1. THE OPERATION SECTION FOR CHANNEL CHECK RECORDING IS 00592000
  602. * THE SAME AS THE OPERATIONS DESCRIBE UNDER DMKIOFM1 00593000
  603. * OPERATION'S SECTION. 00594000
  604. * 00595000
  605. * ERROR MESSAGES - 00596000
  606. * 00597000
  607. * DMKIOF550E ERROR RECORDING AREA 90 PERCENT FULL; RUN CPEREP 00598100
  608. * DMKIOF551E ERROR RECORDING AREA FULL; RUN CPEREP 00599100
  609. * 00600000
  610. **************************************************************** 00601000
  611. EJECT 00602000
  612. DMKIOFC1 RELOC @VA03358 00603000
  613. IOFC1 EQU * HANDLE CHANNEL CHECK RECORDS @VA03358 00604000
  614. MVI MCCHFLAG,CCHFLAG SET CCH ENTRY INDICATOR @VA03358 00605000
  615. SETUPMCH EQU * HANDLE MCH/CCH RECORD @VA03358 00606000
  616. BAL R5,CHEKFULL CHECK FOR RECORDING AREA FULL @V5088AA 00607100
  617. BAL R5,PAGEIN GET VIRT. BUFFER PAGE (IF NEEDED)@VA03358 00608000
  618. BAL R5,CKOBROOM CHECK FOR ENOUGH ROOM FOR RECORD @VA03358 00609000
  619. BAL R3,MOVEREC MOVE MCH/CCH REC. INTO VIRT. PAGE@VA03358 00610000
  620. BAL R5,UPDTHDR UPDATE CONTROL HEADER IN PAGE @VA03358 00611000
  621. CLI MCCHFLAG,CCHFLAG IS THIS A CCH ENTRY @VA03358 00612000
  622. BNE *+8 NO, BYPASS RELEASING THE RECORD @VA03358 00613000
  623. BAL R5,FRETRECD RELEASE CCH RECORD SPACE @VA03358 00614000
  624. MVC CECYL(3),WORKCYL SET RECORDING CCP VALUE @V5088AA 00615100
  625. BAL R9,REALWRT WRITE VIRTUAL PAGE BACK TO DISK @VA03358 00616000
  626. BAL R3,PAGREL UNLOCK AND RELEASE VIRTUAL PAGE @VA03358 00617000
  627. SPACE 3 00618000
  628. * 00619000
  629. * CHECK THE RECORDING QUES FOR ANY OUTSTANDING REQUESTS FROM 00620000
  630. * MCH / CCH / OBR / MDR / ERASE REQUEST OR SVC 76 REQUEST. 00621000
  631. * 00622000
  632. SPACE 1 00623000
  633. RECDQUE EQU * CHECK RECORDING QUES @VA03358 00624000
  634. BAL R5,WRITPAG WRITE RECORD PAGE BACK TO DISK @VA05146 00624100
  635. BAL R5,ERASEQ CHECK THE ERASE REQUEST QUE @VA03358 00625000
  636. BAL R5,MCHQ CHECK MACHINE CHECK RECORDING QUE@VA03358 00626000
  637. BAL R5,CCHQ CHECK CHANNEL CHECK RECORDING QUE@VA03358 00627000
  638. BAL R5,OBRQ CHECK THE OUTBOARD RECORDING QUE @VA03358 00628000
  639. BAL R5,ENVQ CHECK ENVIRONMENTAL RECORDING QUE@VA03358 00629000
  640. BAL R5,SVC76Q CHECK THE SVC 76 RECORDING QUE @VA03358 00630000
  641. BAL R5,STATQ CHECK COUNTER UPDATE QUEUE @VA03757 00632000
  642. CLC WORKCYL(3),AREA90PC IS RECORDING AREA 90% FULL? @V5088AA 00633100
  643. BNE *+8 NO, BYPASS SENDING MSG. TO OPER. @VA03358 00634000
  644. BAL R4,MSG90PC CHECK CYLINDER FOR 90 % FULL @VA03358 00635000
  645. RESETERP EQU * @VA04803 00636100
  646. MVI MCCHFLAG,X'00' RESET MCH/CCH ENTRY FLAG @VA04803 00636200
  647. L R5,=V(DMKIOERP) ADDR OF REC. IN PROGRESS FLAG @VA04803 00636300
  648. MVI 0(R5),X'00' CLEAR RECORDING IN PROGRESS FLAG @VA04803 00636400
  649. RETEXIT EQU * EXIT TO CALLER @VA04803 00636500
  650. EXIT @VA04803 00636600
  651. EJECT 00637000
  652. ********************************************************************** 00638000
  653. * 00639000
  654. * SUBROUTINE NAME - 00640000
  655. * 00641000
  656. * DMKIOFIN 00642000
  657. * 00643000
  658. * FUNCTION - 00644000
  659. * 00645000
  660. * THIS SUBROUTINE INITIALIZE POINTERS TO AVAILABLE RECORDING 00646000
  661. * PAGES AT IPL TIME AND AFTER AN ERASE HAS BEEN COMPLETED. 00647000
  662. * 00648000
  663. * ATTRIBUTES - 00649000
  664. * 00650000
  665. * SERIALLY REUSEABLE, PAGABLE, ENTERED VIA SVC 00651000
  666. * 00652000
  667. * ENTRY CONDITIONS - 00653000
  668. * 00654000
  669. * GR 12 = ADDRESS OF DMKIOFOB 00655000
  670. * GR 13 = ADDRESS OF SAVE AREA 00656000
  671. * 00657000
  672. * EXIT CONDITIONS - 00658000
  673. * 00659000
  674. * NONE 00660000
  675. * 00661000
  676. * CALL TO OTHER ROUTINES - 00662000
  677. * 00663000
  678. * NONE 00664000
  679. * 00665000
  680. * EXTERNAL REFERENCES - 00666000
  681. * 00667000
  682. * DMKIOERP - RECORDING IN PROGRESS FLAG 00668000
  683. * DMKIOEMX - NO. OF PAGES (MAX) ON A CYLINDER 00669000
  684. * DMKIOENI - NO. OF PAGES ON LAST CYL. WHICH CORRESPONDS 00670100
  685. * TO RECORDING AREA 90% FULL 00670200
  686. * DMKIOEEP - ERROR RECORDING CCP (CYL + PAGE) 00671100
  687. * DMKIOERP - RECORDING IN PROGRESS FLAG 00673000
  688. * 00674000
  689. * TABLES /WORK AREAS - 00675000
  690. * 00676000
  691. * NONE 00677000
  692. * 00678000
  693. * NOTES - 00679000
  694. * 00680000
  695. * NONE 00681000
  696. * 00682000
  697. * REGISTER USAGE - 00683000
  698. * 00684000
  699. * GR14,15 LINKAGE REGISTERS 00685000
  700. * GR12 = MODULE BASE REGISTER 00686000
  701. * GR0-5= WORK REGISTERS 00687000
  702. * 00688000
  703. * OPERATION - 00689000
  704. * 00690000
  705. * I. HANDLE INITIALIZING INCORE POINTERS IN RECORDER 00691000
  706. * 00692000
  707. * 1. PICK UP THE ERROR RECORDING CYLINDER THAT WAS 00693000
  708. * SPECIFIED AT SYSTEM GENERATION TIME AND THE DEVICE 00694000
  709. * CODE TYPE FOR THE ERROR RECORDING DEVICE FROM 00695000
  710. * DMKIOEEP. 00696100
  711. * 00697000
  712. * 2. PICK UP THE NUMBER OF CYLINDERS FROM DMKIOECT 00698100
  713. * AND CALCULATE THE ENDING CYLINDER ADDRESS. 00699100
  714. * 00700000
  715. * 3. PICK UP MAXIMUN PAGE NUMBER FOR RECORDING CYLINDER 00701000
  716. * FROM DMKIOEMX. 00702000
  717. * 00703000
  718. * 4. PICK UP PAGE VALUE FOR 90% AREA FULL 00704100
  719. * FROM DMKIOENI. 00705000
  720. * 00706000
  721. * 5. INITIALIZE ALL CONSTANTS IN RECORDER. 00707000
  722. * 00708000
  723. * 6. RETURN TO CALLER. 00709000
  724. * 00710000
  725. **************************************************************** 00711000
  726. EJECT 00712000
  727. DMKIOFIN RELOC @VA03358 00713000
  728. L R5,=V(DMKIOEEP) GET @ OF RECORDING AREA CCPD @V5088AA 00714100
  729. MVC CECYL(4),0(R5) MOVE CCPD VALUE IN OBR/MDR FIELD @VA03358 00715000
  730. IC R5,CECYLTYP GET PAGING DEVICE CODE TYPE @VA03358 00716000
  731. STC R5,WORKTYP SAVE DEV. CODE TYPE IN WORK AREA @VA03358 00717000
  732. L R5,=V(DMKIOECT) GET @ OF COUNT OF RECORDING CYLS@V5088AA 00717100
  733. LH R5,0(R5) RETRIEVE NUMBER OF RECORDING CYLS@V5088AA 00717200
  734. L R3,=V(DMKSYSER) GET ADDRESS OF REC. AREA START @V5088AA 00717300
  735. LH R3,0(R3) RETRIEVE REC. AREA STARTING CYL. @V5088AA 00717400
  736. AR R5,R3 ADD STARTING CYLINDER + NO. CYLS @V5088AA 00718100
  737. BCTR R5,0 SUBTRACT ONE FOR END ADDRESS @V5088AA 00719100
  738. STH R5,LASTCYL SAVE ADDRESS OF LAST CYLINDER @V5088AA 00720100
  739. L R5,=V(DMKIOEMX) ADDR. OF MAX. NO. OF PAGES-CYL @VA03358 00721000
  740. MVC MAXPAGE(1),0(R5) SAVE MAX. NO. OF PAGES/CYL @VA03358 00722000
  741. L R5,=V(DMKIOENI) GET NUMBER OF PAGES/CYLINDER @VA03358 00723000
  742. MVC PAG90PC(1),0(R5) THAT REPRESENTS 90 % OF MAX. @VA03358 00724000
  743. MVI FLAG90PC,X'00' RESET FLAGS FOR MCH/CCH & OBR/MDR@VA03358 00725000
  744. BAL R5,RECDQUE GET NEXT RECORD FROM RECORDING @VA04803 00731500
  745. * QUEUE 00731600
  746. EJECT 00732000
  747. ****************************************************************** 00733000
  748. * 00734000
  749. * SUBROUTINE NAME 00735000
  750. * 00736000
  751. * DMKIOFST 00737000
  752. * 00738000
  753. * FUNCTION 00739000
  754. * 00740000
  755. * GET STORAGE FOR SDRBLOK, UPDATE STATISTICAL COUNTERS 00741000
  756. * IN THE SDRBLOK 00742000
  757. * 00743000
  758. * ATTRIBUTES 00744000
  759. * 00745000
  760. * SERIALLY REUSABLE, PAGABLE, ENTERED VIA SVC 00746000
  761. * 00747000
  762. * ENTRY CONDITIONS 00748000
  763. * 00749000
  764. * GR 6 = ADDRESS OF ERRBLOK 00750000
  765. * GR 7 = SIZE OF ERRBLOK 00751000
  766. * GR 8 = ADDRESS OF RDEVBLOK 00752000
  767. * GR 13 = ADDRESS OF SAVE AREA 00753000
  768. * 00754000
  769. * EXIT CONDITIONS 00755000
  770. * 00756000
  771. * NONE 00757000
  772. * 00758000
  773. * EXTERNAL REFERENCES 00759000
  774. * 00760000
  775. * DMKIOERP - RECORDING IN PROGRESS FLAG 00761000
  776. * DMKIOESQ - RECORDING QUEUE FOR UPDATE REQUESTS 00762000
  777. * 00763000
  778. * CALLS TO OTHER ROUTINES 00764000
  779. * 00765000
  780. * DMKFREE - TO ALLOCATE FREE STORAGE FOR SDRBLOK 00766000
  781. * 00767000
  782. * NOTES 00768000
  783. * 00769000
  784. * THIS ROUTINE GETS CONTROL FOR THE PURPOSE OF UPDATING 00770000
  785. * THE SDR COUNTERS. THE FOLLOWING MODULES ARE RESPONSIBILE 00771000
  786. * FOR THE CALL TO THIS ROUTINE.. 00772000
  787. * 00773000
  788. * DMKBSC 00774000
  789. * DMKCNS 00775000
  790. * DMKDAS 00776000
  791. * DMKGRF 00777000
  792. * DMKTAP 00778000
  793. * DMKRSE 00779000
  794. * 00780000
  795. * TABLES/WORK AREAS 00781000
  796. * 00782000
  797. * ERRBLOK - CONTAIN INFORMATION NEEDED TO UPDATE COUNTERS 00783000
  798. * SDRCTRS - KEEP COUNT OF SPECIFIC ERRORS 00784000
  799. * BITABL - THE MASK TABLE 00785000
  800. * 00786000
  801. * OPERATION 00787000
  802. * 00788000
  803. * 00789000
  804. * 00790000
  805. * 00791000
  806. * 00792000
  807. * 00793000
  808. * 00794000
  809. ********************************************************************** 00795000
  810. EJECT 00796000
  811. DMKIOFST RELOC HANDLE @VA03757 00797000
  812. USING IOERBLOK,R4 ADDRESSIBILITY FOR IOERBLOK @VA03757 00798000
  813. USING SDRBLOK,R9 ADDRESSABILITY FOR SDRBLOK @VA03757 00799000
  814. USING ERRBLOK,R10 ADDRESSABILITY FOR ERRBLOK @VA03757 00800000
  815. USING VMBLOK,R11 ADDRESSIBILITY FOR VMBLOK @VA03757 00801000
  816. IOFST EQU * DO COUNTER UPDATE FUNCTION @VA03757 00802000
  817. LR R10,R6 GET ADDRESS OF PASSED BLOCK @VA03757 00803000
  818. LA R10,4(0,R10) POINT TO REAL ERRBLOK @VA03757 00804000
  819. LA R4,ERRIOER GET ADDRESS OF IOERBLOK @VA03757 00805000
  820. LA R8,0(,R8) BE SURE OF HI-ORDER BYTE @VA03757 00806000
  821. ICM R9,15,RDEVCTRS GET ADDRESS OF SDRBLOK @VA03757 00807000
  822. BZ GETSDRBK BRANCH IF WE DON'T HAVE ONE @VA03757 00808000
  823. C R8,SDRRDEV DOES THE SDRBLOK POINT BACK TO @VA03757 00809000
  824. * THE RDEVBLOK ??? IT BETTER 00810000
  825. BE CKPARM IT DOES @VA03757 00811000
  826. ENTRYERR BAL R5,ERREXIT EXIT FROM MODULE @VA03757 00812000
  827. CKPARM LA R6,ERRPARM GET ADDRESS OF PARAMETER STRING @VA03757 00813000
  828. CLI 0(R6),ZERO WAS A PARM STRING PASSED ?? @VA03757 00814000
  829. BE SDRDASD NO, SO GO GET ONE @VA03757 00815000
  830. SPACE 00816000
  831. SETUPSDR EQU * @VA03757 00817000
  832. LA R5,IOERDATA GET ADDRESS OF SENSE INFO @VA03757 00818000
  833. LA R7,SDRCTRS GET ADDRESS OF COUNTERS @VA03757 00819000
  834. USING IOERDATA,R5 ADDRESSABILITY FOR SENSE INFO @VA03757 00820000
  835. USING PARMLST,R6 ADDRESSABILITY FOR PARAMETER LIST@VA03757 00821000
  836. USING SDRCTRS,R7 ADDRESSABILITY FOR COUNTERS @VA03757 00822000
  837. NI ERRSDR,X'FF'-(SDRMAX+SDRSHRT+SDRRECD) RESET FLG @VA03757 00823000
  838. MVI SDRPRMCT,ZERO CLEAR PARAMETER COUNTER @VA03757 00824000
  839. MVI SDROVFWK,OVFLMSK SET UP OVERFLOW MASK @VA03757 00825000
  840. ANALPARM EQU * @VA03757 00826000
  841. MVI SDRFLCT,ZERO RESET FULL BYTE COUNTER SWITCH @VA03757 00827000
  842. SR R1,R1 *** CLEAR THE *** @VA03757 00828000
  843. SR R2,R2 *** WORK REGS *** @VA03757 00829000
  844. SPACE 00830000
  845. * EXAMINE THE PARAMETER LIST, ONE BYTE AT A TIME, 00831000
  846. * FIRST CHECKING TO SEE IF IT IS A SPECIAL CHARACTER, 00832000
  847. * IF NOT ,IT WILL BE HANDLED AS SENSE DATA.. 00833000
  848. SPACE 00834000
  849. CLI PARMLST,X'FF' LAST PARAMETER IN THE LIST ?? @VA03757 00835000
  850. BE STATEXIT YES, WE ARE ALL DONE @VA03757 00836000
  851. CLI ERRSDR,SDRMAX MAX NO. OF COUNTERS REACHED @VA03757 00837000
  852. BO COUNTERR YES, GO TO ERROR EXIT @VA03757 00838000
  853. CLI PARMLST,X'3F' CHECK FOR CHANNEL DATA CHECK ? @VA03757 00839000
  854. BE CHLDATCK YES, GO CHECK FOR C D C @VA03757 00840000
  855. CLI PARMLST,X'1F' FULL BYTE COUNTER ?? @VA03757 00841000
  856. BNE BYPASS04 NO,CONTINUE CHECKING @VA03757 00842000
  857. BAL R3,FULBYTEN GO UPDATE POINTERS AND TURN ON @VA03757 00843000
  858. * FULL BYTE SWITCH 00844000
  859. BYPASS04 LA R3,ANALPARM SET UP RETURN @VA03757 00845000
  860. CLI PARMLST,X'0F' NOP PARM ?? @VA03757 00846000
  861. BE UPDTEPTR YES, UPDATE POINTERS @VA03757 00847000
  862. CLI PARMLST,X'2F' DEVICE DEPENDENT COUNTER UPDATE??@VA03757 00848000
  863. BE UPDTECNT YES, UPDATE COUNTERS @VA03757 00849000
  864. SPACE 00850000
  865. *** THE PARAMETER BYTE HAS THE SENSE BYTE INDEX 00851000
  866. *** IN THE FOUR HI-ORDER BITS, THE FOUR LO-ORDER BITS 00852000
  867. *** WILL HAVE THE SENSE BIT THAT WE ARE TESTING FOR, 00853000
  868. *** IT IS USED AS AN INDEX TO GET THE SENSE BYTE MASK. 00854000
  869. SPACE 00855000
  870. SENTST EQU * @VA03757 00856000
  871. IC R1,PARMLST GET THE PARAMETER BYTE @VA03757 00857000
  872. SRL R1,4 CLEAR THE BIT INDEX @VA03757 00858000
  873. AR R1,R5 REG 1 WILL HAVE THE ADDR OF THE @VA03757 00859000
  874. * SENSE BYTE FOR THE EXECUTED INSTRUCTION 00860000
  875. IC R2,PARMLST USE SENSE BIT INDEX THIS TIME @VA03757 00861000
  876. N R2,F15 SAVE 4 LO-ORDER BITS @VA03757 00862000
  877. CL R2,F7 A VALID PARM ??? @VA03757 00863000
  878. BNH PARMOK YES, CONTINUE @VA03757 00864000
  879. BAL R5,ERREXIT NO, EXIT @VA03757 00865000
  880. PARMOK EQU * @VA03757 00866000
  881. IC R2,BITABL(R2) REG 2 WILL CONTAIN THE MASK BYTE@VA03757 00867000
  882. * FOR THE EXECUTED INSTRUCTION 00868000
  883. EX R2,TSTSENSE GO TEST DESIRED SENSE BIT @VA03757 00869000
  884. BZ UPDTEPTR BRANCH, IF THE SENSE BIT IS OFF, @VA03757 00870000
  885. * TO UPDATE THE POINTERS, THEN 00871000
  886. * EXAMINE THE NEXT PARAMETER BYTE.. 00872000
  887. SPACE 00873000
  888. SPACE 00874000
  889. * *** THE SENSE BIT IS ON *** 00875000
  890. SENBITON EQU * @VA03757 00876000
  891. CLI PARMLST,DATCHK IS IT A DATA CHECK ?? @VA03757 00877000
  892. BE DATACK YES, GO CHECK WHETHER A @VA03757 00878000
  893. * READ/WRITE 00879000
  894. SPACE 00880000
  895. * *** INCREMENT THE COUNTER *** 00881000
  896. SPACE 00882000
  897. UPDTECNT EQU * @VA03757 00883000
  898. IC R2,SDRCTRS PICK UP THE COUNTER @VA03757 00884000
  899. IC R1,SDROVFWK PICK UP OVERFLOW MASK @VA03757 00885000
  900. N R1,ANDMASK ANDMASK = '00000011' @VA03757 00886000
  901. AR R1,R2 UPDATE THE COUNTER @VA03757 00887000
  902. STC R1,SDRCTRS PUT IT BACK @VA03757 00888000
  903. SPACE 00889000
  904. * *** CHECK FOR OVERFLOW *** 00890000
  905. SPACE 00891000
  906. OC SDRFLCT(1),SDROVFWK OR THE OVERFLOW MASK @VA03757 00892000
  907. * AND THE FULL BYTE SWITCH 00893000
  908. IC R2,SDRFLCT PICK UP NEW MASK @VA03757 00894000
  909. EX R2,TSTOVFL GO TEST FOR OVERFLOW @VA03757 00895000
  910. BNO BYPASS01 BRANCH IF NO OVERFLOW @VA03757 00896000
  911. OI ERRSDR,SDRRECD TURN ON OVERFLOW SWITCH @VA03757 00897000
  912. BYPASS01 B UPDTEPTR GO UPDATE POINTERS @VA03757 00898000
  913. SPACE 00899000
  914. * *** EXECUTED INSTRUCTIONS *** 00900000
  915. SPACE 00901000
  916. TSTSENSE TM 0(R1),ZERO TEST SENSE BIT @VA03757 00902000
  917. TSTOVFL TM SDRCTRS,ZERO @VA03757 00903000
  918. SPACE 3 00904000
  919. FULBYTEN EQU * @VA03757 00905000
  920. MVI SDRFLCT,FULLBYTE TURN ON FULL BYTE SWITCH @VA03757 00906000
  921. SPACE 00907000
  922. * *** UPDATE POINTERS FOR NEXT PARAMETER BYTE *** 00908000
  923. SPACE 00909000
  924. UPDTEPTR EQU * @VA03757 00910000
  925. TM SDROVFWK,FIFTEEN RIGHT HAND COUNTER ?? @VA03757 00911000
  926. BNO BYPASS02 NO, DON'T INCREMENT COUNTER REG @VA03757 00912000
  927. LA R7,1(,R7) INCREMENT COUNTER REG @VA03757 00913000
  928. BYPASS02 LA R6,1(,R6) POINT TO NEXT PARAMETER BYTE @VA03757 00914000
  929. IC R2,SDRPRMCT PICK UP PARAMETER BYTE COUNTER @VA03757 00915000
  930. LA R2,1(R2) INCREMENT IT @VA03757 00916000
  931. SLR R1,R1 CLEAR WORK REG @VA03757 00917000
  932. IC R1,SDRLNGTH PICK UP SDR WORK AREA LENGTH @VA03757 00918000
  933. SLL R1,1 GET MAX NO. OF SDR COUNTERS @VA03757 00919000
  934. CLR R1,R2 COMPARE PARAMETER BYTE COUNT @VA03757 00920000
  935. BL COUNTERR TOO MANY COUNTERS---EXIT @VA03757 00921000
  936. BNE BYPASS05 TO CONTINUE PROCESS @VA03757 00922000
  937. OI ERRSDR,SDRMAX MAX NO. OF COUNTERS REACHED @VA03757 00923000
  938. BYPASS05 EQU * CONTINUE PROCESS @VA03757 00924000
  939. STC R2,SDRPRMCT STORE UPDATED COUNT @VA03757 00925000
  940. XI SDROVFWK,FOXES CHANGE TO OTHER MASK @VA03757 00926000
  941. SR R1,R1 *** CLEAR THE *** @VA03757 00927000
  942. SR R2,R2 *** WORK REGS *** @VA03757 00928000
  943. BR R3 RETURN @VA03757 00929000
  944. COUNTERR BAL R5,ERREXIT EXIT VIA ERROR EXIT @VA03757 00930000
  945. SPACE 1 00931000
  946. DROP R5 @VA03757 00932000
  947. DROP R6 @VA03757 00933000
  948. DROP R7 @VA03757 00934000
  949. SPACE 2 00935000
  950. CHLDATCK EQU * @VA03757 00936000
  951. LA R3,STATEXIT RESET THE RETURN REG @VA03757 00937000
  952. TM IOERCSW+5,CDC CHANNEL DATA CHECK ?? @VA03757 00938000
  953. BNO STATEXIT NO CDC , SO ALL DONE @VA03757 00939000
  954. LA R7,SDRCTRS RESET THE COUNTER POINTER @VA03757 00940000
  955. LA R7,7(,R7) POINT AT CORRECT COUNTER @VA03757 00941000
  956. MVI SDROVFWK,FIFTEEN RESET THE OVER FLOW MASK @VA03757 00942000
  957. B UPDTECNT NOW GO UPDATE THE COUNTER @VA03757 00943000
  958. SPACE 1 00944000
  959. DATACK EQU * @VA03757 00945000
  960. CLI SDRPRMCT,ONE SECOND PARAMETER BYTE ?? @VA03757 00946000
  961. BH UPDTECNT NO,ITS HIGHER,SO UPDATE COUNTER @VA03757 00947000
  962. BE TSTREAD SECOND BYTE,GO CHECK FOR READ @VA03757 00948000
  963. TM IOERFLG3,IOERREAD FIRST BYTE,WAS IT A READ OP ? @VA03757 00949000
  964. BO UPDTECNT YES,UPDATE READ DATA CK COUNTER @VA03757 00950000
  965. B UPDTEPTR NO,SO GO LOOK AT NEXT BYTE @VA03757 00951000
  966. TSTREAD TM IOERFLG3,IOERREAD WAS IT A READ OP ?? @VA03757 00952000
  967. BO UPDTEPTR YES,BUT WE ARE LOOKING FOR A @VA03757 00953000
  968. * WRITE DATA CK, GO TO NEXT BYTE 00954000
  969. B UPDTECNT IT WAS A WRITE,UPDATE COUNTER @VA03757 00955000
  970. SPACE 2 00956000
  971. GETSDRBK EQU * GET SDRBLOK, IF IT IS USED!! @VA03757 00957000
  972. SPACE 1 00958000
  973. CKFORTAP LA R1,SDRSIZE SET UP FOR SMALL SDRBLOK @VA03757 00959000
  974. CLI RDEVTYPC,CLASTAPE A TAPE DRIVE ?? @VA03757 00960000
  975. BNE GETSDR NO, NOT TAPE , GET SMALL SDR @VA03757 00961000
  976. TM RDEVTYPE,TYP3410+TYP3420 IS IT A 3400 ?? @VA03757 00962000
  977. BZ GETSDR NOT EITHER ONE @VA03757 00963000
  978. LA R1,SDRSIZE1 SET UP FOR LARGE SDRBLOK @VA03757 00964000
  979. GETSDR BAL R3,CALLFRE GO GET SDRBLOK @VA03757 00965000
  980. BAL R3,OBRMDRCL NOW CLEAR IT WITH ZEROES @VA03757 00966000
  981. LR R9,R1 PUT SDRBLOK ADDRESS IN BASE REG @VA03757 00967000
  982. LA R9,0(,R9) BE SURE (CLEAR HI-ORDER BYTE) @VA03757 00968000
  983. ST R9,RDEVCTRS SAVE SDRBLOK ADDRESS @VA03757 00969000
  984. SPACE 2 00970000
  985. *** BUILD SDRBLOK *** 00971000
  986. SPACE 1 00972000
  987. ST R8,SDRRDEV SAVE ADDRESS OF RELATED RDEVBLOK @VA03757 00973000
  988. MVI SDRLNGTH,SDRCNTLN SET LENGTH OF SDR COUNTERS @VA03757 00974000
  989. LR R7,R0 GET LENGTH OF RECORD(DOUBLEWORDS)@VA03757 00975000
  990. C R7,F4 DID WE GET LARGE SDRBLOK ?? @VA03757 00976000
  991. BL SDRLNOK NO,LENGTH IS OK @VA03757 00977000
  992. MVI SDRLNGTH,SDRCTLN1 CHANGE SDR COUNTER LENGTH @VA03757 00978000
  993. * FOR 3400 TAPE DRIVES 00979000
  994. SDRLNOK EQU * @VA03757 00980000
  995. MVC SDRCUA+1(2),ERRIOB GET PRIMARY DEVICE @VA03757 00981000
  996. B CKPARM GO LOOK FOR PARAMETERS @VA03757 00982000
  997. SPACE 2 00983000
  998. SDRDASD CLI RDEVTYPC,CLASDASD DASD ?? @VA03757 00984000
  999. BNE SDRTAPE NOT DASD,GO CHECK TAPE @VA03757 00985000
  1000. LA R6,PARMDAS SET UP PARAMETER REG @VA03757 00986000
  1001. IC R3,IOERDATA+4 GET PHYSICAL DRIVE ADDRESS @VA03757 00987000
  1002. N R3,F15 SAVE 4 LOW ORDER BITS @VA04586 00988000
  1003. LH R7,ERRIOB GET LOGICAL DEVICE ADDRESS @VA03757 00989000
  1004. N R7,=X'0000FFF0' CLEAR LOW ORDER 4 BITS @VA03757 00990000
  1005. OR R7,R3 TOGETHERNESS @VA03757 00991000
  1006. STCM R7,7,SDRCUA STORE PRIMARY DEVICE ADDRESS @VA03757 00992000
  1007. B SETUPSDR GO LOOK AT PARAMETER LIST @VA03757 00993000
  1008. SPACE 1 00994000
  1009. SDRTAPE EQU * @VA03757 00995000
  1010. CLI RDEVTYPC,CLASTAPE IS IT A TAPE DRIVE ?? @VA03757 00996000
  1011. BNE SDRTERM NO, GO CHECK FOR TERMINAL @VA03757 00997000
  1012. LA R6,PARMTAP1 SET PARAMETER LIST FOR 3410 @VA03757 00998000
  1013. TM RDEVTYPE,TYP3410 3410 TAPE DRIVE ?? @VA03757 00999000
  1014. BO SETUPSDR YES,CONTINUE PROCESSING @VA03757 01000000
  1015. LA R6,PARMTAP2 SET PARAMETER LIST FOR 3420 @VA03757 01001000
  1016. CLI RDEVTYPE,TYP3420 3420 TAPE DRIVE ?? @VA03757 01002000
  1017. BE SETUPSDR YES ,CONTINUE PROCESSING @VA03757 01003000
  1018. * NOTE: WE SHOULD HAVE PASSED A 01004000
  1019. * PARAMETER LIST FOR 2400 DRIVE.. 01005000
  1020. BAL R5,ERREXIT DONT KEEP STATS FOR THIS DEVICE. @VA03757 01006000
  1021. SPACE 1 01007000
  1022. SDRTERM EQU * @VA03757 01008000
  1023. CLI RDEVTYPC,CLASTERM IS IT A TERMINAL ?? @VA03757 01009000
  1024. BNE SDRGRAF NO, GO TRY GRAPHICS @VA03757 01010000
  1025. LA R6,PARMCNS SET PARAMETER LIST FOR 3210 ETC..@VA03757 01011000
  1026. CLI RDEVTYPE,TYP3210 3210,3215,2150 OR1052 ?? @VA03757 01012000
  1027. BE SETUPSDR YES,CONTINUE PROCESSING @VA03757 01013000
  1028. LA R6,PARMBSC SET UP PARAMETER LIST FOR BI-SYNC@VA03757 01014000
  1029. TM RDEVTYPE,TYP2700+TYPTTY 2700 OR TTY ?? @VA03757 01015000
  1030. BM SETUPSDR YES,CONTINUE PROCESSING @VA03757 01016000
  1031. CLI RDEVTYPE,TYPSDLC IS IT SDLC @V67CDF1 01016100
  1032. BM SETUPSDR YES,CONTINUE PROCESSING @V67CDF1 01016200
  1033. TM RDEVTYPE,TYPBSC REMOTE 3270? @VA07662 01016300
  1034. BO SETUPSDR YES,CONTINUE PROCESSING @VA07662 01016600
  1035. CLI RDEVTYPE,TYP1050 IS IT A 1050 ?? @VA03757 01017000
  1036. BE SETUPSDR YES,CONTINUE PROCESSING @VA03757 01018000
  1037. CLI RDEVTYPE,TYP2741 HOW ABOUT A 2741 ?? @VA03757 01019000
  1038. BE SETUPSDR IT IS,CONTINUE PROCESSING @VA03757 01020000
  1039. BAL R5,ERREXIT DONT KNOW WHAT WE HAVE, @VA03757 01021000
  1040. * ITS NOT SUPPORTED!! EXIT 01022000
  1041. SPACE 1 01023000
  1042. SDRGRAF EQU * @VA03757 01024000
  1043. CLI RDEVTYPC,CLASGRAF COULD IT BE GRAPHICS ?? @VA03757 01025000
  1044. BNE SDRRSE NO,TRY UNIT RECORD @VA03757 01026000
  1045. LA R6,PARMGRF SET PARAMETER LIST FOR GRAPHICS @VA03757 01027000
  1046. TM RDEVTYPE,TYP3066 IS IT A 168 ?? @VA03757 01028000
  1047. BO SETUPSDR YES,CONTINUE PROCESSING @VA03757 01029000
  1048. * NOTE: WE SHOULD HAVE PASSED A 01030000
  1049. * PARAMETER LIST FOR 3277 DEVICE 01031000
  1050. GRAFERR BAL R5,ERREXIT NO PARAMETER LIST, ERROR EXIT @VA03757 01032000
  1051. SPACE 1 01033000
  1052. SDRRSE EQU * @VA03757 01034000
  1053. TM RDEVTYPC,CLASURI+CLASURO UNIT RECORD,EITHER ONE?@VA03757 01035000
  1054. BZ RSEERR UNKNOWN CLASS -- EXIT @VA03757 01036000
  1055. LA R6,PARMRSE SET UP PARAMETER LIST @VA03757 01037000
  1056. TM RDEVTYPE,TYP2501 IS IT A 2501 ?? @VA03757 01038000
  1057. BO SETUPSDR YES,CONTINUE PROCESSING @VA03757 01039000
  1058. TM RDEVTYPE,TYP2520R IS IT 2520 READER ?? @VA03757 01040000
  1059. BO SETUPSDR YES,CONTINUE PROCESSING @VA03757 01041000
  1060. LA R6,PARMRSE1 CHANGE PARAMETER LIST POINTER @VA03757 01042000
  1061. TM RDEVTYPE,TYP2540R IS IT A 2540 READER ?? @VA03757 01043000
  1062. BO SETUPSDR YES,CONTINUE PROCESSING @VA03757 01044000
  1063. LA R6,PARMRSE2 SET PARAMETER LIST FOR 1403 @VA03757 01045000
  1064. CLI RDEVTYPE,TYP1403 IS IT A 1403 PRINTER?? @V386298 01046000
  1065. BE SETUPSDR YES, CONTINUE PROCESSING @V386298 01047000
  1066. LA R6,PARMRSE3 SET UP FOR 1443 @VA03757 01048000
  1067. TM RDEVTYPE,TYP1443 IS IT A 1443 ?? @VA03757 01049000
  1068. BO SETUPSDR YES,CONTINUE PROCESSING @VA03757 01050000
  1069. LA R6,PARMRSE4 SET UP FOR 3211 OR 3203 @V386298 01051000
  1070. TM RDEVTYPE,TYP3211 IS IT A 3211 PRINTER ?? @VA03757 01052000
  1071. BO SETUPSDR YES,CONTINUE PROCESSING @VA03757 01053000
  1072. * NOTE: WE SHOULD HAVE PASSED A PARAMETER 01053100
  1073. * LIST FOR THE 3800 PRINTER 01053200
  1074. RSEERR BAL R5,ERREXIT UNIT RECORD TYPE, NOT SUPPORTED @VA03757 01054000
  1075. SPACE 2 01055000
  1076. ERREXIT EQU * ERROR EXIT @VA03757 01056000
  1077. MVI RDEVCTRS,FOXES SUSPEND SDR FOR THIS DEVICE @VA03757 01057000
  1078. STM R5,R6,SDRCTRS SAVE ERROR DATA @VA03757 01058000
  1079. STC R2,SDRCTRS SAVE ONE MORE BYTE @VA03757 01059000
  1080. B STAEXIT1 RETURN TO CALLER @VA03757 01060000
  1081. SPACE 2 01061000
  1082. STATEXIT EQU * @VA03757 01062000
  1083. TM ERRSDR,SDRRECD TEST FOR COUNTER OVERFLOW @VA03757 01063000
  1084. BNO STAEXIT1 NOT ON , SO EXIT @VA03757 01064000
  1085. SPACE 2 01065000
  1086. * CHECK THE OBR QUEUE FOR ANY REQUESTS FOR THIS DEVICE, IF THERE 01066000
  1087. * IS ONE, JUST EXIT, IF NONE--- QUEUE THIS ERRBLOK ON THE 01067000
  1088. * OBR QUEUE SO AN OBR RECORD WILL BE WRITTEN FOR COUNTER OVERFLOW.. 01068000
  1089. SPACE 01069000
  1090. L R6,=V(DMKIOEIQ) GET ADDRESS OF OBR QUEUE @VA03757 01070000
  1091. QUESRCH ICM R6,15,0(R6) GET POINTER TO FIRST REQUEST @VA03757 01071000
  1092. BZ QUERRBLK IF ZERO, GO QUEUE THIS ERRBLOK @VA03757 01072000
  1093. L R5,CPEXR6-CPEXBLOK(R6) GET ADD OF QUE'ED BLOK @VA03757 01073000
  1094. CLC ERRIOB(2),ERRIOB-ERRBLOK+4(R5) SAME DEVICE ??? @VA03757 01074000
  1095. BE STAEXIT1 YES, NO NEED TO QUEUE ANOTHER ONE@VA03757 01075000
  1096. B QUESRCH CONTINUE DOWN THE QUEUE.. @VA03757 01076000
  1097. SPACE 01077000
  1098. QUERRBLK EQU * FIRST, DETERMINE OBR SIZE. @VA03757 01078000
  1099. CLI SDRLNGTH,SDRCNTLN SHORT OBR TO BE BUILT??? @VA03757 01079000
  1100. BNE QUEBLOK NO, BUILD LONG OBR @VA03757 01080000
  1101. OI ERRSDR,SDRSHRT SET FLAG FOR SHORT OBR @VA03757 01081000
  1102. QUEBLOK EQU * NOW QUEUE THE ERRBLOK @VA03757 01082000
  1103. BAL R5,REGSETUP GET REGS READY @VA03757 01083000
  1104. SRL R7,3 CONVERT BYTES TO DOUBLE WORDS @VA04748 01084000
  1105. GCPEX EQU * GET SPACE FOR CPEXBLOK @VA03757 01085000
  1106. LA R0,CPEXSIZE GET SIZE IN DOUBLEWORDS @VA03757 01086000
  1107. CALL DMKFREE GET STORAGE FOR CPEXBLOK @VA03757 01087000
  1108. USING CPEXBLOK,R1 SET UP ADDRESSABILITY FOR CPEXBLK@VA03757 01088000
  1109. STM R0,R15,CPEXREGS SAVE ALL REGISTERS IN CPEXBLOK @VA03757 01089000
  1110. SLR R4,R4 CLEAR REGISTER R4 @VA03757 01090000
  1111. ST R4,CPEXFPNT CLEAR POINTER TO NEXT CPEXBLOK @VA03757 01091000
  1112. L R3,=V(DMKIOEIQ) GET POINTER TO QUEUE @VA03757 01092000
  1113. DROP R1 DROP CPEXBLOK BASE REGISTER @VA03757 01093000
  1114. SPACE 2 01094000
  1115. QCPEX EQU * QUE CPEXBLOK OFF RECORDING QUE @VA03757 01095000
  1116. LR R4,R3 GET POINTER TO RECORDING QUE @VA03757 01096000
  1117. ICM R3,15,0(R3) GET POINTER TO NEXT CPEXBLOK @VA03757 01097000
  1118. BNZ QCPEX YES, GET POINTER TO NEXT CPEXBLOK@VA03757 01098000
  1119. ST R1,0(,R4) QUE CPEXBLOK AT THE END OF CHAIN @VA03757 01099000
  1120. B RECDQUE GO CHECK THE QUEUES @VA03757 01100000
  1121. SPACE 2 01101000
  1122. DROP R10 @VA03757 01102000
  1123. SPACE 2 01103000
  1124. STAEXIT1 EQU * EXIT, FIRST CHECKING OTHER QUEUES@VA03757 01104000
  1125. BAL R5,REGSETUP GET REGS READY @VA03757 01105000
  1126. BAL R5,FRETRECD RELEASE THE RECORD @VA03757 01106000
  1127. B RECDQUE GET NEXT REC. FROM RECORDING QUE @VA03757 01107000
  1128. SPACE 2 01108000
  1129. DROP R4 @VA03757 01109000
  1130. DROP R9 @VA03757 01110000
  1131. EJECT 01111000
  1132. SPACE 01112000
  1133. * 01113000
  1134. * SUBROUTINES FOR RECORDING ERROR RECORDS ONTO THE ERROR 01114000
  1135. * RECORDING CYLINDERS. 01115000
  1136. * 01116000
  1137. SPACE 2 01117000
  1138. PAGEIN EQU * PUT REAL PAGE ADDRESS IN REG. 2 @VA03358 01118000
  1139. SR R4,R4 CLEAR WORK REGISTER @VA03358 01119000
  1140. C R4,IOEREALA IS THERE A RECORDING PAGE ADDR @VA03358 01120000
  1141. BNE RECREST YES, GET REAL PAGE ADDRESS @VA03358 01121000
  1142. CALL DMKPGTVG ALLOCATE PAGE OF VIRTUAL STORAGE @VA03358 01122000
  1143. ST R1,IOEVMPAD SAVE VIRTUAL PAGE ADDRESS @VA03358 01123000
  1144. BAL R9,REALREAD GET A RECORDING PAGE FOR RECORD @VA03358 01124000
  1145. RECREST EQU * @VA03358 01125000
  1146. L R1,IOEVMPAD GET VIRTUAL PAGE ADDRESS @VA03358 01126000
  1147. L R2,IOEREALA GET RECORDING PAGE ADDRESS @VA03358 01127000
  1148. BR R5 RETURN TO IN LINE CODE @VA03358 01128000
  1149. SPACE 2 01129000
  1150. REALWRT EQU * WRITE RECORDING PAGE BACK TO DASD@VA03358 01130000
  1151. L R1,IOEVMPAD GET VIRTUAL BUFFER ADDRESS @VA03358 01131000
  1152. REALWRTS EQU * WRITE RECORDING PAGE TO DISK @VA03358 01132000
  1153. L R0,WORKCYL GET CCPD (CYL,CYL,PAGE,DEV TYPE) @VA03358 01133000
  1154. CALL DMKRPAPT,PARM=SYSTEM MOVE RECORDING PAGE TO DISK@VA03358 01134000
  1155. BZ RLWREXIT IF ZERO, SUCCESSFUL WRITE @VA03358 01135000
  1156. L R2,IOEREALA GET ADDRESS OF REAL PAGE @VA03358 01136000
  1157. BAL R3,UPPAG UPDATE THE PAGE NUMBER @VA03358 01137000
  1158. STC R14,WORKPAGE SAVE PAGE NO. IF NOT AT MAXIMUN @VA03358 01138000
  1159. MVC RECCCPD(2),WORKCYL UPDATE CCPD FIELD IN HEADER @VA03358 01139000
  1160. B REALWRTS TRY WRITING PAGE OUT TO DISK @VA03358 01140000
  1161. RLWREXIT EQU * @VA03358 01141000
  1162. L R2,IOEREALA GET THE REAL PAGE ADDRESS @VA03358 01142000
  1163. BR R9 RETURN TO IN LINE CODE @VA03358 01143000
  1164. SPACE 2 01144000
  1165. REALREAD EQU * GET ADDRESS OF RECORDING PAGE @VA03358 01145000
  1166. L R0,WORKCYL GET RECORDING PAGE CCPD VALUE @VA03358 01146000
  1167. L R1,IOEVMPAD GET RECORDING PAGE VIRTUAL ADDR @VA03358 01147000
  1168. CALL DMKRPAGT,PARM=SYSTEM GET REC. PAGE REAL ADDRESS @VA03358 01148000
  1169. LA R2,(BRING+LOCK+DEFER+SYSTEM) GET OPTIONS @VA03358 01149000
  1170. CALL DMKPTRAN BRING IN RECORDING PAGE @VA03358 01150000
  1171. BNZ RLRDERR IF ERROR , GET ANOTHER PAGE @VA03358 01151000
  1172. ST R2,IOEREALA SAVE RECORDING PAGE REAL ADDRESS @VA03358 01152000
  1173. TM RECFLAG1,RECPAGFL IS RECORDING PAGE FULL @VA03358 01153000
  1174. BO RLRDERR YES, GET ANOTHER RECORDING PAGE @VA03358 01154000
  1175. MVI RECFLAG1,RECPAGIU SET RECORDING PAGE IN USE FLAG@VA03358 01155000
  1176. BR R9 RETURN TO IN LINE CODE @VA03358 01156000
  1177. SPACE 1 01157000
  1178. RLRDERR EQU * UPDATE TO NEXT RECORDING PAGE @VA03358 01158000
  1179. BAL R3,UPPAG UPDATE RECORDING PAGE NUMBER @VA03358 01159000
  1180. STC R14,WORKPAGE SAVE PAGE NO. IF NOT AT MAXIMUN @VA03358 01160000
  1181. BAL R3,REALREAD GET REAL ADDR FOR RECORDING PAGE @VA03358 01161000
  1182. SPACE 2 01162000
  1183. PAGREL EQU * RELEASE THE VIRTUAL PAGE @VA03358 01163000
  1184. L R2,IOEREALA GET ADDRESS OF RECORDING PAGE @VA03358 01164000
  1185. L R1,IOEVMPAD GET ADDRESS OF VIRTUAL PAGE @VA03358 01165000
  1186. CALL DMKPTRUL UNLOCK THE VIRTUAL PAGE @VA03358 01166000
  1187. XC IOEREALA,IOEREALA CLEAR THE REAL PAGE ADDRESS @VA03358 01167000
  1188. SR R0,R0 FORCE SWAP CCPD ENTRY TO ZERO @VA03358 01168000
  1189. CALL DMKRPAGT,PARM=SYSTEM RELEASE BACKUP VIRTUAL PAGE@VA03358 01169000
  1190. CALL DMKPGTVR RELEASE VIRTUAL MEMORY PAGE @VA03358 01170000
  1191. BR R3 RETURN TO IN LINE CODE @VA03358 01171000
  1192. SPACE 2 01172000
  1193. UPPAG EQU * UPDATE TO NEXT RECORDING PAGE NO.@VA03358 01173000
  1194. ICM R14,B'0111',WORKCYL CURRENT RECORDING CYL & PAGE@V5088AA 01174100
  1195. LA R14,1(,R14) UPDATE RECORDING PAGE NO. BY ONE @VA03358 01175000
  1196. CLM R14,B'0111',AREA90PC IS RECORDING AREA 90% FULL?@V5088AA 01176100
  1197. BNE UPPAGMAX NO, CHECK FOR MAX. NO. PAGES @VA03358 01177000
  1198. ST R14,PAGNOUPD SAVE UPDATED PAGE NUMBER @VA11472 01178500
  1199. BAL R4,MSG90PC WRITE 90 % MESSAGE TO OPERATOR @VA03358 01179000
  1200. L R14,PAGNOUPD GET UPDATED PAGE NUMBER @VA11472 01180500
  1201. UPPAGMAX EQU * CHECK MAX. PAGE NO. VALUE FOR CYL@VA03358 01181000
  1202. CLM R14,1,MAXPAGE IS IT = TO MAX. PAGE NO. VALUE @VA03358 01182000
  1203. BNER R3 NO, RETURN TO IN LINE CODE @VA03358 01183000
  1204. CLM R14,B'0110',LASTCYL IS IT LAST PAGE ON LAST CYL?@V5088AA 01183100
  1205. BNE UPCYL IF NOT, UPDATE TO NEXT CYL NO. @V5088AA 01183600
  1206. BAL R4,MSGFULL WRITE CYL. FULL MSG. TO OPERATOR @VA03358 01184000
  1207. SPACE 2 01185000
  1208. UPDTHDR EQU * UPDATE CONTROL HEADER INDEX VALUE@VA03358 01186000
  1209. L R2,IOEREALA GET ADDRESS OF RECORDING PAGE @VA03358 01187000
  1210. LH R4,RECNXT GET INDEX VALUE TO AVAILABLE AREA@VA03358 01188000
  1211. LA R4,0(R4,R7) UPDATE TO AVAILABLE SPACE ON PAGE@VA03358 01189000
  1212. TM MCCHFLAG,MCHFLAG IS THIS A MCH/CCH ENTRY @VA03358 01190000
  1213. BZ *+8 NO, BYPASS UPDATING INDEX VALUE @VA03358 01191000
  1214. LA R4,4(,R4) ADD LENGTH FIELD TO INDEX VALUE @VA03358 01192000
  1215. STH R4,RECNXT SAVE NEW INDEX VALUE @VA03358 01193000
  1216. LA R4,0(R4,R2) GET ADDR TO NEW AVAILABLE SPACE @VA03358 01194000
  1217. L R3,FFS STORE ENDING INDICATOR (FFFFFFFF)@VA03358 01195000
  1218. ST R3,0(,R4) AT BEGINNING OF AVAILABLE SPACE @VA03358 01196000
  1219. BR R5 RETURN TO IN LINE CODE @VA03358 01197000
  1220. UPCYL EQU * UPDATE WORKCYL TO NEXT CYL. NO. @V5088AA 01197100
  1221. SRL R14,8 ISOLATE CC PORTION OF CCP @V5088AA 01197200
  1222. LA R14,1(R14) UPDATE RECORDING CYL BY 1 @V5088AA 01197300
  1223. STH R14,WORKCYL UPDATE CURRENT RECORDING CYL NO. @V5088AA 01197400
  1224. SLL R14,8 MAKE ROOM FOR PAGE NUMBER @V5088AA 01197500
  1225. LA R14,1(R14) INITIALIZE TO 1ST PAGE ON NEW CYL@V5088AA 01197600
  1226. BR R3 RETURN TO INLINE CODE @V5088AA 01197700
  1227. SPACE 2 01198000
  1228. CKOBROOM EQU * ENOUGH SPACE ON RECORDING PAGE @VA03358 01199000
  1229. LH R4,RECNXT INDEX VALUE TO AVAILABLE SPACE @VA03358 01200000
  1230. LA R3,4095-L'INITFMT MAXIMUM SIZE OF RECORDING PAGE@VA03358 01201000
  1231. LA R4,4(R4) UPDATE INDEX FOR LENGTH FIELD @VA03358 01202000
  1232. SR R3,R4 GET THE REMAINING SPACE ON PAGE @VA03358 01203000
  1233. CR R7,R3 CAN ERROR RECORD FIX ON REC PAGE @VA03358 01204000
  1234. BLR R5 YES, RETURN TO IN LINE CODE @VA03358 01205000
  1235. MVI RECFLAG1,RECPAGFL SET RECORDING PAGE FULL FLAG @VA03358 01206000
  1236. BAL R9,REALWRT WRITE RECORDING PAGE BACK TO DISK@VA03358 01207000
  1237. BAL R3,UPPAG UPDATE RECORDING PAGE NUMBER @VA03358 01208000
  1238. STC R14,WORKPAGE SAVE PAGE NO. IF NOT AT MAXIMUN @VA03358 01209000
  1239. BAL R9,REALREAD GET REAL ADDR FOR RECORDING PAGE @VA03358 01210000
  1240. MVC RECNXT(8),INITFMT INITIALIZE CONTROL HEADER @VA03358 01211000
  1241. BR R5 RETURN TO IN LINE CODE @VA03358 01212000
  1242. SPACE 2 01213000
  1243. ERASEQ EQU * CHECK THE ERASE REQUEST QUE @VA03358 01214000
  1244. L R9,=V(DMKIOERQ) GET POINTER TO ERASE REQUEST QUE@VA03358 01215000
  1245. ICM R4,15,0(R9) GET FIRST ENTRY IN ERASE QUE @VA03358 01216000
  1246. BZR R5 IF ZERO, NO REQUEST AVAILABLE @VA03358 01217000
  1247. BAL R5,WRITPAG WRITE RECORDING PAGE BACK TO DISK@VA03358 01218000
  1248. L R9,=V(DMKIOERQ) GET POINTER TO ERASE REQUEST QUE@VA03358 01219000
  1249. L R4,0(,R9) GET FIRST ENTRY IN ERASE QUE @VA03358 01220000
  1250. BAL R5,STACKREQ STACK CPEXBLOK AND EXIT TO CALLER@VA03358 01221000
  1251. SPACE 2 01222000
  1252. MCHQ EQU * CHECK MACHINE CHECK RECORDING QUE@VA03358 01223000
  1253. L R9,=V(DMKIOEMQ) GET POINTER TO MCH RECORDING QUE@VA03358 01224000
  1254. ICM R4,15,0(R9) GET FIRST ENTRY IN MCH QUE @VA03358 01225000
  1255. BZR R5 IF ZERO, NO REQUEST AVAILABLE @VA03358 01226000
  1256. BAL R5,WRITPAG WRITE RECORDING PAGE BACK TO DISK@VA03358 01227000
  1257. L R9,=V(DMKIOEMQ) GET POINTER TO MCH RECORDING QUE@VA03358 01228000
  1258. L R4,0(,R9) GET FIRST ENTRY IN MCH QUE @VA03358 01229000
  1259. BAL R5,STACKREQ STACK CPEXBLOK AND EXIT TO CALLER@VA03358 01230000
  1260. SPACE 2 01231000
  1261. CCHQ EQU * CHECK CCH RECORDING QUE @VA03358 01232000
  1262. L R9,=V(DMKIOECQ) GET POINTER TO CCH RECORDING QUE@VA03358 01233000
  1263. ICM R4,15,0(R9) GET FIRST ENTRY IN CCH QUE @VA03358 01234000
  1264. BZR R5 IF ZERO, NO REQUEST AVAILABLE @VA03358 01235000
  1265. BAL R5,WRITPAG WRITE BACK RECORDING PAGE ON DISK@VA03358 01236000
  1266. L R9,=V(DMKIOECQ) GET POINTER TO CCH RECORDING QUE@VA03358 01237000
  1267. L R4,0(,R9) GET FIRST ENTRY IN CCH QUE @VA03358 01238000
  1268. L R2,0(,R4) GET POINTER TO SECOND CCH REQUEST@VA03358 01239000
  1269. ST R2,0(,R9) PUT REQUEST AT BEGINNING OF QUE @VA03358 01240000
  1270. LM R6,R8,CPEXR6-CPEXBLOK(R4) GET SET UP REGISTERS @VA03358 01241000
  1271. BAL R5,FRETCPEX RELEASE STORAGE FOR CPEXBLOK @VA03358 01242000
  1272. BAL R5,IOFC1 GO RECORD CCH RECORDS @VA03358 01243000
  1273. SPACE 2 01244000
  1274. OBRQ EQU * CHECK OUTBOARD RECORDING QUE @VA03358 01245000
  1275. L R9,=V(DMKIOEIQ) GET PTR TO OUTBOARD REC. QUE @VA03358 01246000
  1276. ICM R4,15,0(R9) GET FIRST ENTRY IN OUTBOARD QUE @VA03358 01247000
  1277. BZR R5 IF ZERO, NO REQUEST AVAILABLE @VA03358 01248000
  1278. L R2,0(,R4) PTR TO SECOND OUTBOARD REQUEST @VA03358 01249000
  1279. ST R2,0(,R9) PUT REQUEST AT BEGINNING OF QUE @VA03358 01250000
  1280. LM R6,R8,CPEXR6-CPEXBLOK(R4) GET SET UP REGISTERS @VA03358 01251000
  1281. BAL R5,FRETCPEX RELEASE CPEXBLOK @VA03358 01252000
  1282. BAL R5,IOFOB GO RECORD OBR/MDR RECORDS @VA03358 01253000
  1283. SPACE 2 01254000
  1284. ENVQ EQU * CHECK ENVIRONMENTAL RECORDING QUE@VA03358 01255000
  1285. L R9,=V(DMKIOENQ) GET PTR TO ENVIRON. REQUEST QUE @VA03358 01256000
  1286. ICM R4,15,0(R9) GET FIRST ENTRY IN MDR QUE @VA03358 01257000
  1287. BZR R5 IF ZERO, NO REQUEST AVAILABLE @VA03358 01258000
  1288. STACKREQ EQU * STACK CPEXBLOK AND EXIT TO CALLER@VA03358 01259000
  1289. L R2,0(,R4) GET POINTER TO SECOND MDR REQUEST@VA03358 01260000
  1290. ST R2,0(,R9) PUT REQUEST AT BEGINNING OF QUE @VA03358 01261000
  1291. BAL R5,STKCPEX GO STACK CPEXBLOK AND EXIT @VA03358 01262000
  1292. SPACE 2 01263000
  1293. SVC76Q EQU * CHECK SVC 76 RECORDING QUE @VA03358 01264000
  1294. L R9,=V(DMKIOEVQ) GET PTR TO SVC 76 REQUEST QUE @VA03358 01265000
  1295. ICM R4,15,0(R9) GET FIRST ENTRY IN SVC 76 QUE @VA03358 01266000
  1296. BZR R5 IF ZERO, NO REQUEST AVAILABLE @VA03358 01267000
  1297. L R2,0(,R4) GET PTR TO SECOND SVC 76 REQUEST @VA03358 01268000
  1298. ST R2,0(,R9) PUT REQUEST AT BEGINNING OF QUE @VA03358 01269000
  1299. LM R6,R8,CPEXR6-CPEXBLOK(R4) GET SET UP REGISTERS @VA03358 01270000
  1300. BAL R5,FRETCPEX RELEASE CPEXBLOK @VA03358 01271000
  1301. BAL R5,IOFVR GO RECORD ALL SVC 76 REQUESTS @VA03358 01272000
  1302. SPACE 2 01273000
  1303. STATQ EQU * CHECK COUNTER UPDATE QUEUE @VA03757 01274000
  1304. L R9,=V(DMKIOESQ) GET POINTER TO UPDATE QUEUE @VA03757 01275000
  1305. ICM R4,15,0(R9) GET FIRST ENTRY ON UPDATE QUEUE @VA03757 01276000
  1306. BZR R5 IF ZERO, NO REQUEST AVAILABLE @VA03757 01277000
  1307. L R2,0(,R4) PTR TO SECOND UPDATE REQUEST @VA03757 01278000
  1308. ST R2,0(R9) PUT REQUEST AT BEGINNING OF QUEUE@VA03757 01279000
  1309. LM R6,R8,CPEXR6-CPEXBLOK(R4) SET UP REGISTERS @VA03757 01280000
  1310. BAL R5,FRETCPEX RELEASE CPEXBLOK @VA03757 01281000
  1311. B IOFST GO UPDATE STATISTICAL COUNTERS @VA03757 01282000
  1312. SPACE 2 01283000
  1313. STKCPEX EQU * STACK CPEXBLOK AND EXIT TO CALLER@VA03358 01284000
  1314. LR R1,R4 GET ADDRESS OF CPEXBLOK @VA03358 01285000
  1315. CALL DMKSTKCP STACK CPEXBLOK @VA03358 01286000
  1316. MVI MCCHFLAG,X'00' RESET MCH/CCH ENTRY FLAG @VA03358 01287000
  1317. BAL R5,RETEXIT GO EXIT TO CALLER @VA03358 01288000
  1318. SPACE 2 01289000
  1319. CHEKFULL EQU * CHECK CYLINDER FOR FULL CONDITION@VA03358 01290000
  1320. MVC WORKCYL(3),CECYL MOVE CYL AND PAGE NO. IN AREA @VA03358 01292000
  1321. SLL R7,3 CONVERT DOUBWORDS TO ACTUAL SIZE @VA03358 01293000
  1322. L R4,=V(DMKIOEES) RECORDING AREA FULL INDICATOR @V5088AA 01294100
  1323. CLI 0(R4),X'FF' IS RECORDING AREA FULL? @V5088AA 01295100
  1324. BE MSGFULL YES, GO WRITE AREA FULL MESSAGE @V5088AA 01296100
  1325. BR R5 RETURN TO IN LINE CODE @VA03358 01297000
  1326. SPACE 2 01298000
  1327. SPACE 2 01306000
  1328. WRITPAG EQU * WRITE RECORDING PAGE BACK ON DISK@VA03358 01307000
  1329. SR R3,R3 CLEAR WORK REGISTER @VA03358 01308000
  1330. C R3,IOEREALA DOES AN ADDRESS EXIST FOR PAGE @VA03358 01309000
  1331. BER R5 NO, RETURN TO IN LINE CODE @VA03358 01310000
  1332. BAL R9,REALWRT WRITE RECORDING PAGE BACK TO DISK@VA03358 01311000
  1333. BAL R3,PAGREL RELEASE VIRTUAL RECORDING PAGE @VA03358 01312000
  1334. BR R5 RETURN TO IN LINE CODE @VA03358 01313000
  1335. SPACE 2 01314000
  1336. MSG90PC EQU * HANDLE CYLINDER 90 % FULL MESSAGE@VA03358 01315000
  1337. TM FLAG90PC,ERRCYL90 WAS 90% FLAG ON? @V5088AA 01318100
  1338. BOR R4 YES, RETURN TO IN LINE CODE @VA03358 01319000
  1339. OI FLAG90PC,ERRCYL90 SET 90% FULL FLAG @V5088AA 01320100
  1340. LA R2,550 DMKIOF550E MESSAGE NUMBER @V305435 01322000
  1341. BAL R10,CALLERM WRITE ERROR MESSAGE @V305435 01323000
  1342. BR R4 RETURN TO LINE CODE @V305435 01324000
  1343. SPACE 1 01325000
  1344. SPACE 2 01334000
  1345. MSGFULL EQU * HANDLE CYLINDER FULL CONDITION @VA03358 01335000
  1346. TM MCCHFLAG,CCHFLAG IS THIS A MCH/CCH ENTRY @VA03358 01336000
  1347. BM *+8 IF MCH ENTRY, BYPASS RECORD FRET @VA07990 01338100
  1348. BAL R5,FRETRECD RELEASE STORAGE FOR CCH RECORD @VA03358 01339000
  1349. L R3,=V(DMKIOEES) GET PTR. TO AREA FULL FLAG @V5088AA 01340100
  1350. CLI 0(R3),X'FF' WAS RECORDING AREA FULL FLAG ON? @V5088AA 01341100
  1351. BE SKIPMSG YES, BYPASS SENDING MSG TO OPER. @VA03358 01342000
  1352. MVI 0(R3),X'FF' SET RECORDING AREA FULL FLAG ON @V5088AA 01343100
  1353. LA R2,551 DMKIOF551E MESSAGE NUMBER @V305435 01345000
  1354. BAL R10,CALLERM WRITE ERROR MESSAGE @V305435 01346000
  1355. SPACE 1 01347000
  1356. SKIPMSG EQU * ... @VA03358 01357000
  1357. ICM R2,15,IOEREALA GET ADDR OF REAL RECORDING PAGE @VA03358 01358000
  1358. BZ RECDQUE IF ZERO, GO CHECK QUES @VA03358 01359000
  1359. BAL R3,PAGREL RELEASE RECORDING PAGE @VA03358 01360000
  1360. B RECDQUE CHECK RECORDING QUEUES @V305435 01361000
  1361. SPACE 1 01362000
  1362. CALLERM SLR R0,R0 CLEAR LENGTH BYTE @V305435 01363000
  1363. ICM R0,B'1110',MODID+3 GET MODULE IDENTIFIER @V305435 01364000
  1364. * NOTE - R1 = TEXT INFORMATION 01365000
  1365. SLR R1,R1 NO VARIABLE TEXT @V5088AA 01365100
  1366. * R2 = MESSAGE ERROR NUMBER 01366000
  1367. ICM R2,B'1000',ERMPARM INSERT PARAMETER FLAGS @V305435 01367000
  1368. CALL DMKERMSG CALL MESSAGE WRITTER @V305435 01368000
  1369. L R1,IOEVMPAD GET RECORDING PAGE VIRTUAL ADDR @VA03358 01369000
  1370. L R2,IOEREALA GET RECORDING PAGE REAL ADDRESS @VA03358 01370000
  1371. BR R10 RETURN TO IN LINE CODE @VA03358 01371000
  1372. SPACE 2 01372000
  1373. FRETRECD EQU * RELEASE STORAGE FOR ERROR RECORD @VA03358 01373000
  1374. SRL R7,3 PUT LENGTH ON DOUBLEWORDS @VA03358 01374000
  1375. LR R0,R7 GET SIZE OF RECORD IN DOUBLEWORDS@VA03358 01375000
  1376. LTR R1,R6 IS THERE AN ERROR RECORD ADDRESS @VA03358 01376000
  1377. BZR R5 NO, RETURN TO IN LINE CODE @VA03358 01377000
  1378. CALL DMKFRET RELEASE RECORD STORAGE @VA03358 01378000
  1379. SR R6,R6 CLEAR ERROR RECORD ADDRESS @VA03358 01379000
  1380. BR R5 RETURN TO IN LINE CODE @VA03358 01380000
  1381. SPACE 2 01381000
  1382. FRETCPEX EQU * RELEASE THE CPEXBLOK @VA03358 01382000
  1383. LR R1,R4 GET ADDRESS OF CPEXBLOK @VA03358 01383000
  1384. LA R0,CPEXSIZE GET SIZE IN DOUBLEWORDS @VA03358 01384000
  1385. CALL DMKFRET RELEASE THE STORAGE @VA03358 01385000
  1386. BR R5 RETURN TO IN LINE CODE @VA03358 01386000
  1387. SPACE 2 01387000
  1388. USING ERRBLOK,R6 CHANGE ADDRESSABILITY FOR ERRBLOK@VA03757 01388000
  1389. REGSETUP EQU * GET REGS SET UP TO REFLECT BLOCK @VA03757 01389000
  1390. LR R6,R10 GET ADDRESS OF RECORD @VA03757 01390000
  1391. S R6,F4 GET BEGINNING ADDRESS @VA03757 01391000
  1392. L R7,ERRBLOK GET SIZE OF RECORD @VA03757 01392000
  1393. LA R7,4(0,R7) GET ORIGINAL SIZE @VA03757 01393000
  1394. BR R5 RETURN TO IN LINE CODE @VA03757 01394000
  1395. DROP R6 @VA03757 01395000
  1396. SPACE 2 01396000
  1397. MOVEREC EQU * MOVE RECORD INTO RECORDING PAGE @VA03358 01397000
  1398. LR R15,R7 GET LENGTH OF ERROR RECORD @VA03358 01398000
  1399. LR R14,R6 GET ADDRESS OF ERROR RECORD @VA03358 01399000
  1400. L R2,IOEREALA GET ADDRESS OF RECORDING PAGE @VA03358 01400000
  1401. LH R4,RECNXT GET INDEX TO AVAILABLE SPACE @VA03358 01401000
  1402. AR R4,R2 GET ADDRESS OF AVAILABLE SPACE @VA03358 01402000
  1403. TM MCCHFLAG,MCHFLAG IS THIS A MCH/CCH ENTRY @VA03358 01403000
  1404. BZ *+12 NO, BYPASS SAVING RECORD SIZE @VA03358 01404000
  1405. ST R7,0(,R4) SAVE LENGTH OF MCH/CCH RECORD @VA03358 01405000
  1406. LA R4,4(,R4) UPDATE PASS LENGTH FIELD @VA03358 01406000
  1407. LR R5,R15 GET LENGTH OF MOVE DATA @VA03358 01407000
  1408. MVCL R4,R14 MOVE RECORD INTO RECORDING PAGE @VA03358 01408000
  1409. BR R3 RETURN TO IN LINE CODE @VA03358 01409000
  1410. SPACE 2 01410000
  1411. SVC76FTN EQU * SVC 76 INTERFACE'S FUNCTION @VA03358 01411000
  1412. CLI CPUVERSN,X'FF' IS THIS A VIRTUAL MACHINE @VA03358 01412000
  1413. BNER R5 NO, RETURN TO IN LINE CODE @VA03358 01413000
  1414. LR R3,R6 GET ADDRESS OF ERROR RECORD @VA03358 01414000
  1415. LA R4,0(R7,R6) GET ADDRESS AT END OF RECORD @VA03358 01415000
  1416. LA R1,4 ISSUE THE FOLLOWING DIAGNOSE @VA09952 01415010
  1417. DC X'83120048' X'48' TO SWITCH ON VMCPSV76 BIT @VA09952 01415020
  1418. SVCINFAC EQU * ISSUE SVC 76 INSTRUCTION @VA03358 01416000
  1419. LA R1,4(,R3) UPDATE PASS RECORD LENGTH FIELD @VA03358 01417000
  1420. L R0,0(,R3) GET LENGTH OF ERROR RECORD @VA03358 01418000
  1421. LR R2,R0 SAVE LENGTH OF RECORD @VA03358 01419000
  1422. LCR R0,R0 GET COMPLIMENT OF LENGTH VALUE @VA03358 01420000
  1423. SVC 76 ISSUE SVC 76 @VA03358 01421000
  1424. LA R3,0(R1,R2) GET ENDING ADDR OF ERROR RECORD @VA03358 01422000
  1425. CR R3,R4 DOES ENDING ADRESSES EQUAL @VA03358 01423000
  1426. BNE SVCINFAC NO, HANDLE MDR REC FOR 3211/3203 @V386298 01424000
  1427. L R2,IOEREALA GET ADDRESS OF RECORDING PAGE @VA03358 01425000
  1428. L R1,IOEVMPAD GET ADDR OF VIRTUAL BUFFER PAGE @VA03358 01426000
  1429. B 4(R5) RETURN TO IN LINE CODE PLUS 4 @VA03358 01427000
  1430. SPACE 2 01428000
  1431. SPACE 3 01429000
  1432. USING IOERBLOK,R4 ADDRESSABILITY FOR IOERBLOK @VA03757 01430000
  1433. USING OBRRECN,R6 ADDRESSABILITY FOR OBR RECORD @VA03757 01431000
  1434. USING SDRBLOK,R9 ADDRESSABILITY FOR SDRBLOK @VA03757 01432000
  1435. USING ERRBLOK,R10 ADDRESSABILITY FOR ERRBLOK @VA03757 01433000
  1436. SPACE 01434000
  1437. *** EXECUTED MOVE INSTRUCTIONS *** 01435000
  1438. MOVESDR MVC 0(0,R14),SDRCTRS MOVE SDR COUNTERS INTO OBR @VA03757 01436000
  1439. MOVESEN MVC 0(0,R14),IOERDATA MOVE SENSE INFO INTO OBR @VA03757 01437000
  1440. CLRSDR MVC SDRCTRS+1(0),SDRCTRS RESET SDR COUNTERS @VA03757 01438000
  1441. MVESDR MVC OBRSSDR1(0),SDRCTRS MOVE COUNTERS TO SHORT OBR @VA03757 01439000
  1442. SPACE 2 01440000
  1443. OBRMDRBL EQU * TEST WHAT TO BUILD OBR OR MDR @VA03757 01441000
  1444. SWITCH SWITCH TO MAIN PROCESSOR @VA12116 01441100
  1445. LR R10,R6 GET ADDRESS OF PASSED BLOCK @VA03757 01442000
  1446. LA R10,4(0,R10) POINT TO REAL ERRBLOK @VA03757 01443000
  1447. CLI ERRBLOK,X'91' BUILD MDR RECORD ?? @VA03757 01444000
  1448. BE MDRREC YES @VA03757 01445000
  1449. OBRREC EQU * BUILD AND FORMAT OUTBOARD RECORD @VA03757 01446000
  1450. LA R4,ERRIOER GET ADDRESS OF IOERBLOK @VA03757 01447000
  1451. BAL R3,SPACE GET SPACE FOR THE OBR RECORD @VA03757 01448000
  1452. BAL R3,OBRMDRCL CLEAR OUTBOARD RECORD AREA @VA03757 01449000
  1453. MVC OBRKEYN(16),ERRKEY CLASS/SYSTEM/REL. NO./TIME @VA03757 01450000
  1454. MVC OBRCPIDN(8),CPUID SET UP CPU SERIAL NO. & ID. @VA03757 01451000
  1455. ICM R9,15,RDEVCTRS PICK UP SDRBLOK ADDRESS @VA03757 01452000
  1456. BZ BYPASS1 BRANCH IF NO SDRBLOK @VA03757 01453000
  1457. TM ERRSDR,SDRSHRT SHORT OBR TO BE WRITTEN ?? @VA03757 01454000
  1458. BO SHORTOBR YES @VA03757 01455000
  1459. BYPASS1 TM ERRIOB+3,IOBFATAL PERMANENT ERROR ?? @VA03757 01456000
  1460. BO BYPASS2 YES @VA03757 01457000
  1461. OI OBRSWSN+1,OBRTEMP TURN ON TEMPORARY FLAG @VA03757 01458000
  1462. TM ERRSDR,SDRRECD TEST FOR COUNTER OVERFLOW @VA03757 01459000
  1463. BZ BYPASS2 BR, IF NO OVERFLOW @VA03757 01460000
  1464. OI OBRSWSN+1,OBREOD COUNTER OVERFLOW RECORD @VA03757 01461000
  1465. BYPASS2 EQU * @VA03757 01462000
  1466. L R2,ERRIOB+24 GET ADDRESS OF VMBLOK ADDRESS @VA03757 01463000
  1467. LTR R2,R2 IS THIS A VALID ADDRESS? @VA14701 01463100
  1468. BZ *+10 NO, SKIP RECORDING OF USER ID @VA14701 01463200
  1469. MVC OBRPGMN(8),VMUSER-VMBLOK(R2) GET USER IDENT. @VA03757 01464000
  1470. MVC OBRCSWN(8),IOERCSW SAVE FAILING CSW @VA03757 01465000
  1471. MVC OBRFCCWN(8),ERRCCW MOVE IN FAILING CCW @VA03757 01466000
  1472. MVC OBRCUAIN+1(2),ERRIOB GET SECONDARY DEVICE ADDR @VA03757 01467000
  1473. MVC OBRCUAPR+1(2),ERRIOB GET PRIMARY DEVICE ADDRESS @VA03757 01468000
  1474. MVI OBRSDRCT,X'0A' SET STATISTICAL DATA AREA LENGTH @VA03757 01469000
  1475. OBRSENSE EQU * MOVE SENSE INFORMATION INTO REC @VA03757 01470000
  1476. LH R2,IOERLEN GET NUMBER OF SENSE BYTES @VA03757 01471000
  1477. STH R2,OBRSNSCT SAVE SENSE BYTE COUNT @VA03757 01472000
  1478. LTR R2,R2 IS SENSE BYTE COUNT ZERO ?? @VA03757 01473000
  1479. BZ *+6 YES, BYPASS SUBTRACTING ONE @VA03757 01474000
  1480. BCTR R2,R0 SUBTRACT ONE FOR EXECUTE INST. @VA03757 01475000
  1481. CLI RDEVTYPC,CLASDASD IS THIS A DASD DEVICE CLASS @VA03757 01476000
  1482. BNE OBRTAPE NO, CHECK FOR TAPE DEVICE @VA03757 01477000
  1483. SPACE 01478000
  1484. OBRDASD EQU * DASD TYPE DEVICE @VA03757 01479000
  1485. MVI OBRDDCNT,X'03' NO. OF DOUBLEWORDS FOR DEP. AREA @VA03757 01480000
  1486. MVC OBRVOLN(6),ERRVOLID GET THE VOLID LABEL @VA03757 01481000
  1487. MVC OBRHAN+2(4),IOERADR+4 GET HOME ADDRESS @VA03757 01482000
  1488. MVC OBRLSKN+3(4),IOERADR GET LAST SEEK ADDRESS @VA03757 01483000
  1489. TM RDEVFTR,FTREXTSN EXTENDED SENSE DASD ??? @VA03757 01484000
  1490. BO OBRNSDR YES, GO MOVE SENSE DATA INTO REC @VA03757 01485000
  1491. BAL R3,MVSDRSEN MOVE SDR AND SENSE INFO @VA03757 01486000
  1492. IC R2,IOERDATA+4 GET PHYSICAL DRIVE ADDRESS @VA03757 01487000
  1493. N R2,F15 SAVE 4 LOW ORDER BITS @VA04586 01488000
  1494. B OBRPRDEV GET THE PRIMARY DEVICE ADDRESS @VA03757 01489000
  1495. OBRNSDR EQU * SDR COUNTER AREA NOT AVAILABLE @VA03757 01490000
  1496. MVI OBRSDRCT,X'00' CLEAR SDR LENGTH FIELD @VA03757 01491000
  1497. MVC OBRIORTY(2),ERRIOB+18 GET RETRY COUNT @VA03757 01492000
  1498. BAL R3,MVSDRSEN MOVE SDR AND SENSE INFO @VA03757 01493000
  1499. IC R2,IOERDATA+4 GET PHYSICAL DRIVE ADDRESS @VA03757 01494000
  1500. CLI RDEVTYPE,TYP3330 IS DASD A 3330 DEVICE ?? @VA03757 01495000
  1501. BNER R5 NO, (TRUE IOB ADDR) RETURN @VA04586 01496000
  1502. TM OBR33SNS+2,X'08' TEST FOR EMULATED 3330 DEVICE @VA04586 01497000
  1503. BOR R5 YES,ADDRESS OK - RETURN @VA11982 01498010
  1504. BLDPHA N R2,F7 ZAP ALL BUT THREE LOW BITS @VA04586 01500000
  1505. TM OBR33SNS+4,X'40' IS THIS 2ND OR 4TH CONTROL UNIT@VA04586 01501000
  1506. BNO OBRPRDEV IF NOT, BRANCH @VA04586 01502000
  1507. A R2,F8 BUMP ADDRESS IF 2ND OR 4TH @VA04586 01503000
  1508. * CONTROL UNIT 01504000
  1509. OBRPRDEV EQU * FIND PRIMARY DEVICE ADDRESS @VA03757 01505000
  1510. LH R14,ERRIOB GET LOGICAL DEVICE ADDRESS @VA03757 01506000
  1511. N R14,=X'0000FFF0' CLEAR LOW ORDER FOUR BITS @VA03757 01507000
  1512. OR R14,R2 GET PRIMARY DEVICE ADDRESS @VA03757 01508000
  1513. STCM R14,7,OBRCUAPR PUT PRIMARY ADDRESS IN RECORD @VA03757 01509000
  1514. BR R5 RETURN TO IN LINE CODE @VA03757 01510000
  1515. SPACE 1 01511000
  1516. * CODE DISABLED BY VM11982. REMAIN FOR FUTURE DEVELOPMENT. 01511100
  1517. EMULCODE LA R14,1 INITIAL SHIFT COUNTER @VA03757 01512000
  1518. LR R15,R2 OBTAIN 1 OF 8 CODE (EMUL 3330) @VA03757 01513000
  1519. SHIFT SRA R15,1 START TO COUNT NO OF SHIFTS @VA03757 01514000
  1520. BZ EMULDONE FINISHED SHIFT COUNT @VA03757 01515000
  1521. LA R14,1(0,R14) INCREASE SHIFT COUNT BY ONE @VA03757 01516000
  1522. B SHIFT CONTINUE TO COUNT 1 OF 8 CODE @VA03757 01517000
  1523. EMULDONE LA R15,7 INITIALIZE TO CREATE 3 OF 6 CODE @VA03757 01518000
  1524. MR R14,R14 CREATE 3 OF 6 CODE @VA03757 01519000
  1525. LR R2,R15 CONTINUE WITH 3 OF 6 CODE @VA03757 01520000
  1526. BR R3 RETURN TO DEVICE ADDRESS PROCESS @VA03757 01521000
  1527. SPACE 01522000
  1528. OBRTAPE EQU * DETERMINE TYPE OF TAPE DEVICE @VA03757 01523000
  1529. CLI RDEVTYPC,CLASTAPE IS THIS A TAPE CLASS @VA03757 01524000
  1530. BNE OBRUNRX NO, CHECK FOR UNIT RECORD DEVICE @VA03757 01525000
  1531. CH R2,=H'23' IF THE SENSE IS NOT 24 MAKE IT HRC105DK 01525100
  1532. BNH OBRTAPE2 HRC105DK 01525200
  1533. LA R2,24 MAKE IT 24 HRC105DK 01525300
  1534. STH R2,OBRSNSCT SAVE SENSE BYTE COUNT HRC105DK 01525400
  1535. BCTR R2,0 FOR LATER HRC105DK 01525500
  1536. OBRTAPE2 EQU * HRC105DK 01525600
  1537. MVC OBRVOLN(6),ERRVOLID GET THE VOLID LABEL @VA03757 01526000
  1538. MVI OBRDDCNT,X'01' NO. OF DWORDS IN DEPENDENT AREA @VA03757 01527000
  1539. TM RDEVTYPE,TYP3410+TYP3420 3400 TAPE SERIES @VA03757 01528000
  1540. BZ COMMOVE NO, MUST BE 2400 TAPE SERIES @VA03757 01529000
  1541. MVI OBRDDCNT,X'03' NO. OF DWORDS IN DEPENDENT AREA @VA03757 01530000
  1542. MVI OBRSDRCT,X'14' SET THE LENGTH OF SDR AREA @VA03757 01531000
  1543. B COMMOVE MOVE SDR AND SENSE INTO RECORD @VA03757 01532000
  1544. SPACE 1 01533000
  1545. OBRUNRX EQU * MOVE SENSE DATA AFTER SDR DATA @VA03757 01534000
  1546. TM RDEVTYPC,CLASGRAF+CLASTERM+CLASSPEC CHK CLASSES @VA03757 01535000
  1547. BNZ COMMOVE YES, MOVE SDR AND SENSE INTO REC @VA03757 01536000
  1548. TM RDEVTYPE,TYP3211 IS IT A 3203/3211 PRINTER?? @V386298 01537000
  1549. BO MOVE3211 YES--HANDLE SPECIAL @V386298 01538000
  1550. CLI RDEVTYPE,TYP3505 IS THIS A 3505 DEVICE @VA03757 01539000
  1551. BNE COMMOVE NO, MOVE SDR AND SENSE INTO REC @VA03757 01540000
  1552. MVI OBRSDRCT,X'00' CLEAR SDR LENGTH FIELD @VA03757 01541000
  1553. B COMMOVE MOVE JUST SENSE INFO INTO REC @VA03757 01542000
  1554. SPACE 1 01543000
  1555. MOVE3211 EQU * BUILD 3211/3203 MDR REC @V386298 01544000
  1556. MVI OBRDDCNT,X'01' DATA COUNT IS ONE DOUBLEWORD @VA03757 01545000
  1557. LH R15,IOEREXT IS THERE AN EXTENSION TO IOERBLOK@VA03757 01546000
  1558. LTR R15,R15 ... @VA03757 01547000
  1559. BNZ OBRMDR YES, BUILD MDR RECORD FOR 3211 @VA03757 01548000
  1560. * OR 3203 PRINTER 01548100
  1561. SPACE 01549000
  1562. COMMOVE EQU * COMMON MOVE ENTRY @VA03757 01550000
  1563. BAL R3,MVSDRSEN MOVE SDR AND SENSE INTO RECORD @VA03757 01551000
  1564. BR R5 RETURN TO IN LINE CODE @VA03757 01552000
  1565. EJECT 01553000
  1566. *********************************************************** 01554000
  1567. * MOVE SDR COUNTERS AND SENSE * 01555000
  1568. * INFORMATION INTO RECORD * 01556000
  1569. SPACE 01557000
  1570. *** SET UP WORK REGS *** 01558000
  1571. SPACE 01559000
  1572. MVSDRSEN EQU * @VA03757 01560000
  1573. LR R14,R6 MOVE OBR ADDR TO WORKREG @VA03757 01561000
  1574. SLR R7,R7 CLEAR IT @VA03757 01562000
  1575. IC R7,OBRDDCNT GET DEVICE DEPENDENT LENGTH @VA03757 01563000
  1576. SLL R7,3 CONVERT LENGTH TO BYTES @VA03757 01564000
  1577. LA R7,X'40'(,R7) INCREMENT TO SDR AREA @VA03757 01565000
  1578. AR R14,R7 UPDATE OBR RECORD BASE @VA03757 01566000
  1579. SPACE 2 01567000
  1580. *** SET UP FOR SDR AREA *** 01568000
  1581. SPACE 01569000
  1582. ICM R7,1,OBRSDRCT GET SDR LENGTH @VA03757 01570000
  1583. BZ NOSDR BRANCH IF SDR COUNTERS DO NOT @VA03757 01571000
  1584. * EXIST FOR THIS DEVICE CLASS 01572000
  1585. LTR R9,R9 ANY COUNTERS FOR THIS DEVICE ? @VA03757 01573000
  1586. BZ NOSDRNOW BR IF NONE,MOVE JUST SENSE TO OBR@VA03757 01574000
  1587. BCTR R7,R0 SUBTRACT ONE FOR EXECUTE INSTR. @VA03757 01575000
  1588. EX R7,MOVESDR GO MOVE SDR COUNTERS @VA03757 01576000
  1589. LA R14,1(,R14) ADD ONE TO OBR REG @VA03757 01577000
  1590. AR R14,R7 FINISH ADDING SDR LGTH TO OBR REG@VA03757 01578000
  1591. EX R2,MOVESEN GO MOVE SENSE INTO OBR @VA03757 01579000
  1592. SPACE 2 01580000
  1593. *** CLEAR SDR COUNTERS AND FLAGS 01581000
  1594. SPACE 01582000
  1595. LTR R9,R9 ANY SDRBLOK ?? @VA03757 01583000
  1596. BZR R3 NO, FORGET CLEARING IT @VA03757 01584000
  1597. IC R7,OBRSDRCT GET SIZE OF SDR WORK AREA @VA03757 01585000
  1598. BCTR R7,R0 *** SUBTRACT TWO *** @VA03757 01586000
  1599. CLEARSHT BCTR R7,R0 *** FOR EXECUTE MOVE *** @VA03757 01587000
  1600. MVI SDRCTRS,ZERO SET UP FOR RESET @VA03757 01588000
  1601. EX R7,CLRSDR GO RESET SDR COUNTERS @VA03757 01589000
  1602. MVI SDRFLAGS,X'00' CLEAR SDR FLAGS @VA03757 01590000
  1603. BR R3 RETURN TO SUBROUTINE @VA03757 01591000
  1604. SPACE 2 01592000
  1605. * NO SDR INFORMATION, FINISH OBR BY MOVING JUST SENSE 01593000
  1606. SPACE 01594000
  1607. NOSDRNOW AR R14,R7 ADD SDR LENGTH TO OBR BASE @VA03757 01595000
  1608. NOSDR EX R2,MOVESEN GO MOVE SENSE INTO OBR @VA03757 01596000
  1609. BR R3 RETURN TO SUBROUTINE @VA03757 01597000
  1610. SPACE 2 01598000
  1611. * ROUTINE TO BUILD SHORT OBR , DONE AT SDR COUNTER 01599000
  1612. * OVERFLOW , SHUTDOWN AND VARY OFFLINE COMMAND 01600000
  1613. SPACE 01601000
  1614. SHORTOBR EQU * @VA03757 01602000
  1615. OI OBRSWSN+1,OBRTEMP+OBRSHOBR TURN ON SHORT AND @VA03757 01603000
  1616. * TEMPORARY OBR FLAGS 01604000
  1617. MVC OBRSDRSH(4),SDRLNGTH MOVE LENGTH OF SDR @VA03757 01605000
  1618. * COUNTERS AND CUA 01606000
  1619. SLR R7,R7 CLEAR WORK REG @VA03757 01607000
  1620. IC R7,SDRLNGTH GET SDR COUNTERS LENGTH @VA03757 01608000
  1621. BCTR R7,R0 SUBTRACT ONE FOR EXECUTED MOVE @VA03757 01609000
  1622. EX R7,MVESDR GO MOVE SDR COUNTERS INTO OBR @VA03757 01610000
  1623. BAL R3,CLEARSHT OK LETS RESET THE SDRBLOK @VA03757 01611000
  1624. BR R5 RETURN FROM WHENCE WE CAME @VA03757 01612000
  1625. SPACE 2 01613000
  1626. OBRMDR EQU * BUILD MDR FOR 3211/3203 ERROR @V386298 01614000
  1627. MVC OBRCORL(1),ERRCORR SAVE CORRELATION NUMBER @VA03757 01615000
  1628. OI OBRSWSN,X'80' TURN ON MULTIPE RECORD FLAG @VA03757 01616000
  1629. BAL R3,MVSDRSEN MOVE SDR AND SENSE INTO RECORD @VA03757 01617000
  1630. LA R2,RECDLEN GET LENGTH OF OBR RECORD @VA03757 01618000
  1631. ST R2,0(,R1) SAVE LENGTH OF OBR RECORD IN REC @VA03757 01619000
  1632. LA R6,LENGOBR(,R1) GET ADDRESS OF AVAILABLE AREA @VA03757 01620000
  1633. USING TNSREC,R6 SET UP ADDRESSABILITY FOR MDR @VA03757 01621000
  1634. TM XOBRFLAG,XOBRT1+XOBRT3 TEST FOR TYPE 1 & 3 MDR @VA03757 01622000
  1635. BZ MDRREC2 NO, MUST BE TYPE 2 MDR RECORD @VA03757 01623000
  1636. BO MDRREC1 YES, BUILD TYPE 1 & 3 MDR RECORDS@VA03757 01624000
  1637. TM XOBRFLAG,XOBRT1 IS THIS A TYPE 1 MDR RECORD @VA03757 01625000
  1638. BO MDRREC1 YES, BUILD TYPE 1 MDR RECORD @VA03757 01626000
  1639. MDRREC3 EQU * BUILD & FORMAT TYPE 3 MDR RECORD @VA03757 01627000
  1640. LA R2,TYP3SIZE GET SIZE OF TYPE 3 MDR RECORD @VA03757 01628000
  1641. BAL R3,MDR3211 FORMAT HEADER FOR MDR RECORD @VA03757 01629000
  1642. MVI TNSDEVAD+3,X'03' INSERT 3211/3203 BUFFER TYPE @V386298 01630000
  1643. CLI RDEVTYPE,TYP3203 IS IT A 3203 PRINTER?? @V386298 01630100
  1644. BE MDR33203 YES--HANDLE TYPE 3 MDR RECORD @V386298 01630200
  1645. MVC TNSDEVAD+4(150),XOBR150 MOVE PRINT LINE BUFFER @VA03757 01631000
  1646. MVC TNSDEVAD+154(10),XOBR010 INTO MDR RECORD @VA03757 01632000
  1647. BR R5 RETURN TO IN LINE CODE @VA03757 01633000
  1648. MDR33203 MVC TNSDEVAD+4(132),XOBR150 MOVE 3203 PLB @V386298 01633100
  1649. MVC TNSDEVAD+136(10),XOBR010 1ST 10 EROR CHAR @V386298 01633200
  1650. BR R5 RETURN TO IN LINE CODE @V386298 01633300
  1651. SPACE 1 01634000
  1652. MDRREC2 EQU * BUILD & FORMAT TYPE 2 MDR RECORD @VA03757 01635000
  1653. LA R2,TYP2SIZE GET SIZE OF TYPE 2 MDR RECORD @VA03757 01636000
  1654. BAL R3,MDR3211 FORMAT HEADER FOR MDR RECORD @VA03757 01637000
  1655. MVI TNSDEVAD+3,X'02' INSERT 3211/3203 BUFFER TYPE @V386298 01638000
  1656. MVC TNSDEVAD+4(180),XOBR180 FORM CONTRL BUFFER (FCB)@VA03757 01639000
  1657. BR R5 RETURN TO IN LINE CODE @VA03757 01640000
  1658. SPACE 1 01641000
  1659. MDRREC1 EQU * BUILD & FORMAT TYPE 1 MDR RECORD @VA03757 01642000
  1660. LA R2,TYP1SIZE GET SIZE OF TYPE 1 MDR RECORD @VA03757 01643000
  1661. BAL R3,MDR3211 FORMAT HEADER FOR MDR RECORD @VA03757 01644000
  1662. MVI TNSDEVAD+3,X'01' INSERT 3211/3203 BUFFER TYPE @V386298 01645000
  1663. MVC TNSDEVAD+4(256),XOBR512 MOVE UNIVERSAL CHAR. SET@VA03757 01646000
  1664. CLI RDEVTYPE,TYP3203 IS IT A 3203 PRINTER?? @V386298 01646100
  1665. BE MDR13203 YES--HANDLE TYPE 1 MDR RECORD @V386298 01646200
  1666. MVC TNSDEVAD+260(256),XOBR512+256 BUFFER INTO RECORD@VA03757 01647000
  1667. B CHMDR1N3 GO CHECK MDR RECORDS 1 & 3 @V386298 01647100
  1668. MDR13203 MVC TNSDEVAD+260(148),XOBR512+256 INTO RECORD @V386298 01647200
  1669. CHMDR1N3 EQU * @V386298 01647300
  1670. TM XOBRFLAG,XOBRT1+XOBRT3 IS THIS TYPE 1 & 3 MDR @VA03757 01648000
  1671. BNOR R5 NO, RETURN TO IN LINE CODE @VA03757 01649000
  1672. LA R6,0(R2,R6) UPDATE TO NEXT AVAILABLE AREA @VA03757 01650000
  1673. BAL R3,MDRREC3 GO BUILD TYPE 3 MDR RECORD @VA03757 01651000
  1674. SPACE 2 01652000
  1675. MDR3211 EQU * SET UP HEADER FOR MDR RECORD @VA03757 01653000
  1676. S R2,F4 SUBTRACT LENGTH FIELD FROM SIZE @VA03757 01654000
  1677. ST R2,0(,R6) SAVE LENGTH OF MDR RECORD @VA03757 01655000
  1678. LA R6,4(R6) UPDATE PASS LENGTH FIELD @VA03757 01656000
  1679. MVC TNSREC(24),4(R1) MOVE OBR HEADER INTO MDR HEADER@VA03757 01657000
  1680. MVI TNSKEYN,X'91' INDICATE MDR CLASS TYPE @VA03757 01658000
  1681. MVI TNSSWS3,X'04' SET 3211/3203 PRINTER FLAG @V386298 01659000
  1682. MVC TNSDEVAD(2),ERRIOB MOVE DEVICE ADDR INTO REC @VA03757 01660000
  1683. MVC TNSDEVAD+2(1),ERRCORR PUT CORRELATION CT. IN REC@VA03757 01661000
  1684. BR R3 RETURN TO IN LINE CODE @VA03757 01662000
  1685. SPACE 2 01663000
  1686. MDRREC EQU * BUILD MISCELLANEOUS DATA RECORD @VA03757 01664000
  1687. LA R4,ERRMIOER GET ADDRESS OF FIRST IOERBLOK @VA03757 01665000
  1688. BAL R3,GETSPACE GET SPACE FOR THE MDR RECORD @VA03757 01666000
  1689. USING TNSREC,R6 SETUP ADDRESSABILITY FOR MDR REC @VA03757 01667000
  1690. BAL R3,OBRMDRCL CLEAR MISCELLANEOUS DATA RECORD @VA03757 01668000
  1691. MVC TNSKEYN(16),ERRKEY CLASS/SYSTEM/REL. NO./TIME @VA03757 01669000
  1692. MVC TNSCPIDN(8),CPUID SET UP CPU SERIAL NO. & IDENT.@VA03757 01670000
  1693. MVI TNSSWS3,X'03' SET 3270 REMOTE STATION FLAG @VA03757 01671000
  1694. CLI RDEVTYPC,CLASTERM IS THIS A REMOTE BISYNC LINE @VA03757 01672000
  1695. BE MDRCONTK YES, MOVE DEVICE DEPENDENT DATA @VA03757 01673000
  1696. TM RDEVTYPC,CLASURO IS IT A 3800 PRINTER ? @V60B9BA 01673100
  1697. BZ MDRREC4 XFER IF NOT @V60B9BA 01673200
  1698. CLI RDEVTYPE,TYP3800 IS IT REALLY A 3800? @V60B9BA 01673300
  1699. BNE MDRREC4 XFER IF NOT @V60B9BA 01673400
  1700. MVI TNSSWS3,X'0C' 3800 DEVICE TYPE @V60B9BA 01673500
  1701. MVC TNSDEVAD(2),ERRMIOB DEVICE ADDRESS @V60B9BA 01673600
  1702. MVC TNS3800(136),IOERDATA ENVIRONMENTAL DATA @VA09396 01673750
  1703. BR R5 RETURN TO INLINE CODE @V60B9BA 01673800
  1704. MDRREC4 MVI TNSSWS3,X'05' SET 3705 TERMINAL FLAG @V60B9BA 01674000
  1705. CLI RDEVTYPC,CLASDASD IS THIS A DASD DEVICE CLASS @VA03757 01675000
  1706. BNE MDRCONTK NO, MOVE 3705 DEPENDENT DATA @VA03757 01676000
  1707. MVI TNSSWS3,X'09' SET 3340 DEVICE TYPE FLAG @VA03757 01677000
  1708. CLI RDEVTYPE,TYP3340 IS THIS A 3340 DEVICE TYPE @VA03757 01678000
  1709. BE MDRDASD YES, GET DEVICE ADDRESS @VA03757 01679000
  1710. MVI TNSSWS3,X'11' INDICATE 3350 TYPE @VA03757 01680000
  1711. CLI RDEVTYPE,TYP3350 IS THIS A 3350 ?? @VA03757 01681000
  1712. BE MDRDASD YES , BRANCH @VA03757 01682000
  1713. MVI TNSSWS3,X'01' SET 3330 DEVICE TYPE FLAG @VA03757 01683000
  1714. CLI RDEVTYPE,TYP2305 IS THIS A 2305 DEVICE TYPE @VA03757 01684000
  1715. BE MDR2305 YES, SET UP DEVICE TYPE FOR 2305 @VA03757 01685000
  1716. CLI RDEVMDL,X'0B' IS THIS A 3330 MODEL 11 DEVICE @VA03757 01686000
  1717. BNE MDRDASD NO, MUST BE 3330 DEVICE @VA03757 01687000
  1718. MVI TNSSWS3,X'0A' SET 3330-11 DEVICE TYPE FLAG @VA03757 01688000
  1719. B MDRDASD GET DEVICE ADDRESS @VA03757 01689000
  1720. MDR2305 EQU * GET CORRECT DEVICE TYPE @VA03757 01690000
  1721. MVI TNSSWS3,X'02' SET 2305 MODEL 2 DEVICE TYPE FLAG@VA03757 01691000
  1722. TM RDEVMDL,X'01' IS THIS A 2305 MODEL 1 DEVICE @VA03757 01692000
  1723. BZ MDRDASD NO, GET DEVICE ADDRESS @VA03757 01693000
  1724. OI TNSSWS3,X'10' SET 2305 MODEL 1 DEVICE TYPE FLAG@VA03757 01694000
  1725. MDRDASD EQU * MOVE DASD DEPENDENT DATA INTO REC@VA03757 01695000
  1726. MVC TNSDEVAD(2),ERRMIOB PUT DEVICE ADDRESS IN REC @VA03757 01696000
  1727. MVC TNSVOLID(6),IOERVSER MOVE IN VOLUME SERIAL NO. @VA03757 01697000
  1728. CLI RDEVTYPE,TYP2305 IS THIS A 2305 DEVICE TYPE @VA03757 01698000
  1729. BNE MDR33SEN NO, GET 3330 SENSE INFORMATION @VA03757 01699000
  1730. MVC TNSVOLID(128),IOERDATA GET ENVIRONMENTAL DATA @VA03757 01700000
  1731. BR R5 RETURN TO IN LINE CODE @VA03757 01701000
  1732. SPACE 1 01702000
  1733. MDR33SEN EQU * MOVE DEPENDENT DATA INTO RECORD @VA03757 01703000
  1734. LA R3,TNSSNS1 GET ADDRESS OF DEPENDENT AREA @VA03757 01704000
  1735. LR R2,R4 GET ADDRESS OF IOERBLOK @VA03757 01705000
  1736. MDRMOVE EQU * ... @VA03757 01706000
  1737. LH R15,IOERLEN-IOERBLOK(R2) GET IOERBLOK EXT. SIZE @VA03757 01707000
  1738. BCTR R15,R0 SUBTRACT ONE - EXECUTE INST. @VA03757 01708000
  1739. EX R15,MOVENV MOVE DATA INTO RECORD @VA03757 01709000
  1740. CLC 0(4,R2),ZEROES ANY MORE IOERBLOKS TO PROCESS @VA03757 01710000
  1741. BE MDRDEVTY NO, GO CHECK IF DEVICE ADDRESS OK@VA03757 01711000
  1742. LA R3,1(R15,R3) UPDATE DEPENDENT AREA POINTER @VA03757 01712000
  1743. LA R15,IOERSIZE GET SIZE OF IOERBLOK @VA03757 01713000
  1744. AH R15,IOEREXT-IOERBLOK(R2) ADD TO IT EXT SIZE @VA03757 01714000
  1745. SLL R15,3 CONVERT TO BYTES @VA03757 01715000
  1746. AR R2,R15 POINT TO NEXT IOERBLOK @VA03757 01716000
  1747. B MDRMOVE GO MOVE DATA FROM NEXT IOERBLOK @VA03757 01717000
  1748. MDRDEVTY SR R2,R2 CLEAR OUT A WORK REG @VA06173 01718100
  1749. IC R2,TNSSNS1+4 GET THE DRIVE ID BYTE @VA06173 01718200
  1750. TM RDEVTYPE,TYP3340+TYP3350 1 OF 8 DEVICE TYPE ?? @VA03757 01720000
  1751. BNZR R5 YES, DEVICE ADDRESS OK, RETURN @VA03757 01721000
  1752. CLI RDEVTYPE,TYP3330 IS DASD A 3330 DEVICE ?? @VA03757 01722000
  1753. BNE MDRDEV NO, BYPASS 3330 EMULATION TEST @VA03757 01723000
  1754. TM TNSSNS1+2,X'08' TEST FOR EMULATED 3330 DEV @VA03757 01724000
  1755. BOR R5 YES, ADDRESS OK - RETURN @VA11982 01725010
  1756. MDRPHA N R2,F7 ISOLATE 3-BIT ID @VA05891 01727100
  1757. TM TNSSNS1+4,X'40' 2ND OR 4TH CU ?? @VA05891 01727200
  1758. BNO MDRDEV IF NOT, BRANCH @VA04586 01728000
  1759. A R2,F8 BUMP ADDRESS IF 2ND OR 4TH @VA04586 01729000
  1760. * CONTROL UNIT 01730000
  1761. MDRDEV EQU * @VA04586 01731000
  1762. LH R3,ERRMIOB GET LOGICAL DEVICE ADDRESS @VA04586 01732000
  1763. N R3,=X'0000FFF0' CLEAR MODULE/DRIVE ID. @VA03757 01733000
  1764. OR R3,R2 GET PHYSICAL DEVICE ADDRESS @VA03757 01734000
  1765. STCM R3,3,TNSDEVAD SAVE PHYSICAL ADDRESS IN MDR REC @VA03757 01735000
  1766. BR R5 RETURN TO IN LINE CODE @VA03757 01736000
  1767. SPACE 1 01737000
  1768. MOVENV MVC 0(0,R3),IOERDATA-IOERBLOK(R2) MOVE DATA INTO REC@VA03757 01738000
  1769. SPACE 1 01739000
  1770. MDRCONTK EQU * MOVE DEPENDENT DATA FROM CONTASK @VA03757 01740000
  1771. SR R2,R2 CLEAR WORK REG @VA03757 01741000
  1772. LH R2,ERRCCNT GET LENGTH OF DEPENDENT BUFFER @VA03757 01742000
  1773. BCTR R2,R0 SUBTRACT ONE - EXECUTE INST. @VA03757 01743000
  1774. EX R2,MOVCONT MOVE BUFFER INTO MDR RECORD @VA03757 01744000
  1775. BR R5 RETURN TO IN LINE CODE @VA03757 01745000
  1776. SPACE 1 01746000
  1777. MOVCONT MVC 24(0,R6),ERRCONT MOVE BUFFER INTO MDR RECORD @VA03757 01747000
  1778. SPACE 2 01748000
  1779. SPACE EQU * GET SIZE AND STORAGE FOR OBR REC @VA03757 01749000
  1780. USING SDRBLOK,R9 ADDRESSABILITY FOR SDRBLOK @VA03757 01750000
  1781. LA R1,LENGOBR GET SIZE OF OBR RECORD @VA03757 01751000
  1782. ICM R9,15,RDEVCTRS PICK UP SDRBLOK @VA03757 01752000
  1783. BZ BYPASS03 BRANCH IF NO SDRBLOK @VA03757 01753000
  1784. TM ERRSDR,SDRSHRT SHORT OBR ?? @VA03757 01754000
  1785. BZ BYPASS03 NO, ITS A LONG OBR @VA03757 01755000
  1786. IC R1,SDRLNGTH GET LENGTH OF SDR COUNTERS @VA03757 01756000
  1787. LA R1,36(,R1) ADD OBR HEADER SIZE @VA03757 01757000
  1788. B CONVDWD GO CONVERT TO DOUBLEWORDS @VA03757 01758000
  1789. BYPASS03 EQU * @VA03757 01759000
  1790. CLC RDEVTYPC(2),P3203 IS IT A 3203 PRINTER?? @V386298 01759100
  1791. BE EXTNDLEN YES--GO GET LEN OF EXTNSN BLOK @V386298 01759600
  1792. CLC RDEVTYPC(2),P3211 IS THIS A 3211 (PRINTER) @VA03757 01760000
  1793. BNE CONVDWD NO, CONVERT LENGTH TO DOUBLEWORDS@VA03757 01761000
  1794. EXTNDLEN EQU * @V386298 01761500
  1795. LH R15,IOEREXT GET LENGTH OF EXTENSION BLOCK @VA03757 01762000
  1796. LTR R15,R15 IS THE EXTENSION LENGTH ZERO @VA03757 01763000
  1797. BZ CONVDWD YES, CONVERT LENGTH TO DWORDS @VA03757 01764000
  1798. LA R1,TYP2SIZE+LENGOBR GET SIZE OF TYPE 2 MDR REC. @VA03757 01765000
  1799. TM XOBRFLAG,XOBRT1+XOBRT3 IS THIS TYPE 1 & 3 MDR @VA03757 01766000
  1800. BZ CONVDWD YES, GO CONVERT TO DOUBLEWORDS @VA03757 01767000
  1801. LA R1,TYP1SIZE+TYP3SIZE+LENGOBR SIZE OF TYPE 1 & 3 @VA03757 01768000
  1802. BO CONVDWD GO CONVERT TO DOUBLEWORDS @VA03757 01769000
  1803. LA R1,TYP1SIZE+LENGOBR GET SIZE OF TYPE 1 MDR REC. @VA03757 01770000
  1804. TM XOBRFLAG,XOBRT1 IS THIS A TYPE 1 MDR RECORD @VA03757 01771000
  1805. BO CONVDWD YES, GO CONVERT TO DOUBLEWORDS @VA03757 01772000
  1806. LA R1,TYP3SIZE+LENGOBR GET SIZE OF TYPE 3 MDR REC. @VA03757 01773000
  1807. BAL R2,CONVDWD GO CONVERT LENGTH TO DOUBLEWORDS @VA03757 01774000
  1808. DROP R9 @VA03757 01775000
  1809. SPACE 2 01776000
  1810. GETSPACE EQU * GET SPACE FOR MDR RECORD @VA03757 01777000
  1811. TM RDEVTYPC,CLASURO IS IT A 3800 PRINTER ? @V60B9BA 01777100
  1812. BZ GTSP2 XFER IF NOT @V60B9BA 01777200
  1813. CLI RDEVTYPE,TYP3800 IS IT REALLY A 3800? @V60B9BA 01777300
  1814. BNE GTSP2 XFER IF NOT @V60B9BA 01777400
  1815. LA R1,172 LENGTH OF 3800 MDR RECD @V60B9BA 01777500
  1816. B CONVDWD CONVERT TO DOUBLE WORDS @V60B9BA 01777600
  1817. GTSP2 CLI RDEVTYPC,CLASDASD IS THIS A DASD DEVICE CLASS @V60B9BA 01778000
  1818. BE STGDASD YES, GET SPACE FOR DASD RECORD @VA03757 01779000
  1819. LA R1,28 LENGTH OF HEADER & LENGTH FIELD @VA03757 01780000
  1820. AH R1,ERRCCNT ADD BUFFER LENGTH TO HEADER @VA03757 01781000
  1821. B CONVDWD GO CONVERT LENGTH TO DOUBLEWORDS @VA03757 01782000
  1822. SPACE 1 01783000
  1823. STGDASD EQU * GET SPACE FOR DASD MDR RECORD @VA03757 01784000
  1824. LA R1,128+(TNSVOLID-TNSREC) GET SIZE OF 2305 MDR @VA09736 01785010
  1825. CLI RDEVTYPE,TYP2305 IS THIS A 2305 DEVICE TYPE @VA03757 01786000
  1826. BE CONVDWD YES, CONVERT LENGTH TO DWORDS @VA03757 01787000
  1827. LA R1,36 LENGTH OF HEADER & LENGTH FIELD @VA03757 01788000
  1828. LR R7,R4 GET CURRENT IOERBLOK POINTER @VA03757 01789000
  1829. DEPSTG EQU * GET LENGTH OF DEPENDENT DATA @VA03757 01790000
  1830. AH R1,IOERLEN-IOERBLOK(R7) ADD LENGTH OF EXTENSION @VA03757 01791000
  1831. ICM R6,15,IOERPNT-IOERBLOK(R7) PTR. TO NEXT IOERBLOK@VA03757 01792000
  1832. BZ CONVDWD NO MORE IOERBLOKS, GO GET BLOK @VA03757 01793000
  1833. LA R6,IOERSIZE IOERBLOK SIZE IN DOUBLEWORDS @VA03757 01794000
  1834. AH R6,IOEREXT-IOERBLOK(R7) ADD EXTENTION SIZE @VA03757 01795000
  1835. SLL R6,3 CONVERT TO BYTES @VA03757 01796000
  1836. AR R7,R6 IOER POINTER NOW UPDATED TO NEXT @VA03757 01797000
  1837. B DEPSTG CONTINUE COMPUTING SIZE @VA03757 01798000
  1838. CONVDWD EQU * CONVERT LENGTH TO DOUBLEWORDS @VA03757 01799000
  1839. A R1,F7 UPDATE BY ONE DOUBLEWORD @VA03757 01800000
  1840. SRL R1,3 GET NUMBER OF DOUBLEWORDS @VA03757 01801000
  1841. CALLFRE EQU * @VA03757 01802000
  1842. LR R0,R1 ... @VA03757 01803000
  1843. CALL DMKFREE GET STORAGE FOR MDR RECORD @VA03757 01804000
  1844. BR R3 RETURN TO IN LINE CODE @VA03757 01805000
  1845. SPACE 2 01806000
  1846. OBRMDRCL EQU * CLEAR OBR/MDR RECORD AREA @VA03757 01807000
  1847. LR R7,R0 LENGTH IN DOUBLEWORDS OF RECORD @VA03757 01808000
  1848. SLL R7,3 GET ACTUAL LENGTH OF RECORD @VA03757 01809000
  1849. S R7,F4 SUBTRACT LENGTH FIELD FROM SIZE @VA03757 01810000
  1850. ST R7,0(,R1) SAVE LENGTH OF RECORD IN RECORD @VA03757 01811000
  1851. LA R6,4(,R1) GET ADDRESS OF RECORD BUILD AREA @VA03757 01812000
  1852. BCTR R7,R0 SUBTRACT TWO BYTES FROM SIZE, @VA03757 01813000
  1853. BCTR R7,R0 BECAUSE OF EXECUTE INSTRUCTION @VA03757 01814000
  1854. MVI 0(R6),X'00' SET FIRST BYTE IN RECORD TO ZERO @VA03757 01815000
  1855. C R7,F255 DOES COUNT EXCEEDS 255 @VA03757 01816000
  1856. BNH *+8 NO, BYPASS SETTING COUNT TO 255 @VA03757 01817000
  1857. LA R7,255 SET COUNT VALUE TO MAXIMUM @VA03757 01818000
  1858. EX R7,OBMDRCLR CLEAR OBR/MDR RECORD AREA @VA03757 01819000
  1859. BR R3 RETURN TO IN LINE CODE @VA03757 01820000
  1860. SPACE 1 01821000
  1861. OBMDRCLR MVC 1(0,R6),0(R6) CLEAR OBR/MDR RECORD AREA @VA03757 01822000
  1862. SPACE 2 01823000
  1863. IOEREALA DC F'00' REAL ADDRESS OF RECORDING PAGE @VA03358 01824000
  1864. IOEVMPAD DC F'00' ADDRESS OF VIRTUAL MEMORY PAGE @VA03358 01825000
  1865. CECYL DC H'00' OBR/MDR CYLINDER NO. FOR PAGING @VA03358 01826000
  1866. CEPAGE DC X'01' OBR/MDR PAGE NO. (INITIALIZE 1) @VA03358 01827000
  1867. CECYLTYP DC X'00' OBR/MDR SYSRES DEVICE TYPE @VA03358 01828000
  1868. * NOTE: WORKCYL AND WORKPAGE MUST REMAIN CONTIGUOUS @V5088AA 01828100
  1869. WORKCYL DC H'00' WORK CYLINDER NUMBER FOR PAGING @VA03358 01832000
  1870. WORKPAGE DC X'01' WORK PAGE NO. (INITIALIZE 1) @VA03358 01833000
  1871. WORKTYP DC X'00' WORK SYSRES DEVICE TYPE @VA03358 01834000
  1872. MAXPAGE DC X'00' NO. OF PAGES (MAX) ON A CYLINDER @VA03358 01835000
  1873. PAGNOUPD DC F'00' SAVE UPDATED PAGE NUMBER @VA11472 01836010
  1874. * NOTE: AREA90PC, LASTCYL, AND PAG90PC MUST REMAIN CONTIGUOUS @V5088AA 01836100
  1875. AREA90PC DS 0H CCP VALUE OF 90% FULL MARK OF @V5088AA 01836200
  1876. * ERROR RECORDING AREA @V5088AA 01836300
  1877. LASTCYL DC H'0000' CYL ADDRESS OF RECORDING AREA END@V5088AA 01836400
  1878. PAG90PC DC X'00' NO. OF PAGES (90 % FULL) ON A CYL@VA03358 01837000
  1879. FLAG90PC DC X'00' FLAG FOR 90 % CYL FULL CONDITION @VA03358 01838000
  1880. MCCHFLAG DC X'00' MCH/CCH ENTRY INDICATOR @VA03358 01839000
  1881. SPACE 1 01840000
  1882. MCHFLAG EQU X'80' MCH ENTRY FLAG @VA03358 01841000
  1883. CCHFLAG EQU X'C0' CCH ENTRY FLAG @VA03358 01842000
  1884. ERRCYL90 EQU X'80' 90% FULL FLAG FOR RECORDING AREA @V5088AA 01843100
  1885. SPACE 1 01845000
  1886. INITFMT DC X'00088000FFFFFFFF' INITIALIZE CONTROL HEADER @VA03358 01846000
  1887. SPACE 1 01847000
  1888. DS 0F @VA03757 01848000
  1889. ANDMASK DC X'00000011' @VA03757 01849000
  1890. P3211 DC X'1042' 3211 PRINTER @VA03757 01850000
  1891. P3203 DC X'1043' 3203 PRINTER @V386298 01850100
  1892. BITABL DC X'8040201008040201' MASK TABLE @VA03757 01851000
  1893. PARMLST EQU * @VA03757 01852000
  1894. PARMBSC DC X'04040102030506073FFF' @VA03757 01853000
  1895. PARMCNS DC X'0F0F0102033FFF' @VA03757 01854000
  1896. PARMCNS1 EQU PARMBSC @VA03757 01855000
  1897. PARMGRF DC X'04040F02030F06073FFF' @VA03757 01856000
  1898. PARMDAS DC X'0404010203050607200F2223240F163FFF' @VA03757 01857000
  1899. PARMTAP1 DC X'0F0F1F101F301F311F331F3405320F0F0F0F0F0F' @VA03757 01858000
  1900. PARMCNT DC X'525455560F810F8384850F0F0F0F0F0F1F360240FF' @VA03757 01859000
  1901. PARMTAP2 DC X'0F0F1F101F301F311F331F34053237430F0F0F0F' @VA03757 01860000
  1902. PARMCNT1 DC X'5254555680810F83848586870F910F0F1F360240FF' @VA03757 01861000
  1903. PARMRSE DC X'04040102033FFF' @VA03757 01862000
  1904. PARMRSE1 DC X'0404010203063FFF' @VA03757 01863000
  1905. PARMRSE2 DC X'0F04010203053FFF' @VA03757 01864000
  1906. PARMRSE3 DC X'0F040102033FFF' @VA03757 01865000
  1907. PARMRSE4 DC X'04040F020305060F101112130F153FFF' @VA03757 01866000
  1908. ERMPARM DC X'B0' PARM=OPERATOR+ALARM+RETURN @V305435 01867000
  1909. D2311 EQU X'11' 2311 DASD DEVICE @V304498 01868000
  1910. D2303 EQU X'03' 2303 DASD DEVICE @V304498 01869000
  1911. D2301 EQU X'01' 2301 DASD DEVICE @V304498 01870000
  1912. ZERO EQU 00 @VA03757 01871000
  1913. ONE EQU 01 @VA03757 01872000
  1914. DATCHK EQU 04 @VA03757 01873000
  1915. SDRCNTLN EQU 10 @VA03757 01874000
  1916. FIFTEEN EQU 15 @VA03757 01875000
  1917. SDRCTLN1 EQU 20 @VA03757 01876000
  1918. RECDLEN EQU 132 LENGTH OF OBR RECORD @VA03757 01877000
  1919. LENGOBR EQU 136 SIZE OF OBR RECORD & LENGTH FIELD@VA03757 01878000
  1920. TYP3SIZE EQU 200 SIZE TYPE3 3211/3203 MDR @V386298 01879000
  1921. TYP2SIZE EQU 216 SIZE TYPE2 3211/3203 MDR @V386298 01880000
  1922. OVFLMSK EQU 240 @VA03757 01881000
  1923. FULLBYTE EQU 255 @VA03757 01882000
  1924. FOXES EQU FULLBYTE @VA03757 01883000
  1925. TYP1SIZE EQU 552 SIZE TYPE1 3211/3203 MDR @V386298 01884000
  1926. EJECT 01885000
  1927. LTORG @VA03358 01886000
  1928. EJECT 01887000
  1929. COPY OBRRECN @VA03358 01888000
  1930. COPY IOBLOKS @VA03757 01889000
  1931. COPY IOER @VA03757 01890000
  1932. EJECT 01891000
  1933. COPY ERRBLOK @VA03757 01892000
  1934. EJECT 01893000
  1935. COPY SDRBLOK @VA03757 01894000
  1936. COPY TNSREC @VA03757 01895000
  1937. COPY VMBLOK @VA03757 01896000
  1938. COPY RECPAG @VA03358 01897000
  1939. COPY DEVTYPES @VA03358 01898000
  1940. COPY EQU @VA03358 01899000
  1941. COPY RBLOKS @VA03358 01900000
  1942. PSA @VA03358 01901000
  1943. COPY SAVE @VA03358 01902000
  1944. END 01903000