Table of Contents

DMKCKP Source

References

Source Listing

DMKCKP.ASSEMBLE.txt
  1. CKP TITLE 'DMKCKP (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 VALIDATE SEQUENCING OF INPUT 00002000
  3. *. 00003000
  4. * REMEMBER TO RE-ASSEMBLE THIS MODULE. ACO COPY FILE HAS BEEN CHANGED 00004000
  5. * 00005000
  6. * MODULE NAME - 00006000
  7. * 00007000
  8. * DMKCKP 00008000
  9. * 00009000
  10. * FUNCTION - 00010000
  11. * 00011000
  12. * DMKCKP RETRIEVES ACCOUNTING DATA FROM VMBLOK, VDEVBLOK AND 00012000
  13. * UNPUNCHED ACCOUNTING CARDS, ACCOUNTING INFORMATION FOR 00013000
  14. * DEDICATED DEVICES, SAVE THE SYSTEM LOG MESSAGES, SAVE ALL 00014000
  15. * CONTROL BLOCKS FOR SPOOL FILES FOR ACTIVE AND CLOSED. THE 00015000
  16. * DATA IS WRITTEN ON THE SYSWARM CYLINDER OF THE I.P.L. PACK 00016000
  17. * 00017000
  18. * ATTRIBUTES - 00018000
  19. * 00019000
  20. * NON-REENTRANT, NON-RESIDENT, LOADED AND EXECUTED BY 00020000
  21. * MODULE DMKDMP OR BY INIT PROGRAM LOAD 00021000
  22. * 00022000
  23. * ENTRY POINT - 00023000
  24. * 00024000
  25. * DMKCKPT - CHECK POINT 00025000
  26. * 00026000
  27. * ENTRY CONDITIONS - 00027000
  28. * 00028000
  29. * CPID = 'CPCP' OR 'WARM' OR 'XXXX' 00029000
  30. * 00030000
  31. * CPCP = WARM MACHINE AND SHUTDOWN ASSUMED 00031000
  32. * WARM = WARM MACHINE AND AUTOMATIC RESTART REQUESTED 00032000
  33. * XXXX = COLD MACHINE; NO CHECK POINT TAKEN 00033000
  34. * 00034000
  35. * EXIT CONDITIONS - 00035000
  36. * 00036000
  37. * CPID = 'SHUT' OR 'WRM' 00037000
  38. * 00038000
  39. * SHUT = CHECK POINT TAKEN AND SHUTDOWN COMPLETE 00039000
  40. * WRM = CHECK POINT TAKEN AND AUTOMATIC RESTART REQUESTED 00040000
  41. * 00041000
  42. * CALLS TO OTHER ROUTINES - 00042000
  43. * 00043000
  44. * DMKSAVRS - RESTORE PROGRAM 00044000
  45. * 00045000
  46. EJECT 00046000
  47. * EXTERNAL REFERENCES - 00047000
  48. * 00048000
  49. * DMKRSPAC - ACCOUNTING CHAIN ANCHOR 00049000
  50. * DMKRSPHQ - SPOOL HOLD QUEUE CHAIN ANCHOR 00050000
  51. * DMKRSPRD - READER FILE CHAIN ANCHOR 00051000
  52. * DMKRSPPU - PUNCH FILE CHAIN ANCHOR 00052000
  53. * DMKRSPPR - PRINTER FILE CHAIN ANCHOR 00053000
  54. * DMKRSPID - SYSTEM SPOOL ID COUNTER 00054000
  55. * DMKRSPDL - SYSTEM DELETE CHAIN ANCHOR 00055000
  56. * DMKGRAWT - ADDRESS OF CONSOLE WRITE ROUTINE 00056000
  57. * DMKSYSOW - ADDRESS OF SYSTEM OWNLIST 00057000
  58. * DMKSYSOC - POINTER TO NUMBER OF ENTRIES 00058000
  59. * DMKSYSTP - POINTER TO SYSRES DEVICE TYPE 00059000
  60. * DMKSYSWM - ADDRESS OF WARMSTART CYLINDER 00060000
  61. * DMKTMRPT - ADDRESS OF VMVTIME CONVERT ROUTINE 00061000
  62. * DMKRSPCV - CHECK POINT-WARMSTART CYLINDER ID 00062000
  63. * DMKSYSRM - ADDRESS OF REAL STORAGE SIZE 00063000
  64. * 00064000
  65. * TABLES / WORKAREAS - 00065000
  66. * 00066000
  67. * 00067000
  68. * REGISTER USAGE - 00068000
  69. * 00069000
  70. * GPR5 = DMKRSPAC BASE 00070000
  71. * GPR6 = RCHBLOK BASE 00071000
  72. * GPR7 = RCUBLOK BASE 00072000
  73. * GPR8 = RDEVBLOK BASE 00073000
  74. * GPR11 = VMBLOK BASE 00074000
  75. * GPR12 = BASE REGISTER 00075000
  76. * GPR13 = BASE REGISTER FOR CKPBUFF DSECT 00076000
  77. * 00077000
  78. * NOTES - 00078000
  79. * 00079000
  80. * NONE 00080000
  81. * 00081000
  82. * OPERATION - 00082000
  83. * 00083000
  84. * 1. IF CPID = 'CPCP' OR 'WARM', GO TO STEP 2; 00084000
  85. * OTHERWISE, MOVE 'COLD' TO CPID, GO TO STEP 10 00085000
  86. * 2. HALT AND DRAIN ALL REAL DEVICES, SAVE THE REAL DEVICE 00086000
  87. * ADDRESS OF ALL ENABLED TERMINALS. 00087000
  88. * 2A.READ RECORD ONE OF WARMSTART CYLINDER AND 00088000
  89. * COMPARE THE CLOCK VALUE WRITTEN BY DMKWRM 00089000
  90. * (COLD OR WARM START) TO THE IN STORAGE VALUE 00090000
  91. * SAVE BY DMKWRM AT DMKRSPCV; IF EQUAL GO TO STEP 00091000
  92. * 3. OTHERWISE, GIVE MSG904W AND ENTER WAIT STATE 00092000
  93. * CODE 007. 00093000
  94. * 2B.WRITE OUT THE SAVED REAL DEVICE ADDRESSES OF ENABLED 00094000
  95. * TERMINALS. 00095000
  96. * 3. CALULATE AND SAVE ACCOUNTING INFORMATION FOR ALL 00096000
  97. * CURRENT LOGGED ON USERS. SAVE CURRENT UNPUNCHED 00097000
  98. * ACCOUNTING CARDS. (STARTING WITH DISK RECORD NUMBER TWO) 00098000
  99. * 4. SAVE SYSTEM LOG MESSAGES, DATE AND TIME 00099000
  100. * 5. SAVE SPOOL FILES CONTROL BLOCKS, ACTIVE AND CLOSED. 00100000
  101. * SAVE THE FOLLOWING STATUS OF SPOOL DEVICES; (A) OFFLINE 00101000
  102. * STATUS. (B) SEPARATOR OR NO-SEPARATOR STATUS. 00102000
  103. * (C) DRAINED STATUS. SAVE THE CURRENT SYSTEM 00103000
  104. * SPOOL ID COUNTER. 00104000
  105. * IF THE SPOOL DEVICE HAPPENS TO BE A 3800 PRINTER, 00105000
  106. * WRITE A SPECIAL DUMMY BLOCK ON THE WARM START CYLINDER 00106000
  107. * WHICH CONTAINS THE CURRENT VALUE OF THE IMAGE LIBRARY 00107000
  108. * TO USE AND THE CONTROL TABLES TO USE FOR THE 00108000
  109. * SEPARATOR PAGE. IN ADDITION, IF TRANSFER ALL SPOOL 00109000
  110. * FILES FROM THE 3800'S DELAYED PURGE QUEUE ONTO THE 00110000
  111. * SPOOL FILE DELETE QUEUE WHICH GETS CHECKPOINTED LATER. 00111000
  112. * 6. SAVE SPOOL RECORD ALLOCATION BLOCKS 00112000
  113. * 7. SAVE SPOOL HOLD QUEUE BLOCKS AND WRITE DISK RECORD 00113000
  114. * NUMBER ONE - CONTAINING A DELIMITER RECORD FOLLOWED 00114000
  115. * BY A 'FE' RECORD 00115000
  116. * 8. IF CPID = 'CPCP', ISSUE MESSAGES DMKCKP960I AND 00116000
  117. * DMKCKP961W TO THE SYSTEM OPERATOR AND ENTER DISABLED 00117000
  118. * WAIT STATE. CODE 008 00118000
  119. EJECT 00119000
  120. * 9. MOVE 'WRM' TO CPID 00120000
  121. * 10. LOAD DMKSAVRS AND EXIT TO DMKSAVRS. 00121000
  122. * 11. IF PROGRAM CHECK OR MACHINE CHECK OR FATAL I/O ERROR OR 00122000
  123. * INVALID WARM START DATA OR INVALID WARM START CYL OR 00123000
  124. * WARM START AREA FULL, SEND MESSAGE DMKCKP900W OR 00124000
  125. * DMKCKP901W OR DMKCKP902W OR DMKCKP904 OR DMKCKP910W OR 00125000
  126. * DMKCKP911W RESPECTIVELY AND ENTER DISABLE WAIT STATE. 00126000
  127. * (WAIT STATE CODE 009) 00127000
  128. * 12. CHECK POINT RECORDS ARE 4K IN LENGTH AND CONTAIN 00128000
  129. * VARIABLE LENGTH LOGICAL RECORDS. A DELIMITER 00129000
  130. * RECORD SEPARATES RECORD TYPES AND SIZES. 00130000
  131. * A DELIMITER RECORD IS THE SAME SIZE AS DATA RECORDS 00131000
  132. * AND CONTAINS ALL X'FF' EXCEPT FOR BYTES 9 TO 16. 00132000
  133. * THESE 8 BYTES CONTAIN A UNIQUE NUMBER AND RECORD COUNT. 00133000
  134. * THE FIRST CKECK POINT LOGICAL RECORD IS A DELIMITER 00134000
  135. * RECORD. THE LAST LOGICAL RECORD IN A BUFFER 00135000
  136. * IS A 8 BYTE RECORD (X'FE'). THE FIRST LOGICAL 00136000
  137. * OF EACH BUFFER EXCEPT THE FIRST IS A DELIMITER RECORD 00137000
  138. * WITH THE FIRST 8 BYTES X'EE'. 00138000
  139. * 00139000
  140. * RESPONSE - 00140000
  141. * 00141000
  142. * DMKCKP960I SYSTEM WARM START DATA SAVED 00142000
  143. * DMKCKP961W SYSTEM SHUTDOWN COMPLETE 00143000
  144. * 00144000
  145. * DISABLE WAIT STATE (CODE 008) 00145000
  146. * 00146000
  147. * ERROR MESSAGES - 00147000
  148. * 00148000
  149. * DMKCKP900W SYSTEM RECOVERY FAILURE; PROGRAM CHECK 00149000
  150. * DMKCKP901W SYSTEM RECOVERY FAILURE; MACHINE CHECK, RUN SEREP 00150000
  151. * DMKCKP902W SYSTEM RECOVERY FAILURE; FATAL I/O ERROR-NUCL CYL 00151000
  152. * DMKCKP902W SYSTEM RECOVERY FAILURE; FATAL I/O ERROR-WARM CYL 00152000
  153. * DMKCKP922W SYSTEM RECOVERY FAILURE; INVALID SPOOLING DATA 00153000
  154. * DMKCKP910W SYSTEM RECOVERY FAILURE; INVALID WARM START CYL 00154000
  155. * DMKCKP911W SYSTEM RECOVERY FAILURE; WARM START AREA FULL 00155000
  156. * 00156000
  157. * DISABLE WAIT STATE (CODE 007) 00157000
  158. * 00158000
  159. *. 00159000
  160. SPACE 3 00160000
  161. EJECT 00161000
  162. COPY OPTIONS 00162000
  163. SPACE 3 00163000
  164. COPY LOCAL OPTIONS 00164000
  165. SPACE 2 00165000
  166. PUNCH 'SPB' TELL LOADER TO START AT NEXT PAGE 00166000
  167. * BOUNDARY 00167000
  168. DMKCKP CSECT 00168000
  169. SPACE 00169000
  170. ENTRY DMKCKPT,DMKCKPST,DMKCKPRS @V200820 00170000
  171. ENTRY DMKCKPLD @V407429 00171000
  172. SPACE 00172000
  173. EXTRN DMKSAV,DMKSAVRS 00173000
  174. SPACE 3 00174000
  175. USING PSA,R0 00175000
  176. USING ACNTBLOK,R4 00176000
  177. USING RCHBLOK,R6 00177000
  178. USING RCUBLOK,R7 00178000
  179. USING RDEVBLOK,R8 00179000
  180. USING SYSLOCS,R10 00180000
  181. USING VMBLOK,R11 00181000
  182. USING DMKCKPT,R12,R13 @V407429 00182000
  183. SPACE 3 00183000
  184. EJECT 00184000
  185. DMKCKPT DS 0H 00185000
  186. LM R12,R13,CKPBASE LOAD BASE REGS @V407429 00186000
  187. B CKP001 00187000
  188. ERRORMSG DC A(MSG900-DMKCKP+X'800') ERROR MESSAGE ADDRESS @V2A2029 00188000
  189. ORG DMKCKPT+14 ORIGIN NAME ADDRESS FOR DMKDDR @V2A2029 00189000
  190. ID DC CL8'DMKCKP' MODULE NAME 00190000
  191. SPACE 00191000
  192. ORG DMKCKPT+22 ORIGIN NUC CYL ADDRESS FOR DMKDDR@V2A2029 00192000
  193. DMKCKPST DC XL2'00' CYLINDER ADDRESS OF THE FIRST NUCLEUS CYL 00193000
  194. DC XL2'00' CYLINDER ADDRESS OF THE LAST NUCLEUS CYL 00194000
  195. SPACE 00195000
  196. DS 0F @V2A2029 00196000
  197. DMKCKPRS DC XL8'00' BBCCHHR OF THE DMKSAV ON DISK @V2A2029 00197000
  198. DMKCKPLD DC XL8'00' BBCCHRR OF DMKCKP PAGE 2 @V407429 00198000
  199. SEEK DC H'0' BB CURRENT SEEK ADDRESS @V2A2029 00199000
  200. DC H'0' CC CYLINDER @V2A2029 00200000
  201. HEAD DC H'0' HH HEAD @V2A2029 00201000
  202. REC DC X'0100' R RECORD @V2A2029 00202000
  203. BASEREGS DC A(X'800') DMKCKP BASE ADDRESS @V2A2029 00203000
  204. DC A(X'1800') 2ND BASE REG ADDRESS @V407429 00204000
  205. TERMBUFF DC A(RECBUFF-DMKCKP+X'1800') TERMBUFF ADDRESS @V407429 00205000
  206. SPACE 00206000
  207. CKP001 DS 0H 00207000
  208. LH R0,INTTIO GET SYS IPL ADDRESS 00208000
  209. ST R0,SYSRES SAVE 00209000
  210. MVC PRNPSW(8),WAIT17 SET PROGRAM NEW PSW @VA09017 00210100
  211. MVC MCNPSW(8),WAIT7 SET UP MACHINE NEW PSW @V407429 00211000
  212. SLR R1,R1 .. @V2A2029 00212000
  213. ST R1,IPLPSW+4 CLEAR RESTART PSW @V2A2029 00213000
  214. LA R0,LDCCW GET ADDRESS OF CCWS @V407429 00214000
  215. LA R3,DMKCKPLD DMKCKP PAGE 2 SEEK ADDR @V56BDA8 00215000
  216. STCM R3,B'0111',READHAR0+1 STORE IN CASE TCC @V56BDA8 00216000
  217. LA R3,LDSRCH SEARCH CCW IN CASE OF @V56BDA8 00217000
  218. STCM R3,B'0111',ALTTIC+1 ALTERNATE TRACK @V56BDA8 00218000
  219. B CKPLDRT GO LOAD PAGE 2 @V407429 00219000
  220. DONE BAL R14,CLOSE WRITE OUT BUFFER TO WRM CYL @V407429 00220000
  221. MVC SEEK+2(2),CYLSTART FIRST WARMSTART CYLINDER @V407429 00221000
  222. MVC HEAD(4),=X'00000100' SET HEAD ZERO AND RECORD @V407429 00222000
  223. * ONE 00223000
  224. MVI DSK05,X'06' SET CCW TO READ DATA @V407429 00224000
  225. BAL R14,RDWR READ RECORD ONE FROM 1ST WRM CYL @V407429 00225000
  226. MVI DSK05,X'05' SET CCW TO WRITE DATA @V407429 00226000
  227. MVC BUFFCV(8),DMKRSPCV SET CLOCK VALUE IN CASE OF @V407429 00227000
  228. * ERROR 00228000
  229. MVC BUFFDLM(8),X8FF INDICATE CHECK POINT VALID @V407429 00229000
  230. MVI BUFFVER,VERR6 MAKE IT TO BE RELEASE 6 VERSION @VA12228 00229500
  231. BAL R14,RDWR WRITE RECORD ONE TO INDICATE @V407429 00230000
  232. * VALID WARM START DATA 00231000
  233. SPACE 00232000
  234. CLC CPID(4),=C'CPCP' SHUTDOWN ??? @V407429 00233000
  235. BE SHUTSYS YES - GO DO IT @VA09276 00234200
  236. MVC CPID(4),=C'WRM ' INDICATE AUTOMATIC WARM START @VA09276 00234400
  237. MVC IPLPSW(8),WAIT16 LOAD RESTART PSW - WARM START @VA09276 00234600
  238. * DATA SAVED 00234800
  239. B WARM GO WARM START @VA09276 00235000
  240. ************************************** 00236000
  241. * 00237000
  242. * SYSTEM SHUTDOWN 00238000
  243. * 00239000
  244. **************************************** 00240000
  245. SPACE 00241000
  246. SHUTSYS LA R3,SHUTCCW SHUDOWN COMPLETE MESSAGE @V407429 00242000
  247. MVC CPID(4),CSHUT INDICATE SHUTDOWN COMPLETE @V407429 00243000
  248. MVI SWAITSW+1,X'00' INDICATE SHUT @V407429 00244000
  249. CHKCNSL LA R2,ALARM ALARM OPTION FOR MESSAGE @V407429 00245000
  250. LA R1,OPRPROG PROGRAM RETURN ADDRESS @V407429 00246000
  251. ST R1,PRNPSW+4 SET UP NEW PROGRAM PSW @V407429 00247000
  252. CONSLP EQU * WRITE MESSAGES TO THE OPERATOR @V407429 00248000
  253. SR R0,R0 CLEAR MESSAGE LENGTH REG @V407429 00249000
  254. SR R1,R1 CLEAR MESSAGE ADDRESS REG @V407429 00250000
  255. * REG 3 POINTS MESSAGE ADDRESS LIST 00251000
  256. ICM R1,B'0111',1(R3) GET ADDRESS OF MESSAGE @V407429 00252000
  257. BZ SWAITSW BRANCH IF END OF LIST @V407429 00253000
  258. IC R0,0(R3) GET MESSAGE LENGTH @V407429 00254000
  259. L R15,DMKOPRWT ENTRY TO CONSOLE WRITE ROUTINE @V407429 00255000
  260. BALR R14,R15 ... @V407429 00256000
  261. BC 1,SWAITSW BRANCH IF DEVICE NOT FOUND @V407429 00257000
  262. SR R2,R2 CLEAR PARM REG @V407429 00258000
  263. LA R3,4(R3) POINT TO NEXT MESSAGE IN LIST @V407429 00259000
  264. ICM R4,B'1111',4(R3) IS THIS THE LAST MESSAGE ? @V407429 00260000
  265. BZ CHKCNSL YES -- ADD ALARM TO PARM REG @V407429 00261000
  266. B CONSLP GO SET UP REGS FOR NEXT MESSAGE @V407429 00262000
  267. SPACE 00263000
  268. OPRPROG LM R12,R13,CKPBASE RELOAD BASE REGS @V407429 00264000
  269. SWAITSW B ERRWAIT BRANCH IF ERROR @V407429 00265000
  270. TM CPSTAT4,CPREIPL Was SHUTDOWN REIPL in prog? HRC076DK 00265010
  271. BO REIPL Yes HRC076DK 00265020
  272. TM CPSTAT4,CPPWROFF HRC002DK 00265100
  273. BZ WAITNOW HRC002DK 00265200
  274. NI CPSTAT4,255-CPPWROFF HRC002DK 00265300
  275. MVC PRNPSW(8),WAIT8 HRC002DK 00265400
  276. LM R2,R3,POWEROFF HRC002DK 00265500
  277. DC X'8323001F' HRC002DK 00265600
  278. WAITNOW EQU * HRC002DK 00265700
  279. LPSW WAIT8 DISABLE WAIT (CODE 008) @V407429 00266000
  280. POWEROFF DS 0D HRC002DK 00266300
  281. DC C'POWEROFF' HRC002DK 00266600
  282. * SHUTDOWN COMPLETE 00267000
  283. ERRWAIT LM R0,R15,CKPSAVE RESTORE GPRS TO TIME OF TROUBLE @V407429 00268000
  284. MVC 184(4),SAVEDEV RESTORE DEVICE INTERRUPT ADDRESS @V407429 00269000
  285. MVC CSW(12),SAVECSW RESTORE CSW AND CAW @V407429 00270000
  286. MVC 16(24,R0),SENSDATA SENSE DATA TO LOW STORAGE @V407429 00271000
  287. MVC 136(8),SAVECODE RESTORE INTERRUPT CODES @V407429 00272000
  288. LPSW WAIT7 DISABLE WAIT STATE (CODE 007) @V407429 00273000
  289. * ERROR CONDITION 00274000
  290. * HRC076DK 00274100
  291. REIPL EQU * Here for SHUTDOWN REIPL HRC076DK 00274130
  292. NI CPSTAT4,255-CPREIPL Turn off REIPL flag HRC076DK 00274160
  293. MVC CPID,=C'WARM' Indicate warm start HRC076DK 00274190
  294. XC CSW,CSW Clear prior CSW HRC076DK 00274220
  295. LA R2,WAIT8 -> shutdown complete PSW HRC076DK 00274250
  296. LA R1,READIPL -> IPL CCW string HRC076DK 00274280
  297. ST R1,CAW Set its address in the CAW HRC076DK 00274310
  298. LH R1,SYSIPLDV Get the IPL device address HRC076DK 00274340
  299. STH R1,INTTIO Place as i/o interrupt code HRC076DK 00274370
  300. SIO 0(R1) Issue the read ipl CCW HRC076DK 00274400
  301. BC 4,LOADCK CSW stored; check status HRC076DK 00274430
  302. BC 7,IPLLOAD Error on SIO, load wait PSW HRC076DK 00274460
  303. TIO 0(R1) Loop for i/o completion HRC076DK 00274490
  304. BC 7,*-4 Keep trying HRC076DK 00274520
  305. * HRC076DK 00274550
  306. LOADCK EQU * HRC076DK 00274580
  307. CLI CSW+4,X'0C' CE+DE from i/o operation? HRC076DK 00274610
  308. BNE IPLLOAD No, error. Load WAIT8 PSW HRC076DK 00274640
  309. LA R2,IPLPSW Good read; -> IPL PSW HRC076DK 00274670
  310. * HRC076DK 00274700
  311. IPLLOAD EQU * HRC076DK 00274730
  312. LPSW 0(R2) Load WAIT8 PSW or IPL PSW HRC076DK 00274760
  313. * HRC076DK 00274790
  314. READIPL CCW X'02',X'000000',X'60',24 READ IPL HRC076DK 00274820
  315. CCW X'08',X'000008',0,0 TIC to IPL record CCWs HRC076DK 00274850
  316. * 00275000
  317. DS 0F @V407429 00276000
  318. SHUTCCW DC AL1(1),AL3(MSGBLK-DMKCKP+X'800') @V407429 00277000
  319. DC AL1(1),AL3(MSGBLK-DMKCKP+X'800') @V407429 00278000
  320. DC AL1(MSG960L),AL3(MSG960-DMKCKP+X'800') @V407429 00279000
  321. DC AL1(1),AL3(MSGBLK-DMKCKP+X'800') @V407429 00280000
  322. DC AL1(MSG961L),AL3(MSG961-DMKCKP+X'800') @V407429 00281000
  323. DC AL1(1),AL3(MSGBLK-DMKCKP+X'800') @V407429 00282000
  324. DC A(0) @V407429 00283000
  325. * 00284000
  326. MSG960 DC C'DMKCKP960I System' HRC028DK 00285490
  327. MSGBLK DC C' ' @V407429 00286000
  328. CWARM DC C'WARM START ' @V407429 00287000
  329. CDATA DC C'data saved' HRC028DK 00288490
  330. MSG960L EQU *-MSG960 @V407429 00289000
  331. * 00290000
  332. MSG961 DC C'DMKCKP961W System ' HRC028DK 00291590
  333. CSHUT DC C'Shutdown Complete' HRC028DK 00292180
  334. MSG961L EQU *-MSG961 @V407429 00293000
  335. * 00294000
  336. * READ DMKSAVCP DMKSAVRS PROGRAM INTO CORE 00295000
  337. * THEN GO TO DMKSAVRS 00296000
  338. COLD MVC CPID(4),=C'COLD' INDICATE COLD START @V407429 00297000
  339. WARM LA R0,RESTCCW ADDRESS OF DISK CCW @V407429 00298000
  340. LA R3,DMKCKPRS DMKSAV SEEK ADDRESS @V56BDA8 00299000
  341. STCM R3,B'0111',READHAR0+1 STORE IN CASE TCC @V56BDA8 00300000
  342. LA R3,RESTSRCH SEARCH CCW @V56BDA8 00301000
  343. STCM R3,B'0111',ALTTIC+1 IN CASE OF ALTERNATE TRACK @V56BDA8 00302000
  344. CKPLDRT LA R14,100 RETRY COUNT @V56BDA8 00303000
  345. L R2,SYSRES GET IPL DEVICE ADDRESS @V407429 00304000
  346. TIOSYS ST R0,CAW SET UP CAW @V407429 00305000
  347. TIOSYS1 EQU * @V56BDA8 00306000
  348. TIO 0(R2) CLEAR DEVICE @V407429 00307000
  349. BNZ *-4 @V407429 00308000
  350. SIO 0(R2) START @V407429 00309000
  351. BNZ TIOSYS CLEAR DEVICE AGAIN @V407429 00310000
  352. TIO 0(R2) TEST @V407429 00311000
  353. BC 6,*-4 LOOP IF BUSY OR STATUS STORED @V407429 00312000
  354. CLC CSW+4(2),=AL1(CE+DE,0) SUCCESSFULL READ @V407429 00313000
  355. BNE SAVESTAT NO - SAVE STATUS @V407429 00314000
  356. TM FLAG,CKPLD CKP PAGE 2 LOADED ? @V407429 00315000
  357. BO SAVERD YES - @V407429 00316000
  358. OI FLAG,CKPLD INDICATE CKP PAGE 2 LOADED @V407429 00317000
  359. B CKP002 GO CHECKPOINT ROUTNINE @V407429 00318000
  360. SAVESTAT MVC SAVEDEV(4),184 SAVE DEVICE ADDRESS @V407429 00319000
  361. MVC SAVECSW(12),CSW SAVE CSW AND CAW @V407429 00320000
  362. LA R3,SNSECCW ADDRESS OF SENSE CCW @V407429 00321000
  363. ST R3,CAW SET UP CAW @V407429 00322000
  364. TIO 0(R2) CLEAR IT @V407429 00323000
  365. BC 6,*-4 LOOP IF BUSY OR STATUS STORED @V407429 00324000
  366. SIO 0(R2) START IO (SENSE) @V407429 00325000
  367. TIO 0(R2) TEST IO @V407429 00326000
  368. BC 6,*-4 LOOP IF BUSY OR STATUS STORED @V407429 00327000
  369. TM SENSDATA,TRKCONCK TRACK CONDITION CHECK? @V56BDA8 00328000
  370. BZ COUNTERR NO, RETRY @V56BDA8 00329000
  371. MVC CAW+1(3),=AL3(READHAR0-DMKCKP+X'800') @V56BDA8 00330000
  372. TIO 0(R2) DRAIN ANYTHING PENDING @V56BDA8 00331000
  373. BC 7,*-4 KEEP TRYING @V56BDA8 00332000
  374. SIO 0(R2) READ R0 @V56BDA8 00333000
  375. BC 7,*-4 TAKE ERROR PATH @V56BDA8 00334000
  376. TIO 0(R2) TEST FOR COMPLETION @V56BDA8 00335000
  377. BC 7,*-4 TRY AGAIN @V56BDA8 00336000
  378. CLC CSW+4(2),=AL1(CE+DE,0) CLEAN END? @V56BDA8 00337000
  379. BNE COUNTERR NO, ERROR @V56BDA8 00338000
  380. MVC CAW+1(3),=AL3(ALTSEEK-DMKCKP+X'800') @V56BDA8 00339000
  381. BCT R14,TIOSYS1 RESTART ON ALTERNATE TRACK @V56BDA8 00340000
  382. B TESTP2 CHECK FOR PAGE 2 LOADED @V56BDA8 00341000
  383. SPACE 1 00342000
  384. COUNTERR EQU * @V56BDA8 00343000
  385. BCT R14,TIOSYS RETRY 100 TIMES @V56BDA8 00344000
  386. TESTP2 EQU * @V56BDA8 00345000
  387. TM FLAG,CKPLD LOADING CKP PAGE2 OR SAV ? @V407429 00346000
  388. BO RESTAUT BRANCH - LOADING DMKSAV @V407429 00347000
  389. * 00348000
  390. LPSW WAIT17 WAIT - ERROR READING CKP PAGE 2 @VA09017 00349100
  391. * 00350000
  392. RESTAUT MVC CPID(4),CSHUT OVERRIDE WARM IF AUTO RESTART @V407429 00351000
  393. B MSG902N FATAL IO ERROR ON NUCLEUS CYL @V407429 00352000
  394. SAVERD EQU * HRC075DK 00353000
  395. L R10,SYSRES Get addr of the IPL devive HRC075DK 00353500
  396. GOTO DMKSAVRS START SYSTEM RE-IPL @V407429 00354000
  397. EJECT 00355000
  398. ******************************************** 00356000
  399. * 00357000
  400. * ERROR RECOVERY ROUTINE 00358000
  401. * 00359000
  402. ******************************************** 00360000
  403. SPACE 00361000
  404. MSG902N EQU * HERE ON NUCLEUS CYLINDER ERROR @V407429 00362000
  405. MVC MSGDATA+16(9),=C'NUCL CYL' @V407429 00363000
  406. B MSG902 .. @V407429 00364000
  407. SPACE 00365000
  408. DSKBWAIT MVC IONPSW(8),SIOINTP SET UP INT PSW @V407429 00366000
  409. BCT R0,WAITI WAIT FOR CHANNEL TO CLEAR @V407429 00367000
  410. SPACE 00368000
  411. MSG902W EQU * HERE ON I/O ERROR-WARM START CYL @V407429 00369000
  412. MVC MSGDATA+16(9),=C'WARM CYL' @V407429 00370000
  413. MSG902 MVC MSGDATA(16),=C'FATAL I/O ERROR-' @V407429 00371000
  414. MVI MSGNUM2,C'2' SET MSG 902W @V407429 00372000
  415. * 00373000
  416. B CHKERR PRINT ERROR MESSAGE @V407429 00374000
  417. * 00375000
  418. DSKSTOR TM CSW+4,BUSY DE PENDING IN DEVICE ? @V407429 00376000
  419. BZ DSKSNS NO - @V407429 00377000
  420. TM CSW+4,CE+DE+ATTN+CUE ENDING STATUS ? @V407429 00378000
  421. BNZ DSKSIO BRANCH IF ENDING STATUS @V407429 00379000
  422. B DSKBWAIT INTERRUPT PENDING - WAIT FOR IT @V407429 00380000
  423. * 00381000
  424. *** RECOVERY FAILURE 00382000
  425. * 00383000
  426. MSG900W EQU * HERE ON PROGRAM CHECK @V407429 00384000
  427. LM R12,R13,CKPBASE RESTORE BASE REGS @V407429 00385000
  428. TM ACNTSW,X'20' DOING ACNT CALCULATIONS ? @V407429 00386000
  429. BZ CHKERR NO -- REAL PROGRAM CHECK @V407429 00387000
  430. CLI INTPR+1,X'09' FIXED POINT DIVIDE ? @V407429 00388000
  431. BE 8(R5) YES - RETURN ON R5 PLUS 8 @V407429 00389000
  432. CHKERR EQU * HERE IF RECOVERY ERROR FAILURE @V407429 00390000
  433. MVC SAVECODE(8),136 LAST PROGRAM CHECK INT CODE @V407429 00391000
  434. MVC SAVEPSW(8),PROPSW SAVE PROGRAM OLD PSW @V407429 00392000
  435. STM R0,R15,CKPSAVE SAVE ALL REGISTERS @V407429 00393000
  436. LA R3,OPRPROG ADDRESS OF PROGRAM CHECK RETURN @V407429 00394000
  437. ST R3,PRNPSW+4 SET NEW PROGRAM PSW ADDRESS @V407429 00395000
  438. LA R3,ERRCCW ERROR MSG LIST ADDRESS @V407429 00396000
  439. CLC CPID(4),=C'CPCP' WARM MACHINE ?? @V407429 00397000
  440. BE WARMMCH YES - @V407429 00398000
  441. CLC CPID(4),CWARM WARM MACHINE ?? @V407429 00399000
  442. BNE CHKCNSL NO - WRITE ERROR MESSAGE @V407429 00400000
  443. MVC CPID(4),=C'CPID' FORCE SHUTDOWN MODE @V407429 00401000
  444. WARMMCH L R4,ARSPPR ADDRESSS OF DMKRSPPR LIST @V407429 00402000
  445. SL R4,=F'4' ADJUST TO START OF LIST @V407429 00403000
  446. MVC 0(LISTSIZE,R4),RSPLIST MOVE IN MODIFIED LIST @V407429 00404000
  447. B CHKCNSL OUTPUT @V407429 00405000
  448. * 00406000
  449. MSG901W EQU * HERE ON MACHINE CHECK @V407429 00407000
  450. MVC MSGDATA(24),=C'MACHINE CHECK, RUN SEREP' @V407429 00408000
  451. MVI MSGNUM2,C'1' SET MSG NUMBER 901W @V407429 00409000
  452. B CHKERR OUTPUT MSG @V407429 00410000
  453. SPACE 00411000
  454. MSG922W EQU * HERE IF IVVALID WARM START DATA @V407429 00412000
  455. MVC MSGNUM1(2),=C'22' SET MSG 922W @V407429 00413000
  456. MVC MSGDATA(24),=C'INVALID SPOOLING DATA ' @V407429 00414000
  457. B CHKERR OUTPUT MESSAGE @V407429 00415000
  458. SPACE 00416000
  459. MSG910W EQU * INVALID WARM START CYLINDER @V407429 00417000
  460. MVC MSGDATA(22),CINVAL @V407429 00418000
  461. SETNUM1 MVI MSGNUM1,C'1' SET MSG 910W @V407429 00419000
  462. B CHKERR OUTPUT MESSAGE @V407429 00420000
  463. SPACE 00421000
  464. MSG911W EQU * WARM START AREA FULL @V407429 00422000
  465. MVI MSGNUM2,C'1' SET MSG 911W @V407429 00423000
  466. MVC MSGDATA(11),CWRMCYL .. @V407429 00424000
  467. MVC MSGDATA+11(9),CAREA @V407429 00425000
  468. B SETNUM1 FINISH 911 MESSAGE @V407429 00426000
  469. SPACE 00427000
  470. EJECT 00428000
  471. ******************************************************************** 00429000
  472. * 00430000
  473. * CONSTANTS 00431000
  474. * 00432000
  475. ******************************************************************** 00433000
  476. SPACE 00434000
  477. DS 0F @V407429 00435000
  478. ERRCCW DC AL1(1),AL3(MSGBLK-DMKCKP+X'800') @V407429 00436000
  479. DC AL1(1),AL3(MSGBLK-DMKCKP+X'800') @V407429 00437000
  480. DC AL1(1),AL3(MSGBLK-DMKCKP+X'800') @V407429 00438000
  481. DC AL1(MSG900L),AL3(MSG900-DMKCKP+X'800') @V407429 00439000
  482. DC AL1(1),AL3(MSGBLK-DMKCKP+X'800') @V407429 00440000
  483. DC AL1(1),AL3(MSGBLK-DMKCKP+X'800') @V407429 00441000
  484. DC A(0) @V407429 00442000
  485. * 00443000
  486. MSG900 DC C'DMKCKP9' @V407429 00444000
  487. MSGNUM1 DC C'0' @V407429 00445000
  488. MSGNUM2 DC C'0W System Recovery failure; ' HRC028DK 00446590
  489. MSGDATA DC CL24'Program Check' HRC028DK 00447180
  490. MSG900L EQU *-MSG900 @V407429 00448000
  491. * 00449000
  492. CINVAL DC C'Invalid ' HRC028DK 00450490
  493. CWRMCYL DC C'WARM START ' @V407429 00451000
  494. CCYL DC C'CYL' @V407429 00452000
  495. CAREA DC C'area full' HRC028DK 00453490
  496. * 00454000
  497. CKPBASE EQU BASEREGS-DMKCKP+X'800' @V407429 00455000
  498. * 00456000
  499. DSKCCW CCW X'07',SEEK-DMKCKP+X'800',CC,6 @V407429 00457000
  500. DISKSRCH EQU * RESUME POINT AFTER ALTERNATE SEEK@V56BDA8 00458000
  501. CCW X'31',SEEK+2-DMKCKP+X'800',CC,5 @V407429 00459000
  502. CCW X'08',*-8-DMKCKP+X'800',0,0 @V407429 00460000
  503. DSK05 CCW X'06',RECBUFF-DMKCKP+X'800',SILI+CC,4096 @V407429 00461000
  504. CCW 4,0,SILI+SKIP,1 @V407429 00462000
  505. * 00463000
  506. RESTCCW CCW 7,DMKCKPRS-DMKCKP+X'800',CC,6 @V407429 00464000
  507. RESTSRCH EQU * RESUME POINT AFTER ALTERNATE SEEK@V56BDA8 00465000
  508. CCW 49,DMKCKPRS+2-DMKCKP+X'800',CC,5 @V407429 00466000
  509. CCW 8,*-8-DMKCKP+X'800',0,0 @V407429 00467000
  510. CCW 6,DMKSAV,CC+SILI,4096 @V407429 00468000
  511. CCW 4,0,SILI+SKIP,1 @V407429 00469000
  512. SPACE 00470000
  513. * 00471000
  514. LDCCW CCW 7,DMKCKPLD-DMKCKP+X'800',CC,6 @V407429 00472000
  515. LDSRCH EQU * RESUME POINT AFTER ALTERNATE SEEK@V56BDA8 00473000
  516. CCW 49,DMKCKPLD+2-DMKCKP+X'800',CC,5 @V407429 00474000
  517. CCW 8,*-8-DMKCKP+X'800',0,0 @V407429 00475000
  518. CCW 6,0+X'1800',CC+SILI,4096 @V407429 00476000
  519. CCW 4,0,SILI+SKIP,1 @V407429 00477000
  520. SPACE 00478000
  521. SNSECCW CCW 4,SENSDATA-DMKCKP+X'800',SILI,24 SENSE CCW @V407429 00479000
  522. SPACE 1 00480000
  523. READHAR0 CCW 07,0,CC,6 @V56BDA8 00481000
  524. CCW 26,0,CC+SILI+SKIP,5 VALTERN @V56BDA8 00482000
  525. CCW 22,ALTR0ADD-DMKCKP+X'800',SILI,4 @V56BDA8 00483000
  526. ALTSEEK CCW 07,ALTSKADD-DMKCKP+X'800',CC+SILI,6 @V56BDA8 00484000
  527. ALTTIC CCW 08,DISKSRCH-DMKCKP+X'800',0,0 @V56BDA8 00485000
  528. ALTSKADD DC XL2'0' BB @V56BDA8 00486000
  529. ALTR0ADD DS XL4 CCHH FROM RECORD 0 COUNT @V56BDA8 00487000
  530. SUSPEND CCW X'87',SUSPORD-DMKCKP+X'800',CC,4 EXEC MSC ORDER @V407438 00488000
  531. CCW X'03',0,SILI,1 MUST BE CHAINED TO A NOP @V407438 00489000
  532. SUSPORD DC AL1(X'22',0,B'10000000',0) SUSPEND, IMMEDIATE @V407438 00490000
  533. DS 0D @V407429 00491000
  534. SIOINTP DC X'000C0000' @V407429 00492000
  535. DC A(DSKSIO-DMKCKP+X'800') @V407429 00493000
  536. * 00494000
  537. CHKPINT DC X'000C0000' @V407429 00495000
  538. DC A(MSG900W-DMKCKP+X'800') @V407429 00496000
  539. * 00497000
  540. CHKPMCK DC X'000C0000' @V407429 00498000
  541. DC A(MSG901W-DMKCKP+X'800') @V407429 00499000
  542. * 00500000
  543. DC X'000C0000' NEW IO PSW @V407429 00501000
  544. DC A(CHKIOINT-DMKCKP+X'800') @V407429 00502000
  545. * 00503000
  546. ENABLE EQU * @V407429 00504000
  547. IWAIT DC X'020E0000' @V407429 00505000
  548. DC A(0) @V407429 00506000
  549. * 00507000
  550. DISABLE EQU * @V407429 00508000
  551. IOINTP DC X'000C0000' @V407429 00509000
  552. DC A(IOINT-DMKCKP+X'800') @V407429 00510000
  553. * 00511000
  554. WAIT7 DC X'000A0000' PROGRAM OR DISK ERROR @V407429 00512000
  555. DC X'00000007' DISABLE WAIT STATE (CODE 007) @V407429 00513000
  556. * 00514000
  557. WAIT8 DC X'000A0000' SHUTDOWN COMPLETE @V407429 00515000
  558. DC X'00000008' DISABLE WAIT STATE (CODE 008) @V407429 00516000
  559. * 00517000
  560. WAIT16 DC X'000A0000' WARM START DATA SAVED-RESTART @VA09276 00517500
  561. DC X'00000016' DISABLE WAIT STATE ( CODE 16 ) @VA09276 00517600
  562. WAIT17 DC X'000A0000' ERROR LOADING CKP PAGE 2 @VA09017 00518100
  563. DC X'00000017' DISABLE WAIT STATE (CODE 17) @VA09017 00519100
  564. * 00520000
  565. SYSRES DC F'0' ADDRESS OF SYSRES DEVICE @V407429 00521000
  566. FLAG DC X'00' FLAG BYTE @V407429 00522000
  567. CKPLD EQU X'80' DMKCKP PAGE 2 LOADED @V407429 00523000
  568. CKPMDL EQU X'40' INDICATE MONITOR FILE COPY EXISTS @V50A2B5 00524000
  569. TRKCONCK EQU X'02' TRACK CONDITION CHECK @V56BDA8 00525000
  570. SPACE 00526000
  571. HDTABLE DS 0H TABLE OF HEAD NUMBERS FOR @V407429 00527000
  572. * 2314,2319 00528000
  573. * FOR PAGE TO HEAD CONVERSION 00529000
  574. PRINT DATA @V407429 00530000
  575. DC AL1(00,00,01,01,02,03,03,04) @V407429 00531000
  576. DC AL1(05,05,06,06,07,08,08,09) @V407429 00532000
  577. DC AL1(10,10,11,11,12,13,13,14) @V407429 00533000
  578. DC AL1(15,15,16,16,17,18,18,19) @V407429 00534000
  579. PRINT NODATA @V407429 00535000
  580. SPACE 00536000
  581. LTORG @V407429 00537000
  582. EJECT 00538000
  583. DS 0H @V407429 00539000
  584. CKP002 EQU * @V407429 00540000
  585. XC CLR1(CLR1SIZE),CLR1 CLEAR SAVE AND WORK AREA @V407429 00541000
  586. MVC PRNPSW(24),CHKPINT PROG,MACHINE,I/O PSWS @V407429 00542000
  587. L R14,TERMBUFF GET ADDRESS OF TERM BUFFER @V407429 00543000
  588. MVI DLMREC,X'FF' SET DLMREC TO FFS @V2A2029 00544000
  589. MVC DLMREC+1(CLRFSIZE-1),DLMREC .. @V2A2029 00545000
  590. LCTL C2,C3,X8FF ENABLE ALL CHANNELS @V2A2029 00546000
  591. LCTL C0,C0,CPCREG0 RESET CONTROL REG 0 @VA03413 00547000
  592. CLC CPID(4),=C'CPCP' SHUTDOWN REQUESTED ?? 00548000
  593. BE GETLIST YES - GET RSP LIST @V2A2029 00549000
  594. CLC CPID(4),CWARM WARM MACHINE ?? @V2A2029 00550000
  595. BNE COLD NO, COLD MACHINE ... GET OUT 00551000
  596. GETLIST L R1,ARSPPR ADDRESS OF LIST IN DMKRSP @V2A2029 00552000
  597. S R1,=F'4' ADJUST TO START OF DMKRSPPR LIST 00553000
  598. MVC RSPLIST(LISTSIZE),0(R1) MOVE LIST OF POINTERS TO DMKCKP 00554000
  599. L R1,DMKSYSRM GET POINTER TO REAL STORAGE SIZE @VA02884 00555000
  600. MVC STORSIZE,0(R1) SAVE SIZE OF REAL MACHINE @VA02884 00556000
  601. L R1,DMKSYSWM -> WRM area cyls info HRC075DK 00557000
  602. MVC TYPE(1),7(R1) Save device type of WRM HRC075DK 00558000
  603. LA R1,1 SET RECORD COUNTER 00559000
  604. STH R1,RECCNT .. 00560000
  605. SPACE 00561000
  606. * DRAIN ALL INTERRUPTS SO THAT ANY PENDING UC STATUS 00562000
  607. * WILL GET SENSED. ENABLING FOR INTS CAUSES THE CHKIOINT 00563000
  608. * ROUTINE TO GAIN CONTROL. IF UC STATUS IS PRESENT, A 00564000
  609. * SENSE WILL BE ISSUED FOR IT. IN ANY CASE THE SYSTEM 00565000
  610. * IS EVENTUALLY RETURNED TO ITS PRE-INTERRUPT STATE VIA 00566000
  611. * LPSW FROM I/O OLD PSW, WHICH IS ENABLED, THUS CAUSING 00567000
  612. * THE NEXT PENDING INTERRUPT TO BE TAKEN. THIS CONTINUES 00568000
  613. * UNTIL THERE ARE NO MORE PENDING INTERRUPTS AND WE RETURN 00569000
  614. * BELOW TO DO THE DISABLE. 00570000
  615. SPACE 00571000
  616. SSM ENABLE DRAIN PENDING INTS, ENABLE SYS @V407438 00572000
  617. SSM DISABLE ALL INTS DRAINED, DISABLE @V407438 00573000
  618. LA R4,2 LENGTH OF ONE INDEX ENTRY 00574000
  619. LA R5,30 DISPLACEMENT OF LAST INDEX ENTRY 00575000
  620. * IN BLOK 00576000
  621. L R9,ARIOCT POINT TO START OF CHANNEL INDEX 00577000
  622. L R1,ARIOCC POINT TO REAL CHANNEL COUNT 00578000
  623. LH R10,0(R1) GET NUMBER OF REAL CHANNELS ON 00579000
  624. * SYSTEM 00580000
  625. CHINDEX LH R6,0(R9) GET NEXT CHANNEL INDEX 00581000
  626. A R6,ARIOCH POINT TO RCHBLOK 00582000
  627. SR R3,R3 CLEAR RCUBLOK INDEX 00583000
  628. CUINDEX LH R7,RCHCUTBL(R3) GET NEXT RCUBLOK INDEX ENTRY 00584000
  629. LTR R7,R7 IS THERE ONE ?? 00585000
  630. BM NEXTCU NO -- 00586000
  631. A R7,ARIOCU POINT TO REAL CONTROL UNIT 00587000
  632. SR R2,R2 CLEAR RDEVBLOK INDEX 00588000
  633. DEVINDEX LH R8,RCUDVTBL(R2) GET NEXT RCUBLOK INDEX ENTRY 00589000
  634. LTR R8,R8 IS THERE ONE ?? 00590000
  635. BM NEXTDEV NO -- 00591000
  636. SLL R8,3(0) CONVERT TO BYTE INDEX @V200820 00592000
  637. A R8,ARIODV POINT TO RDEVBLOK 00593000
  638. ST R8,SAVERDEV SAVE RDEVBLOK ADDRESS @V200829 00594000
  639. SPACE 00595000
  640. LA R1,SNSECCW SENSE CCW 00596000
  641. ST R1,CAW SET UP CAW FOR SENSE OPERATION 00597000
  642. LH R1,RDEVADD GET DEVICE ADDRESS 00598000
  643. LH R0,RCUADD AND CONTROL UNIT ADDRESS 00599000
  644. OR R1,R0 COMBINE 00600000
  645. AH R1,RCHADD AND ADD TO CHANNEL ADDRESS 00601000
  646. SPACE 2 HRC032DK 00602990
  647. TM RDEVTYPC,CLASTERM IS THIS A TERMINAL CLASS @V2D3931 00604000
  648. BZ CHSPEC NO, CHECK FOR SPECIAL CLASS @V2D3931 00605000
  649. CLI RDEVTYPE,TYPBSC IS THIS A BISYNC LINE @V2D3931 00606000
  650. BE NETWORK YES, ... @V2D3931 00607000
  651. CHSPEC EQU * @V2D3931 00608000
  652. TM RDEVTYPC,CLASSPEC IS THIS A SPECIAL CLASS @V2D3931 00609000
  653. BZ TESTTERM NO, .... @V2D3931 00610000
  654. CLI RDEVTYPE,TYP3705 3704 OR 3705 TYPE @V200829 00611000
  655. BNE TESTMSC NOPE, GO TRY 3851 @V407438 00612000
  656. * 00613000
  657. * RECORD FORMAT FOR 3705 TYPE DEVICE 00614000
  658. * 00615000
  659. * REAL DEVICE ADDRESS = 2 BYTES 00616000
  660. * NUMBER OF NICBLOKS = 2 BYTES 00617000
  661. * NCP LOAD NAME = 8 BYTES 00618000
  662. * BIT MAP = 1 BIT FOR EACH NICBLOK 00619000
  663. * 8 NICBLOKS EACH BYTE 00620000
  664. * 4096 NICBLOKS MAX. 00621000
  665. * 00622000
  666. NETWORK EQU * @V2D3931 00623000
  667. * CLC CPID(4),CWARM SYSTEM RESTARTING ? HRC032DK 00624590
  668. * BNE TERMHIO NO - SKIP ENABLED ADDRESSES HRC032DK 00625180
  669. TM RDEVSTAT,RDEVDED DEDICATED DEVICE ? @VM08748 00626000
  670. BO TERMHIO YES, DO HALT I/O @V2D3931 00627000
  671. TM RDEVTYPC,CLASTERM IS THIS A TERMINAL CLASS @V2D3931 00628000
  672. BO RGFCKP1 YES, SAVE LINE ADDRESS @V2D3931 00629000
  673. TM RDEVFLAG,RDEVLNCP+RDEVLCEP+RDEVAUTO O.K. ? @VM08833 00630000
  674. BZ TERMHIO NO -- DON'T CHECKPT IT @VM08833 00631000
  675. RGFCKP1 EQU * @V2D3931 00632000
  676. MVC 4(8,R14),RDEVNCP SAVE NCP LOAD NAME @V2D3931 00633000
  677. STH R1,0(R14) SAVE DEVICE ADDRESS @V2D3931 00634000
  678. SLR R5,R5 .. @V200829 00635000
  679. STH R5,2(R14) ZERO NUMBER OF NICBLOKS @V200829 00636000
  680. LR R15,R14 SAVE START ADDRESS @V200829 00637000
  681. LA R14,12(R14) UPDATE BUFFER ADDRESS @V200829 00638000
  682. TM RDEVTYPC,CLASTERM IS THIS A TERMINAL CLASS @V2D3931 00639000
  683. BO *+12 YES, BYPASS @V2D3931 00640000
  684. TM RDEVFLAG,RDEVLNCP IS THERE A NICBLOK LIST ? @V200829 00641000
  685. BZ TERMHIO NO -- @VM08748 00642000
  686. LH R5,RDEVMAX MAXIMUM RESOURCE ID. @V200829 00643000
  687. LA R5,1(,R5) NUMBER OF NICBLOKS @V200829 00644000
  688. ICM R8,B'1111',RDEVNICL ANY NETWORK CONTROL BLOKS @V200829 00645000
  689. BZ TERMHIO NO -- @VM08748 00646000
  690. STH R5,2(R15) SAVE NICBLOK NUMBER IN BUFFER @V200829 00647000
  691. NICLOOP MVI 0(R14),X'00' ZERO BYTE FOR THIS NICBLOK @V200829 00648000
  692. LA R15,256 SET MASK BIT FOR EXEC OI @V200829 00649000
  693. NICLP SRL R15,1 SHIFT RIGHT ONE BIT @V200829 00650000
  694. USING NICBLOK,R8 @V200829 00651000
  695. TM NICTYPE,NICLGRP IS THIS A CONTROL UNIT NICBLOK @V2D3931 00652000
  696. BO *+12 YES, CHECK STATUS @V2D3931 00653000
  697. TM NICTYPE,NICLINE IS THIS A LINE ? @V2D3931 00654000
  698. BZ CHKTERM NO, CHECK FOR TERMINAL LINE @V2D3931 00655000
  699. TM NICSTAT,NICDISA IS THE LINE ACTIVE ? @V2D3931 00656000
  700. BZ SETBIT YES, SET BIT IN MAP @V2D3931 00657000
  701. B NICNEXT CHECK NEXT NICBLOK @V2D3931 00658000
  702. CHKTERM TM NICTYPE,NICTERM IS THIS A TERMINAL ? @V200829 00659000
  703. BZ NICNEXT NO -- CHECK NEXT NICBLOK @V200829 00660000
  704. TM NICFLAG,NICDISB TERMINAL DISABLED ? @V200829 00661000
  705. BO NICNEXT YES - TRY NEXT NICBLOK @V200829 00662000
  706. TM NICFLAG,NICENAB TERMINAL ENABLED ? @V200829 00663000
  707. BZ NICNEXT NO -- @V200829 00664000
  708. SETBIT EX R15,EXOI SET BIT FOR THIS NICBLOK @V200829 00665000
  709. NICNEXT LA R8,NICSIZE*8(,R8) POINT TO NEXT NICBLOK @V200829 00666000
  710. BCT R5,*+8 BRANCH IF NOT THE LAST NICBLOK @V200829 00667000
  711. B NICEND END OF NICBLOK LIST @V200829 00668000
  712. CL R15,=F'1' BYTE FULL @V200829 00669000
  713. BNE NICLP NO -- @V200829 00670000
  714. LA R14,1(R14) POINT TO NEXT BYTE IN BUFFER @V200829 00671000
  715. B NICLOOP PROCESS NEXT NICBLOK @V200829 00672000
  716. SPACE 00673000
  717. NICEND ST R5,1(R14) ZERO ODD BYTE @V200829 00674000
  718. LA R14,2(R14) UPDATE BUFFER ADDRESS @V200829 00675000
  719. N R14,=X'00FFFFFE' ROUND OFF TO HALF WORD @V200829 00676000
  720. B TERMHIO GO HALT DEVICE @VM08748 00677000
  721. SPACE 00678000
  722. USING RDEVBLOK,R8 @V200829 00679000
  723. TESTMSC CLI RDEVTYPE,TYP3851 IS THIS AN MSC? @V407438 00680000
  724. BNE TESTTERM NOPE, GO TRY GRAF/TERM @V407438 00681000
  725. LA R15,SUSPEND ADDR OF EXECUTE-SUSPEND CCW @V407438 00682000
  726. ST R15,CAW SET UP THE CAW @V407438 00683000
  727. SIO 0(R1) SLAM IT TO THE MSC @V407438 00684000
  728. BC 2,*-4 BUSY, KEEP TRYING... @V407438 00685000
  729. LA R15,SNSECCW RESTORE THE SENSE CCW TO CAW @V407438 00686000
  730. ST R15,CAW ... @V407438 00687000
  731. BC 1,NEXTDEV CC=3, FORGET IT. @V407438 00688000
  732. BC 4,TSTUC CC=1, GO CHECK UC STATUS @V407438 00689000
  733. TIO 0(R1) CHECK OUT STATUS @V407438 00690000
  734. BC 2,*-4 BUSY, KEEP TRYING. @V407438 00691000
  735. BC 8+1,NEXTDEV CLEAN OR NOT THERE, CONTINUE @V407438 00692000
  736. B TSTUC CC=1, GO CHECK STATUS & CONT. @V407438 00693000
  737. SPACE 00694000
  738. TESTTERM TM RDEVTYPC,CLASGRAF+CLASTERM GRAPHICS OR TERM ?? @V200829 00695000
  739. BZ NONTERM NO -- @V200829 00696000
  740. TM RDEVSTAT,RDEVDED DEDICATED DEVICE ? @VM08748 00697000
  741. BO TERMHIO YES - GO HALT IT @VM08748 00698000
  742. TM RDEVFLAG,RDEVDISB LINE DISABLED @V200829 00699000
  743. BO TERMHIO YES -- GO HALT IT @VM08748 00700000
  744. TM RDEVFLAG,RDEVENAB LINE ENABLED @V200829 00701000
  745. BZ TERMHIO NO -- HALT IT @VM08748 00702000
  746. STH R1,0(R14) SAVE ENABLED DEVICE ADDRESS @V200829 00703000
  747. A R14,=F'2' ADJUST BUFFER ADDRESS @V200829 00704000
  748. SPACE 00705000
  749. CLI RDEVTYPC,CLASTERM TERMINAL CLASS ? @VM08748 00706000
  750. BNE TERMHIO NO -- @VM08748 00707000
  751. CLI RDEVTYPE,TYP3210 3210 TYPE ? @VM08748 00708000
  752. BE NONTERM YES -- HALT AND DRAIN IO @VM08748 00709000
  753. SPACE 00710000
  754. TERMHIO EQU * HERE TO HALT TERMINAL DEVICES @VM08748 00711000
  755. L R8,SAVERDEV RESTORE RDEVBLOK ADDRESS @VM08748 00712000
  756. HIO 0(R1) HALT IO @VM08748 00713000
  757. B NEXTDEV GO PROCESS NEXT DEVICE @VM08748 00714000
  758. SPACE 00715000
  759. NONTERM EQU * NON-TERMINAL HALT IO @V2A2029 00716000
  760. LA R15,1000 MAX LOOP VALUE @V2A2029 00717000
  761. HIOLP BCT R15,*+8 BRANCH IF COUNT NOT ZERO @V2A2029 00718000
  762. B NEXTDEV GO PROCESS NEXT DEVICE @V2A2029 00719000
  763. SSM ENABLE ALLOW INTERRUPTS @V2A2029 00720000
  764. L R8,SAVERDEV RESTORE RDEVBLOK ADDRESS @V2A2029 00721000
  765. SSM DISABLE DO NOT ALLOW INTERRUPTS @V2A2029 00722000
  766. L R5,RDEVAIOB GET ACTIVE IOB.... @VA03547 00723000
  767. LTR R5,R5 ...IF ANY. @VA03547 00724000
  768. BZ NEXTDEV IF NONE, SKIP HIO. @VA03547 00725000
  769. HIO 0(R1) HALT IO @V2A2029 00726000
  770. BC 2,HIOLP CC=2, BURST OR HALTED @V2A2029 00727000
  771. BC 1,NEXTDEV CC=3, NOT OPERATIONAL @V2A2029 00728000
  772. NONTIO CLI RDEVTYPC,CLASGRAF IS THIS A GRAPHIC DEVICE. 00729000
  773. BNE NONGRAF NO - CLEAR ANY INTERRUPTS THAT MAY BE PENDING 00730000
  774. TM RDEVTYPE,TYP3277+TYP3278+TYP3284 3270 FAMILY? @V60A6B6 00731000
  775. BNZ NEXTDEV YES - BYPASS HANG CONDITION IN TIO LOOP 00732000
  776. NONGRAF TIO 0(R1) CLEAR ANY OUTSTANDING STATUS 00733000
  777. BC 2,HIOLP CC=2, CHANNEL OR SUBCHANNEL BUSY @V2A2029 00734000
  778. BC 1,NEXTDEV NOT OPER. @VA03547 00735000
  779. BC 4,TSTUC CSW STORED @VA03547 00736000
  780. TM RDEVTYPC,CLASTAPE+CLASDASD IS IT TAPE OR DASD? @VA03547 00737000
  781. BNZ SNSIO YES, DO A SENSE THEN. @VA03547 00738000
  782. B NEXTDEV NO, TRY THE NEXT ONE. @VA03547 00739000
  783. TSTUC TM CSW+4,UC UNIT CHECK? @VA03547 00740000
  784. BZ NEXTDEV NO - @VA03547 00741000
  785. SNSIO SIO 0(R1) START I/O SENSE OPERATION. @VA03547 00742000
  786. SSM ENABLE @V2A2029 00743000
  787. SPACE 00744000
  788. NEXTDEV LA R5,30 LENGTH OF TABLE 00745000
  789. SSM DISABLE @V2A2029 00746000
  790. BXLE R2,R4,DEVINDEX CONTINUE WITH NEXT DEVICE ON CU 00747000
  791. NEXTCU LA R5,62 LENGTH OF TABLE 00748000
  792. BXLE R3,R4,CUINDEX CONTINUE WITH NEXT CU ON CHANNEL 00749000
  793. NEXTCH LA R5,30 RESET TABLE LENGTH 00750000
  794. NEXTCHNL AR R9,R4 POINT TO NEXT CHANNEL INDEX ENTRY@VA03683 00751000
  795. LH R6,0(,R9) GET NEXT CHANNEL INDEX @VA03683 00752000
  796. LTR R6,R6 IS THERE ONE ? @VA03683 00753000
  797. BM NEXTCHNL NO IF MINUS, CHECK NEXT @VA03683 00754000
  798. BCT R10,CHINDEX AND CONTINUE WITH NEXT CHANNEL ON 00755000
  799. * SYSTEM 00756000
  800. MVC 0(4,R14),X8FF END THE BUFFER WITH FFS @V2A2029 00757000
  801. ST R14,TERMEND SAVE ADDRESS OF BUFFER END @V200829 00758000
  802. B RDWRMCLK CONTINUE... @V407438 00759000
  803. SPACE 3 00760000
  804. * HANDLE ALL I/O INTERRUPTS FROM ENABLE/DISBABLE 00761000
  805. * SEQUENCES. EXAMINE CSW FOR UC. IF PRESENT ISSUE 00762000
  806. * A SENSE, OTHERWISE CONTINUE BY LOADING FROM I/O OLD 00763000
  807. * PSW, THUS RE-ENABLING AND DRAINING ALL PENDING INTS. 00764000
  808. SPACE 00765000
  809. CHKIOINT TM CSW+4,UC DID INT COME WITH UC? @V407438 00766000
  810. BO *+8 YES, MUST ISSUE SENSE @V407438 00767000
  811. LPSW IOOPSW NOPE, RETURN TO PRE-INT STATE @V407438 00768000
  812. ST R3,CHKIOSAV SAVE REG @VA08695 00769000
  813. LA R3,SNSECCW GET THE SENSE CCW @VA08169 00770000
  814. ST R3,CAW INSURE CCW IS SET UP @VA08169 00771000
  815. LH R3,INTTIO GET THE INTERRUPTING DEV ADDR @VA08169 00772000
  816. SIO 0(R3) ISSUE SENSE TO IT @VA08169 00773000
  817. BC 2,*-4 BETTER NOT BE BUSY @V407438 00774000
  818. L R3,CHKIOSAV RESTORE REG @VA08695 00775000
  819. LPSW IOOPSW RETURN TO PRE-INT STATE @V407438 00776000
  820. CHKIOSAV DS F SAVEAREA @VA08695 00777000
  821. EJECT 00778000
  822. ************************************************* 00779000
  823. * 00780000
  824. * READ RECORD ONE OF WARM-START CYLINDER OF THE IPL VOLUME AND 00781000
  825. * COMPARE THE CLOCK VALUE WRITTEN BY PREVIOUS COLD OR 00782000
  826. * WARM START AGAINST THE IN STORAGE CLOCK VALUE SAVED IN 00783000
  827. * DMKRSPCV. IF THE CLOCK VALUES DO NOT AGREE; (1) THE 00784000
  828. * IPL VOLUME IS NOT THE CORRECT VOLUME TO CHECKPOINT 00785000
  829. * THE IN STORAGE SYSTEM. (2) THE WARM-START CYLINDER HAS 00786000
  830. * BEEN ALTERED SINCE LAST COLD OR WARM START. 00787000
  831. * 00788000
  832. ************************************************* 00789000
  833. SPACE 00790000
  834. RDWRMCLK L R10,DMKSYSWM POINTER TO WARM-START CYL @V407438 00791000
  835. MVC CYLSTART(4),0(R10) GET START AND END CYLINDER @V2A2029 00792000
  836. MVC SEEK+2(2),0(R10) PUT CYL ADDRESS IN SEARCH CCW @V2A2029 00793000
  837. MVI PAGECYL,57 PAGES/CYL FOR 3330 @V2A2029 00794000
  838. CLI TYPE,TYP3330 SYSRES A 3330 ? @V2A2029 00795000
  839. BE SETSIZE YES - @V2A2029 00796000
  840. MVI PAGECYL,120 PAGES/CYL FOR 3350 @V304498 00797000
  841. CLI TYPE,TYP3350 SYSRES A 3350 ? @V304498 00798000
  842. BE SETSIZE YES - @V304498 00799000
  843. MVI PAGECYL,96 Pages/cyl for 3375 HRC106DK 00799100
  844. CLI TYPE,TYP3375 Sysres a 3375 HRC106DK 00799200
  845. BE SETSIZE Yes - HRC106DK 00799300
  846. MVI PAGECYL,150 Pages/cyl for 3380 HRC106DK 00799400
  847. CLI TYPE,TYP3380 Sysres a 3380 HRC106DK 00799500
  848. BE SETSIZE Yes - HRC106DK 00799600
  849. MVI PAGECYL,32 PAGES/CYL FOR 2314 TYPE @V2A2029 00800000
  850. CLI TYPE,TYP2314 IS IT A 2314 TYPE ? @V2A2029 00801000
  851. BE SETSIZE YES - @V2A2029 00802000
  852. MVI PAGECYL,24 PAGES/CYL FOR 2305 AND 3340 @V2A2029 00803000
  853. SETSIZE MVI SIZE+1,80 SET RECORD SIZE TO 80 @V2A2029 00804000
  854. BAL R14,RDWR READ RECORD ONE OF WRM-CYL @V2A2029 00805000
  855. CLC DMKRSPCV(8),BUFFCV IS THIS THE CORRECT VOLUME AND CYL ? 00806000
  856. BNE MSG910W NO -- MIGHT BE WRONG VOLUME @V2A2029 00807000
  857. MVI DSK05,X'05' CHANGE CCWS TO WRITE STATUS 00808000
  858. LA R0,RECBUFF SET BUFFER TO FFS @V2A2029 00809000
  859. L R1,=F'4096' .. LENGTH @V2A2029 00810000
  860. SR R2,R2 .. @V2A2029 00811000
  861. SR R3,R3 .. @V2A2029 00812000
  862. ICM R3,B'1000',X8FF .. @V2A2029 00813000
  863. MVCL R0,R2 MOVE LONG @V2A2029 00814000
  864. SPACE 00815000
  865. EJECT 00816000
  866. **************************************** 00817000
  867. * 00818000
  868. * WRITE DISK RECORD ONE - ZERO-FIRST 8 BYTES 00819000
  869. * 00820000
  870. **************************************** 00821000
  871. SPACE 00822000
  872. MVC HASH(6),STARTIME INSERT UNIQUE NUMBER 00823000
  873. BAL R14,PUTDLM OUTPUT DELIMITER RECORD @V2A2029 00824000
  874. XC RECBUFF(8),RECBUFF ZERO FIRST 8 BYTES OF RECORD ONE 00825000
  875. MVC BUFFCV(8),DMKRSPCV PUT CLOCK VALUE BACK IN RECORD ONE 00826000
  876. SPACE 00827000
  877. *************************************** 00828000
  878. * 00829000
  879. * SAVE REAL DEVICE ADDRESS OF ENABLED TERMINAL DEVICES 00830000
  880. * 00831000
  881. *************************************** 00832000
  882. SPACE 00833000
  883. * CLC CPID(4),CWARM SYSTEM RESTARTING ?? HRC032DK 00834590
  884. * BNE TERMCLOS NO -- DO NOT RECORD HRC032DK 00835180
  885. L R3,TERMBUFF ADDRESS OF TERMINAL BUFFER @V200829 00836000
  886. B CMPEND ANY DATA IN BUFFER @V200829 00837000
  887. TERMPUT BAL R14,PUTREC INSERT 40 ADDRESSES (80BYTES) @V200829 00838000
  888. LA R3,80(,R3) UPDATE TERM BUFFER ADDRESS @V2A2029 00839000
  889. CMPEND CL R3,TERMEND ARE WE DONE ? @V200829 00840000
  890. BNH TERMPUT NO -- KEEP GOING @V200829 00841000
  891. TERMCLOS BAL R14,PUTDLM INSERT DELIMITER RECORD @V2A2029 00842000
  892. SPACE 00843000
  893. **************************************** 00844000
  894. * 00845000
  895. * SAVE ACCOUNTING INFORMATION FOR ACTIVE USERS 00846000
  896. * 00847000
  897. **************************************** 00848000
  898. SPACE 00849000
  899. USING VDEVBLOK,R8 00850000
  900. SPACE 00851000
  901. L R15,DMKTMRPT MAKE SURE V(DMKTMRPT) IS THE 00852000
  902. L R15,=V(DMKTMRPT) ADDRESS OF THE IN STORAGE SYSTEM 00853000
  903. ORG *-4 00854000
  904. DC X'50' ST R15,=V(DMKTMRPT) 00855000
  905. ORG 00856000
  906. SPACE 00857000
  907. L R10,ASYSLC POINT TO SYSLOCS INFORMATION 00858000
  908. L R3,ARIOPU POINT TO LIST OF SYSTEM PUNCHES 00859000
  909. ICM R3,B'1111',0(R3) NUMBER OF PUNCHES EQUAL ZERO ??? 00860000
  910. BNZ *+8 NO -- 00861000
  911. OI ACNTSW,X'80' INDICATE ZERO SYSTEM PUNCHES 00862000
  912. ICM R11,B'1111',DMKSYSCK CLOCK VALUE ZERO ?? 00863000
  913. BNZ CLOCKOK NO -- CLOCK GOOD 00864000
  914. STCK DMKSYSCK SET DMKSYSCK TO CURRENT VALUE 00865000
  915. BZ *+8 CLOCK SET - GOOD 00866000
  916. OI ACNTSW,X'40' INDICATE CLOCK SET ERROR 00867000
  917. CLOCKOK L R11,ASYSVM ADDRESS OF SYSTEM VMBLOK 00868000
  918. ICM R11,B'1111',VMPNT ADDRESS VMBLOK IN CYCLIC CHAIN 00869000
  919. BZ ACTCHAIN NO USERS ON SYSTEM 00870000
  920. ST R11,STUSER SAVE ADDRESS OF FIRST USER 00871000
  921. NXTLOOP TM VMRSTAT,VMLOGON IS USER LOGGING ON ?? 00872000
  922. BO UNXT YES, DONT SAVE 00873000
  923. SR R1,R1 ZERO INDEX FOR CHANNEL 00874000
  924. LA R4,2 LOAD INCREMENT REG 00875000
  925. LA R5,30 LOAD END OF TABLES 00876000
  926. CKPANCH LH R6,VMCHTBL(R1) NEXT CHANNEL INDEX 00877000
  927. LTR R6,R6 DOES THIS CHAN. EXIST ? 00878000
  928. BM CKPACHI NO - TRY NEXT CHAN. 00879000
  929. A R6,VMCHSTRT ADDRESS OF VCHBLOK TO R6 00880000
  930. USING VCHBLOK,R6 00881000
  931. SR R2,R2 ZERO INDEX FOR CONTROL UNITS 00882000
  932. CKPANCU LH R7,VCHCUTBL(R2) LOAD NEXT CONTROL UNIT 00883000
  933. LTR R7,R7 DOES IT EXIST ? 00884000
  934. BM CKPACUI NO - GO TRY NEXT 00885000
  935. A R7,VMCUSTRT ADDRESS OF VMCUBLOK 00886000
  936. USING VCUBLOK,R7 00887000
  937. SR R3,R3 ZERO INDEX FOR DEVICES 00888000
  938. CKPANDEV LH R8,VCUDVTBL(R3) GET NEXT DEVICE 00889000
  939. LTR R8,R8 DOES IT EXIST ? 00890000
  940. BM CKPADEVI NO - GO TRY NEXT 00891000
  941. A R8,VMDVSTRT ADDRESS OF VMDEVBLOK 00892000
  942. USING VDEVBLOK,R8 00893000
  943. TM VDEVSTAT,VDEVDED IS THIS A DEDICATED DEVICE ? 00894000
  944. BO CKPACALL BRANCH IF IT IS 00895000
  945. CLI VDEVTYPC,CLASDASD IS THIS A DASD DEVICE ?? 00896000
  946. BE TSTTDSK YES -- TEST FOR T DISK 00897000
  947. CLI VDEVTYPC,CLASTERM CONSOLE CLASS TYPE 00898000
  948. BNE CKURO NO -- CHECK OUTPUT UNIT RECORD 00899000
  949. CLI VDEVTYPE,TYP3210 CONSOLE TYPE ? 00900000
  950. BNE CKPADEVI NO -- GET NEXT DEVICE 00901000
  951. B SAVEFILE YES-CHECK FOR ACTIVE SPOOL FILE 00902000
  952. CKURO CLI VDEVTYPC,CLASURO OUTPUT UNIT RECORD TYPE ? 00903000
  953. BNE CKPADEVI NO -- GET NEXT DEVICE 00904000
  954. TM VDEVTYPE,TYPPUN+TYPPRT PUNCH OR PRINTER ?? 00905000
  955. BZ CKPADEVI NO -- GET NEXT DEVICE 00906000
  956. SAVEFILE ICM R14,B'1111',VDEVSPL OPEN SPOOL FILE ? 00907000
  957. BZ CKPADEVI NO -- GET NEXT DEVICE 00908000
  958. XC VDEVSPL(4),VDEVSPL CLEAR ACTIVE POINTER 00909000
  959. ICM R14,B'1111',VSPSFBLK-VSPLCTL(R14) SFBLOK PRESENT ?? 00910000
  960. BZ CKPADEVI NO -- GET NEXT DEVICE 00911000
  961. CLC SFBORIG-SFBLOK(8,R14),VMUSER VALID SFBLOK ? @V2A2029 00912000
  962. BNE CKPADEVI NO, GET NEXT DEVICE @V2A2029 00913000
  963. CLC SFBPNT-SFBLOK(4,R14),=X'00000000' ANY BUFFERS WRITTEN ? 00914000
  964. BE DELFILE NO -- START AND LAST CORRECT 00915000
  965. OI SFBFLAG2-SFBLOK(R14),SFBFIRST INDICATE 1ST @VA03437 00916000
  966. * PAGE WRITTEN 00917000
  967. MVC SFBLAST-SFBLOK(4,R14),SFBPNT-SFBLOK(R14) LAST BUFFER 00918000
  968. * WRITTEN 00919000
  969. CLI VDEVTYPE,TYP3210 SPOOLED CONSOLE DEVICE @VA11232 00919100
  970. BE CONFILE YES @VA11232 00919600
  971. DELFILE DS 0H @VA07846 00922000
  972. OI SFBFLAG2-SFBLOK(R14),SFBPURGE OPEN FILE @VA07159 00923000
  973. MVC SFBPNT-SFBLOK(4,R14),DMKRSPDL CHAIN TO DELETE CHAIN 00924000
  974. ST R14,DMKRSPDL .. 00925000
  975. B CKPADEVI GET NEXT DEVICE 00926000
  976. CONFILE MVC SFBCLAS-SFBLOK(1,R14),VDEVCLAS SET UP FILE CLASS 00927000
  977. CLI SFBDIST-SFBLOK(R14),C' ' DIST CODE IN SFBLOK ?? 00928000
  978. BH *+10 YES -- 00929000
  979. MVC SFBDIST-SFBLOK(8,R14),VMDIST MOVE IN DISTRIBUTION CODE 00930000
  980. MVC SFBCOPY-SFBLOK(2,R14),VDEVCOPY MOVE IN NUMBER OF COPIES 00931000
  981. LA R15,DMKRSPPR ADDRESS OF PRINTER FILE CHAIN 00935000
  982. TM VDEVSFLG,VDEVXFER SPOOL TO USERID ?? 00936000
  983. BZ CHAINSFB NO - CHAIN SPOOL FILE ON PRT CHAIN 00937000
  984. LA R15,DMKRSPRD ADDRESS OF READER CHAIN 00938000
  985. L R9,VDEVEXTN XBLOK ADDRESS @V293598 00939000
  986. * XFER USERID 00940000
  987. MVC SFBUSER-SFBLOK(8,R14),VSPXXUSR-VSPXBLOK(R9) @V293598 00941000
  988. CHAINSFB MVC SFBPNT-SFBLOK(4,R14),0(R15) CHAIN FIRST 00942000
  989. ST R14,0(R15) ON SPOOL FILE CHAIN 00943000
  990. B CKPADEVI GET NEXT DEVICE 00944000
  991. TSTTDSK TM VDEVFLAG,VDEVTDSK 'T' DISK ??? 00945000
  992. BZ CKPADEVI NO - GO GET NEXT DEVICE 00946000
  993. SPACE 00947000
  994. CKPACALL EQU * 00948000
  995. TM ACNTSW,X'C0' ZERO PUNCHES AND/OR CLOCK ERROR 00949000
  996. BNZ CKPADEVI YES -- 00950000
  997. STM R1,R8,CKPSAVE SAVE THE POINTERS FOR V DEV LOOP 00951000
  998. OI ACNTSW,X'20' INDICATE ACNT CALULATING @V2A2029 00952000
  999. MVI ACBUFF,C' ' * BLANK THE ACCOUNTING BUFFER 00953000
  1000. MVC ACBUFF+1(79),ACBUFF * 00954000
  1001. LA R4,ACBUFF-(ACNTDATA-ACNTBLOK) POINT TO DATA AREA 00955000
  1002. BAL R5,DEVCARD GO FILL IN THE DEVICE CARD 00956000
  1003. LA R3,ACBUFF POINT TO THE BUFFER JUST BUILT 00957000
  1004. BAL R14,PUTREC GO PUT IT 00958000
  1005. LM R1,R8,CKPSAVE LOOK AT THE REST OF THE VDEVBLOK 00959000
  1006. NI ACNTSW,X'FF'-X'20' RESET ACNT CAL SWITCH @V2A2029 00960000
  1007. CKPADEVI BXLE R3,R4,CKPANDEV 00961000
  1008. CKPACUI BXLE R2,R4,CKPANCU 00962000
  1009. CKPACHI BXLE R1,R4,CKPANCH 00963000
  1010. SPACE 00964000
  1011. * WHEN FALL THRU - HAVE SCANNED ALL DEVICES FOR THIS USER 00965000
  1012. SPACE 00966000
  1013. TM ACNTSW,X'C0' ZERO PUNCHES AND/OR CLOCK ERROR 00967000
  1014. BNZ UNXT YES -- GET NEXT USER 00968000
  1015. STM R1,R8,CKPSAVE SAVE REGS FOR V DEV LOOP @V2A2029 00969000
  1016. OI ACNTSW,X'20' INDICATE ACNT CALULATING @V2A2029 00970000
  1017. MVI ACBUFF,C' ' * CLEAR THE BUFFER 00971000
  1018. MVC ACBUFF+1(79),ACBUFF * 00972000
  1019. LA R4,ACBUFF-(ACNTDATA-ACNTBLOK) POINT TO THE DATA AREA 00973000
  1020. BAL R5,USERCARD GO FILL IN THE USER ACCOUNTING CARD 00974000
  1021. LA R3,ACBUFF POINT TO THE DATA AREA 00975000
  1022. BAL R14,PUTREC RECORD 00976000
  1023. LM R1,R8,CKPSAVE RESTORE REGS FOR V DEV LOOP @V2A2029 00977000
  1024. UNXT NI ACNTSW,X'FF'-X'20' RESET ACNT CAL SWITCH @V2A2029 00978000
  1025. L R11,VMPNT POINT TO NEXT VMBLOK @V2A2029 00979000
  1026. C R11,STUSER IS THIS THE FIRST ONE ?? 00980000
  1027. BNE NXTLOOP DO NEXT 00981000
  1028. SPACE 2 00982000
  1029. **************************************** 00983000
  1030. * 00984000
  1031. * SAVE CHAIN ACCOUNTING CARDS 00985000
  1032. * 00986000
  1033. **************************************** 00987000
  1034. SPACE 00988000
  1035. ACTCHAIN L R4,DMKRSPAC POINT TO FIRST ACCOUNTING CARD 00989000
  1036. TM ACNTSW,X'80' ANY SYSTEM PUNCHES ?? 00990000
  1037. BO DLM2 NO -- SKIP ACCOUNTING DATA 00991000
  1038. ACTNEXT LTR R4,R4 ANY CARDS 00992000
  1039. BZ ACTACNT NO- BRANCH 00993000
  1040. CL R4,STORSIZE ADDRESS WITHIN REAL STORAGE ? @VA02884 00994000
  1041. BNL ACTACNT NO - GO TO NEXT ROUTINE @VA02884 00995000
  1042. LA R3,ACNTDATA POINT TO THE ACCOUNTING DATA 00996000
  1043. BAL R14,PUTREC AND PUT IT OUT 00997000
  1044. LR R15,R4 SAVE ADDRESS OF LAST BLOK 00998000
  1045. ICM R4,7,ACNTNEXT+1 GET ADD FRON THE TIC OF NEXT REC 00999000
  1046. B ACTNEXT GET NEXT ACNTBLOK 01000000
  1047. EJECT 01001000
  1048. *************************************** 01002000
  1049. * 01003000
  1050. * INPUT FROM THE ACCTOFF COPY FILE 01004000
  1051. * 01005000
  1052. *************************************** 01006000
  1053. SPACE 01007000
  1054. COPY ACCTOFF 01008000
  1055. DROP R4,R8 01009000
  1056. USING ACNTBLOK,R4 @VM08853 01010000
  1057. USING RDEVBLOK,R8 01011000
  1058. SPACE 01012000
  1059. **************************************** 01013000
  1060. * 01014000
  1061. * SAVE ACTIVE ACCOUNTING CARDS NOT PUNCH 01015000
  1062. * 01016000
  1063. **************************************** 01017000
  1064. SPACE 01018000
  1065. ACTACNT EQU * HERE TO SAVE ANY ACTIVE ACCOUNTING CHAINS 01019000
  1066. L R5,ARIOPU GET ADDRESS OF SYSTEM PUNCH TABLE 01020000
  1067. L R6,0(,R5) GET NUMBER OF ENTIES IN THE TABLE 01021000
  1068. LTR R6,R6 ANY PUNCHES PRESENT ?? 01022000
  1069. BZ DLM2 NO -- 01023000
  1070. ACTINDEX LA R5,4(,R5) POINT TO NEXT TABLE ENTRY 01024000
  1071. LH R8,0(,R5) GET INDEX TO RDEVBLOK FOR PUNCH 01025000
  1072. SLL R8,3(0) CONVERT TO BYTE INDEX @V200820 01026000
  1073. A R8,ARIODV POINT TO RDEVBLOK FOR PUNCH 01027000
  1074. TM RDEVFLAG,RDEVACNT WAS PUNCH BUSY WITH ACCOUNTING 01028000
  1075. BZ ACTNXT2 NO -- 01029000
  1076. ICM R4,B'1111',RDEVSPL ACCOUNTING INFO PRESENT ? @V2A2029 01030000
  1077. BZ ACTNXT2 NO -- 01031000
  1078. CL R4,STORSIZE ADDRESS WITHIN REAL STORAGE ? @VA02884 01032000
  1079. BNL ACTNXT2 NO - DO NEXT DEVICE @VA02884 01033000
  1080. PUTACNT LA R3,ACNTDATA POINT TO DATA TO BE SAVED 01034000
  1081. L R4,ACNTNEXT POINT TO NEXT ACNTBLOK ON CHAIN @VM08853 01035000
  1082. LA R4,0(,R4) CLEAR TIC OP-CODE @VA02884 01036000
  1083. CL R4,STORSIZE ADDRESS WITHIN REAL STORAGE ? @VA02884 01037000
  1084. BNL ACTNXT2 NO - DO NEXT DEVICE @VA02884 01038000
  1085. CLI ACNTCCW,4 IS NEXT CCW A SENSE ?? 01039000
  1086. BE ACTNXT2 @VA01578 01040000
  1087. BAL R14,PUTREC WRITE RECORD TO DASD @VA01578 01041000
  1088. B PUTACNT CONTINUE SAVING CARD @VA01578 01042000
  1089. SPACE 01043000
  1090. ACTNXT2 BCT R6,ACTINDEX POINT TO NEXT PUNCH IN SYSTEM 01044000
  1091. SPACE 01045000
  1092. **************************************** 01046000
  1093. * 01047000
  1094. * WRITE SECOND DELIMITER RECORD 01048000
  1095. * 01049000
  1096. **************************************** 01050000
  1097. DLM2 BAL R14,PUTDLM INSERT DELIMITER RECORD @V2A2029 01051000
  1098. SPACE 01052000
  1099. **************************************** 01053000
  1100. * 01054000
  1101. * SAVE SYSTEM LOG MESSAGES 01055000
  1102. * 01056000
  1103. **************************************** 01057000
  1104. SPACE 01058000
  1105. L R3,DMKSYSLG GET THE PTR TO THE SYSTEM LOG MSG 01059000
  1106. LOGNXT LTR R5,R3 IS THERE ONE ?? 01060000
  1107. BZ LOGEND NO @VA02884 01061000
  1108. CL R5,STORSIZE ADDRESS WITHIN REAL STORAGE ? @VA02884 01062000
  1109. BNL LOGEND NO - DO NEXT ROUTINE @VA02884 01063000
  1110. LH R2,6(R5) PICK UP SEQ NUMBER @VA09139 01063100
  1111. CH R2,SEQNO GET SAVED SEQUENCE NUMBER @VA09139 01063200
  1112. BNE LOGEND NO - BAD LOG MSG CHAIN @VA09139 01063300
  1113. LA R2,1(,R2) BUMP SEQ NUMBER @VA09139 01063400
  1114. STH R2,SEQNO AND SAVE FOR NEXT TIME THROUGH @VA09139 01063500
  1115. LA R3,4(,R3) POINT TO MESSAGE TEXT 01064000
  1116. BAL R14,PUTREC SAVE LOGMSG 01065000
  1117. L R3,0(R5) POINT TO NEXT LOG MSG 01066000
  1118. B LOGNXT GET NEXT LOG MESSAGE 01067000
  1119. SEQNO DC H'1' INITIALIZE SEQ NUMBER TO ONE @VA09139 01067500
  1120. EJECT 01068000
  1121. **************************************** 01069000
  1122. * 01070000
  1123. * WRITE THIRD DELIMITER RECORD 01071000
  1124. * 01072000
  1125. **************************************** 01073000
  1126. SPACE 01074000
  1127. LOGEND MVC DLMREC+16(28),DMKSYSDT MOVE DATE,TIME AND DAY @V2A2029 01075000
  1128. * DMKSYSDT, DMKSYSTM AND DMKSYSLW 01076000
  1129. BAL R14,PUTDLM INSERT DELIMITER RECORD @V2A2029 01077000
  1130. MVC 16(28,R3),45(R3) RESET AREA TO FFS 01078000
  1131. CLC INDEX,=AL2(4096-8-SPSFBSZ*8) WILL FIRST SFBLOK @VA12228 01079000
  1132. * FIT (EXPANDED FOR VM/SP) @VA12228 01080000
  1133. BNH *+8 YES - @V2A2029 01081000
  1134. BAL R14,CLOSE .. 01082000
  1135. SPACE 2 01083000
  1136. *********************************************************************** 01084000
  1137. * 01085000
  1138. * SAVE SPOOLING BLOCKS 01086000
  1139. * 01087000
  1140. *********************************************************************** 01088000
  1141. SPACE 01089000
  1142. USING SFBLOK,R3 01090000
  1143. MVI SIZE+1,SPSFBSZ*8 SIZE OF ONE SFBLOK (VM/SP) @VA12228 01091000
  1144. SPACE 01092000
  1145. **************************************** 01093000
  1146. * 01094000
  1147. * SAVE SYSTEM PRINTER ACTIVE FILES 01095000
  1148. * 01096000
  1149. **************************************** 01097000
  1150. SPACE 01098000
  1151. L R5,ARIOPR POINT TO LIST OF SYSTEM PRINTERS 01099000
  1152. BAL R10,CHACT SAVE ACTIVE FILES 01100000
  1153. SPACE 01101000
  1154. **************************************** 01102000
  1155. * 01103000
  1156. * SAVE PRINTER CLOSED FILES 01104000
  1157. * 01105000
  1158. **************************************** 01106000
  1159. SPACE 01107000
  1160. SR R15,R15 INIT BRANCH INDEX @V2A2029 01108000
  1161. LA R3,DMKRSPPR POINT TO CHAIN OF CLOSED PRINTER 01109000
  1162. * FILES 01110000
  1163. SPACE 01111000
  1164. **************************************** 01112000
  1165. * 01113000
  1166. * CHAIN SCAN, MOVE AND PUT LOOP 01114000
  1167. * 01115000
  1168. **************************************** 01116000
  1169. SPACE 01117000
  1170. CHK01 ICM R3,B'1111',0(R3) FIRST OR NEXT FILE ADDRESS @V2A2029 01118000
  1171. BZ NXTFILE BRANCH IF END OF CHAIN @V2A2029 01119000
  1172. SR R14,R14 CLEAR REG 01120000
  1173. RECCLR STCM R14,B'1111',SFBRECS CLEAR SFBRECS POINTER @V2A2029 01121000
  1174. BAL R14,PUTREC OUTPUT 01122000
  1175. B CHK01 LOOP 01123000
  1176. SPACE 2 01124000
  1177. **************************************** 01125000
  1178. * 01126000
  1179. * SAVE ACTIVE PUNCH FILES 01127000
  1180. * 01128000
  1181. **************************************** 01129000
  1182. SPACE 01130000
  1183. CHK02 L R5,ARIOPU POINT TO LIST OF SYSTEM PUNCHES 01131000
  1184. BAL R10,CHACT SAVE ACTIVE FILES 01132000
  1185. SPACE 01133000
  1186. **************************************** 01134000
  1187. * 01135000
  1188. * SAVE CLOSED PUNCH FILES 01136000
  1189. * 01137000
  1190. **************************************** 01138000
  1191. SPACE 01139000
  1192. LA R3,DMKRSPPU POINT TO CHAIN OF CLOSED PUNCH FILES 01140000
  1193. B CHK01 SAVE ENTRIES 01141000
  1194. SPACE 01142000
  1195. **************************************** 01143000
  1196. * 01144000
  1197. * SAVE READER STATUS 01145000
  1198. * 01146000
  1199. **************************************** 01147000
  1200. SPACE 01148000
  1201. CHK03 L R5,ARIORD POINT TO LIST OF SYSTEM READERS 01149000
  1202. BAL R10,CHACT SAVE READER STATUS 01150000
  1203. SPACE 01151000
  1204. **************************************** 01152000
  1205. * 01153000
  1206. * SAVE CLOSED READER FILES 01154000
  1207. * 01155000
  1208. **************************************** 01156000
  1209. SPACE 01157000
  1210. LA R3,DMKRSPRD POINT TO CHAIN OF CLOSED READER 01158000
  1211. * FILES 01159000
  1212. LABXXX ICM R3,B'1111',0(R3) FIRST OR NEXT FILE ADDRESS @V50A2B5 01160000
  1213. BZ LABXX FINISHED @V50A2B5 01161000
  1214. SR R14,R14 CLEAR REGISTER @V50A2B5 01162000
  1215. STCM R14,B'1111',SFBRECS CLEAR SFBRECS POINTER @V50A2B5 01163000
  1216. BAL R14,PUTREC OUTPUT @V50A2B5 01164000
  1217. B LABXXX @V50A2B5 01165000
  1218. SPACE 01166000
  1219. **************************************** 01167000
  1220. * 01168000
  1221. * SAVE MONITOR SPOOL FILE IF OPEN 01169000
  1222. * 01170000
  1223. **************************************** 01171000
  1224. SPACE 01172000
  1225. LABXX L R3,DMKRSPMN GET OPEN MONITOR FILE @V50A2B5 01173000
  1226. LTR R3,R3 IF IT EXISTS @V50A2B5 01174000
  1227. BZ NXTFILE @V50A2B5 01175000
  1228. CLC SFBDIST,=C' ' FILE ALREADY CLEANED UP @VA07888 01176000
  1229. BE YESGOOD YES DON'T TRY IT AGAIN @VA07888 01177000
  1230. L R1,TERMBUFF MAKE A COPY OF SFBLOK @V50A2B5 01178000
  1231. MVC 0(8*SFBSIZE,R1),0(R3) DO THE COPY @V50A2B5 01179000
  1232. OI SFBFLAG2-SFBLOK(R1),SFBPURGE TURN ON PURGE BIT @V50A2B5 01180000
  1233. CLC SFBSTART(4),=X'00000000' IS THE START 0 @V50A2B5 01181000
  1234. BE NXTFILE YES, DO NOT BOTHER WITH IT @V50A2B5 01182000
  1235. OI FLAG,CKPMDL SHOW WE USE COPY @V50A2B5 01183000
  1236. CLC SFBPNT(4),=X'00000000' NULL FILE? @V50A2B5 01184000
  1237. BE NXTFILE YES, DO NOT BOTHER WITH IT @V50A2B5 01185000
  1238. CLC SFBPNT(4),SFBLAST IS THIS A GOOD FILE? @V50A2B5 01186000
  1239. BE YESGOOD YES IT IS @V50A2B5 01187000
  1240. MVC SFBFILID-SFBLOK(2,R1),=H'9999' COPY'S OWN ID @VA07888 01188000
  1241. MVC SFBLAST(4),SFBPNT SET LAST CORRECTLY @V50A2B5 01189000
  1242. CLC SFBLAST(4),SFBDIST ONE OR TWO BAD BUFFERS @V50A2B5 01190000
  1243. BNE TWOBAD @V50A2B5 01191000
  1244. DROP R3 01192000
  1245. USING SFBLOK,R1 01193000
  1246. MVC SFBSTART(4),SFBDIST+4 SET DUMMY SFB @VA07888 01194000
  1247. * TO POINT TO THE ONLY SLOT TO BE RELEASED BY DMKSPLDL 01195000
  1248. B ONEBAD @V50A2B5 01196000
  1249. TWOBAD MVC SFBSTART(4),SFBDIST SET DUMMY SFB PT @VA07888 01197000
  1250. * TO THE FIRST OF TWO SLOTS TO BE RELEASED BY SPLDL 01198000
  1251. DROP R1 01199000
  1252. USING SFBLOK,R3 01200000
  1253. ONEBAD MVC SFBDIST(8),=C' ' BLANK OUT DIST FIELD @V50A2B5 01201000
  1254. BAL R14,PUTREC PUT OUT THE FILE @V50A2B5 01202000
  1255. B NXTFILE AND CONTINUE @V50A2B5 01203000
  1256. YESGOOD NI FLAG,X'FF'-CKPMDL TURN OFF FLAG @V50A2B5 01204000
  1257. B ONEBAD CONTINUE @V50A2B5 01205000
  1258. SPACE 1 01206000
  1259. **************************************** 01207000
  1260. * 01208000
  1261. * SAVE DELETE FILES 01209000
  1262. * 01210000
  1263. **************************************** 01211000
  1264. SPACE 01212000
  1265. * ROUTINE TO MOVE ENTRIES ON 'INCOMPLETE DUMP' CHAIN TO DELETE 01212100
  1266. CHK04 DS 0H @V67CAH7 01212200
  1267. ICM R3,B'1111',DMKRSPDP POINTER TO DUMPS IN PRC @V67CAH7 01212300
  1268. BZ CHK041 NO DUMPS..SKIP LOGIC @V67CAH7 01212400
  1269. * NOW ADD DUMPS IN PROCESS TO DELETE CHAIN 01212500
  1270. GETNEXT DS 0H @V67CAH7 01212600
  1271. LR R14,R3 SAVE LAST POINTER @V67CAH7 01212700
  1272. ICM R3,B'1111',SFBPNT-SFBLOK(R14) FORWARD POINTER @V67CAH7 01212800
  1273. BNZ GETNEXT MORE SFBLOKS...BRANCH @V67CAH7 01212900
  1274. * R14 NOW HAS LAST SFBLOK POINTER ON DUMP CHAIN 01213000
  1275. L R3,DMKRSPDL ADDRESS OF DELETE @V67CAH7 01213100
  1276. * CHAINS FIRST SFBLOK POINTER 01213200
  1277. ST R3,SFBPNT-SFBLOK(,R14) PUT FULL DUMP CHAIN IN @V67CAH7 01213300
  1278. * FRONT OF DELETE CHAIN 01213400
  1279. * THE DUMP CHAIN NOW HAS IT'S DUMP SFBLOKS FOLLOWED BY 01213500
  1280. * THE DELETE CHAIN'S SFBLOK 01213600
  1281. * *** NOW ATTACH FULL CHAIN TO DELETE ANCHOR 01213700
  1282. L R14,DMKRSPDP GET POINTER TO DUMP @V67CAH7 01213800
  1283. * CHAINS FIRST SFBLOK 01213900
  1284. ST R14,DMKRSPDL MOVE TO DELETE ANCHOR @V67CAH7 01214000
  1285. * NOW BOTH DUMP AND DELETE SFBLOKS ARE ON DELETE CHAIN 01214100
  1286. CHK041 DS 0H @V67CAH7 01214200
  1287. MVC DLMREC+16(2),DMKRSPID SAVE ID COUNTER IN @V67CAH7 01214300
  1288. * DELIMITER RECORD 01214400
  1289. TM FLAG,CKPMDL SEE IF VALID COPY EXISTS@V50A2B5 01215000
  1290. BNO CHK04A FILE EXISTS @V50A2B5 01216000
  1291. L R3,TERMBUFF YES, THEN PUT IT @V50A2B5 01217000
  1292. BAL R14,PUTREC ON WARM CYLINDER @V50A2B5 01218000
  1293. CHK04A EQU * @V50A2B5 01219000
  1294. LA R3,DMKRSPDL CHAIN OF SYSTEM DELETE FILES@VA07888 01220000
  1295. B CHK01 SAVE ENTRIES 01221000
  1296. SPACE 01222000
  1297. **************************************** 01223000
  1298. * 01224000
  1299. * SAVE ALLOCATION RECORDS 01225000
  1300. * 01226000
  1301. **************************************** 01227000
  1302. SPACE 01228000
  1303. CHK05 CLC INDEX,=AL2(4096-8-SPRCSZ*8) WILL FIRST VM/SP @VA12228 01229000
  1304. * RECBLOK FIT 01230000
  1305. BNH *+8 YES -- @V2A2029 01231000
  1306. BAL R14,CLOSE .. 01232000
  1307. * RECORDS 01233000
  1308. MVC DLMREC+16(8),X8FF RESTORE AREA USED @V2A2029 01234000
  1309. MVI SIZE+1,SPRCSZ*8 SIZE OF ONE VM/SP RECBLOK @VA12228 01235000
  1310. SPACE 01236000
  1311. SPACE 01237000
  1312. USING OWNDLIST,R5 01238000
  1313. L R5,DMKSYSOW GET ADDRESS OF OWNLIST 01239000
  1314. L R4,DMKSYSOC POINTER TO NUMBER OF ENTRIES 01240000
  1315. L R4,0(R4) GET NUMBER OF ENTRIES IN LIST 01241000
  1316. OWNLP LH R8,OWNDRDEV DISPLACEMENT TO RDEVBLOK 01242000
  1317. LTR R8,R8 VOLUME MOUNTED ?? 01243000
  1318. BM NXTREC NO - NO NEED TO SAVE ALLOCATION 01244000
  1319. SLL R8,3(0) CONVERT TO BYTE INDEX @V200820 01245000
  1320. A R8,ARIODV POINT TO RDEVBLOK 01246000
  1321. USING RECBLOK,R7 01247000
  1322. L R7,RDEVRECS GET ADDRESS OF RECBLOK 01248000
  1323. RECLP LTR R7,R7 IS THERE ONE ?? 01249000
  1324. BNZ RECGOOD YES - 01250000
  1325. NXTREC EQU * 01251000
  1326. LA R5,8(R5) UPDATE TO NEXT OWNLIST 01252000
  1327. BCT R4,OWNLP DO NEXT BLOK 01253000
  1328. B NXTFILE 01254000
  1329. SPACE 01255000
  1330. RECGOOD L R6,RECPNT SAVE ADDRESS OF NEXT BLOK 01256000
  1331. LA R3,ALLOCBUF ADDRESS OF ALLOCATION OUTPUT BUFFER 01257000
  1332. MVC ALLOCBUF(8),RECPNT MOVE RECBLOK HEADER TO BUFFE@VA12228 01258000
  1333. MVC ALLOCBUF+8(8),ZEROES ZERO FLAG BYTE @VA12228 01258200
  1334. MVC ALLOCBUF+16(L'RECMAP),RECMAP Move RECBLOK map HRC106DK 01258500
  1335. LR R14,R5 ADDRESS OF CURRENT OWNDLIST ENTRY 01259000
  1336. S R14,DMKSYSOW GET DISPLACEMENT INTO OWNLIST 01260000
  1337. ST R14,ALLOCBUF SAVE FOR WARM START 01261000
  1338. LA R14,95 MAX CYLINDERS FOR 2305 01262000
  1339. TM RDEVTYPE,TYP2305 2305 ?? 01263000
  1340. BNO TST2319 NO- GO TEST FOR 2319-2314 01264000
  1341. CLI RDEVMDL,1 IS THIS A MOD 1 01265000
  1342. BNE CYLCMP NO- MUST BE A MOD 2 01266000
  1343. LA R14,47 SET UP FOR A 2305-1 01267000
  1344. B CYLCMP 01268000
  1345. TST2319 LA R14,202 MAX CYLINDERS FOR 2314,2319 01269000
  1346. TM RDEVTYPE,TYP2314 2314 ?? 01270000
  1347. BO CYLCMP YES -- 01271000
  1348. CLI RDEVTYPE,TYP3380 3380 device ? HRC106DK 01271100
  1349. BNE TST3375 No - check for 3375 HRC106DK 01271150
  1350. LA R14,2654 Max cylinder for 3380 (K) HRC106DK 01271200
  1351. TM RDEVMDL,RDEVMD83 Triple density 3380? HRC106DK 01271250
  1352. BO CYLCMP Check max cyl HRC106DK 01271300
  1353. LA R14,1769 Max cylinder for 3380 (E) HRC106DK 01271350
  1354. TM RDEVMDL,RDEVMD82 Double density 3380? HRC106DK 01271400
  1355. BO CYLCMP Check max cyl HRC106DK 01271450
  1356. LA R14,884 Max cylinder for 3380 (A/D/J) HRC106DK 01271500
  1357. B CYLCMP Check max cyl HRC106DK 01271550
  1358. TST3375 LA R14,958 Max cylinder for 3375 HRC106DK 01271600
  1359. CLI RDEVTYPE,TYP3375 3375 device ? HRC106DK 01271650
  1360. BE CYLCMP Check max cyl HRC106DK 01271700
  1361. LA R14,554 MAX CYLINDERS FOR 3350 @V304498 01272000
  1362. CLI RDEVTYPE,TYP3350 3350 DEVICE ? @V304498 01273000
  1363. BE CYLCMP CHECK MAX CYL @V304498 01274000
  1364. LA R14,403 MAX CYLINDERS FOR 3330 01275000
  1365. CLI RDEVTYPE,TYP3340 3340 DEVICE ? @V2A2029 01276000
  1366. BNE TST3330 NO - CHECK FOR 3330 @V2A2029 01277000
  1367. LA R14,348 SET MAX CYL FOR 35MB (3340) @V2A2029 01278000
  1368. TM RDEVFTR,FTR35MB IS IT A 35MB DATA MODULE ? @V2A2029 01279000
  1369. BO CYLCMP BRANCH IF YES @V2A2029 01280000
  1370. LA R14,697 SET MAX CYL FOR 70MB (3340) @V2A2029 01281000
  1371. B CYLCMP CHECK MAX CYL @V2A2029 01282000
  1372. TST3330 EQU * HERE TO TEST FOR 3330 @V2A2029 01283000
  1373. TM RDEVTYPE,TYP3330 3330 TYPE @V200528 01284000
  1374. BZ MSG922W NO - INVALID DEVICE TYPE (DATA) @V305435 01285000
  1375. CLI RDEVMDL,11 IS THIS A MOD 11 @V200528 01286000
  1376. BNE CYLCMP NO- MUST BE A STANDARD 3330 @V200528 01287000
  1377. LA R14,807 SET UP MAX CYL FOR MOD 11 @V200528 01288000
  1378. CYLCMP CH R14,RECCYL RECCYL LARGER THAN MAX ?? 01289000
  1379. BL MSG922W YES - ALLOCATION BLOK ERROR @V305435 01290000
  1380. CLC RECUSED(1),RECMAX PAGES ALLOCATED LARGER THAN MAX ?? 01291000
  1381. BH MSG922W YES - ALLOCATION BLOK ERROR @V305435 01292000
  1382. BAL R14,PUTREC OUTPUT 01293000
  1383. LR R7,R6 UPDATE TO NEXT RECBLOK 01294000
  1384. B RECLP DO NEXT 01295000
  1385. SPACE 01296000
  1386. **************************************** 01297000
  1387. * 01298000
  1388. * SAVE SPOOL HOLD BLOCKS 01299000
  1389. * 01300000
  1390. **************************************** 01301000
  1391. SPACE 01302000
  1392. CHK06 DS 0H @VA05548 01303000
  1393. CLC INDEX,=AL2(4096-8-SHQBSIZE*8) WILL FIRST @VA05548 01304000
  1394. * SHQBLOK FIT 01305000
  1395. BNH *+8 YES - CONTINUE @VA05548 01306000
  1396. BAL R14,CLOSE WRITE BLOCK TO DASD FIELD @VA05548 01307000
  1397. MVI RECCLR+1,X'00' NOP STORE IN SFBRECS @VA05548 01308000
  1398. MVI SIZE+1,SHQBSIZE*8 SIZE OF ONE SHQBLOK @V2A2029 01309000
  1399. SPACE 01310000
  1400. LA R3,DMKRSPHQ POINTER TO CHAIN OF SYSTEM HOLD 01311000
  1401. * QUEUE 01312000
  1402. B CHK01 SAVE ENTRIES 01313000
  1403. SPACE 2 01314000
  1404. EJECT 01315000
  1405. ***************************************************************** 01316000
  1406. * 01317000
  1407. * SUBROUTINES 01318000
  1408. * 01319000
  1409. ***************************************************************** 01320000
  1410. SPACE 01321000
  1411. NXTFILE BAL R14,PUTDLM INSERT DELIMITER RECORD @V2A2029 01322000
  1412. LA R15,4(,R15) INDEX 01323000
  1413. NXTSP B NXTSP(R15) BRANCH ON TABLE 01324000
  1414. B CHK02 PUNCH 01325000
  1415. B CHK03 READERS 01326000
  1416. B CHK04 DELETE CHAIN 01327000
  1417. B CHK05 SPOOL RECORD ALLOCATION 01328000
  1418. B CHK06 SPOOL HOLD QUEUE BLOKS 01329000
  1419. B DONE ALL DONE 01330000
  1420. * 01331000
  1421. **************************************** 01332000
  1422. * 01333000
  1423. CHACT EQU * HERE TO PICK UP ACTIVE FILES CHAINED TO PRINTER/PUNCH 01334000
  1424. * 01335000
  1425. **************************************** 01336000
  1426. SPACE 01337000
  1427. SPACE 01338000
  1428. DROP R7 01339000
  1429. DROP R6 01340000
  1430. L R6,0(,R5) GET COUNT OF SYSTEM PRINTERS/PUNCHES 01341000
  1431. LTR R6,R6 ANY DEVICES PRESENT ?? 01342000
  1432. BCR 8,R10 NO -- RETURN TO CALLER 01343000
  1433. CHACTNDX LA R5,4(,R5) POINT TO NEXT INDEX ENTRY 01344000
  1434. XC ACBUFF(SFBSIZE*8),ACBUFF CLEAR WORK AREA TO ZEROES 01345000
  1435. LH R8,0(,R5) GET NEXT INDEX ENTRY 01346000
  1436. SLL R8,3(0) CONVERT TO BYTE INDEX @V200820 01347000
  1437. A R8,ARIODV POINT TO RDEVBLOK 01348000
  1438. CLI RDEVTYPE,TYP3800 IS IT A 3800 PRINTER ? @V60B9BA 01349000
  1439. BNE CHACT3 XFER IF NOT @V60B9BA 01350000
  1440. LA R3,ACBUFF USE ACCTING BUFFER TO BUILD @V60B9BA 01351000
  1441. * DUMMY SFBLOK @V60B9BA 01352000
  1442. MVC SFBDATE(8),=C'DUMMY BK' INDICATE DUMMY BLOK @V60B9BA 01353000
  1443. LH R0,RDEVADD GET REAL DEV ADDRESS @V60B9BA 01354000
  1444. L R14,RDEVCUA CONTROL BLOK ADDRESS @V60B9BA 01355000
  1445. USING RCUBLOK,R14 @V60B9BA 01356000
  1446. LH R2,RCUADD CONTROL UNIT ADDRESS @V60B9BA 01357000
  1447. OR R0,R2 COMBINE CTL AND DEV ADDR @V60B9BA 01358000
  1448. TM RCUTYPE,RCUSUB IS THIS A SUBORDINATE CU @V60B9BA 01359000
  1449. BZ *+8 NO- BRANCH @V60B9BA 01360000
  1450. L R14,RCUPRIME YES- POINT TO THE PRIME CU @V60B9BA 01361000
  1451. L R14,RCUCHA ADDRESS OF CHANNEL BLOK @V60B9BA 01362000
  1452. USING RCHBLOK,R14 @V60B9BA 01363000
  1453. AH R0,RCHADD ADD CHANNEL AND DEVICE ADDR @V60B9BA 01364000
  1454. TM RDEVTYPE,TYPPUN IS IT A PUNCH FILE @V60B9BA 01365000
  1455. BZ *+10 NO - @V60B9BA 01366000
  1456. MVC SFBSTART(4),SFBPNT MOVE IN FILE STARTING ADDR @V60B9BA 01367000
  1457. ST R0,SFBPNT SAVE IN SFBLOK FOR WARMSTART@V60B9BA 01368000
  1458. DROP R14 @V60B9BA 01369000
  1459. OI SFBPNT+1,X'10' SIGNIFY THE 3800 DUMMY BLK @V60B9BA 01370000
  1460. MVC SFBFNAME(8),RDEVIMAG GET THE IMAGE LIBR NAME @V60B9BA 01371000
  1461. MVC SFBFTYPE(4),RDEVXSEP CHAR ARR TBL FOR SEP PAGE @V60B9BA 01372000
  1462. MVC SFBFLAG,RDEVFSEP FCB FOR SEPARATOR PAGE @V60B9BA 01373000
  1463. MVC SFBUFORM,=C'STANDARD' DEFAULT FORM @VA12228 01373500
  1464. BAL R14,PUTREC WRITE IT TO WARM START CYL @V60B9BA 01374000
  1465. XC ACBUFF(SFBSIZE*8),ACBUFF CLEAR THE BUFFER @V60B9BA 01375000
  1466. SPACE 1 @V60B9BA 01376000
  1467. * NOW PUT ANY FILES IN THE DELAY PURGE QUEUE INTO THE DELETE Q @V60B9BA 01377000
  1468. TM RDEVSTAT,RDEVDED DEDICATED 3800? @VA10546 01377100
  1469. BO NXTDEV YES,GO ON TO NEXT DEVICE @VA10546 01377200
  1470. SPACE 1 @V60B9BA 01378000
  1471. CHACT2 L R3,RDEVDELP ANCHOR FOR THE DELAY PURGE Q @V60B9BA 01379000
  1472. LTR R3,R3 ANY FILES IN THE QUEUE ? @V60B9BA 01380000
  1473. BZ CHACT3 XFER IF NOT @V60B9BA 01381000
  1474. MVC RDEVDELP,SFBPNT DEQUEUE FIRST FILE @V60B9BA 01382000
  1475. MVC SFBPNT,DMKRSPDL ENQUEUE IT ON DELETE QUEUE @V60B9BA 01383000
  1476. ST R3,DMKRSPDL MAKE IT THE FIRST ONE @V60B9BA 01384000
  1477. B CHACT2 DO SAME FOR NEXT FILE @V60B9BA 01385000
  1478. CHACT3 DS 0H @V60B9BA 01386000
  1479. L R3,RDEVSPL GET ACTIVE FILE POINTER 01387000
  1480. LTR R3,R3 IS THERE ONE ?? 01388000
  1481. BZ DUMMYBUF NO -- GO USE DUMMY BLOK 01389000
  1482. TM RDEVFLAG,RDEVACNT PUNCH WORKING WITH ACCOUNTING 01390000
  1483. BO DUMMYBUF YES- ALLREADY SAVED THE FILES 01391000
  1484. CLI 0(R3),X'FF' IS THIS THE ADDRESS OF SFBLOK 01392000
  1485. BE *+8 YES -- ACTIVE FROM WARM START 01393000
  1486. L R3,RSPSFBLK-RSPLCTL(,R3) YES -- GET ADDRESS OF SFBLOK 01394000
  1487. LTR R3,R3 IS THERE ONE ?? 01395000
  1488. BZ DUMMYBUF NO -- BUILD DUMMY BUFFER 01396000
  1489. TM RDEVTYPC,CLASURI INPUT TYPE UNIT RECORD ?? 01397000
  1490. BZ GETCLASS NO -- 01398000
  1491. XC RDEVSPL(4),RDEVSPL CLEAR ACTIVE DEVICE POINTER 01399000
  1492. CLC SFBPNT-SFBLOK(4,R3),=X'00000000' ANY BUFFERS WRITTEN ? 01400000
  1493. BE *+10 NO -- 01401000
  1494. MVC SFBLAST-SFBLOK(4,R3),SFBPNT-SFBLOK(R3) LAST BUFFER 01402000
  1495. * WRITTEN 01403000
  1496. OI SFBFLAG2-SFBLOK(R3),SFBPURGE INDICATE OPEN SFBLOK 01404000
  1497. MVC SFBPNT-SFBLOK(4,R3),DMKRSPDL CHAIN SFBLOK FIRST ON 01405000
  1498. ST R3,DMKRSPDL DELETE CHAIN 01406000
  1499. DUMMYBUF LA R3,ACBUFF USE ACCOUNTING BUFFER TO BUILD 01407000
  1500. * DUMMY SFBLOK 01408000
  1501. MVC SFBDATE(8),=C'DUMMY BK' INDICATE DUMMY BLOK 01409000
  1502. GETCLASS L R0,RDEVCLAS GET OUTPUT CLASSES FROM RDEVBLOK 01410000
  1503. ST R0,SFBRECS AND SAVE IN SFBLOK (FOR WARM START) 01411000
  1504. LH R0,RDEVADD GET REAL DEV ADDRESS 01412000
  1505. L R14,RDEVCUA CONTROL BLOK ADDRESS 01413000
  1506. USING RCUBLOK,R14 01414000
  1507. LH R2,RCUADD CONTROL UNIT ADDRESS 01415000
  1508. OR R0,R2 COMBINE CONTROL AND DEVICE ADDRESS 01416000
  1509. TM RCUTYPE,RCUSUB IS THIS A SUBORDINATE CU @VA01081 01417000
  1510. BZ *+8 NO- BRANCH @VA01081 01418000
  1511. L R14,RCUPRIME YES- POINT TO THE PRIME CU @VA01081 01419000
  1512. L R14,RCUCHA ADDRESS OF CHANNEL BLOK 01420000
  1513. USING RCHBLOK,R14 01421000
  1514. AH R0,RCHADD ADD CHANNEL AND DEVICE ADDRESS 01422000
  1515. TM RDEVTYPE,TYPPUN IS IT A PUNCH FILE 01423000
  1516. BZ *+10 NO - 01424000
  1517. MVC SFBSTART(4),SFBPNT MOVE IN FILE STARTING ADDRESS 01425000
  1518. ST R0,SFBPNT SAVE IN SFBLOK FOR WARMSTART 01426000
  1519. DROP R14 01427000
  1520. SPACE 01428000
  1521. * 01429000
  1522. * X'80' DEVICE OFFLINE 01430000
  1523. * X'40' DEVICE DRAINED 01431000
  1524. * X'20' SEPARATOR FLAG ON 01432000
  1525. * X'10' THIS IS A SPECIAL BLOCK FOR THE 3800 PRINTER 01433000
  1526. * 01434000
  1527. TM RDEVSTAT,RDEVDISA DEVICE OFFLINE ?? 01435000
  1528. BZ *+8 NO -- 01436000
  1529. OI SFBPNT+1,X'80' INDICATE OFFLINE 01437000
  1530. TM RDEVFLAG,RDEVDRAN DEVICE DRAINED ?? 01438000
  1531. BZ *+8 NO -- 01439000
  1532. OI SFBPNT+1,X'40' INDICATE DEVICE DRAINED 01440000
  1533. TM RDEVFLAG,RDEVSEP SEPARATOR FLAG SET ?? 01441000
  1534. BZ *+8 NO -- (NOSEP) 01442000
  1535. OI SFBPNT+1,X'20' INDICATE SEP - YES 01443000
  1536. OI SFBFLAG,SFBRECER SET SFBRECS IN-COMPLETE 01444000
  1537. BAL R14,PUTREC WRITE THE RECORD 01445000
  1538. MVC SFBPNT(4),SFBSTART RESET ACTIVE START ADDRESS 01446000
  1539. XC SFBRECS(4),SFBRECS CLEAR REC POINTER 01447000
  1540. NXTDEV BCT R6,CHACTNDX GO LOOK AT NEXT DEVICE 01448000
  1541. BR R10 WHEN FINISHED, RETURN TO CALLER 01449000
  1542. DROP R3 @VA12228 01449500
  1543. * 01450000
  1544. * 01451000
  1545. EJECT 01452000
  1546. ******************************************* 01453000
  1547. * 01454000
  1548. * MOVE RECORD TO OUTPUT AREA AND IF FULL WRITE OUT BUFFER TO 01455000
  1549. * WARM START CYLINDER 01456000
  1550. * 01457000
  1551. ******************************************* 01458000
  1552. SPACE 01459000
  1553. PUTDLM LA R3,DLMREC ADDRESS OF DELIMITER RECORD @V2A2029 01460000
  1554. PUTREC LH R2,SIZE GET NUMBER OF BYTES TO BE MOVED 01461000
  1555. AH R2,INDEX ADD INDEX TO CURRENT DISPLACEMENT@V2A2029 01462000
  1556. C R2,=F'4088' WILL IT OVERFLOW THE BUFFER ?? 01463000
  1557. BNH MOVREC NO - MOVE IN RECORD @VA13748 01464100
  1558. B *+6 SKIP CLOSE ENTRY @V2A2029 01465000
  1559. CLOSE SR R3,R3 INDICATE CLOSE REQUEST @V2A2029 01466000
  1560. SPACE 01467000
  1561. LH R1,INDEX REFRESH RECORD DISPLACEMENT @V2A2029 01468000
  1562. LA R1,RECBUFF(R1) ADD INDEX TO NEXT POSITION 01469000
  1563. MVC 0(8,R1),=8X'FE' LAST RECORD IN THIS BUFFER 01470000
  1564. B *+8 .. @V2A2029 01471000
  1565. RDWR L R3,X8FF INDICATE READ OR WRITE ONLY @V2A2029 01472000
  1566. ST R3,MVCADD SAVE MOVE DATA ADDRESS @V2A2029 01473000
  1567. CLC SEEK+2(2),CYLEND WARMSTART CYLINDERS FULL ? @V2A2029 01474000
  1568. BH MSG911W YES-LOOP OR LOT OF SPOOL FILES @V2A2029 01475000
  1569. SR R2,R2 .. @V2A2029 01476000
  1570. CH R2,SEEK+2 SEEK TO CYLINDER ZERO ?? @V2A2029 01477000
  1571. BE MSG910W YES - INVALID WARM START CYL @V2A2029 01478000
  1572. LA R2,SEEK WARMSTRT CYL SEEK ADDRESS @V56BDA8 01479000
  1573. STCM R2,B'0111',READHAR0+1 STORE IN CASE TCC @V56BDA8 01480000
  1574. LA R2,DISKSRCH SEARCH CCW @V56BDA8 01481000
  1575. STCM R2,B'0111',ALTTIC+1 IN CASE OF ALTERNATE TRACK @V56BDA8 01482000
  1576. LA R0,100 RETRY COUNT @V2A2029 01483000
  1577. DSKSIO LA R2,DSKCCW ADDRESS OF CCWS @V2A2029 01484000
  1578. ST R2,CAW SET UP CAW @V2A2029 01485000
  1579. DSKSIO1 EQU * @V56BDA8 01486000
  1580. L R2,DMKSYSWM -> WRM area cyls info HRC075DK 01487000
  1581. LH R2,4(,R2) Get CUU of WRM area volume HRC075DK 01487500
  1582. SIO 0(R2) START IO @V2A2029 01488000
  1583. BC 1,MSG902W CC=3, NOT OPERATIONAL @V2A2029 01489000
  1584. BC 2,DSKBWAIT CC=2, CHANNEL OR SUBCANNEL BUSY 01490000
  1585. BC 4,DSKSTOR CC=1, CSW STORED 01491000
  1586. MVC IONPSW(8),IOINTP SET FOR INTERRUPT 01492000
  1587. WAITI LPSW IWAIT WAIT FOR INTERRUPT 01493000
  1588. * 01494000
  1589. IOINT EQU * HRC075DK 01495000
  1590. CH R2,INTTIO RIGHT DEVICE ? HRC075DK 01495500
  1591. BNE CHKIOINT NO, CHECK UC & WAIT FOR OURS @V407438 01496000
  1592. MVC SAVECSW(12),CSW SAVE CSW AND CAW 01497000
  1593. MVC SAVEDEV(4),184 SAVE DEVICE ADDRESS 01498000
  1594. CLC CSW+4(2),=AL1(CE+DE,0) ANY ERRORS ?? 01499000
  1595. BE DSKOK NO-RECORD WRITTEN SUCCESSFULL 01500000
  1596. DSKSNS LA R3,SNSECCW GET ADDRESS OF SENSE CCW @V2A2029 01501000
  1597. ST R3,CAW AND STORE IN CAW @V2A2029 01502000
  1598. TIO 0(R2) CLEAR IT 01503000
  1599. BC 6,*-4 LOOP IF BUSY OR STATUS STORED 01504000
  1600. SIO 0(R2) START IO 01505000
  1601. TIO 0(R2) TEST IO 01506000
  1602. BC 6,*-4 LOOP IF BUSY OR STATUS STORED 01507000
  1603. TM SENSDATA,TRKCONCK TRACK CONDITION CHECK? @V56BDA8 01508000
  1604. BZ CKPCNT NO, RETRY @V56BDA8 01509000
  1605. MVC CAW+1(3),=AL3(READHAR0-DMKCKP+X'800') @V56BDA8 01510000
  1606. TIO 0(R2) DRAIN ANYTHING PENDING @V56BDA8 01511000
  1607. BC 7,*-4 KEEP TRYING @V56BDA8 01512000
  1608. SIO 0(R2) READ R0 @V56BDA8 01513000
  1609. BC 7,*-4 TAKE ERROR PATH @V56BDA8 01514000
  1610. TIO 0(R2) TEST FOR COMPLETION @V56BDA8 01515000
  1611. BC 7,*-4 TRY AGAIN @V56BDA8 01516000
  1612. CLC CSW+4(2),=AL1(CE+DE,0) CLEAN END? @V56BDA8 01517000
  1613. BNE CKPCNT NO, ERROR @V56BDA8 01518000
  1614. MVC CAW+1(3),=AL3(ALTSEEK-DMKCKP+X'800') @V56BDA8 01519000
  1615. BCT R0,DSKSIO1 RESTART ON ALTERNATE TRACK @V56BDA8 01520000
  1616. B MSG902W FATAL I/O ERROR - WARM CYLINDER @V56BDA8 01521000
  1617. SPACE 1 01522000
  1618. CKPCNT EQU * @V56BDA8 01523000
  1619. BCT R0,DSKSIO BRANCH IF COUNT NOT ZERO @V2A2029 01524000
  1620. B MSG902W FATAL I/O ERROR-WARM CYL @V2A2029 01525000
  1621. SPACE 01526000
  1622. DSKOK ICM R3,B'1111',MVCADD ENTRY POINT RDWR ?? @V2A2029 01527000
  1623. BMR R14 YES - RETURN TO CALLER @V2A2029 01528000
  1624. SR R3,R3 01529000
  1625. IC R3,REC GET RECORD WRITTEN 01530000
  1626. CLM R3,B'0001',PAGECYL REACH END OF CYLINDER ? @V2A2029 01531000
  1627. BL NXTRCD NO -- UPDATE RECORD COUNT @V2A2029 01532000
  1628. LH R2,SEEK+2 GET SEEK ADDRESS @V2A2029 01533000
  1629. LA R2,1(,R2) UPDATE TO NEXT CYLINDER @V2A2029 01534000
  1630. STH R2,SEEK+2 AND STORE IN SEEK FIELD @V2A2029 01535000
  1631. SR R3,R3 START WITH RECORD ONE @V2A2029 01536000
  1632. NXTRCD LA R3,1(,R3) UPDATE RECORD NUMBER @V2A2029 01537000
  1633. STC R3,REC NEXT RECORD 01538000
  1634. BCTR R3,0 -1 AND FIND HEAD 01539000
  1635. CLI TYPE,TYP2314 IS IT 2314, 2319 TYPE ?? 01540000
  1636. BE HD2314 YES 01541000
  1637. SR R2,R2 CLEAR WORK REG @V2A2029 01542000
  1638. CLI TYPE,TYP3340 3340 ? @V2A2029 01543000
  1639. BE HD3340 YES -- @V2A2029 01544000
  1640. CLI TYPE,TYP3350 3350 ? @V304498 01545000
  1641. BE HD3350 YES -- @V304498 01546000
  1642. CLI TYPE,TYP3375 3375 ? HRC106DK 01546100
  1643. BE HD3375 Yes -- HRC106DK 01546200
  1644. CLI TYPE,TYP3380 3380 ? HRC106DK 01546300
  1645. BE HD3380 Yes -- HRC106DK 01546400
  1646. D R2,=F'3' FOR 3330 DIVIDE BY 3 PAGES PER TRACK 01547000
  1647. B STOREHD 01548000
  1648. SPACE 01549000
  1649. HD3340 D R2,=F'2' DIVIDE BY 2 PAGES PER TRACK @V2A2029 01550000
  1650. B STOREHD AND STORE HEAD @V2A2029 01551000
  1651. SPACE 01552000
  1652. HD3350 D R2,=F'4' DIVIDE BY 4 PAGES PER TRACK @V304498 01553000
  1653. B STOREHD AND STORE HEAD @V304498 01554000
  1654. SPACE 01555000
  1655. HD3375 D R2,=F'8' Divide by 8 Pages per track HRC106DK 01555100
  1656. B STOREHD And store head HRC106DK 01555200
  1657. SPACE 1 HRC106DK 01555300
  1658. HD3380 D R2,=F'10' Divide by 10 Pages per track HRC106DK 01555400
  1659. B STOREHD And store head HRC106DK 01555500
  1660. SPACE 1 HRC106DK 01555600
  1661. HD2314 IC R3,HDTABLE(R3) INDEX INTO TABLE AND GET HEAD NUMBER 01556000
  1662. STOREHD STC R3,HEAD+1 STORE HEAD IN SEARCH AREA 01557000
  1663. SPACE 01558000
  1664. LA R0,RECBUFF CLEAR OUTPUT BUFFER 01559000
  1665. L R1,=F'4096' TO X'FF' @V2A2029 01560000
  1666. SR R2,2 .. 01561000
  1667. STH R2,INDEX ZERO INDEX VALUE @V2A2029 01562000
  1668. SR R3,R3 .. 01563000
  1669. ICM R3,B'1000',X8FF .. @V2A2029 01564000
  1670. MVCL R0,R2 MOVE FF TO BUFFER 01565000
  1671. LA R3,DLMREC SET UP TO MOVE IN FIRST RECORD 01566000
  1672. LR R0,R14 SAVE RETURN ADDRESS @V2A2029 01567000
  1673. LH R14,RECCNT GET CURRENT RECORD COUNT 01568000
  1674. LA R14,1(R14) UPDATE BY ONE 01569000
  1675. STH R14,RECCNT AND STORE 01570000
  1676. BAL R14,MOVREC MOVE RECORD TO BUFFER AREA 01571000
  1677. LR R14,R0 RESTORE RETURN ADDRESS @V2A2029 01572000
  1678. SPACE 01573000
  1679. MVC RECBUFF(8),=8X'EE' MOVE IF EES ALL BUFFERS EXCEPT FIRST 01574000
  1680. ICM R3,B'1111',MVCADD ANY DATA TO BE MOVED ? @V2A2029 01575000
  1681. BNPR R14 BRANCH IF MINUS OR ZERO @V2A2029 01576000
  1682. MOVREC LH R1,INDEX DISPLACEMENT INTO BUFFER 01577000
  1683. LA R1,RECBUFF(R1) INDEX TO NEXT POSITION 01578000
  1684. LH R2,SIZE SIZE OF RECORD 01579000
  1685. BCTR R2,0 -1 01580000
  1686. EX R2,MOVBUF AND MOVING RECORD 01581000
  1687. CLI SIZE+1,SPSFBSZ*8 WRITING SFBLOK FOR VM/SP? @VA12228 01581100
  1688. BNE NOTSPSFB SKIP IF NOT @VA12228 01581200
  1689. USING SFBLOK,R1 @VA12228 01581300
  1690. MVC SFBUFORM,=C'STANDARD' STANDARD FORM NUMBER @VA12228 01581400
  1691. MVC SFBOFORM,=C'STANDARD' FOR USER AND OPER @VA12228 01581500
  1692. DROP R1 @VA12228 01581600
  1693. NOTSPSFB DS 0H @VA12228 01581700
  1694. LH R1,INDEX GET COUNT 01582000
  1695. AH R1,SIZE INCREMENT 01583000
  1696. STH R1,INDEX SAVE 01584000
  1697. LH R1,RECCNT GET RECORD COUNT 01585000
  1698. LA R1,1(R1) UPDATE BY ONE 01586000
  1699. STH R1,RECCNT AND STORE 01587000
  1700. BR R14 RETURN 01588000
  1701. * 01589000
  1702. MOVBUF MVC 0(*-*,R1),0(R3) EXECUTED MOVE 01590000
  1703. * 01591000
  1704. EXOI OI 0(R14),X'00' SET MASK FOR RESOURCE @V200829 01592000
  1705. EJECT 01593000
  1706. SPACE 01594000
  1707. LTORG 01595000
  1708. EJECT 01596000
  1709. DS 0F @V407429 01597000
  1710. CKPBUFF EQU * @V407429 01598000
  1711. SPACE 01599000
  1712. ************************************************** 01600000
  1713. * 01601000
  1714. * CHAIN POINTERS AND EXTERNAL ADDRESSES NEEDED BY 01602000
  1715. * DMKCKP TO SAVE SYSTEM STATUS FOR WARM START. 01603000
  1716. * THE FOLLOWING LIST IS MOVED FROM DMKRSP 01604000
  1717. * POINTED TO BY ARSPPR ADDRESS IN PSA 01605000
  1718. * 01606000
  1719. ************************************************** 01607000
  1720. * 01608000
  1721. RSPLIST DS CL4 CL4'PRT' 01609000
  1722. DMKRSPPR DS 1F PRINTER FILE CHAIN 01610000
  1723. DS CL4 CL4'PUN' 01611000
  1724. DMKRSPPU DS 1F PUNCH FILE CHAIN 01612000
  1725. DS CL4 CL4'RDR' 01613000
  1726. DMKRSPRD DS 1F READER FILE CHAIN 01614000
  1727. DS CL4 CL4'DEL' 01615000
  1728. DMKRSPDL DS 1F DELETE FILE CHAIN 01616000
  1729. DS CL4 CL4'ACNT' 01617000
  1730. DMKRSPAC DS 1F ACCOUNT FILE CHAIN 01618000
  1731. DS CL4 CL4'DUMP' @V67CAH7 01618300
  1732. DMKRSPDP DS 1F DUMP IN PROGRESS CHAIN @V67CAH7 01618600
  1733. DS CL4 CL4'HOLD' 01619000
  1734. DMKRSPHQ DS 1F HOLD QUEUE CHAIN 01620000
  1735. DS CL4 CL4'ID' 01621000
  1736. DMKRSPID DS 1H SYSTEM SPOOL ID COUNTER 01622000
  1737. DS 1H X'FFFF' FILLER 01623000
  1738. DMKOPRWT DS 1F V(DMKOPRWT) ADDRESS OF CONSOLE WRITE ROUTINE @V200820 01624000
  1739. DMKSYSOW DS 1F V(DMKSYSOW) ADDRESS OF SYSTEM OWNLIST 01625000
  1740. DMKSYSOC DS 1F V(DMKSYSOC) POINTER TO NUMBER OF ENTRIES 01626000
  1741. DMKSYSTP DS 1F V(DMKSYSTP) POINTER TO SYSRES TYPE 01627000
  1742. DMKSYSWM DS 1F V(DMKSYSWM) ADDRESS OF WARMSTART CYLINDER 01628000
  1743. DMKTMRPT DS 1F V(DMKTMRPT) VMVTIME CONVERT ROUTINE 01629000
  1744. DMKRSPCV DS 2F CHECK POINT-WARMSTART CYLINDER ID 01630000
  1745. DMKSYSRM DS 1F V(DMKSYSRM) ADDRESS OF REAL @VA02884 01631000
  1746. * STORAGE SIZE 01632000
  1747. DMKRSPMN DS 1F OPEN MONITOR FILE @V50A2B5 01633000
  1748. SPACE 01634000
  1749. LISTSIZE EQU *-RSPLIST SIZE OF LIST IN DMKRSP 01635000
  1750. SPACE 01636000
  1751. ************************************************* 01637000
  1752. * 01638000
  1753. * PROGRAM CHECK SAVE AREA 01639000
  1754. * 01640000
  1755. ************************************************* 01641000
  1756. SPACE 01642000
  1757. DS 0F 01643000
  1758. CLR1 EQU * 01644000
  1759. SAVECSW DS 2F ERROR CSW 01645000
  1760. DS 1F ERROR CAW 01646000
  1761. SAVEDEV DS 1F ERROR DEVICE ADDRESS 01647000
  1762. SAVEPSW DS 2F PSW AT TIME OF ERROR 01648000
  1763. SAVECODE DS 2F SVC AND PROGRAM INT CODE 01649000
  1764. CKPSAVE DS 16F R0-R15 REGISTER SAVE 01650000
  1765. SAVERDEV DS 1F RDEVBLOK SAVE AREA @V200829 01651000
  1766. EJECT 01652000
  1767. SPACE 01653000
  1768. ************************************************* 01654000
  1769. * 01655000
  1770. * SAVE AND WORK AREA 01656000
  1771. * 01657000
  1772. ************************************************* 01658000
  1773. DS 0D 01659000
  1774. SAVEWRK2 DS 1D WORK AREA FOR ACCOUNTING 01660000
  1775. CYLSTART DS 1H FIRST WARMSTART CYLINDER ADDRESS @V2A2029 01661000
  1776. CYLEND DS 1H LAST WARMSTART CYLINDER ADDRESS @V2A2029 01662000
  1777. INDEX DS 1H DISPLACEMENT INTO BUFFER @V2A2029 01663000
  1778. SIZE DS 1H LOGICAL RECORD SIZE @V2A2029 01664000
  1779. SENSDATA DS CL24 SENSE DATA AREA @V2A2029 01665000
  1780. STUSER DS 1F FIRST VMBLOK (ACCOUNTING) 01666000
  1781. MVCADD DS 1F DATA ADDRESS SAVE AREA 01667000
  1782. STORSIZE DS 1F SIZE OF REAL STORAGE @VA02884 01668000
  1783. TERMEND DS 1F ADDRESS OF TERMINAL BUFFER END @V200829 01669000
  1784. ACNTSW DS 1X ACNT SWITCH 01670000
  1785. TYPE DS 1X SYSRES DEVICE TYPE CODE 01671000
  1786. PAGECYL DS 1X PAGES PER CYLINDER @V2A2029 01672000
  1787. SPACE 01673000
  1788. CLR1SIZE EQU *-CLR1 01674000
  1789. SPACE 01675000
  1790. ************************************************* 01676000
  1791. * 01677000
  1792. * WORK BUFFER AREA 01678000
  1793. * 01679000
  1794. ************************************************* 01680000
  1795. SPACE 01681000
  1796. DS 0F 01682000
  1797. ALLOCBUF EQU * ALLOCATE BUFFER AREA 01683000
  1798. ACBUFF EQU * ACCOUNTING BUFFER AREA 01684000
  1799. DS CL128 BUFFER AREA 01685000
  1800. DS 0F 01686000
  1801. X8FF EQU * @V2A2029 01687000
  1802. DLMREC DS 8X DELIMITER DATA RECORDS 01688000
  1803. HASH DS 6X PLACE FOR HASH NUMBER 01689000
  1804. RECCNT DS 1H NUMBER OF RECORDS PROCESSED 01690000
  1805. DATETIME DS 8X DMKSYS DATE TIME 01691000
  1806. DS 99X REST OF DELIMITER BUFFER 01692000
  1807. DS 0F 01693000
  1808. CLRFSIZE EQU *-DLMREC SIZE OF BUFFER AREA 01694000
  1809. SPACE 01695000
  1810. ************************************************* 01696000
  1811. * 01697000
  1812. * START OF CHECKPOINT OUTPUT BUFFER (4096 BYTES) 01698000
  1813. * 01699000
  1814. ************************************************* 01700000
  1815. SPACE 01701000
  1816. RECBUFF EQU * 01702000
  1817. BUFFDLM DS 8X FIRST 8 BYTES OF BUFFER 01703000
  1818. BUFFHASH DS 6X HASH COUNT 01704000
  1819. BUFFCNT DS 1H RECORD COUNT 01705000
  1820. BUFFVER DS X VERSION OF WARM START DATA @VA12228 01706000
  1821. VERNULL EQU X'FF' NULL VERSION NUMBER @VA12228 01706200
  1822. VERR6 EQU X'01' RELEASE 6 VERSION OF WARM START @VA12228 01706400
  1823. VERSP EQU X'02' VM/SP VERSION OF WARM START @VA12228 01706600
  1824. DS 7X @VA12228 01706800
  1825. BUFFCV DS 8X CKP WARMSTART CYL CLOCK VALUED 01707000
  1826. BUFFID DS 8X BUFFER ID @V200829 01708000
  1827. SPACE 01709000
  1828. EJECT 01710000
  1829. PSA , @V306638 01711000
  1830. COPY ACCOUNT @V306638 01712000
  1831. COPY ALLOC @V306638 01713000
  1832. COPY CORE @V306638 01714000
  1833. COPY DEVTYPES @V306638 01715000
  1834. COPY EQU @V306638 01716000
  1835. COPY IOBLOKS @V306638 01717000
  1836. COPY NETWORK @V306638 01718000
  1837. COPY RBLOKS @V306638 01719000
  1838. COPY SPOOL @V306638 01720000
  1839. SFBLOK DSECT , CONTINUATION OF SFBLOK @VA12228 01720100
  1840. ORG , WITH VM/SP SFBLOK DEFINITIONS @VA12228 01720200
  1841. SFBUFORM DS D USER FORM @VA12228 01720300
  1842. SFBOFORM DS D OPERATOR FORM @VA12228 01720400
  1843. SPSFBSZ EQU (*-SFBLOK+7)/8 VM/SP SFBLOK IS 2 DWRDS LONGER @VA12228 01720500
  1844. SPRCSZ EQU 8 VM/SP RECBLOK IS 8 DOUBLEWORDS @VA12228 01720600
  1845. SYSLOCS , @V306638 01721000
  1846. COPY VBLOKS @V306638 01722000
  1847. COPY VMBLOK @V306638 01723000
  1848. END 01724000