Table of Contents

DMKIOH Source

References

Source Listing

DMKIOH.ASSEMBLE.txt
  1. IOH TITLE 'DMKIOH (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 00002000
  3. *. 00003000
  4. * MODULE NAME - DMKIOH 00004000
  5. * 00005000
  6. * 00006000
  7. * FUNCTION - 00007000
  8. * PAGABLE FRAME RECORD INITIALIZATION MODULE. CALLED AT 00008000
  9. * CP INITIALIZATION TIME IF THE ERROR RECORDING CYLINDERS 00009000
  10. * HAVE BEEN FORMATTED. IF RUNNING ON A 303X PROCESSOR, 00010000
  11. * DMKIOH WILL READ FRAMES FROM ALL SRF DEVICES SPECIFIED 00011000
  12. * ON THE 'SRF=' KEYWORD OF THE RIOGEN MACRO; THE 00012000
  13. * FRAMES WILL BE FORMATTED AS RECORDS AND WRITTEN 00013000
  14. * TO THE BEGINNING OF THE VM/370 ERROR RECORDING 00014000
  15. * CYLINDERS. 00015000
  16. * DMKIOH IS ALSO CALLED DURING CPEREP 'CLEARF' PROCESSING 00016000
  17. * TO REINITIALIZE FRAME RECORDS WHEN RUNNING ON A 303X 00017000
  18. * PROCESSOR. 00018000
  19. * 00019000
  20. * ATTRIBUTES - 00020000
  21. * PAGABLE,SERIAL-REUSABLE,CALLED BY DMKIOGF1 VIA SVC. 00021000
  22. * 00022000
  23. * 00023000
  24. * ENTRY POINTS - 00024000
  25. * 00025000
  26. * DMKIOHFR - TO READ FRAMES FROM THE SRF DEVICE OF 00026000
  27. * A 3033/3032/3031 PROCESSOR AND FORMAT 00027000
  28. * THEM AS RECORDS ON THE RECORDING CYLS 00028000
  29. * 00029000
  30. * ENTRY CONDITIONS - 00030000
  31. * DMKIOHFR - NONE 00031000
  32. * 00032000
  33. * EXIT CONDITIONS - RETURN TO CALLER. 00033000
  34. * 00034000
  35. * CALLS TO OTHER ROUTINES - 00035000
  36. * DMKPGTVG - TO GET VIRTUAL PAGES. 00036000
  37. * DMKPGTVR - TO RELEASE VIRTUAL PAGES. 00037000
  38. * DMKQCNWT - TO WRITE MSGS. TO THE OPERATOR. 00038000
  39. * DMKRPAGT - TO READ A PAGE INTO CORE. 00039000
  40. * DMKRPAPT - TO WRITE A PAGE TO RECORDING CYLINDER. 00040000
  41. * DMKERMSG - TO WRITE OUT ERROR MESSAGES 00041000
  42. * DMKPTRLK - TO LOCK A PAGE. 00042000
  43. * DMKPTRUL - TO UNLOCK A PAGE. 00043000
  44. * 00044000
  45. * EXTERNAL REFERENCES - 00045000
  46. * DMKIOERP - 'RECORDING IN PROCESS' SWITCH. 00046000
  47. * DMKIOEEP - RECORDING AREA IN-CORE POINTER (CCP). 00047000
  48. * DMKIOEMX - MAXIMUM NO. OF PAGES PER CYL . 00048000
  49. * DMKIOENI - 90 FULL PAGE CNT ON IPL DEV TYP. 00049000
  50. * DMKIOEES - 'RECORDING AREA FULL' FLAG. 00050000
  51. * DMKIOEHS - DASD START OF ERROR RECORDS ON 00051000
  52. * RECORDING CYLINDERS (CCPD FORMAT). 00052000
  53. * DMKIOEFR - 'FRAME RECORDS ON CYLINDERS' FLAG. 00053000
  54. * DMKIOGCE - 'CECYL' VALUE TO PASS BACK TO DMKIOGF1. 00054000
  55. * 00055000
  56. * REGISTER USAGE - 00056000
  57. * GPR0 SCRATCH 00057000
  58. * GPR1 VIRTUAL ADDRESS OF BUFFER PAGE 00058000
  59. * GPR2 REAL ADDRESS OF BUFFER PAGE 00059000
  60. * GPR3-7 SCRATCH 00060000
  61. * GPR8 RDEVBLOK POINTER 00061000
  62. * GPR9 SCRATCH 00062000
  63. * GPR10 IOBLOK POINTER 00063000
  64. * GPR11 VMBLOK POINTER 00064000
  65. * GPR12 BASE 00065000
  66. * GPR13 SAVE AREA POINTER 00066000
  67. * GPR14-15 LINK REGS 00067000
  68. * 00068000
  69. * NOTES - 00069000
  70. * IF DMKIOH FINDS THAT WE ARE NOT PROCESSING ON A 303X 00070000
  71. * PROCESSOR, RETURN IS MADE IMMEDIATELY TO CALLER. 00071000
  72. * 00072000
  73. * THIS MODULE WAS SPLIT FROM DMKIOG IN RELEASE 6. 00073000
  74. * 00074000
  75. * OPERATION - DMKIOHFR 00075000
  76. * 00076000
  77. * 1. CHECK FOR ANY SRF DEVICES BY EXAMINING THE LIST 00077000
  78. * LOCATED BY DMKRIOSF. IF NONE, WRITE MESSAGE TO 00078000
  79. * OPERATOR AND RETURN TO DMKIOGF1 AT STEP 18. 00079000
  80. * CALL DMKFREE TO OBTAIN SPACE FOR AN IOBLOK 00080000
  81. * PLUS CCW'S, AND INITIALIZE THE IOBLOK. 00081000
  82. * 2. PREPARE TO READ FRAMES: 00082000
  83. * - CALL DMKFREE TO OBTAIN SPACE FOR A 2K 00083000
  84. * BUFFER 00084000
  85. * - BUILD A STANDARD RECORD HEADER TO BE USED 00085000
  86. * IN CONSTRUCTING ALL FRAME RECORDS 00086000
  87. * 3. CALL DMKPGTVG TO OBTAIN A VIRTUAL PAGE TO USE 00087000
  88. * IN CONSTRUCTING BLOCKED FRAME RECORDS. 00088000
  89. * 4. CALL DMKRPAGT AND DMKPTRLK TO BRING THE FIRST 00089000
  90. * RECORDING PAGE INTO STORAGE AND LOCK IT THERE. 00090000
  91. * IF AN ERROR OCCURS ON THIS READ OPERATION, 00091000
  92. * DISABLE RECORDING AND RETURN TO DMKIOGF1. 00092000
  93. * 5. ISSUE 'ENABLE' COMMAND TO THE FIRST SRF. IF THE 00093000
  94. * SRF IS INACCESSIBLE (OR IF IT WAS NOT SYS GEN'ED) 00094000
  95. * WRITE ERROR MESSAGE TO THE OPERATOR AND GO TO 00095000
  96. * STEP 11 TO CHECK FOR ANOTHER SRF. 00096000
  97. * 6. IF THE SRF IS AVAILABLE, ISSUE A 'VERBAGE' COMMAND TO 00097000
  98. * THE SRF TO INDICATE THAT CPU FRAMES ARE TO BE READ, 00098000
  99. * FOLLOWED BY A 'RDVERB' COMMAND TO OBTAIN THE 00099000
  100. * FIRST CPU FRAME. 00100000
  101. * 7. MOVE THE FRAME TO THE RECORDING PAGE AS 00101000
  102. * FOLLOWS: 00102000
  103. * - MOVE THE LENGTH OF THE FRAME RECORD 00103000
  104. * (LENGTH OF HEADER + LENGTH OF FRAME) INTO 00104000
  105. * THE 1ST FULLWORD OF THE RECORD 00105000
  106. * - MOVE THE 24-BYTE STANDARD RECORD HEADER 00106000
  107. * - MOVE THE FRAME 00107000
  108. * - UPDATE THE INDEX IN THE PAGE HEADER TO 00108000
  109. * THE NEXT AVAILABLE FREE SPACE IN THE PAGE 00109000
  110. * WHEN THE PAGE IS FULL, WRITE IT BACK TO THE 00110000
  111. * RECORDING CYLINDERS, AND READ IN THE NEXT 00111000
  112. * RECORDING PAGE TO CONTINUE THE FRAME RECORD 00112000
  113. * CONSTRUCTION. 00113000
  114. * 8. CONTINUE READING FROM THE SRF UNTIL ONE OF 00114000
  115. * THE FOLLOWING OCCURS: 00115000
  116. * (A) CHANNEL END, DEVICE END, UNIT EXCEPTION 00116000
  117. * STATUS RECEIVED - END OF CPU FRAMES; GO 00117000
  118. * TO STEP 9 TO READ DIRECTOR FRAMES NOW. 00118000
  119. * (B) MORE THAN 50 CPU FRAMES READ - WRITE 00119000
  120. * ERROR MESSAGE TO OPERATOR; CONTINUE TO 00120000
  121. * FORMAT AS IF ONLY 50 FRAMES READ. 00121000
  122. * (C) ERROR STATUS (NON-CE,DE) RECEIVED FROM 00122000
  123. * RDVERB - IF ANY FRAME RECORDS ARE ON 00123000
  124. * THE RECORDING CYLS, TURN ON FRMLAST IN 00124000
  125. * LAST FRAME RECORD WRITTEN, SET DMKIOEFR 00125000
  126. * TO INDICATE FRAMES PRESENT, AND GO TO 00126000
  127. * STEP 11 TO CLEAN UP. IF NO FRAME RECORDS HAVE 00127000
  128. * BEEN WRITTEN TO THE RECORDING CYLINDERS, 00128000
  129. * GO TO STEP 11. 00129000
  130. * 9. ISSUE A 'VERBAGE' COMMAND TO THE SRF TO 00130000
  131. * RETRIEVE DIRECTOR FRAMES. PROCEED AS IN STEPS 00131000
  132. * 6-8, EXCEPT WHEN CE,DE,UE STATUS IS DETECTED, 00132000
  133. * GO TO STEP 10. 00133000
  134. * 10. TURN ON 'LAST FRAME' FLAG IN THE LAST FRAME 00134000
  135. * RECORD WRITTEN. SET DMKIOEFR TO INDICATE FRAME 00135000
  136. * RECORDS EXIST ON THE RECORDING CYLINDERS. 00136000
  137. * 11. IF THIS IS THE LAST SRF DEVICE IN THE 00137000
  138. * LIST, INDICATE THIS RECORDING PAGE 00138000
  139. * IS FULL (TO PREVENT ERROR RECORDS FROM BEING 00139000
  140. * PLACED ON THE SAME PAGE WITH FRAME RECORDS), 00140000
  141. * AND WRITE THE PAGE BACK TO THE RECORDING 00141000
  142. * CYLINDERS. 00142000
  143. * 12. ISSUE A 'DISABLE' COMMAND TO DETACH FROM THE SRF. 00143000
  144. * CHECK FOR ANOTHER SRF DEVICE BY EXAMINING THE LIST 00144000
  145. * LOCATED BY DMKRIOSF. IF NO MORE SRF'S, GO TO 00145000
  146. * STEP 13. IF ANOTHER SRF IS FOUND, RETURN TO 00146000
  147. * STEP 5 TO ATTEMPT TO READ FRAMES FROM THIS SRF. 00147000
  148. * 13. CALCULATE DMKIOEHS VALUE FOR USE BY CPEREP 00148000
  149. * PROCESSING. THIS FIELD IS THE DASD START OF 00149000
  150. * THE ERROR RECORDS (I.E., FIRST RECORDING PAGE 00150000
  151. * AFTER ALL FRAME RECORDS) IN CCPD FORMAT. 00151000
  152. * 14. CALL DMKPGTVR TO FREE THE VIRTUAL PAGE 00152000
  153. * GOTTEN IN STEP 3. 00153000
  154. * 15. CALL DMKFRET TO RELEASE THE IOBLOK, CCW'S, 00154000
  155. * AND 2K BUFFER SPACE. 00155000
  156. * 16. RETURN TO DMKIOGF1 AT STEP 18. 00156000
  157. * 00157000
  158. * 00158000
  159. * MESSAGES - 00159000
  160. * 00160000
  161. * DMKIOH551E ERROR RECORDING AREA FULL; RUN CPEREP 00161000
  162. * 00162000
  163. * DMKIOH558I FATAL I/O ERROR; ERROR RECORDING DISABLED 00163000
  164. * 00164000
  165. * DMKIOH550I ERROR RECORDING AREA 90 PERCENT FULL; RUN CPEREP 00165000
  166. * 00166000
  167. * DMKIOH559W SRF 'ADDR' NOT ACCESSIBLE; FRAMES NOT ON ERROR 00167000
  168. * CYLINDERS 00168000
  169. * 00169000
  170. * DMKIOH560W ERRORS ON SRF 'ADDR'; FRAMES NOT ON ERROR 00170000
  171. * CYLINDERS 00171000
  172. * 00172000
  173. * DMKIOH561W MORE THAN 50 MCH OR CCH FRAMES WERE READ 00173000
  174. * FROM SRF 'ADDR' 00174000
  175. * 00175000
  176. *. 00176000
  177. COPY OPTIONS @V407510 00177000
  178. EJECT 00178000
  179. DMKIOH CSECT 00179000
  180. MODULEID DC CL8'DMKIOH' 00180000
  181. EXTRN DMKPGTVG 00181000
  182. EXTRN DMKPGTVR,DMKRPAPT,DMKRPAGT 00182000
  183. EXTRN DMKIOERP 00183000
  184. EXTRN DMKERMSG @V305435 00184000
  185. EXTRN DMKIOEFR @V5088AA 00185000
  186. EXTRN DMKIOECT @V5088AA 00186000
  187. EXTRN DMKIOEES @V5088AA 00187000
  188. EXTRN DMKIOEHS @V5088AA 00188000
  189. EXTRN DMKIOEEP @V5088AA 00189000
  190. EXTRN DMKRIOSF @V5088AA 00190000
  191. EXTRN DMKRIODV @V5088AA 00191000
  192. EXTRN DMKPTRLK @V5088AA 00192000
  193. EXTRN DMKIOEMX 00193000
  194. EXTRN DMKIOENI 00194000
  195. EXTRN DMKPTRAN @V407510 00195000
  196. EXTRN DMKIOSQR @V5088AA 00196000
  197. EXTRN DMKPTRUL @V5088AA 00197000
  198. EXTRN DMKCVTAB @V5088AA 00198000
  199. EXTRN DMKCVTBH @V60B7AA 00199000
  200. EXTRN DMKSCNRU @VA13122 00199500
  201. EXTRN DMKIOECE @VA10241 00200100
  202. EXTRN DMKIOEIF @VA10241 00200200
  203. USING VMBLOK,R11 00202000
  204. USING PSA,R0 00203000
  205. USING SAVEAREA,R13 00204000
  206. USING *,R12 00205000
  207. SPACE 3 00206000
  208. DMKIOHFR RELOC @V5088AA 00207000
  209. L R10,AMCHAREA ADDRESS OF MCH AREA @V5088AA 00208000
  210. USING MCHAREA,R10 ADDRESSABILITY FOR MCH AREA @V5088AA 00209000
  211. CLI MCHMODEL,MOD3033 ARE WE PROCESSING ON A 3033/ @V5088AA 00210000
  212. * 3032/3031 PROCESSOR? (WE COULD 00211000
  213. * HAVE GOTTEN HERE IF A CLEARF WAS 00212000
  214. * SPECIFIED ON A PROCESSOR OTHER 00213000
  215. * THAN A 303X.) 00214000
  216. BE MOD303X CONTINUE IF ON A 303X PROCESSOR @V5088AA 00215000
  217. EXIT RETURN TO CALLER @V5088AA 00216000
  218. DROP R10 @V5088AA 00217000
  219. MOD303X MVI INFOFLAG,X'00' INITIALIZE INDICATORS TO ZERO @V60B7AA 00218000
  220. XC IOEREALP(4),IOEREALP CLEAR OUT ADDRESS FIELD @V60B7AA 00219000
  221. LA R0,BLOKSIZE SIZE OF IOBLOK AND CCW'S @V5088AA 00220000
  222. CALL DMKFREE GET SPACE FOR IOBLOK AND CCW'S @V5088AA 00221000
  223. LR R10,R1 SAVE ADDRESS IN IOBLOK BASE @V5088AA 00222000
  224. MVC SRFADDR(DEVADDSZ),BLANKADD BLANK OUT SRF ADDR. @V60B7AA 00223000
  225. XC SRFCOUNT(4),SRFCOUNT ZERO COUNT OF SRF DEVICES @V60B7AA 00224000
  226. L R1,=V(DMKRIOSF) ADDRESS OF SRF RDEVBLOK LIST @V60B7AA 00225000
  227. LTR R1,R1 IS THERE AN SRF RDEVBLOK? @VMD0148 00226000
  228. BZ NOSRF NO, ERROR -- SRF NOT GEN'ED @V5088AA 00227000
  229. L R8,0(R1) ACCESS COUNT OF SRF DEVICES @V60B7AA 00228000
  230. LTR R8,R8 WERE ANY SRFS SPECIFIED IN RIOGEN@V60B7AA 00229000
  231. BZ NOSRF NO SRF DEVICES SPECIFIED @V60B7AA 00230000
  232. LA R8,1(R8) INCREMENT SRFCOUNT BY ONE SO THAT@V60B7AA 00231000
  233. * FIRST PASS THRU 'NEXTSRF' LOOP WILL 00232000
  234. * BE ACCURATE.(SRFCOUNT IS DECREMENTED 00233000
  235. * AT BEGINNING OF THE LOOP.) 00234000
  236. ST R8,SRFCOUNT SAVE COUNT OF SRF DEVICES @V60B7AA 00235000
  237. ST R1,CURRSRF SAVE ADDRESS OF CURRENT ENTRY IN @V60B7AA 00236000
  238. * LIST 00237000
  239. USING IOBLOK,R10 @V5088AA 00238000
  240. XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR WHOLE IOBLOK @V5088AA 00239000
  241. MVC ENABLE(40),ENABCCW MOVE 'ENABLE', 'RDCPUID', @V60B7AA 00240000
  242. * 'VERBAGE', 'RDVERB', AND 'DISABLE' 00241000
  243. * COMMANDS INTO CHANNEL PROGRAM. 00242000
  244. LA R2,CPUIDENT ADDRESS OF BUFFER WHERE RDCPUID @V60B7AA 00243000
  245. * IS TO PUT CPU ID 00244000
  246. STCM R2,B'0111',CPUIDBUF PUT ADDRESS IN CCW @V60B7AA 00245000
  247. LA R2,ENABLE ADDRESS OF CHANNEL PROGRAM @V5088AA 00246000
  248. ST R2,IOBCAW SAVE IN IOBLOK @V5088AA 00247000
  249. ST R10,IOBLINK IN CASE NEW IOB GETS CHAINED 1ST @V5088AA 00248000
  250. ST R11,IOBUSER CURRENT VMBLOK ADDRESS @VMD0148 00249000
  251. ************************************************************** 00250000
  252. * BUILD A STANDARD RECORD HEADER TO BE USED FOR ALL * 00251000
  253. * FRAME RECORDS. * 00252000
  254. ************************************************************** 00253000
  255. LA R3,STDHDR ADDRESS OF STANDARD RECORD HDR @V5088AA 00254000
  256. USING FRAMEHDR,R3 @V5088AA 00255000
  257. MVI FRMTYPE,CPUTYPE RECORD TYPE IS CPU RECORD @V5088AA 00256000
  258. MVI FRMCNT,X'00' INITIALIZE RECORD SEQUENCE NUMBER@VA07860 00257000
  259. * 00258000
  260. * GET DATE AND TIME VALUE. ALL FRAME RECORDS MUST HAVE 00259000
  261. * THE SAME DATE AND TIME IN THEIR HEADERS. 00260000
  262. STCK OSDATE GET DATE AND TIME VALUES @V5088AA 00261000
  263. BC 12,CLOCKOK CLOCK FUNCTIONING OK @V5088AA 00262000
  264. GOTO DMKCVTAB CLOCK DAMAGED--ABEND CVT001 @V5088AA 00263000
  265. CLOCKOK LM R4,R5,OSDATE GET CLOCK VALUE @V5088AA 00264000
  266. SRDL R4,12 SHIFT DOWN FOR ADJUST @V5088AA 00265000
  267. L R14,=V(DMKSYSTZ) @ OF GMT DIFFERENCE @V5088AA 00266000
  268. L R15,0(,R14) GET GMT DIFFERENCE @V5088AA 00267000
  269. LCR R15,R15 MAKE VALUE POSITIVE @V5088AA 00268000
  270. SR R14,R14 CLEAR WORK REGISTER @V5088AA 00269000
  271. M R14,=F'1000000' CONVERT GMT DIFF. TO MICROSECS. @V5088AA 00270000
  272. SLR R5,R15 ADJUST TIME VALUE @V5088AA 00271000
  273. BC 11,*+8 BRANCH NOT MINUS @V5088AA 00272000
  274. SL R4,F1 @V5088AA 00273000
  275. SLR R4,R14 GET TIME VALUE @V5088AA 00274000
  276. SLDL R4,12 SHIFT IT BACK @V5088AA 00275000
  277. STM R4,R5,FRMDATE SAVE CLOCK VALUE IN HEADER @V5088AA 00276000
  278. MVC FRMCPID(8),CPUID CPU ID AND MCEL LENGTH -- CPU @V5088AA 00277000
  279. * SERIAL NUMBER AND MODEL NUMBER WILL 00278000
  280. * BE OVERLAYED BY DATA FROM RDCPUID 00279000
  281. * COMMAND. 00280000
  282. DROP R3 @V5088AA 00281000
  283. SPACE 00282000
  284. ************************************************************** 00283000
  285. * OBTAIN BUFFERS TO BE USED TO READ FROM * 00284000
  286. * AND TO WRITE TO THE ERROR RECORDING CYLINDERS * 00285000
  287. ************************************************************** 00286000
  288. LA R0,FRAMSIZE SIZE OF 2K BUFFER IN D'WORDS @V60B7AA 00287000
  289. CALL DMKFREE GET A 2K BUFFER TO READ FRAMES @V60B7AA 00288000
  290. STCM R1,B'0111',RDVBUFF SAVE BUFFER @ IN RDVERB CCW @V60B7AA 00289000
  291. L R2,=V(DMKSYSER) ADDRESS OF START OF REC. AREA @V5088AA 00290000
  292. LH R2,0(R2) GET 'CC' PART OF AREA ADDRESS @V5088AA 00291000
  293. STH R2,WORKCYL SAVE IN CURRENT 'CC' VALUE @V5088AA 00292000
  294. MVI WORKPAGE,X'01' WANT 1ST PAGE OF RECORDING AREA @V5088AA 00293000
  295. L R3,=V(DMKIOETY) POINTER TO DEVICE TYPE OF @V60B7AA 00294000
  296. * SYSRES DEVICE 00295000
  297. IC R3,0(R3) RETRIEVE THE DEVICE TYPE @V60B7AA 00296000
  298. STC R3,WORKTYP SAVE TYPE IN WORK 'CCPD' VALUE @V60B7AA 00297000
  299. CALL DMKPGTVG GET A VIRTUAL PAGE ADDRESS @V5088AA 00298000
  300. ST R1,IOEVMPAG SAVE THE VIRTUAL PAGE ADDRESS @V5088AA 00299000
  301. L R0,WORKCYL 'CCPD' OF RECORD @V5088AA 00300000
  302. CALL DMKRPAGT,PARM=(SYSTEM+BRING),AFFINITY BRING IN @V5088AA 00301000
  303. * FIRST PAGE 00302000
  304. BC 8,REALRDOK NO ERROR-- CONTINUE @V5088AA 00303000
  305. BAL R9,DISABREC ERROR--GO DISABLE RECORDING @V5088AA 00304000
  306. B NEXTSRF CLEAN UP AND RETURN @V5088AA 00305000
  307. REALRDOK CALL DMKPTRLK LOCK PAGE IN @V5088AA 00306000
  308. ST R2,IOEREALP SAVE REAL ADDRESS OF PAGE @V5088AA 00307000
  309. USING RECPAG,R2 BASE FOR RECORDING PAGE @V5088AA 00308000
  310. MVI RECFLAG1,RECPAGFA THIS PAGE CONTAINS FRAME RECS.@V5088AA 00309000
  311. DROP R2 00310000
  312. XC FRAMECTR(2),FRAMECTR INITIALIZE COUNTER TO 0 @V5088AA 00311000
  313. SPACE 00312000
  314. * CALCULATE VALUES TO BE USED TO DETERMINE IF THE 00313000
  315. * ERROR RECORDING AREA IS FULL OR 90% FULL. 00314000
  316. LH R2,WORKCYL STARTING CYL. OF ERROR REC. AREA @V60B7AA 00315000
  317. L R3,=V(DMKSYSCT) ADDRESS OF COUNT OF ERROR CYLS. @V60B7AA 00316000
  318. LH R3,0(R3) GET COUNT OF ERROR CYLINDERS @V60B7AA 00317000
  319. AR R3,R2 ADD COUNT TO STARTING CYLINDER @V60B7AA 00318000
  320. BCTR R3,0 SUBTRACT ONE TO GET ENDING CYL. @V60B7AA 00319000
  321. STH R3,LASTCYL SAVE ENDING CYLINDER NUMBER @V60B7AA 00320000
  322. STH R3,MAXCYL SAVE ENDING CYLINDER NUMBER @V60B7AA 00321000
  323. L R3,=V(DMKIOEMX) ADDR. OF NUMBER OF PAGES PER CYL@V60B7AA 00322000
  324. IC R3,0(R3) GET NUMBER OF PAGES PER CYLINDER @V60B7AA 00323000
  325. STC R3,MAXPAGE SAVE MAX. NUMBER OF PAGES PER CYL@V60B7AA 00324000
  326. L R3,=V(DMKIOENI) ADDR. OF 90% FULL LIMIT @V60B7AA 00325000
  327. IC R3,0(R3) GET VALUE FOR 90% OF 1 CYL FULL @V60B7AA 00326000
  328. STC R3,PAGE90PC SAVE VALUE FOR LATER USE @V60B7AA 00327000
  329. B NEXTSRF EQUIVALENT OF 'DO WHILE' LOOP TO @V60B7AA 00328000
  330. * HANDLE ALL SRF DEVICES 00329000
  331. SPACE 00330000
  332. ************************************************************** 00331000
  333. * LOOP THROUGH SRFS READING FRAMES * 00332000
  334. ************************************************************** 00333000
  335. SRFLOOP MVI FIRSTRET,X'00' INITIALIZE RETURN COUNTER TO 0 @V60B7AA 00334000
  336. ST R11,IOSSAVE SAVE VMBLOK ADDRESS @V5088AA 00335000
  337. STM R13,R9,IOSSAVE+4 SAVE REGS ACROSS CALL TO IOSQR @V5088AA 00336000
  338. CALL DMKIOSQR GO ISSUE 'ENABLE' TO SRF @V5088AA 00337000
  339. GOTO DMKDSPCH GO 'WAIT' FOR ENABLE TO COMPLETE @V5088AA 00338000
  340. ENABRTRN EQU * @V5088AA 00339000
  341. USING *,R12 @V5088AA 00340000
  342. SL R12,=A(*-DMKIOH) RE-ESTABLISH ADDRESSABILITY-- @V5088AA 00341000
  343. * R12 CONTAINS ADDRESS OF IOBIRA 00342000
  344. USING DMKIOH,R12 @V5088AA 00343000
  345. L R11,IOSSAVE RESTORE VMBLOK ADDRESS @V5088AA 00344000
  346. LM R13,R9,IOSSAVE+4 RESTORE REGISTER VALUES @V5088AA 00345000
  347. TM IOBSTAT,IOBFATAL+IOBCC2 FATAL I/O ERROR, OR CC2?@V5088AA 00346000
  348. BNZ NOSRF2 SRF NOT AVAILABLE IF SO @V60B7AA 00347000
  349. TM IOBCSW+4,X'D3' IS CE (OR CE+CUE) ON BY ITSELF? @V5088AA 00348000
  350. BNZ NOSRF2 NO, MUST BE SOME EXCEPTION @V60B7AA 00349000
  351. CLI IOBCSW+5,X'00' IS THERE ANY BAD CHANNEL STATUS? @V5088AA 00350000
  352. BNE NOSRF2 ERROR IF SO @V60B7AA 00351000
  353. TM IOBCSW+4,CE+DE CHANNEL END & DEVICE END? @V5088AA 00352000
  354. BO ENABOK YES, GOOD @V5088AA 00353000
  355. CLI FIRSTRET,X'00' FIRST RETURN FROM DISPATCHER? @V5088AA 00354000
  356. BNE ENRTRN2 NO, GO SEE IF DEVICE END NOW @V5088AA 00355000
  357. MVI FIRSTRET,X'01' INDICATE THIS IS FIRST RETURN @V5088AA 00356000
  358. LR R1,R10 ADDRESS OF COPIED IOB TO FRET @V5088AA 00357000
  359. LA R0,IOBSIZE LENGTH OF COPIED IOB TO FRET @V5088AA 00358000
  360. CALL DMKFRET FREE UP THE COPIED IOBLOK @V5088AA 00359000
  361. GOTO DMKDSPCH GO WAIT FOR UNIT STATUS @V5088AA 00360000
  362. ENRTRN2 TM IOBCSW+4,DE DEVICE END RECEIVED? @V5088AA 00361000
  363. BZ NOSRF2 ONLY GOOD IF HAVE RECEIVED BOTH @V60B7AA 00362000
  364. * CE AND DE 00363000
  365. ************************************************************** 00364000
  366. * SRF IS AVAILABLE. SET UP TO READ FRAMES. * 00365000
  367. ************************************************************** 00366000
  368. ENABOK EQU * @V5088AA 00367000
  369. SR R4,R4 CLEAR OUT INCREMENT REGISTER @V60B7AA 00368000
  370. SR R2,R2 CLEAR OUT REG TO BUILD CPU SERIAL@V60B7AA 00369000
  371. BUILDSER SR R3,R3 CLEAR OUT SHIFT REGISTER @V60B7AA 00370000
  372. IC R3,CPUIDENT(R4) INSERT NEXT CHARACTER OF CPU @V60B7AA 00371000
  373. * SERIAL RETURNED BY RDCPUID COMMAND 00372000
  374. SLL R3,28 REMOVE THE LEADING 4 BITS OF ZERO@V60B7AA 00373000
  375. SLDL R2,4 SAVE THE SIGNIFICANT 4 BITS @V60B7AA 00374000
  376. LA R4,1(R4) INCREMENT TO POINT TO NEXT BYTE @V60B7AA 00375000
  377. C R4,F6 CPU SERIAL IS ONLY 3 BYTES LONG @V60B7AA 00376000
  378. BNE BUILDSER CONTINUE UNTIL 3 BYTES BUILT @V60B7AA 00377000
  379. LA R3,STDHDR ADDRESS OF STANDARD RECORD HEADER@V60B7AA 00378000
  380. USING FRAMEHDR,R3 00379000
  381. STCM R2,B'0111',FRMCSER STORE CPUID OF CURRENT FRAME @V60B7AA 00380000
  382. * SET INTO RECORD HEADER 00381000
  383. DROP R3 00382000
  384. SLR R2,R2 CLEAR OUT REG TO BUILD CPU MODEL @V60B7AA 00383000
  385. BUILDMOD SLR R3,R3 CLEAR OUT SHIFT REGISTER @V60B7AA 00384000
  386. IC R3,CPUIDENT(R4) INSERT NEXT CHARACTER OF CPU @V60B7AA 00385000
  387. * MODEL NUMBER RETURNED BY RDCPUID 00386000
  388. SLL R3,28 REMOVE LEADING 4 BITS OF ZEROES @V60B7AA 00387000
  389. SLDL R2,4 SAVE THE SIGNIFICANT 4 BITS @V60B7AA 00388000
  390. LA R4,1(R4) INCREMENT TO POINT TO NEXT BYTE @V60B7AA 00389000
  391. C R4,F10 CPU MODEL NO. IS 4 BYTES LONG @V60B7AA 00390000
  392. BNE BUILDMOD CONTINUE UNTIL 2 BYTES BUILT @V60B7AA 00391000
  393. LA R3,STDHDR ADDRESS OF STANDARD RECORD HEADER@V60B7AA 00392000
  394. USING FRAMEHDR,R3 @V60B7AA 00393000
  395. STCM R2,B'0011',FRMMDL STORE CPU MODEL OF CURRENT @V60B7AA 00394000
  396. * FRAME SET INTO RECORD HEADER 00395000
  397. DROP R3 @V60B7AA 00396000
  398. LA R2,VERBAGE ADDRESS OF VERBAGE CCW @V5088AA 00397000
  399. ST R2,IOBCAW SAVE IN IOBLOK @V5088AA 00398000
  400. LA R2,VRBAGRET RETURN FROM 1ST VERBAGE/RDVERB @V5088AA 00399000
  401. ST R2,IOBIRA SAVE IN IOBLOK @V5088AA 00400000
  402. LA R3,CPUFRAME ADDR. OF 1-BYTE BUFFER @V5088AA 00401000
  403. STCM R3,B'0111',VERBBUFF SAVE IN VERBAGE CCW @V5088AA 00402000
  404. ************************************************************** 00403000
  405. * END OF INITIALIZATION. BEGIN TO READ FROM THE SRF. * 00404000
  406. ************************************************************** 00405000
  407. FRMLOOP EQU * @V5088AA 00406000
  408. XC IOBCSW(8),IOBCSW CLEAR OUT THE CSW FOR RE-USE @V5088AA 00407000
  409. MVI IOBFLAG,X'00' CLEAR OUT FIELD FOR REUSE @VMV0005 00407100
  410. MVI IOBSTAT,X'00' CLEAR OUT FIELD FOR REUSE @VMV0005 00407200
  411. MVI FIRSTRET,X'00' INITIALIZE RETURN COUNTER @V5088AA 00408000
  412. ST R11,IOSSAVE SAVE VMBLOK ADDRESS @V5088AA 00409000
  413. STM R13,R9,IOSSAVE+4 SAVE REGS ACROSS CALL TO IOSQR @V5088AA 00410000
  414. CALL DMKIOSQR GO ISSUE VERBAGE/RDVERB TO SRF @V5088AA 00411000
  415. GOTO DMKDSPCH GO 'WAIT' FOR I/O TO COMPLETE @V5088AA 00412000
  416. READRTRN EQU * @V5088AA 00413000
  417. USING *,R12 @V5088AA 00414000
  418. SL R12,=A(*-DMKIOH) RE-ESTABLISH ADDRESSABILITY -- @V5088AA 00415000
  419. * R12 CONTAINS IOBIRA ADDRESS 00416000
  420. USING DMKIOH,R12 @V5088AA 00417000
  421. L R11,IOSSAVE RESTORE VMBLOK ADDRESS @V5088AA 00418000
  422. LM R13,R9,IOSSAVE+4 RESTORE REGISTER VALUES @V5088AA 00419000
  423. TM IOBSTAT,IOBFATAL+IOBCC2 FATAL I/O ERROR, OR CC2?@V5088AA 00420000
  424. BNZ SRFERR SRF ERRORS IF SO @V5088AA 00421000
  425. TM IOBCSW+4,CE+DE+UE CHANNEL END, DEVICE END, AND @V5088AA 00422000
  426. * UNIT EXCEPTION MEAN END OF FRAMES 00423000
  427. BO DIRFRAMS GO READ DIRECTOR FRAMES NOW @V5088AA 00424000
  428. CLI FIRSTRET,X'00' FIRST RETURN FROM DISPATCHER? @V5088AA 00425000
  429. BNE RDRTRN2 IF NOT, SEE IF DE OR DE+UE ALONE @V5088AA 00426000
  430. MVI FIRSTRET,X'01' SET COUNTER TO FIRST RETURN @V5088AA 00427000
  431. TM IOBCSW+4,X'D3' CE (OR CE+CUE) ON BY ITSELF? @V5088AA 00428000
  432. BNZ SRFERR ERROR IF SOME EXCEPTION ALSO @V5088AA 00429000
  433. CLI IOBCSW+5,X'00' CHECK CHANNEL STATUS FOR ERRORS @V5088AA 00430000
  434. BNE SRFERR ERROR IF ANY ON @V5088AA 00431000
  435. TM IOBCSW+4,CE+DE DID READ COMPLETE OK? @V5088AA 00432000
  436. BO COUNTCHK HAVE WE READ TOO MANY FRAMES? @V5088AA 00433000
  437. LR R1,R10 ADDRESS OF COPIED IOB TO FRET @V5088AA 00434000
  438. LA R0,IOBSIZE SIZE OF COPIED IOB TO FRET @V5088AA 00435000
  439. CALL DMKFRET FRET THE COPIED IOBLOK @V5088AA 00436000
  440. GOTO DMKDSPCH GO WAIT FOR UNIT STATUS @V5088AA 00437000
  441. RDRTRN2 TM IOBCSW+4,X'D2' ANYTHING BESIDES DE,UE,OR CUE? @V5088AA 00438000
  442. BNZ SRFERR ERROR IF SOME EXCEPTION @V5088AA 00439000
  443. TM IOBCSW+4,DE+UE DEVICE END + UNIT EXCEPTION? @V5088AA 00440000
  444. BO DIRFRAMS YES, END OF THIS TYPE OF FRAMES @V5088AA 00441000
  445. TM IOBCSW+4,DE DEVICE END RECEIVED? @V5088AA 00442000
  446. BO COUNTCHK YES, READ COMPLETED OK @V5088AA 00443000
  447. SRFERR LA R2,560 ERROR IF NOT CE AND DE @V5088AA 00444000
  448. ICM R2,B'0100',=C'W' WARNING MESSAGE @V5088AA 00445000
  449. BAL R5,SRFERMSG GO WRITE ERROR MESSAGE @V60B7AA 00446000
  450. LA R3,STDHDR STANDARD RECORD HEADER ADDRESS @V5088AA 00447000
  451. USING FRAMEHDR,R3 @V5088AA 00448000
  452. SR R4,R4 CLEAR OUT REGISTER FOR COMPARE @V5088AA 00449000
  453. CLM R4,B'0001',FRMCNT IS SEQUENCE NUMBER OF CURRENT @V5088AA 00450000
  454. * RECORD EQUAL TO ZERO? 00451000
  455. BNE FRFINISH NO, SOME FRAMES ARE ON CYLS. GO @V5088AA 00452000
  456. * TURN ON 'FRAMES' INDICATION AND 00453000
  457. * 'LAST FRAME' FLG BEFORE RETURNING 00454000
  458. CLI FRMTYPE,CPUTYPE HAVE WE JUST READ CPU FRAMES? @V5088AA 00455000
  459. BE FINISH1 IF SO, AND SEQUENCE NUMBER IS 0, @V5088AA 00456000
  460. * NO FRAMES ARE ON CYLS. CLEAN UP 00457000
  461. * AND RETURN TO CALLER. 00458000
  462. B FRFINISH IF SEQ. NO. IS 0 BUT WE JUST READ@V5088AA 00459000
  463. * DIRECTOR FRAMES, THEN CPU FRAMES 00460000
  464. * ARE ON CYLS. TURN ON 'LAST' FLAG. 00461000
  465. COUNTCHK LH R4,FRAMECTR RETRIEVE COUNT OF FRAMES READ @V5088AA 00462000
  466. LA R4,1(R4) INCREMENT BY ONE @V5088AA 00463000
  467. STH R4,FRAMECTR SAVE COUNT OF FRAMES READ @V5088AA 00464000
  468. CLI FRAMECTR+1,MAXFRAME HAVE WE READ MORE THAN 50? @V5088AA 00465000
  469. BNH KEEPON IF NOT, CONTINUE @V5088AA 00466000
  470. LA R2,561 ERROR IF MORE THAN 50 FRAMES READ@V5088AA 00467000
  471. * JUST FORMAT THE 1ST 50 FRAMES ON 00468000
  472. * THE RECORDING CYLINDERS. 00469000
  473. ICM R2,B'0100',=C'W' WARNING MESSAGE @V5088AA 00470000
  474. BAL R5,SRFERMSG GO WRITE MESSAGE @V60B7AA 00471000
  475. B DIRFRAMS GO READ DIRECTOR FRAMES NOW @V5088AA 00472000
  476. KEEPON EQU * @V5088AA 00473000
  477. LA R3,STDHDR POINT TO STANDARD RECORD HEADER @V5088AA 00474000
  478. IC R4,FRMCNT SEQUENCE NUMBER OF THE RECORD @V5088AA 00475000
  479. LA R4,1(R4) INCREMENT FOR THIS RECORD @V5088AA 00476000
  480. STC R4,FRMCNT STORE UPDATED SEQUENCE NO. IN HDR@V5088AA 00477000
  481. BAL R4,MOVEREC GO MOVE FRAME INTO RECORDING PAGE@V5088AA 00478000
  482. B FRMLOOP CONTINUE TO READ FRAMES @V5088AA 00479000
  483. DIRFRAMS EQU * @V5088AA 00480000
  484. LA R3,STDHDR ADDRESS OF STANDARD RECORD HDR @V5088AA 00481000
  485. CLI FRMTYPE,CPUTYPE DID WE JUST READ CPU FRAMES? @V5088AA 00482000
  486. BNE FRFINISH IF NOT, WE HAVE READ DIR. FRAMES @V5088AA 00483000
  487. SPACE 00484000
  488. * NOW WE WILL READ DIRECTOR FRAMES. 00485000
  489. * FIRST, TURN ON THE 'LAST' FLAG IN 00486000
  490. * THE LAST CPU RECORD WRITTEN. 00487000
  491. L R2,IOEREALP ADDRESS OF RECORDING PAGE @V5088AA 00488000
  492. USING RECPAG,R2 @V5088AA 00489000
  493. LH R4,RECNXT INDEX INTO PAGE OF AVAIL. SPACE @V5088AA 00490000
  494. LA R4,0(R2,R4) ADDRESS OF AVAILABLE SPACE @V5088AA 00491000
  495. LA R9,FRHDRLEN+FRRECLEN LENGTH OF LAST FRAME AND @V5088AA 00492000
  496. * ITS HEADER 00493000
  497. SR R4,R9 BACK UP TO LAST RECORD'S HEADER @V5088AA 00494000
  498. USING FRAMEHDR,R4 @V5088AA 00495000
  499. TM VMMCR6,VMM360 IS THIS 360 MODE @VA09528 00495100
  500. BO DROP2 YES-DONT TURN ON 370 TOD FLAG @VA09528 00495300
  501. OI FRMSW0,TOD370 EC MODE TURN ON 370TOD FLAG @VA09528 00495500
  502. DROP2 EQU * @VA09528 00495700
  503. MVI FRMSW0,FRMLAST INDICATE THIS IS LAST CPU RECORD @V5088AA 00496000
  504. DROP R2 @V5088AA 00497000
  505. DROP R4 @V5088AA 00498000
  506. MVI FRMTYPE,DIRTYPE RECORD TYPE IS NOW DIR. FRAMES @V5088AA 00499000
  507. MVI FRMCNT,X'00' RESET SEQUENCE NUMBER @V5088AA 00500000
  508. LA R5,DIRFRAME ADDRESS OF 1-BYTE BUFFER @V5088AA 00501000
  509. STCM R5,B'0111',VERBBUFF PUT BUFFER @ IN VERBAGE CCW @V5088AA 00502000
  510. LA R5,VRBAGRET RETURN FROM 1ST DIR. VB/RDVERB @V5088AA 00503000
  511. ST R5,IOBIRA SAVE IN IRA ADDRESS @V5088AA 00504000
  512. LA R5,VERBAGE ADDRESS OF VERBAGE/RDVERB CCW'S @V5088AA 00505000
  513. ST R5,IOBCAW SAVE @ OF CHANNEL PGM IN IOB @V5088AA 00506000
  514. XC FRAMECTR(2),FRAMECTR RE-INITIALIZE FRAME COUNTER@V5088AA 00507000
  515. B FRMLOOP GO READ CPU FRAMES @V5088AA 00508000
  516. DROP R3 @V5088AA 00509000
  517. SPACE 2 00510000
  518. VRBAGRET EQU * RETURN FROM VERBAGE/RDVERB @V5088AA 00511000
  519. USING *,R12 @V5088AA 00512000
  520. SL R12,=A(*-DMKIOH) RE-ESTABLISH ADDRESSABILITY -- @V5088AA 00513000
  521. * R12 CONTAINS IOBIRA ADDRESS 00514000
  522. USING DMKIOH,R12 @V5088AA 00515000
  523. L R11,IOSSAVE RESTORE VMBLOK ADDRESS @V5088AA 00516000
  524. LM R13,R9,IOSSAVE+4 RESTORE REGISTER VALUES @V5088AA 00517000
  525. TM IOBCSW+4,X'D3' IS STATUS ANYTHING BUT CE,CUE,DE?@V5088AA 00518000
  526. BNZ SRFERR VERBAGE ERROR IF SO @V5088AA 00519000
  527. LA R2,READRTRN ADDRESS OF RDVERB RETURN POINT @V5088AA 00520000
  528. ST R2,IOBIRA STORE IN THE IOBLOK FOR NEXT RDVB@V5088AA 00521000
  529. LA R2,RDVERB RDVERB CCW ADDRESS @V5088AA 00522000
  530. ST R2,IOBCAW CHANNEL PROGRAM ADDRESS--DON'T @V5088AA 00523000
  531. * ISSUE VERBAGE MORE THAN ONCE FOR 00524000
  532. * A PARTICULAR TYPE OF FRAME. 00525000
  533. B FRMLOOP GO ISSUE RDVERB @V5088AA 00526000
  534. SPACE 2 00527000
  535. ************************************************************** 00528000
  536. * THIS ROUTINE WILL FORMAT THE FRAME JUST READ INTO A * 00529000
  537. * STANDARD RECORD AND MOVE IT INTO THE CURRENT * 00530000
  538. * RECORDING PAGE. * 00531000
  539. ************************************************************** 00532000
  540. MOVEREC EQU * @V5088AA 00533000
  541. SPACE 1 00534000
  542. * CHECK FOR ENOUGH ROOM ON CURRENT RECORDING PAGE @V5088AA 00535000
  543. SPACE 1 00536000
  544. L R2,IOEREALP GET ADDRESS OF RECORDING PAGE @V5088AA 00537000
  545. USING RECPAG,R2 @V5088AA 00538000
  546. LH R5,RECNXT INDEX TO NEXT AVAILABLE SPACE @V5088AA 00539000
  547. LA R6,4095-L'INITFMT MAX. SPACE ON RECORDING PAGE @V5088AA 00540000
  548. LA R5,4(R5) UPDATE INDEX FOR LENGTH FIELD @V5088AA 00541000
  549. SR R6,R5 GET SPACE REMAINING @V5088AA 00542000
  550. LA R7,FRHDRLEN+FRRECLEN LENGTH REQUIRED @V5088AA 00543000
  551. CR R7,R6 CAN FRAME RECORD FIT ON THIS PAGE@V5088AA 00544000
  552. BNH FILLPAGE YES, GO MOVE IT @V5088AA 00545000
  553. OI RECFLAG1,RECPAGFL TURN ON 'PAGE FULL' FLAG @V5088AA 00546000
  554. MVC SAVECCP(3),WORKCYL SAVE CURRENT CCP @V5088AA 00547000
  555. * WE WILL WRITE FULL PAGE OUT LATER 00548000
  556. * AFTER WE HAVE MADE SURE THAT THE 00549000
  557. * AREA IS NOT FULL. THIS IS SO THAT 00550000
  558. * IF WE HAVE FILLED THE LAST PAGE, 00551000
  559. * WE CAN TURN ON THE 'LAST' FRAME 00552000
  560. * FLAG IN THE LAST RECORD ON THIS 00553000
  561. * PAGE BEFORE WE WRITE IT OUT. 00554000
  562. UPPAG ICM R14,B'0111',WORKCYL RETRIEVE CURRENT PAGE 'CCP' @V5088AA 00555000
  563. LA R14,1(R14) INCREMENT TO NEXT PAGE @V5088AA 00556000
  564. STC R14,WORKPAGE SAVE UPDATED PAGE NUMBER @V5088AA 00557000
  565. CLM R14,B'0111',AREA90PC IS AREA 90% FULL? @V5088AA 00558000
  566. BNE UPPAGMAX NO, CHECK FOR AREA FULL @V5088AA 00559000
  567. LA R2,550 '90% FULL' MESSAGE @V5088AA 00560000
  568. ICM R2,B'0100',=C'E' ERROR MESSAGE @V5088AA 00561000
  569. BAL R5,FRERRMSG GO WRITE MESSAGE @V5088AA 00562000
  570. B UPPAGOK GO READ IN THIS PAGE @V5088AA 00563000
  571. UPPAGMAX CLC WORKPAGE(1),MAXPAGE LAST PAGE ON A CYLINDER? @V5088AA 00564000
  572. BNE UPPAGOK NO, READ IN THIS PAGE @V5088AA 00565000
  573. CLC WORKCYL(3),MAXCYL ON LAST RECORD OF LAST CYL? @V5088AA 00566000
  574. BNE UPCYL NO, INCREMENT TO NEXT CYL NUMBER @V5088AA 00567000
  575. SPACE 00568000
  576. * ERROR RECORDING AREA IS FULL ALREADY 00569000
  577. SPACE 00570000
  578. CYLSFULL L R2,=V(DMKIOEES) ADDRESS OF 'AREA FULL' FLAG @V5088AA 00571000
  579. OI 0(R2),X'FF' INDICATE AREA FULL @V5088AA 00572000
  580. OI INFOFLAG,FULLNOW FRAMES HAVE FILLED WHOLE AREA @V5088AA 00573000
  581. L R2,=V(DMKIOEIF) ADD OF INFOFLAG @VA10241 00573100
  582. MVC 0(,R2),INFOFLAG MOVE IN INFOFLAG @VA10241 00573200
  583. LA R2,551 'RECORDING AREA FULL' MESSAGE @V5088AA 00574000
  584. ICM R2,B'0100',=C'E' ERROR MESSAGE @V5088AA 00575000
  585. SLR R0,R0 INDICATE NO VARIABLE TEXT @V5088AA 00576000
  586. SLR R1,R1 NO VARIABLE TEXT @V5088AA 00577000
  587. BAL R3,CALLERM GO WRITE MESSAGE @V5088AA 00578000
  588. MVC WORKCYL(3),SAVECCP RESTORE THE UN-UPDATED CCP @V5088AA 00579000
  589. * SO THAT WE WILL WRITE OUT THE 00580000
  590. * CORRECT PAGE. 00581000
  591. XC SRFCOUNT(4),SRFCOUNT ZERO COUNT OF SRF'S @V60B7AA 00582000
  592. * REMAINING TO BE PROCESSED. ERROR 00583000
  593. * RECORDING AREA IS FULL. 00584000
  594. B FRFINISH CLEAN UP AND RETURN @V5088AA 00585000
  595. UPCYL SRL R14,8 ISOLATE 'CC' PART OF ADDRESS @V5088AA 00586000
  596. LA R14,1(R14) INCREMENT TO NEXT CYLINDER @V5088AA 00587000
  597. STH R14,WORKCYL SAVE UPDATED 'CC' POINTER @V5088AA 00588000
  598. MVI WORKPAGE,X'01' WANT 1ST PAGE ON NEW CYLINDER @V5088AA 00589000
  599. UPPAGOK EQU * @V5088AA 00590000
  600. ICM R3,B'0111',WORKCYL SAVE UPDATED WORKCYL VALUE @V5088AA 00591000
  601. MVC WORKCYL(3),SAVECCP RESTORE UN-UPDATED CCP VALUE @V5088AA 00592000
  602. BAL R9,REALWRIT GO WRITE OUT THE FULL PAGE @V5088AA 00593000
  603. TM INFOFLAG,WRITERR DID ERROR OCCUR ON WRITE? @V5088AA 00594000
  604. BO DISABREC YES, GO DISABLE RECORDING @V5088AA 00595000
  605. STCM R3,B'0111',WORKCYL RESTORE UPDATED CCP VALUE @V5088AA 00596000
  606. L R0,WORKCYL RETRIEVE CURRENT PAGE 'CCPD' @V5088AA 00597000
  607. L R1,IOEVMPAG GET VIRTUAL ADDRESS OF PAGE @V5088AA 00598000
  608. CALL DMKRPAGT,PARM=(SYSTEM+BRING),AFFINITY @V5088AA 00599000
  609. BC 8,PAGRDOK NO ERROR--CONTINUE @V5088AA 00600000
  610. BAL R9,DISABREC ERROR--GO DISABLE RECORDING @V5088AA 00601000
  611. MVC WORKCYL(3),SAVECCP RESTORE UN-UPDATED CCP VALUE @V5088AA 00602000
  612. * SO WE WILL WRITE OUT CORRECT PAGE 00603000
  613. L R0,WORKCYL GET CCPD OF PAGE JUST WRITTEN OUT@V5088AA 00604000
  614. L R1,IOEVMPAG RESTORE VIRTUAL ADDRESS OF PAGE @V5088AA 00605000
  615. CALL DMKRPAGT,PARM=(SYSTEM+BRING),AFFINITY GO REREAD @V5088AA 00606000
  616. * THE LAST PAGE TO BE WRITTEN ON 00607000
  617. * THE RECORDING CYLS. SINCE FRAME 00608000
  618. * RECORDS EXIST ON THIS PAGE, WE 00609000
  619. * MUST TURN ON THE 'LAST FRAME' 00610000
  620. * FLAG IN THE LAST RECORD ON THIS 00611000
  621. * PAGE. 00612000
  622. BC 7,FINISH2 ERROR -- CLEAN UP AND RETURN @V5088AA 00613000
  623. CALL DMKPTRLK LOCK THE PAGE IN STORAGE @V5088AA 00614000
  624. ST R2,IOEREALP SAVE REAL ADDRESS OF PAGE @V5088AA 00615000
  625. XC SRFCOUNT(4),SRFCOUNT ZERO COUNT OF SRF DEVICES @V60B7AA 00616000
  626. * REMAINING TO BE PROCESSED. RECORDING 00617000
  627. * HAS BEEN DISABLED. 00618000
  628. B FRFINISH GO CLEAN UP AND RETURN @V5088AA 00619000
  629. PAGRDOK CALL DMKPTRLK LOCK PAGE IN STORAGE @V5088AA 00620000
  630. ST R2,IOEREALP SAVE REAL ADDRESS OF PAGE @V5088AA 00621000
  631. MVI RECFLAG1,RECPAGFA FRAMES ARE IN THIS PAGE @V5088AA 00622000
  632. FILLPAGE LH R5,RECNXT GET INDEX TO 1ST AVAILABLE SPACE @V5088AA 00623000
  633. AR R5,R2 00624000
  634. LA R7,FRHDRLEN+FRRECLEN LENGTH OF HEADER + FRAME @V5088AA 00625000
  635. ST R7,0(R5) SAVE LENGTH OF RECORD IN 1ST @V5088AA 00626000
  636. * FULLWORD OF SPACE 00627000
  637. LA R5,4(R5) UPDATE PAST LENGTH FIELD @V5088AA 00628000
  638. MVC 0(FRHDRLEN,R5),STDHDR MOVE STD HDR INTO RECORD @V5088AA 00629000
  639. LA R5,FRHDRLEN(R5) UPDATE AVAILABLE SPACE POINTER @V5088AA 00630000
  640. ICM R6,B'0111',RDVBUFF FRAME RECORD BUFFER ADDRESS @V5088AA 00631000
  641. LA R7,FRRECLEN LENGTH OF FRAME RECORD @V5088AA 00632000
  642. LR R14,R5 'TO' ADDRESS FOR MOVE @V5088AA 00633000
  643. LR R15,R7 LENGTH TO MOVE @V5088AA 00634000
  644. MVCL R14,R6 MOVE FRAME TO RECORD @V5088AA 00635000
  645. LA R5,FRRECLEN(R5) ADD RECORD LENGTH TO AVAILABLE @V5088AA 00636000
  646. * SPACE POINTER 00637000
  647. SR R5,R2 SUBTRACT START ADDRESS @V5088AA 00638000
  648. STH R5,RECNXT SAVE UPDATED PTR TO AVAIL.SPACE @V5088AA 00639000
  649. BR R4 RETURN TO INLINE CODE @V5088AA 00640000
  650. SPACE 1 00641000
  651. ************************************************************** 00642000
  652. * WRITE A RECORDING PAGE BACK TO THE RECORDING CYLINDERS 00643000
  653. ************************************************************** 00644000
  654. REALWRIT EQU * @V5088AA 00645000
  655. L R1,IOEVMPAG GET VIRTUAL ADDRESS OF PAGE @V5088AA 00646000
  656. L R0,WORKCYL DASD 'CCPD' OF PAGE @V5088AA 00647000
  657. CALL DMKRPAPT,PARM=SYSTEM,AFFINITY GO WRITE PAGE @V5088AA 00648000
  658. BC 8,*+8 ERROR? GO DISABLE RECORDING @V5088AA 00649000
  659. OI INFOFLAG,WRITERR REMEMBER ERROR @V5088AA 00650000
  660. L R2,=V(DMKIOEIF) ADD. OF INFOFLAG @VA10241 00650100
  661. MVC 0(,R2),INFOFLAG MOVE IN INFOFLAG @VA10241 00650200
  662. L R2,IOEREALP REAL ADDRESS OF PAGE @V5088AA 00651000
  663. CALL DMKPTRUL UNLOCK THE VIRTUAL PAGE @V5088AA 00652000
  664. SR R0,R0 FORCE SWAP CCPD ENTRY TO ZERO @V5088AA 00653000
  665. CALL DMKRPAGT,PARM=SYSTEM RELEASE BACK-UP PAGE @V5088AA 00654000
  666. BR R9 RETURN TO INLINE CODE @V5088AA 00655000
  667. SPACE 1 00656000
  668. DISABREC EQU * @V5088AA 00657000
  669. LA R2,558 'RECORDING DISABLED' MESSAGE @V5088AA 00658000
  670. ICM R2,B'0100',=C'I' INFORMATION MESSAGE @V5088AA 00659000
  671. BAL R5,FRERRMSG GO WRITE ERROR MESSAGE @V5088AA 00660000
  672. L R2,=V(DMKIOEES) ADDR. OF AREA FULL FLAG @V5088AA 00661000
  673. MVI 0(R2),X'FF' TURN AREA FULL FLAG ON @V5088AA 00662000
  674. OI INFOFLAG,FULLNOW DON'T LET LATER PROCESSING @V5088AA 00663000
  675. * CLEAR OUT THE 'AREA FULL' FLAG 00664000
  676. L R7,=V(DMKIOEIF) ADD. OF INFOFLAG @VA10241 00664100
  677. MVC 0(,R7),INFOFLAG MOVE IN INFOFLAG @VA10241 00664200
  678. TM INFOFLAG,WRITERR DID WE COME BECAUSE OF AN @V5088AA 00665000
  679. * ERROR IN REALWRIT ROUTINE? 00666000
  680. BO FINISH2 YES, GO CLEAN UP AND RETURN @V5088AA 00667000
  681. BR R9 RETURN TO IN-LINE CODE @V5088AA 00668000
  682. SPACE 1 00669000
  683. FRERRMSG EQU * @V5088AA 00670000
  684. SLR R0,R0 INDICATE NO VARIABLE TEXT @V5088AA 00671000
  685. SLR R1,R1 NO VARIABLE MESSAGE TEXT @V5088AA 00672000
  686. BAL R3,CALLERM GO WRITE MESSAGE @V5088AA 00673000
  687. BR R5 RETURN TO IN-LINE CODE @V5088AA 00674000
  688. SPACE 00675000
  689. SRFERMSG EQU * @V60B7AA 00676000
  690. LH R1,SRFADDR GET DEVICE ADDRESS ON GR1 @V60B7AA 00677000
  691. CH R1,BLANKADD IS ADDRESS ALREADY SET TO BLANKS?@V60B7AA 00678000
  692. BE NOCONVRT NO CONVERT NECESSARY IF SO @V60B7AA 00679000
  693. CALL DMKCVTBH CONVERT DEVICE ADDRESS @V60B7AA 00680000
  694. ICM R1,B'1000',BLANKADD BLANK OUT FIRST BYTE OF @ @V60B7AA 00681000
  695. NOCONVRT SR R0,R0 LENGTH OF VARIABLE TEXT (TEXT @V60B7AA 00682000
  696. * IS IN REGISTER 1) 00683000
  697. BAL R3,CALLERM GO WRITE MESSAGE @V60B7AA 00684000
  698. BR R5 RETURN TO IN-LINE CODE @V60B7AA 00685000
  699. SPACE 1 00686000
  700. CALLERM ICM R2,B'1000',ERMPARMS PARMS=OPERATOR+ALARM+RETURN @V60B7AA 00687000
  701. ICM R0,B'1110',MODULEID+3 MODULE IDENTIFIER @V60B7AA 00688000
  702. CALL DMKERMSG,AFFINITY CALL MESSAGE WRITER @V60B7AA 00689000
  703. BR R3 RETURN TO IN-LINE CODE @V60B7AA 00690000
  704. SPACE 1 00691000
  705. FRFINISH EQU * @V5088AA 00692000
  706. L R4,=V(DMKIOEFR) ADDRESS FRAME INDICATOR @V5088AA 00693000
  707. MVI 0(R4),YESFRAME INDICATE FRAMES EXIST ON ERROR @V5088AA 00694000
  708. * RECORDING CYLINDERS. THIS WILL BE 00695000
  709. * USED BY CPEREP PROCESSING. 00696000
  710. L R2,IOEREALP ADDRESS OF RECORDING PAGE @V5088AA 00697000
  711. LH R4,RECNXT INDEX INTO PAGE OF AVAIL. SPACE @V5088AA 00698000
  712. LA R4,0(R2,R4) ADDRESS OF AVAILABLE SPACE @V5088AA 00699000
  713. LA R9,FRHDRLEN+FRRECLEN LENGTHS OF LAST RECORD AND @V5088AA 00700000
  714. * ITS HEADER 00701000
  715. SR R4,R9 BACK UP TO LAST RECORD'S HEADER @V5088AA 00702000
  716. USING FRAMEHDR,R4 @V5088AA 00703000
  717. MVI FRMSW0,FRMLAST INDICATE THIS IS LAST FRAME REC. @V5088AA 00704000
  718. TM VMMCR6,VMM360 IS THIS 360 MODE @VA09528 00704100
  719. BO DROP1 YES-DONT TURN ON 370 TOD FLAG @VA09528 00704300
  720. OI FRMSW0,TOD370 EC MODE TURN ON 370 TOD FLAG @VA09528 00704500
  721. DROP1 EQU * @VA09528 00704700
  722. DROP R4 @V5088AA 00705000
  723. FINISH1 EQU * @V60B7AA 00706000
  724. L R2,SRFCOUNT COUNT OF SRF'S TO BE PROCESSED @V60B7AA 00707000
  725. C R2,F1 IS THIS THE LAST SRF TO BE @V60B7AA 00708000
  726. * PROCESSED? 00709000
  727. BH FINISH2 IF NOT, GO AHEAD TO FINISH2 @V60B7AA 00710000
  728. L R2,IOEREALP REAL ADDRESS OF PAGE @V60B7AA 00711000
  729. OI RECFLAG1,RECPAGFL INDICATE THE LAST PAGE IS FULL@V5088AA 00712000
  730. * DO THIS EVEN IF THE PAGE IS NOT 00713000
  731. * FULL, SO THAT ERROR RECORDS ARE 00714000
  732. * NOT PUT ON THE SAME PAGE AS FRAME 00715000
  733. * RECORDS (EASIER TO CLEAR). 00716000
  734. BAL R9,REALWRIT GO WRITE LAST PAGE TO REC. CYLS. @V5088AA 00717000
  735. TM INFOFLAG,WRITERR DID ERROR OCCUR ON WRITE? @V5088AA 00718000
  736. BO DISABREC GO DISABLE RECORDING IF SO @V5088AA 00719000
  737. FINISH2 EQU * @V60B7AA 00720000
  738. LTR R8,R8 DOES THE RDEVBLOK FOR THE SRF @V60B7AA 00721000
  739. * EXIST? IF NOT, A DISABLE SHOULD 00722000
  740. * NOT BE ISSUED 00723000
  741. BZ NEXTSRF CURRENT SRF NOT GEN'ED -- BYPASS @V60B7AA 00724000
  742. * DISABLE 00725000
  743. LA R4,DISABLE ADDRESS OF DISABLE CCW @V5088AA 00726000
  744. ST R4,IOBCAW SAVE IN IOBLOK @V5088AA 00727000
  745. LA R4,DISABRTN RETURN POINT FROM DISABLE @V5088AA 00728000
  746. ST R4,IOBIRA SAVE IN IOBLOK @V5088AA 00729000
  747. XC IOBCSW(8),IOBCSW CLEAR CSW FOR RE-USE @V5088AA 00730000
  748. MVI IOBFLAG,X'00' CLEAR OUT FIELD FOR REUSE @VMV0005 00730100
  749. MVI IOBSTAT,X'00' CLEAR OUT FIELD FOR REUSE @VMV0005 00730200
  750. ST R11,IOSSAVE SAVE VMBLOK ADDRESS @V5088AA 00731000
  751. STM R13,R9,IOSSAVE+4 SAVE REGS ACROSS CALL TO IOSQR @V5088AA 00732000
  752. CALL DMKIOSQR GO ISSUE DISABLE TO SRF @V5088AA 00733000
  753. GOTO DMKDSPCH GO 'WAIT' FOR DISABLE TO COMPLETE@V5088AA 00734000
  754. DISABRTN EQU * @V5088AA 00735000
  755. USING *,R12 @V5088AA 00736000
  756. SL R12,=A(*-DMKIOH) RE-ESTABLISH ADDRESSABILITY -- @V5088AA 00737000
  757. * R12 CONTAINS IOBIRA ADDRESS 00738000
  758. USING DMKIOH,R12 @V5088AA 00739000
  759. L R11,IOSSAVE RESTORE VMBLOK ADDRESS @V5088AA 00740000
  760. LM R13,R9,IOSSAVE+4 RESTORE REGISTER VALUES @V5088AA 00741000
  761. NEXTSRF L R1,=V(DMKIOEES) POINTER TO 'AREA FULL' INDICATOR@V60B7AA 00742000
  762. CLI 0(R1),X'FF' HAS RECORDING BEEN DISABLED? @V60B7AA 00743000
  763. BE SETIOEHS IF SO, DON'T HANDLE ANY MORE SRFS@V60B7AA 00744000
  764. L R1,SRFCOUNT COUNT OF SRF'S REMAINING @V60B7AA 00745000
  765. BCTR R1,0 SUBTRACT 1 FOR SRF JUST HANDLED @V60B7AA 00746000
  766. LTR R1,R1 HAVE WE PROCESSED ALL SRF'S? @V60B7AA 00747000
  767. BZ SETIOEHS IF DONE, BRANCH @V60B7AA 00748000
  768. ST R1,SRFCOUNT UPDATED COUNT OF SRF DEVICES @V60B7AA 00749000
  769. L R1,CURRSRF PTR TO CURRENT SRF RDEVBLOK INFO @V60B7AA 00750000
  770. LA R1,4(R1) INCREMENT TO POINT TO NEXT SRF @V60B7AA 00751000
  771. ST R1,CURRSRF SAVE UPDATED POINTER @V60B7AA 00752000
  772. MVC SRFADDR(DEVADDSZ),2(R1) SAVE SRF DEVICE ADDRESS @V60B7AA 00753000
  773. LH R8,0(R1) OFFSET OF SRF'S RDEVBLOK FROM @V60B7AA 00754000
  774. * DMKRIODV 00755000
  775. LTR R8,R8 DOES A RDEVBLOK EXIST? @V60B7AA 00756000
  776. BNZ SRFOK @VA11817 00757100
  777. LH R1,2(,R1) GET RADDR OF SRF DEVICE @VA13122 00757250
  778. CALL DMKSCNRU CHECK IF RDEVBLOK EXISTS @VA13122 00757275
  779. BNZ NOSRF BRANCH IF WE COULDN'T FIND ONE @VA13122 00757300
  780. *********************************************************************** 00757325
  781. * WE NOW HAVE A DISPLACEMENT OF ZERO INTO THE RDEV TABLE AND THE DEVICE 00757350
  782. * IS A VALID DEVICE FROM SCNRU (I.E. IT WAS THE FIRST RDEVICE MACRO) 00757375
  783. * NOW LETS MAKE SURE IT WAS AN SRF DEVICE. DMKRIODV SHOULD POINT RIGHT 00757400
  784. * TO IT IF THE ABOVE IS CORRECT 00757425
  785. *********************************************************************** 00757450
  786. L R2,=V(DMKRIODV) GET RDEV TABLE POINTER @VA13122 00757475
  787. CLC 6(2,R2),=AL1(CLASSPEC,TYPSRF) IS FIRST AN SRF @VA11817 00757500
  788. BNE NOSRF THIS TRICK DIDNT WORK EITHER @VA11817 00757600
  789. L R1,CURRSRF RESTORE CURRENT SRF POINTER @VA13122 00757625
  790. L R8,0(R1) RESTORE OFFSET OF SRF RDEVBLOK @VA13122 00757650
  791. SRFOK DS 0H 'S OK @VA11817 00757700
  792. SLL R8,3 MULTIPLY VALUE BY 8 @V60B7AA 00758000
  793. L R2,=V(DMKRIODV) ADDRESS OF RDEVBLOK TABLE @V60B7AA 00759000
  794. AR R8,R2 ADD OFFSET OF SRF'S RDEVBLOK TO @V60B7AA 00760000
  795. * START OF RDEVBLOK TABLE. R8 NOW HAS 00761000
  796. * POINTER TO SRF'S RDEVBLOK. 00762000
  797. LH R2,2(R1) SRF DEVICE ADDRESS @V60B7AA 00763000
  798. STH R2,IOBRADD SAVE SRF ADDRESS IN IOBLOK @V60B7AA 00764000
  799. LA R2,ENABRTRN RETURN ADDRESS FROM 'ENABLE' @V60B7AA 00765000
  800. ST R2,IOBIRA SAVE RETURN ADDRESS IN IOBLOK @V60B7AA 00766000
  801. LA R2,ENABLE ADDRESS OF CHANNEL PROGRAM @V60B7AA 00767000
  802. ST R2,IOBCAW SAVE IN IOBLOK @V60B7AA 00768000
  803. XC IOBCSW(8),IOBCSW ZERO OUT CSW FOR RE-USE @V60B7AA 00769000
  804. MVI IOBFLAG,X'00' CLEAR OUT FIELD FOR RE-USE @VMV0009 00769100
  805. MVI IOBSTAT,X'00' CLEAR OUT FIELD FOR RE-USE @VMV0009 00769200
  806. LA R3,STDHDR ADDRESS OF STANDARD RECORD HEADER@V60B7AA 00770000
  807. USING FRAMEHDR,R3 @V60B7AA 00771000
  808. MVI FRMTYPE,CPUTYPE INDICATE FRAMES ARE CPU FRAMES @V60B7AA 00772000
  809. MVI FRMCNT,X'00' INITIALIZE FRAME SEQUENCE NO. @V60B7AA 00773000
  810. DROP R3 @V60B7AA 00774000
  811. XC FRAMECTR(2),FRAMECTR INITIALIZE COUNTER TO ZERO @V60B7AA 00775000
  812. MVI INFOFLAG,X'00' INITIALIZE INDICATORS TO ZERO @V60B7AA 00776000
  813. L R7,=V(DMKIOEIF) ADD. OF INFOFLAG @VA10241 00776100
  814. MVC 0(,R7),INFOFLAG MOVE IN INFOFLAG @VA10241 00776200
  815. B SRFLOOP GO BACK AND PROCESS THIS SRF @V60B7AA 00777000
  816. SETIOEHS L R4,=V(DMKIOECE) ADD. OF CECYL @VA10241 00778100
  817. MVC 0(3,R4),WORKCYL UPDATE CECYL TO LAST RECORD @V60B7AA 00780000
  818. L R4,=V(DMKIOEHS) @V60B7AA 00781000
  819. MVC 0(4,R4),WORKCYL THIS IS THE ADDRESS @V5088AA 00782000
  820. * FOR THE FIRST ERROR RECORD ON THE 00783000
  821. * RECORDING CYLINDERS. THE VALUE 00784000
  822. * WILL BE FILLED INTO THE PSEUDO 00785000
  823. * LOGREC HEADER SET UP FOR EREP 00786000
  824. * PROCESSING, AND IT WILL BE USED 00787000
  825. * DURING EREP'S SEQUENTIAL READ OF 00788000
  826. * THE RECORDING AREA. (THE ADDRESS 00789000
  827. * ACTUALLY POINTS TO THE LAST REC. 00790000
  828. * BEFORE THE ERROR RECORDS, SINCE 00791000
  829. * EREP READS WITH COUNT, KEY, AND 00792000
  830. * DATA.) 00793000
  831. L R1,IOEVMPAG GET VIRTUAL ADDRESS OF PAGE @V5088AA 00794000
  832. CALL DMKPGTVR RELEASE VIRTUAL PAGE @V5088AA 00795000
  833. ICM R1,B'0111',RDVBUFF ADDRESS OF 2K BUFFER @V5088AA 00796000
  834. LA R0,FRAMSIZE LENGTH OF AREA TO FRET @V5088AA 00797000
  835. CALL DMKFRET FRET THE 2K BUFFER @V5088AA 00798000
  836. LA R0,BLOKSIZE SIZE OF AREA TO FRET @V5088AA 00799000
  837. LR R1,R10 ADDRESS OF IOBLOK + CCW'S @V5088AA 00800000
  838. CALL DMKFRET FREE IOBLOK + CCW'S @V5088AA 00801000
  839. SPACE 1 00802000
  840. EXIT RETURN TO CALLER OF DMKIOHFR @V5088AA 00803000
  841. SPACE 00804000
  842. NOSRF EQU * 00805000
  843. LR R1,R10 GET ADDRESS OF IOBLOK + CCW'S @V60B7AA 00806000
  844. LA R0,BLOKSIZE SIZE OF AREA TO FRET @V60B7AA 00807000
  845. CALL DMKFRET FRET IOBLOK + CCW'S @V60B7AA 00808000
  846. NOSRF2 LA R2,559 'SRF UNAVAILABLE' MESSAGE @V60B7AA 00809000
  847. ICM R2,B'0100',=C'W' WARNING MESSAGE @V60B7AA 00810000
  848. BAL R5,SRFERMSG GO WRITE MESSAGE @V60B7AA 00811000
  849. L R1,SRFCOUNT COUNT OF SRF'S REMAINING TO BE @V60B7AA 00812000
  850. * PROCESSED 00813000
  851. LTR R1,R1 ANY SRF'S? @V60B7AA 00814000
  852. BZ EXIT1 NO -- RETURN TO CALLER @V60B7AA 00815000
  853. B FINISH1 IF HERE, ENABLE OR RDCPUID @V60B7AA 00816000
  854. * FAILED. GO ISSUE DISABLE AND GO ON TO 00817000
  855. * NEXT SRF IF THERE IS ONE. 00818000
  856. EXIT1 EXIT RETURN TO CALLER OF DMKIOHFR @V60B7AA 00819000
  857. EJECT 00820000
  858. DS 0F 00821000
  859. INITFMT DC X'00084000FFFFFFFF' COUNT OF 8 AND PAGE FREE 00822000
  860. WORKCYL DC H'00' 00823000
  861. WORKPAGE DC X'01' 00824000
  862. WORKTYP DC X'00' 00825000
  863. SPACE 00826000
  864. * NOTE: LASTCYL AND PAGE90PC MUST REMAIN CONTIGUOUS 00827000
  865. * AS THEY ARE REFERENCED AS A UNIT 00828000
  866. AREA90PC DS 0X @V5088AA 00829000
  867. LASTCYL DC H'0000' ENDING 'CC' OF RECORDING AREA @V5088AA 00830000
  868. PAGE90PC DC X'00' 00831000
  869. SPACE 00832000
  870. * NOTE: MAXCYL AND MAXPAGE MUST REMAIN CONTIGUOUS AS 00833000
  871. * THEY ARE REFERENCED AS A UNIT 00834000
  872. MAXCYL DC H'0000' ENDING 'CC' OF RECORDING AREA @V5088AA 00835000
  873. MAXPAGE DC X'00' 00836000
  874. DS 0F @V60B7AA 00837000
  875. IOSSAVE DS XL56 SAVE AREA FOR REGS 11 AND 13-9 @V5088AA 00838000
  876. FIRSTRET DS XL1 FLAG FOR RETURNS FROM DSPCH @V5088AA 00839000
  877. SAVECCP DS XL3 SAVE AREA FOR CURRENT WORKCYL @V5088AA 00840000
  878. INFOFLAG DC X'00' AREA FILLED WITH FRAME RECORDS @V5088AA 00841000
  879. FULLNOW EQU X'80' INDICATES AREA FILLED WITH FRAMES@V5088AA 00842000
  880. WRITERR EQU X'40' ERROR OCCURRED CALLING DMKRPAPT @V5088AA 00843000
  881. YESFRAME EQU X'20' FRAME RECORDS ARE ON REC. CYLS @V5088AA 00844000
  882. DS 0H 00845000
  883. SRFADDR DC XL2'4040' SAVE AREA FOR SRF DEVICE ADDRESS @V60B7AA 00846000
  884. BLANKADD DC X'4040' TO BLANK SRF DEVICE @ SAVE AREA @V60B7AA 00847000
  885. ERMPARMS DC X'B0' PARMS= OPERATOR+ALARM+RETURN @V305435 00848000
  886. DEVADDSZ EQU 2 SIZE OF DEVICE ADDRESS @V60B7AA 00849000
  887. * THE FOLLOWING CCW'S MUST REMAIN CONTIGUOUS AS ONE MOVE 00850000
  888. * COMMAND MOVES THEM ALL. 00851000
  889. * 00852000
  890. ENABCCW DS 0D ENABLE CCW FOR SRF @V5088AA 00853000
  891. DC X'A300000060000001' @V5088AA 00854000
  892. CPUIDCCW DS 0D RDCPUID CCW FOR SRF @V60B7AA 00855000
  893. DC X'FE0000002000000A' @V60B7AA 00856000
  894. VERBRDV DS 0D VERBAGE & RDVERB CCWS FOR SRF @V5088AA 00857000
  895. DC X'6900000020000001' @V5088AA 00858000
  896. DC X'3200000020000780' @V5088AA 00859000
  897. DISABCCW DS 0D DISABLE CCW FOR SRF @V5088AA 00860000
  898. DC X'C300000020000001' @V5088AA 00861000
  899. OSDATE DC XL4'00000000',XL2'0006',PL2'1' AREA FOR STCK @V5088AA 00862000
  900. CPUIDENT DS XL10 BUFFER FOR RDCPUID TO STORE CPUID@V60B7AA 00863000
  901. IOEVMPAG DS 1F VIRTUAL ADDRESS OF PAGE @V5088AA 00864000
  902. IOEREALP DC F'0' REAL ADDRESS OF PAGE @V60B7AA 00865000
  903. FRAMECTR DC X'0000' COUNTER OF NO. OF FRAMES READ @V5088AA 00866000
  904. DIRFRAME DC X'01' 1-BYTE BUFFER FOR VERBAGE CCW @V5088AA 00867000
  905. CPUFRAME DC X'02' 1-BYTE BUFFER FOR VERBAGE CCW @V5088AA 00868000
  906. STDHDR DS 0F STANDARD LOGREC RECORD HEADER @V5088AA 00869000
  907. DC XL2'0065' SYSTEM/RELEASE INFO. @V5088AA 00870000
  908. DC XL1'C0' FRAME SW1 @VA09528 00871100
  909. DC XL21'0' @V5088AA 00872000
  910. FRHDRLEN EQU 24 LENGTH OF FRAME RECORD HEADER @V5088AA 00873000
  911. FRRECLEN EQU 1920 LENGTH OF A SRF FRAME @V5088AA 00874000
  912. DIRTYPE EQU X'B0' DIRECTOR FRAME RECORD TYPE @V5088AA 00875000
  913. CPUTYPE EQU X'A0' CPU FRAME RECORD TYPE @V5088AA 00876000
  914. MAXFRAME EQU 50 MAXIMUM NO. OF FRAMES OF ANY ONE @V5088AA 00877000
  915. * TYPE WHICH SHOULD BE READ 00878000
  916. FRAMSIZE EQU 2048/8 2K BUFFER SIZE IN D'WORDS @V5088AA 00879000
  917. SRFCOUNT DS XL4 COUNT OF SRF DEVICES SPECIFIED BY@V60B7AA 00880000
  918. * RIOGEN MACRO. FRAMES MUST BE READ 00881000
  919. * FROM ALL OF THESE SRF'S. 00882000
  920. CURRSRF DS XL4 POINTER TO INFO. IN LIST LOCATED @V60B7AA 00883000
  921. * BY DMKRIOSF ASSOCIATED WITH THE SRF 00884000
  922. * DEVICE CURRENTLY BEING PROCESSED. 00885000
  923. SPACE 1 00887000
  924. LTORG 00888000
  925. EJECT 00889000
  926. COPY MCHAREA 00890000
  927. COPY EQU 00891000
  928. COPY RBLOKS 00892000
  929. PSA 00893000
  930. COPY SAVE 00894000
  931. COPY IOBLOKS @V306638 00895000
  932. COPY VMBLOK 00896000
  933. COPY DEVTYPES 00897000
  934. COPY IOER 00898000
  935. COPY RECPAG 00899000
  936. IOBLOK DSECT @V5088AA 00900000
  937. ORG , @V5088AA 00901000
  938. FRAMCCWS DS 5D @V60B7AA 00902000
  939. ORG FRAMCCWS @V5088AA 00903000
  940. ENABLE DS D @V5088AA 00904000
  941. RDCPUID DS D @V60B7AA 00905000
  942. ORG *-7 @V60B7AA 00906000
  943. CPUIDBUF DS 3X ADDRESS OF 10-BYTE BUFFER FOR @V60B7AA 00907000
  944. * RDCPUID COMMAND 00908000
  945. ORG *+4 @V60B7AA 00909000
  946. VERBAGE DS D @V5088AA 00910000
  947. ORG *-7 @V5088AA 00911000
  948. VERBBUFF DS 3X ADDRESS OF 2K BUFFER FOR RDVERB @V5088AA 00912000
  949. ORG *+4 @V5088AA 00913000
  950. RDVERB DS D @V5088AA 00914000
  951. ORG *-7 @V5088AA 00915000
  952. RDVBUFF DS 3X ADDRESS OF 1-BYTE BUFFER FOR @V5088AA 00916000
  953. * VERBAGE CCW 00917000
  954. ORG *+4 @V5088AA 00918000
  955. DISABLE DS D @V5088AA 00919000
  956. BLOKSIZE EQU (*-IOBLOK)/8 SIZE IN D'WORDS OF IOBLOK + CCWS @V5088AA 00920000
  957. SPACE 5 00921000
  958. FRAMEHDR DSECT @V5088AA 00922000
  959. FRMTYPE DS X TYPE OF RECORD @V5088AA 00923000
  960. FRMSYS DS X SYSTEM/RELEASE LEVEL @V5088AA 00924000
  961. FRMSW0 DS X RECORD INDEPENDENT SWITCHES @V5088AA 00925000
  962. FRMMORE EQU X'80' MORE RECORDS FOLLOW @V5088AA 00926000
  963. FRMLAST EQU X'00' LAST FRAME RECORD @V5088AA 00927000
  964. TOD370 EQU X'40' 370 TIME OF DAY FLAG @VA09528 00927100
  965. FRMSW1 DS 3X LENGTH OF FRAME DATA @V5088AA 00928000
  966. FRMCNT DS X RECORD COUNT @V5088AA 00929000
  967. DS X RESERVED @V5088AA 00930000
  968. FRMDATE DS 4X SYSTEM DATE @V5088AA 00931000
  969. FRMTIME DS 4X SYSTEM TIME @V5088AA 00932000
  970. FRMCPID DS X UNUSED @V5088AA 00933000
  971. FRMCSER DS 3X CPU SERIAL NUMBER @V5088AA 00934000
  972. FRMMDL DS 2X CPU MODEL NUMBER @V5088AA 00935000
  973. FRMMCEL DS 2X CPU MCEL LENGTH @V5088AA 00936000
  974. END 00937000
  975. SPACE 00938000
  976. LTORG 00939000
  977. SPACE 00940000