Table of Contents

DMSACM Source

References

Source Listing

DMSACM.ASSEMBLE.txt
  1. ACM TITLE 'DMSACM (CMS) VM/370 - RELEASE 6' 00001000
  2. SPACE 2 00002000
  3. *. 00003000
  4. * 00004000
  5. * 00005000
  6. * 00006000
  7. * 00007000
  8. * MODULE NAME: 00008000
  9. * 00009000
  10. * DMSACM (READMFD) 00010000
  11. * 00011000
  12. * FUNCTION: 00012000
  13. * 00013000
  14. * TO READ THE MASTER FILE DIRECTORY (MFD) AND OTHER 00014000
  15. * INFORMATION INTO CORE FROM DISK. 00015000
  16. * 00016000
  17. * ATTRIBUTES: 00017000
  18. * 00018000
  19. * TRANSIENT, REENTRANT 00019000
  20. * 00020000
  21. * ENTRY POINTS: 00021000
  22. * 00022000
  23. * READMFD 00023000
  24. * 00024000
  25. * ENTRY CONDITIONS: 00025000
  26. * 00026000
  27. * R0 MUST POINT TO ACTIVE DISK TABLE 00027000
  28. * 00028000
  29. * EXIT CONDITIONS: 00029000
  30. * 00030000
  31. * NORMAL RETURN 00031000
  32. * 00032000
  33. * R15=0 (AND CONDITION-CODE = 0) 00033000
  34. * 00034000
  35. * ERROR RETURNS 00035000
  36. * 00036000
  37. * R15 = 1: DISK ERROR READING MFD, OR FIRST WORD 00037000
  38. * OF MFD = 0 00038000
  39. * R15 = 2: DISK NOT ATTACHED 00039000
  40. * R15 = 3: UNRECOGNIZABLE DASD DEVICE (NOT A 2314, 2311 00040000
  41. * 3330, 3340, 3350 OR 3380) HRC004DS 00041490
  42. * R15 = 4: DISK IS FOUND TO BE READ-ONLY (NON-FATAL) 00042000
  43. * R15 = 5: INSUFFICIENT FREE STORAGE 00043000
  44. * R15 = 28: DMSROS TEXT NOT FOUND - O/S DISK ACCESS 00044000
  45. * 00045000
  46. * CALLS TO OTHER ROUTINES: 00046000
  47. * 00047000
  48. * DMSFREE, DMSFRET, DMSDIOR, DMSDIOW, DMSROS 00048000
  49. * 00049000
  50. * 00050000
  51. * 00051000
  52. * EXTERNAL REFERENCES: 00052000
  53. * 00053000
  54. * DMSNVC, ADTSECT, FVSECT 00054000
  55. * 00055000
  56. * TABLES/WORKAREAS 00056000
  57. * 00057000
  58. * MFD BUFFER 00058000
  59. * QMSK BUFFER 00059000
  60. * QQMSK BUFFER 00060000
  61. * 00061000
  62. * REGISTER USAGE: 00062000
  63. * 00063000
  64. * R13 FVSECT 00064000
  65. * R12 BASE 00065000
  66. * R11 ADTSECT 00066000
  67. * REST WORK 00067000
  68. * 00068000
  69. * OPERATION: 00069000
  70. * 00070000
  71. * DMSACF AND DMSACM WHEN USED TOGETHER 00071000
  72. * ARE CALLED BY DMSACC OR DMSING TO BRING ALL OR PART 00072000
  73. * OF A USER FILE DIRECTORY INTO STORAGE OR TO READ THE 00073000
  74. * LABEL OF THE O/S DISK BEING ACCESSED. DMSACM DOES 00074000
  75. * NOT BRING IN ANY FST HYPERBLOCKS (THAT BEING DONE BY 00075000
  76. * DMSACF), AND IS THEREFORE CALLED DIRECTLY BY DMSACC 00076000
  77. * WHEN ACCESSING A DISK USING THE (ERASE) OPTION. 00077000
  78. * 00078000
  79. * DMSACM DOES THE FOLLOWING: 00079000
  80. * 00080000
  81. * A DIAGNOSE IS ISSUED TO CP FOR THE DEVICE TYPE OF THE 00081000
  82. * ADDRESS SPECIFIED. AN ERROR CODE IS RETURNED TO THE 00082000
  83. * CALLER IF A NON-ZERO CONDITION CODE IS RETURNED FROM 00083000
  84. * DIAGNOSE(I.E. THE DEVICE IS NOT ATTACHED). 00084000
  85. * REGISTER 15 FROM DIAGNOSE IS INTERROGATED FOR THE FOLLOWING: 00085000
  86. * 1) IF IT IS NOT A DASD DEVICE, AN ERROR CODE OF 3 00086000
  87. * IS RETURNED TO THE CALLER; 00087000
  88. * 2) IF THE LOW ORDER BYTE OF R15 INDICATES THAT THE 00088000
  89. * DEVICE IS A HRC004DS 00089390
  90. * A 3330(X'10'), 2314(X'40'), 3340(X'01'), HRC004DS 00089780
  91. * 3350(X'08') OR 3380(X'20'), HRC004DS 00090170
  92. * A X'09', X'08', X'07', X'0B', OR X'0E' HRC004DS 00090560
  93. * RESPECTIVELY, IS STORED IN THE FOURTH BYTE OF THE 00091000
  94. * 12-BYTE DEVICE-TABLE ENTRY IN THE NUCON TABLE, FOR 00092000
  95. * THE PARTICULAR DEVICE GIVEN BY THE ACTIVE DISK TABLE. 00093000
  96. * IF THE DEVICE IS NONE OF THESE, CONTROL IS 00094000
  97. * RETURNED TO THE USER WITH AN ERROR CODE OF 3. 00095000
  98. * 00096000
  99. * THEN THE DISK LABEL (RECORD NO. 3 - THAT IS, CYLINDER 00097000
  100. * 0, HEAD 0, RECORD 3) IS READ FROM DISK AND A TEST IS 00098000
  101. * MADE TO DETERMINE IF THE DISK IS A CMS OR AN O/S DISK. 00099000
  102. * IF THE DISK IS O/S, CONTROL GOES TO A SPECIAL ROUTINE. 00100000
  103. * 00101000
  104. * NEXT, THE MASTER FILE DIRECTORY (RECORD NO. 4 - THAT 00102000
  105. * IS, CYLINDER 0, HEAD 0, RECORD 4) IS READ FROM DISK 00103000
  106. * INTO A BUFFER OBTAINED FROM FREE STORAGE. (ERROR 1 00104000
  107. * IF CANNOT BE READ SUCCESSFULLY). THE FIRST HALFWORD 00105000
  108. * OF THE MFD IS CHECKED TO MAKE SURE DATA IS THERE 00106000
  109. * (ERROR 1 IF NOT). 00107000
  110. * 00108000
  111. * THE DISK ADDRESSES AT THE BEGINNING OF THE MFD ARE 00109000
  112. * THEN CHECKED, SCANNING FOR AN ENDING SENTINEL OF 00110000
  113. * FFFF, FFFE, FFFD, TO DETERMINE HOW MANY FST 00111000
  114. * HYPERBLOCKS ARE ON DISK, AND WHERE THE QMSK 00112000
  115. * EXTENSIONS (IF ANY) ARE STORED ON DISK. THE NUMBER 00113000
  116. * OF FST HYPERBLOCKS IS STORED ON DISK. THE NUMBER OF 00114000
  117. * FST HYPERBLOCKS IS STORED AD ADTHBCT IN THE ACTIVE 00115000
  118. * DISK TABLE FOR FUTURE USE (USUALLY BY DMSRCF). THE 00116000
  119. * DISK COUNTS ADTNUM, ETC., ARE STORED IN THE ACTIVE 00117000
  120. * DISK TABLE FROM MFD, ALONG WITH THE NUMBER OF 00118000
  121. * CYLINDERS. 00119000
  122. * 00120000
  123. * AT THIS POINT, IF THE READ-ONLY FLAG-BIT ADTFRO IN 00121000
  124. * THE ADTFLG1 FLAG IS SET, DMSACM ACCEPTS THE DISKS AS 00122000
  125. * READ-ONLY, LEAVES THE MFD BLOCK IN A FREE STORAGE 00123000
  126. * BUFFER OR JUST ENOUGHT SIZE TO INCLUDE ALL THE 00124000
  127. * DISK-ADDRESSES AT THE BEGINNING, AND EXITS TO THE 00125000
  128. * CALLER, NORMALLY DMSACF. 00126000
  129. * 00127000
  130. * IF THE DISK IS NOT FLAGGED READ-ONLY, DMSACM ATTEMPTS 00128000
  131. * TO WRITE THE 00129000
  132. * MFD EXACTLY AS IS RIGHT BACK ON DISK USING DMSDIOW. 00130000
  133. * IF UNSUCCESSFUL BECAUSE THE DISK IS READ-ONLY 9(AN 00131000
  134. * ERROR 6 FROM DMSDIOW), DMSACM 00132000
  135. * FINISHES UP AS DESCRIBED IN THE ABOVE PARAGRAPH (THE 00133000
  136. * READ-ONLY BIT BEING SET NOW), AND EXIT IS 00134000
  137. * SUBSEQUENTLY MADE WITH ERROR 4 (NONFATAL). 00135000
  138. * 00136000
  139. * IF THE MFD WAS SUCCESSFULLY WRITTEN BACK ON DISK, THE 00137000
  140. * READ-WRITE FLAG-BIT IS SET, AND DMSACM CONTINUES. 00138000
  141. * NEXT THE RIGHT AMOUNT OF FREE STORAGE IS OBTAINED FOR 00139000
  142. * THE QMSK BIT-MASK (DEPENDING ON THE SIZE OF ADTNUM - 00140000
  143. * THE TOTAL NUMBER OF RECORDS ON DISK). THEN THE QMSK 00141000
  144. * EXTNESIONS (IF ANY) ARE READ INTO THE FREE STORAGE 00142000
  145. * AREA, DOUBLE-WORD ALIGNED, AND WITH AN INTEGRAL 00143000
  146. * NUMBER OF DOUBLE-WORDS IN THE READ (TO PREVENT A 00144000
  147. * POSSIBLE CHAINING CHECK WHEN RUNNING ON CP), AND THEN 00145000
  148. * MOVED TO THE PROPER PLACE IN THE QMSK BUFFER: THE 00146000
  149. * FIRST 215 BYTES OF THE QMSK ARE THEN MOVED FROM THE 00147000
  150. * MFD TO THE QMSK IN CORE. (IF THE QMSK IS LESS THAN 00148000
  151. * 215 BYTES, ONLY THE CORRECT NUMBER OF BYTES IS 00149000
  152. * MOVED). WHEN THROUGH, THE QMSK IS LAID OUT IN CORE 00150000
  153. * AS ONE CONTIGUOUS TABLE, WITH AN INTEGRAL NUMBER OF 00151000
  154. * BYTES, PADDED (IF NECESSARY) TO AN INTEGRAL NUMBER OF 00152000
  155. * DOUBLE WORDS, IN FREE STORAGE. 00153000
  156. * 00154000
  157. * THE LOCATION OF THE QMSK IS OF COURSE STORED WHERE 00155000
  158. * NEEDED, AND THE OTHER COUNTS (ADTPQM1 THROUGH 00156000
  159. * ADTPQM3), COMPUTED AND STORED. FREE STORAGE IS THEN 00157000
  160. * OBTAINED FOR THE QQMSK, IF A 2314 READ/WRITE DISK AND 00158000
  161. * THE 200-BYTE QQMSK TABLE MOVED INTO POSITION FROM THE 00159000
  162. * MFD. 00160000
  163. * 00161000
  164. * LASTLY, AS MENTIONED ABOVE FOR THE READ-ONLY CASES, 00162000
  165. * JUST ENOUGH FREE STORAGE IS OBTAINED FOR THE 00163000
  166. * INFORMATION ON DISK ADDRESSES CONTAINED AT THE 00164000
  167. * BEGINNING OF THE MFD TO BE KEPT IN CORE, THE CRUCIAL 00165000
  168. * DATA IS MOVED THERETO, AND THE 800-BYTE BUFFER IS 00166000
  169. * RELEASED. 00167000
  170. * 00168000
  171. * IF THE DISK IS AN O/S DISK, THE DISK LABEL AND VTOC 00169000
  172. * ADDRESS ARE SAVED IN THE ADT BLOCK. A CHECK IS MADE 00170000
  173. * TO DETERMINE IF DMSROS HAS BEEN LOADED (BY A PREVIOUS 00171000
  174. * ACCESS OF AN O/S DISK) AND IF NOT DMSSTT IS CALLED TO 00172000
  175. * VERIFY THAT DMSROS TEXT EXISTS. UPON SUCCESSFUL RETURN 00173000
  176. * FROM STATE (IF NOT FOUND, AN ERROR MSG IS ISSUED), 00174000
  177. * DMSROS TEXT IS LOADED INTO HIGH STORAGE AREA WITH 00175000
  178. * PROTECT KEY OF NUCLEUS AND A BRANCH IS MADE TO THE 00176000
  179. * O/S ACCESS ROUTINE OF DMSROS TO READ THE FORMAT 4 00177000
  180. * DSCB OF THE DISK. UPON SUCCESSFUL RETURN FROM DMSROS, 00178000
  181. * CONTROL IS RETURNED TO THE CALLER. ANY OTHER ERRORS 00179000
  182. * ARE TREATED AS GENERAL LOGIN ERRORS. 00180000
  183. * TO SUMMARIZE: 00181000
  184. * 00182000
  185. * FOR A READ-WRITE DISK, DMSACM READS IN ALL OF THE 00183000
  186. * USER FILE DIRECTORY EXCEPT THE FST HYPERBLOCKS AND 00184000
  187. * INITIALIZES ALL APPROPRIATE INFORMATION IN THE ACTIVE 00185000
  188. * DISK TABLE. 00186000
  189. * 00187000
  190. * FOR A R/O CMS DISK, DMSACM READS IN ALL OF THE USER 00188000
  191. * FILE DIRECTORY EXCEPT THE FST HYPERBLOCKS, THE QMSK 00189000
  192. * AND QQMSK TABLES, AND THE COUNTS IN THE LATTER HALF 00190000
  193. * OF THE ACTIVE DISK TABLE ASSOCIATED WITH THE QMSK AND 00191000
  194. * QQMSK TABLES, WHICH ARE NOT NEEDED IN CORE FOR A 00192000
  195. * READ-ONLY DISK. 00193000
  196. * 00194000
  197. *. 00195000
  198. EJECT 00196000
  199. DMSACM START 0 P3097 00197000
  200. SPACE 00198000
  201. READMFD EQU DMSACM P3097 00199000
  202. ENTRY READMFD P3097 00200000
  203. SPACE 00201000
  204. USING *,R15 00202000
  205. USING NUCON,R0 00203000
  206. L R15,AFVS A(FVS) INTO R15 00204000
  207. USING FVSECT,R15 00205000
  208. STM R0,R14,REGSAV0 SAVE R0 THRU 14 00206000
  209. DROP R15 00207000
  210. LR R13,R15 REFERENCE 'FVS' INFO 00208000
  211. USING FVSECT,R13 00209000
  212. BALR R12,0 OUR OWN ADDRESSABILITY 00210000
  213. USING *,R12 00211000
  214. OI UFDBUSY,UPBIT SET 'OUR' BIT IN 'UFDBUSY' FLAG 00212000
  215. LR R11,R0 REFERENCE ACTIVE-DISK-TABLE 00213000
  216. USING ADTSECT,R11 ... 00214000
  217. L R10,ADIOSECT REFERENCE DIOSECT 00215000
  218. USING DIOSECT,R10 00216000
  219. * 00217000
  220. ST R11,FVSDSKA STORE ADDRESS OF ACTIVE DISK TABLE 00218000
  221. ST R11,ADTADD WHERE NEEDED. 00219000
  222. LA R9,1 1 INTO R9 FOR GENERAL USE 00220000
  223. SR ZERO,ZERO CLEAR REGISTER 'ZERO', 00221000
  224. L R7,ADTDTA LET R7 POINT TO NUCON 12-BYTE DEVICE-TABLE 00222000
  225. LH R14,DTAD(,R7) POINT TO THE DEVICE ADDRESS P3097 00223000
  226. DC X'83EF0024' DIAGNOSE TO 'CP' FOR THE DEVICE TYPEP3097 00224000
  227. BNZ NOTATT P3097 00225000
  228. CLM R15,B'1000',MDASD IS IT DASD AT ALL? P3097 00226000
  229. BNE UNKNOWN NO IT IS NOT. P3097 00227000
  230. LA R2,266 GET NUMBER OF REC'S PER CYLINDER.HRC004DS 00227300
  231. MVI DTADT(R7),T3330 FLAG THE DEVICE TYPE HRC004DS 00227600
  232. CLM R15,B'0100',M3330 IS IT A 3330? P3097 00228000
  233. BE GETMFD B IF YES HRC004DS 00229190
  234. LA R2,96 GET NO. OF RECS PER CYL HRC004DS 00229380
  235. MVI DTADT(R7),T3340 FLAG THE DEVICE TYPE HRC004DS 00229570
  236. CLM R15,B'0100',M3340 IS IT A 3340 ? @V2A2014 00230000
  237. BE GETMFD YES..BR HRC004DS 00231190
  238. LA R2,570 GET NO. OF RECS PER CYL HRC004DS 00231380
  239. MVI DTADT(R7),T3350 FLAG THE DEVICE TYPE HRC004DS 00231570
  240. CLM R15,B'0100',M3350 IS IT A 3350 ? @V304498 00232000
  241. BE GETMFD YES..BR HRC004DS 00233090
  242. LA R2,540 GET NO. OF RECS PER CYL HRC004DS 00233180
  243. MVI DTADT(R7),T3380 FLAG THE DEVICE TYPE HRC004DS 00233270
  244. CLM R15,B'0100',M3380 IS IT A 3380 ? HRC004DS 00233360
  245. BE GETMFD YES..BR HRC004DS 00233450
  246. CLM R15,B'0100',M2314 IS SOME SORT OF 2314? P3097 00234000
  247. BNE UNKNOWN WEIRD DASD. P3097 00235000
  248. LA R2,150 GET NUMBER OF RECORDS PER CYL P3097 00236000
  249. MVI DTADT(R7),T2314 FLAG THE DEVICE TYPE @V2A2014 00237000
  250. GETMFD LR R7,R15 SAVE VIRT. DEVICE INFO. 00247000
  251. LA R0,101 INDICATE SIZE OF MFD BUFFER @VA04381 00248000
  252. DMSFREE DWORDS=(0),TYPE=NUCLEUS,ERR=*,TYPCALL=BALR @VA04381 00249000
  253. LTR R15,R15 TEST THE RETURN CODE FROM FREE @VA04381 00250000
  254. BZ GOGETMFD IF RC = 0, CONTINUE @VA04381 00251000
  255. MVI ERRCOD0,5 SIGNAL FREE STORAGE NOT AVAILABLE@VA04381 00252000
  256. B ERROR EXIT AFTER CLEANUP @VA04381 00253000
  257. SPACE 1 00254000
  258. GOGETMFD EQU * @VA04381 00255000
  259. STM R0,R1,JSR0 SAVE R0 AND R1 FOR LATER FRET CALL 00256000
  260. LR UFD,R1 SAVE MFD BUFFER LOCATION 00257000
  261. ST UFD,RWMFD INSERT IN DISK PARAMETER LIST. 00258000
  262. MVC DSKLOC(16),RWMFD SET UP P-LIST TO READ LABEL-RECP3097 00259000
  263. LA R15,H3 STORE CORE-ADDRESS P3097 00260000
  264. ST R15,DSKADR OF DISK-ADDRESS (WHICH = 0003) P3097 00261000
  265. LA R1,DSKLST POINT TO P-LIST, P3097 00262000
  266. L R15,ARDTK READ IT INTO CORE P3097 00263000
  267. BALR R14,R15 ... P3097 00264000
  268. BNZ ERROR1 FORGET IT THEN P3097 00265000
  269. L R1,DSKLOC POINT TO THE BUFFER, P3097 00266000
  270. CLC CMSEQ,0(R1) IT IT A BONA-FIDE LABEL ? P3097 00267000
  271. BNE CHKOS IF NOT, SEE IF O/S LABEL @V201101 00268000
  272. MVC 800(6,R1),4(R1) MOVE LABEL TO END OF MFD BUFFERP3097 00269000
  273. L R15,ARDTK CALL RDTK TO GET MFD FROM DISK 00270000
  274. LA R1,RWMFD PARAMETER LIST 00271000
  275. BALR R14,R15 ... 00272000
  276. BNZ ERROR1 ERROR 1 IF DISK ERROR 00273000
  277. * 00274000
  278. CH ZERO,0(,UFD) CHECK 1ST HALFWORD OF MFD, 00275000
  279. BE ERROR1 TREAT AS 'UNREADABLE' IF NOTHING IS THERE 00276000
  280. * 00277000
  281. LH R15,UFDNUMP(,UFD) PICK UP NO. CYLINDERS FROM MFD 00278000
  282. ST R15,ADTCYL STORE NUMBER OF CYLINDERS P3097 00279000
  283. MVI ADTFLG2,ADTFMFD INDICATE MFD IS IN CORE. 00280000
  284. * 00281000
  285. SR R8,R8 PREPARE TO COUNT FST HYPERBLOCKS 00282000
  286. * 00283000
  287. SCANFST DS 0H COUNT PSTAT (1ST FST) OR PSTAT-EXTENSION(S) ... 00284000
  288. AR R8,R9 ADD 1 TO UFD-BLOCK COUNTER, 00285000
  289. LA UFD,2(,UFD) ADVANCE TO NEXT MFD ADDRESS 00286000
  290. LR R4,UFD SAVE THIS ADDRESS (NEED SHORTLY) 00287000
  291. LH R15,0(,UFD) CHECK FOR ENDING-SENTINEL 00288000
  292. CH R15,FFF OF 'FFFF' 00289000
  293. BE STORSIG BE IF YES ('SHORT' PQMSK) 00290000
  294. CH R15,FFD WATCH OUT FOR NEW (FEB 1969) SENTINEL 00291000
  295. BE YESFFD INDICATING PQMSK TRACKS WILL FOLLOW. 00292000
  296. LH R15,2(,UFD) IF NOT THAT, SEE IF 'NEXT' HALFWORD 00293000
  297. CH R15,FFE = 'FFFE' ? 00294000
  298. BNE SCANFST BNE IF NOT, KEEP SCANNING. 00295000
  299. LA R4,2(,R4) ADJUST R4 TO INCLUDE FFFE SENTINEL 00296000
  300. B WASFFFE AND GO STORE DISK-ADDRESS 00297000
  301. * 00298000
  302. * IF 'FFFD' SENTINEL (FEB 1969) THAT MEANS END OF FST-BLOCKS, 00299000
  303. * DISK-ADDRESSES FOR PQMSK-BLOCK(S) WILL FOLLOW. 00300000
  304. YESFFD LA UFD,2(,UFD) POINT TO DISK-ADDRESS OF 1ST PQMSK BLOCK 00301000
  305. LA R4,ADTMXBML*2+2(,R4) ADJUST R4 FOR WORST CASE @VA01990 00302000
  306. * (TOGETHER WITH THE "LA R4,9(,R4)" BELOW, THIS 00303000
  307. * SKIPS OVER THE X'FFFD' SENTINEL PLUS THE MAXIMUM 00304000
  308. * POSSIBLE NUMBER OF BIT-MAP BLOCKS FOR A 3350, 00305000
  309. * ENSURING THAT THE "MFD KEPT IN CORE" WILL HAVE 00306000
  310. * AT LEAST ONE HALFWORD OF BINARY 0000 AT THE END.) 00307000
  311. * 00308000
  312. * COMES HERE IF SENTINEL WAS X'FFFE' ... 00309000
  313. WASFFFE ST UFD,DSKADR STORE DISK-ADDRESS FOR READING REM. OF PQMSK 00310000
  314. * 00311000
  315. STORSIG STH R15,SIGNAL STORE SIGNAL OF FFFF, FFFD, OR FFFE 00312000
  316. ST R8,ADTHBCT SAVE COUNT OF FST HYPERBLOCKS 00313000
  317. S R4,RWMFD NUMBER OF BYTES IN MFD SO FAR 00314000
  318. LA R4,9(,R4) +2 INTO (ROUNDED) DOUBLE WORDS 00315000
  319. SRA R4,3 ... 00316000
  320. L UFD,RWMFD RESTORE UFD REGISTER, 00317000
  321. * (NOTE: 'ADT1ST' WAS CLEARED BY "RELUFD") 00318000
  322. MVC ADTNUM(16),UFDTRKS(UFD) STORE 'NUMTRKS' THRU 'LASTRK' 00319000
  323. STC ZERO,ERRCOD0 SET RETURN-CODE TO 0 00320000
  324. TM ADTFLG3,ADTFORCE IS DISK FORCED READ-ONLY ? @V305032 00321000
  325. BO SETFRO YES - GO SET ADTFLG1,ADTFRO FLAG @V305032 00322000
  326. TM ADTFLG1,ADTFRW IF NOT, READ-WRITE DISK, THEN ? 00323000
  327. BO GETQMSK BO IF YES, READ IN PQMSK, ETC. 00324000
  328. CLM R7,B'0001',MRW IS IT READ-WRITE 00325000
  329. BL ISWRITE YES. 00326000
  330. MVI ERRCOD0,4 SIGNAL (UNEXPECTEDLY) READ-ONLY @V305032 00327000
  331. SETFRO OI ADTFLG1,ADTFRO AND MARK AS READ-ONLY CMS DISK @V305032 00328000
  332. B FINUP ... 00329000
  333. ISWRITE OI ADTFLG1,ADTFRW MARK AS READ-WRITE. 00330000
  334. * 00331000
  335. GETQMSK EQU * (PQMSIZ & PQMNUM ALREADY CLEAR) 00332000
  336. L R8,ADTNUM GET NUMTRKS, @VA03452 00333000
  337. LA R8,7(,R8) ROUND BEFORE CONVERTING ... @VA03452 00334000
  338. SRA R8,3 CHANGE FROM BITS TO BYTES, 00335000
  339. LR R15,R8 SAVE IN R8, PUT IN R15 ALSO 00336000
  340. SH R15,H215+2 SUBTRACT MINIMUM OF 215 BYTES, 00337000
  341. BNP FREPQ TRANSFER IF 215 OR LESS. 00338000
  342. ST R15,ADTPQM1 STORE SIZE FOR READ OR WRITE, 00339000
  343. SR R14,R14 DIVIDE 00340000
  344. D R14,F800 BY 800, 00341000
  345. LTR R14,R14 CHECK FOR ZERO-REMAINDER 00342000
  346. BZ STR15P (POSSIBLE ALBEIT UNLIKELY) 00343000
  347. AR R15,R9 ADJUST QUOTIENT (UNLESS REM=0) 00344000
  348. STR15P ST R15,ADTPQM2 STORE NUMBER OF TRACKS NEEDED 00345000
  349. FREPQ LA R0,7(,R8) NOW GET TOTAL SIZE OF 00346000
  350. SRA R0,3 PQMSK ROUNDED UP TO DBL-WORDS, 00347000
  351. * (NOTE - R8 RETAINS TOTAL NO. OF BYTES IN PQMSK FOR LATER) 00348000
  352. DMSFREE DWORDS=(0),TYPE=NUCLEUS,ERR=NOSTORE,TYPCALL=BALR 04381 00349000
  353. ST R0,ADTPQM3 STORE NO. DBL-WORDS FREE STORAGE IN PQMSK 00350000
  354. LR QLOC,R1 PLACE IN QLOC 00351000
  355. ST QLOC,ADTMSK AND STORE WHERE NEEDED 00352000
  356. BCTR R0,0 OBTAIN 00353000
  357. SLA R0,3 ADDRESS OF 00354000
  358. AR R1,R0 VERY LAST DOUBLE-WORD, 00355000
  359. XC 0(8,R1),0(R1) CLEAR IT. 00356000
  360. * 00357000
  361. TM SWTCH,X'FF' CHECK WHETHER 'SHORT' OR LONG PQMSK 00358000
  362. BM READPQM BM IF 'LONG', MUST READ REMAINING BYTES. 00359000
  363. * 00360000
  364. LM R1,R2,ADTPQM1 CHECK NUMBER OF BYTES (AND BLOCKS) 00361000
  365. LTR R1,R1 ... 00362000
  366. BNP STRPQQ BNP IF NOTHING THERE 00363000
  367. STH R2,ADTRES STORE 'ADTPQM2' (IN R2) AS ADTRES 00364000
  368. MVI 215(QLOC),00 CLEAR BYTE 215, 00365000
  369. LA QLOC,216(,QLOC) NOW WE'RE ALIGNED AT BYTE 216 00366000
  370. H6 LA R0,6(R1,0) COMPUTE BYTE-COUNT LESS 1 + 7 00367000
  371. SRA R0,3 OVER 8 = NO. DBL-WORDS TO CLEAR, 00368000
  372. BZ STRPQQ BR..IF QMASK EXACTLY 216 BYTES @VA03713 00369000
  373. LA R1,8 R1=8 FOR 'AR' BELOW, 00370000
  374. SR R7,R7 CLEAR R7 (R6 = 'ZERO' ALREADY CLEAR) 00371000
  375. CLR216 STM R6,R7,0(QLOC) CLEAR A DBL-WORD, 00372000
  376. AR QLOC,R1 BUMP BY 8 FOR NEXT TIME, 00373000
  377. BCT R0,CLR216 ITERATE FOR REQUIRED NO. DBL-WORDS 00374000
  378. B STRPQQ NOW GO STORE PQQMSK, ETC. 00375000
  379. * 00376000
  380. * GET PQMSK AND PQQMSK TABLES 00377000
  381. * 00378000
  382. READPQM DS 0H READ IN REMAINDER OF PQMSK (IF > 215) 00379000
  383. L R7,ADTPQM1 GET EXACT BYTE COUNT, 00380000
  384. LA R6,7(,R7) ROUND TO 00381000
  385. SRL R6,3 MULTIPLE OF 8 00382000
  386. SLL R6,3 (TO READ AN INTEGRAL NO. OF DBL-WORDS) 00383000
  387. STM R5,R6,DSKLOC STORE CORE-LOCATION (QLOC=R5) & BYTE-COUNT 00384000
  388. LA R1,DSKLST READ PQMSK EXTENSION(S) INTO 00385000
  389. L R15,ARDTK BEGINNING OF PQMSK, 00386000
  390. BALR R14,R15 (DBL-WORD ALIGNED TO AVOID CHAINING-CHK) 00387000
  391. BNZ ERROR1 BAD NEWS IF ERROR READING BIT-MASK. 00388000
  392. H215 LA R15,215 215 INTO A HANDY REGISTER, 00389000
  393. LA R14,0(QLOC,R7) QLOC + BYTE-COUNT INTO R14, 00390000
  394. SR R6,R6 DIVIDE EXACT BYTE-COUNT (IN R7) 00391000
  395. DR R6,R15 BY 215, 00392000
  396. AR R7,R9 ROUND QUOTIENT UP 1 (NO MATTER WHAT) 00393000
  397. MOVQMSK SR R14,R15 BACK OFF 215 BYTES ON R14, 00394000
  398. MVC 215(215,R14),0(R14) MOVE A 215-BYTE CHUNK 'UP' 215 BYTES 00395000
  399. BCT R7,MOVQMSK AND ITERATE FOR NUMBER OF CHUNKS NEEDED. 00396000
  400. * 00397000
  401. * (NOTE - WHEN THRU, THE FIRST 215 BYTES OF BIT-MASK 00398000
  402. * WILL BE 'GARBAGE' DUE TO MOVING 'MORE THAN NEEDED' - 00399000
  403. * BUT WE'RE INITIALIZING THEM NEXT, SO IT ALL WORKS FINE...) 00400000
  404. * 00401000
  405. * 00402000
  406. * ALL READ-WRITE BRANCHES JOIN HERE ..... 00403000
  407. STRPQQ L UFD,RWMFD RESTORE 'UFD' REGISTER (R3) 00404000
  408. LM R1,R2,ADTMSK GET A(PQMSK) AND A(PQQMSK) - IF ANY 00405000
  409. BCTR R8,0 DECREMENT R8 BY 1 FOR EX-MVC, 00406000
  410. CH R8,H214+2 IS NO. OF BYTES TO MOVE > 214 ? 00407000
  411. BNH EXMVC BNH IF NOT, GO TO IT. 00408000
  412. H214 LA R8,214 SUBSTITUTE 214 IF WAS MORE THAN THAT 00409000
  413. EXMVC EX R8,MOV1STQ MOVE FIRST PART OF PQMSK TO FREE STORAGE 00410000
  414. L R14,ADTDTA REFER TO NUCON DEVICE TABLE INFO @VA03452 00411000
  415. CLI DTADT(R14),T2314 IS THIS A 2314 ? @VA03452 00412000
  416. BNE FINUP NO - WE DON'T NEED ANY "QQMSK". @VA03452 00413000
  417. LTR R1,R2 DO WE HAVE A PQQMSK IN CORE? (IN R1 IF YES) 00414000
  418. BP SAVQQ BP IF YES (NO PROBLEM) 00415000
  419. LA R0,25 SET FOR 25 DOUBLE-WORDS = 200 BYTES 00416000
  420. DMSFREE DWORDS=(0),TYPE=NUCLEUS,ERR=NOSTORE,TYPCALL=BALR 04381 00417000
  421. ST R1,ADTQQM SAVE THE ADDRESS 00418000
  422. OI ADTFLG1,ADTFQQF INDICATE THAT IT'S IN FREE STORAGE 00419000
  423. SAVQQ MVC 0(200,R1),600(UFD) GET PQQMSK ENTIRELY FROM MFD 00420000
  424. * 00421000
  425. FINUP EQU * FINISH UP - LEAVE 'MFD' INFO. IN CORE 00422000
  426. * (IN A FREE-STORAGE BLOCK OF ITS OWN OF 00423000
  427. * EXACTLY THE RIGHT SIZE - FOR BEST CORE-MANAGEMENT 00424000
  428. * PERFORMANCE AND PAGING CHARACTERISTICS) ... 00425000
  429. * NOTE - R4 STILL HOLDS NO. OF DBL-WORDS OF MFD INFORMATION 00426000
  430. L R2,RWMFD R2 = A(800-BYTE MFD BLOCK) 00427000
  431. LR R0,R4 NO. OF DOUBLE-WORDS WE NEED INTO R0, 00428000
  432. DMSFREE DWORDS=(0),TYPE=NUCLEUS,ERR=NOSTORE,TYPCALL=BALR 04381 00429000
  433. STM R0,R1,ADTMFDN STORE SIZE & ADDRESS OF 'NEW' MFD BLOCK 00430000
  434. LA R3,8 WE'LL MOVE 8 BYTES AT A TIME 00431000
  435. MOVEM LM R14,R15,0(R2) PICK UP A DOUBLE-WORD FROM MFD BLOCK, 00432000
  436. STM R14,R15,0(R1) MOVE TO NEW MFD LOCATION, 00433000
  437. AR R1,R3 ADD 8 00434000
  438. AR R2,R3 ... 00435000
  439. BCT R4,MOVEM ITERATE FOR NO. DBL-WORDS THERE 00436000
  440. * 00437000
  441. L R1,JSR0+4 FIND THE ORIGINAL MFD BUFFER P3097 00438000
  442. MVC ADTID(6),800(R1) AND GET THE LABEL WE HID EARLIEP3097 00439000
  443. CLI ADTMX,C' ' ARE WE A R/O EXTENSION OF SOME DISK?P3097 00440000
  444. BE RETUFD TRF IF NOT (FORGET IT). 00441000
  445. LA R1,ADTMX-24 POINT TO THE LETTER, 00442000
  446. L R15,VCADTLKP CALL ADTLKP TO @VM03093 00443000
  447. BALR R14,R15 FIND "PARENT" DISK 00444000
  448. BNZ RETUFD TRF IF NOT FOUND (KINDA STRANGE) 00445000
  449. DROP R11 00446000
  450. USING ADTSECT,R1 REFERENCE "PARENT" DISK 00447000
  451. OI ADTFLG1,ADTROX SET R/O EXT. FLAG-BIT 00448000
  452. DROP R1 00449000
  453. USING ADTSECT,R11 RESTORE NORMAL DSECT ADDRESSABILITY 00450000
  454. * 00451000
  455. RETUFD EQU * 00452000
  456. LM R0,R1,JSR0 00453000
  457. DMSFRET DWORDS=(0),LOC=(1),TYPCALL=BALR @VM03083 00454000
  458. EXIT NI UFDBUSY,255-UPBIT TURN OFF OUR UFDBUSY FLAG-BIT, 00455000
  459. LM R0,R15,REGSAV0 RESTORE R0-R14, RETURN-CODE TO R15 00456000
  460. LTR R15,R15 SET CONDITION-CODE FOR CONVENIENCE OF CALLER 00457000
  461. BR R14 AND EXIT. 00458000
  462. * 00459000
  463. MOV1STQ MVC 0(*-*,R1),UFDPQM(UFD) MOVES 1ST PART OF PQMSK (VIA R8) 00460000
  464. EJECT 1 00461000
  465. *************************************************************** 00462000
  466. * 00463000
  467. * VERIFY O/S LABEL AND LOAD DMSROS INTO FRRE STORAGE 00464000
  468. * 00465000
  469. *************************************************************** 00466000
  470. * 00467000
  471. CHKOS CLC VOL1,0(R1) IS IT O/S VOLUME LABEL ? @V201101 00468000
  472. BNE ERROR1 NO..FORGET IT THEN @V201101 00469000
  473. * 00470000
  474. MVI ERRCOD0,0 INITIALIZE RETURN CODE @V201101 00471000
  475. MVC ADTUSED(8),JSR0 SAVE FRET PARAMS FOR LATER US@V201101 00472000
  476. MVC ADTID(6),4(R1) SAVE VOLID IN ADT @V201101 00473000
  477. MVC OSADTVTA(5),11(R1) SAVE VTOC ADDR IN ADT @V201101 00474000
  478. L R15,ADMSROS GET ADDR OF DMSROS @V201101 00475000
  479. LTR R15,R15 ANYTHING THERE ? @V201101 00476000
  480. BP GOROS YES..GO TO IT... @V201101 00477000
  481. * 00478000
  482. LA R0,24 GET SIZE OF SAVE AREA IN DWOR@V201101 00479000
  483. DMSFREE DWORDS=(0),TYPE=USER,ERR=NOSTORE,TYPCALL=BALR @VA04381 00480000
  484. MVC 0(128,R1),REGSAV0 SAVE REGSAV0-REGSAV1 @V201101 00481000
  485. LR R3,R1 SAVE AREA ADDRESS @V201101 00482000
  486. * 00483000
  487. LA R1,STROS GET DMSROS STATE LIST @V201101 00484000
  488. SVC 202 ... @V201101 00485000
  489. DC AL4(ERROR2) NOT FOUND..FORGET IT @V201101 00486000
  490. * 00487000
  491. L R1,FVSFSTIL GET ITEM LENGTH @V201101 00488000
  492. MH R1,FVSFSTIC COMPUTE MODULE SIZE @V201101 00489000
  493. LA R0,7(,R1) ROUND TO NEXT DOUBLE WORD @V201101 00490000
  494. SRA R0,3 GET NUMBER DOUBLE WORDS @V201101 00491000
  495. DMSFREE DWORDS=(0),TYPE=NUCLEUS,ERR=*,TYPCALL=BALR @VA04381 00492000
  496. LTR R15,R15 CHECK FRET RETURN CODE @VA04381 00493000
  497. BZ GETROS IF RETCODE IS ZERO, CONTINUE @VA04381 00494000
  498. MVI ERRCOD0,5 SIGNAL STORAGE EXHAUSTED @VA04381 00495000
  499. B ERROR2A GO TO ERROR CLEANUP @VA04381 00496000
  500. SPACE 1 00497000
  501. GETROS LR R2,R0 SAVE NUMBER OF DWORDS @VA04381 00498000
  502. ST R1,ADMSROS SAVE DMSROS ADDRESS @V201101 00499000
  503. STH R2,LDMSROS SAVE DMSROS LENGTH @V201101 00500000
  504. XC TBENT(2),TBENT RESET LDR TBL COUNT @V201101 00501000
  505. OI MODFLGS,SYSLOAD ALLOW LOAD ABOVE FREELOWE @VA04666 00502000
  506. L R10,LOCCNT SAVE LOCCNT @V201122 00503000
  507. UNPK 128(9,R3),ADMSROS(5) UNPACK DMSROS ADDRESS @V201122 00504000
  508. TR 128(8,R3),HEXCHAR TRANSLATE TO HEX @V201122 00505000
  509. MVC 136(ENDLDROS-LDROS,R3),LDROS SETUP LDR PLIST @V201122 00506000
  510. MVC 136+HEXLOC-LDROS(8,R3),128(R3) CONVERT TO HEXL@V201122 00507000
  511. LA R1,136(R3) GET DMSROS LOAD LIST @V201122 00508000
  512. SVC 202 ... @V201122 00509000
  513. DC AL4(*+4) ... @V201101 00510000
  514. NI MODFLGS,255-SYSLOAD RESET LOADER FLAG @VA04666 00511000
  515. ST R10,LOCCNT RESTORE LOCCNT @V201101 00512000
  516. EJECT 1 00513000
  517. * 00514000
  518. LR R1,R3 GET SAVEAREA ADDRESS @V201101 00515000
  519. LR R3,R15 SAVE LOAD RETURN CODE @V201101 00516000
  520. MVC REGSAV0(128),0(R1) MOVE REGSAV0-REGSAV1 BACK @V201101 00517000
  521. LA R0,24 GET SIZE IN DWORDS @V201101 00518000
  522. DMSFRET DWORDS=(0),LOC=(1),TYPCALL=BALR @VM03203 00519000
  523. LTR R15,R3 ANY ERRORS FROM LOAD ? @V201101 00520000
  524. BZ GETROSAD NO..GO TO DMSROS @V201101 00521000
  525. STC R15,ERRCOD0 SAVE ERROR CODE @V201101 00522000
  526. B ERROR3 GIVE ERROR MESSAGE @V201101 00523000
  527. * 00524000
  528. GETROSAD L R15,ADMSROS GET DMSROS ADDRESS @V201101 00525000
  529. GOROS LH R1,CDMSROS GET DMSROS COUNT @V201101 00526000
  530. LA R1,1(,R1) UP COUNT BY ONE @V201101 00527000
  531. STH R1,CDMSROS SAVE NEW DMSROS COUNT @V201101 00528000
  532. BALR R14,R15 GO WITH LUCK... @V201101 00529000
  533. * 00530000
  534. MVC JSR0(8),ADTUSED RESTORE FRET PARMS @V201101 00531000
  535. LTR R15,R15 ANY ERRORS IN DMSROS ? @V201101 00532000
  536. BZ RETUFD NO..JUST RETURN @V201101 00533000
  537. MVI ERRCOD0,1 ERROR READING DISK CODE @V201101 00534000
  538. LH R1,CDMSROS GET DMSROS COUNT @V201101 00535000
  539. BCTR R1,0 LESS ONE @V201101 00536000
  540. LTR R1,R1 ... @V201101 00537000
  541. BNP NOROS IF NOT POSITIVE,REL DMSROS @V201101 00538000
  542. STH R1,CDMSROS SAVE NEW COUNT @V201101 00539000
  543. B LGINERR ACCESS ERROR.. @V201101 00540000
  544. * 00541000
  545. NOROS MVC JSR0(8),ADTUSED RESTORE FRET PARMS @V201101 00542000
  546. L R1,ADMSROS GET DMSROS ADDRESS @V201101 00543000
  547. LH R0,LDMSROS GET DMSROS LENGTH @V201101 00544000
  548. XC ADMSROS(8),ADMSROS CLEAR ADDR , SIZE & COUNT @V201101 00545000
  549. ERROR2B EQU * HRC004DS 00545500
  550. DMSFRET DWORDS=(0),LOC=(1),TYPCALL=BALR @VM03203 00546000
  551. B LGINERR FINALLY DID IT... @V201101 00547000
  552. EJECT 00548000
  553. ********************************************************************** 00549000
  554. * 00550000
  555. * ERROR RETURN 00551000
  556. * 00552000
  557. ********************************************************************** 00553000
  558. SPACE 00554000
  559. NOSTORE MVI ERRCOD0,5 SET INSUFFICIENT STORAGE RETCODE @VA04381 00555000
  560. B LGINERR MUST FRET MFD BUFFER ON EXIT @VA04381 00556000
  561. NOTATT MVI ERRCOD0,2 P3097 00557000
  562. B ERROR P3097 00558000
  563. UNKNOWN MVI ERRCOD0,3 P3097 00559000
  564. B ERROR P3097 00560000
  565. ERROR1 MVI ERRCOD0,01 ERROR 1 FOR ERROR READING DISK 00561000
  566. * 00562000
  567. LGINERR LM R0,R1,JSR0 GET FRET PARAMETERS 00563000
  568. DMSFRET DWORDS=(0),LOC=(1),TYPCALL=BALR @VM03083 00564000
  569. ERROR EQU * (COMES HERE IF ERROR BUT DIDN'T CALL FREE) 00565000
  570. NI ADTFLG1,255-(ADTFRO+ADTFRW) CLEAR READ-ONLY & READ-WRITE 00566000
  571. MVI ADTFLG2,00 FLAG-BITS, AND INDICATE MFD NOT IN CORE. 00567000
  572. MVI ADTMX,C' ' ALSO BLANK OUT EXTENSION-MODE-LETTER JS 00568000
  573. B EXIT GO RESTORE REGISTERS, ETC., AND EXIT. 00569000
  574. * 00570000
  575. H3 DC H'0003' LABEL-RECORD = RECORD 3 ON DISK. 00571000
  576. H80 DC H'0080' LABEL-RECORD LENGTH FOR O/S VOL. @V201101 00572000
  577. EJECT 00573000
  578. ERROR2 EQU * @V201101 00574000
  579. MVI ERRCOD0,28 SAVE ERROR CODE HRC004DS 00575190
  580. ERROR3 EQU * HRC004DS 00575380
  581. DMSERR TEXT='ERROR LOADING ''DMSROS TEXT''', *00575570
  582. NUM=240,LET=E,CSECT=ACC HRC004DS 00575760
  583. CLI ERRCOD0,28 HRC004DS 00575950
  584. BNE NOROS HRC004DS 00576140
  585. MVC JSR0(8),ADTUSED RESTORE FRET PARAMETERS @V201101 00577000
  586. ERROR2A LR R1,R3 GET SAVEAREA ADDRESS @VA04381 00579000
  587. LA R0,24 INDICATE SIZE OF AREA TO FRET @VA04381 00580000
  588. B ERROR2B RETURN TO ACC HRC004DS 00583990
  589. EJECT 1 00587000
  590. * 00588000
  591. T3340 EQU X'07' @V2A2014 00589000
  592. T2314 EQU X'08' @V2A2014 00590000
  593. T3330 EQU X'09' @V2A2014 00591000
  594. T3350 EQU X'0B' CMS' 3350 DEVICE TYPE @V304498 00592000
  595. T3380 EQU X'0E' CMS' 3380 DEVICE TYPE HRC004DS 00592500
  596. * 00593000
  597. MDASD DC X'04' P3097 00594000
  598. M3330 DC X'10' P3097 00595000
  599. M2314 DC X'40' P3097 00596000
  600. M3340 DC X'01' CP'S 3340 DEVICE TYPE @V2A2014 00597000
  601. M3350 DC X'08' CP'S 3350 DEVICE TYPE @V304498 00598000
  602. M3380 DC X'20' CP'S 3380 DEVICE TYPE HRC004DS 00598500
  603. M2311 DC X'80' P3097 00599000
  604. MRW DC X'80' READ-ONLY INDICATOR 00600000
  605. CMSEQ DC CL4'CMS=' CMS LABEL ALWAYS START WITH THIS. 00601000
  606. VOL1 DC CL4'VOL1' O/S LABEL ALWAYS START WITH THIS.@V201101 00602000
  607. * 00603000
  608. * 00604000
  609. STROS DS 0D DMSROS STATE PLIST @V201101 00605000
  610. DC CL8'STATE' @V201101 00606000
  611. DC CL8'DMSROS' @V201101 00607000
  612. DC CL8'TEXT' @V201101 00608000
  613. DC CL8'*' @V201101 00609000
  614. DC 8X'FF' @V201101 00610000
  615. * 00611000
  616. LDROS DS 0D DMSROS LOAD PLIST @V201122 00612000
  617. DC CL8'INCLUDE' @V201122 00613000
  618. DC CL8'DMSROS' @V201122 00614000
  619. DC CL8'(' @V201122 00615000
  620. DC CL8'ORIGIN' @V201122 00616000
  621. HEXLOC DC 8C'0' @V201122 00617000
  622. DC CL8'NOMAP' @V201122 00618000
  623. DC 8X'FF' @V201122 00619000
  624. ENDLDROS DC C'0123456789ABCDEF' @V201122 00620000
  625. HEXCHAR EQU *-X'FF'-1 START OF TRANSLATE TABLE @V201122 00621000
  626. * 00622000
  627. EJECT 00623000
  628. NUCON 00624000
  629. * 00625000
  630. DROP R12 00626000
  631. EJECT 00627000
  632. * DEFINITIONS ... 00628000
  633. * 00629000
  634. * DISPLACEMENTS FOR MFD ... 00630000
  635. UFDPQM EQU 600-216 216 BYTES BEFORE PQQMSK AT 600 00631000
  636. UFDNUMP EQU UFDPQM-2 NUMBER OF CYLINDERS IN MFD BLOCK 00632000
  637. UFDNUMT EQU UFDNUMP-2 TWO BYTES NOT USED AT PRESENT (= 0) 00633000
  638. UFDTRKS EQU UFDNUMT-16 NUMTRKS, QTUSEDP, QTLEFTP, & LASTRK 00634000
  639. * 00635000
  640. REGEQU 00636000
  641. * 00637000
  642. UFD EQU R3 00638000
  643. QLOC EQU R5 00639000
  644. ZERO EQU R6 00640000
  645. EJECT 00641000
  646. FVS 00642000
  647. DROP R13 00643000
  648. EJECT 00644000
  649. DIOSECT 00645000
  650. DROP R10 00646000
  651. EJECT 00647000
  652. ADT 00648000
  653. EQUATES 00649000
  654. END 00650000