Table of Contents

1XM

Table Of Contents

  • [00009] 7165/895 (CCC) DRIVER.
  • [00240] CONSTANTS, DEFINITIONS, AND MACROS.
  • [00325] TBLM - CREATE TABLE ENTRY MACRO.
  • [00348] CBTE - CONTROL BUFFER TABLE ENTRY.
  • [00363] CCBA - COMPUTE *CBT* ENTRY ADDRESS.
  • [00389] PUTE - PHYSICAL UNIT TABLE ENTRY.
  • [00404] CPTA - COMPUTE *PUT* ENTRY ADDRESS.
  • [00430] EMBE - ERROR MESSAGE TABLE ENTRY.
  • [00445] MONITOR - ISSUE MONITOR FUNCTION.
  • [00471] MASTER DRIVER.
  • [00472] MXM - 895 DRIVER.
  • [00478] MST - MASTER MAIN PROGRAM.
  • [00494] TPOR - TABLE OF *PUT* ORDINALS.
  • [00511] AUA - ADVANCE UEM ADDRESS.
  • [00550] CCR - CHECK FOR CHANNEL REQUESTED OR DOWN.
  • [00595] CCS - CHECK FOR CONSECUTIVE SECTOR REQUEST.
  • [00657] CDS - CRACK DETAILED STATUS.
  • [00743] CRL - CHECK FOR ERROR RETRY LIMIT REACHED.
  • [00804] CRQ - CHECK REQUEST QUEUE.
  • [00866] DCH - RELEASE CHANNEL.
  • [00891] ERR - PROCESS ERROR.
  • [00991] TEPF - TABLE OF ERROR PROCESSING FLAGS.
  • [01015] TMNE - TABLE OF ERROR CODE MNEMONICS.
  • [01024] TREC - TABLE OF RETRY COUNTS.
  • [01033] TSYM - TABLE OF BML SYMPTOM CODES.
  • [01042] FNC - FUNCTION CHANNEL.
  • [01082] GDS - GET DETAILED STATUS.
  • [01119] GGS - GET GENERAL STATUS.
  • [01155] IBM - ISSUE BML MESSAGE.
  • [01317] IFI - INITIALIZE FOR I/O.
  • [01379] IIC - ISSUE I/O COMPLETION REQUEST.
  • [01414] IMF - ISSUE MONITOR FUNCTION.
  • [01434] ISF - ISSUE SEEK OPERATION.
  • [01504] RLC - RELOAD CCC CONTROLWARE IF NECESSARY.
  • [01533] OVI - OBTAIN AND VERIFY *PUT* INTERLOCK.
  • [01607] PDT - PROCESS DATA TRANSFER.
  • [01651] PFR - PREPARE FOR RETRY ATTEMPT.
  • [01680] PRE - PRESET ERROR PROCESSOR.
  • [01734] RCH - REQUEST CHANNEL.
  • [01760] RFU - READ FROM UEM.
  • [01789] RHR - RELEASE HARDWARE RESERVES.
  • [01814] RIO - PERFORM READ I/O OPERATIONS.
  • [01892] RPI - RELEASE *PUT* INTERLOCK.
  • [01942] RSS - RESET SLAVE TO IDLE LOOP.
  • [01968] RTM - REQUEST TRACK FLAW IF MEDIA ERROR.
  • [02045] SCD - SET DRIVER DROPPED FLAG.
  • [02075] SSF - SET SUSPECT FLAG.
  • [02125] SUQ - SCAN UNIT QUEUE.
  • [02238] TEP - TERMINATE ERROR PROCESSING.
  • [02357] WFS - WAIT FOR SLAVE TO PASS THE CHANNEL.
  • [02422] WIO - PERFORM WRITE I/O OPERATIONS.
  • [02491] WTU - WRITE TO UEM.
  • [02560] PRS - PRESET *1XM*.
  • [02854] SSL - START SLAVE.
  • [02940] STA - SET TABLE ADDRESSES.
  • [02983] SLV - SLAVE MAIN PROGRAM.
  • [03003] PER - POST ERROR MESSAGE FOR MASTER.
  • [03027] RPR - READ REQUEST PROCESSOR.
  • [03071] WFC - WAIT FOR CHANNEL FLAG.
  • [03102] WFR - WAIT FOR REQUEST FROM MASTER.
  • [03125] WPR - WRITE REQUEST PROCESSOR.
  • [03168] PRS - PRESET SLAVE FOR PROCESSING.
  • [03228] RLC - RELOAD CONTROLWARE.
  • [03312] PRS - PRESET RELOAD CONTROLWARE OVERLAY.

Source Code

1XM.txt
  1. IDENT 1XM,MXM
  2. 1XM TITLE 1XM - 7165/895 (CCC) DRIVER.
  3. PERIPH
  4. BASE MIXED
  5. SST
  6. *COMMENT 1XM - 7165/895 (CCC) DRIVER.
  7. COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
  8. 1XM SPACE 4,15
  9. *** 1XM - 7165/895 (CCC) DRIVER.
  10. *
  11. * G. S. ANDERSON. 04/30/84.
  12. * R. M. DANISCH. 02/01/86.
  13. 1XM SPACE 4,15
  14. *** *1XM* IS THE CYBER CHANNEL COUPLER (CCC) DRIVER FOR THE
  15. * 7165/895 DISK STORAGE SUBSYSTEM.
  16. *
  17. * THE 7165/895 DISK DRIVES ARE SUPPORTED AS BUFFERED I/O
  18. * DEVICES. THE REQUESTS THAT ARE PROCESSED BY *1XM* ARE
  19. * POSTED BY *CPUMTR* IN THE BUFFERED I/O TABLES IN *CMR*.
  20. * *1XM* INTERLOCKS THE UNITS, LINKS THE REQUESTS, AND COMPLETES
  21. * THE REQUESTS BY ISSUING APPROPRIATE *BIOM* REQUESTS.
  22. *
  23. * EACH *1XM* MASTER/SLAVE PP PAIR WILL SUPPORT ONE CHANNEL AND
  24. * WILL BE THE SOLE DRIVER FOR THE *CCC* ON THAT CHANNEL. *1XM*
  25. * WILL BE CHECKING THE PHYSICAL UNIT TABLE (PUT) FOR REQUESTS
  26. * ON UNITS THAT ARE SUPPORTED THROUGH THE *CCC* THAT *1XM* IS
  27. * DRIVING.
  28. *
  29. * *1XM* SCANS THROUGH THE *PUT* ENTRIES IN A CIRCULAR FASHION
  30. * LOOKING FOR REQUESTS TO PROCESS. ONCE A REQUEST IS FOUND
  31. * AND LINKED *1XM* USES THE PHYSICAL DISK AND UEM ADDRESSES IN
  32. * THE CORRESPONDING *CBT* ENTRY TO DETERMINE THE ACTION TO BE
  33. * TAKEN. *1XM* WILL ATTEMPT TO PROCESS CONSECUTIVE SECTOR
  34. * REQUESTS ON THE CURRENT UNIT UNTIL THE END OF THE CYLINDER
  35. * OR A CONSECUTIVE SECTOR REQUEST WAS NOT FOUND. AT THIS
  36. * POINT *1XM* WILL RESUME ITS SEARCH THROUGH THE *PUT* WITH THE
  37. * *PUT* ENTRY IMMEDIATELY FOLLOWING THE ONE JUST PROCESSED.
  38. EJECT
  39. *** CALLING SEQUENCE FOR MASTER AND SLAVE.
  40. *
  41. * MASTER PP COMMUNICATION AREA:
  42. *
  43. * WORD 0 18/*1XM*, 6/CP, 6/CCTO, 6/0, 12/MAS, 12/CHAN
  44. * WORD 1-7 USED FOR MONITOR REQUESTS
  45. *
  46. * SLAVE PP COMMUNICATION AREA:
  47. *
  48. * WORD 0 18/*1XM*,6/CP,12/SU,12/SL,12/CHAN
  49. * WORD 1 NOT USED
  50. * WORD 2 12/REQU,12/0,12/LSB,24/UEM ADDR
  51. * WORD 3 12/SEC,48/0
  52. * WORD 4 12/MEF,48/0
  53. * WORD 5 12/ROC,48/0
  54. * WORD 6-7 NOT USED
  55. *
  56. * CCTO *CCT* ORDINAL.
  57. * MAS DEFINES THE MASTER *1XM* DRIVER (0).
  58. * CHAN THE CHANNEL BEING DRIVEN BY THIS PP.
  59. * SU NON-ZERO WHEN THE SLAVE IS INITIALIZED.
  60. * SL DEFINES THE SLAVE *1XM* DRIVER (1).
  61. * REQU REQUEST FOR SLAVE TO PROCESS.
  62. * 1 = READ
  63. * 2 = WRITE
  64. * 3 = DROP
  65. * LSB LAST BLOCK OF SECTOR FLAG.
  66. * 0 = LEAVE CHANNEL ACTIVE AFTER READ/WRITE.
  67. * 1 = DISCONNECT CHANNEL AFTER READ/WRITE.
  68. * UEM ADDR UEM ADDRESS/100B TO READ/WRITE DATA FROM/TO.
  69. * SEC SLAVE ERROR CODE. SET BY SLAVE. CLEARED BY
  70. * MASTER.
  71. * 0 = NO ERROR ENCOUNTERED.
  72. * NON-ZERO = ACTUAL ERROR CODE OF SLAVE ERROR.
  73. * MEF MASTER ERROR FLAG. SET BY MASTER. CLEARED BY
  74. * SLAVE.
  75. * 0 = NO ERROR ENCOUNTERED.
  76. * 1 = MASTER ENCOUNTERED AN ERROR.
  77. * ROC READ OPERATION COMPLETE. ALL DATA TRANSFERRED
  78. * TO UEM. SET AND CLEARED BY SLAVE.
  79. SPACE 4,10
  80. ** MESSAGES.
  81. *
  82. * * 1XM - UNAUTHORIZED CALL.*
  83. * ISSUED TO THE SYSTEM DAYFILE IF *1XM* WAS NOT CALLED FROM
  84. * THE SYSTEM.
  85. SPACE 4,10
  86. *** ERRLOG MESSAGES.
  87. *
  88. * *EQXXX,TKNNNN, MEDIA DEFECT ENCOUNTERED.*
  89. *
  90. * A MEDIA DEFECT HAS BEEN ENCOUNTERED ON EQUIPMENT WITH EST
  91. * ORDINAL ORD, LOGICAL TRACK NNNN. A REQUEST HAS BEEN ISSUED
  92. * TO AUTOMATICALLY FLAW THIS TRACK WHEN IT IS DROPPED.
  93. SPACE 4,10
  94. *** ORGANIZATION OF 7165/895 (MEASUREMENTS IN DECIMAL).
  95. *
  96. * EQUIPMENT TYPE *DC*
  97. *
  98. * PHYSICAL ORGANIZATION:
  99. *
  100. * CM WORDS/PHYSICAL SECTOR 2048
  101. * PHYSICAL SECTORS/PHYSICAL TRACK 3
  102. * PHYSICAL TRACKS/CYLINDER 15
  103. * CYLINDERS/DEVICE 885 * N (0<N<3)
  104. * CM WORDS/DEVICE 79,749,120 * N
  105. *
  106. * LOGICAL ORGANIZATION:
  107. *
  108. * CM WORDS/LOGICAL SECTOR 64
  109. * LOGICAL SECTORS/PHYSICAL SECTOR 32
  110. * LOGICAL SECTORS/LOGICAL TRACK 704 * N
  111. * LOGICAL TRACKS/CYLINDER 2
  112. * LOGICAL TRACKS/DEVICE 1770
  113. *
  114. * MAXIMUM DATA RATE 400.00 K CM WORDS/SECOND
  115. EJECT
  116. *** MASTER - SLAVE CONCEPTS.
  117. *
  118. * THE PHYSICAL SECTOR SIZE OF 32 LOGICAL SECTORS AND A
  119. * 24 MEGABIT MAXIMUM TRANSFER RATE THAT MUST BE ACHIEVED
  120. * WHILE TRANSFERRING DATA THROUGH A PP, HAVE DICTATED THE
  121. * NECESSITY FOR A MASTER(1XM)/SLAVE(2XM) PP SETUP. THE
  122. * MASTER IS INITIATED BY *STL* AT DEADSTART TIME AND THE
  123. * SLAVE IS STARTED UP BY THE MASTER ONCE THE MASTER HAS
  124. * INITIALIZED ITSELF. BOTH PROGRAMS WILL REMAIN IN A PP
  125. * UNTIL THE SYSTEM IS DEADSTARTED, THE CONTROLLER THEY ARE
  126. * FUNCTIONING IS NO LONGER OPERATIONAL, OR THE CHANNEL IS
  127. * GLOBALLY DOWNED.
  128. *
  129. * THE PHYSICAL SECTOR IS TRANSFERRED IN FOUR BLOCKS (6+10+
  130. * 6+10=32). THE MASTER TRANSFERS THE TWO SHORT BLOCKS AND
  131. * THE SLAVE TRANSFERS THE TWO LARGE BLOCKS.
  132. *
  133. * THE MASTER POSTS A REQUEST OR ERROR TO THE SLAVE
  134. * BY SETTING THE CORRESPONDING FIELD IN THE SLAVE-S COMMUNI-
  135. * CATION AREA NON-ZERO, AND THE SLAVE POSTS AN ERROR TO THE
  136. * MASTER BY SETTING THE ERROR CODE FIELD NON-ZERO IN THE
  137. * SLAVE-S COMMUNICATION AREA. THE FOLLOWING STATE CHART
  138. * SHOWS THE POSSIBLE STATES, THE POSSESSOR OF THE LOGICAL
  139. * CHANNEL RESERVE, AND THE STATUS OF THE REQUEST AND ERROR
  140. * CODE FIELDS.
  141. *
  142. * SLAVE MASTER
  143. * STATE CHANNEL REQUEST FIELD ERROR FIELD ERROR FIELD
  144. * --------------------------------------------------------------------
  145. * MASTER IDLE ! ! ! ! !
  146. * SLAVE IDLE ! MASTER ! ZERO ! ZERO ! ZERO !
  147. * --------------------------------------------------------------------
  148. * MASTER BEGIN I/O ! ! ! ! !
  149. * SLAVE IDLE ! MASTER ! NEXT REQUEST ! ZERO ! ZERO !
  150. * --------------------------------------------------------------------
  151. * MASTER TO/FROM UEM ! ! ! ! !
  152. * SLAVE TO/FROM DISK ! SLAVE ! ZERO ! ZERO ! ZERO !
  153. * --------------------------------------------------------------------
  154. * MASTER TO/FROM DISK! ! ! ! !
  155. * SLAVE TO/FROM UEM ! MASTER ! NEXT REQUEST ! ZERO ! ZERO !
  156. * --------------------------------------------------------------------
  157. * MASTER END I/O ! ! ! ! !
  158. * SLAVE TO/FROM DISK ! SLAVE ! ZERO ! ZERO ! ZERO !
  159. * --------------------------------------------------------------------
  160. * MASTER TO/FROM UEM ! ! ! ! !
  161. * SLAVE ERROR ! SLAVE ! ZERO ! ERROR CODE ! ZERO !
  162. * --------------------------------------------------------------------
  163. * MASTER LOG ERROR ! ! ! ! !
  164. * SLAVE IDLE ! MASTER ! ZERO ! ZERO ! ZERO !
  165. * --------------------------------------------------------------------
  166. * MASTER ERROR ! ! ! ! !
  167. * SLAVE WAIT CHANNEL ! MASTER ! ZERO ! ZERO !ERROR FLAG!
  168. * --------------------------------------------------------------------
  169. * MASTER WAIT CHANNEL! ! ! ! !
  170. * SLAVE CLEAR ERROR ! SLAVE ! ZERO ! ZERO ! ZERO !
  171. * --------------------------------------------------------------------
  172. EJECT
  173. *** SPECIAL PROGRAMMING NOTES.
  174. *
  175. * THE FOLLOWING IS A LIST OF SPECIAL NOTES THAT SHOULD BE
  176. * READ AND UNDERSTOOD BEFORE ANY MODIFICATIONS ARE MADE TO
  177. * THIS PROGRAM.
  178. *
  179. *
  180. * 1) *1XM*, *1XY* AND *1HP* ARE VERY SIMILAR IN DESIGN. MOST
  181. * FIXES APPLIED TO ONE OF THESE DRIVERS WILL ALSO APPLY TO
  182. * THE OTHERS.
  183. *
  184. * 2) WHERE POSSIBLE, *CMR* POINTERS HAVE BEEN PLUGGED BY THE
  185. * PRESET ROUTINE TO IMPROVE THE EXECUTION SPEED OF THE
  186. * PROGRAM AND TO MINIMIZE THE AMOUNT OF CODE.
  187. *
  188. * 3) *1XM* ASSUMES THAT ONLY 70 MICROSECONDS CAN BE USED
  189. * TO PERFORM ALL THE CHANNEL PASSING (FROM THE TIME THE
  190. * READ/WRITE FUNCTION IS ISSUED UNTIL THE LAST PART OF THE
  191. * SECTOR IS BEING READ/WRITTEN).
  192. *
  193. * 4) THIS DRIVER ALSO ASSUMES THAT THE TRANSFER RATE TO/FROM
  194. * CENTRAL MEMORY IS TWICE AS FAST AS THE TRANSFER RATE
  195. * TO/FROM THE *CCC*. USING THIS ASSUMPTION THE MASTER HAS
  196. * APPROXIMATELY 500 MICROSECONDS (ON A 4XPP) TO PERFORM
  197. * ITS INNER BLOCK FUNCTIONS.
  198. *
  199. * 5) THE DRIVER HAS APPROXIMATELY 70 MICROSECONDS TO
  200. * PERFORM THE NECESSARY INTER-SECTOR CALCULATIONS.
  201. * THE INTER-SECTOR GAP IS THE TIME FROM WHEN THE SLAVE
  202. * COMPLETES THE READ/WRITE FROM/TO DISK UNTIL THE
  203. * MASTER ISSUES THE NEXT READ/WRITE FUNCTION.
  204. * (ON PHYSICAL TRACK SWITCHES THE DRIVER HAS 300
  205. * MICROSECONDS).
  206. *
  207. * 6) THE SLAVE MUST CHECK FOR A REQUEST EVERY 60 MICROSECONDS
  208. * TO MAKE SURE IT HAS TIME TO READ FROM UEM IN THE CASE
  209. * OF A WRITE TO DISK.
  210. *
  211. * 7) ALTHOUGH CODE CAN BE ADDED WITHOUT EXCEEDING A TIMING
  212. * THRESHOLD, ONE SHOULD NOTE THAT THE CODE COULD AFFECT
  213. * *1XM-S* TOLERANCE FOR CENTRAL MEMORY CONFLICTS.
  214. *
  215. * 8) BECAUSE *1XM* ISSUES ALL *BIOM* COMPLETION REQUESTS
  216. * WITHOUT WAITING FOR FUNCTION COMPLETION, THE *MONITOR*
  217. * MACRO HAS BEEN REDEFINED TO ENSURE THERE IS NO PENDING
  218. * MONITOR REQUEST AT THE TIME ANOTHER IS ABOUT TO BE
  219. * ISSUED.
  220. EJECT
  221.  
  222. * COMMON DECKS.
  223.  
  224.  
  225. *CALL COMPMAC
  226. RICHI$ EQU 1 SELECT DEFERRED INSTRUCTION MODIFICATION
  227. *CALL COMPCHI
  228. *CALL COMSCPS
  229. *CALL COMSDFS
  230. LIST X
  231. *CALL COMSHIO
  232. LIST *
  233. *CALL COMSLSD
  234. *CALL COMSMSC
  235. LIST X
  236. *CALL COMSMSP
  237. LIST *
  238. *CALL COMSPIM
  239. *CALL COMS1DS
  240. TITLE CONSTANTS, DEFINITIONS, AND MACROS.
  241. 1XM SPACE 4,10
  242. **** DIRECT CELL ASSIGNMENTS.
  243.  
  244.  
  245. BS EQU 15 BLOCK SIZE FOR DATA TRANSFER
  246. RS EQU 16 ERROR RECOVERY STATUS
  247. ER EQU 17 ERROR RECOVERY IN PROGRESS
  248. CC EQU 20 COMPLETION COUNT
  249. S1 EQU 21 SCRATCH
  250. EC EQU 22 ERROR CODE
  251. RW EQU 23 READ/WRITE FLAG
  252. IL EQU 24 *PUT* INTERLOCK FLAG
  253. SR EQU 25 - 31 SLAVE REQUEST (5 CELLS)
  254. WB EQU SR - SR+4 FOR *COMPIMB* COMPATIBILITY
  255. BL EQU 32 DATA BLOCK LENGTH
  256. CN EQU 33 - 37 SCRATCH (5 CELLS)
  257. SB EQU 40 SLAVE BUFFER ADDRESS
  258. FU EQU 41 - 42 UEM FWA (2 CELLS)
  259. UA EQU 43 - 44 UEM ADDRESS (2 CELLS)
  260. EP EQU 45 ERROR ON PREVIOUS SECTOR
  261. CS EQU 46 CHANNEL STATUS
  262. NB EQU 47 NEXT BUFFER ORDINAL
  263. PB EQU 50 PREVIOUS BUFFER ORDINAL
  264. CB EQU 51 CURRENT BUFFER ORDINAL
  265. TB EQU 52 TOTAL CBT COUNT
  266. GS EQU 53 GENERAL STATUS
  267. * EQU 54 CHANNEL NUMBER (FROM INPUT REGISTER)
  268. TI EQU 57 *TPOR* INDEX
  269. CA EQU 60 - 64 CURRENT PHYSICAL ADDRESS (5 CELLS)
  270. RC EQU 65 RETRY COUNT
  271. PO EQU 66 CURRENT *PUT* ORDINAL
  272. S2 EQU 67 SCRATCH
  273. 1XM SPACE 4,10
  274. ** DRIVER FUNCTION CODES.
  275.  
  276.  
  277. FCSK EQU 1 SEEK 1 TO 1 INTERLACE
  278. FCRD EQU 4 READ
  279. FCWR EQU 5 WRITE
  280. FCOC EQU 10 OPERATION COMPLETE
  281. FCGS EQU 12 GENERAL STATUS
  282. FCCO EQU 14 CONTINUE
  283. FCDS EQU 23 DETAILED STATUS
  284. FCAL EQU 414 AUTOLOAD
  285. 1XM SPACE 4,10
  286. SPACE 4,15
  287. ** DETAILED STATUS CONSTANTS.
  288.  
  289.  
  290. SB0 EQU 0 SENSE BYTE 0
  291. SB7 EQU 4 SENSE BYTE 7 STATUS WORD OFFSET
  292. DCF EQU 1 DEVICE CHECK FORMAT
  293. FM6 EQU 6 FORMAT 6 MESSAGE
  294. SPACE 4,15
  295. ** ASSEMBLY CONSTANTS.
  296.  
  297.  
  298. BFRL EQU 10 *EMB* FLUSH RETRY LIMIT
  299. CH EQU 0 MASS STORAGE CHANNEL
  300. FCSKL EQU 4 SEEK PARAMETER WORD COUNT
  301. HLEN EQU 4*5 LENGTH OF SECTOR HEADER
  302. MAXU EQU 64D MAXIMUM NUMBER OF UNITS PER CHANNEL
  303. MFRL EQU 10 MONITOR FUNCTION RETRY LIMIT
  304. MPRU EQU 6 NUMBER OF PRUS TRANSFERRED BY MASTER
  305. MMXN EQU 10D MAXIMUM NUMBER OF EXCHANGE RETRIES
  306. DLEN EQU MPRU*100*5 LENGTH OF DATA TRANSFERRED BY MASTER
  307. PCRL EQU 10 PP CALL RETRY LIMIT
  308. PSLT EQU 26 PHYSICAL SECTORS PER LOGICAL TRACK
  309. PSPT EQU 3 PHYSICAL SECTORS PER PHYSICAL TRACK
  310. SBME EQU 2 MASTER ERROR WORD IN SLAVE REQUEST BUFFER
  311. SBRC EQU 3 READ COMPLETE WORD IN SLAVE REQUEST BUFFER
  312. SBRQ EQU 0 REQUEST WORD IN SLAVE REQUEST BUFFER
  313. SBSE EQU 1 SLAVE ERROR WORD IN SLAVE REQUEST BUFFER
  314. SDLY EQU 50D SLAVE DELAY TIME (APPROX. 25 MICS)
  315. SDRP EQU 3 SLAVE REQUEST TO DROP
  316. SLRD EQU 1 SLAVE REQUEST TO READ
  317. SLWR EQU 2 SLAVE REQUEST TO WRITE
  318. SPRU EQU 12 PRUS TRANSFERRED BY SLAVE
  319. SSIZ EQU 1000 SECTOR SIZE FLAG FOR SEEK
  320. TPORE EQU 1 LENGTH OF *TPOR* ENTRY
  321. ****
  322. SPACE 4,20
  323. ** MACROS.
  324. TBLM SPACE 4,10
  325. ** TBLM - CREATE TABLE ENTRY MACRO.
  326. *
  327. *NAM TBLM
  328. *
  329. * ENTRY NAM = TABLE NAME.
  330. *
  331. * EXIT NAM_E MACRO DEFINED.
  332.  
  333.  
  334. PURGMAC TBLM
  335.  
  336. MACRO TBLM,NAM
  337. PURGMAC NAM_E
  338. NAM_E MACRO ADDR
  339. LOCAL A
  340. MACREF NAM_E
  341. NOREF A
  342. A EQU ADDR
  343. T_NAM RMT
  344. CON A
  345. RMT
  346. TBLM ENDM
  347. CBTE SPACE 4,10
  348. ** CBTE - CONTROL BUFFER TABLE ENTRY.
  349. *
  350. * THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TCBT*
  351. * THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH
  352. * REQUIRES THE FWA OF THE CONTROL BUFFER TABLE.
  353. *
  354. * CBTE ADDR
  355. *
  356. * ENTRY (ADDR) = ADDRESS OF INSTRUCTION.
  357. *
  358. * EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TCBT*.
  359.  
  360.  
  361. CBT TBLM
  362. CCBA SPACE 4,15
  363. ** CCBA - COMPUTE *CBT* ENTRY ADDRESS.
  364. *
  365. * THIS MACRO SETS (A) TO THE REQUESTED *CBT* ENTRY ADDRESS.
  366. *
  367. * CCBA W,A
  368. *
  369. * *W* - OPTIONAL WORD OFFSET TO BE ADDED TO ADDRESS.
  370. * *A* - IF NON-BLANK, BUFFER ORDINAL IS IN ACCUMULATOR.
  371. *
  372. * ENTRY (A) = BUFFER ORDINAL IF *A* PARAMETER IS NON-BLANK.
  373. * (CB) = CURRENT BUFFER ORDINAL.
  374. *
  375. * EXIT (A) = *CBT* ENTRY ADDRESS + WORD OFFSET.
  376.  
  377.  
  378. PURGMAC CCBA
  379.  
  380. CCBA MACRO W,A
  381. MACREF CCBA
  382. IFC EQ,$A$$,1
  383. LDD CB
  384. SHN CBTLS
  385. CBTE *
  386. ADC W
  387. CCBA ENDM
  388. PUTE SPACE 4,10
  389. ** PUTE - PHYSICAL UNIT TABLE ENTRY.
  390. *
  391. * THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TPUT*
  392. * THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH
  393. * REQUIRES THE FWA OF THE PHYSICAL UNIT TABLE.
  394. *
  395. * PUTE ADDR
  396. *
  397. * ENTRY (ADDR) = ADDRESS OF INSTRUCTION.
  398. *
  399. * EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TPUT*.
  400.  
  401.  
  402. PUT TBLM
  403. CPTA SPACE 4,10
  404. ** CPTA - COMPUTE *PUT* ENTRY ADDRESS.
  405. *
  406. * THIS MACRO SETS (A) TO THE REQUESTED *PUT* ENTRY ADDRESS.
  407. *
  408. * CPTA W,A
  409. *
  410. * *W* - OPTIONAL WORD OFFSET TO BE ADDED TO ADDRESS.
  411. * *A* - IF NON-BLANK, *PUT* ORDINAL IS IN ACCUMULATOR.
  412. *
  413. * ENTRY (A) = *PUT* ORDINAL IF *A* PARAMETER IS NON-BLANK.
  414. * (PO) = *PUT* ORDINAL.
  415. *
  416. * EXIT (A) = *PUT* ENTRY ADDRESS + WORD OFFSET.
  417.  
  418.  
  419. PURGMAC CPTA
  420.  
  421. CPTA MACRO W,A
  422. MACREF CPTA
  423. IFC EQ,$A$$,1
  424. LDD PO
  425. SHN PUTLS
  426. PUTE *
  427. ADC W
  428. CPTA ENDM
  429. EMBE SPACE 4,10
  430. ** EMBE - ERROR MESSAGE TABLE ENTRY.
  431. *
  432. * THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TEMB*
  433. * THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH
  434. * REQUIRES THE FWA OF THE ERROR MESSAGE TABLE.
  435. *
  436. * EMBE ADDR
  437. *
  438. * ENTRY (ADDR) = ADDRESS OF INSTRUCTION.
  439. *
  440. * EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TEMB*.
  441.  
  442.  
  443. EMB TBLM
  444. MONITOR SPACE 4,15
  445. ** MONITOR - ISSUE MONITOR FUNCTION.
  446. *
  447. * THIS MACRO PROVIDES FUNCTIONALITY IDENTICAL TO THAT OF THE
  448. * *MONITOR* MACRO DEFINED IN *COMPMAC*, WHILE ENSURING ANY
  449. * PENDING *BIOM* MONITOR FUNCTION IS COMPLETED BEFORE THE NEXT
  450. * MONITOR FUNCTION IS ISSUED.
  451. *
  452. * MONITOR F
  453. *
  454. * *F* - MONITOR FUNCTION CODE.
  455. *
  456. * EXIT (A) = 0.
  457. * (CM - CM+4) = COMPLETED PP OUTPUT REGISTER IMAGE.
  458. *
  459. * CALLS IMF.
  460.  
  461.  
  462. PURGMAC MONITOR
  463.  
  464. MONITOR MACRO F
  465. MACREF MONITOR
  466. LDK F
  467. RJM IMF
  468. MONITOR ENDM
  469. 1XM SPACE 4
  470. RICHI REDEFINE CHANNEL INSTRUCTIONS
  471. TITLE MASTER DRIVER.
  472. ** MXM - 895 DRIVER.
  473.  
  474.  
  475. ORG MSFW+5
  476. MXM RJM PRS PRESET
  477. MXM SPACE 4
  478. ** MST - MASTER MAIN PROGRAM.
  479.  
  480.  
  481. MST RJM CCR CHECK FOR CHANNEL REQUESTED/DOWN
  482. MJN MST1 IF CHANNEL GLOBALLY DOWN
  483. RJM SUQ SCAN UNIT QUEUE
  484. ZJN MST IF NO ELIGIBLE ENTRY FOUND
  485. RJM ISF ISSUE SEEK FUNCTION
  486. NJN MST IF UNIT NOT ON CYLINDER
  487. RJM PDT PERFORM DATA TRANSFER
  488. UJN MST LOOP
  489.  
  490. MST1 RJM DCH RELEASE CHANNEL
  491. MONITOR DPPM DROP PP
  492. LJM PPR ENTER IDLE LOOP
  493. TPOR SPACE 4,10
  494. ** TPOR - TABLE OF *PUT* ORDINALS.
  495. *
  496. * THIS TABLE CONTAINS THE ORDINALS OF THE *PUT* ENTRIES FOR ALL
  497. * UNITS ACCESSED BY THIS DRIVER-S CHANNEL.
  498. *
  499. * ENTRY = 1 WORD.
  500. *
  501. *T 11/ PUT ,1/I
  502. * PUT *PUT* ORDINAL OF DEVICE.
  503. * I EST CHANNEL BYTE INDEX.
  504. *
  505. * TABLE IS TERMINATED BY A ZERO BYTE.
  506.  
  507.  
  508. TPOR BSSZ TPORE*MAXU
  509. CON 0 TERMINATE *TPOR* TABLE
  510. AUA SPACE 4,15
  511. ** AUA - ADVANCE UEM ADDRESS.
  512. *
  513. * ENTRY (BS) = LENGTH OF DATA BLOCK AND HEADER.
  514. * (RW) = READ/WRITE FLAG.
  515. * (SR+3 - SR+4) = CURRENT UEM ADDRESS FOR SLAVE.
  516. * (UA - UA+1) = CURRENT UEM ADDRESS FOR MASTER.
  517. *
  518. * EXIT (BS) = LENGTH OF DATA BLOCK WITHOUT HEADER.
  519. * (SR+3 - SR+4) = UEM ADDRESS FOR NEXT PART OF SECTOR
  520. * FOR USE BY SLAVE.
  521. * (UA - UA+1) = UEM ADDRESS FOR NEXT PART OF SECTOR FOR
  522. * USE BY MASTER.
  523. *
  524.  
  525. * USES BS, T1, SR+3 - SR+4, UA - UA+1.
  526.  
  527.  
  528. AUA SUBR ENTRY/EXIT
  529. LDK SPRU+MPRU ADVANCE MASTER UEM ADDRESS
  530. RAD UA+1
  531. SHN -14
  532. RAD UA
  533. LDK MPRU ADVANCE SLAVE UEM ADDRESS
  534. ADD UA+1
  535. STD SR+4
  536. SHN -14
  537. ADD UA
  538. STD SR+3
  539. LCN HLEN EXCLUDE HEADER FROM BLOCK LENGTH
  540. RAD BS
  541. LDM AUAA,RW ADJUST BUFFER ADDRESS
  542. STD T1
  543. LDN HLEN
  544. RAI T1
  545. UJN AUAX RETURN
  546.  
  547. AUAA CON RIOB
  548. CON WIOB
  549. CCR SPACE 4,20
  550. ** CCR - CHECK FOR CHANNEL REQUESTED OR DOWN.
  551. *
  552. * THIS ROUTINE CHECKS TO SEE IF THE CHANNEL TO WHICH THIS PP IS
  553. * DEDICATED IS BEING REQUESTED BY ANOTHER PP OR IS GLOBALLY
  554. * DOWN. IF THE CHANNEL IS REQUESTED BY ANOTHER PP, IT WILL BE
  555. * RELEASED AND WILL BE REQUESTED AGAIN FOLLOWING A ONE SECOND
  556. * DELAY. IF THE CHANNEL IS GLOBALLY DOWN, THE DRIVER DROP FLAG
  557. * WILL BE SET IN THE CONTROLWARE TABLE AND THE CHANNEL WILL BE
  558. * RELEASED.
  559. *
  560. * ENTRY (SB) = SLAVE MESSAGE BUFFER ADDRESS.
  561. *
  562. * EXIT (A) .LT. 0 IF CHANNEL IS GLOBALLY DOWN.
  563. *
  564. * USES SR, CM - CM+4.
  565. *
  566. * CALLS DCH, RCH, SCD.
  567. *
  568. * MACROS DELAY.
  569.  
  570.  
  571. CCR2 RJM SCD SET DRIVER DROP FLAG
  572. LDN 3 ISSUE DROP REQUEST TO SLAVE
  573. STD SR
  574. LDD SB
  575. ADK SBRQ
  576. CWD SR
  577. LCN 0 SET DROPOUT REPLY
  578.  
  579. CCR SUBR ENTRY/EXIT
  580. LDC ** READ CHANNEL TABLE
  581. CCRA EQU *-1 (CM ADDRESS OF ENTRY)
  582. CRD CM
  583. LDD CM+** CHECK REQUESTED FLAG
  584. CCRB EQU *-1 (BYTE ADDRESS OF ENTRY)
  585. SHN 21-5
  586. MJN CCR2 IF CHANNEL IS GLOBALLY DOWN
  587. SHN 22+5-13
  588. PJN CCRX IF CHANNEL NOT REQUESTED
  589. RJM DCH RELEASE CHANNEL
  590. CCR1 DELAY
  591. RJM RCH REQUEST CHANNEL
  592. ZJN CCR1 IF CHANNEL NOT ASSIGNED
  593. UJN CCRX RETURN
  594. CCS SPACE 4,15
  595. ** CCS - CHECK FOR CONSECUTIVE SECTOR REQUEST.
  596. *
  597. * THIS ROUTINE CHECKS THE NEXT BUFFER IN THE I/O QUEUE TO
  598. * DETERMINE IF IT IS CONSECUTIVE WITH THE REQUEST CURRENTLY
  599. * BEING PROCESSED.
  600. *
  601. * ENTRY (CB) = CURRENT BUFFER ORDINAL.
  602. * (NB) = NEXT BUFFER ORDINAL IF CONSECUTIVE REQUEST
  603. * ALREADY FOUND.
  604. * (RW) = READ/WRITE FLAG.
  605. * (TB) = TOTAL BUFFER COUNT.
  606. *
  607. * EXIT (NB) = NEXT BUFFER ORDINAL.
  608. * = 0 IF CONSECUTIVE TRANSFER NOT POSSIBLE.
  609. * (TB) = TOTAL BUFFER COUNT.
  610. *
  611. * USES NB, TB, CM - CM+4, CN - CN+4, TO - TO+4.
  612. *
  613. * MACROS CCBA.
  614.  
  615.  
  616. CCS3 LDN 0 INDICATE NO CONSECUTIVE REQUEST
  617. STD NB
  618.  
  619. CCS SUBR ENTRY/EXIT
  620. LDD NB
  621. NJN CCSX IF NEXT REQUEST ALREADY FOUND
  622. CCBA PAD4 READ CURRENT *CBT* ENTRY
  623. CRD CM
  624. ADK IOLK-PAD4
  625. CRD CN
  626. LDD CN+2 NEXT BUFFER ORDINAL
  627. ZJN CCSX IF THIS BUFFER IS LAST IN QUEUE
  628. STD NB STORE NEW CURRENT BUFFER ORDINAL
  629. CCBA PAD1,A GET DISK ADDRESS FOR THIS BUFFER
  630. CRD CN
  631. ADK IOLK-PAD1 GET WRITE FLAG
  632. CRD T0
  633. LDD T0
  634. SHN 0-11
  635. LPN 1
  636. LMD RW
  637. NJN CCS3 IF TRANSFER NOT IN SAME DIRECTION
  638. LDD CM+1
  639. LMD CN+1
  640. CCS1 NJN CCS3 IF NO CYLINDER MATCH
  641. LDD CM+2
  642. ADN 1
  643. LMD CN+2
  644. ZJN CCS2 IF CONSECUTIVE SECTOR NOT ON SAME TRACK
  645. LDD CM+2
  646. ADD HN
  647. SCN 77
  648. LMD CN+2
  649. NJN CCS1 IF NOT FIRST SECTOR OF CONSECUTIVE TRACK
  650. LDD CM+2
  651. LPN 77
  652. LMN PSPT-1
  653. NJN CCS1 IF CONSECUTIVE REQUEST
  654. CCS2 AOD TB INCREMENT TOTAL BUFFER COUNT
  655. LJM CCSX RETURN
  656. CDS SPACE 4,20
  657. ** CDS - CRACK DETAILED STATUS.
  658. *
  659. * THIS ROUTINE DETERMINES WHAT ERROR CODE TO SET BY EXAMINING
  660. * DETAILED STATUS.
  661. *
  662. * ENTRY (GS) = GENERAL STATUS.
  663. * (RW) = READ/WRITE FLAG.
  664. *
  665. * USES EC, RS, T1.
  666. *
  667. * CALLS FNC, GDS, GGS.
  668.  
  669.  
  670. CDS SUBR ENTRY/EXIT
  671. RJM GDS GET DETAILED STATUS
  672. MJN CDSX IF ERROR
  673. LDD GS
  674. SHN 21-10
  675. PJN CDS1 IF ERROR NOT RECOVERABLE BY SUBSYSTEM
  676. LDM CDSA,RW PREPARE FOR *CONTINUE* SEQUENCE
  677. STD T1
  678. LDC LDNI+FCCO
  679. STI T1
  680. LCN 1 INDICATE CONTROLLER RECOVERY IN PROGRESS
  681. STD RS
  682. UJN CDS1.1 SET STATUS ERROR CODE
  683.  
  684. CDS1 SHN 10-13+22
  685. MJN CDS2 IF ABNORMAL TERMINATION
  686. LDD EC
  687. NJN CDSX IF ERROR CODE ALREADY SET
  688. CDS1.1 UJN CDS4 SET STATUS ERROR CODE
  689.  
  690. * CHECK FOR *NOT READY* CONDITION.
  691.  
  692. CDS2 SHN 13-4
  693. PJN CDS3 IF NOT *NOT READY*
  694. LDM DST+SB0
  695. SHN 0-12
  696. LPN 1
  697. LMN 1
  698. ZJN CDS5 IF DRIVE NOT READY
  699.  
  700. * CHECK FOR STATISTICAL MESSAGE. THIS IS NOT A TRUE ERROR
  701. * CONDITION.
  702.  
  703. LDM DST+SB7
  704. LPN 17
  705. LMN FM6
  706. ZJN CDS5.1 IF FORMAT 6 MESSAGE
  707.  
  708. * CHECK FOR MEDIA ERROR.
  709.  
  710. CDS3 LDM DST
  711. LPC 210
  712. LMC 210
  713. ZJN CDS6 IF MEDIA ERROR
  714. LDM DST+21
  715. SHN 21-6
  716. MJN CDS8 IF CHANNEL PARITY ERROR ON OUTPUT
  717. SHN 6-2
  718. MJN CDS9 IF DATA TRANSFER ERROR
  719. SHN 2-21+22
  720. LPN 50
  721. NJN CDS10 IF ADAPTOR MEMORY PARITY ERROR
  722. CDS4 LDK DSTE&NRDE
  723. CDS5 LMK NRDE&STAE
  724. CDS5.1 LMK STAE&PARE
  725. CDS6 LMK PARE
  726. CDS7 STD EC
  727. LJM CDSX RETURN
  728.  
  729. CDS8 LDN CHPE SET *CHANNEL PARITY* ERROR CODE
  730. UJN CDS7 SET ERROR CODE
  731.  
  732. CDS9 LDN IDTE SET *DATA TRANSFER* ERROR CODE
  733. UJN CDS7 SET ERROR CODE
  734.  
  735. CDS10 LDN RAME SET *CONTROLLER MEMORY* ERROR CODE
  736. UJN CDS7 SET ERROR CODE
  737.  
  738.  
  739. CDSA BSS 0
  740. CON RIOA
  741. CON WIOA
  742. CRL SPACE 4,15
  743. ** CRL - CHECK FOR ERROR RETRY LIMIT REACHED.
  744. *
  745. * ENTRY (EC) = ERROR CODE.
  746. * (ER) = *RECOVERY IN PROGRESS* FLAG.
  747. * (RC) = RETRY COUNT.
  748. * (T5) = EST ORDINAL.
  749. *
  750. * EXIT (A) .GE. 0 IF RETRY LIMIT REACHED.
  751. * .LT. 0 IF NOT AT RETRY LIMIT.
  752. * (RC) INCREMENTED.
  753. * MESSAGE ISSUED TO *MS2W* OF SYSTEM CONTROL POINT FOR
  754. * B-DISPLAY PRESENTATION IF HALF WAY TO RETRY LIMIT.
  755. *
  756. * USES RC.
  757. *
  758. * CALLS C2D.
  759.  
  760.  
  761. CRL SUBR ENTRY/EXIT
  762. LDD ER
  763. LMC SHNI+1
  764. STM CRLA
  765. AOD RC INCREMENT RETRY COUNT
  766. LDM TREC,EC
  767. SHN -1
  768. SBD RC
  769. PJN CRL1 IF TOO EARLY TO NOTIFY OPERATOR
  770. LDD T5 STORE EST ORDINAL IN MESSAGE
  771. SHN -3
  772. RJM C2D
  773. STM CRLB+1
  774. LDD T5
  775. LPN 7
  776. SHN 6
  777. ADC 2R0
  778. STM CRLB+2
  779. LDM TMNE,EC STORE ERROR MNEMONIC IN MESSAGE
  780. STM CRLB+3
  781. LDD CP
  782. ADK MS2W
  783. CWM CRLB,TR
  784. CRL1 LDD RC
  785.  
  786. * IF *RECOVERY IN PROGRESS* IS NOT SET, THE RETRY COUNT IS
  787. * SHIFTED SO THAT THE LIMIT CHECK IS MADE AGAINST N/2 (WHERE N
  788. * IS THE RETRY LIMIT FOR THE ERROR TYPE IN CELL *EC*). THIS
  789. * CAUSES HALF OF THE RETRY ATTEMPTS TO BE PERFORMED ON EACH
  790. * CHANNEL, IF AN ALTERNATE ACCESS IS AVAILABLE. IF NO
  791. * ALTERNATE ACCESS IS AVAILABLE, ALL RETRIES WILL BE PERFORMED
  792. * ON THIS CHANNEL.
  793.  
  794. SHN 0
  795. * SHN 1 (RECOVERY NOT IN PROGRESS)
  796. CRLA EQU *-1
  797. SBM TREC,EC
  798. SBN 2
  799. UJP CRLX RETURN
  800.  
  801.  
  802. CRLB DATA C*EQ000 XX ERROR RETRY UNDERWAY.*
  803. CRQ SPACE 4,20
  804. ** CRQ - CHECK REQUEST QUEUE.
  805. *
  806. * THIS ROUTINE ATTEMPTS TO CALL *CPUMTR* TO COMPLETE REQUESTS
  807. * IN THE UNIT QUEUE THAT HAVE ALREADY BEEN PROCESSED.
  808. *
  809. * ENTRY (CC) = COMPLETION REQUEST COUNT.
  810. * (PO) = *PUT* ORDINAL.
  811. *
  812. * EXIT (A) .EQ. 0 IF NO REQUESTS PRESENT.
  813. * .NE. 0 IF *CPUMTR* IS STILL BUSY WITH PREVIOUS
  814. * FUNCTION OR AN EXCHANGE WAS JUST ISSUED
  815. * FOR THE CURRENT FUNCTION.
  816. *
  817. * USES CC, CN - CN+4, T0 - T4.
  818.  
  819.  
  820. CRQ SUBR ENTRY/EXIT
  821. LDC ** READ XP
  822. CRQA EQU *-1 FWA OF XP
  823. CRD T0
  824. LDD OA READ OUTPUT REGISTER
  825. CRD CN
  826. LDD T0+4 (B0)
  827. NJN CRQ1 IF MISSED EXCHANGE
  828. STD CN+3
  829. LDD CN
  830. SHN 21-13
  831. MJN CRQ1 IF REISSUE REQUIRED
  832. NJN CRQX IF FUNCTION BEING PROCESSED
  833. LDD CC
  834. ZJN CRQX IF NO PENDING COMPLETION REQUESTS
  835. LDC **
  836. CRQE EQU *-1
  837. CRD T0
  838. LDD T0
  839. ADD T0+1
  840. NJN CRQX IF FUNCTION IN PROGRESS
  841. LDN DCBS SET *BIOM* SUBFUNCTION
  842. STD CN+1
  843. LDD PO
  844. STD CN+2
  845. CRQ1 LDD CC
  846. RAD CN+3
  847. LDN 0
  848. STD CC
  849. LDK BIOM
  850. STD CN
  851. LDD OA
  852. CWD CN
  853. LDC **
  854. CRQB EQU *-1 ADDRESS OF EXCHANGE PACKAGE
  855. CWM CRQD,ON WRITE FIRST WORD
  856. SBN 1 SET EXCHANGE ADDRESS
  857. MXN 0 EXCHANGE CPU
  858. CRQC EQU *-1 CPU NUMBER
  859. UJP CRQX RETURN
  860.  
  861.  
  862. CRQD VFD 24/0 (P)
  863. VFD 18/0 (A0)
  864. VFD 18/0 (B0)
  865. DCH SPACE 4,15
  866. ** DCH - RELEASE CHANNEL.
  867. *
  868. * THIS ROUTINE RELEASES THE CHANNEL IF IT IS CURRENTLY
  869. * RESERVED.
  870. *
  871. * ENTRY (CS) = CHANNEL RESERVATION STATUS.
  872. * (IR+4) = CHANNEL NUMBER.
  873. *
  874. * EXIT (A) = (CS) = 0.
  875. *
  876. * USES CM+1, CS.
  877. *
  878. * MACROS MONITOR.
  879.  
  880.  
  881. DCH SUBR ENTRY/EXIT
  882. LDD CS
  883. LPN 1
  884. ZJN DCHX IF CHANNEL NOT RESERVED
  885. LDD IR+4 RELEASE CHANNEL
  886. STD CM+1
  887. MONITOR DCHM
  888. SOD CS CLEAR CHANNEL RESERVATION FLAG
  889. UJN DCHX RETURN
  890. ERR SPACE 4,20
  891. ** ERR - PROCESS ERROR.
  892. *
  893. * THIS ROUTINE IS CALLED TO PERFORM ALL ERROR PROCESSING.
  894. *
  895. * ENTRY (EC) = 0 IF THIS IS THE FIRST RETRY OF A RECOVERY
  896. * SEQUENCE AND THE CALLER DID NOT SET THE ERROR
  897. * CODE.
  898. * = ERROR CODE IF NOT THE FIRST RETRY OF A RECOVERY
  899. * SEQUENCE AND NOT A CALLER SPECIFIED ERROR CODE.
  900. * = COMPLEMENT OF ERROR CODE IF SPECIFIED BY THE
  901. * CALLER.
  902. * (RC) = RETRY COUNT.
  903. *
  904. * EXIT (EC) = 0.
  905. * (RC) = 0.
  906. * TO *MST*.
  907. *
  908. * USES EC, RC, RS, T1.
  909. *
  910. * CALLS CDS, CRL, CRQ, GGS, IBM, IIC, ISF, PDT, PFR,
  911. * PRE, RLC, SSF, TEP.
  912.  
  913.  
  914. ERR SUBR ENTRY
  915. ERR1 RJM PRE PRESET ERROR PROCESSOR
  916. NJP ERR11 IF INTERLOCK/VERIFICATION FAILURE
  917. RJM GGS GET GENERAL STATUS
  918. MJN ERR1.1 IF GENERAL STATUS UNAVAILABLE
  919. RJM CDS CHECK DETAILED STATUS
  920. ERR1.1 LDD RC
  921. ZJN ERR1.2 IF FIRST RETRY
  922. LDD ER
  923. ZJN ERR2 IF NOT RECOVERY IN PROGRESS
  924. AOM ERRA
  925. LMN 2
  926. NJN ERR2 IF NOT FIRST *ERR* CALL
  927. ERR1.2 LDD GS
  928. STM BMLGS
  929. ERR2 LCN 0
  930. LMD EC
  931. STD EC
  932. SHN 21-13
  933. MJN ERR2 IF COMPLEMENTED ERROR CODE
  934. LDD TH FORCE IMMEDIATE COMPLETION
  935. ERRNZ SHNI-1000 CODE DEPENDS ON VALUE
  936. STM IICA
  937. RJM IIC ISSUE I/O COMPLETION REQUEST
  938. ERR4.1 RJM CRQ ENSURE COMPLETION OF PENDING REQUEST
  939. NJN ERR4.1 IF FUNCTION STILL PENDING
  940. RJM IBM ISSUE BML MESSAGE IF NECESSARY
  941. AOD RS INCREMENT RECOVERY STATUS
  942. SHN 21-13
  943. MJN ERR10 IF *CCC* ERROR RECOVERY IN PROGRESS
  944.  
  945. * SET THE SUSPECT FLAG IF APPROPRIATE FOR THIS ERROR TYPE.
  946.  
  947. LDK STAE
  948. LMD EC
  949. ZJN ERR7 IF STATISTICAL DATA (NOT AN ERROR)
  950. RJM SSF SET SUSPECT FLAG (IF APPROPRIATE)
  951. RJM CRL CHECK FOR RETRY LIMIT REACHED
  952. MJN ERR7 IF RETRY LIMIT NOT REACHED
  953. SOD RC ADJUST FINAL RETRY COUNT
  954. ERR6 AOD RS SET RECOVERY STATUS
  955. UJN ERR11 TERMINATE ERROR PROCESSING
  956.  
  957. * CHECK FOR CONTROLWARE RELOAD.
  958.  
  959. ERR7 RJM RHR RELEASE HARDWARE RESERVE
  960. RJM RLC LOAD CONTROLWARE IF NECESSARY
  961.  
  962. * RETRY I/O SEQUENCE.
  963.  
  964. ERR9 RJM ISF ISSUE SEEK FUNCTION
  965. ZJN ERR10 IF ON CYLINDER AND NO ERROR
  966. LDD GS
  967. LMN 2
  968. ZJN ERR9 IF POSITIONER BUSY
  969. UJP ERR1 RESTART ERROR PROCESSING
  970.  
  971. ERR10 RJM PFR PREPARE FOR RETRY ATTEMPT
  972. RJM PDT PERFORM READ/WRITE OPERATION
  973.  
  974. * CONTROL RETURNS TO THIS POINT ONLY IF THE ERROR WAS
  975. * RECOVERED.
  976.  
  977. ERR11 AOD RS SET RECOVERY STATUS
  978. SHN 6
  979. RAD RC ADJUST FOR CONTROLLER RECOVERY
  980.  
  981. * TERMINATE ERROR PROCESSING. INSTRUCTIONS MODIFIED FOR ERROR
  982. * PROCESSING WILL BE RESTORED TO THEIR ORIGINAL VALUES, VARIOUS
  983. * DATA CELLS WILL BE RESTORED TO THEIR INITIAL STATES, ETC.
  984.  
  985. RJM TEP TERMINATE ERROR PROCESSING
  986. LJM MST EXIT ERROR PROCESSOR
  987.  
  988.  
  989. ERRA CON 0 RECOVERY PASS COUNTER
  990. TEPF SPACE 4,30
  991. ** TEPF - TABLE OF ERROR PROCESSING FLAGS.
  992. *
  993. * THIS TABLE CONTAINS INFORMATION RELATED TO EACH ERROR TYPE.
  994. * EACH ENTRY HAS THE FOLLOWING FORMAT -
  995. * VFD 2/ERROR COUNT INCREMENT, BML MESSAGE INDICATOR
  996. * 0 DO NOT INCREMENT ERROR COUNTS AND DO
  997. * NOT ISSUE BML MESSAGE.
  998. * 1 INCREMENT ERROR COUNTS AND ISSUE BML
  999. * MESSAGE.
  1000. * 2 INCREMENT ERROR COUNTS AND ISSUE BML
  1001. * MESSAGE IF UNRECOVERED ERROR.
  1002. * VFD 2/UNUSED (ZERO)
  1003. * VFD 1/SUSPECT FLAG
  1004. * 0 DO NOT SET SUSPECT FLAG.
  1005. * 1 SET SUSPECT FLAG.
  1006. * VFD 7/UNUSED (ZERO)
  1007.  
  1008.  
  1009. LIST G
  1010. TEPF EQU *-1
  1011. ECHO 1,EC=("DREC")
  1012. VFD 2/IEC._EC,2/0,1/SUS._EC,7/0
  1013. LIST *
  1014. TMNE SPACE 4,10
  1015. ** TMNE - TABLE OF ERROR CODE MNEMONICS.
  1016.  
  1017.  
  1018. LIST G
  1019. TMNE EQU *-1
  1020. ECHO 1,ERRCODE=("DREC")
  1021. CON EMN._ERRCODE "TXT._ERRCODE" ERROR
  1022. LIST *
  1023. TREC SPACE 4,10
  1024. ** TREC - TABLE OF RETRY COUNTS.
  1025.  
  1026.  
  1027. LIST G
  1028. TREC EQU *-1
  1029. ECHO 1,ERRCODE=("DREC")
  1030. CON RTC._ERRCODE "TXT._ERRCODE" ERROR
  1031. LIST *
  1032. TSYM SPACE 4,10
  1033. ** TSYM - TABLE OF BML SYMPTOM CODES.
  1034.  
  1035.  
  1036. LIST G
  1037. TSYM EQU *-1
  1038. ECHO 1,ERRCODE=("DREC")
  1039. CON SYM._ERRCODE "TXT._ERRCODE" ERROR
  1040. LIST *
  1041. FNC SPACE 4,10
  1042. ** FNC - FUNCTION CHANNEL.
  1043. *
  1044. * ENTRY (A) = FUNCTION CODE.
  1045. *
  1046. * EXIT (A) .LT. 0 IF CHANNEL ACTIVE UPON ENTRY OR FUNCTION
  1047. * TIMEOUT. (EC) = COMPLEMENT OF ERROR CODE.
  1048. * .EQ. 0 IF NO ERROR, CHANNEL ACTIVE.
  1049. *
  1050. * USES EC.
  1051.  
  1052.  
  1053. FNC6 ACN CH ACTIVATE CHANNEL
  1054. LDN 0 SET REPLY STATUS
  1055.  
  1056. FNC SUBR ENTRY/EXIT
  1057. STM FNCA SAVE FUNCTION CODE
  1058. AJM FNC5,CH IF CHANNEL IS STILL ACTIVE
  1059. FAN CH FUNCTION CHANNEL
  1060.  
  1061. * THE DRIVER MUST WAIT AT LEAST 300 MS BEFORE TIMING OUT THE
  1062. * FUNCTION.
  1063.  
  1064. FNC1 ADD ON
  1065. IJM FNC6,CH IF FUNCTION ACCEPTED
  1066. NJN FNC1 IF NOT TIMEOUT YET
  1067. LCN FTOE
  1068. FNC3 STD EC
  1069. EJM FNC4,CH IF CHANNEL IS EMPTY
  1070. LDN 1 SAVE LAST FUNCTION ISSUED
  1071. IAM FNCA,CH
  1072. FNC4 LCN 0 SET ERROR REPLY STATUS
  1073. DCN CH+40
  1074. UJN FNCX RETURN
  1075.  
  1076. FNC5 LCN CHFE SET *CHANNEL FAILURE* ERROR CODE
  1077. UJN FNC3 INPUT DATA/FUNCTION FROM CHANNEL
  1078.  
  1079.  
  1080. FNCA CON -0 CURRENT FUNCTION
  1081. GDS SPACE 4,15
  1082. ** GDS - GET DETAILED STATUS.
  1083. *
  1084. * THIS ROUTINE OBTAINS THE DETAILED STATUS FROM THE CONTROLLER.
  1085. *
  1086. * EXIT (A) .EQ. 0 IF STATUS OBTAINED.
  1087. * .LT. 0 IF STATUS NOT OBTAINED.
  1088. * (EC) = COMPLEMENT OF ERROR CODE IF STATUS NOT
  1089. * OBTAINED.
  1090. *
  1091. * USES EC, T1.
  1092. *
  1093. * CALLS FNC.
  1094.  
  1095.  
  1096. GDS2 LCN IDTE SET *INCOMPLETE DATA TRANSFER* ERROR CODE
  1097. GDS3 STD EC
  1098. GDS4 LDN MXSL-1 INVALIDATE DETAILED STATUS
  1099. STD T1
  1100. GDS5 LCN 0
  1101. STM DST,T1
  1102. SOD T1
  1103. PJN GDS5 IF MORE BYTES
  1104. GDS6 DCN CH+40
  1105.  
  1106. GDS SUBR ENTRY/EXIT
  1107. LDN FCDS ISSUE DETAILED STATUS FUNCTION
  1108. RJM FNC
  1109. MJN GDS4 IF ERROR
  1110. LDN MXSL
  1111. IAM DST,CH INPUT DETAILED STATUS
  1112. NJN GDS2 IF INCOMPLETE DATA TRANSFER
  1113. SFM GDS1,CH IF CHANNEL PARITY ERROR
  1114. UJN GDS6 RETURN
  1115.  
  1116. GDS1 LCN CHPE SET *CHANNEL PARITY* ERROR CODE
  1117. UJN GDS3 SET ERROR CODE
  1118. GGS SPACE 4,20
  1119. ** GGS - GET GENERAL STATUS.
  1120. *
  1121. * THIS ROUTINE OBTAINS GENERAL STATUS FROM THE CONTROLLER.
  1122. *
  1123. * EXIT (A) .EQ. 0 IF GENERAL STATUS OBTAINED. (GS) = STATUS.
  1124. * .LT. 0 IF STATUS NOT OBTAINED. (GS) = 7777.
  1125. * (EC) = COMPLEMENT OF *IDET* ERROR CODE IF INCOMPLETE
  1126. * DATA TRANSFER OCCURRED.
  1127. * = COMPLEMENT OF *CHPE* ERROR CODE IF CHANNEL
  1128. * PARITY ERROR OCCURRED.
  1129. *
  1130. * USES EC, GS.
  1131. *
  1132. * CALLS FNC.
  1133.  
  1134.  
  1135. GGS1 LCN CHPE SET *CHANNEL PARITY* ERROR CODE
  1136. UJN GGS3 SET ERROR CODE
  1137.  
  1138. GGS2 LCN IDTE SET *INCOMPLETE DATA TRANSFER* ERROR CODE
  1139. GGS3 STD EC
  1140. GGS4 LCN 0 INVALIDATE GENERAL STATUS
  1141. STD GS
  1142. GGS5 DCN CH+40
  1143.  
  1144. GGS SUBR ENTRY/EXIT
  1145. LDN FCGS ISSUE GENERAL STATUS FUNCTION
  1146. RJM FNC
  1147. MJN GGS4 IF FUNCTION TIMEOUT
  1148. LDN 1 INPUT STATUS
  1149. IAM GS,CH
  1150. NJN GGS2 IF INCOMPLETE TRANSFER
  1151. SFM GGS1,CH IF CHANNEL PARITY ERROR
  1152. LDD GS
  1153. UJN GGS5 RETURN
  1154. IBM SPACE 4,25
  1155. ** IBM - ISSUE BML MESSAGE.
  1156. *
  1157. * THIS ROUTINE BUILDS A BML MESSAGE AND CALLS ROUTINE *IMB* TO
  1158. * ISSUE THE MESSAGE TO THE BML.
  1159. *
  1160. * ENTRY (CA - CA+3) = SEEK PARAMETERS.
  1161. * (EC) = ERROR CODE.
  1162. * (ER) = RECOVERY IN PROGRESS FLAG.
  1163. * (RC) = RETRY COUNT.
  1164. * (RS) = RECOVERY STATUS.
  1165. * 777X INITIAL RETRY.
  1166. * 0 RECOVERED BY CONTROLLER.
  1167. * 1 RECOVERED BY DRIVER.
  1168. * 2 UNRESOLVED.
  1169. * 3 UNRECOVERED.
  1170. * (RW) = READ/WRITE FLAG.
  1171. * (T5) = EST ORDINAL.
  1172. * (BMLGS) = GENERAL STATUS.
  1173. * (DST - DST+23) = DETAILED STATUS IF APPLICABLE.
  1174. *
  1175. * EXIT (RC) INCREMENTED IF FIRST RETRY.
  1176. *
  1177. * USES RC, T1, CM+1 - CM+3.
  1178. *
  1179. * CALLS IMB.
  1180. *
  1181. * MACROS MONITOR.
  1182.  
  1183.  
  1184. IBM SUBR ENTRY/EXIT
  1185. LDM TEPF,EC
  1186. SHN 0-12
  1187. ZJN IBMX IF NO BML MESSAGE/ERROR COUNT INCREMENT
  1188. LDD RS
  1189. LMN 2
  1190. ZJN IBMX IF UNRESOLVED ERROR
  1191. SHN 21-13
  1192. PJN IBM1 IF FINAL RETRY
  1193. LDD RC
  1194. NJN IBMX IF NOT INITIAL RETRY
  1195. AOD RC INCREMENT RETRY COUNT
  1196. UJN IBM3 CONTINUE
  1197.  
  1198. IBM1 SHN 13-1
  1199. PJN IBM2 IF UNRECOVERED
  1200. LDN 2
  1201. SBD RC
  1202. MJN IBM2 IF NOT RECOVERED ON FIRST RETRY
  1203. LDK STAE
  1204. LMD EC
  1205. ZJN IBM3 IF ERROR NOT TO BE COUNTED
  1206.  
  1207. * INCREMENT ERROR COUNTER.
  1208.  
  1209. IBM2 LDD T5 SET EST ORDINAL
  1210. STD CM+1
  1211. LDD RS SET BYTE NUMBER
  1212. SHN -1
  1213. ADN 3
  1214. STD CM+2
  1215. LDK ICTS SET SUBFUNCTION
  1216. STD CM+3
  1217. MONITOR SMDM
  1218. IBM3 LDD RS SET RECOVERED/UNRECOVERED FLAG
  1219. ADN 5
  1220. SHN -3
  1221. LPN 1
  1222. STD T1
  1223. LDC /COMSDFS/D1XM*400 STORE SYMPTOM CODE
  1224. LMM TSYM,EC
  1225. STM BMLSC
  1226. LMK /COMSDFS/HS0040+/COMSDFS/D1XM*400
  1227. NJN IBM4 IF NOT A MEDIA ERROR
  1228. LDD RW
  1229. ERRNZ /COMSDFS/HS0041-/COMSDFS/HS0040-1 ERROR
  1230. RAM BMLSC
  1231. IBM4 LDD RC STORE RETRY COUNT
  1232. SHN 6-1
  1233. ADD RW ADD READ/WRITE FLAG
  1234. SHN 1
  1235. ADD T1 ADD RECOVERY STATUS
  1236. STM BMLRC
  1237. LDD CA UNIT NUMBER
  1238. LPN 77
  1239. STM BMLUN
  1240. LDD T5 EST ORDINAL
  1241. STM BMLEO
  1242. LDD EC ERROR CODE
  1243. STM BMLEC
  1244. LDD CA+1 CYLINDER
  1245. STM BMLCY
  1246. LDD CA+2 TRACK AND SECTOR
  1247. SHN 6
  1248. LMD CA+3
  1249. STM BMLTS
  1250. LDC BML ISSUE *BML* MESSAGE
  1251. RJM IMB ISSUE MESSAGE TO BUFFER
  1252. UJP IBMX RETURN
  1253. BML SPACE 4,10
  1254. * BINARY MAINTENANCE LOG MESSAGE.
  1255.  
  1256. BML BSS 0
  1257.  
  1258. HDR1 VFD 36/0 RESERVED
  1259. VFD 12/BMS1LC LENGTH OF MESSAGE
  1260. VFD 12/MLDY MESSAGE TYPE
  1261.  
  1262. VFD 12//COMSDFS/RM0115 MESSAGE ID
  1263.  
  1264. BMLSC VFD 4//COMSDFS/D1XM DRIVER TYPE
  1265. VFD 1/0 RESERVED
  1266. VFD 7/0 SYMPTOM CODE
  1267.  
  1268. BMLPP VFD 6/ PP NUMBER
  1269. VFD 6/ CHANNEL NUMBER
  1270.  
  1271. BMLUN VFD 6/0 EQUIPMENT NUMBER
  1272. VFD 6/ UNIT NUMBER
  1273.  
  1274. VFD 12/0 RESERVED
  1275.  
  1276. BMLEO VFD 12/ EST ORDINAL
  1277.  
  1278. BMLRC VFD 6/ RETRY COUNT
  1279. VFD 4/0 RESERVED
  1280. VFD 1/0 READ OPERATION
  1281. * VFD 1/1 WRITE OPERATION
  1282. VFD 1/0 RECOVERED ERROR
  1283. * VFD 1/1 UNRECOVERED ERROR
  1284.  
  1285. BMLCR VFD 6/ CHANNEL USED FOR RECOVERY
  1286. VFD 6/0 RESERVED
  1287.  
  1288. BMLMF VFD 12/ MAINFRAME ID
  1289.  
  1290. VFD 12/0 RESERVED
  1291.  
  1292. HDR1L EQU *-HDR1 HEADER LENGTH (PP WORDS)
  1293. HDR1LC EQU HDR1L/5 HEADER LENGTH (CM WORDS)
  1294.  
  1295. BMLEC VFD 12/ ERROR CODE
  1296.  
  1297. BMLCY VFD 12/ CYLINDER
  1298.  
  1299. BMLTS VFD 12/ TRACK AND SECTOR
  1300.  
  1301. BMLLF VFD 12/ LAST FUNCTION
  1302.  
  1303. BMLGS VFD 12/ GENERAL STATUS
  1304.  
  1305. * DETAILED STATUS.
  1306.  
  1307. DST BSS MXSL
  1308.  
  1309.  
  1310. * DRIVER TRACE DATA.
  1311.  
  1312. BSS 5
  1313. BMS1L EQU *-BML LENGTH OF MESSAGE (PP WORDS)
  1314. .A SET BMS1L+4
  1315. BMS1LC EQU .A/5 LENGTH OF MESSAGE (CM WORDS)
  1316. IFI SPACE 4,30
  1317. ** IFI - INITIALIZE FOR I/O.
  1318. *
  1319. * THIS ROUTINE IS CALLED BY THE READ AND WRITE PROCESSORS TO
  1320. * PREPARE FOR THE READ OR WRITE OPERATION.
  1321. *
  1322. * ENTRY (CB) = BUFFER ORDINAL.
  1323. * (FU - FU+1) = FIRST WORD ADDRESS OF UEM.
  1324. * (RW) = READ/WRITE FLAG.
  1325. *
  1326. * EXIT (BS) = BLOCK SIZE (SIZE OF DATA TRANSFER TO BE
  1327. * PERFORMED ON INPUT/OUTPUT INSTRUCTION).
  1328. * (SR - SR+4) = SLAVE REQUEST.
  1329. * (UA - UA+1) = UEM ADDRESS FOR MASTER.
  1330. *
  1331. * USES BS, CM - CM+4, SR - SR+4, UA - UA+1.
  1332. *
  1333. * MACROS CCBA.
  1334.  
  1335.  
  1336. IFI SUBR ENTRY/EXIT
  1337. LDC HLEN+DLEN SET TRANSFER SIZE
  1338. STD BS
  1339. LDM IFIA,RW SET BUFFER ADDRESS
  1340. STD T1
  1341. LDC BUFF
  1342. STI T1
  1343.  
  1344. * SET UEM ADDRESS.
  1345.  
  1346. CCBA IOLK
  1347. CRD CM
  1348. LDD CM+4
  1349. ADD FU+1
  1350. SHN -6
  1351. STD UA+1
  1352. LDD CM+3
  1353. ADD FU
  1354. SHN 6
  1355. RAD UA+1
  1356. SHN -14
  1357. STD UA
  1358.  
  1359. * BUILD SLAVE REQUEST.
  1360.  
  1361. LDN ZERL
  1362. CRD SR CLEAR SLAVE REQUEST BLOCK
  1363. LDD RW SET REQUEST TYPE
  1364. ADN 1
  1365. ERRNZ SLRD-1 CODE DEPENDS ON VALUE
  1366. ERRNZ SLWR-2 CODE DEPENDS ON VALUE
  1367. STD SR
  1368. LDK MPRU SET SLAVE UEM ADDRESS
  1369. ADD UA+1
  1370. STD SR+4
  1371. SHN -14
  1372. ADD UA
  1373. STD SR+3
  1374. UJP IFIX RETURN
  1375.  
  1376. IFIA CON RIOB
  1377. CON WIOB
  1378. IIC SPACE 4,10
  1379. ** IIC - ISSUE I/O COMPLETION REQUEST.
  1380. *
  1381. * ENTRY (CC) = COMPLETION COUNT.
  1382. * (PB) = PREVIOUS BUFFER ORDINAL, IF ANY.
  1383. *
  1384. * EXIT (PB) = 0.
  1385. *
  1386. * USES CC, PB, S1.
  1387. *
  1388. * CALLS CRQ.
  1389.  
  1390.  
  1391. IIC SUBR ENTRY/EXIT
  1392. LDD PB
  1393. ZJN IIC1 IF NO PREVIOUS BUFFER ORDINAL
  1394. AOD CC INCREMENT COMPLETION COUNT
  1395. LDN 0 CLEAR PREVIOUS BUFFER ORDINAL
  1396. STD PB
  1397. IIC1 LDD CC
  1398. SHN **
  1399. IICA EQU *-1
  1400. ZJN IICX IF NOT AT THRESHOLD
  1401. LDK MMXN SET EXCHANGE RETRY LIMIT
  1402. STD S1
  1403. IIC2 RJM CRQ ISSUE COMPLETION REQUEST
  1404. ZJN IICX IF NO PENDING REQUEST
  1405. SOD S1
  1406. PJN IIC2 IF NOT AT EXCHANGE RETRY LIMIT
  1407. UJN IICX RETURN
  1408.  
  1409.  
  1410. IICB BSS 0
  1411. CON SHNI+77-0
  1412. CON SHNI+77-1
  1413. IMF SPACE 4,10
  1414. ** IMF - ISSUE MONITOR FUNCTION.
  1415. *
  1416. * ENTRY (A) = MONITOR FUNCTION CODE.
  1417. *
  1418. * EXIT (A) = 0.
  1419. * (CM - CM+4) = COMPLETED PP OUTPUT REGISTER IMAGE.
  1420. *
  1421. * USES S1.
  1422. *
  1423. * CALLS CRQ, FTN.
  1424.  
  1425.  
  1426. IMF SUBR ENTRY/EXIT
  1427. STD S1 SAVE MONITOR FUNCTION CODE
  1428. IMF1 RJM CRQ CHECK FOR FUNCTION REISSUE REQUIRED
  1429. NJN IMF1 IF PREVIOUS FUNCTION NOT YET COMPLETE
  1430. LDD S1
  1431. RJM FTN ISSUE MONITOR FUNCTION
  1432. UJN IMFX RETURN
  1433. ISF SPACE 4,25
  1434. ** ISF - ISSUE SEEK OPERATION.
  1435. *
  1436. * THIS ROUTINE ISSUES THE SEEK FUNCTION.
  1437. *
  1438. * ENTRY (CB) = BUFFER ORDINAL.
  1439. * (CS) = CHANNEL RESERVATION STATUS.
  1440. *
  1441. * EXIT (A) .EQ. 0 IF UNIT ON-CYLINDER.
  1442. * .NE. 0 IF DRIVE RESERVED TO OTHER CONTROLLER, OR
  1443. * POSITIONER BUSY.
  1444. * (CS) = BIT 3 SET IF CONTROLLER HARDWARE RESERVE IS
  1445. * HELD. BIT 3 IS CLEAR IF *OPERATION COMPLETE*
  1446. * FUNCTION WAS ISSUED.
  1447. * (CA - CA+2) = PHYSICAL ADDRESS OF SECTOR.
  1448. * TO *ERR* IF ERROR.
  1449. *
  1450. * USES CS, EC, CA - CA+4.
  1451. *
  1452. * CALLS ERR, FNC, GGS, RHR.
  1453. *
  1454. * MACROS CCBA.
  1455.  
  1456.  
  1457. ISF SUBR ENTRY/EXIT
  1458. CCBA PAD1 GET PHYSICAL ADDRESS FROM CBT ENTRY
  1459. CRD CA
  1460. LDD CA+2 SET HEAD NUMBER
  1461. SHN 14
  1462. LMD TH SET SECTOR SIZE FIELD
  1463. ERRNZ SSIZ-1000 CODE DEPENDS ON VALUE
  1464. STD CA+2
  1465. SHN -14 SET SECTOR NUMBER
  1466. STD CA+3
  1467. LDN FCSK ISSUE SEEK FUNCTION
  1468. RJM FNC
  1469. MJN ISF3 IF FUNCTION TIMEOUT
  1470. LDN FCSKL OUTPUT SEEK PARAMETERS
  1471. OAM CA,CH
  1472. ZJN ISF1 IF ALL DATA WAS TAKEN
  1473. LCN IDTE SET *INCOMPLETE DATA TRANSFER* ERROR CODE
  1474. UJN ISF2 PROCESS ERROR
  1475.  
  1476. ISF1 EJM ISF4,CH IF LAST BYTE TRANSFERRED
  1477. SBN 1
  1478. NJN ISF1 IF NOT TIMEOUT
  1479. LCN CHFE SET *CHANNEL FAILURE* ERROR CODE
  1480. ISF2 STD EC
  1481. ISF3 RJM ERR PROCESS ERROR
  1482.  
  1483. ISF4 DCN CH+40
  1484. RJM GGS GET GENERAL STATUS
  1485. MJN ISF3 IF STATUS WAS NOT OBTAINED
  1486. ZJN ISF5 IF NO ERROR AND ON-CYLINDER
  1487. SHN 21-13
  1488. MJN ISF3 IF ABNORMAL TERMINATION
  1489. SHN 21-3-21+13
  1490. MJN ISF6 IF DRIVE RESERVED TO OPPOSITE ACCESS
  1491. ISF5 LDD CS SET HARDWARE RESERVE FLAG
  1492. SCN 10
  1493. LMN 10
  1494. STD CS
  1495. LDD GS
  1496. ZJN ISF6 IF ON-CYLINDER
  1497. SHN 21-1
  1498. PJN ISF3 IF NOT BUSY STATUS
  1499. RJM RHR RELEASE HARDWARE RESERVES
  1500. NJN ISF3 IF ERROR
  1501. LDN 1 SET EXIT STATUS
  1502. ISF6 LJM ISFX RETURN
  1503. RLC SPACE 4,10
  1504. ** RLC - RELOAD CCC CONTROLWARE IF NECESSARY.
  1505. *
  1506. * RLC WILL CALL OVERLAY *2XN* TO RELOAD CONTROLWARE BEFORE THE
  1507. * FINAL RETRY FOR EACH ACCESS, PROVIDED THAT THE ERROR CODE IS
  1508. * LESS THAN *NRVE*.
  1509. *
  1510. * EXIT (A) .EQ. 0 IF LOAD WAS SUCCESSFUL OR UNNECESSARY.
  1511. * (A) .NE. 0 IF LOAD WAS ATTEMPTED AND FAILED.
  1512. *
  1513. * CALLS 2XN.
  1514. *
  1515. * MACROS EXECUTE.
  1516.  
  1517.  
  1518. RLC2 LDN 0 INDICATE NO ERROR
  1519. DCN CH+40
  1520.  
  1521. RLC SUBR ENTRY/EXIT
  1522. LDD EC
  1523. SBK NRVE
  1524. PJN RLC2 IF NOT A CANDIDATE FOR CONTROLWARE RELOAD
  1525. LDM TREC,EC
  1526. SBD RC
  1527. ZJN RLC1 IF TIME FOR RELOAD ON SECONDARY ACCESS
  1528. SBD RC
  1529. NJN RLC2 IF NOT TIME FOR RELOAD ON PRIMARY ACCESS
  1530. RLC1 EXECUTE 2XN RELOAD CONTROLWARE IF POSSIBLE
  1531. UJN RLCX RETURN
  1532. OVI SPACE 4,25
  1533. ** OVI - OBTAIN AND VERIFY *PUT* INTERLOCK.
  1534. *
  1535. * THIS ROUTINE ATTEMPTS TO OBTAIN THE *PUT* INTERLOCK AND IF
  1536. * SUCCESSFUL, VERIFIES THAT THE BUFFER FOR WHICH THE SEEK WAS
  1537. * ISSUED IS STILL CURRENT IN THE QUEUE.
  1538. *
  1539. * ENTRY (CA+1 - CA+3) = ADDRESS USED FOR SEEK.
  1540. * (CB) = BUFFER ORDINAL.
  1541. * (ER) = RECOVERY IN PROGRESS FLAG.
  1542. * (IL) = NONZERO IF THE *PUT* INTERLOCK IS ALREADY HELD.
  1543. * (PO) = *PUT* ORDINAL.
  1544. *
  1545. * EXIT (A) = 0 IF *PUT* ENTRY IS INTERLOCKED AND BUFFER IS
  1546. * STILL CURRENT IN QUEUE.
  1547. * = NONZERO IF *PUT* ENTRY IS INTERLOCKED BY OTHER
  1548. * DRIVER OR THE BUFFER FOR WHICH THE SEEK WAS
  1549. * PERFORMED HAS ALREADY BEEN PROCESSED BY THE
  1550. * OTHER DRIVER.
  1551. * (IL) = 1 IF (A) = 0.
  1552. *
  1553. * USES IL, CM+1 - CM+2, CN - CN+4.
  1554. *
  1555. * CALLS RPI.
  1556. *
  1557. * MACROS CCBA, CPTA, MONITOR.
  1558.  
  1559.  
  1560. OVI2 LDN 0 INDICATE *PUT* INTERLOCKED AND BUFFER OK
  1561.  
  1562. OVI SUBR ENTRY/EXIT
  1563. LDD IL
  1564. NJN OVI2 IF THIS DRIVER ALREADY HAS *PUT* INTERLOCK
  1565. LDK SUIS
  1566. STD CM+1
  1567. LDD PO
  1568. STD CM+2
  1569. MONITOR BIOM ISSUE INTERLOCK REQUEST
  1570. LDD CM+1
  1571. NJN OVIX IF *PUT* IS INTERLOCKED BY OTHER DRIVER
  1572. AOD IL SET *PUT* INTERLOCK FLAG
  1573. LDC CREQ UPDATE *CCT* TABLE
  1574. OVIA EQU *-2 (*CCT* FWA SET BY *PRS*)
  1575. CWD IL
  1576. LDD ER
  1577. NJN OVI2 IF RECOVERY IN PROGRESS
  1578.  
  1579. * VERIFY THAT THE BUFFER FOR WHICH THE SEEK WAS ISSUED IS STILL
  1580. * CURRENT IN THE QUEUE.
  1581.  
  1582. CPTA UNCT
  1583. CRD CN
  1584. LDD CN+3
  1585. LMD CB
  1586. NJN OVI1 IF CURRENT CBT ORDINAL CHANGED
  1587. CCBA HSLK GET *PUT* ORDINAL FROM CBT ENTRY
  1588. CRD CN
  1589. LDD CN+4
  1590. LMD PO
  1591. NJN OVI1 IF *PUT* ORDINALS DO NOT MATCH
  1592. CCBA PAD1 GET PHYSICAL ADDRESS FROM CBT ENTRY
  1593. CRD CN
  1594. LDD CN+1
  1595. LMD CA+1
  1596. NJN OVI1 IF NO CYLINDER MATCH
  1597. LDD CA+2 TRACK
  1598. LPN 77
  1599. SHN 6
  1600. LMD CA+3 SECTOR
  1601. LMD CN+2
  1602. ZJN OVI1.1 IF BUFFER OK
  1603. OVI1 RJM RPI RELEASE *PUT* INTERLOCK
  1604. LDN 1 INDICATE VERIFICATION FAILURE
  1605. OVI1.1 UJP OVIX RETURN
  1606. PDT SPACE 4,20
  1607. ** PDT - PROCESS DATA TRANSFER.
  1608. *
  1609. * THIS ROUTINE PREPARES FOR AND STARTS THE DATA TRANSFER WHEN A
  1610. * REQUEST IS FOUND IN THE *PUT* AND THE SEEK HAS COMPLETED. IT
  1611. * WILL CALL THE PROPER ROUTINE FOR THE DIRECTION OF THE I/O.
  1612. * THIS ROUTINE WILL RETURN TO THE MAIN LOOP ONLY WHEN THE
  1613. * TRANSFER CANNOT CONTINUE ON THE CURRENT UNIT.
  1614. *
  1615. * ENTRY (EC) = ERROR CODE IF ERROR RECOVERY IS IN PROGRESS.
  1616. * (PO) = *PUT* ORDINAL.
  1617. * (RW) = READ/WRITE FLAG.
  1618. *
  1619. * USES NB, PB, TB, T1.
  1620. *
  1621. * CALLS ERR, OVI, RHR, RIO, RPI, WIO.
  1622.  
  1623.  
  1624. PDT SUBR ENTRY/EXIT
  1625. RJM OVI OBTAIN *PUT* INTERLOCK AND VERIFY BUFFER
  1626. NJN PDT1 IF UNABLE TO INTERLOCK *PUT*/WRONG BUFFER
  1627. STD NB CLEAR NEXT BUFFER ORDINAL
  1628. STD PB CLEAR PREVIOUS BUFFER ORDINAL
  1629. LDM IICB,RW SET COMPLETION REQUEST THRESHOLD
  1630. STM IICA
  1631. LDM PDTA,RW STORE SUBROUTINE ADDRESS
  1632. STD T1
  1633. RJM 0,T1 ENTER DATA TRANSFER ROUTINE
  1634.  
  1635. * CONTROL RETURNS HERE AFTER THE DATA TRANSFER IS COMPLETED.
  1636.  
  1637. PDT1 RJM RHR RELEASE HARDWARE RESERVES
  1638. ZJN PDT2 IF NO ERROR
  1639. LDD EC
  1640. NJN PDT2 IF ERROR RECOVERY IS IN PROGRESS
  1641. RJM ERR CALL ERROR PROCESSOR
  1642.  
  1643. PDT2 RJM RPI RELEASE *PUT* INTERLOCK
  1644. UJP PDTX RETURN
  1645.  
  1646.  
  1647. PDTA BSS 0 PROCESSOR ADDRESS TABLE
  1648. CON RIO
  1649. CON WIO
  1650. PFR SPACE 4,15
  1651. ** PFR - PREPARE FOR RETRY ATTEMPT.
  1652. *
  1653. * THIS ROUTINE DOES WHATEVER IS NECESSARY TO PREPARE FOR THE
  1654. * NEXT RETRY ATTEMPT. ITS DUTIES INCLUDE PLUGGING INSTRUCTIONS
  1655. * TO FORCE RETURN TO THE ERROR PROCESSOR FOLLOWING RECOVERY.
  1656. *
  1657. * ENTRY (RW) = READ/WRITE FLAG.
  1658. *
  1659. * USES T1, T2.
  1660.  
  1661.  
  1662. PFR SUBR ENTRY/EXIT
  1663. LDD RW
  1664. SHN 1
  1665. STD T1
  1666. LDM PFRA,T1
  1667. STD T2
  1668. LDM PFRA+1,T1
  1669. STI T2
  1670. UJN PFRX RETURN
  1671.  
  1672.  
  1673. PFRA BSS 0
  1674. CON RIOC,UJNI+RIO12-RIOC
  1675. CON WIOC,UJNI+WIO8-WIOC
  1676.  
  1677. ERRNG RIO12-RIOC CODE DEPENDS ON VALUE
  1678. ERRNG WIO8-WIOC CODE DEPENDS ON VALUE
  1679. PRE SPACE 4,20
  1680. ** PRE - PRESET ERROR PROCESSOR.
  1681. *
  1682. * THIS ROUTINE PERFORMS OPERATIONS NECESSARY TO PREPARE THE
  1683. * DRIVER FOR ERROR PROCESSOR EXECUTION.
  1684. *
  1685. * EXIT (A) = 0 IF ERROR PROCESSING SHOULD CONTINUE.
  1686. * (EC) = 1 IF ERROR ON PREVIOUS SECTOR.
  1687. * (PB) = PREVIOUS BUFFER ORDINAL.
  1688. * (RS) = RECOVERY STATUS.
  1689. * (T5) = EST ORDINAL.
  1690. * (TEPA) = 1 IF VERIFICATION/INTERLOCK REJECT.
  1691. *
  1692. * USES CB, EC, PB, RS, T5, CM - CM+4.
  1693. *
  1694. * CALLS CRQ, OVI.
  1695. *
  1696. * MACROS CPTA.
  1697.  
  1698.  
  1699. PRE4 AOM TEPA SET VERIFICATION/INTERLOCK FAILURE FLAG
  1700.  
  1701. PRE SUBR ENTRY/EXIT
  1702. DCN CH+40 DISCONNECT CHANNEL
  1703. LDM FNCA SAVE CURRENT FUNCTION
  1704. STM BMLLF
  1705. LCN 0 INITIALIZE RECOVERY STATUS
  1706. STD RS
  1707. RJM OVI GET *PUT* INTERLOCK (IF NOT ALREADY HELD)
  1708. NJN PRE4 IF INTERLOCK NOT OBTAINED
  1709. LDC LDNI+FCRD
  1710. STM RIOA
  1711. ADN FCWR-FCRD
  1712. STM WIOA
  1713. CPTA UNCT GET EST ORDINAL
  1714. CRD CM
  1715. LDD CM+1
  1716. STD T5
  1717. LDD EP
  1718. ZJN PRE3 IF NOT PREVIOUS SECTOR ERROR
  1719. LDD EC
  1720. LMC 7777-FTOE
  1721. NJN PRE3 IF NOT PREVIOUS SECTOR ERROR
  1722. LDN FTOE
  1723. STD EC
  1724. LDD PB RESET CURRENT BUFFER TO PREVIOUS
  1725. ZJN PRE3 IF NO PREVIOUS BUFFER
  1726. STD CB
  1727. LDN 0 CLEAR PREVIOUS BUFFER ORDINAL
  1728. STD PB
  1729. PRE3 RJM CRQ IDLE PENDING MONITOR FUNCTIONS
  1730. NJN PRE3 IF FUNCTION PENDING
  1731. STD EP CLEAR PREVIOUS SECTOR ERROR FLAG
  1732. LJM PREX RETURN
  1733. RCH SPACE 4,15
  1734. ** RCH - REQUEST CHANNEL.
  1735. *
  1736. * ENTRY (IR+4) = CHANNEL NUMBER.
  1737. * (CS) = CHANNEL RESERVATION STATUS.
  1738. *
  1739. * EXIT (A) .NE. 0 IF CHANNEL ASSIGNED.
  1740. * .EQ. 0 IF CHANNEL NOT ASSIGNED.
  1741. *
  1742. * USES CM+1, CS.
  1743. *
  1744. * MACROS MONITOR.
  1745.  
  1746.  
  1747. RCH SUBR ENTRY/EXIT
  1748. LDD CS
  1749. LPN 1
  1750. NJN RCHX IF CHANNEL ALREADY ASSIGNED
  1751. LDD IR+4
  1752. STD CM+1
  1753. MONITOR CCHM
  1754. LDD CM+2
  1755. ZJN RCHX IF CHANNEL NOT ASSIGNED
  1756. SCF *+2,CH UNCONDITIONALLY SET CHANNEL FLAG
  1757. AOD CS SET CHANNEL RESERVED FLAG
  1758. UJN RCHX RETURN
  1759. RFU SPACE 4,30
  1760. ** RFU - READ FROM UEM.
  1761. *
  1762. *
  1763. * ENTRY (BL) = MASTER BUFFER LENGTH (IN CM WORDS).
  1764. * (CB) = BUFFER ORDINAL.
  1765. * (SR+2) = 0 IF PROCESSING FIRST PART OF SECTOR.
  1766. * (UA - UA+1) = UEM ADDRESS/100B TO READ FROM.
  1767. *
  1768. * EXIT (BUFF) = HEADER + DATA FROM UEM.
  1769. *
  1770. * USES T1 - T3.
  1771. *
  1772. * MACROS CCBA.
  1773.  
  1774.  
  1775. RFU SUBR ENTRY/EXIT
  1776. LDD SR+2
  1777. NJN RFU1 IF SECOND HALF OF BLOCK
  1778. LDN HLEN/5
  1779. STD T1 SET LENGTH OF HEADER
  1780. CCBA PAD1 READ HEADER INTO BUFFER
  1781. CRM BUFF,T1
  1782. RFU1 SRD T2 SAVE R-REGISTER
  1783. LRD UA SET ADDRESS TO READ FROM
  1784. LDC 400000 USE R-REGISTER FOR READ ADDRESS
  1785. CRM BUFF+HLEN,BL READ DATA INTO BUFFER
  1786. LRD T2 RESTORE R-REGISTER
  1787. UJN RFUX RETURN
  1788. RHR SPACE 4,10
  1789. ** RHR - RELEASE HARDWARE RESERVES.
  1790. *
  1791. * ENTRY (CS) = CHANNEL STATUS.
  1792. *
  1793. * EXIT (A) = 0 IF NO ERROR.
  1794. *
  1795. * USES CS, S1.
  1796. *
  1797. * CALLS FNC.
  1798.  
  1799.  
  1800. RHR SUBR ENTRY/EXIT
  1801. LDD CS
  1802. LPN 10
  1803. ZJN RHRX IF CONTROLLER NOT RESERVED
  1804. LDN FCOC ISSUE *OPERATION COMPLETE* FUNCTION
  1805. RJM FNC
  1806. SHN 0-21 SAVE ERROR STATUS
  1807. STD S1
  1808. DCN CH+40
  1809. LCN 10 CLEAR CONTROLLER RESERVE FLAG
  1810. RAD CS
  1811. LDD S1 SET REPLY STATUS
  1812. UJN RHRX RETURN
  1813. RIO SPACE 4,40
  1814. ** RIO - PERFORM READ I/O OPERATIONS.
  1815. *
  1816. * ENTRY (CB) = CURRENT BUFFER ORDINAL.
  1817. * (EP) = 0.
  1818. * (NB) = 0.
  1819. * (PB) = 0.
  1820. * (SB) = FWA OF SLAVE REQUEST BUFFER.
  1821. *
  1822. * EXIT (PB) = ORDINAL OF LAST BUFFER PROCESSED.
  1823. *
  1824. * USES CB, EC, EP, NB, PB, SR+2.
  1825. *
  1826. * CALLS AUA, CCS, ERR, FNC, GGS, IFI, RSS, WFS, WTU.
  1827. *
  1828. * MACROS CCBA.
  1829.  
  1830.  
  1831. RIO SUBR ENTRY/EXIT
  1832. RJM IFI INITIALIZE FOR I/O
  1833. RIO1 LDN FCRD ISSUE READ FUNCTION
  1834. * LDN FCCO (CONTROLLER ERROR RECOVERY IN PROGRESS)
  1835. RIOA EQU *-1
  1836. RJM FNC
  1837. PJN RIO2 IF NO ERROR
  1838. AOD EP SET PREVIOUS SECTOR ERROR FLAG
  1839. UJN RIO5 CALL ERROR PROCESSOR
  1840.  
  1841. RIO2 LDD SB POST SLAVE REQUEST
  1842. ADK SBRQ
  1843. CWD SR POST SLAVE REQUEST
  1844. RIO3 FJM RIO6,CH IF CHANNEL FULL
  1845. SBN 1
  1846. NJN RIO3 IF NOT TIMEOUT
  1847. LCN CHFE SET *CHANNEL FAILURE* ERROR CODE
  1848. RIO4 STD EC
  1849. RJM RSS RESET SLAVE TO IDLE LOOP
  1850. RIO5 RJM ERR CALL ERROR PROCESSOR
  1851.  
  1852. RIO6 LDD BS INPUT DATA
  1853. IAM BUFF,CH
  1854. * IAM BUFF+HLEN (SECOND HALF OF SECTOR)
  1855. RIOB EQU *-1
  1856. ZJN RIO8 IF DATA TRANSFER COMPLETE
  1857. SFM RIO7,CH IF CHANNEL PARITY ERROR
  1858. LCN IDTE SET *INCOMPLETE DATA TRANSFER* ERROR CODE
  1859. UJN RIO4 SET ERROR CODE
  1860.  
  1861. RIO7 LCN CHPE SET *CHANNEL PARITY* ERROR CODE
  1862. UJN RIO4 SET ERROR CODE
  1863.  
  1864. RIO8 CCF *,CH PASS CHANNEL TO SLAVE
  1865. RJM WTU WRITE DATA TO UEM/STORE LINKAGE BYTES
  1866. AOD SR+2 SET *CHANNEL DISCONNECT* FLAG
  1867. LMN 2
  1868. ZJN RIO11 IF LAST BLOCK TRANSFERRED
  1869. RJM AUA ADVANCE MASTER/SLAVE UEM ADDRESSES
  1870. RJM WFS WAIT FOR SLAVE COMPLETION
  1871. PJP RIO2 IF SLAVE DID NOT ENCOUNTER ERROR
  1872. RIO8.1 STD EC STORE ERROR CODE
  1873. RIO9 UJN RIO5 CALL ERROR PROCESSOR
  1874.  
  1875. RIO11 RJM WFS WAIT FOR SLAVE COMPLETION
  1876. MJN RIO8.1 IF SLAVE ENCOUNTERED ERROR
  1877. ZJN RIO12 IF NO CONSECUTIVE REQUEST
  1878. * UJN RIO12 (ERROR RECOVERY IN PROGRESS)
  1879. RIOC EQU *-1
  1880. LDN 0 CLEAR NEXT BUFFER ORDINAL
  1881. STD NB
  1882. LJM RIO1 PROCESS NEXT REQUEST
  1883.  
  1884. RIO12 RJM GGS GET GENERAL STATUS
  1885. ZJP RIOX IF NO ERROR
  1886. LDD PB BACKUP TO PREVIOUS BUFFER
  1887. STD CB
  1888. LDN 0 AVOID BUFFER COMPLETION
  1889. STD PB
  1890. UJN RIO9 CALL ERROR PROCESSOR
  1891. RPI SPACE 4,10
  1892. ** RPI - RELEASE *PUT* INTERLOCK.
  1893. *
  1894. * ENTRY (CC) = COMPLETION COUNT.
  1895. * (IL) = *PUT* INTERLOCK FLAG.
  1896. * (PB) = PREVIOUS BUFFER ORDINAL.
  1897. * (PO) = *PUT* ORDINAL.
  1898. * (RW) = READ/WRITE FLAG.
  1899. * (SB) = SLAVE MESSAGE BUFFER ADDRESS.
  1900. * (TB) = TOTAL BUFFER COUNT.
  1901. *
  1902. * USES CC, IL, PB, CM - CM+4.
  1903. *
  1904. * MACROS MONITOR.
  1905.  
  1906.  
  1907. RPI2 LDD PB
  1908. ZJN RPI3 IF NO PREVIOUS BUFFER
  1909. LDN 1 ACCOUNT FOR PREVIOUS BUFFER
  1910. RPI3 ADD CC
  1911. LMC 4000 SET *RELEASE INTERLOCK* FLAG
  1912. STD CM+3
  1913. LDD TB SET TOTAL BUFFER COUNT
  1914. STD CM+4
  1915. LDD PO
  1916. STD CM+2
  1917. LDN DCBS CLEAR UNIT INTERLOCK
  1918. STD CM+1
  1919. LDN 0 CLEAR COMPLETION COUNT BEFORE *CRQ* CALL
  1920. STD CC
  1921. MONITOR BIOM
  1922. * LDN 0
  1923. STD IL CLEAR *PUT* INTERLOCK FLAG
  1924. STD PB CLEAR PREVIOUS BUFFER ORDINAL
  1925. LDC CREQ UPDATE *CCT* TABLE
  1926. RPIA EQU *-2 (*CCT* FWA SET BY *PRS*)
  1927. CWD IL
  1928.  
  1929. RPI SUBR ENTRY/EXIT
  1930. LDD IL
  1931. ZJN RPIX IF *PUT* NOT INTERLOCKED
  1932. RPI1 LDD SB
  1933. ADK SBRC
  1934. CRD CM
  1935. LDD CM
  1936. NJP RPI2 IF SLAVE FINISHED
  1937. LDK SDLY
  1938. SBN 1
  1939. NJN *-1 IF DELAY NOT FINISHED
  1940. UJN RPI1 CHECK FOR SLAVE COMPLETION
  1941. RSS SPACE 4,25
  1942. ** RSS - RESET SLAVE TO IDLE LOOP.
  1943. *
  1944. *
  1945. * ENTRY (SB) = FWA OF SLAVE REQUEST BUFFER.
  1946. *
  1947. * USES CM - CM+4.
  1948.  
  1949.  
  1950. RSS SUBR ENTRY/EXIT
  1951. LDN 1
  1952. STD CM ERROR FLAG
  1953. LDD SB
  1954. ADK SBME
  1955. CWD CM SET MASTER ERROR FLAG
  1956. CCF *,CH CLEAR CHANNEL FLAG
  1957. RSS1 LDK SDLY
  1958. SBN 1
  1959. NJN *-1 IF DELAY NOT COMPLETE
  1960. LDD SB
  1961. ADK SBME
  1962. CRD CM REREAD MASTER ERROR FLAG WORD
  1963. LDD CM
  1964. NJN RSS1 IF SLAVE HAS NOT CLEARED ERROR FLAG
  1965. SCF *,CH SET CHANNEL FLAG
  1966. UJN RSSX RETURN
  1967. RTM SPACE 4,25
  1968. ** RTM - REQUEST TRACK FLAW IF MEDIA ERROR.
  1969. *
  1970. * THIS ROUTINE DETERMINES IF THE ERROR RESULTED FROM A MEDIA
  1971. * FAILURE. IF IT DID, *CPUMTR* WILL BE CALLED TO PLACE THE
  1972. * LOGICAL TRACK NUMBER IN THE MST SO *1MV* CAN PERFORM A MEDIA
  1973. * VERIFICATION WHEN THE TRACK IS RELEASED. AN ERROR LOG
  1974. * MESSAGE IS ISSUED INFORMING THE OPERATOR THAT A MEDIA FAILURE
  1975. * OCCURRED BUT THE TRACK HAS NOT YET BEEN FLAWED BY THE SYSTEM.
  1976. *
  1977. * ENTRY (CA - CA+3) = PHYSICAL ADDRESS.
  1978. * (CB) = BUFFER ORDINAL.
  1979. * (EC) = ERROR CODE.
  1980. * (T5) = EST ORDINAL.
  1981. *
  1982. * USES T1, CM - CM+4.
  1983. *
  1984. * CALLS C2D, IMB.
  1985. *
  1986. * MACROS MONITOR.
  1987.  
  1988.  
  1989. RTM SUBR ENTRY/EXIT
  1990. LDD EC
  1991. LMK PARE
  1992. NJN RTMX IF NOT MEDIA ERROR
  1993. LDD T5 CONVERT AND STORE EST ORDINAL IN MESSAGE
  1994. SHN -3
  1995. RJM C2D
  1996. STM RTMB+1
  1997. LDD T5
  1998. STD CM+1 STORE EST ORDINAL FOR *SMDM*
  1999. LPN 7
  2000. SHN 6
  2001. ADC 2R0,
  2002. STM RTMB+2
  2003. LDD CA+1
  2004. SHN 1
  2005. ADC 4000
  2006. STD CM+2
  2007. LDD CA+2 PHYSICAL TRACK
  2008. LPN 77
  2009. STD T1
  2010. SHN 1
  2011. ADD T1
  2012. ERRNZ PSPT-3 CODE DEPENDS ON VALUE
  2013. ADD CA+3
  2014. SBK PSLT
  2015. MJN RTM1 IF FIRST LOGICAL TRACK OF CYLINDER
  2016. AOD CM+2
  2017. RTM1 LDD CM+2 CONVERT AND STORE TRACK NUMBER IN MESSAGE
  2018. SHN -6 CONVERT UPPER 6 BITS
  2019. RJM C2D
  2020. STM RTMB+4 STORE RESULT IN DISPLAY BUFFER
  2021. LDD CM+2 CONVERT LOWER 6 BITS
  2022. LPN 77
  2023. RJM C2D
  2024. STM RTMB+5 STORE RESULT IN DISPLAY BUFFER
  2025. LDK SFTS SET SUBFUNCTION
  2026. STD CM+3
  2027. MONITOR SMDM
  2028. LDD CM+1
  2029. NJN RTM2 IF THIS TRACK FLAW ALREADY REQUESTED
  2030. LDC RTMA ISSUE ERROR LOG MESSAGE
  2031. RJM IMB
  2032. RTM2 UJP RTMX RETURN
  2033.  
  2034.  
  2035. RTMA VFD 24/0 RESERVED
  2036. VFD 12/1 ERRLOG ALERT FLAG
  2037. VFD 12/RTMAL MESSAGE LENGTH
  2038. VFD 12/ELDY ERRLOG DAYFILE
  2039.  
  2040. RTMB DATA C*EQXXX,TKNNNN, MEDIA DEFECT ENCOUNTERED.*
  2041.  
  2042. .1 SET *-RTMA+4
  2043. RTMAL EQU .1/5
  2044. SCD SPACE 4,10
  2045. ** SCD - SET DRIVER DROPPED FLAG.
  2046. *
  2047. * THIS ROUTINE SETS A FLAG IN THE CONTROLWARE TABLE INDICATING
  2048. * THAT THE DRIVER OF THIS CHANNEL HAS DROPPED.
  2049. *
  2050. * EXIT (A) = 0.
  2051. *
  2052. * USES CM+1 - CM+4.
  2053. *
  2054. * MACROS MONITOR.
  2055.  
  2056.  
  2057. SCD SUBR ENTRY/EXIT
  2058. LDD MA STORE *UTEM* PARAMETERS
  2059. CWM SCDB,ON
  2060. LDC **
  2061. SCDA EQU *-1 (CONTROLWARE TABLE ADDRESS)
  2062. STD CM+4
  2063. SHN -14
  2064. STD CM+3
  2065. LDN 1
  2066. STD CM+1
  2067. LDN 0
  2068. STD CM+2
  2069. MONITOR UTEM SET DRIVER DROP FLAG
  2070. UJN SCDX RETURN
  2071.  
  2072.  
  2073. SCDB VFD 1/0,5/0,6/1,6/,42/1
  2074. SSF SPACE 4,15
  2075. ** SSF - SET SUSPECT FLAG.
  2076. *
  2077. * THIS ROUTINE SETS THE SUSPECT FLAG AND THE *E,M* DISPLAY
  2078. * ERROR CODE IN THE MST ENTRY VIA *SEQM* FUNCTIONS, PROVIDED
  2079. * THAT THE *SET SUSPECT* FLAG IS SET IN TABLE *TEPF* FOR THE
  2080. * PARTICULAR TYPE OF ERROR ENCOUNTERED.
  2081. *
  2082. * ENTRY (EC) = ERROR CODE.
  2083. * (RC) = RETRY COUNT.
  2084. * (T5) = EST ORDINAL.
  2085. *
  2086. * USES CM+1 - CM+3.
  2087. *
  2088. * CALLS RTM.
  2089. *
  2090. * MACROS MONITOR.
  2091.  
  2092.  
  2093. SSF1 LDK SURT
  2094. SSF2 SBD RC
  2095. NJN SSFX IF NOT TIME TO SET SUSPECT FLAG
  2096. RJM RTM CHECK FOR MEDIA FAILURE
  2097. LDM TEPF,EC
  2098. SHN 21-7
  2099. PJN SSFX IF SUSPECT FLAG NOT TO BE SET
  2100. LDD T5 SET SUSPECT FLAG
  2101. STD CM+1
  2102. LDN SSES
  2103. STD CM+2
  2104. MONITOR SEQM
  2105. LDD T5 SET ERROR CODE IN MST
  2106. STD CM+1
  2107. LDN STDE
  2108. STD CM+2
  2109. LDN SERS
  2110. STD CM+3
  2111. MONITOR SMDM
  2112.  
  2113. SSF SUBR ENTRY/EXIT
  2114. LDD ER
  2115. NJN SSFX IF RECOVERY IN PROGRESS
  2116. LDD EC
  2117. SBK NRVE
  2118. PJP SSF1 IF NO CONTROLWARE RELOAD
  2119. LDM TREC,EC
  2120. SHN -1
  2121. ADN 1
  2122. UJP SSF2 SEE IF TIME TO SET SUSPECT
  2123.  
  2124. SUQ SPACE 4,30
  2125. ** SUQ - SCAN UNIT QUEUE.
  2126. *
  2127. * THIS ROUTINE SCANS THE *PUT* ENTRIES OF UNITS ACCESSED BY
  2128. * THIS CHANNEL UNTIL IT HAS SCANNED THE ENTIRE TABLE OR FINDS
  2129. * AN ENTRY ELIGIBLE FOR PROCESSING.
  2130. *
  2131. * ENTRY (TI) = CURRENT *TPOR* INDEX.
  2132. *
  2133. * EXIT (A) .EQ. 0 IF ENTIRE TABLE SCANNED AND NO ELIGIBLE
  2134. * ENTRY FOUND.
  2135. * .NE. 0 IF ENTRY SELECTED.
  2136. * (CB) = CURRENT BUFFER ORDINAL.
  2137. * (ER) = 1 IF ERROR RECOVERY IS IN PROGRESS.
  2138. * (PO) = ORDINAL OF SELECTED *PUT* ENTRY.
  2139. * (RC) = 0 IF ELIGIBLE ENTRY FOUND AND *RECOVERY IN
  2140. * PROGRESS* FLAG IS CLEAR.
  2141. * = N/2+1 WHERE N IS THE RETRY LIMIT FOR THE ERROR
  2142. * CODE SET IN *EC* IF *RECOVERY IN PROGRESS*
  2143. * FLAG IS SET.
  2144. * (RW) = READ/WRITE FLAG.
  2145. * TO *ERR* IF ERROR RECOVERY IS IN PROGRESS FOR
  2146. * SELECTED BUFFER.
  2147. * (TB) = TOTAL BUFFER COUNT.
  2148. *
  2149. * USES CB, EC, ER, PO, RC, RW, S1, TB, TI, CM - CM+4,
  2150. * CN - CN+4, T1 - T5.
  2151. *
  2152. * MACROS CCBA, CPTA, SFA.
  2153.  
  2154.  
  2155. SUQ7 LDD TI
  2156. LMN 1
  2157. SUQA EQU *-1
  2158. NJN SUQ1 IF NOT FINISHED WITH *PUT* SCAN
  2159.  
  2160. SUQ SUBR ENTRY/EXIT
  2161. SUQ1 AOD TI ADVANCE *TPOR* INDEX
  2162. ERRNZ TPORE-1 CODE IS VALUE DEPENDENT
  2163. LDM TPOR-1,TI
  2164. NJN SUQ2 IF NOT END OF *TPOR* TABLE
  2165. STD TI RESET INDEX
  2166. UJN SUQ1 CONTINUE
  2167.  
  2168. SUQ2 SHN 21 SET *PUT* ORDINAL
  2169. STD PO
  2170. SHN -21 SET CHANNEL INDEX BYTE
  2171. STD S1
  2172. CPTA UNCT READ *PUT* ENTRY
  2173. CRD CM
  2174. LDD CM
  2175. SHN 21-13
  2176. MJN SUQ7 IF UNIT INTERLOCK SET
  2177. LDD CM+3
  2178. NJN SUQ3 IF REQUEST IN QUEUE
  2179. SUQ2.1 UJN SUQ7 PROCESS NEXT *PUT*
  2180.  
  2181. SUQ3 STD CB SAVE BUFFER ORDINAL
  2182. CCBA IOLK,A READ *CBT* ENTRY
  2183. CRD CN
  2184. ADK HSLK-IOLK
  2185. CRD T1
  2186. SFA EST,CM+1 READ EST ENTRY
  2187. ADK EQDE
  2188. CRD CM
  2189. LDM CM+1,S1
  2190. SHN -11
  2191. LPN 3
  2192. STD T2 SAVE CHANNEL STATE INDICATOR
  2193. LMN 3
  2194. NJN SUQ4 IF CHANNEL NOT DOWN
  2195. SUQ3.1 UJN SUQ2.1 PROCESS NEXT *PUT*
  2196.  
  2197. SUQ4 LDD T1
  2198. SHN 0-12
  2199. ZJN SUQ4.1 IF NOT CHANNEL SPECIFIC REQUEST
  2200. CCBA PAD4 GET CHANNEL FROM CBT ENTRY
  2201. CRD CM
  2202. LDD CM CHECK IF OTHER CHANNEL SPECIFIED
  2203. SHN -6
  2204. LMD IR+4
  2205. STD T2
  2206. SUQ4.1 LDD T2
  2207. NJN SUQ3.1 IF IDLE STATE OR OTHER CHANNEL SPECIFIED
  2208. LDD CN SET/CLEAR READ/WRITE FLAG
  2209. SHN 0-11
  2210. LPN 1
  2211. STD RW
  2212. SHN 13-0
  2213. ADN 1
  2214. STD TB
  2215. LDD T1
  2216. SHN 0-13
  2217. STD ER SET/CLEAR RECOVERY IN PROGRESS FLAG
  2218. ZJN SUQ6 IF NOT ERROR RECOVERY
  2219. LDD T1 SAVE ERROR CODE
  2220. LPN 77
  2221. STD T1
  2222. LMC 7777 COMPLEMENT ERROR CODE
  2223. STD EC
  2224. LDM TREC,T1 SET RETRY COUNT = LIMIT/2+1
  2225. SHN -1
  2226. ADN 1
  2227. STD RC INITIALIZE RETRY COUNT
  2228. LDN 0 INITIALIZE PASS COUNTER
  2229. STM ERRA
  2230. RJM ERR CALL ERROR PROCESSOR
  2231. * LJM MST ERROR PROCESSOR RETURNS TO *MST*
  2232.  
  2233. SUQ6 LDD TI SET SCAN LIMIT
  2234. LMC LMNI
  2235. STM SUQA
  2236. LJM SUQX RETURN
  2237. TEP SPACE 4,30
  2238. ** TEP - TERMINATE ERROR PROCESSING.
  2239. *
  2240. * THIS ROUTINE PERFORMS OPERATIONS NECESSARY TO RESTORE THE
  2241. * DRIVER TO ITS NORMAL STATE (NON-ERROR PROCESSING).
  2242. *
  2243. * ENTRY (EC) = ERROR CODE.
  2244. * (PO) = *PUT* ORDINAL.
  2245. * (RS) = RECOVERY STATUS.
  2246. * (RW) = READ/WRITE FLAG.
  2247. *
  2248. * EXIT (EC) = 0.
  2249. * (ER) = 0.
  2250. * (RC) = 0.
  2251. * (RS) = RECOVERY STATUS.
  2252. * 0 RECOVERED BY CONTROLLER.
  2253. * 1 RECOVERED BY DRIVER.
  2254. * 2 UNRESOLVED.
  2255. * 3 UNRECOVERED.
  2256. *
  2257. * USES EC, ER, IL, RC, RS, S2, T1, T2, CM - CM+4.
  2258. *
  2259. * CALLS IBM, RHR, RPI.
  2260. *
  2261. * MACROS MONITOR.
  2262.  
  2263.  
  2264. TEP4 LDN 0
  2265. STD EC CLEAR ERROR CODE
  2266. STD ER CLEAR RECOVERY IN PROGRESS FLAG
  2267. STD RC CLEAR RETRY COUNT
  2268. STM TEPA CLEAR VERIFICATION/INTERLOCK REJECT FLAG
  2269.  
  2270. TEP SUBR ENTRY/EXIT
  2271. LDD RW
  2272. SHN 1
  2273. STD T1
  2274. LDM TEPB,T1 RESTORE INSTRUCTIONS
  2275. STD T2
  2276. LDM TEPB+1,T1
  2277. STI T2
  2278. LDM TEPC,T1
  2279. STD T2
  2280. LDM TEPC+1,T1
  2281. STI T2
  2282. LDC **
  2283. TEPA EQU *-1
  2284. NJP TEP4 IF OTHER DRIVER IS HANDLING ERROR
  2285. LDD EC SAVE ERROR CODE IN CASE FUNCTION TIMEOUT
  2286. STD S2
  2287. RJM RHR RELEASE HARDWARE RESERVES
  2288. LDD S2 RESTORE ERROR CODE
  2289. STD EC
  2290. LDD RS
  2291. LMN 2
  2292. NJN TEP2 IF NOT UNRESOLVED ERROR
  2293.  
  2294. * ISSUING SUBFUNCTION *IOES* OF THE *BIOM* MONITOR FUNCTION
  2295. * CAUSES ONE OF THE FOLLOWING TO OCCUR -
  2296. * A. IF THE RECOVERY IN PROGRESS FLAG IS SET IN THE CBT
  2297. * ENTRY, THE REQUEST WILL BE TERMINATED WITH STATUS
  2298. * RETURNED TO THE PROGRAM THAT ISSUED THE REQUEST.
  2299. * IN THIS CASE IT IS THE RESPONSIBILITY OF THIS
  2300. * DRIVER TO ISSUE MESSAGES TO THE BML, ERROR LOG, JOB
  2301. * DAYFILE AND SYSTEM DAYFILE INDICATING AN
  2302. * UNRECOVERED ERROR OCCURRED.
  2303. * B. IF THE RECOVERY IN PROGRESS FLAG IS CLEAR AND AN
  2304. * ALTERNATE CHANNEL EXISTS (WITH AN ACTIVE DRIVER),
  2305. * THE REQUEST WILL BE MODIFIED TO FORCE CONTINUATION
  2306. * OF ERROR RECOVERY BY THE OTHER DRIVER.
  2307. * C. IF THE RECOVERY IN PROGRESS FLAG IS CLEAR BUT
  2308. * EITHER THERE IS NO ALTERNATE ACCESS PATH OR IT HAS
  2309. * BEEN DOWNED, THE REQUEST WILL BE MODIFIED TO FORCE
  2310. * CONTINUATION OF ERROR PROCESSING ON THIS CHANNEL.
  2311.  
  2312. LDN SETS SET SUBFUNCTION
  2313. STD CM+1
  2314. LDD PO SET *PUT* ORDINAL
  2315. STD CM+2
  2316. LDN 1
  2317. STD CM+3
  2318. LDD EC SET ERROR CODE
  2319. STD CM+4
  2320. MONITOR BIOM
  2321. STD IL CLEAR *PUT* INTERLOCK FLAG
  2322. LDD CM+1
  2323. ZJN TEP2 IF PROCESSING WILL RESUME ON OTHER CHANNEL
  2324. AOD RS SET UNRECOVERED STATUS
  2325.  
  2326. * ISSUE THE BML MESSAGE AND INCREMENT ERROR COUNTERS IF
  2327. * APPROPRIATE FOR THIS ERROR TYPE AND RESOLUTION OF THE ERROR
  2328. * HAS BEEN DETERMINED.
  2329.  
  2330. TEP2 LDD RS
  2331. LMN 2
  2332. ZJN TEP3 IF UNRESOLVED ERROR
  2333. RJM RPI RELEASE *PUT* INTERLOCK
  2334. TEP3 RJM IBM ISSUE BML MESSAGE
  2335.  
  2336. * CLEAR B-DISPLAY MESSAGE.
  2337.  
  2338. LDK ZERL
  2339. CRD CM
  2340. LDD CP
  2341. ADK MS2W
  2342. CWD CM
  2343. UJP TEP4 CONTINUE CLEARING AND RETURN
  2344.  
  2345.  
  2346. TEPB BSS 0
  2347. CON RIOC,ZJNI+RIO12-RIOC
  2348. CON WIOC,ZJNI+WIO8-WIOC
  2349.  
  2350. ERRNG RIO12-RIOC CODE DEPENDS ON VALUE
  2351. ERRNG WIO8-WIOC CODE DEPENDS ON VALUE
  2352.  
  2353. TEPC BSS 0
  2354. CON RIOA,LDNI+FCRD
  2355. CON WIOA,LDNI+FCWR
  2356. WFS SPACE 4,25
  2357. ** WFS - WAIT FOR SLAVE TO PASS THE CHANNEL.
  2358. *
  2359. * THIS ROUTINE WAITS FOR THE SLAVE TO TAKE THE CHANNEL AND
  2360. * CHECKS FOR AN ERROR STATUS FROM THE SLAVE.
  2361. *
  2362. * ENTRY (RW) = READ/WRITE FLAG.
  2363. * (SB) = FWA OF SLAVE REQUEST BUFFER.
  2364. * (SR+2) = 2 IF END OF CURRENT TRANSFER.
  2365. *
  2366. * EXIT (A) .LT. 0 IF SLAVE ENCOUNTERED ERROR.
  2367. * .EQ. 0 IF NO CONSECUTIVE REQUEST FOUND.
  2368. * .GT. 0 IF CONSECUTIVE REQUEST FOUND.
  2369. *
  2370. * USES CB, PB, CM - CM+4, CN - CN+4.
  2371. *
  2372. * CALLS CCS, IFI, IIC, RFU.
  2373.  
  2374.  
  2375. WFS5 LDD NB
  2376.  
  2377. WFS SUBR ENTRY/EXIT
  2378. RJM IIC ISSUE I/O COMPLETION REQUEST IF NECESSARY
  2379. RJM CCS CHECK FOR CONSECUTIVE REQUEST
  2380. LDD SR+2
  2381. LMN 2
  2382. NJN WFS1 IF NOT END OF CURRENT TRANSFER
  2383. LDD CB ADVANCE BUFFER POINTERS
  2384. STD PB
  2385. LDD NB
  2386. STD CB
  2387. RJM IFI INITIALIZE FOR NEXT REQUEST
  2388. LDD NB
  2389. ZJN WFS1 IF NO CONSECUTIVE REQUEST
  2390. LDD RW
  2391. ZJN WFS1 IF READ OPERATION
  2392. RJM RFU READ NEXT BLOCK FROM UEM
  2393. WFS1 LDD SB
  2394. ADK SBRQ
  2395. CRD CM
  2396. LDD CM
  2397. ZJN WFS3 IF SLAVE HAS TAKEN CHANNEL
  2398. LDK SDLY
  2399. WFS2 SBN 1
  2400. NJN WFS2 IF NOT END OF DELAY
  2401. UJN WFS1 CHECK IF SLAVE HAS CHANNEL
  2402.  
  2403. WFS3 LDD SB
  2404. ADK SBSE
  2405. SCF *,CH HANG WAITING FOR CHANNEL FLAG
  2406. CRD CN CHECK FOR SLAVE ERROR
  2407. LDD CN
  2408. ZJP WFS5 IF NO ERROR
  2409. LDD SR+2
  2410. NJN WFS4 IF NOT AT END OF CURRENT TRANSFER
  2411. LDD PB RESTORE CURRENT BUFFER ORDINAL
  2412. STD CB
  2413. LDN 0 AVOID COMPLETION OF CURRENT REQUEST
  2414. STD PB
  2415. WFS4 LDD SB
  2416. ADK SBSE
  2417. CWD CM REWRITE CLEARED SLAVE ERROR FIELD
  2418. LCN 0
  2419. LMD CN COMPLEMENT ERROR CODE
  2420. UJP WFSX RETURN
  2421. WIO SPACE 4,40
  2422. ** WIO - PERFORM WRITE I/O OPERATIONS.
  2423. *
  2424. *
  2425. * ENTRY (CB) = CURRENT BUFFER ORDINAL.
  2426. * (EP) = 0.
  2427. * (PB) = 0.
  2428. * (SB) = FWA OF SLAVE REQUEST AREA.
  2429. *
  2430. * EXIT (PB) = ORDINAL OF LAST BUFFER PROCESSED.
  2431. *
  2432. * USES CB, EC, EP, NB, PB, SR+2.
  2433. *
  2434. * CALLS AUA, ERR, FNC, GGS, IFI, RFU, RSS, WFS.
  2435. *
  2436. * MACROS CCBA.
  2437.  
  2438.  
  2439. WIO SUBR ENTRY/EXIT
  2440. RJM IFI INITIALIZE FOR I/O
  2441. RJM RFU READ DATA FROM UEM
  2442. WIO1 LDN FCWR ISSUE WRITE FUNCTION
  2443. * LDN FCCO (CONTROLLER ERROR RECOVERY IN PROGRESS)
  2444. WIOA EQU *-1
  2445. RJM FNC
  2446. PJN WIO2 IF NO ERROR
  2447. AOD EP SET PREVIOUS SECTOR ERROR FLAG
  2448. UJN WIO3 CALL ERROR PROCESSOR
  2449.  
  2450. WIO2 LDD SB POST SLAVE REQUEST
  2451. ADK SBRQ
  2452. CWD SR
  2453. LDD BS OUTPUT DATA
  2454. OAM BUFF,CH
  2455. * OAM BUFF+HLEN,CH (SECOND HALF OF SECTOR)
  2456. WIOB EQU *-1
  2457. ZJN WIO4 IF NO DATA TRANSFER ERROR
  2458. LCN IDTE SET *INCOMPLETE DATA TRANSFER* ERROR CODE
  2459. STD EC
  2460. RJM RSS RESET SLAVE TO IDLE LOOP
  2461. WIO3 RJM ERR CALL ERROR PROCESSOR
  2462.  
  2463. WIO4 CCF *,CH PASS CHANNEL TO SLAVE
  2464. AOD SR+2 SET *CHANNEL DISCONNECT* FLAG
  2465. LMN 2
  2466. ZJN WIO7 IF LAST BLOCK TRANSFERRED
  2467. RJM AUA ADVANCE MASTER/SLAVE UEM ADDRESSES
  2468. RJM RFU READ DATA FROM UEM
  2469. RJM WFS WAIT FOR SLAVE COMPLETION
  2470. PJP WIO2 IF SLAVE DID NOT ENCOUNTER ERROR
  2471. WIO4.1 STD EC SET ERROR CODE
  2472. WIO5 UJN WIO3 CALL ERROR PROCESSOR
  2473.  
  2474. WIO7 RJM WFS WAIT FOR SLAVE
  2475. MJN WIO4.1 IF SLAVE ENCOUNTERED ERROR
  2476. ZJN WIO8 IF NO CONSECUTIVE REQUEST
  2477. * UJN WIO8 (ERROR RECOVERY IN PROGRESS)
  2478. WIOC EQU *-1
  2479. LDN 0 CLEAR NEXT BUFFER ORDINAL
  2480. STD NB
  2481. LJM WIO1 PROCESS NEXT REQUEST
  2482.  
  2483. WIO8 RJM GGS GET GENERAL STATUS
  2484. ZJP WIOX IF NO ERROR
  2485. LDD PB BACK UP TO PREVIOUS BUFFER
  2486. STD CB
  2487. LDN 0 AVOID BUFFER COMPLETION
  2488. STD PB
  2489. UJN WIO5 CALL ERROR PROCESSOR
  2490. WTU SPACE 4,25
  2491. ** WTU - WRITE TO UEM.
  2492. *
  2493. * THIS ROUTINE WRITES THE BLOCK OF DATA TO UEM AFTER THE DISK
  2494. * READ. WHEN WRITING THE FIRST DATA BLOCK ROUTINE *SLB* IS
  2495. * CALLED TO STORE LINKAGE BYTES AND SHORT PRU FLAGS IN THE CBT
  2496. * ENTRY.
  2497. *
  2498. * ENTRY (BL) = LENGTH OF DATA BLOCK IN CM WORDS.
  2499. * (SR+2) = 0 IF FIRST BLOCK OF SECTOR.
  2500. * (UA - UA+1) = UEM ADDRESS.
  2501. * (BUFF) = HEADER AND DATA.
  2502. *
  2503. * USES CM - CM+4, T1 - T4.
  2504. *
  2505. * CALLS SLB.
  2506.  
  2507.  
  2508. WTU SUBR ENTRY/EXIT
  2509. LDD SR+2
  2510. NJN WTU2 IF NOT FIRST BLOCK OF SECTOR
  2511. ERRNZ PAD1 CODE DEPENDS ON VALUE
  2512. STD T1
  2513. LDC BUFF+3-4
  2514. STD T2
  2515.  
  2516. * GET SHORT PRU FLAGS, VALID DATA FLAGS AND LINKAGE BYTES FROM
  2517. * SECTOR HEADER AND STORE THEM IN THE CBT ENTRY.
  2518.  
  2519. WTU1 LDN 4 ADVANCE SECTOR BUFFER ADDRESS
  2520. RAD T2
  2521. CCBA PAD1
  2522. ADD T1
  2523. CRD CM
  2524. STD T4
  2525. SHN -14
  2526. STD T3
  2527. LDI T2 STORE SHORT PRU AND VALID DATA FLAGS
  2528. STD CM+3
  2529. AOD T2
  2530. LDI T2 STORE LINKAGE BYTE
  2531. STD CM+4
  2532. LDD T3
  2533. SHN 14
  2534. LMD T4
  2535. CWD CM
  2536. AOD T1 INCREMENT WORD INDEX
  2537. LMN PAD4+1
  2538. NJN WTU1 IF NOT FINISHED
  2539.  
  2540. * WRITE DATA TO UEM.
  2541.  
  2542. WTU2 SRD T2 SAVE R-REGISTER
  2543. LRD UA
  2544. LDC 400000 USE R-REGISTER FOR WRITE ADDRESS
  2545. CWM BUFF+HLEN,BL WRITE DATA TO UEM
  2546. LRD T2 RESTORE R-REGISTER
  2547. UJP WTUX RETURN
  2548. 1XM SPACE 4,10
  2549. * COMMON DECKS.
  2550.  
  2551.  
  2552. *CALL COMPIMB
  2553. *CALL COMPC2D
  2554. 1XM SPACE 4
  2555. USE PRESET DEFINE LITERAL BLOCK BEFORE PRESET
  2556. BUFF EQU * DATA BUFFER
  2557. ERRPL BUFF+DLEN+HLEN-10000 BUFFER OVERFLOWS PP
  2558. PRS TITLE PRESET MASTER PROGRAM.
  2559. PRS SPACE 4,10
  2560. ** PRS - PRESET *1XM*.
  2561. *
  2562. * EXIT (BL) = MASTER BLOCK LENGTH IN CM WORDS.
  2563. * (CC) = 0.
  2564. * (CS) = 1.
  2565. * (EC) = 0.
  2566. * (EP) = 0.
  2567. * (ER) = 0.
  2568. * (FU - FU+1) = UEM BASE ADDRESS.
  2569. * (IL) = 0.
  2570. * (PB) = 0.
  2571. * (RC) = 0.
  2572. * (TI) = 0.
  2573. * (BMLCR) = 6/ CHANNEL, 6/0.
  2574. * (BMLMF) = MAINFRAME ID.
  2575. * (BMLPP) = 6/ PP NUMBER, 6/ CHANNEL.
  2576. * (CCRA) = WORD ADDRESS OF CHANNEL TABLE ENTRY.
  2577. * (CCRB) = BYTE ADDRESS OF CHANNEL TABLE ENTRY + LDDI.
  2578. * (CRQA) = FWA OF PP EXCHANGE PACKAGE.
  2579. * (CRQB) = FWA OF PP EXCHANGE PACKAGE.
  2580. * (CRQC) = CPU EXCHANGE INSTRUCTION (MXN).
  2581. * (CRQD) = FIRST WORD OF PP EXCHANGE PACKAGE.
  2582. * (MSD) = 0.
  2583. * (SCDA) = WORD ADDRESS OF CONTROLWARE TABLE ENTRY.
  2584. * (SCDB) = BIT NUMBER OF DRIVER DROP FLAG.
  2585. * ALL *CCBA* REFERENCES TO *CBT* PLUGGED.
  2586. * ALL *CPTA* REFERENCES TO *PUT* PLUGGED.
  2587. * ALL *EMBE* REFERENCES TO *EMB* PLUGGED.
  2588. *
  2589. * USES BL, CC, CS, EC, EP, ER, IL, PB, RC, TI, CM - CM+4,
  2590. * CN - CN+4, T0 - T7.
  2591. *
  2592. * CALLS DFM, RCH, SSL.
  2593. *
  2594. * MACROS CPTA, MONITOR, SETMS, SFA.
  2595.  
  2596.  
  2597. PRS SUBR ENTRY/EXIT
  2598. SETMS NODRIVER FORCE DRIVER LOAD ON NEXT *SETMS*
  2599. LDK NCPL VALIDATE CALLER
  2600. CRD CM
  2601. AOD CM+1 NUMBER OF CONTROL POINTS
  2602. SHN 7
  2603. LMD CP
  2604. ZJN PRS1 IF SYSTEM CONTROL POINT
  2605. LDC =C* 1XM - UNAUTHORIZED CALL.*
  2606. RJM DFM ISSUE DAYFILE MESSAGE
  2607. MONITOR ABTM ABORT CONTROL POINT
  2608. LJM PPR RETURN
  2609.  
  2610. PRS1 LDD IR+3
  2611. ZJN PRS2 IF MASTER
  2612. EXECUTE 2XM,PPFW-5
  2613.  
  2614. PRS2 STD CC CLEAR COMPLETION REQUEST COUNT
  2615. STD CS CLEAR CHANNEL STATUS
  2616. STD EC CLEAR ERROR CODE
  2617. STD EP CLEAR ERROR ON PREVIOUS SECTOR FLAG
  2618. STD ER CLEAR RECOVERY IN PROGRESS FLAG
  2619. STD IL CLEAR *PUT* INTERLOCK FLAG
  2620. STD RC CLEAR RETRY COUNT
  2621. STD TI INITIALIZE *TPOR* INDEX
  2622. LDK DLEN/5 SET MASTER BLOCK SIZE
  2623. STD BL
  2624. LDD IR+4 CHANNEL NUMBER
  2625. STM BMLPP
  2626.  
  2627. * PLUG CHANNEL INSTRUCTIONS.
  2628.  
  2629. LDC PRSD SET FWA OF CHANNEL TABLE
  2630. STD T1
  2631. PRS3 LDI T1
  2632. ZJN PRS4 IF END OF CHANNEL TABLE
  2633. STD T2
  2634. LDD IR+4 CHANNEL
  2635. RAI T2 STORE CHANNEL IN INSTRUCTION
  2636. AOD T1 ADVANCE CHANNEL TABLE POINTER
  2637. UJN PRS3 CONTINUE
  2638.  
  2639. * REQUEST CHANNEL AND SET CHANNEL FLAG.
  2640.  
  2641. PRS4 RJM RCH REQUEST CHANNEL
  2642. ZJN PRS4 IF CHANNEL NOT ASSIGNED
  2643.  
  2644. * PLUG EXCHANGE PACKAGE LOCATIONS.
  2645.  
  2646. PRS5 LDK PXPP READ PPU STATUS
  2647. CRD CN
  2648. ADN 1
  2649. CRM CRQD,ON READ FIRST WORD OF PP XP
  2650. AOM CRQD+4
  2651. LDK PPCP READ PP COMMUNICATIONS AREA POINTER
  2652. CRD CM
  2653. ADK MMFL-PPCP
  2654. CRD T1
  2655. LDD T1 SAVE MAINFRAME ID
  2656. STM BMLMF
  2657. LDD IA GET ((PP NUMBER - 2) * 10B)
  2658. SBD CM+4
  2659. SBN 20
  2660. SHN -3
  2661. STD T1 PP NUMBER - 2
  2662. SBN 10
  2663. MJN PRS5.1 IF PP 0-11
  2664. ADN 6 ADJUST FOR PP 20-31
  2665. PRS5.1 ADN 12
  2666. SHN 6
  2667. RAM BMLPP SET PP NUMBER
  2668. SHN 6
  2669. STM BMLCR SET RECOVERY CHANNEL
  2670. LDD T1 PP NUMBER - 2
  2671. SHN 4
  2672. ADD T1 (PP NUMBER - 2) * 21B
  2673. RAD CN+4 SET EXCHANGE ADDRESS
  2674. STM CRQA
  2675. STM CRQB
  2676. SHN -14
  2677. RAD CN+3
  2678. RAM CRQA-1
  2679. STM CRQB-1
  2680. LDD CN+4 SET *MA* ADDRESS
  2681. ADN 6
  2682. STM CRQE
  2683. SHN -14
  2684. ADD CN+3
  2685. RAM CRQE-1
  2686. LDD IR+4
  2687. STD T2
  2688. LDK ACPL CHECK CPU STATUS
  2689. CRD CM
  2690. LCN 0
  2691. STD T1 PRESET CHANNEL TABLE WORD INDEX
  2692. LDN 60D PRESET BIT POSITION FOR LOAD REQUEST
  2693. STD T3
  2694. LDD CM
  2695. SHN 21-13
  2696. PJN PRS6 IF CPU 0 ON
  2697. AOM CRQC SET EXCHANGE TO CPU 1
  2698. LDD HN
  2699. RAM CRQD+3 SET (A0) TO 1
  2700.  
  2701. * PLUG CHANNEL TABLE ADDRESSES.
  2702.  
  2703. PRS6 AOD T1 ADVANCE CM TABLE INDEX
  2704. LCN 5
  2705. RAD T2
  2706. PJN PRS6 IF NOT TO PROPER INDEX
  2707. ADN 5
  2708. RAM CCRB PRESET CHANNEL TABLE BYTE INDEX
  2709. LPN 7 BYTE ADDRESS
  2710. STD T2
  2711. PRS7 LCN 12D
  2712. RAD T3 DECREMENT POSITION
  2713. SOD T2
  2714. PJN PRS7 IF NOT TO PROPER POSITION
  2715. LDD T3 BIT POSITION
  2716. ADN 13 ADD OFFSET WITHIN BYTE
  2717. SHN 6
  2718. SBK 200
  2719. STM SCDB+1
  2720. LDK CHTP CHANNEL TABLE(S) POINTER
  2721. CRD CM
  2722. LDD CM+2 FWA OF CHANNEL TABLE
  2723. SHN 14
  2724. LMD CM+3
  2725. ADD T1 ADD WORD INDEX
  2726. STM CCRA CM ADDRESS OF CHANNEL TABLE ENTRY
  2727. SHN -14
  2728. RAM CCRA-1
  2729. LDD CM+2 COMPUTE FWA OF CONTROLWARE TABLE
  2730. SHN 14
  2731. LMD CM+3
  2732. ADN CTALL*2
  2733. ADD T1 ADD WORD INDEX
  2734. STM SCDA
  2735. SHN -14
  2736. RAM SCDA-1
  2737.  
  2738. * SET UEM BASE ADDRESS.
  2739.  
  2740. LDK UEML
  2741. CRD CM
  2742. LDD CM
  2743. SHN 21-2
  2744. STD FU
  2745. SHN 2-21
  2746. SHN 11
  2747. STD FU+1
  2748.  
  2749. * PLUG *EMB* ADDRESSES.
  2750.  
  2751. LDK EMBP FETCH *EMB* POINTER
  2752. CRD CM
  2753. .CM1 EQU CM+1
  2754. LDC .CM1*10000+PRSC
  2755. RJM STA SET *EMB* ADDRESSES
  2756.  
  2757. * READ BUFFERED I/O TABLE POINTERS.
  2758.  
  2759. LDK BIOL
  2760. CRD CM
  2761. LDD CM+1
  2762. SHN 14
  2763. LMD CM+2
  2764. ADK CCTP GET *CCT* DESCRIPTOR
  2765. CRD CA
  2766. ADK PUTP-CCTP GET *PUT* DESCRIPTOR
  2767. CRD T3
  2768. ADN CBTP-PUTP GET *CBT* DESCRIPTOR
  2769. CRD CN
  2770. AOD T3
  2771.  
  2772. * PLUG *CCT* ADDRESS.
  2773.  
  2774. LDD IR+2 SET ADDRESS OF *CCT*
  2775. SHN CCTLS-6
  2776. ADD CA+4
  2777. RAM OVIA+1
  2778. STM RPIA+1
  2779. SHN -14
  2780. ADD CA+3
  2781. RAM OVIA
  2782. STM RPIA
  2783.  
  2784. * PLUG *CBT* ADDRESSES.
  2785.  
  2786. .CN3 EQU CN+3
  2787. LDC .CN3*10000+PRSA
  2788. RJM STA SET *CBT* ADDRESSES
  2789.  
  2790. * PLUG *PUT* ADDRESSES.
  2791.  
  2792. LDC T6*10000+PRSB
  2793. RJM STA SET *PUT* ADDRESSES
  2794.  
  2795. * BUILD *TPOR* TABLE.
  2796.  
  2797. PRS11 STD T1 INITIALIZE *TPOR* INDEX
  2798. PRS12 SOD T3 DECREMENT *PUT* ORDINAL
  2799. ZJP PRS14 IF SCAN COMPLETE
  2800. CPTA UNCT,A READ *PUT* ENTRY
  2801. CRD CM
  2802. SFA EST,CM+1 READ EST ENTRY
  2803. ADK EQDE
  2804. CRD CM
  2805. LDN 0 INITIALIZE EST CHANNEL BYTE INDEX
  2806. STD T2
  2807. LDD CM+1
  2808. LPN 77
  2809. LMD IR+4
  2810. ZJN PRS13 IF DEVICE SUPPORTED BY THIS DRIVER
  2811. LDD CM+2
  2812. ZJN PRS12 IF SINGLE ACCESS DEVICE
  2813. LPN 77
  2814. LMD IR+4
  2815. NJN PRS12 IF DEVICE NOT SUPPORTED BY THIS DRIVER
  2816. AOD T2 INCREMENT CHANNEL BYTE INDEX
  2817. PRS13 AOD T1 INCREMENT *TPOR* INDEX
  2818. ERRNZ TPORE-1 CODE DEPENDS ON VALUE
  2819. LMK MAXU+1
  2820. ZJN PRS13.1 IF TOO MANY UNITS ON CHANNEL
  2821. LDD T3 POSITION *PUT* ORDINAL
  2822. SHN 1
  2823. LMD T2 SET CHANNEL BYTE INDEX
  2824. STM TPOR-1,T1
  2825. UJP PRS12 CONTINUE SCAN
  2826.  
  2827. PRS13.1 LDC =C* 1XM - TOO MANY UNITS ON CHANNEL.*
  2828. RJM DFM ISSUE SYSTEM DAYFILE MESSAGE
  2829. MONITOR HNGM
  2830. UJN * HANG
  2831.  
  2832. PRS14 RJM SSL START SLAVE
  2833. LDN 0 CLEAR PREVIOUS BUFFER ORDINAL
  2834. STD PB
  2835. LJM PRSX RETURN
  2836. 1XM SPACE 4
  2837. PRSA BSS 0 TABLE OF *CBT* ADDRESSES
  2838. TCBT HERE
  2839. CON 0 TERMINATE TABLE
  2840.  
  2841. PRSB BSS 0 TABLE OF *PUT* ADDRESSES
  2842. TPUT HERE
  2843. CON 0 TERMINATE TABLE
  2844.  
  2845. PRSC BSS 0 TABLE OF *EMB* ADDRESSES
  2846. QUAL COMPIMB
  2847. TEMB HERE
  2848. QUAL *
  2849. CON 0 TERMINATE TABLE
  2850.  
  2851. PRSD BSS 0 TABLE OF CHANNEL INSTRUCTION ADDRESSES
  2852. CHTB
  2853. SSL SPACE 4,20
  2854. ** SSL - START SLAVE.
  2855. *
  2856. * SET UP SLAVE INPUT REGISTER.
  2857. * CALL MONITOR TO START SLAVE.
  2858. * FIND SLAVE PP COMMUNICATION AREA.
  2859. * WAIT FOR SLAVE TO INITIALIZE.
  2860. *
  2861. * ENTRY (IR - IR+4) = INPUT REGISTER.
  2862. *
  2863. * EXIT (SB) = SLAVE REQUEST BUFFER ADDRESS.
  2864. *
  2865. * USES IR+2, IR+3, T1 - T7, CM - CM+4.
  2866. * CALLS C2D.
  2867. *
  2868. * MACROS DELAY, MONITOR.
  2869.  
  2870.  
  2871. SSL SUBR ENTRY/EXIT
  2872. LDD IR+4 STORE CHANNEL NUMBER IN MESSAGE
  2873. RJM C2D
  2874. STM SSLA+7
  2875. LDD CP ISSUE WAIT MESSAGE
  2876. ADK MS2W
  2877. CWM SSLA,TR
  2878. LDN 0
  2879. STD IR+2
  2880. LDN 1
  2881. STD IR+3 SET SLAVE FLAG
  2882. LDD MA
  2883. CWD IR PUT SLAVE INPUT REGISTER IN MESSAGE BUFFER
  2884. SSL1 LDN 0
  2885. STD CM+1 CLEAR MONITOR REPLY BYTE
  2886. MONITOR RPPM START SLAVE
  2887. LDD CM+1
  2888. NJN SSL2 IF SLAVE STARTED
  2889. DELAY
  2890. UJN SSL1 RETRY SLAVE STARTUP
  2891.  
  2892. SSL2 LDK PPUL
  2893. CRD CM GET NUMBER OF PPS
  2894. LDD CM+2
  2895. STD T1 SAVE NUMBER OF PPS
  2896. LDK PPCP
  2897. CRD T2 GET FWA OF PP COMMUNICATION AREA
  2898. SSL3 DELAY GIVE PP A CHANCE TO INITIALIZE
  2899. LDN 2
  2900. STD T7 START SEARCH WITH PP 2
  2901. SSL4 LDD T7
  2902. SHN 3
  2903. ADD T2+4
  2904. STD T2
  2905. CRD CM READ PP INPUT REGISTER
  2906. LDD CM
  2907. LMD IR
  2908. NJN SSL5 IF NOT *1XM*
  2909. LDD CM+1
  2910. LMD IR+1
  2911. NJN SSL5 IF NOT *1XM*
  2912. LDD CM+4
  2913. LMD IR+4
  2914. NJN SSL5 IF NOT PROCESSING SAME CHANNEL
  2915. LDD CM+3
  2916. NJN SSL6 IF SLAVE FOUND
  2917. SSL5 AOD T7 CHECK NEXT PP
  2918. SBD T1
  2919. ZJN SSL3 IF ALL PPS CHECKED
  2920. UJN SSL4 CHECK NEXT PP
  2921.  
  2922. SSL6 LDD CM+2
  2923. NJN SSL7 IF SLAVE IS INITIALIZED
  2924. DELAY
  2925. LDD T2
  2926. CRD CM READ PP INPUT REGISTER
  2927. UJN SSL6 WAIT FOR SLAVE TO START
  2928.  
  2929. SSL7 LDD T2
  2930. ADN 2
  2931. STD SB SAVE SLAVE REQUEST BUFFER ADDRESS
  2932. LDD CP CLEAR WAIT MESSAGE
  2933. ADK MS2W
  2934. CWD IR+2
  2935. LJM SSLX RETURN
  2936.  
  2937.  
  2938. SSLA DATA C*WAITING FOR CH00 SLAVE PP.*
  2939. STA SPACE 4,10
  2940. ** STA - SET TABLE ADDRESSES.
  2941. *
  2942. * ENTRY (A) = 6/ TP, 12/ TA
  2943. * TP = TABLE POINTER.
  2944. * TA = INSTRUCTION TABLE ADDRESS.
  2945. *
  2946. * EXIT (A) = 0.
  2947. *
  2948. * USES T0, T1, T2.
  2949.  
  2950.  
  2951. STA1 STD T2 SET INSTRUCTION ADDRESS
  2952. LDM 1,T1
  2953. RAM 1,T2 SET LOWER 12 BITS OF ADDRESS
  2954. SHN -14
  2955. ADI T1 SET UPPER 6 BITS OF ADDRESS
  2956. LPN 37
  2957. RAI T2
  2958. AOD T0 ADVANCE INSTRUCTION LIST
  2959. STA2 LDI T0
  2960. NJN STA1 IF NOT END OF TABLE
  2961.  
  2962. STA SUBR ENTRY/EXIT
  2963. STD T0
  2964. SHN -14 SET ADDRESS POINTER
  2965. STD T1
  2966. UJN STA2 ENTER LOOP
  2967. 1XM SPACE 4
  2968. OVERFLOW
  2969.  
  2970. USE *
  2971.  
  2972. TTL 1XM/2XM - 7195/895 (CCC) DRIVER.
  2973. 2XM TITLE SLAVE DRIVER.
  2974. QUAL 2XM
  2975. IDENT 2XM,SXMX
  2976. *COMMENT 1XM - SLAVE FOR THE 7165/895 DRIVER.
  2977. COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
  2978. 2XM EJECT
  2979. ORG PPFW
  2980. SXM SUBR ENTRY
  2981. RJM PRS PRESET
  2982. 2XM SPACE 4
  2983. ** SLV - SLAVE MAIN PROGRAM.
  2984.  
  2985.  
  2986. SLV LDN 0 CLEAR ERROR CODE
  2987. STD EC
  2988. RJM WFR WAIT FOR REQUEST
  2989. LMK SLRD
  2990. ZJN SLV1 IF READ REQUEST
  2991. LMK SLWR&SLRD
  2992. ZJN SLV2 IF WRITE REQUEST
  2993. LDK DPPM DROP PP
  2994. RJM FTN
  2995. LJM PPR RETURN TO IDLE LOOP
  2996.  
  2997. SLV1 RJM RPR PROCESS READ REQUEST
  2998. UJN SLV PROCESS NEXT FUNCTION
  2999.  
  3000. SLV2 RJM WPR PROCESS WRITE REQUEST
  3001. UJN SLV PROCESS NEXT FUNCTION
  3002. PER SPACE 4,20
  3003. ** PER - POST ERROR MESSAGE FOR MASTER.
  3004. *
  3005. * THIS ROUTINE STORES THE ERROR CODE IN THE SLAVE ERROR
  3006. * BUFFER FOR THE MASTER TO SEE.
  3007. *
  3008. * ENTRY (A) = COMPLEMENTED ERROR CODE.
  3009. *
  3010. * EXIT (EC) = ERROR CODE.
  3011. *
  3012. * USES EC, CM - CM+4.
  3013.  
  3014.  
  3015. PER SUBR ENTRY/EXIT
  3016. LMC 777777
  3017. STD EC STORE ERROR CODE
  3018. LDK ZERL
  3019. CRD CM
  3020. LDD EC
  3021. STD CM PLUG ERROR CODE
  3022. LDD MA
  3023. ADK SBSE
  3024. CWD CM POST ERROR IN SLAVE ERROR BUFFER
  3025. UJN PERX RETURN
  3026. RPR SPACE 4,30
  3027. ** RPR - READ REQUEST PROCESSOR.
  3028. *
  3029. * ENTRY (BS) = BLOCK SIZE.
  3030. * (SR - SR+4) = READ REQUEST FROM MASTER.
  3031. *
  3032. * USES CM, T2 - T3.
  3033. *
  3034. * CALLS PER, WFC.
  3035.  
  3036.  
  3037. RPR SUBR ENTRY/EXIT
  3038. RJM WFC WAIT FOR CHANNEL
  3039. NJN RPRX IF MASTER ENCOUNTERED AN ERROR
  3040. LDC BUFLGTH INPUT DATA BLOCK
  3041. IAM BUFFER,CH
  3042. ZJN RPR1 IF ALL DATA TRANSFERRED
  3043. LCN IDTE SET *DATA TRANSFER* ERROR CODE
  3044. UJN RPR3 CONTINUE
  3045.  
  3046. RPR1 LDD SR+2
  3047. ZJN RPR4 IF NOT TIME TO DISCONNECT
  3048. SFM RPR2,CH IF CHANNEL PARITY ERROR
  3049. DCN CH+40
  3050. UJN RPR4 CONTINUE
  3051.  
  3052. RPR2 LCN CHPE SET *CHANNEL PARITY* ERROR CODE
  3053. RPR3 RJM PER POST ERROR TO MASTER
  3054. RPR4 LDD MA SET READ INCOMPLETE
  3055. ADK SBRC
  3056. CWD CM
  3057. CCF *,CH PASS CHANNEL TO MASTER
  3058. LDD EC
  3059. NJN RPR5 IF ERROR ENCOUNTERED
  3060. SRD T2 SAVE R-REGISTER
  3061. LRD SR+3 LOAD R-REGISTER WITH UEM ADDRESS
  3062. LDC 400000 USE R-REGISTER FOR WRITE ADDRESS
  3063. CWM BUFFER,BS WRITE BLOCK TO UEM
  3064. LRD T2
  3065. RPR5 AOD CM SET READ COMPLETE
  3066. LDD MA
  3067. ADK SBRC
  3068. CWD CM POST COMPLETE MESSAGE TO MASTER
  3069. UJP RPRX RETURN
  3070. WFC SPACE 4,25
  3071. ** WFC - WAIT FOR CHANNEL FLAG.
  3072. *
  3073. * THIS ROUTINE OBTAINS CONTROL OF THE CHANNEL AND NOTIFIES
  3074. * THE MASTER THAT IT HAS THE CHANNEL.
  3075. *
  3076. * ENTRY (CM) = 0.
  3077. *
  3078. * EXIT (A) = 0 IF READY FOR I/O.
  3079. * .NE. 0 IF MASTER REPORTED ERROR.
  3080. * (CM) = 0.
  3081. *
  3082. * USES CM - CM+4.
  3083.  
  3084.  
  3085. WFC SUBR ENTRY/EXIT
  3086. LDD MA
  3087. ADK SBRQ
  3088. SCF *,CH GET CHANNEL FLAG
  3089. CWD CM INDICATE CHANNEL TAKEN
  3090. ADK SBME-SBRQ
  3091. CRD CM READ MASTER ERROR FLAG WORD
  3092. LDD CM
  3093. ZJN WFCX IF NO ERROR ENCOUNTERED
  3094. LDN 0
  3095. STD CM CLEAR MASTER ERROR FLAG
  3096. LDD MA
  3097. ADK SBME
  3098. CWD CM UPDATE MASTER ERROR FLAG WORD
  3099. CCF *,CH RETURN CHANNEL TO MASTER
  3100. UJN WFCX RETURN
  3101. WFR SPACE 4,20
  3102. ** WFR - WAIT FOR REQUEST FROM MASTER.
  3103. *
  3104. *
  3105. * EXIT (A) = SLAVE REQUEST TO PROCESS.
  3106. * (CM) = 0.
  3107. * (SR - SR+4) = REQUEST BUFFER.
  3108. *
  3109. * USES CM - CM+4, SR - SR+4.
  3110.  
  3111.  
  3112. WFR SUBR ENTRY/EXIT
  3113. LDK ZERL
  3114. CRD CM
  3115. WFR1 LDD MA
  3116. ADK SBRQ
  3117. CRD SR READ SLAVE REQUEST BUFFER
  3118. LDD SR
  3119. NJN WFRX IF REQUEST TO PROCESS
  3120. LDK SDLY
  3121. WFR2 SBN 1
  3122. NJN WFR2 IF DELAY NOT FINISHED
  3123. UJN WFR1 LOOK FOR REQUEST
  3124. WPR SPACE 4,30
  3125. ** WPR - WRITE REQUEST PROCESSOR.
  3126. *
  3127. * ENTRY (BS) = BLOCK SIZE.
  3128. * (SR - SR+4) = WRITE REQUEST FROM MASTER.
  3129. *
  3130. * USES T2 - T3.
  3131. *
  3132. * CALLS PER, WFC.
  3133.  
  3134.  
  3135. WPR SUBR ENTRY/EXIT
  3136. SRD T2 SAVE R-REGISTER
  3137. LRD SR+3 LOAD UEM ADDRESS INTO R-REGISTER
  3138. LDC 400000 USE R-REGISTER FOR READ ADDRESS
  3139. CRM BUFFER,BS READ BLOCK FROM UEM
  3140. LRD T2 RESTORE R-REGISTER
  3141. RJM WFC WAIT FOR CHANNEL
  3142. NJN WPRX IF MASTER ERROR ENCOUNTERED
  3143. LDC BUFLGTH OUTPUT DATA BLOCK
  3144. OAM BUFFER,CH
  3145. ZJN WPR1 IF DATA TRANSFER COMPLETE
  3146. LCN IDTE SET *DATA TRANSFER* ERROR CODE
  3147. UJN WPR3 POST ERROR TO MASTER
  3148.  
  3149. WPR1 LDD SR+2
  3150. ZJN WPR5 IF NOT TIME TO DISCONNECT CHANNEL
  3151. WPR2 EJM WPR4,CH IF LAST BYTE ACCEPTED
  3152. ADN 1
  3153. NJN WPR2 IF NOT TIMEOUT
  3154. LCN CHFE SET *CHANNEL FAILURE* ERROR CODE
  3155. WPR3 RJM PER POST ERROR
  3156. WPR4 DCN CH+40 DISCONNECT CHANNEL
  3157. WPR5 CCF *,CH PASS CHANNEL TO MASTER
  3158. UJP WPRX RETURN
  3159. 2XM SPACE 4
  3160. USE PRESET DEFINE LITERALS BLOCK BEFORE PRESET
  3161.  
  3162. BUFLGTH EQU SPRU*100*5 BUFFER LENGTH
  3163. BUFFER EQU 10000-BUFLGTH
  3164.  
  3165. ERRNG BUFFER-* CODE OVERFLOWS INTO BUFFER AREA
  3166.  
  3167. PRS TITLE PRESET SLAVE PROGRAM.
  3168. ** PRS - PRESET SLAVE FOR PROCESSING.
  3169. *
  3170. * ENTRY (IR - IR+4) = PP INPUT REGISTER.
  3171. *
  3172. * EXIT (BS) = BUFFER LENGTH IN CM WORDS.
  3173. * (IR+2) = 1.
  3174. *
  3175. * USES BS, IR+2, T1, T2, CM - CM+4.
  3176.  
  3177.  
  3178. PRS SUBR ENTRY/EXIT
  3179.  
  3180. * PLUG CHANNEL INSTRUCTIONS.
  3181.  
  3182. LDC PRSA SET FWA OF CHANNEL TABLE
  3183. STD T1
  3184. PRS1 LDI T1
  3185. ZJN PRS2 IF END OF CHANNEL TABLE
  3186. STD T2
  3187. LDD IR+4 CHANNEL
  3188. RAI T2 STORE CHANNEL IN INSTRUCTION
  3189. AOD T1 ADVANCE CHANNEL TABLE POINTER
  3190. UJN PRS1 CONTINUE
  3191.  
  3192. PRS2 LDK ZERL
  3193. CRD CM
  3194. LDD MA
  3195. ADK SBRQ
  3196. CWD CM CLEAR SLAVE REQUEST BUFFER
  3197. ADK SBSE-SBRQ
  3198. CWD CM CLEAR SLAVE ERROR BUFFER
  3199. ADK SBME-SBSE
  3200. CWD CM CLEAR MASTER ERROR BUFFER
  3201. AOD CM SET READ COMPLETE FLAG
  3202. LDD MA
  3203. ADK SBRC
  3204. CWD CM
  3205. AOD IR+2 SET SLAVE STARTED FLAG
  3206. LDD IA TELL MASTER SLAVE IS UP
  3207. CWD IR
  3208. LDK BUFLGTH/5 SET BLOCK LENGTH
  3209. STD BS
  3210. UJP PRSX RETURN
  3211. TCHA SPACE 4,10
  3212. PRSA BSS 0 TABLE OF CHANNEL INSTRUCTION ADDRESSES
  3213. CHTB
  3214. 2XM SPACE 4
  3215. OVERFLOW
  3216.  
  3217. USE *
  3218.  
  3219. TTL 1XM/2XN - 7195/895 (CCC) DRIVER.
  3220. 2XN TITLE RELOAD CONTROLWARE.
  3221. QUAL 2XN
  3222. IDENT 2XN,RLCX
  3223. *COMMENT 1XM - RELOAD CONTROLWARE FOR THE 7165/895 DRIVER.
  3224. COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
  3225. 2XN SPACE 4,10
  3226. ORG BUFF+505B
  3227. RLC SPACE 4,10
  3228. ** RLC - RELOAD CONTROLWARE.
  3229. *
  3230. * EXIT (A) .EQ. 0 IF RELOAD SUCCESSFUL.
  3231. * (A) .NE. 0 IF RELOAD ATTEMPT FAILED.
  3232.  
  3233.  
  3234. RLC SUBR ENTRY/EXIT
  3235. RJM PRS PRESET
  3236.  
  3237. * CHECK FOR SYSEDIT IN PROGRESS AND DELAY IF NECESSARY.
  3238.  
  3239. RLC1 LDK PLDP CHECK PERIPHERAL DIRECTORY POINTER
  3240. CRD CM
  3241. LDD CM
  3242. ADD CM+1
  3243. NJN RLC2 IF SYSEDIT NOT IN PROGRESS
  3244. DELAY
  3245. UJN RLC1 RECHECK SYSEDIT IN PROGRESS
  3246.  
  3247. * FIND CONTROLWARE.
  3248.  
  3249. RLC2 LDN ZERL
  3250. CRD CM
  3251. LDD MA PUT CONTROLWARE ID IN MESSAGE BUFFER
  3252. CWM RLCA,ON
  3253. MONITOR SCDM SEARCH CENTRAL DIRECTORY
  3254. LDD CM+3
  3255. SHN 14
  3256. LMD CM+4
  3257. CRD CM READ *PST* ENTRY
  3258. LDD CM+1
  3259. SHN 21-12
  3260. PJN RLC3 IF NOT CM RESIDENT
  3261. LDD CM+3 GET ADDRESS OF *RCL* ENTRY
  3262. SHN 14
  3263. LMD CM+4
  3264. ADN 1
  3265. CRD CN READ 5200 RECORD HEADER
  3266. ADN 1 SET FWA OF 5200 RECORD DATA
  3267. STD CM+4
  3268. SHN -14
  3269. STD CM+3
  3270. LCN 1 ADJUST WORD COUNT FOR HEADER
  3271. RAD CN+4
  3272.  
  3273. * LOAD CONTROLWARE.
  3274.  
  3275. LDK FCAL AUTOLOAD FUNCTION
  3276. RJM FNC ISSUE FUNCTION AND ACTIVATE CHANNEL
  3277. ZJN RLC4 IF NO ERROR ON FUNCTION
  3278. RLC3 DCN CH+40
  3279. UJP RLCX RETURN WITH ERROR INDICATION
  3280.  
  3281. RLC4 LDD CN+4
  3282. RLC5 SBD HN
  3283. MJN RLC6 IF LESS THAN 100B WORDS LEFT
  3284. LDN 0
  3285. RLC6 ADD HN
  3286. STD T1
  3287. LDD CM+3
  3288. SHN 14
  3289. LMD CM+4
  3290. CRM BUFF,T1 READ BLOCK OF CONTROLWARE FROM CM
  3291. STD CM+4 UPDATE BLOCK ADDRESS
  3292. SHN -14
  3293. STD CM+3
  3294. LDD T1 SET BYTES TO TRANSFER
  3295. SHN 2
  3296. ADD T1
  3297. OAM BUFF,CH LOAD BLOCK OF CONTROLWARE TO CCC
  3298. FJM *,CH IF TRANSFER NOT COMPLETE
  3299. NJN RLC3 IF INCOMPLETE TRANSFER
  3300. LDD CN+4
  3301. SBD T1
  3302. STD CN+4
  3303. NJN RLC5 IF MORE WORDS TO TRANSFER
  3304. DCN CH+40
  3305. DELAY
  3306. RJM GGS GET GENERAL STATUS
  3307. UJP RLCX RETURN
  3308.  
  3309.  
  3310. RLCA VFD 42/0LMA464,18/0 CONTROLWARE NAME
  3311. PRS SPACE 4,10
  3312. ** PRS - PRESET RELOAD CONTROLWARE OVERLAY.
  3313. *
  3314. * EXIT CHANNEL INSTRUCTIONS SET UP.
  3315. *
  3316. * USES T1, T2.
  3317.  
  3318.  
  3319. PRS SUBR ENTRY/EXIT
  3320. LDC PRSA SET FWA OF CHANNEL TABLE
  3321. STD T1
  3322. PRS1 LDI T1
  3323. ZJN PRSX IF END OF CHANNEL TABLE
  3324. STD T2
  3325. LDD IR+4 CHANNEL
  3326. RAI T2 STORE CHANNEL IN INSTRUCTION
  3327. AOD T1 ADVANCE CHANNEL TABLE POINTER
  3328. UJN PRS1 CONTINUE
  3329. TCHA SPACE 4,10
  3330. PRSA BSS 0 TABLE OF CHANNEL INSTRUCTION ADDRESSES
  3331. CHTB
  3332. 2XN SPACE 4,10
  3333. OVERFLOW RLCX,EPFW
  3334. END