Table of Contents

1HP

Table Of Contents

  • [00009] 885-42 DRIVER.
  • [00108] CONSTANTS, DEFINITIONS, AND MACROS.
  • [00174] TBLM - CREATE TABLE ENTRY MACRO.
  • [00197] CBTE - CONTROL BUFFER TABLE ENTRY.
  • [00212] CCBA - COMPUTE *CBT* ENTRY ADDRESS.
  • [00238] PUTE - PHYSICAL UNIT TABLE ENTRY.
  • [00253] CPTA - COMPUTE *PUT* ENTRY ADDRESS.
  • [00279] EMBE - ERROR MESSAGE TABLE ENTRY.
  • [00294] MONITOR - ISSUE MONITOR FUNCTION.
  • [00319] MAIN PROGRAM.
  • [00321] FHP - 885-42 DRIVER.
  • [00327] MST - MAIN PROGRAM.
  • [00343] TPOR - TABLE OF *PUT* ORDINALS.
  • [00358] SUBROUTINES.
  • [00360] CCP - CHECK FOR CHANNEL PARITY ERROR.
  • [00384] CCR - CHECK FOR CHANNEL REQUESTED OR DOWN.
  • [00422] CCS - CHECK CONSECUTIVE SECTORS.
  • [00483] CDS - CRACK DETAILED STATUS.
  • [00598] CRL - CHECK FOR ERROR RETRY LIMIT REACHED.
  • [00657] CRQ - CHECK REQUEST QUEUE.
  • [00718] DCH - RELEASE CHANNEL.
  • [00743] ERR - PROCESS ERROR.
  • [00861] TEPF - TABLE OF ERROR PROCESSING FLAGS.
  • [00895] TEPO - TABLE OF IMMEDIATE RETURN ERROR PROCESSING OPTIONS.
  • [00903] TMNE - TABLE OF ERROR CODE MNEMONICS.
  • [00911] TREC - TABLE OF RETRY COUNTS.
  • [00919] TSYM - TABLE OF BML SYMPTOM CODES.
  • [00927] FNC - FUNCTION CHANNEL.
  • [00967] GDS - GET DETAILED STATUS.
  • [01001] GGS - GET GENERAL STATUS.
  • [01048] IBM - ISSUE BML MESSAGE.
  • [01197] IIC - ISSUE I/O COMPLETION REQUEST.
  • [01227] IMF - ISSUE MONITOR FUNCTION.
  • [01247] ISF - ISSUE SEEK OPERATION.
  • [01323] OVI - OBTAIN AND VERIFY *PUT* INTERLOCK.
  • [01397] PCH - PROCESS CHANNEL REQUEST.
  • [01438] PDT - PROCESS DATA TRANSFER.
  • [01495] PFR - PREPARE FOR RETRY ATTEMPT.
  • [01520] PRE - PRESET ERROR PROCESSOR.
  • [01559] RCH - REQUEST CHANNEL.
  • [01584] RHR - RELEASE HARDWARE RESERVES.
  • [01609] RIO - PERFORM READ OPERATION.
  • [01681] RLC - RELOAD CONTROLWARE.
  • [01753] RPI - RELEASE *PUT* INTERLOCK.
  • [01792] RTM - REQUEST TRACK FLAW IF MEDIA ERROR.
  • [01867] SCD - SET DRIVER DROPPED FLAG.
  • [01896] SSF - SET SUSPECT FLAG.
  • [01936] SUQ - SCAN UNIT QUEUE.
  • [02048] TEP - TERMINATE ERROR PROCESSING.
  • [02163] WIO - PERFORM WRITE OPERATION.
  • [02254] PRS - PRESET *1HP*.
  • [02542] STA - SET TABLE ADDRESSES.

Source Code

1HP.txt
  1. IDENT 1HP,FHP
  2. 1HP TITLE 1HP - 885-42 DRIVER.
  3. PERIPH
  4. BASE MIXED
  5. SST
  6. *COMMENT 1HP - 885-42 DRIVER.
  7. COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
  8. 1HP SPACE 4,10
  9. *** 1HP - 885-42 DRIVER.
  10. *
  11. * P. T. BARNETT. 83/09/04.
  12. * R. M. DANISCH. 85/12/23.
  13. 1HP SPACE 4,10
  14. *** 1HP PROVIDES THE CAPABILITY TO ACCESS THE 885-42 DRIVE
  15. * THROUGH THE 7155-401 (FA211-C) CONTROLLER. 1HP IS A
  16. * DEDICATED PROGRAM THAT IS INITIATED AT DEADSTART AND REMAINS
  17. * ACTIVE AS LONG AS ITS CHANNEL IS UP AND FUNCTIONAL. 1HP USES
  18. * THE *BIOM* MONITOR FUNCTION TO COMMUNICATE WITH *CPUMTR*.
  19. 1HP SPACE 4,10
  20. *** CALL FORMAT -
  21. *
  22. *T,IR 18/*1HP*, 1/0, 5/CP, 6/CCTO, 18/0, 12/CH
  23. *
  24. * CP CONTROL POINT NUMBER (MUST BE SYSTEM CP).
  25. *
  26. * CCTO CCT ORDINAL.
  27. * CH CHANNEL NUMBER.
  28. 1HP SPACE 4,35
  29. *** ORGANIZATION OF 885-42.
  30. *
  31. * UP TO THREE 885-42 UNITS CAN BE COMBINED TO FORM
  32. * A LOGICAL DEVICE.
  33. *
  34. * EQUIPMENT TYPE = *DB*.
  35. *
  36. * SECTORS/TRACK = 640 LOGICAL / 160 PHYSICAL.
  37. * (4 LOGICAL SECTORS FORM 1 PHYSICAL SECTOR)
  38. *
  39. * CM WORDS/PHYSICAL SECTOR = 400B.
  40. *
  41. * LOGICAL SECTORS/PHYSICAL SECTOR = 4.
  42. *
  43. * LOGICAL SECTORS/LOGICAL TRACK = 1200B (640D).
  44. *
  45. * LOGICAL SECTORS/BUFFER = 40B.
  46. *
  47. * TRACKS/UNIT = 3222B (1682D).
  48. *
  49. * WORDS/UNIT = 68,894,720.
  50. *
  51. * UNITS/DEVICE = 1-3.
  52. *
  53. * WORDS/DEVICE = 68,894,720 - 206,684,160.
  54. *
  55. * MAXIMUM DATA RATE = 491.52 K WORDS/SECOND.
  56. 1HP SPACE 4,20
  57. ** MESSAGES.
  58. *
  59. * * EQXXX CC ERROR RETRY UNDERWAY.*
  60. * ISSUED TO THE SYSTEM CONTROL POINT FOR PRESENTATION ON THE
  61. * B-DISPLAY TO ALERT THE OPERATOR THAT ERROR RECOVERY IS BEING
  62. * PERFORMED ON THE DEVICE WHOSE EST ORDINAL IS XXX. THE TWO
  63. * CHARACTER MNEMONIC CC DESCRIBES THE ERROR TYPE.
  64. *
  65. * * 1HP - UNAUTHORIZED CALL.*
  66. * ISSUED TO THE SYSTEM DAYFILE IF 1HP WAS NOT CALLED FROM
  67. * THE SYSTEM.
  68. 1HP SPACE 4,65
  69. ** IMPLEMENTATION NOTES.
  70. *
  71. * THE 7155-401 CONTROLLER IS CONNECTED TO ESM THROUGH A LOW
  72. * SPEED PORT, AND THE DATA TRANSFER IS DONE THROUGH THAT
  73. * CONNECTION. THEREFORE, UPON ISSUING A READ OR WRITE
  74. * FUNCTION, A 2-BYTE ESM ADDRESS IS SENT TO THE CONTROLLER
  75. * THROUGH THE CHANNEL, AND THEN THE CHANNEL IS DISCONNECTED.
  76. * *1HP* IS THEN FREE TO DO AS IT PLEASES WHILE THE CONTROLLER
  77. * READS/WRITES THE DATA FROM/TO ESM. SOMETIME BEFORE ISSUING
  78. * THE NEXT READ/WRITE FUNCTION *1HP* WILL ISSUE A GENERAL
  79. * STATUS FUNCTION. THE CONTROLLER WILL PROVIDE STATUS ONLY
  80. * AFTER COMPLETION OF THE DATA TRANSFER.
  81. *
  82. * IN ORDER TO MAXIMIZE THE TRANSFER RATE, *1HP* WILL SCAN THE
  83. * UNIT QUEUE WHILE WAITING FOR I/O COMPLETION TO SEE IF THE
  84. * CURRENT TRANSFER CAN BE CONTINUED. IF THE 10B SECTORS
  85. * IMMEDIATELY FOLLOWING THE CURRENT 10B SECTORS ARE TO
  86. * BE USED IN THE SAME TRANSFER DIRECTION, *1HP* WILL CONTINUE
  87. * THE OPERATION, WITHOUT LOSING A DISK REVOLUTION.
  88. * DURING THE SUCCEEDING TRANSFER, *1HP* WILL ATTEMPT TO NOTIFY
  89. * *CPUMTR* OF COMPLETION ON THE PREVIOUS BUFFER.
  90. 1HP SPACE 4,10
  91. * COMMON DECKS.
  92.  
  93. *CALL COMPMAC
  94. RICHI$ EQU 1 SELECT DEFERRED INSTRUCTION REDEFINITION
  95. *CALL COMPCHI
  96. *CALL COMSCPS
  97. *CALL COMSDFS
  98. LIST X
  99. *CALL COMSHIO
  100. LIST *
  101. *CALL COMSLSD
  102. *CALL COMSMSC
  103. LIST X
  104. *CALL COMSMSP
  105. LIST *
  106. *CALL COMSPIM
  107. *CALL COMS1DS
  108. TITLE CONSTANTS, DEFINITIONS, AND MACROS.
  109. 1HP SPACE 4,10
  110. ** DIRECT CELL ASSIGNMENTS.
  111.  
  112.  
  113. RS EQU 16 ERROR RECOVERY STATUS
  114. ER EQU 17 ERROR RECOVERY IN PROGRESS
  115. CC EQU 20 COMPLETION REQUEST COUNT
  116. S1 EQU 21 SCRATCH
  117. EC EQU 22 ERROR CODE
  118. RW EQU 23 READ/WRITE FLAG
  119. IL EQU 24 *PUT* INTERLOCK FLAG
  120. SR EQU 25 - 31 SCRATCH
  121. WB EQU SR - SR+4 FOR *COMPIMB* COMPATIBILITY
  122. PI EQU 32 *PADN* WORD INDEX
  123. CN EQU 33 - 37 SCRATCH (5 CELLS)
  124. CD EQU 40 - 45 CURRENT DATA (6 CELLS)
  125. CS EQU 46 CHANNEL STATUS
  126. NB EQU 47 NEXT BUFFER ORDINAL
  127. PB EQU 50 PREVIOUS BUFFER ORDINAL
  128. CB EQU 51 CURRENT BUFFER ORDINAL
  129. TB EQU 52 TOTAL CBT COUNT
  130. GS EQU 53 GENERAL STATUS
  131. * EQU 54 CHANNEL NUMBER (FROM INPUT REGISTER)
  132. TI EQU 57 *TPOR* INDEX
  133. CA EQU 60 - 64 CURRENT PHYSICAL ADDRESS (5 CELLS)
  134. RC EQU 65 RETRY COUNT
  135. PO EQU 66 *PUT* ORDINAL
  136. S2 EQU 67 SCRATCH
  137. 1HP SPACE 4,10
  138. ** DRIVER FUNCTION CODES.
  139.  
  140.  
  141. FCSK EQU 1 SEEK 1 TO 1 INTERLACE
  142. FCRD EQU 4 READ
  143. FCWR EQU 5 WRITE
  144. FCOC EQU 10 OPERATION COMPLETE
  145. FCCO EQU 14 CONTINUE
  146. FCDS EQU 23 DETAILED STATUS
  147. FCES EQU 66 EXTENDED GENERAL STATUS
  148. FCAL EQU 414 AUTOLOAD
  149. 1HP SPACE 4,10
  150. ** STATUS AND CONTROL REGISTER FUNCTION CODE(S).
  151.  
  152. FCTC EQU 3000 TEST AND CLEAR *SCR* BIT
  153. 1HP SPACE 4,10
  154. ** ASSEMBLY CONSTANTS.
  155.  
  156.  
  157. BFRL EQU 10 *EMB* FLUSH RETRY COUNT
  158. CH EQU 0 MASS STORAGE CHANNEL
  159. EMAI EQU 400 EXTENDED MEMORY ADDRESS INCREMENT
  160. FCESL EQU 5 LENGTH OF EXTENDED GENERAL STATUS
  161. FCRDL EQU 2 NUMBER OF PARAMETER BYTES FOR READ
  162. FCSKL EQU 4 NUMBER OF PARAMETER BYTES FOR SEEK
  163. FCWRL EQU 6 NUMBER OF PARAMETER BYTES FOR WRITE
  164. MAXU EQU 16D MAXIMUM NUMBER OF UNITS PER CHANNEL
  165. PCRL EQU 10 PP CALL RETRY LIMIT
  166. MFRL EQU 10 MONITOR FUNCTION RETRY LIMIT
  167. PPSLB EQU 10 PHYSICAL SECTORS PER BUFFER
  168. PSPT EQU 40 PHYSICAL SECTORS PER PHYSICAL TRACK
  169. SOSF EQU 100 SEEK OPTION SELECT FLAGS
  170. TPORE EQU 1 LENGTH OF *TPOR* ENTRY
  171. SPACE 4,10
  172. ** MACROS.
  173. TBLM SPACE 4,10
  174. ** TBLM - CREATE TABLE ENTRY MACRO.
  175. *
  176. *NAM TBLM
  177. *
  178. * ENTRY NAM = TABLE NAME.
  179. *
  180. * EXIT NAM_E MACRO DEFINED.
  181.  
  182.  
  183. PURGMAC TBLM
  184.  
  185. MACRO TBLM,NAM
  186. PURGMAC NAM_E
  187. NAM_E MACRO ADDR
  188. LOCAL A
  189. MACREF NAM_E
  190. NOREF A
  191. A EQU ADDR
  192. T_NAM RMT
  193. CON A
  194. RMT
  195. TBLM ENDM
  196. CBTE SPACE 4,10
  197. ** CBTE - CONTROL BUFFER TABLE ENTRY.
  198. *
  199. * THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TCBT*
  200. * THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH
  201. * REQUIRES THE FWA OF THE CONTROL BUFFER TABLE.
  202. *
  203. * CBTE ADDR
  204. *
  205. * ENTRY (ADDR) = ADDRESS OF INSTRUCTION.
  206. *
  207. * EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TCBT*.
  208.  
  209.  
  210. CBT TBLM
  211. CCBA SPACE 4,15
  212. ** CCBA - COMPUTE *CBT* ENTRY ADDRESS.
  213. *
  214. * THIS MACRO SETS (A) TO THE REQUESTED *CBT* ENTRY ADDRESS.
  215. *
  216. * CCBA W,A
  217. *
  218. * W - OPTIONAL WORD OFFSET TO BE ADDED TO ADDRESS.
  219. * A - IF NON-BLANK, BUFFER ORDINAL IS IN ACCUMULATOR.
  220. *
  221. * ENTRY (A) = BUFFER ORDINAL IF *A* PARAMETER IS NON-BLANK.
  222. * (CB) = CURRENT BUFFER ORDINAL.
  223. *
  224. * EXIT (A) = *CBT* ENTRY ADDRESS + WORD OFFSET.
  225.  
  226.  
  227. PURGMAC CCBA
  228.  
  229. CCBA MACRO W,A
  230. MACREF CCBA
  231. IFC EQ,$A$$,1
  232. LDD CB
  233. SHN CBTLS
  234. CBTE *
  235. ADC W
  236. CCBA ENDM
  237. PUTE SPACE 4,10
  238. ** PUTE - PHYSICAL UNIT TABLE ENTRY.
  239. *
  240. * THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TPUT*
  241. * THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH
  242. * REQUIRES THE FWA OF THE PHYSICAL UNIT TABLE.
  243. *
  244. * PUTE ADDR
  245. *
  246. * ENTRY (ADDR) = ADDRESS OF INSTRUCTION.
  247. *
  248. * EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TPUT*.
  249.  
  250.  
  251. PUT TBLM
  252. CPTA SPACE 4,10
  253. ** CPTA - COMPUTE *PUT* ENTRY ADDRESS.
  254. *
  255. * THIS MACRO SETS (A) TO THE REQUESTED *PUT* ENTRY ADDRESS.
  256. *
  257. * CPTA W,A
  258. *
  259. * W - OPTIONAL WORD OFFSET TO BE ADDED TO ADDRESS.
  260. * A - IF NON-BLANK, *PUT* ORDINAL IS IN ACCUMULATOR.
  261. *
  262. * ENTRY (A) = *PUT* ORDINAL IF *A* PARAMETER IS NON-BLANK.
  263. * (PO) = *PUT* ORDINAL.
  264. *
  265. * EXIT (A) = *PUT* ENTRY ADDRESS + WORD OFFSET.
  266.  
  267.  
  268. PURGMAC CPTA
  269.  
  270. CPTA MACRO W,A
  271. MACREF CPTA
  272. IFC EQ,$A$$,1
  273. LDD PO
  274. SHN PUTLS
  275. PUTE *
  276. ADC W
  277. CPTA ENDM
  278. EMBE SPACE 4,10
  279. ** EMBE - ERROR MESSAGE TABLE ENTRY.
  280. *
  281. * THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TEMB*
  282. * THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH
  283. * REQUIRES THE FWA OF THE ERROR MESSAGE TABLE.
  284. *
  285. * EMBE ADDR
  286. *
  287. * ENTRY (ADDR) = ADDRESS OF INSTRUCTION.
  288. *
  289. * EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TEMB*.
  290.  
  291.  
  292. EMB TBLM
  293. MONITOR SPACE 4,15
  294. ** MONITOR - ISSUE MONITOR FUNCTION.
  295. *
  296. * THIS MACRO PROVIDES FUNCTIONALITY IDENTICAL TO THAT OF THE
  297. * *MONITOR* MACRO DEFINED IN *COMPMAC*, WHILE ENSURING ANY
  298. * PENDING *BIOM* MONITOR FUNCTION IS COMPLETED BEFORE THE NEXT
  299. * MONITOR FUNCTION IS ISSUED.
  300. *
  301. * MONITOR F
  302. *
  303. * F - MONITOR FUNCTION CODE.
  304. *
  305. * EXIT (A) = 0.
  306. * (CM - CM+4) = COMPLETED PP OUTPUT REGISTER IMAGE.
  307. *
  308. * CALLS IMF.
  309.  
  310.  
  311. PURGMAC MONITOR
  312.  
  313. MONITOR MACRO F
  314. MACREF MONITOR
  315. LDK F
  316. RJM IMF
  317. MONITOR ENDM
  318. 1HP SPACE 4
  319. TITLE MAIN PROGRAM.
  320. FHP SPACE 4,10
  321. ** FHP - 885-42 DRIVER.
  322.  
  323.  
  324. ORG PPFW
  325. FHP RJM PRS PRESET
  326. MST SPACE 4,10
  327. ** MST - MAIN PROGRAM.
  328.  
  329.  
  330. MST RJM CCR CHECK FOR CHANNEL REQUESTED/DOWN
  331. MJN MST1 IF CHANNEL GLOBALLY DOWN
  332. RJM SUQ SCAN UNIT QUEUE
  333. ZJN MST IF NO ELIGIBLE ENTRY FOUND
  334. RJM ISF ISSUE SEEK FUNCTION
  335. NJN MST IF UNIT NOT ON CYLINDER
  336. RJM PDT PERFORM DATA TRANSFER
  337. UJN MST LOOP
  338.  
  339. MST1 RJM DCH RELEASE CHANNEL
  340. MONITOR DPPM DROP PP
  341. LJM PPR ENTER IDLE LOOP
  342. TPOR SPACE 4,10
  343. ** TPOR - TABLE OF *PUT* ORDINALS.
  344. *
  345. * THIS TABLE CONTAINS THE ORDINALS OF THE *PUT* ENTRIES FOR ALL
  346. * UNITS ACCESSED BY THIS DRIVER-S CHANNEL.
  347. *
  348. * ENTRY = 1 WORD.
  349. *
  350. *T 5/ 0, 1/ I, 6/ *PUT* ORDINAL
  351. * I EST CHANNEL BYTE INDEX.
  352. *
  353. * TABLE IS TERMINATED BY A ZERO BYTE.
  354.  
  355.  
  356. TPOR BSSZ TPORE*MAXU
  357. CON 0 TERMINATE *TPOR* TABLE
  358. TITLE SUBROUTINES.
  359. CCP SPACE 4,10
  360. ** CCP - CHECK FOR CHANNEL PARITY ERROR.
  361. *
  362. * EXIT (A) .EQ. 0 IF NO CHANNEL PARITY ERROR.
  363. * .LT. 0 = COMPLEMENT OF *CHPE* ERROR CODE IF
  364. * CHANNEL PARITY ERROR.
  365.  
  366.  
  367. CCP1 LDN 0
  368.  
  369. CCP SUBR ENTRY/EXIT
  370. LDC FCTC+30 TEST AND CLEAR SCR BIT
  371. CCPA EQU *-1 (BIT NUMBER)
  372. FJM CCP1,CHSC IF MAINTENANCE CHANNEL IN USE
  373. CCPB EQU *-2
  374. OAN CHSC ISSUE REQUEST
  375. CCPC EQU *-1
  376. IAN CHSC INPUT RESULT
  377. CCPD EQU *-1
  378. ZJN CCPX IF NO CHANNEL PARITY ERROR
  379. LCN CHPE
  380. UJN CCPX RETURN
  381. 1HP SPACE 4
  382. RICHI REDEFINE CHANNEL INSTRUCTIONS
  383. CCR SPACE 4,20
  384. ** CCR - CHECK FOR CHANNEL REQUESTED OR DOWN.
  385. *
  386. * THIS ROUTINE CHECKS TO SEE IF THE CHANNEL TO WHICH THIS PP IS
  387. * DEDICATED IS BEING REQUESTED BY ANOTHER PP OR IS GLOBALLY
  388. * DOWN. IF THE CHANNEL IS REQUESTED BY ANOTHER PP, IT WILL BE
  389. * RELEASED AND WILL BE REQUESTED AGAIN FOLLOWING A ONE SECOND
  390. * DELAY. IF THE CHANNEL IS GLOBALLY DOWN, THE DRIVER DROP FLAG
  391. * WILL BE SET IN THE CONTROLWARE TABLE AND THE CHANNEL WILL BE
  392. * RELEASED.
  393. *
  394. * EXIT (A) .LT. 0 IF CHANNEL IS GLOBALLY DOWN.
  395. *
  396. * USES CM - CM+4.
  397. *
  398. * CALLS DCH, RCH, SCD.
  399. *
  400. * MACROS DELAY.
  401.  
  402.  
  403. CCR2 RJM SCD SET DRIVER DROP FLAG
  404. LCN 0 SET DROPOUT REPLY
  405.  
  406. CCR SUBR ENTRY/EXIT
  407. LDC ** READ CHANNEL TABLE
  408. CCRA EQU *-1 (CM ADDRESS OF ENTRY)
  409. CRD CM
  410. LDD CM+** CHECK REQUESTED FLAG
  411. CCRB EQU *-1 (BYTE ADDRESS OF ENTRY)
  412. SHN 21-5
  413. MJN CCR2 IF CHANNEL IS GLOBALLY DOWN
  414. SHN 22+5-13
  415. PJN CCRX IF CHANNEL NOT REQUESTED
  416. RJM DCH RELEASE CHANNEL
  417. CCR1 DELAY
  418. RJM RCH REQUEST CHANNEL
  419. ZJN CCR1 IF CHANNEL NOT ASSIGNED
  420. UJN CCRX RETURN
  421. CCS SPACE 4,15
  422. ** CCS - CHECK CONSECUTIVE SECTORS.
  423. *
  424. * THIS ROUTINE CHECKS THE NEXT BUFFER IN THE I/O QUEUE TO
  425. * DETERMINE IF IT IS CONSECUTIVE WITH THE REQUEST CURRENTLY
  426. * BEING PROCESSED.
  427. *
  428. * ENTRY (CB) = CURRENT BUFFER ORDINAL.
  429. * (NB) = NEXT BUFFER ORDINAL IF CONSECUTIVE REQUEST
  430. * ALREADY FOUND.
  431. * (TB) = TOTAL BUFFER COUNT.
  432. *
  433. * EXIT (NB) = NEXT BUFFER ORDINAL.
  434. * = 0 IF CONSECUTIVE TRANSFER NOT POSSIBLE.
  435. * (TB) = TOTAL BUFFER COUNT.
  436. *
  437. * USES NB, TB, CM - CM+4, CN - CN+4, T0 - T4.
  438. *
  439. * MACROS CCBA.
  440.  
  441.  
  442. CCS3 LDN 0 INDICATE NO CONSECUTIVE REQUEST
  443. STD NB
  444.  
  445. CCS SUBR ENTRY/EXIT
  446. LDD NB
  447. NJN CCSX IF NEXT REQUEST ALREADY FOUND
  448. CCBA PAD4 READ CURRENT *CBT* ENTRY
  449. CRD CM
  450. ADK IOLK-PAD4
  451. CRD CN
  452. LDD CN+2 NEXT BUFFER ORDINAL
  453. ZJN CCSX IF NO BUFFER
  454. STD NB STORE BUFFER ORDINAL OF NEXT REQUEST
  455. CCBA PAD1,A GET DISK ADDRESS FOR THIS BUFFER
  456. CRD CN
  457. ADK IOLK-PAD1 GET WRITE FLAG
  458. CRD T0
  459. LDD T0
  460. SHN 0-11
  461. LPN 1
  462. LMD RW
  463. NJN CCS3 IF TRANSFER NOT IN SAME DIRECTION
  464. LDD CM+1
  465. LMD CN+1
  466. CCS1 NJN CCS3 IF NO CYLINDER MATCH
  467. LDD CM+2
  468. ADN 2
  469. LMD CN+2
  470. ZJN CCS2 IF CONSECTUTIVE SECTOR ON SAME TRACK
  471. LDD CM+2
  472. ADD HN
  473. SCN 77
  474. LMD CN+2
  475. NJN CCS1 IF NOT FIRST SECTOR ON CONSECUTIVE TRACK
  476. LDD CM+2
  477. LPN 77
  478. SBN PSPT-2
  479. NJN CCS1 IF NOT CONSECUTIVE REQUEST
  480. CCS2 AOD TB INCREMENT TOTAL BUFFER COUNT
  481. LJM CCSX RETURN
  482. CDS SPACE 4,25
  483. ** CDS - CRACK DETAILED STATUS.
  484. *
  485. * THIS ROUTINE DETERMINES WHAT ERROR CODE TO SET BY EXAMINING
  486. * DETAILED STATUS. IT WILL ALSO ATTEMPT TO RECOVER BY ISSUING
  487. * A *CONTINUE* FUNCTION IF GENERAL STATUS INDICATES THE ERROR
  488. * IS RECOVERABLE BY THE CONTROLLER.
  489. *
  490. * ENTRY (EC) = ERROR CODE.
  491. * (GS) = GENERAL STATUS.
  492. * (RW) = READ/WRITE FLAG.
  493. * (T7) = SECTOR COUNT.
  494. *
  495. * EXIT (A) .EQ. 0 IF ERROR WAS RECOVERED BY CONTROLLER.
  496. * .LT. 0 IF A FUNCTION TIMEOUT, CHANNEL PARITY
  497. * ERROR, OR DATA TRANSFER ERROR OCCURRED
  498. * WHILE TRYING TO OBTAIN STATUS.
  499. * .GT. 0 OTHERWISE.
  500. * (EC) = ERROR CODE.
  501. *
  502. * USES CB, EC, PB, RS.
  503. *
  504. * CALLS GDS, GGS, PCH.
  505.  
  506.  
  507. CDS SUBR ENTRY/EXIT
  508. CDS1 RJM GDS GET DETAILED STATUS
  509. MJN CDSX IF ERROR
  510. LDD GS
  511. SHN 21-13
  512. PJP CDS6 IF NOT ABNORMAL TERMINATION
  513. SHN 13-10
  514. PJN CDS3 IF ERROR NOT RECOVERABLE BY CONTROLLER
  515.  
  516. * ATTEMPT CONTROLLER RECOVERY.
  517.  
  518. LDK FCCO ISSUE *CONTINUE* FUNCTION
  519. RJM PCH
  520. MJN CDSX IF TIMEOUT/DATA TRANSFER ERROR
  521. RJM GGS GET GENERAL STATUS
  522. MJN CDSX IF STATUS NOT OBTAINED
  523. NJN CDS1 IF NOT YET RECOVERED
  524. LCN 1 INDICATE CONTROLLER RECOVERY
  525. STD RS
  526. LDN 0
  527. UJN CDSX RETURN
  528.  
  529. * CHECK FOR *NOT READY* CONDITION.
  530.  
  531. CDS3 SHN 10-4
  532. PJN CDS4 IF NOT *NOT READY*
  533. LDM DST+7
  534. LPN 1
  535. NJN CDS4 IF NOT *NOT READY*
  536. LDM DST+10
  537. SHN 0-7
  538. LPN 1
  539. ZJP CDS8 IF DRIVE *NOT READY*
  540.  
  541. * DURING SPINUP, THE STATUS OF THE DRIVE CHANGES SO AS TO
  542. * APPEAR NOT TO BE A *NOT READY* CONDITION. TO AVOID
  543. * MISHANDLING THIS SITUATION THE ERROR PROCESSOR CHECKS FOR
  544. * PRIOR DETECTION OF *NOT READY* AND ASSUMES NO CHANGE IN
  545. * THE SITUATION UNTIL GENERAL STATUS BECOMES ZERO.
  546.  
  547. CDS4 LDD EC
  548. LMK NRDE
  549. ZJP CDS8 IF *NOT READY* ALREADY DETECTED
  550.  
  551. * CHECK FOR *BUFFER TO DISK* ERROR.
  552.  
  553. LDD RW
  554. ZJN CDS5 IF READ OPERATION
  555. LDM DST+14
  556. SHN 21-13
  557. PJN CDS5 IF NOT ERROR ON PREVIOUS SECTOR
  558. LDD T7
  559. LMK PPSLB-1
  560. NJN CDS5 IF NOT AT BUFFER BOUNDARY
  561. LDD PB BACKUP TO PREVIOUS BUFFER
  562. STD CB
  563. LDN 0
  564. STD PB
  565. UJN CDS6 SET ERROR CODE
  566.  
  567. * CHECK FOR MEDIA ERROR.
  568.  
  569. CDS5 LDM DST+17
  570. LPN 40
  571. NJN CDS6 IF PROCESSOR INSTRUCTION TIMEOUT
  572. LDM DST
  573. LPN 17
  574. LMN 10
  575. ZJN CDS7 IF MEDIA ERROR
  576. LDM DST+1
  577. SHN 21-13
  578. MJN CDS7 IF MEDIA ERROR
  579. SHN 13-11
  580. MJN CDS7 IF MEDIA ERROR
  581. LDM DST+20
  582. SHN 21-10
  583. MJN CDS7 IF MEDIA ERROR
  584. LDM DST+17
  585. SHN 21-6
  586. MJN CDS9 IF CHANNEL PARITY ERROR ON OUTPUT
  587. CDS6 LDN DSTE
  588. UJN CDS10 SET ERROR CODE
  589.  
  590. CDS7 LDK PARE&NRDE
  591. CDS8 LMK NRDE
  592. UJN CDS10 SET ERROR CODE
  593.  
  594. CDS9 LDN CHPE SET ERROR CODE
  595. CDS10 STD EC
  596. LJM CDSX RETURN
  597. CRL SPACE 4,10
  598. ** CRL - CHECK FOR ERROR RETRY LIMIT REACHED.
  599. *
  600. * ENTRY (EC) = ERROR CODE.
  601. * (ER) = *RECOVERY IN PROGRESS* FLAG.
  602. * (RC) = RETRY COUNT.
  603. * (T5) = EST ORDINAL.
  604. *
  605. * EXIT (A) .GE. 0 IF RETRY LIMIT REACHED.
  606. * .LT. 0 IF NOT AT RETRY LIMIT.
  607. * (RC) INCREMENTED.
  608. * MESSAGE ISSUED TO *MS2W* OF SYSTEM CONTROL POINT FOR
  609. * B-DISPLAY PRESENTATION IF HALF WAY TO RETRY LIMIT.
  610. *
  611. * USES RC.
  612.  
  613.  
  614. CRL SUBR ENTRY/EXIT
  615. LDD ER
  616. LMC SHNI+1
  617. STM CRLA
  618. AOD RC INCREMENT RETRY COUNT
  619. LDM TREC,EC
  620. SHN -1
  621. SBD RC
  622. PJN CRL1 IF TOO EARLY TO NOTIFY OPERATOR
  623. LDD T5 STORE EST ORDINAL IN MESSAGE
  624. SHN -3
  625. RJM C2D
  626. STM CRLB+1
  627. LDD T5
  628. LPN 7
  629. SHN 6
  630. ADC 2R0
  631. STM CRLB+2
  632. LDM TMNE,EC STORE ERROR MNEMONIC IN MESSAGE
  633. STM CRLB+3
  634. LDD CP
  635. ADK MS2W
  636. CWM CRLB,TR
  637. CRL1 LDD RC
  638.  
  639. * IF *RECOVERY IN PROGRESS* IS NOT SET, THE RETRY COUNT IS
  640. * SHIFTED SO THAT THE LIMIT CHECK IS MADE AGAINST N/2 (WHERE N
  641. * IS THE RETRY LIMIT FOR THE ERROR TYPE IN CELL *EC*). THIS
  642. * CAUSES HALF OF THE RETRY ATTEMPTS TO BE PERFORMED ON EACH
  643. * CHANNEL, IF AN ALTERNATE ACCESS IS AVAILABLE. IF NO
  644. * ALTERNATE ACCESS IS AVAILABLE, ALL RETRIES WILL BE PERFORMED
  645. * ON THIS CHANNEL.
  646.  
  647. SHN 0
  648. * SHN 1 (RECOVERY NOT IN PROGRESS)
  649. CRLA EQU *-1
  650. SBM TREC,EC
  651. SBN 1
  652. UJP CRLX RETURN
  653.  
  654.  
  655. CRLB DATA C*EQ000 XX ERROR RETRY UNDERWAY.*
  656. CRQ SPACE 4,20
  657. ** CRQ - CHECK REQUEST QUEUE.
  658. *
  659. * THIS ROUTINE ATTEMPTS TO CALL *CPUMTR* TO COMPLETE REQUESTS
  660. * IN THE UNIT QUEUE THAT HAVE ALREADY BEEN PROCESSED.
  661. *
  662. * ENTRY (CC) = COMPLETION REQUEST COUNT.
  663. * (PO) = *PUT* ORDINAL.
  664. *
  665. * EXIT (A) .EQ. 0 IF NO REQUESTS PRESENT.
  666. * .NE. 0 IF *CPUMTR* IS STILL BUSY WITH PREVIOUS
  667. * FUNCTION OR AN EXCHANGE WAS JUST ISSUED
  668. * FOR THE CURRENT FUNCTION.
  669. *
  670. * USES CC, CN - CN+4, T0 - T4.
  671.  
  672.  
  673. CRQ SUBR ENTRY/EXIT
  674. LDC ** READ XP
  675. CRQA EQU *-1 FWA OF XP
  676. CRD T0
  677. LDD OA READ OUTPUT REGISTER
  678. CRD CN
  679. LDD T0+4 (B0)
  680. NJN CRQ1 IF MISSED EXCHANGE
  681. STD CN+3
  682. LDD CN
  683. SHN 21-13
  684. MJN CRQ1 IF REISSUE REQUIRED
  685. NJN CRQX IF FUNCTION NOW BEING PROCESSED
  686. LDD CC
  687. ZJN CRQX IF NO PENDING COMPLETION REQUESTS
  688. LDC **
  689. CRQE EQU *-1
  690. CRD T0
  691. LDD T0
  692. ADD T0+1
  693. NJN CRQX IF FUNCTION IN PROGRESS
  694. LDN DCBS SET *BIOM* SUBFUNCTION
  695. STD CN+1
  696. LDD PO
  697. STD CN+2
  698. CRQ1 LDD CC
  699. RAD CN+3
  700. LDN 0
  701. STD CC
  702. LDK BIOM
  703. STD CN
  704. LDD OA
  705. CWD CN
  706. LDC **
  707. CRQB EQU *-1 ADDRESS OF EXCHANGE PACKAGE
  708. CWM CRQD,ON WRITE FIRST WORD
  709. SBN 1 SET EXCHANGE ADDRESS
  710. MXN 0 EXCHANGE CPU
  711. CRQC EQU *-1 CPU NUMBER
  712. UJP CRQX RETURN
  713.  
  714. CRQD VFD 24/0 (P)
  715. VFD 18/0 (A0)
  716. VFD 18/0 (B0)
  717. DCH SPACE 4,15
  718. ** DCH - RELEASE CHANNEL.
  719. *
  720. * THIS ROUTINE RELEASES THE CHANNEL IF IT IS CURRENTLY
  721. * RESERVED.
  722. *
  723. * ENTRY (IR+4) = CHANNEL NUMBER.
  724. * (CS) = CHANNEL RESERVATION STATUS.
  725. *
  726. * EXIT (A) = (CS) = 0.
  727. *
  728. * USES CM+1, CS.
  729. *
  730. * MACROS MONITOR.
  731.  
  732.  
  733. DCH SUBR ENTRY/EXIT
  734. LDD CS
  735. LPN 1
  736. ZJN DCHX IF CHANNEL NOT RESERVED
  737. LDD IR+4 RELEASE CHANNEL
  738. STD CM+1
  739. MONITOR DCHM
  740. SOD CS
  741. UJN DCHX RETURN
  742. ERR SPACE 4,30
  743. ** ERR - PROCESS ERROR.
  744. *
  745. * THIS ROUTINE IS CALLED TO PERFORM ERROR PROCESSING.
  746. *
  747. * ENTRY (EC) = 0 IF THIS IS THE FIRST RETRY OF A RECOVERY
  748. * SEQUENCE AND THE CALLER DID NOT SET THE ERROR
  749. * CODE.
  750. * = ERROR CODE IF NOT THE FIRST RETRY OF A RECOVERY
  751. * SEQUENCE AND NOT A CALLER SPECIFIED ERROR CODE.
  752. * = COMPLEMENT OF ERROR CODE IF SPECIFIED BY THE
  753. * CALLER.
  754. * (RC) = RETRY COUNT.
  755. *
  756. * EXIT (EC) = 0.
  757. * (RC) = 0.
  758. * TO THE POINT OF CALL IF THE ERROR WAS RECOVERED BY THE
  759. * CONTROLLER.
  760. * TO *MST* IN ALL OTHER CASES.
  761. *
  762. * USES EC, RC, RS, T1.
  763. *
  764. * CALLS CDS, CRL, CRQ, GGS, IBM, ISF, PDT, PFR, PRE,
  765. * RLC, SSF, TEP.
  766.  
  767.  
  768. ERR SUBR ENTRY/EXIT
  769. RJM PRE PRESET ERROR PROCESSOR
  770. NJP ERR11 IF INTERLOCK/VERIFICATION FAILURE
  771. LDD EC
  772. SHN 21-13
  773. PJN ERR3 IF ERROR CODE NOT SET BY CALLER
  774. ERR2 LCN 0 STORE ERROR CODE
  775. LMD EC
  776. STD EC
  777. UJN ERR3.1 CHECK FOR RETRY LIMIT
  778.  
  779. ERR3 RJM GGS GET GENERAL STATUS
  780. MJN ERR2 IF STATUS NOT OBTAINED
  781. RJM CDS CRACK DETAILED STATUS
  782. MJN ERR2 IF STATUS NOT OBTAINED
  783. ERR3.1 LDD RC
  784. NJN ERR4 IF NOT FIRST RETRY
  785. LDD GS SAVE INITIAL GENERAL STATUS
  786. STM BMLGS
  787. ERR4 LDD TH FORCE IMMEDIATE COMPLETION
  788. ERRNZ SHNI-1000 CODE DEPENDS ON VALUE
  789. STM IICA
  790. RJM IIC ISSUE I/O COMPLETION REQUEST
  791. ERR4.1 RJM CRQ ENSURE NO PENDING MONITOR FUNCTION
  792. NJN ERR4.1 IF FUNCTION STILL PENDING
  793. RJM IBM ISSUE BML MESSAGE IF FIRST RETRY
  794. AOD RS
  795. SHN 21-13
  796. MJN ERR6.1 IF ERROR RECOVERED BY CONTROLLER
  797. RJM CRL CHECK FOR RETRY LIMIT REACHED
  798. MJN ERR7 IF RETRY LIMIT NOT REACHED
  799.  
  800. * ATTEMPT TO RELOAD THE CONTROLLER IF THE ERROR TYPE IS
  801. * APPROPRIATE FOR SUCH AN ACTION.
  802.  
  803. LDM TEPF,EC
  804. SHN 21-5
  805. PJN ERR5 IF RELOAD INAPPROPRIATE FOR ERROR TYPE
  806. RJM RLC RELOAD CONTROLLER
  807. ERR5 SOD RC ADJUST FINAL RETRY COUNT
  808. AOD RS SET RECOVERY STATUS
  809. ERR6.1 UJN ERR11 TERMINATE ERROR PROCESSING
  810.  
  811. * SET THE SUSPECT FLAG IF APPROPRIATE FOR THIS ERROR TYPE.
  812.  
  813. ERR7 RJM SSF SET SUSPECT FLAG (IF APPROPRIATE)
  814.  
  815. * RETRY I/O SEQUENCE.
  816.  
  817. ERR9 RJM ISF ISSUE SEEK FUNCTION
  818. ZJN ERR10 IF ON CYLINDER AND NO ERROR
  819. LDD GS
  820. LMN 2
  821. ZJN ERR9 IF POSITIONER BUSY
  822. LMN 10&2
  823. NJN ERR9.1 IF DRIVE NOT RESERVED ON OTHER CHANNEL
  824. LDC 4000 CAUSE PRIORITY OVERRIDE ON SEEK
  825. RAM ISFA
  826. UJN ERR9 REISSUE SEEK
  827.  
  828. ERR9.1 LDD CS
  829. LPN 10
  830. ZJN ERR11 IF CONTROLLER WAS NOT CONNECTED
  831. LDK DSTE SET ERROR CODE FOR LOST CONTROLLER RESERVE
  832. STD EC
  833. UJP ERR4 RETRY OPERATION
  834.  
  835. ERR10 RJM PFR PREPARE FOR RETRY ATTEMPT
  836. RJM PDT PERFORM READ/WRITE OPERATION
  837.  
  838. * CONTROL RETURNS TO THIS POINT ONLY IF THE ERROR WAS
  839. * RECOVERED.
  840.  
  841. ERR11 AOD RS SET RECOVERY STATUS
  842. SHN 6
  843. RAD RC ADJUST FOR CONTROLLER RECOVERY
  844.  
  845. * TERMINATE ERROR PROCESSING. INSTRUCTIONS MODIFIED FOR ERROR
  846. * PROCESSING WILL BE RESTORED TO THEIR ORIGINAL VALUES, VARIOUS
  847. * DATA CELLS WILL BE RESTORED TO THEIR INITIAL STATES, ETC.
  848.  
  849. RJM TEP TERMINATE ERROR PROCESSING
  850. LDM ERRA,RS
  851. STD T1
  852. LJM 0,T1 EXIT ERROR PROCESSOR
  853.  
  854. ERRA INDEX TABLE OF EXIT ADDRESSES
  855. INDEX 0,ERRX
  856. INDEX 1,MST
  857. INDEX 2,MST
  858. INDEX 3,MST
  859. INDEX 4
  860. TEPF SPACE 4,25
  861. ** TEPF - TABLE OF ERROR PROCESSING FLAGS.
  862. *
  863. * THIS TABLE CONTAINS INFORMATION RELATED TO EACH ERROR TYPE.
  864. * EACH ENTRY HAS THE FOLLOWING FORMAT -
  865. * VFD 2/ERROR COUNT INCREMENT, BML MESSAGE INDICATOR
  866. * 0 DO NOT INCREMENT ERROR COUNTS AND DO
  867. * NOT ISSUE BML MESSAGE.
  868. * 1 INCREMENT ERROR COUNTS AND ISSUE BML
  869. * MESSAGE.
  870. * 2 INCREMENT ERROR COUNTS AND ISSUE BML
  871. * MESSAGE IF UNRECOVERED ERROR.
  872. * VFD 2/ERROR LOG MESSAGE INDICATOR
  873. * 0 DO NOT ISSUE ERROR LOG MESSAGE.
  874. * 1 ISSUE ERROR LOG MESSAGE WITH DETAILED
  875. * STATUS.
  876. * 2 ISSUE ERROR LOG MESSAGE WITHOUT
  877. * DETAILED STATUS.
  878. * VFD 1/SUSPECT FLAG
  879. * 0 DO NOT SET SUSPECT FLAG.
  880. * 1 SET SUSPECT FLAG.
  881. * VFD 1/DOWN CHANNEL FLAG
  882. * 0 DO NOT DOWN CHANNEL.
  883. * 1 DOWN CHANNEL.
  884. * VFD 1/CONTROLLER RELOAD FLAG
  885. * 0 DO NOT RELOAD CONTROLLER.
  886. * 1 RELOAD CONTROLLER.
  887. * VFD 5/UNUSED (ZERO)
  888.  
  889. LIST G
  890. TEPF EQU *-1
  891. ECHO 1,EC=("DREC")
  892. VFD 2/IEC._EC,2/IEM._EC,1/SUS._EC,1/IDC._EC,1/CWR._EC,5/0
  893. LIST *
  894. TEPO SPACE 4,10
  895. ** TEPO - TABLE OF IMMEDIATE RETURN ERROR PROCESSING OPTIONS.
  896.  
  897. LIST G
  898. TEPO EQU *-1
  899. ECHO 1,ERRCODE=("DREC")
  900. CON EPO._ERRCODE "TXT._ERRCODE" ERROR
  901. LIST *
  902. TMNE SPACE 4,10
  903. ** TMNE - TABLE OF ERROR CODE MNEMONICS.
  904.  
  905. LIST G
  906. TMNE EQU *-1
  907. ECHO 1,ERRCODE=("DREC")
  908. CON EMN._ERRCODE "TXT._ERRCODE" ERROR
  909. LIST *
  910. TREC SPACE 4,10
  911. ** TREC - TABLE OF RETRY COUNTS.
  912.  
  913. LIST G
  914. TREC EQU *-1
  915. ECHO 1,ERRCODE=("DREC")
  916. CON RTC._ERRCODE "TXT._ERRCODE" ERROR
  917. LIST *
  918. TSYM SPACE 4,10
  919. ** TSYM - TABLE OF BML SYMPTOM CODES.
  920.  
  921. LIST G
  922. TSYM EQU *-1
  923. ECHO 1,ERRCODE=("DREC")
  924. CON SYM._ERRCODE "TXT._ERRCODE" ERROR
  925. LIST *
  926. FNC SPACE 4,10
  927. ** FNC - FUNCTION CHANNEL.
  928. *
  929. * ENTRY (A) = FUNCTION CODE.
  930. *
  931. * EXIT (A) .LT. 0 IF CHANNEL ACTIVE UPON ENTRY OR FUNCTION
  932. * TIMEOUT. (EC) = COMPLEMENT OF ERROR CODE.
  933. * .GE. 0 IF NO ERROR.
  934. *
  935. * USES EC.
  936.  
  937.  
  938. FNC6 ACN CH ACTIVATE CHANNEL
  939. LDN 0 SET REPLY STATUS
  940.  
  941. FNC SUBR ENTRY/EXIT
  942. STM FNCA SAVE FUNCTION CODE
  943. AJM FNC5,CH IF CHANNEL IS STILL ACTIVE
  944. FAN CH FUNCTION CHANNEL
  945.  
  946. * THE DRIVER MUST WAIT AT LEAST 300 MS BEFORE TIMING OUT THE
  947. * FUNCTION.
  948.  
  949. FNC1 ADD ON
  950. IJM FNC6,CH IF FUNCTION ACCEPTED
  951. NJN FNC1 IF NOT TIMEOUT YET
  952. FNC2 LCN FTOE SET COMPLEMENT OF *FTOE* ERROR CODE
  953. FNC3 STD EC
  954. EJM FNC4,CH IF CHANNEL IS EMPTY
  955. LDN 1 SAVE LAST FUNCTION ISSUED
  956. IAM FNCA,CH
  957. FNC4 LCN 0 SET ERROR REPLY STATUS
  958. DCN CH+40
  959. UJN FNCX RETURN
  960.  
  961. FNC5 LCN CHFE SET *CHANNEL FAILURE* ERROR CODE
  962. UJN FNC3 INPUT DATA/FUNCTION FROM CHANNEL
  963.  
  964.  
  965. FNCA CON -0 CURRENT FUNCTION
  966. GDS SPACE 4,15
  967. ** GDS - GET DETAILED STATUS.
  968. *
  969. * THIS ROUTINE OBTAINS THE DETAILED STATUS FROM THE CONTROLLER.
  970. *
  971. * EXIT (A) .EQ. 0 IF STATUS OBTAINED.
  972. * .LT. 0 IF STATUS NOT OBTAINED.
  973. * (EC) = COMPLEMENT OF *IDTE* ERROR CODE IF INCOMPLETE
  974. * TRANSFER OCCURS.
  975. *
  976. * USES EC, T1.
  977. *
  978. * CALLS CCP, FNC.
  979.  
  980.  
  981. GDS1 LCN IDTE SET *INCOMPLETE DATA TRANSFER* ERROR CODE
  982. GDS2 STD EC
  983. GDS3 LDN MXSL-1 INVALIDATE DETAILED STATUS
  984. STD T1
  985. GDS4 LCN 0
  986. STM DST,T1
  987. SOD T1
  988. PJN GDS4 IF MORE BYTES
  989.  
  990. GDS SUBR ENTRY/EXIT
  991. LDN FCDS ISSUE DETAILED STATUS FUNCTION
  992. RJM FNC
  993. MJN GDS3 IF ERROR
  994. LDN MXSL
  995. IAM DST,CH INPUT DETAILED STATUS
  996. NJN GDS1 IF INCOMPLETE DATA TRANSFER
  997. RJM CCP CHECK FOR CHANNEL PARITY ERROR
  998. ZJN GDSX IF NO CHANNEL PARITY ERROR
  999. UJN GDS2 INVALIDATE STATUS AND RETURN
  1000. GGS SPACE 4,15
  1001. ** GGS - GET GENERAL STATUS.
  1002. *
  1003. * THIS ROUTINE OBTAINS THE EXTENDED GENERAL STATUS FROM THE
  1004. * CONTROLLER.
  1005. *
  1006. * EXIT (A) .GE. 0 IF GENERAL STATUS OBTAINED. (GS) = STATUS.
  1007. * .LT. 0 IF STATUS NOT OBTAINED. (GS) = 7777.
  1008. * (EC) = COMPLEMENT OF *IDTE* ERROR CODE IF INCOMPLETE
  1009. * TRANSFER OCCURRED.
  1010. * = COMPLEMENT OF *CHPE* ERROR CODE IF CHANNEL
  1011. * ERROR OCCURRED.
  1012. *
  1013. * USES EC, GS, T1.
  1014. *
  1015. * CALLS CCP, FNC.
  1016.  
  1017.  
  1018. GGS1 LCN IDTE SET *INCOMPLETE DATA TRANSFER* ERROR CODE
  1019. GGS2 STD EC
  1020. GGS3 LDN FCESL-1 INVALIDATE EXTENDED GENERAL STATUS
  1021. STD T1
  1022. GGS4 LCN 0
  1023. STM GGSA,T1
  1024. SOD T1
  1025. PJN GGS4 IF MORE BYTES
  1026. LCN 0 INVALIDATE GENERAL STATUS
  1027. GGS5 STD GS
  1028.  
  1029. GGS SUBR ENTRY/EXIT
  1030. LDM FNCA SAVE FUNCTION BEFORE GENERAL STATUS
  1031. STM GGSB
  1032. LDN FCES ISSUE EXTENDED GENERAL STATUS FUNCTION
  1033. RJM FNC
  1034. MJN GGS3 IF ERROR
  1035. LDN FCESL
  1036. IAM GGSA,CH
  1037. NJN GGS1 IF INCOMPLETE TRANSFER
  1038. RJM CCP CHECK FOR CHANNEL PARITY ERROR
  1039. MJN GGS2 IF CHANNEL PARITY ERROR
  1040. LDM GGSB RESTORE LAST FUNCTION FOR ERROR PROCESSOR
  1041. STM FNCA
  1042. LDM GGSA
  1043. UJN GGS5 SAVE FIRST STATUS BYTE
  1044.  
  1045. GGSA BSS FCESL EXTENDED GENERAL STATUS BUFFER
  1046. GGSB BSS 1 LAST FUNCTION BEFORE GENERAL STATUS
  1047. IBM SPACE 4,25
  1048. ** IBM - ISSUE BML MESSAGE.
  1049. *
  1050. * THIS ROUTINE BUILDS A BML MESSAGE AND CALLS ROUTINE *IMB* TO
  1051. * ISSUE THE MESSAGE TO THE BML.
  1052. *
  1053. * ENTRY (CA - CA+3) = SEEK PARAMETERS.
  1054. * (EC) = ERROR CODE.
  1055. * (ER) = RECOVERY IN PROGRESS FLAG.
  1056. * (RC) = RETRY COUNT.
  1057. * (RS) = RECOVERY STATUS.
  1058. * 777X INITIAL RETRY.
  1059. * 0 RECOVERED BY CONTROLLER.
  1060. * 1 RECOVERED BY DRIVER.
  1061. * 2 UNRESOLVED.
  1062. * 3 UNRECOVERED.
  1063. * (RW) = READ/WRITE FLAG.
  1064. * (T5) = EST ORDINAL.
  1065. * (BMLGS) = GENERAL STATUS.
  1066. * (DST - DST+23) = DETAILED STATUS IF APPLICABLE.
  1067. *
  1068. * EXIT (RC) INCREMENTED IF FIRST RETRY.
  1069. *
  1070. * USES RC, T1, CM+1 - CM+3.
  1071. *
  1072. * CALLS IMB.
  1073. *
  1074. * MACROS MONITOR.
  1075.  
  1076.  
  1077. IBM SUBR ENTRY/EXIT
  1078. LDM TEPF,EC
  1079. SHN 0-12
  1080. ZJN IBMX IF NO BML MESSAGE/ERROR COUNT INCREMENT
  1081. LDD RS
  1082. LMN 2
  1083. ZJN IBMX IF UNRESOLVED ERROR
  1084. SHN 21-13
  1085. PJN IBM2 IF FINAL RETRY
  1086. LDD RC
  1087. NJN IBMX IF NOT INITIAL RETRY
  1088. AOD RC INCREMENT RETRY COUNT
  1089. UJN IBM3 CONTINUE
  1090.  
  1091. * INCREMENT ERROR COUNTER.
  1092.  
  1093. IBM2 LDD T5 SET EST ORDINAL
  1094. STD CM+1
  1095. LDD RS SET BYTE NUMBER
  1096. SHN -1
  1097. ADN 3
  1098. STD CM+2
  1099. LDK ICTS SET SUBFUNCTION
  1100. STD CM+3
  1101. MONITOR SMDM
  1102. IBM3 LDD RS SET RECOVERED/UNRECOVERED FLAG
  1103. ADN 5
  1104. SHN -3
  1105. LPN 1
  1106. STD T1
  1107. LDC /COMSDFS/D1HP*400 STORE SYMPTOM CODE
  1108. LMM TSYM,EC
  1109. STM BMLSC
  1110. LMK /COMSDFS/HS0040+/COMSDFS/D1HP*400
  1111. NJN IBM4 IF NOT A MEDIA ERROR
  1112. LDD RW SET WRITE MEDIA ERROR SYMPTOM CODE
  1113. ERRNZ /COMSDFS/HS0041-/COMSDFS/HS0040-1 ERROR
  1114. RAM BMLSC
  1115. IBM4 LDD RC STORE RETRY COUNT
  1116. SHN 6-1
  1117. ADD RW ADD READ/WRITE FLAG
  1118. SHN 1
  1119. ADD T1 ADD RECOVERY STATUS
  1120. STM BMLRC
  1121. LDD CA UNIT NUMBER
  1122. LPN 77
  1123. STM BMLUN
  1124. LDD T5 EST ORDINAL
  1125. STM BMLEO
  1126. LDD EC ERROR CODE
  1127. STM BMLEC
  1128. LDD CA+1 CYLINDER
  1129. STM BMLCY
  1130. LDD CA+2 TRACK AND SECTOR
  1131. SHN 6
  1132. LMD CA+3
  1133. STM BMLTS
  1134. LDC BML ISSUE *BML* MESSAGE
  1135. RJM IMB ISSUE MESSAGE TO BUFFER
  1136. UJP IBMX RETURN
  1137. BML SPACE 4,10
  1138. * BINARY MAINTENANCE LOG MESSAGE.
  1139.  
  1140. BML BSS 0
  1141.  
  1142. HDR1 VFD 36/0 RESERVED
  1143. VFD 12/BMS1LC LENGTH OF MESSAGE
  1144. VFD 12/MLDY MESSAGE TYPE
  1145.  
  1146. VFD 12//COMSDFS/RM0014 MESSAGE ID
  1147.  
  1148. BMLSC VFD 4//COMSDFS/D1HP DRIVER TYPE
  1149. VFD 1/0 RESERVED
  1150. VFD 7/0 SYMPTOM CODE
  1151.  
  1152. BMLPP VFD 6/ PP NUMBER
  1153. VFD 6/ CHANNEL NUMBER
  1154.  
  1155. BMLUN VFD 6/0 EQUIPMENT NUMBER
  1156. VFD 6/ UNIT NUMBER
  1157.  
  1158. VFD 12/0 RESERVED
  1159.  
  1160. BMLEO VFD 12/ EST ORDINAL
  1161.  
  1162. BMLRC VFD 6/ RETRY COUNT
  1163. VFD 4/0 RESERVED
  1164. VFD 1/0 READ OPERATION
  1165. * VFD 1/1 WRITE OPERATION
  1166. VFD 1/0 RECOVERED ERROR
  1167. * VFD 1/1 UNRECOVERED ERROR
  1168.  
  1169. BMLCR VFD 6/ CHANNEL USED FOR RECOVERY
  1170. VFD 6/0 RESERVED
  1171.  
  1172. BMLMF VFD 12/ MAINFRAME ID
  1173.  
  1174. VFD 12/0 RESERVED
  1175.  
  1176. HDR1L EQU *-HDR1 HEADER LENGTH (PP WORDS)
  1177. HDR1LC EQU HDR1L/5 HEADER LENGTH (CM WORDS)
  1178.  
  1179. BMLEC VFD 12/ ERROR CODE
  1180.  
  1181. BMLCY VFD 12/ CYLINDER
  1182.  
  1183. BMLTS VFD 12/ TRACK AND SECTOR
  1184.  
  1185. BMLLF VFD 12/ LAST FUNCTION
  1186.  
  1187. BMLGS VFD 12/ GENERAL STATUS
  1188.  
  1189. * DETAILED STATUS.
  1190.  
  1191. DST BSS MXSL
  1192.  
  1193. BMS1L EQU *-BML LENGTH OF MESSAGE (PP WORDS)
  1194. .A SET BMS1L+4
  1195. BMS1LC EQU .A/5 LENGTH OF MESSAGE (CM WORDS)
  1196. IIC SPACE 4,10
  1197. ** IIC - ISSUE I/O COMPLETION REQUEST.
  1198. *
  1199. * ENTRY (CC) = COMPLETION COUNT.
  1200. * (PB) = PREVIOUS BUFFER ORDINAL, IF ANY.
  1201. *
  1202. * EXIT (PB) = 0.
  1203. *
  1204. * USES CC ,PB.
  1205. *
  1206. * CALLS CRQ.
  1207.  
  1208.  
  1209. IIC SUBR ENTRY/EXIT
  1210. LDD PB
  1211. ZJN IIC1 IF NO PREVIOUS BUFFER ORDINAL
  1212. AOD CC INCREMENT COMPLETION COUNT
  1213. LDN 0 CLEAR PREVIOUS BUFFER ORDINAL
  1214. STD PB
  1215. IIC1 LDD CC
  1216. SHN **
  1217. IICA EQU *-1
  1218. ZJN IICX IF NOT AT THRESHOLD
  1219. RJM CRQ ISSUE COMPLETION REQUEST
  1220. UJN IICX RETURN
  1221.  
  1222.  
  1223. IICB BSS 0
  1224. CON SHNI+77-0
  1225. CON SHNI+77-1
  1226. IMF SPACE 4,10
  1227. ** IMF - ISSUE MONITOR FUNCTION.
  1228. *
  1229. * ENTRY (A) = MONITOR FUNCTION CODE.
  1230. *
  1231. * EXIT (A) = 0.
  1232. * (CM - CM+4) = COMPLETED PP OUTPUT REGISTER IMAGE.
  1233. *
  1234. * USES S1.
  1235. *
  1236. * CALLS CRQ, FTN.
  1237.  
  1238.  
  1239. IMF SUBR ENTRY/EXIT
  1240. STD S1 SAVE MONITOR FUNCTION CODE
  1241. IMF1 RJM CRQ CHECK FOR FUNCTION REISSUE REQUIRED
  1242. NJN IMF1 IF PREVIOUS FUNCTION NOT YET COMPLETE
  1243. LDD S1
  1244. RJM FTN ISSUE MONITOR FUNCTION
  1245. UJN IMFX RETURN
  1246. ISF SPACE 4,25
  1247. ** ISF - ISSUE SEEK OPERATION.
  1248. *
  1249. * THIS ROUTINE ISSUES THE SEEK FUNCTION.
  1250. *
  1251. * ENTRY (CB) = BUFFER ORDINAL.
  1252. * (CS) = CHANNEL RESERVATION STATUS.
  1253. *
  1254. * EXIT (A) .EQ. 0 IF UNIT ON-CYLINDER.
  1255. * .NE. 0 IF CONTROLLER RESERVED TO OPPOSITE ACCESS,
  1256. * DRIVE RESERVED TO OTHER CONTROLLER, OR
  1257. * POSITIONER BUSY.
  1258. * (CA - CA+2) = PHYSICAL ADDRESS OF FIRST SECTOR IN
  1259. * BUFFER.
  1260. * (CS) = BIT 3 SET IF CONTROLLER HARDWARE RESERVE IS
  1261. * HELD. BIT 3 IS CLEAR IF *OPERATION COMPLETE*
  1262. * FUNCTION WAS ISSUED.
  1263. * TO *ERR* IF ERROR.
  1264. *
  1265. * USES CS, EC, CA - CA+4, CM - CM+4.
  1266. *
  1267. * CALLS ERR, FNC, GGS, RHR.
  1268. *
  1269. * MACROS CCBA.
  1270.  
  1271.  
  1272. ISF SUBR ENTRY/EXIT
  1273. CCBA PAD1 GET DISK ADDRESS FROM CBT ENTRY
  1274. CRD CA
  1275. LDD CA SET OPTION SELECT FLAGS
  1276. LMC SOSF
  1277. * LMC SOSF+4000 (PRIORITY OVERRIDE REQUIRED)
  1278. ISFA EQU *-1
  1279. STD CA
  1280. LDD CA+2 SET HEAD NUMBER
  1281. SHN 14
  1282. STD CA+2
  1283. SHN -14 SET SECTOR NUMBER
  1284. STD CA+3
  1285. LDD CS
  1286. LPN 10
  1287. NJN ISF1 IF CONTROLLER ALREADY CONNECTED
  1288. RJM GGS GET GENERAL STATUS
  1289. MJN ISF2 IF GENERAL STATUS WAS NOT OBTAINED
  1290. SHN 21-12
  1291. MJP ISFX IF COUPLER RESERVED ON OTHER ACCESS
  1292. LDN 10 SET HARDWARE RESERVE FLAG
  1293. RAD CS
  1294. ISF1 LDN FCSK ISSUE SEEK FUNCTION
  1295. RJM FNC
  1296. ISF2 MJN ISF5 IF ERROR
  1297. LDN FCSKL OUTPUT SEEK PARAMETERS
  1298. OAM CA,CH
  1299. ZJN ISF3 IF ALL DATA WAS TAKEN
  1300. LCN IDTE SET *INCOMPLETE DATA TRANSFER* ERROR CODE
  1301. UJN ISF4 PROCESS ERROR
  1302.  
  1303. ISF3 EJM ISF6,CH IF LAST BYTE TRANSFERRED
  1304. SBN 1
  1305. NJN ISF3 IF NOT TIMEOUT
  1306. LCN CHFE SET *CHANNEL FAILURE* ERROR CODE
  1307. ISF4 STD EC
  1308. ISF5 RJM ERR CALL ERROR PROCESSOR
  1309.  
  1310. ISF6 DCN CH+40
  1311. RJM GGS GET GENERAL STATUS
  1312. ZJN ISF8 IF NO ERROR AND ON-CYLINDER
  1313. MJN ISF5 IF STATUS WAS NOT OBTAINED
  1314. SHN 21-3
  1315. MJN ISF7 IF UNIT IS RESERVED TO OTHER ACCESS
  1316. SHN 3-1
  1317. PJN ISF5 IF ERROR
  1318. ISF7 RJM RHR RELEASE HARDWARE RESERVES
  1319. NJN ISF5 IF ERROR
  1320. LDN 1 INDICATE NOT ON CYLINDER
  1321. ISF8 LJM ISFX RETURN
  1322. OVI SPACE 4,15
  1323. ** OVI - OBTAIN AND VERIFY *PUT* INTERLOCK.
  1324. *
  1325. * THIS ROUTINE ATTEMPTS TO OBTAIN THE *PUT* INTERLOCK AND IF
  1326. * SUCCESSFUL, VERIFIES THAT THE BUFFER FOR WHICH THE SEEK WAS
  1327. * ISSUED IS STILL CURRENT IN THE QUEUE.
  1328. *
  1329. * ENTRY (CA+1 - CA+3) = ADDRESS USED FOR SEEK.
  1330. * (CB) = BUFFER ORDINAL.
  1331. * (ER) = RECOVERY IN PROGRESS FLAG.
  1332. * (IL) = NONZERO IF THE *PUT* INTERLOCK IS ALREADY HELD.
  1333. * (PO) = *PUT* ORDINAL.
  1334. *
  1335. * EXIT (A) = 0 IF *PUT* ENTRY IS INTERLOCKED AND BUFFER IS
  1336. * STILL CURRENT IN QUEUE.
  1337. * = NONZERO IF *PUT* ENTRY IS INTERLOCKED BY OTHER
  1338. * DRIVER OR THE BUFFER FOR WHICH THE SEEK WAS
  1339. * PERFORMED HAS ALREADY BEEN PROCESSED BY THE
  1340. * OTHER DRIVER.
  1341. * (IL) = 1 IF (A) = 0.
  1342. *
  1343. * USES IL, CM+1 - CM+2, CN - CN+4.
  1344. *
  1345. * CALLS RPI.
  1346. *
  1347. * MACROS CCBA, CPTA, MONITOR.
  1348.  
  1349.  
  1350. OVI2 LDN 0 INDICATE *PUT* INTERLOCKED AND BUFFER OK
  1351.  
  1352. OVI SUBR ENTRY/EXIT
  1353. LDD IL
  1354. NJN OVI2 IF THIS DRIVER ALREADY HAS *PUT* INTERLOCK
  1355. * LDK SUIS
  1356. ERRNZ SUIS CODE DEPENDS ON VALUE
  1357. STD CM+1
  1358. LDD PO
  1359. STD CM+2
  1360. MONITOR BIOM ISSUE INTERLOCK REQUEST
  1361. LDD CM+1
  1362. NJN OVIX IF *PUT* IS INTERLOCKED BY OTHER DRIVER
  1363. AOD IL SET *PUT* INTERLOCK FLAG
  1364. LDC CREQ UPDATE *CCT* TABLE
  1365. OVIA EQU *-2 (*CCT* FWA SET BY *PRS*)
  1366. CWD IL
  1367. LDD ER
  1368. NJN OVI2 IF RECOVERY IN PROGRESS
  1369.  
  1370. * VERIFY THAT THE BUFFER FOR WHICH THE SEEK WAS ISSUED IS STILL
  1371. * CURRENT IN THE QUEUE.
  1372.  
  1373. CPTA UNCT
  1374. CRD CN
  1375. LDD CN+3
  1376. LMD CB
  1377. NJN OVI1 IF CURRENT CBT ORDINAL CHANGED
  1378. CCBA HSLK GET *PUT* ORDINAL FROM CBT ENTRY
  1379. CRD CN
  1380. LDD CN+4
  1381. LMD PO
  1382. NJN OVI1 IF *PUT* ORDINALS DO NOT MATCH
  1383. CCBA PAD1 GET PHYSICAL ADDRESS FROM CBT ENTRY
  1384. CRD CN
  1385. LDD CN+1
  1386. LMD CA+1
  1387. NJN OVI1 IF NO CYLINDER MATCH
  1388. LDD CA+2 TRACK
  1389. SHN 6
  1390. LMD CA+3 SECTOR
  1391. LMD CN+2
  1392. ZJN OVI1.1 IF BUFFER OK
  1393. OVI1 RJM RPI RELEASE *PUT* INTERLOCK
  1394. LDN 1 INDICATE VERIFICATION FAILURE
  1395. OVI1.1 UJP OVIX RETURN
  1396. PCH SPACE 4,20
  1397. ** PCH - PROCESS CHANNEL REQUEST.
  1398. *
  1399. * THIS ROUTINE IS CALLED TO ISSUE A READ, WRITE OR CONTINUE
  1400. * FUNCTION TO THE CONTROLLER.
  1401. *
  1402. * ENTRY (A) = FUNCTION CODE.
  1403. * (CD - CD+1) = EXTENDED MEMORY ADDRESS.
  1404. * (CD+2 - CD+5) = SHORT PRU FLAGS IF WRITE REQUEST.
  1405. * (RW) = READ/WRITE FLAG.
  1406. *
  1407. * EXIT (A) .EQ. 0 IF COMPLETED SUCCESSFULLY.
  1408. * .LT. 0 IF FUNCTION TIMEOUT, INCOMPLETE DATA
  1409. * TRANSFER OR CHANNEL FAILURE.
  1410. * (EC) = COMPLEMENT OF *IDTE* ERROR CODE IF DATA
  1411. * TRANSFER ERROR.
  1412. *
  1413. * USES EC.
  1414. *
  1415. * CALLS FNC.
  1416.  
  1417.  
  1418. PCH3 LCN IDTE SET *INCOMPLETE DATA TRANSFER* ERROR CODE
  1419. PCH4 STD EC
  1420.  
  1421. PCH SUBR ENTRY/EXIT
  1422. RJM FNC FUNCTION CHANNEL
  1423. MJN PCHX IF ERROR
  1424. LDC ** OUTPUT PARAMETERS
  1425. PCHA EQU *-1 (PARAMETER BLOCK SIZE)
  1426. OAM CD,CH
  1427. NJN PCH3 IF INCOMPLETE DATA TRANSFER
  1428. PCH1 EJM PCH2,CH IF LAST BYTE ACCEPTED
  1429. SBN 1
  1430. NJN PCH1 IF NOT TIMEOUT
  1431. LCN CHFE SET *CHANNEL FAILURE* ERROR CODE
  1432. UJN PCH4 SET ERROR CODE
  1433.  
  1434. PCH2 DCN CH+40B
  1435. LDN 0 SET REPLY = SUCCESSFUL
  1436. UJN PCHX RETURN
  1437. PDT SPACE 4,15
  1438. ** PDT - PROCESS DATA TRANSFER.
  1439. *
  1440. * THIS ROUTINE PREPARES FOR AND STARTS THE DATA TRANSFER WHEN A
  1441. * REQUEST IS FOUND IN THE *PUT* AND THE SEEK HAS COMPLETED. IT
  1442. * WILL CALL THE PROPER ROUTINE FOR THE DIRECTION OF THE I/O.
  1443. * THIS ROUTINE WILL RETURN TO THE MAIN LOOP ONLY WHEN THE
  1444. * TRANSFER CANNOT CONTINUE ON THE CURRENT UNIT.
  1445. *
  1446. * ENTRY (EC) = ERROR CODE, IF RECOVERY IS IN PROGRESS.
  1447. * (PO) = *PUT* ORDINAL.
  1448. * (RW) = READ/WRITE FLAG.
  1449. *
  1450. * USES NB, PB, PI, T1, T7, CD - CD+1, CN+2 - CN+4.
  1451. *
  1452. * CALLS ERR, OVI, RHR, RIO, RPI, WIO.
  1453. *
  1454. * MACROS CCBA.
  1455.  
  1456.  
  1457. PDT SUBR ENTRY/EXIT
  1458. LDM PDTB,RW STORE PARAMETER BLOCK LENGTH
  1459. STM PCHA
  1460. RJM OVI OBTAIN *PUT* INTERLOCK AND VERIFY BUFFER
  1461. NJN PDT1 IF UNABLE TO INTERLOCK *PUT*/WRONG BUFFER
  1462. STD NB CLEAR NEXT BUFFER ORDINAL
  1463. STD PB CLEAR PREVIOUS BUFFER ORDINAL
  1464. STD PI SET *PADN* WORD OFFSET
  1465. LDM IICB,RW
  1466. STM IICA
  1467. LDM PDTA,RW STORE SUBROUTINE ADDRESS
  1468. STD T1
  1469. CCBA IOLK
  1470. CRD CD-3
  1471. ERRNZ CD-CN-5 CODE IS VALUE DEPENDENT
  1472. LDN PPSLB SET SECTOR COUNT
  1473. STD T7
  1474. RJM 0,T1 ENTER DATA TRANSFER ROUTINE
  1475.  
  1476. * CONTROL RETURNS HERE AFTER THE DATA TRANSFER IS COMPLETED.
  1477.  
  1478. PDT1 RJM RHR RELEASE HARDWARE RESERVES
  1479. ZJN PDT2 IF NO ERROR
  1480. LDD EC
  1481. NJN PDT2 IF ERROR RECOVERY IN PROGRESS
  1482. RJM ERR CALL ERROR PROCESSOR
  1483.  
  1484. PDT2 RJM RPI RELEASE *PUT* INTERLOCK
  1485. UJP PDTX RETURN
  1486.  
  1487. PDTA BSS 0 PROCESSOR ADDRESS TABLE
  1488. CON RIO
  1489. CON WIO
  1490.  
  1491. PDTB BSS 0 PARAMETER BLOCK LENGTH TABLE
  1492. CON FCRDL
  1493. CON FCWRL
  1494. PFR SPACE 4,15
  1495. ** PFR - PREPARE FOR RETRY ATTEMPT.
  1496. *
  1497. * THIS ROUTINE DOES WHATEVER IS NECESSARY TO PREPARE FOR THE
  1498. * NEXT RETRY ATTEMPT. ITS DUTIES INCLUDE PLUGGING INSTRUCTIONS
  1499. * TO FORCE RETURN TO THE ERROR PROCESSOR FOLLOWING RECOVERY.
  1500. *
  1501. * ENTRY (RW) = READ/WRITE FLAG.
  1502. *
  1503. * USES T1, T2.
  1504.  
  1505.  
  1506. PFR SUBR ENTRY/EXIT
  1507. LDD RW
  1508. SHN 1
  1509. STD T1
  1510. LDM PFRA,T1
  1511. STD T2
  1512. LDM PFRA+1,T1
  1513. STI T2
  1514. UJN PFRX RETURN
  1515.  
  1516. PFRA BSS 0
  1517. CON RIOA,RIOX
  1518. CON WIOA,WIO6.1
  1519. PRE SPACE 4,15
  1520. ** PRE - PRESET ERROR PROCESSOR.
  1521. *
  1522. * THIS ROUTINE PERFORMS OPERATIONS NECESSARY TO PREPARE THE
  1523. * DRIVER FOR ERROR PROCESSOR EXECUTION.
  1524. *
  1525. * EXIT (A) = 0 IF ERROR PROCESSING SHOULD CONTINUE.
  1526. * (RS) = RECOVERY STATUS.
  1527. * (T5) = EST ORDINAL.
  1528. * (TEPA) = 1 IF VERIFICATION/INTERLOCK REJECT.
  1529. *
  1530. * USES RS, T5, CM - CM+4.
  1531. *
  1532. * CALLS CRQ, OVI.
  1533. *
  1534. * MACROS CPTA.
  1535.  
  1536.  
  1537. PRE2 AOM TEPA SET VERIFICATION/INTERLOCK REJECT FLAG
  1538. STD RS FORCE EXIT TO *MST*
  1539.  
  1540. PRE SUBR ENTRY/EXIT
  1541. DCN CH+40 DISCONNECT CHANNEL IN CASE STILL ACTIVE
  1542. LDM FNCA SAVE CURRENT FUNCTION
  1543. STM BMLLF
  1544. LCN 0 INITIALIZE RECOVERY STATUS
  1545. STD RS
  1546. LDD HN
  1547. ERRNZ SOSF-100 CODE DEPENDS ON VALUE
  1548. STM ISFA
  1549. RJM OVI GET *PUT* INTERLOCK (IF NOT ALREADY HELD)
  1550. NJN PRE2 IF INTERLOCK NOT OBTAINED
  1551. CPTA UNCT GET EST ORDINAL
  1552. CRD CM
  1553. LDD CM+1
  1554. STD T5
  1555. PRE1 RJM CRQ ENSURE NO PENDING MONITOR FUNCTIONS
  1556. NJN PRE1 IF FUNCTION STILL PENDING
  1557. UJN PREX RETURN
  1558. RCH SPACE 4,10
  1559. ** RCH - REQUEST CHANNEL.
  1560. *
  1561. * ENTRY (IR+4) = CHANNEL NUMBER.
  1562. * (CS) = CHANNEL RESERVATION STATUS.
  1563. *
  1564. * EXIT (A) .NE. 0 IF CHANNEL ASSIGNED.
  1565. * .EQ. 0 IF CHANNEL NOT ASSIGNED.
  1566. *
  1567. * USES CM+1, CS.
  1568. *
  1569. * MACROS MONITOR.
  1570.  
  1571.  
  1572. RCH SUBR ENTRY/EXIT
  1573. LDD CS
  1574. LPN 1
  1575. NJN RCHX IF CHANNEL ALREADY ASSIGNED
  1576. LDD IR+4
  1577. STD CM+1
  1578. MONITOR CCHM
  1579. LDD CM+2
  1580. ZJN RCHX IF CHANNEL NOT ASSIGNED
  1581. AOD CS SET CHANNEL RESERVATION FLAG
  1582. UJN RCHX RETURN
  1583. RHR SPACE 4,10
  1584. ** RHR - RELEASE HARDWARE RESERVES.
  1585. *
  1586. * ENTRY (CS) = CHANNEL STATUS.
  1587. *
  1588. * EXIT (A) = 0 IF NO ERROR.
  1589. *
  1590. * USES CS, S1.
  1591. *
  1592. * CALLS FNC.
  1593.  
  1594.  
  1595. RHR SUBR ENTRY/EXIT
  1596. LDD CS
  1597. LPN 10
  1598. ZJN RHRX IF CONTROLLER NOT RESERVED
  1599. LDN FCOC ISSUE *OPERATION COMPLETE* FUNCTION
  1600. RJM FNC
  1601. SHN 0-21 SAVE ERROR STATUS
  1602. STD S1
  1603. DCN CH+40
  1604. LCN 10 CLEAR CONTROLLER RESERVE FLAG
  1605. RAD CS
  1606. LDD S1 SET REPLY STATUS
  1607. UJN RHRX RETURN
  1608. RIO SPACE 4,15
  1609. ** RIO - PERFORM READ OPERATION.
  1610. *
  1611. * ENTRY (CB) = CURRENT BUFFER ORDINAL.
  1612. * (CD - CD+1) = BUFFER ADDRESS.
  1613. * (NB) = 0.
  1614. * (PB) = 0.
  1615. * (PI) = 0.
  1616. * (T7) = *PPSLB*.
  1617. *
  1618. * EXIT (PB) = ORDINAL OF LAST BUFFER PROCESSED.
  1619. *
  1620. * USES CB, PB, PI, T7, CD - CD+1, CM - CM+4, CN+2 - CN+4.
  1621. *
  1622. * CALLS CCS, CRQ, ERR, GGS, IIC, PCH.
  1623. *
  1624. * MACROS CCBA.
  1625.  
  1626.  
  1627. RIO SUBR ENTRY/EXIT
  1628. RIO1 LDN FCRD ISSUE READ FUNCTION
  1629. RJM PCH
  1630. MJN RIO4 IF ERROR
  1631. RJM IIC CHECK FOR NEED TO ISSUE COMPLETION REQUEST
  1632. LDD T7
  1633. LPN 1
  1634. ZJN RIO3 IF FIRST SECTOR OF CONTROL WORD
  1635. CCBA PAD1 UPDATE PRU FLAGS
  1636. ADD PI
  1637. CRD CM
  1638. LDM GGSA+3
  1639. STD CM+3
  1640. LDM GGSA+4 UPDATE LINKAGE BYTE
  1641. STD CM+4
  1642. CCBA PAD1
  1643. ADD PI
  1644. CWD CM
  1645. AOD PI INCREMENT *PADN* WORD OFFSET
  1646. RIO3 RJM CCS CHECK FOR CONSECUTIVE REQUEST
  1647. RJM GGS GET GENERAL STATUS
  1648. ZJN RIO5 IF NO ERROR
  1649. RIO4 RJM ERR PROCESS ERROR
  1650. RIO5 AOD CA+3 ADVANCE CURRENT POSITION
  1651. LMN PSPT
  1652. NJN RIO6 IF NOT END OF TRACK
  1653. STD CA+3 RESET TO SECTOR 0
  1654. AOD CA+2 ADVANCE TO NEXT TRACK
  1655. RIO6 SOD T7 DECREMENT SECTOR COUNT
  1656. ZJN RIO7 IF FINISHED WITH BUFFER
  1657. LDC EMAI INCREMENT EXTENDED MEMORY ADDRESS
  1658. RAD CD+1
  1659. SHN -14
  1660. RAD CD
  1661. LJM RIO1 READ NEXT SECTOR
  1662.  
  1663. RIO7 STD PI RESET *PADN* WORD OFFSET
  1664. RJM CCS CHECK FOR CONSECUTIVE REQUEST
  1665. LDD CB ADVANCE BUFFER POINTERS
  1666. STD PB
  1667. LDD NB
  1668. STD CB
  1669. ZJP RIOX IF NO CONSECUTIVE REQUEST FOUND
  1670. CCBA IOLK,A INITIALIZE EXTENDED MEMORY ADDRESS
  1671. CRD CD-3
  1672. ERRNZ CD-CN-5 CODE IS VALUE DEPENDENT
  1673. LDN PPSLB RESET SECTOR COUNT
  1674. STD T7
  1675. LDN 0 CLEAR NEXT BUFFER ORDINAL
  1676. STD NB
  1677. LJM RIO1 CONTINUE TRANSFER
  1678. * LJM RIOX (ERROR RECOVERY IN PROGRESS)
  1679. RIOA EQU *-1
  1680. RLC SPACE 4,15
  1681. ** RLC - RELOAD CONTROLWARE.
  1682. *
  1683. * THIS ROUTINE CALLS *1DS* TO INITIATE THE CONTROLWARE RELOAD.
  1684. *
  1685. * EXIT (A) = 0 IF CONTROLWARE RELOADED.
  1686. *
  1687. * USES S2, CM - CM+4, CN - CN+4.
  1688. *
  1689. * CALLS *1DS*.
  1690. *
  1691. * MACROS DELAY, EXECUTE, MONITOR.
  1692.  
  1693.  
  1694. RLC6 LDN 1 INDICATE CONTROLWARE NOT RELOADED
  1695.  
  1696. RLC SUBR ENTRY/EXIT
  1697. LDC **
  1698. RLCJ EQU *-1
  1699. NJN RLCX IF RELOAD WAS ALREADY ATTEMPTED
  1700. LDK DSSL AVOID CONTROLWARE LOAD DURING DEADSTART
  1701. CRD CM
  1702. LDD CM+4
  1703. LPN 4
  1704. NJN RLCX IF DEADSTART IN PROGRESS
  1705. LDC ** READ CONTROLWARE TABLE
  1706. RLCA EQU *-1 CM ADDRESS OF TABLE ENTRY
  1707. CRD CM
  1708. LDD CM+**
  1709. RLCB EQU *-1 BYTE ADDRESS OF TABLE ENTRY
  1710. SHN 21-13
  1711. MJN RLCX IF RELOAD IN PROGRESS
  1712. SHN 13-21-6
  1713. LPN 7 CONTROLWARE LOAD COUNT
  1714. LMK CRTH
  1715. ZJN RLC6 IF RELOAD LIMIT REACHED
  1716. AOM RLCJ SET RELOAD ATTEMPTED FLAG
  1717.  
  1718. * SET RELOAD REQUEST BIT IN CONTROLWARE TABLE.
  1719.  
  1720. LDN 0
  1721. STD CM+2
  1722. LDD MA MESSAGE BUFFER ADDRESS
  1723. CWM RLCG,ON REQUEST WORD
  1724. LDC **
  1725. RLCC EQU *-1 ADDRESS OF CONTROLWARE TABLE ENTRY
  1726. STD CM+4
  1727. SHN -14
  1728. STD CM+3
  1729. LDN 1 NUMBER OF REQUESTS TO PROCESS
  1730. STD CM+1
  1731. MONITOR UTEM
  1732. * LDN 0 INITIALIZE RETRY COUNT
  1733. STD S2
  1734.  
  1735. * CALL *1DS* TO INITIATE CONTROLWARE LOAD JOB.
  1736.  
  1737. RLC1 DELAY
  1738. LDD MA MESSAGE BUFFER ADDRESS
  1739. CWM RLCH,ON *1DS* REQUEST
  1740. EXECUTE 1DS,=
  1741. MONITOR RPPM REQUEST PP
  1742. LDD CM+1
  1743. NJN RLC2 IF PP ASSIGNED
  1744. AOD S2 INCREMENT RETRY COUNT
  1745. LMK PCRL
  1746. NJN RLC1 IF NOT RETRY LIMIT
  1747. RLC2 LJM RLCX RETURN
  1748.  
  1749.  
  1750. RLCG VFD 1/0,5/0,6/1,6/,42/1 *UTEM* REQUEST
  1751. RLCH VFD 18/3L1DS,6/,12/ILJF,24/0 *1DS* REQUEST
  1752. RPI SPACE 4,10
  1753. ** RPI - RELEASE *PUT* INTERLOCK.
  1754. *
  1755. * ENTRY (CC) = COMPLETION COUNT.
  1756. * (IL) = *PUT* INTERLOCK FLAG.
  1757. * (PB) = PREVIOUS BUFFER ORDINAL.
  1758. * (PO) = *PUT* ORDINAL.
  1759. * (TB) = TOTAL CBT COUNT.
  1760. *
  1761. * USES CC, IL, PB, CM - CM+4.
  1762. *
  1763. * MACROS MONITOR.
  1764.  
  1765.  
  1766. RPI SUBR ENTRY/EXIT
  1767. LDD IL
  1768. ZJN RPIX IF *PUT* NOT INTERLOCKED
  1769. LDD TB SET TOTAL BUFFER COUNT
  1770. STD CM+4
  1771. LDD PB
  1772. ZJN RPI1 IF NO PREVIOUS BUFFER
  1773. LDN 1 ACCOUNT FOR PREVIOUS BUFFER
  1774. RPI1 ADD CC
  1775. LMC 4000 SET *RELEASE INTERLOCK* FLAG
  1776. STD CM+3
  1777. LDD PO
  1778. STD CM+2
  1779. LDN DCBS CLEAR UNIT INTERLOCK
  1780. STD CM+1
  1781. LDN 0 CLEAR COMPLETION COUNT BEFORE *CRQ* CALL
  1782. STD CC
  1783. MONITOR BIOM
  1784. * LDN 0
  1785. STD IL CLEAR *PUT* INTERLOCK FLAG
  1786. STD PB CLEAR PREVIOUS BUFFER ORDINAL
  1787. LDC CREQ UPDATE *CCT* TABLE
  1788. RPIA EQU *-2 (*CCT* FWA SET BY *PRS*)
  1789. CWD IL
  1790. UJP RPIX RETURN
  1791. RTM SPACE 4,25
  1792. ** RTM - REQUEST TRACK FLAW IF MEDIA ERROR.
  1793. *
  1794. * THIS ROUTINE DETERMINES IF THE ERROR RESULTED FROM A MEDIA
  1795. * FAILURE. IF IT DID, *CPUMTR* WILL BE CALLED TO PLACE THE
  1796. * LOGICAL TRACK NUMBER IN THE MST SO *1MV* CAN PERFORM A MEDIA
  1797. * VERIFICATION WHEN THE TRACK IS RELEASED. AN ERROR LOG
  1798. * MESSAGE IS ISSUED INFORMING THE OPERATOR THAT A MEDIA FAILURE
  1799. * OCCURRED BUT THE TRACK HAS NOT YET BEEN FLAWED BY THE SYSTEM.
  1800. *
  1801. * ENTRY (CA - CA+3) = PHYSICAL ADDRESS.
  1802. * (CB) = BUFFER ORDINAL.
  1803. * (EC) = ERROR CODE.
  1804. * (T5) = EST ORDINAL.
  1805. *
  1806. * USES T1, CM - CM+4.
  1807. *
  1808. * CALLS C2D, IMB.
  1809. *
  1810. * MACROS MONITOR.
  1811.  
  1812.  
  1813. RTM SUBR ENTRY/EXIT
  1814. LDD EC
  1815. LMK PARE
  1816. NJN RTMX IF NOT MEDIA ERROR
  1817. LDD T5 CONVERT AND STORE EST ORDINAL IN MESSAGE
  1818. SHN -3
  1819. RJM C2D
  1820. STM RTMB+1
  1821. LDD T5
  1822. STD CM+1 STORE EST ORDINAL FOR *SMDM*
  1823. LPN 7
  1824. SHN 6
  1825. ADC 2R0,
  1826. STM RTMB+2
  1827. LDD CA+1 COMPUTE LOGICAL TRACK
  1828. SHN 1
  1829. ADC 4000
  1830. STD CM+2
  1831. LDD CA+2 PHYSICAL TRACK
  1832. LPN 77
  1833. SHN 5
  1834. ERRNZ PSPT-40 CODE DEPENDS ON VALUE
  1835. ADD CA+3
  1836. SBK PSLTDB
  1837. MJN RTM1 IF FIRST LOGICAL TRACK OF CYLINDER
  1838. AOD CM+2
  1839. RTM1 LDD CM+2
  1840. SHN -6 CONVERT UPPER 6 BITS
  1841. RJM C2D
  1842. STM RTMB+4 STORE RESULT IN DISPLAY BUFFER
  1843. LDD CM+2 CONVERT LOWER 6 BITS
  1844. LPN 77
  1845. RJM C2D
  1846. STM RTMB+5 STORE RESULT IN DISPLAY BUFFER
  1847. LDK SFTS SET SUBFUNCTION
  1848. STD CM+3
  1849. MONITOR SMDM
  1850. LDD CM+1
  1851. NJN RTM2 IF THIS TRACK FLAW ALREADY REQUESTED
  1852. LDC RTMA ISSUE ERROR LOG MESSAGE
  1853. RJM IMB
  1854. RTM2 UJP RTMX RETURN
  1855.  
  1856.  
  1857. RTMA VFD 24/0 RESERVED
  1858. VFD 12/1 ERRLOG ALERT FLAG
  1859. VFD 12/RTMAL MESSAGE LENGTH
  1860. VFD 12/ELDY ERRLOG DAYFILE
  1861.  
  1862. RTMB DATA C*EQXXX,TKNNNN, MEDIA DEFECT ENCOUNTERED.*
  1863.  
  1864. .1 SET *-RTMA+4
  1865. RTMAL EQU .1/5
  1866. SCD SPACE 4,15
  1867. ** SCD - SET DRIVER DROPPED FLAG.
  1868. *
  1869. * THIS ROUTINE SETS A FLAG IN THE CONTROLWARE TABLE INDICATING
  1870. * THAT THE DRIVER OF THIS CHANNEL HAS DROPPED.
  1871. *
  1872. * EXIT (A) = 0.
  1873. *
  1874. * USES CM+1 - CM+4.
  1875. *
  1876. * MACROS MONITOR.
  1877.  
  1878.  
  1879. SCD SUBR ENTRY/EXIT
  1880. LDD MA STORE *UTEM* PARAMETERS
  1881. CWM SCDB,ON
  1882. LDC **
  1883. SCDA EQU *-1 (CONTROLWARE TABLE ADDRESS)
  1884. STD CM+4
  1885. SHN -14
  1886. STD CM+3
  1887. LDN 1
  1888. STD CM+1
  1889. LDN 0
  1890. STD CM+2
  1891. MONITOR UTEM SET DRIVER DROP FLAG
  1892. UJN SCDX RETURN
  1893.  
  1894. SCDB VFD 1/0,5/0,6/1,6/,42/1
  1895. SSF SPACE 4,15
  1896. ** SSF - SET SUSPECT FLAG.
  1897. *
  1898. * THIS ROUTINE SETS THE SUSPECT FLAG IN THE MST ENTRY VIA
  1899. * AN *SEQM* MONITOR FUNCTION IF CERTAIN CRITERIA ARE MET. IT
  1900. * ALSO SETS AN ERROR CODE IN THE MST THAT APPEARS ON THE *E,M*
  1901. * DISPLAY.
  1902. *
  1903. * ENTRY (EC) = ERROR CODE.
  1904. * (RC) = RETRY COUNT.
  1905. * (T5) = EST ORDINAL.
  1906. *
  1907. * USES CM+1 - CM+3.
  1908. *
  1909. * CALLS RTM.
  1910. *
  1911. * MACROS MONITOR.
  1912.  
  1913.  
  1914. SSF SUBR ENTRY/EXIT
  1915. LDD RC
  1916. LMK SURT
  1917. NJN SSFX IF NOT TIME TO SET SUSPECT FLAG
  1918. RJM RTM CHECK FOR MEDIA FAILURE
  1919. LDM TEPF,EC
  1920. SHN 21-7
  1921. PJN SSFX IF SUSPECT FLAG NOT TO BE SET
  1922. LDD T5 SET SUSPECT FLAG
  1923. STD CM+1
  1924. LDN SSES
  1925. STD CM+2
  1926. MONITOR SEQM
  1927. LDD T5 SET ERROR CODE IN MST
  1928. STD CM+1
  1929. LDN STDE
  1930. STD CM+2
  1931. LDN SERS
  1932. STD CM+3
  1933. MONITOR SMDM
  1934. UJN SSFX RETURN
  1935. SUQ SPACE 4,15
  1936. ** SUQ - SCAN UNIT QUEUE.
  1937. *
  1938. * THIS ROUTINE SCANS THE *PUT* ENTRIES OF UNITS ACCESSED BY
  1939. * THIS CHANNEL UNTIL IT HAS SCANNED THE ENTIRE TABLE OR FINDS
  1940. * AN ENTRY ELIGIBLE FOR PROCESSING.
  1941. *
  1942. * ENTRY (TI) = CURRENT *TPOR* INDEX.
  1943. *
  1944. * EXIT (A) .EQ. 0 IF ENTIRE TABLE SCANNED AND NO ELIGIBLE
  1945. * ENTRY FOUND.
  1946. * .NE. 0 IF ENTRY SELECTED.
  1947. * (CB) = CURRENT BUFFER ORDINAL.
  1948. * (ER) = 1 IF ERROR RECOVERY IS IN PROGRESS.
  1949. * (PO) = ORDINAL OF SELECTED *PUT* ENTRY.
  1950. * (RC) = 0 IF ELIGIBLE ENTRY FOUND AND *RECOVERY IN
  1951. * PROGRESS* FLAG IS CLEAR.
  1952. * = N/2 WHERE N IS THE RETRY LIMIT FOR THE ERROR
  1953. * CODE SET IN *EC* IF *RECOVERY IN PROGRESS*
  1954. * FLAG IS SET.
  1955. * (RW) = READ/WRITE FLAG.
  1956. * TO *ERR* IF ERROR RECOVERY IS IN PROGRESS FOR
  1957. * SELECTED BUFFER.
  1958. * (TB) = TOTAL BUFFER COUNT.
  1959. *
  1960. * USES CB, EC, ER, PO, RC, RW, S1, TB, TI, CM - CM+4,
  1961. * CN - CN+4, T1 - T5.
  1962. *
  1963. * CALLS ERR.
  1964. *
  1965. * MACROS CCBA, CPTA, SFA.
  1966.  
  1967.  
  1968. SUQ7 LDD TI
  1969. LMN 1
  1970. SUQA EQU *-1
  1971. NJN SUQ1 IF NOT FINISHED WITH *PUT* SCAN
  1972.  
  1973. SUQ SUBR ENTRY/EXIT
  1974. SUQ1 AOD TI ADVANCE *TPOR* INDEX
  1975. ERRNZ TPORE-1 CODE IS VALUE DEPENDENT
  1976. LDM TPOR-1,TI
  1977. NJN SUQ2 IF NOT END OF *TPOR* TABLE
  1978. STD TI RESET INDEX
  1979. UJN SUQ1 CONTINUE
  1980.  
  1981. SUQ2 SHN 14 SET CHANNEL BYTE INDEX
  1982. STD S1
  1983. SHN -14 SET *PUT* ORDINAL
  1984. STD PO
  1985. CPTA UNCT,A READ *PUT* ENTRY
  1986. CRD CM
  1987. LDD CM
  1988. SHN 21-13
  1989. MJN SUQ7 IF UNIT INTERLOCK SET
  1990. LDD CM+3
  1991. NJN SUQ3 IF REQUEST IN QUEUE
  1992. SUQ2.1 UJN SUQ7 PROCESS NEXT *PUT*
  1993.  
  1994. SUQ3 STD CB SAVE BUFFER ORDINAL
  1995. CCBA IOLK,A READ *CBT* ENTRY
  1996. CRD CN
  1997. ADK HSLK-IOLK
  1998. CRD T1
  1999. SFA EST,CM+1 READ EST ENTRY
  2000. ADK EQDE
  2001. CRD CM
  2002. LDM CM+1,S1
  2003. SHN -11
  2004. LPN 3
  2005. STD T2 SAVE CHANNEL STATE INDICATOR
  2006. LMN 3
  2007. NJN SUQ4 IF CHANNEL NOT DOWN
  2008. SUQ3.1 UJN SUQ2.1 PROCESS NEXT *PUT*
  2009.  
  2010. SUQ4 LDD T1
  2011. SHN 0-12
  2012. ZJN SUQ4.1 IF NOT CHANNEL SPECIFIC REQUEST
  2013. CCBA PAD4 GET CHANNEL FROM CBT ENTRY
  2014. CRD CM
  2015. LDD CM
  2016. SHN -6
  2017. LMD IR+4
  2018. STD T2
  2019. SUQ4.1 LDD T2
  2020. NJN SUQ3.1 IF IDLE STATE OR OTHER CHANNEL SPECIFIED
  2021. LDD CN SET/CLEAR READ/WRITE FLAG
  2022. SHN 0-11
  2023. LPN 1
  2024. STD RW
  2025. SHN 13-0 SET TOTAL BUFFER COUNT
  2026. ADN 1
  2027. STD TB
  2028. LDD T1
  2029. SHN 0-13
  2030. STD ER SET/CLEAR RECOVERY IN PROGRESS FLAG
  2031. ZJN SUQ6 IF NOT ERROR RECOVERY
  2032. LDD T1 SAVE ERROR CODE
  2033. LPN 77
  2034. STD T1
  2035. LMC 7777 COMPLEMENT ERROR CODE
  2036. STD EC
  2037. LDM TREC,T1 SET RETRY COUNT = LIMIT/2
  2038. SHN -1
  2039. STD RC
  2040. RJM ERR CALL ERROR PROCESSOR
  2041. LJM SUQ1 CONTINUE SCAN
  2042.  
  2043. SUQ6 LDD TI SET SCAN LIMIT
  2044. LMC LMNI
  2045. STM SUQA
  2046. LJM SUQX RETURN
  2047. TEP SPACE 4,25
  2048. ** TEP - TERMINATE ERROR PROCESSING.
  2049. *
  2050. * THIS ROUTINE PERFORMS OPERATIONS NECESSARY TO RESTORE THE
  2051. * DRIVER TO ITS NORMAL STATE (NON-ERROR PROCESSING).
  2052. *
  2053. * ENTRY (EC) = ERROR CODE.
  2054. * (PO) = *PUT* ORDINAL.
  2055. * (RS) = RECOVERY STATUS.
  2056. * (RW) = READ/WRITE FLAG.
  2057. *
  2058. * EXIT (EC) = 0.
  2059. * (ER) = 0.
  2060. * (RC) = 0.
  2061. * (RS) = RECOVERY STATUS.
  2062. * 0 RECOVERED BY CONTROLLER.
  2063. * 1 RECOVERED BY DRIVER.
  2064. * 2 UNRESOLVED.
  2065. * 3 UNRECOVERED.
  2066. *
  2067. * USES EC, ER, IL, RC, RS, S2, T1, T2, CM - CM+4.
  2068. *
  2069. * CALLS IBM, RHR, RPI.
  2070. *
  2071. * MACROS MONITOR.
  2072.  
  2073.  
  2074. TEP4 LDN 0
  2075. STD EC CLEAR ERROR CODE
  2076. STD ER CLEAR RECOVERY IN PROGRESS FLAG
  2077. STD RC CLEAR RETRY COUNT
  2078. STM RLCJ CLEAR RELOAD ATTEMPTED FLAG
  2079. STM TEPA CLEAR VERIFICATION/INTERLOCK REJECT FLAG
  2080. LDD HN RESET SEEK SELECTION OPTIONS
  2081. ERRNZ SOSF-100 CODE DEPENDS ON VALUE
  2082. STM ISFA
  2083.  
  2084. TEP SUBR ENTRY/EXIT
  2085. LDD RW
  2086. SHN 1
  2087. STD T1
  2088. LDM TEPB,T1 RESTORE INSTRUCTIONS
  2089. STD T2
  2090. LDM TEPB+1,T1
  2091. STI T2
  2092. LDC **
  2093. TEPA EQU *-1
  2094. NJP TEP4 IF OTHER DRIVER HANDLING ERROR
  2095. LDD RS
  2096. ZJN TEP1 IF RECOVERED BY CONTROLLER
  2097. LDD EC SAVE ERROR CODE IN CASE FUNCTION TIMEOUT
  2098. STD S2
  2099. RJM RHR RELEASE HARDWARE RESERVES
  2100. LDD S2 RESTORE ERROR CODE
  2101. STD EC
  2102. LDD RS
  2103. TEP1 LMN 2
  2104. NJN TEP2 IF NOT UNRESOLVED ERROR
  2105.  
  2106. * ISSUING SUBFUNCTION *SETS* OF THE *BIOM* MONITOR FUNCTION
  2107. * CAUSES ONE OF THE FOLLOWING TO OCCUR -
  2108. * A. IF THE RECOVERY IN PROGRESS FLAG IS SET IN THE CBT
  2109. * ENTRY, THE REQUEST WILL BE TERMINATED WITH STATUS
  2110. * RETURNED TO THE PROGRAM THAT ISSUED THE REQUEST.
  2111. * IN THIS CASE IT IS THE RESPONSIBILITY OF THIS
  2112. * DRIVER TO ISSUE MESSAGES TO THE BML, ERROR LOG, JOB
  2113. * DAYFILE AND SYSTEM DAYFILE INDICATING AN
  2114. * UNRECOVERED ERROR OCCURRED.
  2115. * B. IF THE RECOVERY IN PROGRESS FLAG IS CLEAR AND AN
  2116. * ALTERNATE CHANNEL EXISTS (WITH AN ACTIVE DRIVER),
  2117. * THE REQUEST WILL BE MODIFIED TO FORCE CONTINUATION
  2118. * OF ERROR RECOVERY BY THE OTHER DRIVER.
  2119. * C. IF THE RECOVERY IN PROGRESS FLAG IS CLEAR BUT
  2120. * EITHER THERE IS NO ALTERNATE ACCESS PATH OR IT HAS
  2121. * BEEN DOWNED, THE REQUEST WILL BE MODIFIED TO FORCE
  2122. * CONTINUATION OF ERROR PROCESSING ON THIS CHANNEL.
  2123.  
  2124. LDN SETS SET SUBFUNCTION
  2125. STD CM+1
  2126. LDD PO SET *PUT* ORDINAL
  2127. STD CM+2
  2128. LDN 1 SET BUFFER COUNT
  2129. STD CM+3
  2130. LDD EC SET ERROR CODE
  2131. STD CM+4
  2132. MONITOR BIOM
  2133. STD IL CLEAR *PUT* INTERLOCK FLAG
  2134. LDD CM+1
  2135. ZJN TEP2 IF PROCESSING WILL RESUME ON OTHER CHANNEL
  2136. AOD RS SET UNRECOVERED STATUS
  2137.  
  2138.  
  2139. * ISSUE THE BML MESSAGE AND INCREMENT ERROR COUNTERS IF
  2140. * APPROPRIATE FOR THIS ERROR TYPE AND RESOLUTION OF THE ERROR
  2141. * HAS BEEN DETERMINED.
  2142.  
  2143. TEP2 LDD RS
  2144. LPN 1
  2145. ZJN TEP3 IF UNRESOLVED OR RECOVERED BY CONTROLLER
  2146. RJM RPI RELEASE *PUT* INTERLOCK
  2147. TEP3 RJM IBM ISSUE BML MESSAGE
  2148.  
  2149. * CLEAR B-DISPLAY MESSAGE.
  2150.  
  2151. LDK ZERL
  2152. CRD CM
  2153. LDD CP
  2154. ADK MS2W
  2155. CWD CM
  2156. UJP TEP4 CONTINUE CLEARING AND RETURN
  2157.  
  2158.  
  2159. TEPB BSS 0
  2160. CON RIOA,RIO1
  2161. CON WIOA,WIO1
  2162. WIO SPACE 4,10
  2163. ** WIO - PERFORM WRITE OPERATION.
  2164. *
  2165. * ENTRY (CB) = CURRENT BUFFER ORDINAL.
  2166. * (CD - CD+1) = BUFFER ADDRESS.
  2167. * (NB) = 0.
  2168. * (PB) = 0.
  2169. * (PI) = 0.
  2170. * (T7) = *PPSLB*.
  2171. *
  2172. * EXIT (PB) = ORDINAL OF LAST BUFFER PROCESSED.
  2173. *
  2174. * USES CB, PB, PI, T1, T7, CA+2 - CA+3, CD - CD+5,
  2175. * CN+2 - CN+4.
  2176. *
  2177. * CALLS CCS, CRQ, ERR, GGS, IIC, PCH.
  2178. *
  2179. * MACROS CCBA.
  2180.  
  2181.  
  2182. WIO SUBR ENTRY/EXIT
  2183. WIO1 LDD T7
  2184. LPN 1
  2185. NJN WIO2 IF NOT FIRST SECTOR OF CONTROL WORD
  2186. LDD CD+1 SAVE EXTENDED MEMORY ADDRESS BYTE
  2187. STD T1
  2188. CCBA PAD1 GET LINKAGE BYTES FROM *CBT* ENTRY
  2189. ADD PI
  2190. CRD CD+1
  2191. LDD T1 RESTORE EXTENDED MEMORY ADDRESS BYTE
  2192. STD CD+1
  2193. AOD PI INCREMENT *PADN* INDEX
  2194. WIO2 LDN FCWR ISSUE WRITE FUNCTION
  2195. RJM PCH
  2196. MJN WIO4.1 IF ERROR
  2197. AOD CA+3 ADVANCE CURRENT POSITION
  2198. LMN PSPT
  2199. NJN WIO3 IF NOT END OF TRACK
  2200. STD CA+3 RESET TO SECTOR ZERO
  2201. AOD CA+2 ADVANCE TO NEXT TRACK
  2202. WIO3 SOD T7 DECREMENT SECTOR COUNT
  2203. ZJN WIO5 IF FINISHED WITH BUFFER
  2204. LMK PPSLB-1
  2205. ZJN WIO4 IF FIRST SECTOR OF BUFFER
  2206. RJM IIC ISSUE I/O COMPLETION REQUEST IF REQUIRED
  2207. WIO4 LDC EMAI INCREMENT EXTENDED MEMORY ADDRESS
  2208. RAD CD+1
  2209. SHN -14
  2210. RAD CD
  2211. RJM CCS CHECK FOR CONSECUTIVE REQUEST
  2212. RJM GGS GET GENERAL STATUS
  2213. ZJP WIO1 IF NO ERROR
  2214. WIO4.1 UJN WIO8 CALL ERROR PROCESSOR
  2215.  
  2216. WIO5 STD PI RESET *PADN* WORD INDEX
  2217. RJM CCS CHECK FOR CONSECUTIVE REQUEST
  2218. LDD CB ADVANCE BUFFER POINTERS
  2219. STD PB
  2220. LDD NB
  2221. STD CB
  2222. ZJN WIO6 IF NO CONSECUTIVE REQUEST
  2223. CCBA IOLK,A SET EXTENDED MEMORY ADDRESS
  2224. CRD CD-3
  2225. ERRNZ CD-CN-5 CODE IS VALUE DEPENDENT
  2226. LDN PPSLB RESET SECTOR COUNT
  2227. STD T7
  2228. RJM GGS GET GENERAL STATUS
  2229. NJN WIO7 IF ERROR
  2230. STD NB CLEAR NEXT BUFFER ORDINAL
  2231. LJM WIO1 CONTINUE TRANSFER
  2232. * LJM WIO6.1 (ERROR RECOVERY IN PROGRESS)
  2233. WIOA EQU *-1
  2234.  
  2235. WIO6 RJM GGS GET GENERAL STATUS
  2236. NJN WIO7 IF ERROR ON LAST SECTOR
  2237. WIO6.1 RJM GGS GET GENERAL STATUS
  2238. ZJN WIO9 IF NO ERROR
  2239. WIO7 LDD PB BACKUP TO PREVIOUS BUFFER
  2240. STD CB
  2241. LDN 0 AVOID BUFFER COMPLETION
  2242. STD PB
  2243. WIO8 RJM ERR CALL ERROR PROCESSOR
  2244. WIO9 LJM WIOX RETURN
  2245. SPACE 4,10
  2246. * COMMON DECKS.
  2247.  
  2248.  
  2249. *CALL COMPC2D
  2250. *CALL COMPIMB
  2251. SPACE 4,10
  2252. PRS TITLE PRESET PROGRAM.
  2253. PRS SPACE 4,10
  2254. ** PRS - PRESET *1HP*.
  2255. *
  2256. * EXIT (CC) = 0.
  2257. * (CS) = 0.
  2258. * (EC) = 0.
  2259. * (ER) = 0.
  2260. * (IL) = 0.
  2261. * (PB) = 0.
  2262. * (RC) = 0.
  2263. * (TI) = 0.
  2264. * (BMLCR) = 6/ CHANNEL, 6/0.
  2265. * (BMLMF) = MAINFRAME ID.
  2266. * (BMLPP) = 6/ PP NUMBER, 6/ CHANNEL.
  2267. * (CCPA) = *SCR* CHANNEL PARITY BIT + FCTC + 30B.
  2268. * (CCPB) = *SCR* CHANNEL OUTPUT INSTRUCTION (OAN).
  2269. * (CCPC) = *SCR* CHANNEL INPUT INSTRUCTION (IAN).
  2270. * (CCRA) = WORD ADDRESS OF CHANNEL TABLE ENTRY.
  2271. * (CCRB) = BYTE ADDRESS OF CHANNEL TABLE ENTRY + LDDI.
  2272. * (CHRV) = 1.
  2273. * (CRQA) = FWA OF PP EXCHANGE PACKAGE.
  2274. * (CRQB) = FWA OF PP EXCHANGE PACKAGE.
  2275. * (CRQC) = CPU EXCHANGE INSTRUCTION (MXN).
  2276. * (CRQD) = FIRST WORD OF PP EXCHANGE PACKAGE.
  2277. * (RLCA) = WORD ADDRESS OF CONTROLWARE TABLE ENTRY.
  2278. * (RLCB) = BYTE ADDRESS OF CONTROLWARE TABLE ENTRY.
  2279. * (RLCC) = WORD ADDRESS OF CONTROLWARE TABLE ENTRY.
  2280. * (RLCG) = BIT NUMBER OF LOAD REQUESTED FLAG.
  2281. * (SCDA) = WORD ADDRESS OF CONTROLWARE TABLE ENTRY.
  2282. * (SCDB) = BIT NUMBER OF DRIVER DROP FLAG.
  2283. * ALL *CCBA* REFERENCES TO *CBT* PLUGGED.
  2284. * ALL *CPTA* REFERENCES TO *PUT* PLUGGED.
  2285. * ALL *EMBE* REFERENCES TO *EMB* PLUGGED.
  2286. *
  2287. * USES CC, CS, EC, ER, IL, PB, RC, TI, CM - CM+4, CN - CN+4,
  2288. * T0 - T7.
  2289. *
  2290. * CALLS DFM, RCH.
  2291. *
  2292. * MACROS CPTA, MONITOR, SFA.
  2293.  
  2294.  
  2295. PRS SUBR ENTRY/EXIT
  2296. LDK NCPL VALIDATE CALLER
  2297. CRD CM
  2298. AOD CM+1 NUMBER OF CONTROL POINTS
  2299. SHN 7
  2300. LMD CP
  2301. ZJN PRS1 IF SYSTEM CONTROL POINT
  2302. LDC =C* 1HP - UNAUTHORIZED CALL.*
  2303. RJM DFM ISSUE DAYFILE MESSAGE
  2304. MONITOR ABTM ABORT CONTROL POINT
  2305. LJM PPR RETURN
  2306.  
  2307. PRS1 STD CC CLEAR COMPLETION REQUEST COUNT
  2308. STD CS CLEAR CHANNEL/CONTROLLER STATUS
  2309. STD EC CLEAR ERROR CODE
  2310. STD ER CLEAR RECOVERY IN PROGRESS FLAG
  2311. STD IL CLEAR *PUT* INTERLOCK FLAG
  2312. STD PB CLEAR PREVIOUS BUFFER ORDINAL
  2313. STD RC CLEAR RETRY COUNT
  2314. STD TI INITIALIZE *TPOR* INDEX
  2315. LDD IR+4 CHANNEL NUMBER
  2316. STM BMLPP
  2317. PRS2 RJM RCH REQUEST CHANNEL
  2318. ZJN PRS2 IF CHANNEL NOT ASSIGNED
  2319.  
  2320. * PLUG CHANNEL INSTRUCTIONS.
  2321.  
  2322. LDC PRSD SET FWA OF CHANNEL TABLE
  2323. STD T1
  2324. PRS3 LDI T1
  2325. ZJN PRS4 IF END OF CHANNEL TABLE
  2326. STD T2
  2327. LDD IR+4 CHANNEL
  2328. RAI T2 STORE CHANNEL IN INSTRUCTION
  2329. AOD T1 ADVANCE CHANNEL TABLE POINTER
  2330. UJN PRS3 CONTINUE
  2331.  
  2332. PRS4 LDK PXPP READ PPU STATUS
  2333. CRD CN
  2334. ADN 1
  2335. CRM CRQD,ON READ FIRST WORD OF PP XP
  2336. AOM CRQD+4
  2337. LDK PPCP READ PP COMMUNICATIONS AREA POINTER
  2338. CRD CM
  2339. ADK MMFL-PPCP
  2340. CRD T1
  2341. LDD T1 SAVE MAINFRAME ID
  2342. STM BMLMF
  2343. LDD IA GET ((PP NUMBER - 2) * 10B)
  2344. SBD CM+4
  2345. SBN 20
  2346. SHN -3
  2347. STD T1 PP NUMBER - 2
  2348. SBN 10
  2349. MJN PRS4.1 IF PP 0-11
  2350. ADN 6 ADJUST FOR PP 20-31
  2351. PRS4.1 ADN 12
  2352. SHN 6
  2353. RAM BMLPP SET PP NUMBER
  2354. SHN 6
  2355. STM BMLCR SET RECOVERY CHANNEL
  2356. LDD IR+4
  2357. STD T2
  2358. SBN 20
  2359. PJN PRS5 IF IN SECOND PPS
  2360. ADN 20
  2361. RAM CCPA SET *SCR* BIT NUMBER
  2362. LDK CHSC *SCR* - FIRST PPS
  2363. UJN PRS6 CONTINUE
  2364.  
  2365. PRS5 RAM CCPA SET *SCR* BIT NUMBER
  2366. LDK CHSC+20 *SCR* - SECOND PPS
  2367. PRS6 ADC FJMI
  2368. STM CCPB
  2369. ADC IANI-FJMI
  2370. STM CCPD
  2371. ADC OANI-IANI
  2372. STM CCPC
  2373. LDD T1 PP NUMBER - 2
  2374. SHN 4
  2375. ADD T1 (PP NUMBER - 2) * 21B
  2376. RAD CN+4 SET EXCHANGE ADDRESS
  2377. STM CRQA
  2378. STM CRQB
  2379. SHN -14
  2380. RAD CN+3
  2381. RAM CRQA-1
  2382. STM CRQB-1
  2383. LDD CN+4 SET *MA* ADDRESS
  2384. ADN 6
  2385. STM CRQE
  2386. SHN -14
  2387. ADD CN+3
  2388. RAM CRQE-1
  2389. LDK ACPL CHECK CPU STATUS
  2390. CRD CM
  2391. LCN 0
  2392. STD T1 PRESET CHANNEL TABLE WORD INDEX
  2393. LDN 60D PRESET BIT POSITION FOR LOAD REQUEST
  2394. STD T3
  2395. LDD CM
  2396. SHN 6
  2397. PJN PRS7 IF CPU 0 ON
  2398. AOM CRQC SET EXCHANGE TO CPU 1
  2399. LDD HN
  2400. RAM CRQD+3 SET (A0) TO 1
  2401. PRS7 AOD T1 ADVANCE CM TABLE INDEX
  2402. LCN 5
  2403. RAD T2
  2404. PJN PRS7 IF NOT TO PROPER INDEX
  2405. ADN 5
  2406. RAM CCRB PRESET CHANNEL TABLE BYTE INDEX
  2407. STM RLCB PRESET CONTROLWARE TABLE BYTE INDEX
  2408. LPN 7 BYTE ADDRESS
  2409. STD T2
  2410. PRS8 LCN 12D
  2411. RAD T3 DECREMENT POSITION
  2412. SOD T2
  2413. PJN PRS8 IF NOT TO PROPER POSITION
  2414. LDD T3 BIT POSITION
  2415. ADN 13 ADD OFFSET WITHIN BYTE
  2416. SHN 6
  2417. STM RLCG+1
  2418. SBK 200
  2419. STM SCDB+1
  2420. LDK CHTP CHANNEL TABLE(S) POINTER
  2421. CRD CM
  2422. LDD CM+2 FWA OF CHANNEL TABLE
  2423. SHN 14
  2424. LMD CM+3
  2425. ADD T1 ADD WORD INDEX
  2426. STM CCRA CM ADDRESS OF CHANNEL TABLE ENTRY
  2427. SHN -14
  2428. RAM CCRA-1
  2429. LDD CM+2 COMPUTE FWA OF CONTROLWARE TABLE
  2430. SHN 14
  2431. LMD CM+3
  2432. ADN CTALL*2
  2433. ADD T1 ADD WORD INDEX
  2434. STM RLCA CM ADDRESS OF CONTROLWARE TABLE ENTRY
  2435. STM RLCC
  2436. STM SCDA
  2437. SHN -14
  2438. RAM RLCA-1
  2439. STM RLCC-1
  2440. STM SCDA-1
  2441.  
  2442. * PLUG *EMB* ADDRESSES.
  2443.  
  2444. LDN EMBP FETCH *EMB* POINTER
  2445. CRD CM
  2446. .CM1 EQU CM+1
  2447. LDC .CM1*10000+PRSC
  2448. RJM STA SET *EMB* ADDRESSES
  2449.  
  2450. * GET BUFFERED I/O TABLE POINTERS.
  2451.  
  2452. LDK BIOL READ BUFFERED I/O TABLE POINTERS
  2453. CRD CM
  2454. LDD CM+1
  2455. SHN 14
  2456. LMD CM+2
  2457. ADK CCTP GET *CCT* DESCRIPTOR
  2458. CRD CA
  2459. ADK PUTP-CCTP GET *PUT* DESCRIPTOR
  2460. CRD T3
  2461. ADN CBTP-PUTP GET *CBT* DESCRIPTOR
  2462. CRD CN
  2463. AOD T3
  2464.  
  2465. * PLUG *CCT* ADDRESS.
  2466.  
  2467. LDD IR+2 SET ADDRESS OF *CCT*
  2468. SHN CCTLS-6
  2469. ADD CA+4
  2470. RAM OVIA+1
  2471. STM RPIA+1
  2472. SHN -14
  2473. ADD CA+3
  2474. RAM OVIA
  2475. STM RPIA
  2476.  
  2477. * PLUG *CBT* ADDRESSES.
  2478.  
  2479. .CN3 EQU CN+3
  2480. LDC .CN3*10000+PRSA
  2481. RJM STA SET *CBT* ADDRESSES
  2482.  
  2483. * PLUG *PUT* ADDRESSES.
  2484.  
  2485. LDC T6*10000+PRSB
  2486. RJM STA SET *PUT* ADDRESSES
  2487.  
  2488. * BUILD *TPOR* TABLE.
  2489.  
  2490. PRS12 STD T1 INITIALIZE *TPOR* INDEX
  2491. PRS13 SOD T3 DECREMENT *PUT* ORDINAL
  2492. ZJP PRSX IF SCAN COMPLETE
  2493. CPTA UNCT,A READ *PUT* ENTRY
  2494. CRD CM
  2495. SFA EST,CM+1 READ EST ENTRY
  2496. ADK EQDE
  2497. CRD CM
  2498. LDN 0 INITIALIZE EST CHANNEL BYTE INDEX
  2499. STD T2
  2500. LDD CM+1
  2501. LPN 37
  2502. LMD IR+4
  2503. ZJN PRS14 IF DEVICE SUPPORTED BY THIS DRIVER
  2504. LDD CM+2
  2505. ZJN PRS13 IF SINGLE ACCESS DEVICE
  2506. LPN 37
  2507. LMD IR+4
  2508. NJN PRS13 IF DEVICE NOT SUPPORTED BY THIS DRIVER
  2509. AOD T2 INCREMENT CHANNEL BYTE INDEX
  2510. PRS14 AOD T1 INCREMENT *TPOR* INDEX
  2511. ERRNZ TPORE-1 CODE DEPENDS ON VALUE
  2512. LMK MAXU+1
  2513. ZJN PRS14.1 IF TOO MANY UNITS ON CHANNEL
  2514. LDD T2 POSITION CHANNEL BYTE INDEX
  2515. SHN 6
  2516. LMD T3 SET *PUT* ORDINAL
  2517. STM TPOR-1,T1
  2518. UJP PRS13 CONTINUE SCAN
  2519.  
  2520. PRS14.1 LDC =C* 1HP - TOO MANY UNITS ON CHANNEL.*
  2521. RJM DFM ISSUE SYSTEM DAYFILE MESSAGE
  2522. MONITOR HNGM
  2523. UJN * HANG
  2524.  
  2525. PRSA BSS 0 TABLE OF *CBT* ADDRESSES
  2526. TCBT HERE
  2527. CON 0 TERMINATE TABLE
  2528.  
  2529. PRSB BSS 0 TABLE OF *PUT* ADDRESSES
  2530. TPUT HERE
  2531. CON 0 TERMINATE TABLE
  2532.  
  2533. PRSC BSS 0 TABLE OF *EMB* ADDRESSES
  2534. QUAL COMPIMB
  2535. TEMB HERE
  2536. QUAL *
  2537. CON 0 TERMINATE TABLE
  2538.  
  2539. PRSD BSS 0 TABLE OF CHANNEL INSTRUCTION ADDRESSES
  2540. CHTB
  2541. STA SPACE 4,10
  2542. ** STA - SET TABLE ADDRESSES.
  2543. *
  2544. * ENTRY (A) = 6/ TP, 12/ TA
  2545. * TP = TABLE POINTER.
  2546. * TA = INSTRUCTION TABLE ADDRESS.
  2547. *
  2548. * EXIT (A) = 0.
  2549. *
  2550. * USES T0, T1, T2.
  2551.  
  2552.  
  2553. STA1 STD T2 SET INSTRUCTION ADDRESS
  2554. LDM 1,T1
  2555. RAM 1,T2 SET LOWER 12 BITS OF ADDRESS
  2556. SHN -14
  2557. ADI T1 SET UPPER 6 BITS OF ADDRESS
  2558. LPN 37
  2559. RAI T2
  2560. AOD T0 ADVANCE INSTRUCTION LIST
  2561. STA2 LDI T0
  2562. NJN STA1 IF NOT END OF TABLE
  2563.  
  2564. STA SUBR ENTRY/EXIT
  2565. STD T0
  2566. SHN -14 SET ADDRESS POINTER
  2567. STD T1
  2568. UJN STA2 ENTER LOOP
  2569. 1HP SPACE 4,10
  2570. OVERFLOW
  2571. 1HP SPACE 4,10
  2572. END