cdc:nos2.source:opl871:1xm
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
- IDENT 1XM,MXM
- 1XM TITLE 1XM - 7165/895 (CCC) DRIVER.
- PERIPH
- BASE MIXED
- SST
- *COMMENT 1XM - 7165/895 (CCC) DRIVER.
- COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
- 1XM SPACE 4,15
- *** 1XM - 7165/895 (CCC) DRIVER.
- *
- * G. S. ANDERSON. 04/30/84.
- * R. M. DANISCH. 02/01/86.
- 1XM SPACE 4,15
- *** *1XM* IS THE CYBER CHANNEL COUPLER (CCC) DRIVER FOR THE
- * 7165/895 DISK STORAGE SUBSYSTEM.
- *
- * THE 7165/895 DISK DRIVES ARE SUPPORTED AS BUFFERED I/O
- * DEVICES. THE REQUESTS THAT ARE PROCESSED BY *1XM* ARE
- * POSTED BY *CPUMTR* IN THE BUFFERED I/O TABLES IN *CMR*.
- * *1XM* INTERLOCKS THE UNITS, LINKS THE REQUESTS, AND COMPLETES
- * THE REQUESTS BY ISSUING APPROPRIATE *BIOM* REQUESTS.
- *
- * EACH *1XM* MASTER/SLAVE PP PAIR WILL SUPPORT ONE CHANNEL AND
- * WILL BE THE SOLE DRIVER FOR THE *CCC* ON THAT CHANNEL. *1XM*
- * WILL BE CHECKING THE PHYSICAL UNIT TABLE (PUT) FOR REQUESTS
- * ON UNITS THAT ARE SUPPORTED THROUGH THE *CCC* THAT *1XM* IS
- * DRIVING.
- *
- * *1XM* SCANS THROUGH THE *PUT* ENTRIES IN A CIRCULAR FASHION
- * LOOKING FOR REQUESTS TO PROCESS. ONCE A REQUEST IS FOUND
- * AND LINKED *1XM* USES THE PHYSICAL DISK AND UEM ADDRESSES IN
- * THE CORRESPONDING *CBT* ENTRY TO DETERMINE THE ACTION TO BE
- * TAKEN. *1XM* WILL ATTEMPT TO PROCESS CONSECUTIVE SECTOR
- * REQUESTS ON THE CURRENT UNIT UNTIL THE END OF THE CYLINDER
- * OR A CONSECUTIVE SECTOR REQUEST WAS NOT FOUND. AT THIS
- * POINT *1XM* WILL RESUME ITS SEARCH THROUGH THE *PUT* WITH THE
- * *PUT* ENTRY IMMEDIATELY FOLLOWING THE ONE JUST PROCESSED.
- EJECT
- *** CALLING SEQUENCE FOR MASTER AND SLAVE.
- *
- * MASTER PP COMMUNICATION AREA:
- *
- * WORD 0 18/*1XM*, 6/CP, 6/CCTO, 6/0, 12/MAS, 12/CHAN
- * WORD 1-7 USED FOR MONITOR REQUESTS
- *
- * SLAVE PP COMMUNICATION AREA:
- *
- * WORD 0 18/*1XM*,6/CP,12/SU,12/SL,12/CHAN
- * WORD 1 NOT USED
- * WORD 2 12/REQU,12/0,12/LSB,24/UEM ADDR
- * WORD 3 12/SEC,48/0
- * WORD 4 12/MEF,48/0
- * WORD 5 12/ROC,48/0
- * WORD 6-7 NOT USED
- *
- * CCTO *CCT* ORDINAL.
- * MAS DEFINES THE MASTER *1XM* DRIVER (0).
- * CHAN THE CHANNEL BEING DRIVEN BY THIS PP.
- * SU NON-ZERO WHEN THE SLAVE IS INITIALIZED.
- * SL DEFINES THE SLAVE *1XM* DRIVER (1).
- * REQU REQUEST FOR SLAVE TO PROCESS.
- * 1 = READ
- * 2 = WRITE
- * 3 = DROP
- * LSB LAST BLOCK OF SECTOR FLAG.
- * 0 = LEAVE CHANNEL ACTIVE AFTER READ/WRITE.
- * 1 = DISCONNECT CHANNEL AFTER READ/WRITE.
- * UEM ADDR UEM ADDRESS/100B TO READ/WRITE DATA FROM/TO.
- * SEC SLAVE ERROR CODE. SET BY SLAVE. CLEARED BY
- * MASTER.
- * 0 = NO ERROR ENCOUNTERED.
- * NON-ZERO = ACTUAL ERROR CODE OF SLAVE ERROR.
- * MEF MASTER ERROR FLAG. SET BY MASTER. CLEARED BY
- * SLAVE.
- * 0 = NO ERROR ENCOUNTERED.
- * 1 = MASTER ENCOUNTERED AN ERROR.
- * ROC READ OPERATION COMPLETE. ALL DATA TRANSFERRED
- * TO UEM. SET AND CLEARED BY SLAVE.
- SPACE 4,10
- ** MESSAGES.
- *
- * * 1XM - UNAUTHORIZED CALL.*
- * ISSUED TO THE SYSTEM DAYFILE IF *1XM* WAS NOT CALLED FROM
- * THE SYSTEM.
- SPACE 4,10
- *** ERRLOG MESSAGES.
- *
- * *EQXXX,TKNNNN, MEDIA DEFECT ENCOUNTERED.*
- *
- * A MEDIA DEFECT HAS BEEN ENCOUNTERED ON EQUIPMENT WITH EST
- * ORDINAL ORD, LOGICAL TRACK NNNN. A REQUEST HAS BEEN ISSUED
- * TO AUTOMATICALLY FLAW THIS TRACK WHEN IT IS DROPPED.
- SPACE 4,10
- *** ORGANIZATION OF 7165/895 (MEASUREMENTS IN DECIMAL).
- *
- * EQUIPMENT TYPE *DC*
- *
- * PHYSICAL ORGANIZATION:
- *
- * CM WORDS/PHYSICAL SECTOR 2048
- * PHYSICAL SECTORS/PHYSICAL TRACK 3
- * PHYSICAL TRACKS/CYLINDER 15
- * CYLINDERS/DEVICE 885 * N (0<N<3)
- * CM WORDS/DEVICE 79,749,120 * N
- *
- * LOGICAL ORGANIZATION:
- *
- * CM WORDS/LOGICAL SECTOR 64
- * LOGICAL SECTORS/PHYSICAL SECTOR 32
- * LOGICAL SECTORS/LOGICAL TRACK 704 * N
- * LOGICAL TRACKS/CYLINDER 2
- * LOGICAL TRACKS/DEVICE 1770
- *
- * MAXIMUM DATA RATE 400.00 K CM WORDS/SECOND
- EJECT
- *** MASTER - SLAVE CONCEPTS.
- *
- * THE PHYSICAL SECTOR SIZE OF 32 LOGICAL SECTORS AND A
- * 24 MEGABIT MAXIMUM TRANSFER RATE THAT MUST BE ACHIEVED
- * WHILE TRANSFERRING DATA THROUGH A PP, HAVE DICTATED THE
- * NECESSITY FOR A MASTER(1XM)/SLAVE(2XM) PP SETUP. THE
- * MASTER IS INITIATED BY *STL* AT DEADSTART TIME AND THE
- * SLAVE IS STARTED UP BY THE MASTER ONCE THE MASTER HAS
- * INITIALIZED ITSELF. BOTH PROGRAMS WILL REMAIN IN A PP
- * UNTIL THE SYSTEM IS DEADSTARTED, THE CONTROLLER THEY ARE
- * FUNCTIONING IS NO LONGER OPERATIONAL, OR THE CHANNEL IS
- * GLOBALLY DOWNED.
- *
- * THE PHYSICAL SECTOR IS TRANSFERRED IN FOUR BLOCKS (6+10+
- * 6+10=32). THE MASTER TRANSFERS THE TWO SHORT BLOCKS AND
- * THE SLAVE TRANSFERS THE TWO LARGE BLOCKS.
- *
- * THE MASTER POSTS A REQUEST OR ERROR TO THE SLAVE
- * BY SETTING THE CORRESPONDING FIELD IN THE SLAVE-S COMMUNI-
- * CATION AREA NON-ZERO, AND THE SLAVE POSTS AN ERROR TO THE
- * MASTER BY SETTING THE ERROR CODE FIELD NON-ZERO IN THE
- * SLAVE-S COMMUNICATION AREA. THE FOLLOWING STATE CHART
- * SHOWS THE POSSIBLE STATES, THE POSSESSOR OF THE LOGICAL
- * CHANNEL RESERVE, AND THE STATUS OF THE REQUEST AND ERROR
- * CODE FIELDS.
- *
- * SLAVE MASTER
- * STATE CHANNEL REQUEST FIELD ERROR FIELD ERROR FIELD
- * --------------------------------------------------------------------
- * MASTER IDLE ! ! ! ! !
- * SLAVE IDLE ! MASTER ! ZERO ! ZERO ! ZERO !
- * --------------------------------------------------------------------
- * MASTER BEGIN I/O ! ! ! ! !
- * SLAVE IDLE ! MASTER ! NEXT REQUEST ! ZERO ! ZERO !
- * --------------------------------------------------------------------
- * MASTER TO/FROM UEM ! ! ! ! !
- * SLAVE TO/FROM DISK ! SLAVE ! ZERO ! ZERO ! ZERO !
- * --------------------------------------------------------------------
- * MASTER TO/FROM DISK! ! ! ! !
- * SLAVE TO/FROM UEM ! MASTER ! NEXT REQUEST ! ZERO ! ZERO !
- * --------------------------------------------------------------------
- * MASTER END I/O ! ! ! ! !
- * SLAVE TO/FROM DISK ! SLAVE ! ZERO ! ZERO ! ZERO !
- * --------------------------------------------------------------------
- * MASTER TO/FROM UEM ! ! ! ! !
- * SLAVE ERROR ! SLAVE ! ZERO ! ERROR CODE ! ZERO !
- * --------------------------------------------------------------------
- * MASTER LOG ERROR ! ! ! ! !
- * SLAVE IDLE ! MASTER ! ZERO ! ZERO ! ZERO !
- * --------------------------------------------------------------------
- * MASTER ERROR ! ! ! ! !
- * SLAVE WAIT CHANNEL ! MASTER ! ZERO ! ZERO !ERROR FLAG!
- * --------------------------------------------------------------------
- * MASTER WAIT CHANNEL! ! ! ! !
- * SLAVE CLEAR ERROR ! SLAVE ! ZERO ! ZERO ! ZERO !
- * --------------------------------------------------------------------
- EJECT
- *** SPECIAL PROGRAMMING NOTES.
- *
- * THE FOLLOWING IS A LIST OF SPECIAL NOTES THAT SHOULD BE
- * READ AND UNDERSTOOD BEFORE ANY MODIFICATIONS ARE MADE TO
- * THIS PROGRAM.
- *
- *
- * 1) *1XM*, *1XY* AND *1HP* ARE VERY SIMILAR IN DESIGN. MOST
- * FIXES APPLIED TO ONE OF THESE DRIVERS WILL ALSO APPLY TO
- * THE OTHERS.
- *
- * 2) WHERE POSSIBLE, *CMR* POINTERS HAVE BEEN PLUGGED BY THE
- * PRESET ROUTINE TO IMPROVE THE EXECUTION SPEED OF THE
- * PROGRAM AND TO MINIMIZE THE AMOUNT OF CODE.
- *
- * 3) *1XM* ASSUMES THAT ONLY 70 MICROSECONDS CAN BE USED
- * TO PERFORM ALL THE CHANNEL PASSING (FROM THE TIME THE
- * READ/WRITE FUNCTION IS ISSUED UNTIL THE LAST PART OF THE
- * SECTOR IS BEING READ/WRITTEN).
- *
- * 4) THIS DRIVER ALSO ASSUMES THAT THE TRANSFER RATE TO/FROM
- * CENTRAL MEMORY IS TWICE AS FAST AS THE TRANSFER RATE
- * TO/FROM THE *CCC*. USING THIS ASSUMPTION THE MASTER HAS
- * APPROXIMATELY 500 MICROSECONDS (ON A 4XPP) TO PERFORM
- * ITS INNER BLOCK FUNCTIONS.
- *
- * 5) THE DRIVER HAS APPROXIMATELY 70 MICROSECONDS TO
- * PERFORM THE NECESSARY INTER-SECTOR CALCULATIONS.
- * THE INTER-SECTOR GAP IS THE TIME FROM WHEN THE SLAVE
- * COMPLETES THE READ/WRITE FROM/TO DISK UNTIL THE
- * MASTER ISSUES THE NEXT READ/WRITE FUNCTION.
- * (ON PHYSICAL TRACK SWITCHES THE DRIVER HAS 300
- * MICROSECONDS).
- *
- * 6) THE SLAVE MUST CHECK FOR A REQUEST EVERY 60 MICROSECONDS
- * TO MAKE SURE IT HAS TIME TO READ FROM UEM IN THE CASE
- * OF A WRITE TO DISK.
- *
- * 7) ALTHOUGH CODE CAN BE ADDED WITHOUT EXCEEDING A TIMING
- * THRESHOLD, ONE SHOULD NOTE THAT THE CODE COULD AFFECT
- * *1XM-S* TOLERANCE FOR CENTRAL MEMORY CONFLICTS.
- *
- * 8) BECAUSE *1XM* ISSUES ALL *BIOM* COMPLETION REQUESTS
- * WITHOUT WAITING FOR FUNCTION COMPLETION, THE *MONITOR*
- * MACRO HAS BEEN REDEFINED TO ENSURE THERE IS NO PENDING
- * MONITOR REQUEST AT THE TIME ANOTHER IS ABOUT TO BE
- * ISSUED.
- EJECT
- * COMMON DECKS.
- *CALL COMPMAC
- RICHI$ EQU 1 SELECT DEFERRED INSTRUCTION MODIFICATION
- *CALL COMPCHI
- *CALL COMSCPS
- *CALL COMSDFS
- LIST X
- *CALL COMSHIO
- LIST *
- *CALL COMSLSD
- *CALL COMSMSC
- LIST X
- *CALL COMSMSP
- LIST *
- *CALL COMSPIM
- *CALL COMS1DS
- TITLE CONSTANTS, DEFINITIONS, AND MACROS.
- 1XM SPACE 4,10
- **** DIRECT CELL ASSIGNMENTS.
- BS EQU 15 BLOCK SIZE FOR DATA TRANSFER
- RS EQU 16 ERROR RECOVERY STATUS
- ER EQU 17 ERROR RECOVERY IN PROGRESS
- CC EQU 20 COMPLETION COUNT
- S1 EQU 21 SCRATCH
- EC EQU 22 ERROR CODE
- RW EQU 23 READ/WRITE FLAG
- IL EQU 24 *PUT* INTERLOCK FLAG
- SR EQU 25 - 31 SLAVE REQUEST (5 CELLS)
- WB EQU SR - SR+4 FOR *COMPIMB* COMPATIBILITY
- BL EQU 32 DATA BLOCK LENGTH
- CN EQU 33 - 37 SCRATCH (5 CELLS)
- SB EQU 40 SLAVE BUFFER ADDRESS
- FU EQU 41 - 42 UEM FWA (2 CELLS)
- UA EQU 43 - 44 UEM ADDRESS (2 CELLS)
- EP EQU 45 ERROR ON PREVIOUS SECTOR
- CS EQU 46 CHANNEL STATUS
- NB EQU 47 NEXT BUFFER ORDINAL
- PB EQU 50 PREVIOUS BUFFER ORDINAL
- CB EQU 51 CURRENT BUFFER ORDINAL
- TB EQU 52 TOTAL CBT COUNT
- GS EQU 53 GENERAL STATUS
- * EQU 54 CHANNEL NUMBER (FROM INPUT REGISTER)
- TI EQU 57 *TPOR* INDEX
- CA EQU 60 - 64 CURRENT PHYSICAL ADDRESS (5 CELLS)
- RC EQU 65 RETRY COUNT
- PO EQU 66 CURRENT *PUT* ORDINAL
- S2 EQU 67 SCRATCH
- 1XM SPACE 4,10
- ** DRIVER FUNCTION CODES.
- FCSK EQU 1 SEEK 1 TO 1 INTERLACE
- FCRD EQU 4 READ
- FCWR EQU 5 WRITE
- FCOC EQU 10 OPERATION COMPLETE
- FCGS EQU 12 GENERAL STATUS
- FCCO EQU 14 CONTINUE
- FCDS EQU 23 DETAILED STATUS
- FCAL EQU 414 AUTOLOAD
- 1XM SPACE 4,10
- SPACE 4,15
- ** DETAILED STATUS CONSTANTS.
- SB0 EQU 0 SENSE BYTE 0
- SB7 EQU 4 SENSE BYTE 7 STATUS WORD OFFSET
- DCF EQU 1 DEVICE CHECK FORMAT
- FM6 EQU 6 FORMAT 6 MESSAGE
- SPACE 4,15
- ** ASSEMBLY CONSTANTS.
- BFRL EQU 10 *EMB* FLUSH RETRY LIMIT
- CH EQU 0 MASS STORAGE CHANNEL
- FCSKL EQU 4 SEEK PARAMETER WORD COUNT
- HLEN EQU 4*5 LENGTH OF SECTOR HEADER
- MAXU EQU 64D MAXIMUM NUMBER OF UNITS PER CHANNEL
- MFRL EQU 10 MONITOR FUNCTION RETRY LIMIT
- MPRU EQU 6 NUMBER OF PRUS TRANSFERRED BY MASTER
- MMXN EQU 10D MAXIMUM NUMBER OF EXCHANGE RETRIES
- DLEN EQU MPRU*100*5 LENGTH OF DATA TRANSFERRED BY MASTER
- PCRL EQU 10 PP CALL RETRY LIMIT
- PSLT EQU 26 PHYSICAL SECTORS PER LOGICAL TRACK
- PSPT EQU 3 PHYSICAL SECTORS PER PHYSICAL TRACK
- SBME EQU 2 MASTER ERROR WORD IN SLAVE REQUEST BUFFER
- SBRC EQU 3 READ COMPLETE WORD IN SLAVE REQUEST BUFFER
- SBRQ EQU 0 REQUEST WORD IN SLAVE REQUEST BUFFER
- SBSE EQU 1 SLAVE ERROR WORD IN SLAVE REQUEST BUFFER
- SDLY EQU 50D SLAVE DELAY TIME (APPROX. 25 MICS)
- SDRP EQU 3 SLAVE REQUEST TO DROP
- SLRD EQU 1 SLAVE REQUEST TO READ
- SLWR EQU 2 SLAVE REQUEST TO WRITE
- SPRU EQU 12 PRUS TRANSFERRED BY SLAVE
- SSIZ EQU 1000 SECTOR SIZE FLAG FOR SEEK
- TPORE EQU 1 LENGTH OF *TPOR* ENTRY
- ****
- SPACE 4,20
- ** MACROS.
- TBLM SPACE 4,10
- ** TBLM - CREATE TABLE ENTRY MACRO.
- *
- *NAM TBLM
- *
- * ENTRY NAM = TABLE NAME.
- *
- * EXIT NAM_E MACRO DEFINED.
- PURGMAC TBLM
- MACRO TBLM,NAM
- PURGMAC NAM_E
- NAM_E MACRO ADDR
- LOCAL A
- MACREF NAM_E
- NOREF A
- A EQU ADDR
- T_NAM RMT
- CON A
- RMT
- TBLM ENDM
- CBTE SPACE 4,10
- ** CBTE - CONTROL BUFFER TABLE ENTRY.
- *
- * THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TCBT*
- * THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH
- * REQUIRES THE FWA OF THE CONTROL BUFFER TABLE.
- *
- * CBTE ADDR
- *
- * ENTRY (ADDR) = ADDRESS OF INSTRUCTION.
- *
- * EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TCBT*.
- CBT TBLM
- CCBA SPACE 4,15
- ** CCBA - COMPUTE *CBT* ENTRY ADDRESS.
- *
- * THIS MACRO SETS (A) TO THE REQUESTED *CBT* ENTRY ADDRESS.
- *
- * CCBA W,A
- *
- * *W* - OPTIONAL WORD OFFSET TO BE ADDED TO ADDRESS.
- * *A* - IF NON-BLANK, BUFFER ORDINAL IS IN ACCUMULATOR.
- *
- * ENTRY (A) = BUFFER ORDINAL IF *A* PARAMETER IS NON-BLANK.
- * (CB) = CURRENT BUFFER ORDINAL.
- *
- * EXIT (A) = *CBT* ENTRY ADDRESS + WORD OFFSET.
- PURGMAC CCBA
- CCBA MACRO W,A
- MACREF CCBA
- IFC EQ,$A$$,1
- LDD CB
- SHN CBTLS
- CBTE *
- ADC W
- CCBA ENDM
- PUTE SPACE 4,10
- ** PUTE - PHYSICAL UNIT TABLE ENTRY.
- *
- * THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TPUT*
- * THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH
- * REQUIRES THE FWA OF THE PHYSICAL UNIT TABLE.
- *
- * PUTE ADDR
- *
- * ENTRY (ADDR) = ADDRESS OF INSTRUCTION.
- *
- * EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TPUT*.
- PUT TBLM
- CPTA SPACE 4,10
- ** CPTA - COMPUTE *PUT* ENTRY ADDRESS.
- *
- * THIS MACRO SETS (A) TO THE REQUESTED *PUT* ENTRY ADDRESS.
- *
- * CPTA W,A
- *
- * *W* - OPTIONAL WORD OFFSET TO BE ADDED TO ADDRESS.
- * *A* - IF NON-BLANK, *PUT* ORDINAL IS IN ACCUMULATOR.
- *
- * ENTRY (A) = *PUT* ORDINAL IF *A* PARAMETER IS NON-BLANK.
- * (PO) = *PUT* ORDINAL.
- *
- * EXIT (A) = *PUT* ENTRY ADDRESS + WORD OFFSET.
- PURGMAC CPTA
- CPTA MACRO W,A
- MACREF CPTA
- IFC EQ,$A$$,1
- LDD PO
- SHN PUTLS
- PUTE *
- ADC W
- CPTA ENDM
- EMBE SPACE 4,10
- ** EMBE - ERROR MESSAGE TABLE ENTRY.
- *
- * THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TEMB*
- * THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH
- * REQUIRES THE FWA OF THE ERROR MESSAGE TABLE.
- *
- * EMBE ADDR
- *
- * ENTRY (ADDR) = ADDRESS OF INSTRUCTION.
- *
- * EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TEMB*.
- EMB TBLM
- MONITOR SPACE 4,15
- ** MONITOR - ISSUE MONITOR FUNCTION.
- *
- * THIS MACRO PROVIDES FUNCTIONALITY IDENTICAL TO THAT OF THE
- * *MONITOR* MACRO DEFINED IN *COMPMAC*, WHILE ENSURING ANY
- * PENDING *BIOM* MONITOR FUNCTION IS COMPLETED BEFORE THE NEXT
- * MONITOR FUNCTION IS ISSUED.
- *
- * MONITOR F
- *
- * *F* - MONITOR FUNCTION CODE.
- *
- * EXIT (A) = 0.
- * (CM - CM+4) = COMPLETED PP OUTPUT REGISTER IMAGE.
- *
- * CALLS IMF.
- PURGMAC MONITOR
- MONITOR MACRO F
- MACREF MONITOR
- LDK F
- RJM IMF
- MONITOR ENDM
- 1XM SPACE 4
- RICHI REDEFINE CHANNEL INSTRUCTIONS
- TITLE MASTER DRIVER.
- ** MXM - 895 DRIVER.
- ORG MSFW+5
- MXM RJM PRS PRESET
- MXM SPACE 4
- ** MST - MASTER MAIN PROGRAM.
- MST RJM CCR CHECK FOR CHANNEL REQUESTED/DOWN
- MJN MST1 IF CHANNEL GLOBALLY DOWN
- RJM SUQ SCAN UNIT QUEUE
- ZJN MST IF NO ELIGIBLE ENTRY FOUND
- RJM ISF ISSUE SEEK FUNCTION
- NJN MST IF UNIT NOT ON CYLINDER
- RJM PDT PERFORM DATA TRANSFER
- UJN MST LOOP
- MST1 RJM DCH RELEASE CHANNEL
- MONITOR DPPM DROP PP
- LJM PPR ENTER IDLE LOOP
- TPOR SPACE 4,10
- ** TPOR - TABLE OF *PUT* ORDINALS.
- *
- * THIS TABLE CONTAINS THE ORDINALS OF THE *PUT* ENTRIES FOR ALL
- * UNITS ACCESSED BY THIS DRIVER-S CHANNEL.
- *
- * ENTRY = 1 WORD.
- *
- *T 11/ PUT ,1/I
- * PUT *PUT* ORDINAL OF DEVICE.
- * I EST CHANNEL BYTE INDEX.
- *
- * TABLE IS TERMINATED BY A ZERO BYTE.
- TPOR BSSZ TPORE*MAXU
- CON 0 TERMINATE *TPOR* TABLE
- AUA SPACE 4,15
- ** AUA - ADVANCE UEM ADDRESS.
- *
- * ENTRY (BS) = LENGTH OF DATA BLOCK AND HEADER.
- * (RW) = READ/WRITE FLAG.
- * (SR+3 - SR+4) = CURRENT UEM ADDRESS FOR SLAVE.
- * (UA - UA+1) = CURRENT UEM ADDRESS FOR MASTER.
- *
- * EXIT (BS) = LENGTH OF DATA BLOCK WITHOUT HEADER.
- * (SR+3 - SR+4) = UEM ADDRESS FOR NEXT PART OF SECTOR
- * FOR USE BY SLAVE.
- * (UA - UA+1) = UEM ADDRESS FOR NEXT PART OF SECTOR FOR
- * USE BY MASTER.
- *
- * USES BS, T1, SR+3 - SR+4, UA - UA+1.
- AUA SUBR ENTRY/EXIT
- LDK SPRU+MPRU ADVANCE MASTER UEM ADDRESS
- RAD UA+1
- SHN -14
- RAD UA
- LDK MPRU ADVANCE SLAVE UEM ADDRESS
- ADD UA+1
- STD SR+4
- SHN -14
- ADD UA
- STD SR+3
- LCN HLEN EXCLUDE HEADER FROM BLOCK LENGTH
- RAD BS
- LDM AUAA,RW ADJUST BUFFER ADDRESS
- STD T1
- LDN HLEN
- RAI T1
- UJN AUAX RETURN
- AUAA CON RIOB
- CON WIOB
- CCR SPACE 4,20
- ** CCR - CHECK FOR CHANNEL REQUESTED OR DOWN.
- *
- * THIS ROUTINE CHECKS TO SEE IF THE CHANNEL TO WHICH THIS PP IS
- * DEDICATED IS BEING REQUESTED BY ANOTHER PP OR IS GLOBALLY
- * DOWN. IF THE CHANNEL IS REQUESTED BY ANOTHER PP, IT WILL BE
- * RELEASED AND WILL BE REQUESTED AGAIN FOLLOWING A ONE SECOND
- * DELAY. IF THE CHANNEL IS GLOBALLY DOWN, THE DRIVER DROP FLAG
- * WILL BE SET IN THE CONTROLWARE TABLE AND THE CHANNEL WILL BE
- * RELEASED.
- *
- * ENTRY (SB) = SLAVE MESSAGE BUFFER ADDRESS.
- *
- * EXIT (A) .LT. 0 IF CHANNEL IS GLOBALLY DOWN.
- *
- * USES SR, CM - CM+4.
- *
- * CALLS DCH, RCH, SCD.
- *
- * MACROS DELAY.
- CCR2 RJM SCD SET DRIVER DROP FLAG
- LDN 3 ISSUE DROP REQUEST TO SLAVE
- STD SR
- LDD SB
- ADK SBRQ
- CWD SR
- LCN 0 SET DROPOUT REPLY
- CCR SUBR ENTRY/EXIT
- LDC ** READ CHANNEL TABLE
- CCRA EQU *-1 (CM ADDRESS OF ENTRY)
- CRD CM
- LDD CM+** CHECK REQUESTED FLAG
- CCRB EQU *-1 (BYTE ADDRESS OF ENTRY)
- SHN 21-5
- MJN CCR2 IF CHANNEL IS GLOBALLY DOWN
- SHN 22+5-13
- PJN CCRX IF CHANNEL NOT REQUESTED
- RJM DCH RELEASE CHANNEL
- CCR1 DELAY
- RJM RCH REQUEST CHANNEL
- ZJN CCR1 IF CHANNEL NOT ASSIGNED
- UJN CCRX RETURN
- CCS SPACE 4,15
- ** CCS - CHECK FOR CONSECUTIVE SECTOR REQUEST.
- *
- * THIS ROUTINE CHECKS THE NEXT BUFFER IN THE I/O QUEUE TO
- * DETERMINE IF IT IS CONSECUTIVE WITH THE REQUEST CURRENTLY
- * BEING PROCESSED.
- *
- * ENTRY (CB) = CURRENT BUFFER ORDINAL.
- * (NB) = NEXT BUFFER ORDINAL IF CONSECUTIVE REQUEST
- * ALREADY FOUND.
- * (RW) = READ/WRITE FLAG.
- * (TB) = TOTAL BUFFER COUNT.
- *
- * EXIT (NB) = NEXT BUFFER ORDINAL.
- * = 0 IF CONSECUTIVE TRANSFER NOT POSSIBLE.
- * (TB) = TOTAL BUFFER COUNT.
- *
- * USES NB, TB, CM - CM+4, CN - CN+4, TO - TO+4.
- *
- * MACROS CCBA.
- CCS3 LDN 0 INDICATE NO CONSECUTIVE REQUEST
- STD NB
- CCS SUBR ENTRY/EXIT
- LDD NB
- NJN CCSX IF NEXT REQUEST ALREADY FOUND
- CCBA PAD4 READ CURRENT *CBT* ENTRY
- CRD CM
- ADK IOLK-PAD4
- CRD CN
- LDD CN+2 NEXT BUFFER ORDINAL
- ZJN CCSX IF THIS BUFFER IS LAST IN QUEUE
- STD NB STORE NEW CURRENT BUFFER ORDINAL
- CCBA PAD1,A GET DISK ADDRESS FOR THIS BUFFER
- CRD CN
- ADK IOLK-PAD1 GET WRITE FLAG
- CRD T0
- LDD T0
- SHN 0-11
- LPN 1
- LMD RW
- NJN CCS3 IF TRANSFER NOT IN SAME DIRECTION
- LDD CM+1
- LMD CN+1
- CCS1 NJN CCS3 IF NO CYLINDER MATCH
- LDD CM+2
- ADN 1
- LMD CN+2
- ZJN CCS2 IF CONSECUTIVE SECTOR NOT ON SAME TRACK
- LDD CM+2
- ADD HN
- SCN 77
- LMD CN+2
- NJN CCS1 IF NOT FIRST SECTOR OF CONSECUTIVE TRACK
- LDD CM+2
- LPN 77
- LMN PSPT-1
- NJN CCS1 IF CONSECUTIVE REQUEST
- CCS2 AOD TB INCREMENT TOTAL BUFFER COUNT
- LJM CCSX RETURN
- CDS SPACE 4,20
- ** CDS - CRACK DETAILED STATUS.
- *
- * THIS ROUTINE DETERMINES WHAT ERROR CODE TO SET BY EXAMINING
- * DETAILED STATUS.
- *
- * ENTRY (GS) = GENERAL STATUS.
- * (RW) = READ/WRITE FLAG.
- *
- * USES EC, RS, T1.
- *
- * CALLS FNC, GDS, GGS.
- CDS SUBR ENTRY/EXIT
- RJM GDS GET DETAILED STATUS
- MJN CDSX IF ERROR
- LDD GS
- SHN 21-10
- PJN CDS1 IF ERROR NOT RECOVERABLE BY SUBSYSTEM
- LDM CDSA,RW PREPARE FOR *CONTINUE* SEQUENCE
- STD T1
- LDC LDNI+FCCO
- STI T1
- LCN 1 INDICATE CONTROLLER RECOVERY IN PROGRESS
- STD RS
- UJN CDS1.1 SET STATUS ERROR CODE
- CDS1 SHN 10-13+22
- MJN CDS2 IF ABNORMAL TERMINATION
- LDD EC
- NJN CDSX IF ERROR CODE ALREADY SET
- CDS1.1 UJN CDS4 SET STATUS ERROR CODE
- * CHECK FOR *NOT READY* CONDITION.
- CDS2 SHN 13-4
- PJN CDS3 IF NOT *NOT READY*
- LDM DST+SB0
- SHN 0-12
- LPN 1
- LMN 1
- ZJN CDS5 IF DRIVE NOT READY
- * CHECK FOR STATISTICAL MESSAGE. THIS IS NOT A TRUE ERROR
- * CONDITION.
- LDM DST+SB7
- LPN 17
- LMN FM6
- ZJN CDS5.1 IF FORMAT 6 MESSAGE
- * CHECK FOR MEDIA ERROR.
- CDS3 LDM DST
- LPC 210
- LMC 210
- ZJN CDS6 IF MEDIA ERROR
- LDM DST+21
- SHN 21-6
- MJN CDS8 IF CHANNEL PARITY ERROR ON OUTPUT
- SHN 6-2
- MJN CDS9 IF DATA TRANSFER ERROR
- SHN 2-21+22
- LPN 50
- NJN CDS10 IF ADAPTOR MEMORY PARITY ERROR
- CDS4 LDK DSTE&NRDE
- CDS5 LMK NRDE&STAE
- CDS5.1 LMK STAE&PARE
- CDS6 LMK PARE
- CDS7 STD EC
- LJM CDSX RETURN
- CDS8 LDN CHPE SET *CHANNEL PARITY* ERROR CODE
- UJN CDS7 SET ERROR CODE
- CDS9 LDN IDTE SET *DATA TRANSFER* ERROR CODE
- UJN CDS7 SET ERROR CODE
- CDS10 LDN RAME SET *CONTROLLER MEMORY* ERROR CODE
- UJN CDS7 SET ERROR CODE
- CDSA BSS 0
- CON RIOA
- CON WIOA
- CRL SPACE 4,15
- ** CRL - CHECK FOR ERROR RETRY LIMIT REACHED.
- *
- * ENTRY (EC) = ERROR CODE.
- * (ER) = *RECOVERY IN PROGRESS* FLAG.
- * (RC) = RETRY COUNT.
- * (T5) = EST ORDINAL.
- *
- * EXIT (A) .GE. 0 IF RETRY LIMIT REACHED.
- * .LT. 0 IF NOT AT RETRY LIMIT.
- * (RC) INCREMENTED.
- * MESSAGE ISSUED TO *MS2W* OF SYSTEM CONTROL POINT FOR
- * B-DISPLAY PRESENTATION IF HALF WAY TO RETRY LIMIT.
- *
- * USES RC.
- *
- * CALLS C2D.
- CRL SUBR ENTRY/EXIT
- LDD ER
- LMC SHNI+1
- STM CRLA
- AOD RC INCREMENT RETRY COUNT
- LDM TREC,EC
- SHN -1
- SBD RC
- PJN CRL1 IF TOO EARLY TO NOTIFY OPERATOR
- LDD T5 STORE EST ORDINAL IN MESSAGE
- SHN -3
- RJM C2D
- STM CRLB+1
- LDD T5
- LPN 7
- SHN 6
- ADC 2R0
- STM CRLB+2
- LDM TMNE,EC STORE ERROR MNEMONIC IN MESSAGE
- STM CRLB+3
- LDD CP
- ADK MS2W
- CWM CRLB,TR
- CRL1 LDD RC
- * IF *RECOVERY IN PROGRESS* IS NOT SET, THE RETRY COUNT IS
- * SHIFTED SO THAT THE LIMIT CHECK IS MADE AGAINST N/2 (WHERE N
- * IS THE RETRY LIMIT FOR THE ERROR TYPE IN CELL *EC*). THIS
- * CAUSES HALF OF THE RETRY ATTEMPTS TO BE PERFORMED ON EACH
- * CHANNEL, IF AN ALTERNATE ACCESS IS AVAILABLE. IF NO
- * ALTERNATE ACCESS IS AVAILABLE, ALL RETRIES WILL BE PERFORMED
- * ON THIS CHANNEL.
- SHN 0
- * SHN 1 (RECOVERY NOT IN PROGRESS)
- CRLA EQU *-1
- SBM TREC,EC
- SBN 2
- UJP CRLX RETURN
- CRLB DATA C*EQ000 XX ERROR RETRY UNDERWAY.*
- CRQ SPACE 4,20
- ** CRQ - CHECK REQUEST QUEUE.
- *
- * THIS ROUTINE ATTEMPTS TO CALL *CPUMTR* TO COMPLETE REQUESTS
- * IN THE UNIT QUEUE THAT HAVE ALREADY BEEN PROCESSED.
- *
- * ENTRY (CC) = COMPLETION REQUEST COUNT.
- * (PO) = *PUT* ORDINAL.
- *
- * EXIT (A) .EQ. 0 IF NO REQUESTS PRESENT.
- * .NE. 0 IF *CPUMTR* IS STILL BUSY WITH PREVIOUS
- * FUNCTION OR AN EXCHANGE WAS JUST ISSUED
- * FOR THE CURRENT FUNCTION.
- *
- * USES CC, CN - CN+4, T0 - T4.
- CRQ SUBR ENTRY/EXIT
- LDC ** READ XP
- CRQA EQU *-1 FWA OF XP
- CRD T0
- LDD OA READ OUTPUT REGISTER
- CRD CN
- LDD T0+4 (B0)
- NJN CRQ1 IF MISSED EXCHANGE
- STD CN+3
- LDD CN
- SHN 21-13
- MJN CRQ1 IF REISSUE REQUIRED
- NJN CRQX IF FUNCTION BEING PROCESSED
- LDD CC
- ZJN CRQX IF NO PENDING COMPLETION REQUESTS
- LDC **
- CRQE EQU *-1
- CRD T0
- LDD T0
- ADD T0+1
- NJN CRQX IF FUNCTION IN PROGRESS
- LDN DCBS SET *BIOM* SUBFUNCTION
- STD CN+1
- LDD PO
- STD CN+2
- CRQ1 LDD CC
- RAD CN+3
- LDN 0
- STD CC
- LDK BIOM
- STD CN
- LDD OA
- CWD CN
- LDC **
- CRQB EQU *-1 ADDRESS OF EXCHANGE PACKAGE
- CWM CRQD,ON WRITE FIRST WORD
- SBN 1 SET EXCHANGE ADDRESS
- MXN 0 EXCHANGE CPU
- CRQC EQU *-1 CPU NUMBER
- UJP CRQX RETURN
- CRQD VFD 24/0 (P)
- VFD 18/0 (A0)
- VFD 18/0 (B0)
- DCH SPACE 4,15
- ** DCH - RELEASE CHANNEL.
- *
- * THIS ROUTINE RELEASES THE CHANNEL IF IT IS CURRENTLY
- * RESERVED.
- *
- * ENTRY (CS) = CHANNEL RESERVATION STATUS.
- * (IR+4) = CHANNEL NUMBER.
- *
- * EXIT (A) = (CS) = 0.
- *
- * USES CM+1, CS.
- *
- * MACROS MONITOR.
- DCH SUBR ENTRY/EXIT
- LDD CS
- LPN 1
- ZJN DCHX IF CHANNEL NOT RESERVED
- LDD IR+4 RELEASE CHANNEL
- STD CM+1
- MONITOR DCHM
- SOD CS CLEAR CHANNEL RESERVATION FLAG
- UJN DCHX RETURN
- ERR SPACE 4,20
- ** ERR - PROCESS ERROR.
- *
- * THIS ROUTINE IS CALLED TO PERFORM ALL ERROR PROCESSING.
- *
- * ENTRY (EC) = 0 IF THIS IS THE FIRST RETRY OF A RECOVERY
- * SEQUENCE AND THE CALLER DID NOT SET THE ERROR
- * CODE.
- * = ERROR CODE IF NOT THE FIRST RETRY OF A RECOVERY
- * SEQUENCE AND NOT A CALLER SPECIFIED ERROR CODE.
- * = COMPLEMENT OF ERROR CODE IF SPECIFIED BY THE
- * CALLER.
- * (RC) = RETRY COUNT.
- *
- * EXIT (EC) = 0.
- * (RC) = 0.
- * TO *MST*.
- *
- * USES EC, RC, RS, T1.
- *
- * CALLS CDS, CRL, CRQ, GGS, IBM, IIC, ISF, PDT, PFR,
- * PRE, RLC, SSF, TEP.
- ERR SUBR ENTRY
- ERR1 RJM PRE PRESET ERROR PROCESSOR
- NJP ERR11 IF INTERLOCK/VERIFICATION FAILURE
- RJM GGS GET GENERAL STATUS
- MJN ERR1.1 IF GENERAL STATUS UNAVAILABLE
- RJM CDS CHECK DETAILED STATUS
- ERR1.1 LDD RC
- ZJN ERR1.2 IF FIRST RETRY
- LDD ER
- ZJN ERR2 IF NOT RECOVERY IN PROGRESS
- AOM ERRA
- LMN 2
- NJN ERR2 IF NOT FIRST *ERR* CALL
- ERR1.2 LDD GS
- STM BMLGS
- ERR2 LCN 0
- LMD EC
- STD EC
- SHN 21-13
- MJN ERR2 IF COMPLEMENTED ERROR CODE
- LDD TH FORCE IMMEDIATE COMPLETION
- ERRNZ SHNI-1000 CODE DEPENDS ON VALUE
- STM IICA
- RJM IIC ISSUE I/O COMPLETION REQUEST
- ERR4.1 RJM CRQ ENSURE COMPLETION OF PENDING REQUEST
- NJN ERR4.1 IF FUNCTION STILL PENDING
- RJM IBM ISSUE BML MESSAGE IF NECESSARY
- AOD RS INCREMENT RECOVERY STATUS
- SHN 21-13
- MJN ERR10 IF *CCC* ERROR RECOVERY IN PROGRESS
- * SET THE SUSPECT FLAG IF APPROPRIATE FOR THIS ERROR TYPE.
- LDK STAE
- LMD EC
- ZJN ERR7 IF STATISTICAL DATA (NOT AN ERROR)
- RJM SSF SET SUSPECT FLAG (IF APPROPRIATE)
- RJM CRL CHECK FOR RETRY LIMIT REACHED
- MJN ERR7 IF RETRY LIMIT NOT REACHED
- SOD RC ADJUST FINAL RETRY COUNT
- ERR6 AOD RS SET RECOVERY STATUS
- UJN ERR11 TERMINATE ERROR PROCESSING
- * CHECK FOR CONTROLWARE RELOAD.
- ERR7 RJM RHR RELEASE HARDWARE RESERVE
- RJM RLC LOAD CONTROLWARE IF NECESSARY
- * RETRY I/O SEQUENCE.
- ERR9 RJM ISF ISSUE SEEK FUNCTION
- ZJN ERR10 IF ON CYLINDER AND NO ERROR
- LDD GS
- LMN 2
- ZJN ERR9 IF POSITIONER BUSY
- UJP ERR1 RESTART ERROR PROCESSING
- ERR10 RJM PFR PREPARE FOR RETRY ATTEMPT
- RJM PDT PERFORM READ/WRITE OPERATION
- * CONTROL RETURNS TO THIS POINT ONLY IF THE ERROR WAS
- * RECOVERED.
- ERR11 AOD RS SET RECOVERY STATUS
- SHN 6
- RAD RC ADJUST FOR CONTROLLER RECOVERY
- * TERMINATE ERROR PROCESSING. INSTRUCTIONS MODIFIED FOR ERROR
- * PROCESSING WILL BE RESTORED TO THEIR ORIGINAL VALUES, VARIOUS
- * DATA CELLS WILL BE RESTORED TO THEIR INITIAL STATES, ETC.
- RJM TEP TERMINATE ERROR PROCESSING
- LJM MST EXIT ERROR PROCESSOR
- ERRA CON 0 RECOVERY PASS COUNTER
- TEPF SPACE 4,30
- ** TEPF - TABLE OF ERROR PROCESSING FLAGS.
- *
- * THIS TABLE CONTAINS INFORMATION RELATED TO EACH ERROR TYPE.
- * EACH ENTRY HAS THE FOLLOWING FORMAT -
- * VFD 2/ERROR COUNT INCREMENT, BML MESSAGE INDICATOR
- * 0 DO NOT INCREMENT ERROR COUNTS AND DO
- * NOT ISSUE BML MESSAGE.
- * 1 INCREMENT ERROR COUNTS AND ISSUE BML
- * MESSAGE.
- * 2 INCREMENT ERROR COUNTS AND ISSUE BML
- * MESSAGE IF UNRECOVERED ERROR.
- * VFD 2/UNUSED (ZERO)
- * VFD 1/SUSPECT FLAG
- * 0 DO NOT SET SUSPECT FLAG.
- * 1 SET SUSPECT FLAG.
- * VFD 7/UNUSED (ZERO)
- LIST G
- TEPF EQU *-1
- ECHO 1,EC=("DREC")
- VFD 2/IEC._EC,2/0,1/SUS._EC,7/0
- LIST *
- TMNE SPACE 4,10
- ** TMNE - TABLE OF ERROR CODE MNEMONICS.
- LIST G
- TMNE EQU *-1
- ECHO 1,ERRCODE=("DREC")
- CON EMN._ERRCODE "TXT._ERRCODE" ERROR
- LIST *
- TREC SPACE 4,10
- ** TREC - TABLE OF RETRY COUNTS.
- LIST G
- TREC EQU *-1
- ECHO 1,ERRCODE=("DREC")
- CON RTC._ERRCODE "TXT._ERRCODE" ERROR
- LIST *
- TSYM SPACE 4,10
- ** TSYM - TABLE OF BML SYMPTOM CODES.
- LIST G
- TSYM EQU *-1
- ECHO 1,ERRCODE=("DREC")
- CON SYM._ERRCODE "TXT._ERRCODE" ERROR
- LIST *
- FNC SPACE 4,10
- ** FNC - FUNCTION CHANNEL.
- *
- * ENTRY (A) = FUNCTION CODE.
- *
- * EXIT (A) .LT. 0 IF CHANNEL ACTIVE UPON ENTRY OR FUNCTION
- * TIMEOUT. (EC) = COMPLEMENT OF ERROR CODE.
- * .EQ. 0 IF NO ERROR, CHANNEL ACTIVE.
- *
- * USES EC.
- FNC6 ACN CH ACTIVATE CHANNEL
- LDN 0 SET REPLY STATUS
- FNC SUBR ENTRY/EXIT
- STM FNCA SAVE FUNCTION CODE
- AJM FNC5,CH IF CHANNEL IS STILL ACTIVE
- FAN CH FUNCTION CHANNEL
- * THE DRIVER MUST WAIT AT LEAST 300 MS BEFORE TIMING OUT THE
- * FUNCTION.
- FNC1 ADD ON
- IJM FNC6,CH IF FUNCTION ACCEPTED
- NJN FNC1 IF NOT TIMEOUT YET
- LCN FTOE
- FNC3 STD EC
- EJM FNC4,CH IF CHANNEL IS EMPTY
- LDN 1 SAVE LAST FUNCTION ISSUED
- IAM FNCA,CH
- FNC4 LCN 0 SET ERROR REPLY STATUS
- DCN CH+40
- UJN FNCX RETURN
- FNC5 LCN CHFE SET *CHANNEL FAILURE* ERROR CODE
- UJN FNC3 INPUT DATA/FUNCTION FROM CHANNEL
- FNCA CON -0 CURRENT FUNCTION
- GDS SPACE 4,15
- ** GDS - GET DETAILED STATUS.
- *
- * THIS ROUTINE OBTAINS THE DETAILED STATUS FROM THE CONTROLLER.
- *
- * EXIT (A) .EQ. 0 IF STATUS OBTAINED.
- * .LT. 0 IF STATUS NOT OBTAINED.
- * (EC) = COMPLEMENT OF ERROR CODE IF STATUS NOT
- * OBTAINED.
- *
- * USES EC, T1.
- *
- * CALLS FNC.
- GDS2 LCN IDTE SET *INCOMPLETE DATA TRANSFER* ERROR CODE
- GDS3 STD EC
- GDS4 LDN MXSL-1 INVALIDATE DETAILED STATUS
- STD T1
- GDS5 LCN 0
- STM DST,T1
- SOD T1
- PJN GDS5 IF MORE BYTES
- GDS6 DCN CH+40
- GDS SUBR ENTRY/EXIT
- LDN FCDS ISSUE DETAILED STATUS FUNCTION
- RJM FNC
- MJN GDS4 IF ERROR
- LDN MXSL
- IAM DST,CH INPUT DETAILED STATUS
- NJN GDS2 IF INCOMPLETE DATA TRANSFER
- SFM GDS1,CH IF CHANNEL PARITY ERROR
- UJN GDS6 RETURN
- GDS1 LCN CHPE SET *CHANNEL PARITY* ERROR CODE
- UJN GDS3 SET ERROR CODE
- GGS SPACE 4,20
- ** GGS - GET GENERAL STATUS.
- *
- * THIS ROUTINE OBTAINS GENERAL STATUS FROM THE CONTROLLER.
- *
- * EXIT (A) .EQ. 0 IF GENERAL STATUS OBTAINED. (GS) = STATUS.
- * .LT. 0 IF STATUS NOT OBTAINED. (GS) = 7777.
- * (EC) = COMPLEMENT OF *IDET* ERROR CODE IF INCOMPLETE
- * DATA TRANSFER OCCURRED.
- * = COMPLEMENT OF *CHPE* ERROR CODE IF CHANNEL
- * PARITY ERROR OCCURRED.
- *
- * USES EC, GS.
- *
- * CALLS FNC.
- GGS1 LCN CHPE SET *CHANNEL PARITY* ERROR CODE
- UJN GGS3 SET ERROR CODE
- GGS2 LCN IDTE SET *INCOMPLETE DATA TRANSFER* ERROR CODE
- GGS3 STD EC
- GGS4 LCN 0 INVALIDATE GENERAL STATUS
- STD GS
- GGS5 DCN CH+40
- GGS SUBR ENTRY/EXIT
- LDN FCGS ISSUE GENERAL STATUS FUNCTION
- RJM FNC
- MJN GGS4 IF FUNCTION TIMEOUT
- LDN 1 INPUT STATUS
- IAM GS,CH
- NJN GGS2 IF INCOMPLETE TRANSFER
- SFM GGS1,CH IF CHANNEL PARITY ERROR
- LDD GS
- UJN GGS5 RETURN
- IBM SPACE 4,25
- ** IBM - ISSUE BML MESSAGE.
- *
- * THIS ROUTINE BUILDS A BML MESSAGE AND CALLS ROUTINE *IMB* TO
- * ISSUE THE MESSAGE TO THE BML.
- *
- * ENTRY (CA - CA+3) = SEEK PARAMETERS.
- * (EC) = ERROR CODE.
- * (ER) = RECOVERY IN PROGRESS FLAG.
- * (RC) = RETRY COUNT.
- * (RS) = RECOVERY STATUS.
- * 777X INITIAL RETRY.
- * 0 RECOVERED BY CONTROLLER.
- * 1 RECOVERED BY DRIVER.
- * 2 UNRESOLVED.
- * 3 UNRECOVERED.
- * (RW) = READ/WRITE FLAG.
- * (T5) = EST ORDINAL.
- * (BMLGS) = GENERAL STATUS.
- * (DST - DST+23) = DETAILED STATUS IF APPLICABLE.
- *
- * EXIT (RC) INCREMENTED IF FIRST RETRY.
- *
- * USES RC, T1, CM+1 - CM+3.
- *
- * CALLS IMB.
- *
- * MACROS MONITOR.
- IBM SUBR ENTRY/EXIT
- LDM TEPF,EC
- SHN 0-12
- ZJN IBMX IF NO BML MESSAGE/ERROR COUNT INCREMENT
- LDD RS
- LMN 2
- ZJN IBMX IF UNRESOLVED ERROR
- SHN 21-13
- PJN IBM1 IF FINAL RETRY
- LDD RC
- NJN IBMX IF NOT INITIAL RETRY
- AOD RC INCREMENT RETRY COUNT
- UJN IBM3 CONTINUE
- IBM1 SHN 13-1
- PJN IBM2 IF UNRECOVERED
- LDN 2
- SBD RC
- MJN IBM2 IF NOT RECOVERED ON FIRST RETRY
- LDK STAE
- LMD EC
- ZJN IBM3 IF ERROR NOT TO BE COUNTED
- * INCREMENT ERROR COUNTER.
- IBM2 LDD T5 SET EST ORDINAL
- STD CM+1
- LDD RS SET BYTE NUMBER
- SHN -1
- ADN 3
- STD CM+2
- LDK ICTS SET SUBFUNCTION
- STD CM+3
- MONITOR SMDM
- IBM3 LDD RS SET RECOVERED/UNRECOVERED FLAG
- ADN 5
- SHN -3
- LPN 1
- STD T1
- LDC /COMSDFS/D1XM*400 STORE SYMPTOM CODE
- LMM TSYM,EC
- STM BMLSC
- LMK /COMSDFS/HS0040+/COMSDFS/D1XM*400
- NJN IBM4 IF NOT A MEDIA ERROR
- LDD RW
- ERRNZ /COMSDFS/HS0041-/COMSDFS/HS0040-1 ERROR
- RAM BMLSC
- IBM4 LDD RC STORE RETRY COUNT
- SHN 6-1
- ADD RW ADD READ/WRITE FLAG
- SHN 1
- ADD T1 ADD RECOVERY STATUS
- STM BMLRC
- LDD CA UNIT NUMBER
- LPN 77
- STM BMLUN
- LDD T5 EST ORDINAL
- STM BMLEO
- LDD EC ERROR CODE
- STM BMLEC
- LDD CA+1 CYLINDER
- STM BMLCY
- LDD CA+2 TRACK AND SECTOR
- SHN 6
- LMD CA+3
- STM BMLTS
- LDC BML ISSUE *BML* MESSAGE
- RJM IMB ISSUE MESSAGE TO BUFFER
- UJP IBMX RETURN
- BML SPACE 4,10
- * BINARY MAINTENANCE LOG MESSAGE.
- BML BSS 0
- HDR1 VFD 36/0 RESERVED
- VFD 12/BMS1LC LENGTH OF MESSAGE
- VFD 12/MLDY MESSAGE TYPE
- VFD 12//COMSDFS/RM0115 MESSAGE ID
- BMLSC VFD 4//COMSDFS/D1XM DRIVER TYPE
- VFD 1/0 RESERVED
- VFD 7/0 SYMPTOM CODE
- BMLPP VFD 6/ PP NUMBER
- VFD 6/ CHANNEL NUMBER
- BMLUN VFD 6/0 EQUIPMENT NUMBER
- VFD 6/ UNIT NUMBER
- VFD 12/0 RESERVED
- BMLEO VFD 12/ EST ORDINAL
- BMLRC VFD 6/ RETRY COUNT
- VFD 4/0 RESERVED
- VFD 1/0 READ OPERATION
- * VFD 1/1 WRITE OPERATION
- VFD 1/0 RECOVERED ERROR
- * VFD 1/1 UNRECOVERED ERROR
- BMLCR VFD 6/ CHANNEL USED FOR RECOVERY
- VFD 6/0 RESERVED
- BMLMF VFD 12/ MAINFRAME ID
- VFD 12/0 RESERVED
- HDR1L EQU *-HDR1 HEADER LENGTH (PP WORDS)
- HDR1LC EQU HDR1L/5 HEADER LENGTH (CM WORDS)
- BMLEC VFD 12/ ERROR CODE
- BMLCY VFD 12/ CYLINDER
- BMLTS VFD 12/ TRACK AND SECTOR
- BMLLF VFD 12/ LAST FUNCTION
- BMLGS VFD 12/ GENERAL STATUS
- * DETAILED STATUS.
- DST BSS MXSL
- * DRIVER TRACE DATA.
- BSS 5
- BMS1L EQU *-BML LENGTH OF MESSAGE (PP WORDS)
- .A SET BMS1L+4
- BMS1LC EQU .A/5 LENGTH OF MESSAGE (CM WORDS)
- IFI SPACE 4,30
- ** IFI - INITIALIZE FOR I/O.
- *
- * THIS ROUTINE IS CALLED BY THE READ AND WRITE PROCESSORS TO
- * PREPARE FOR THE READ OR WRITE OPERATION.
- *
- * ENTRY (CB) = BUFFER ORDINAL.
- * (FU - FU+1) = FIRST WORD ADDRESS OF UEM.
- * (RW) = READ/WRITE FLAG.
- *
- * EXIT (BS) = BLOCK SIZE (SIZE OF DATA TRANSFER TO BE
- * PERFORMED ON INPUT/OUTPUT INSTRUCTION).
- * (SR - SR+4) = SLAVE REQUEST.
- * (UA - UA+1) = UEM ADDRESS FOR MASTER.
- *
- * USES BS, CM - CM+4, SR - SR+4, UA - UA+1.
- *
- * MACROS CCBA.
- IFI SUBR ENTRY/EXIT
- LDC HLEN+DLEN SET TRANSFER SIZE
- STD BS
- LDM IFIA,RW SET BUFFER ADDRESS
- STD T1
- LDC BUFF
- STI T1
- * SET UEM ADDRESS.
- CCBA IOLK
- CRD CM
- LDD CM+4
- ADD FU+1
- SHN -6
- STD UA+1
- LDD CM+3
- ADD FU
- SHN 6
- RAD UA+1
- SHN -14
- STD UA
- * BUILD SLAVE REQUEST.
- LDN ZERL
- CRD SR CLEAR SLAVE REQUEST BLOCK
- LDD RW SET REQUEST TYPE
- ADN 1
- ERRNZ SLRD-1 CODE DEPENDS ON VALUE
- ERRNZ SLWR-2 CODE DEPENDS ON VALUE
- STD SR
- LDK MPRU SET SLAVE UEM ADDRESS
- ADD UA+1
- STD SR+4
- SHN -14
- ADD UA
- STD SR+3
- UJP IFIX RETURN
- IFIA CON RIOB
- CON WIOB
- IIC SPACE 4,10
- ** IIC - ISSUE I/O COMPLETION REQUEST.
- *
- * ENTRY (CC) = COMPLETION COUNT.
- * (PB) = PREVIOUS BUFFER ORDINAL, IF ANY.
- *
- * EXIT (PB) = 0.
- *
- * USES CC, PB, S1.
- *
- * CALLS CRQ.
- IIC SUBR ENTRY/EXIT
- LDD PB
- ZJN IIC1 IF NO PREVIOUS BUFFER ORDINAL
- AOD CC INCREMENT COMPLETION COUNT
- LDN 0 CLEAR PREVIOUS BUFFER ORDINAL
- STD PB
- IIC1 LDD CC
- SHN **
- IICA EQU *-1
- ZJN IICX IF NOT AT THRESHOLD
- LDK MMXN SET EXCHANGE RETRY LIMIT
- STD S1
- IIC2 RJM CRQ ISSUE COMPLETION REQUEST
- ZJN IICX IF NO PENDING REQUEST
- SOD S1
- PJN IIC2 IF NOT AT EXCHANGE RETRY LIMIT
- UJN IICX RETURN
- IICB BSS 0
- CON SHNI+77-0
- CON SHNI+77-1
- IMF SPACE 4,10
- ** IMF - ISSUE MONITOR FUNCTION.
- *
- * ENTRY (A) = MONITOR FUNCTION CODE.
- *
- * EXIT (A) = 0.
- * (CM - CM+4) = COMPLETED PP OUTPUT REGISTER IMAGE.
- *
- * USES S1.
- *
- * CALLS CRQ, FTN.
- IMF SUBR ENTRY/EXIT
- STD S1 SAVE MONITOR FUNCTION CODE
- IMF1 RJM CRQ CHECK FOR FUNCTION REISSUE REQUIRED
- NJN IMF1 IF PREVIOUS FUNCTION NOT YET COMPLETE
- LDD S1
- RJM FTN ISSUE MONITOR FUNCTION
- UJN IMFX RETURN
- ISF SPACE 4,25
- ** ISF - ISSUE SEEK OPERATION.
- *
- * THIS ROUTINE ISSUES THE SEEK FUNCTION.
- *
- * ENTRY (CB) = BUFFER ORDINAL.
- * (CS) = CHANNEL RESERVATION STATUS.
- *
- * EXIT (A) .EQ. 0 IF UNIT ON-CYLINDER.
- * .NE. 0 IF DRIVE RESERVED TO OTHER CONTROLLER, OR
- * POSITIONER BUSY.
- * (CS) = BIT 3 SET IF CONTROLLER HARDWARE RESERVE IS
- * HELD. BIT 3 IS CLEAR IF *OPERATION COMPLETE*
- * FUNCTION WAS ISSUED.
- * (CA - CA+2) = PHYSICAL ADDRESS OF SECTOR.
- * TO *ERR* IF ERROR.
- *
- * USES CS, EC, CA - CA+4.
- *
- * CALLS ERR, FNC, GGS, RHR.
- *
- * MACROS CCBA.
- ISF SUBR ENTRY/EXIT
- CCBA PAD1 GET PHYSICAL ADDRESS FROM CBT ENTRY
- CRD CA
- LDD CA+2 SET HEAD NUMBER
- SHN 14
- LMD TH SET SECTOR SIZE FIELD
- ERRNZ SSIZ-1000 CODE DEPENDS ON VALUE
- STD CA+2
- SHN -14 SET SECTOR NUMBER
- STD CA+3
- LDN FCSK ISSUE SEEK FUNCTION
- RJM FNC
- MJN ISF3 IF FUNCTION TIMEOUT
- LDN FCSKL OUTPUT SEEK PARAMETERS
- OAM CA,CH
- ZJN ISF1 IF ALL DATA WAS TAKEN
- LCN IDTE SET *INCOMPLETE DATA TRANSFER* ERROR CODE
- UJN ISF2 PROCESS ERROR
- ISF1 EJM ISF4,CH IF LAST BYTE TRANSFERRED
- SBN 1
- NJN ISF1 IF NOT TIMEOUT
- LCN CHFE SET *CHANNEL FAILURE* ERROR CODE
- ISF2 STD EC
- ISF3 RJM ERR PROCESS ERROR
- ISF4 DCN CH+40
- RJM GGS GET GENERAL STATUS
- MJN ISF3 IF STATUS WAS NOT OBTAINED
- ZJN ISF5 IF NO ERROR AND ON-CYLINDER
- SHN 21-13
- MJN ISF3 IF ABNORMAL TERMINATION
- SHN 21-3-21+13
- MJN ISF6 IF DRIVE RESERVED TO OPPOSITE ACCESS
- ISF5 LDD CS SET HARDWARE RESERVE FLAG
- SCN 10
- LMN 10
- STD CS
- LDD GS
- ZJN ISF6 IF ON-CYLINDER
- SHN 21-1
- PJN ISF3 IF NOT BUSY STATUS
- RJM RHR RELEASE HARDWARE RESERVES
- NJN ISF3 IF ERROR
- LDN 1 SET EXIT STATUS
- ISF6 LJM ISFX RETURN
- RLC SPACE 4,10
- ** RLC - RELOAD CCC CONTROLWARE IF NECESSARY.
- *
- * RLC WILL CALL OVERLAY *2XN* TO RELOAD CONTROLWARE BEFORE THE
- * FINAL RETRY FOR EACH ACCESS, PROVIDED THAT THE ERROR CODE IS
- * LESS THAN *NRVE*.
- *
- * EXIT (A) .EQ. 0 IF LOAD WAS SUCCESSFUL OR UNNECESSARY.
- * (A) .NE. 0 IF LOAD WAS ATTEMPTED AND FAILED.
- *
- * CALLS 2XN.
- *
- * MACROS EXECUTE.
- RLC2 LDN 0 INDICATE NO ERROR
- DCN CH+40
- RLC SUBR ENTRY/EXIT
- LDD EC
- SBK NRVE
- PJN RLC2 IF NOT A CANDIDATE FOR CONTROLWARE RELOAD
- LDM TREC,EC
- SBD RC
- ZJN RLC1 IF TIME FOR RELOAD ON SECONDARY ACCESS
- SBD RC
- NJN RLC2 IF NOT TIME FOR RELOAD ON PRIMARY ACCESS
- RLC1 EXECUTE 2XN RELOAD CONTROLWARE IF POSSIBLE
- UJN RLCX RETURN
- OVI SPACE 4,25
- ** OVI - OBTAIN AND VERIFY *PUT* INTERLOCK.
- *
- * THIS ROUTINE ATTEMPTS TO OBTAIN THE *PUT* INTERLOCK AND IF
- * SUCCESSFUL, VERIFIES THAT THE BUFFER FOR WHICH THE SEEK WAS
- * ISSUED IS STILL CURRENT IN THE QUEUE.
- *
- * ENTRY (CA+1 - CA+3) = ADDRESS USED FOR SEEK.
- * (CB) = BUFFER ORDINAL.
- * (ER) = RECOVERY IN PROGRESS FLAG.
- * (IL) = NONZERO IF THE *PUT* INTERLOCK IS ALREADY HELD.
- * (PO) = *PUT* ORDINAL.
- *
- * EXIT (A) = 0 IF *PUT* ENTRY IS INTERLOCKED AND BUFFER IS
- * STILL CURRENT IN QUEUE.
- * = NONZERO IF *PUT* ENTRY IS INTERLOCKED BY OTHER
- * DRIVER OR THE BUFFER FOR WHICH THE SEEK WAS
- * PERFORMED HAS ALREADY BEEN PROCESSED BY THE
- * OTHER DRIVER.
- * (IL) = 1 IF (A) = 0.
- *
- * USES IL, CM+1 - CM+2, CN - CN+4.
- *
- * CALLS RPI.
- *
- * MACROS CCBA, CPTA, MONITOR.
- OVI2 LDN 0 INDICATE *PUT* INTERLOCKED AND BUFFER OK
- OVI SUBR ENTRY/EXIT
- LDD IL
- NJN OVI2 IF THIS DRIVER ALREADY HAS *PUT* INTERLOCK
- LDK SUIS
- STD CM+1
- LDD PO
- STD CM+2
- MONITOR BIOM ISSUE INTERLOCK REQUEST
- LDD CM+1
- NJN OVIX IF *PUT* IS INTERLOCKED BY OTHER DRIVER
- AOD IL SET *PUT* INTERLOCK FLAG
- LDC CREQ UPDATE *CCT* TABLE
- OVIA EQU *-2 (*CCT* FWA SET BY *PRS*)
- CWD IL
- LDD ER
- NJN OVI2 IF RECOVERY IN PROGRESS
- * VERIFY THAT THE BUFFER FOR WHICH THE SEEK WAS ISSUED IS STILL
- * CURRENT IN THE QUEUE.
- CPTA UNCT
- CRD CN
- LDD CN+3
- LMD CB
- NJN OVI1 IF CURRENT CBT ORDINAL CHANGED
- CCBA HSLK GET *PUT* ORDINAL FROM CBT ENTRY
- CRD CN
- LDD CN+4
- LMD PO
- NJN OVI1 IF *PUT* ORDINALS DO NOT MATCH
- CCBA PAD1 GET PHYSICAL ADDRESS FROM CBT ENTRY
- CRD CN
- LDD CN+1
- LMD CA+1
- NJN OVI1 IF NO CYLINDER MATCH
- LDD CA+2 TRACK
- LPN 77
- SHN 6
- LMD CA+3 SECTOR
- LMD CN+2
- ZJN OVI1.1 IF BUFFER OK
- OVI1 RJM RPI RELEASE *PUT* INTERLOCK
- LDN 1 INDICATE VERIFICATION FAILURE
- OVI1.1 UJP OVIX RETURN
- PDT SPACE 4,20
- ** PDT - PROCESS DATA TRANSFER.
- *
- * THIS ROUTINE PREPARES FOR AND STARTS THE DATA TRANSFER WHEN A
- * REQUEST IS FOUND IN THE *PUT* AND THE SEEK HAS COMPLETED. IT
- * WILL CALL THE PROPER ROUTINE FOR THE DIRECTION OF THE I/O.
- * THIS ROUTINE WILL RETURN TO THE MAIN LOOP ONLY WHEN THE
- * TRANSFER CANNOT CONTINUE ON THE CURRENT UNIT.
- *
- * ENTRY (EC) = ERROR CODE IF ERROR RECOVERY IS IN PROGRESS.
- * (PO) = *PUT* ORDINAL.
- * (RW) = READ/WRITE FLAG.
- *
- * USES NB, PB, TB, T1.
- *
- * CALLS ERR, OVI, RHR, RIO, RPI, WIO.
- PDT SUBR ENTRY/EXIT
- RJM OVI OBTAIN *PUT* INTERLOCK AND VERIFY BUFFER
- NJN PDT1 IF UNABLE TO INTERLOCK *PUT*/WRONG BUFFER
- STD NB CLEAR NEXT BUFFER ORDINAL
- STD PB CLEAR PREVIOUS BUFFER ORDINAL
- LDM IICB,RW SET COMPLETION REQUEST THRESHOLD
- STM IICA
- LDM PDTA,RW STORE SUBROUTINE ADDRESS
- STD T1
- RJM 0,T1 ENTER DATA TRANSFER ROUTINE
- * CONTROL RETURNS HERE AFTER THE DATA TRANSFER IS COMPLETED.
- PDT1 RJM RHR RELEASE HARDWARE RESERVES
- ZJN PDT2 IF NO ERROR
- LDD EC
- NJN PDT2 IF ERROR RECOVERY IS IN PROGRESS
- RJM ERR CALL ERROR PROCESSOR
- PDT2 RJM RPI RELEASE *PUT* INTERLOCK
- UJP PDTX RETURN
- PDTA BSS 0 PROCESSOR ADDRESS TABLE
- CON RIO
- CON WIO
- PFR SPACE 4,15
- ** PFR - PREPARE FOR RETRY ATTEMPT.
- *
- * THIS ROUTINE DOES WHATEVER IS NECESSARY TO PREPARE FOR THE
- * NEXT RETRY ATTEMPT. ITS DUTIES INCLUDE PLUGGING INSTRUCTIONS
- * TO FORCE RETURN TO THE ERROR PROCESSOR FOLLOWING RECOVERY.
- *
- * ENTRY (RW) = READ/WRITE FLAG.
- *
- * USES T1, T2.
- PFR SUBR ENTRY/EXIT
- LDD RW
- SHN 1
- STD T1
- LDM PFRA,T1
- STD T2
- LDM PFRA+1,T1
- STI T2
- UJN PFRX RETURN
- PFRA BSS 0
- CON RIOC,UJNI+RIO12-RIOC
- CON WIOC,UJNI+WIO8-WIOC
- ERRNG RIO12-RIOC CODE DEPENDS ON VALUE
- ERRNG WIO8-WIOC CODE DEPENDS ON VALUE
- PRE SPACE 4,20
- ** PRE - PRESET ERROR PROCESSOR.
- *
- * THIS ROUTINE PERFORMS OPERATIONS NECESSARY TO PREPARE THE
- * DRIVER FOR ERROR PROCESSOR EXECUTION.
- *
- * EXIT (A) = 0 IF ERROR PROCESSING SHOULD CONTINUE.
- * (EC) = 1 IF ERROR ON PREVIOUS SECTOR.
- * (PB) = PREVIOUS BUFFER ORDINAL.
- * (RS) = RECOVERY STATUS.
- * (T5) = EST ORDINAL.
- * (TEPA) = 1 IF VERIFICATION/INTERLOCK REJECT.
- *
- * USES CB, EC, PB, RS, T5, CM - CM+4.
- *
- * CALLS CRQ, OVI.
- *
- * MACROS CPTA.
- PRE4 AOM TEPA SET VERIFICATION/INTERLOCK FAILURE FLAG
- PRE SUBR ENTRY/EXIT
- DCN CH+40 DISCONNECT CHANNEL
- LDM FNCA SAVE CURRENT FUNCTION
- STM BMLLF
- LCN 0 INITIALIZE RECOVERY STATUS
- STD RS
- RJM OVI GET *PUT* INTERLOCK (IF NOT ALREADY HELD)
- NJN PRE4 IF INTERLOCK NOT OBTAINED
- LDC LDNI+FCRD
- STM RIOA
- ADN FCWR-FCRD
- STM WIOA
- CPTA UNCT GET EST ORDINAL
- CRD CM
- LDD CM+1
- STD T5
- LDD EP
- ZJN PRE3 IF NOT PREVIOUS SECTOR ERROR
- LDD EC
- LMC 7777-FTOE
- NJN PRE3 IF NOT PREVIOUS SECTOR ERROR
- LDN FTOE
- STD EC
- LDD PB RESET CURRENT BUFFER TO PREVIOUS
- ZJN PRE3 IF NO PREVIOUS BUFFER
- STD CB
- LDN 0 CLEAR PREVIOUS BUFFER ORDINAL
- STD PB
- PRE3 RJM CRQ IDLE PENDING MONITOR FUNCTIONS
- NJN PRE3 IF FUNCTION PENDING
- STD EP CLEAR PREVIOUS SECTOR ERROR FLAG
- LJM PREX RETURN
- RCH SPACE 4,15
- ** RCH - REQUEST CHANNEL.
- *
- * ENTRY (IR+4) = CHANNEL NUMBER.
- * (CS) = CHANNEL RESERVATION STATUS.
- *
- * EXIT (A) .NE. 0 IF CHANNEL ASSIGNED.
- * .EQ. 0 IF CHANNEL NOT ASSIGNED.
- *
- * USES CM+1, CS.
- *
- * MACROS MONITOR.
- RCH SUBR ENTRY/EXIT
- LDD CS
- LPN 1
- NJN RCHX IF CHANNEL ALREADY ASSIGNED
- LDD IR+4
- STD CM+1
- MONITOR CCHM
- LDD CM+2
- ZJN RCHX IF CHANNEL NOT ASSIGNED
- SCF *+2,CH UNCONDITIONALLY SET CHANNEL FLAG
- AOD CS SET CHANNEL RESERVED FLAG
- UJN RCHX RETURN
- RFU SPACE 4,30
- ** RFU - READ FROM UEM.
- *
- *
- * ENTRY (BL) = MASTER BUFFER LENGTH (IN CM WORDS).
- * (CB) = BUFFER ORDINAL.
- * (SR+2) = 0 IF PROCESSING FIRST PART OF SECTOR.
- * (UA - UA+1) = UEM ADDRESS/100B TO READ FROM.
- *
- * EXIT (BUFF) = HEADER + DATA FROM UEM.
- *
- * USES T1 - T3.
- *
- * MACROS CCBA.
- RFU SUBR ENTRY/EXIT
- LDD SR+2
- NJN RFU1 IF SECOND HALF OF BLOCK
- LDN HLEN/5
- STD T1 SET LENGTH OF HEADER
- CCBA PAD1 READ HEADER INTO BUFFER
- CRM BUFF,T1
- RFU1 SRD T2 SAVE R-REGISTER
- LRD UA SET ADDRESS TO READ FROM
- LDC 400000 USE R-REGISTER FOR READ ADDRESS
- CRM BUFF+HLEN,BL READ DATA INTO BUFFER
- LRD T2 RESTORE R-REGISTER
- UJN RFUX RETURN
- RHR SPACE 4,10
- ** RHR - RELEASE HARDWARE RESERVES.
- *
- * ENTRY (CS) = CHANNEL STATUS.
- *
- * EXIT (A) = 0 IF NO ERROR.
- *
- * USES CS, S1.
- *
- * CALLS FNC.
- RHR SUBR ENTRY/EXIT
- LDD CS
- LPN 10
- ZJN RHRX IF CONTROLLER NOT RESERVED
- LDN FCOC ISSUE *OPERATION COMPLETE* FUNCTION
- RJM FNC
- SHN 0-21 SAVE ERROR STATUS
- STD S1
- DCN CH+40
- LCN 10 CLEAR CONTROLLER RESERVE FLAG
- RAD CS
- LDD S1 SET REPLY STATUS
- UJN RHRX RETURN
- RIO SPACE 4,40
- ** RIO - PERFORM READ I/O OPERATIONS.
- *
- * ENTRY (CB) = CURRENT BUFFER ORDINAL.
- * (EP) = 0.
- * (NB) = 0.
- * (PB) = 0.
- * (SB) = FWA OF SLAVE REQUEST BUFFER.
- *
- * EXIT (PB) = ORDINAL OF LAST BUFFER PROCESSED.
- *
- * USES CB, EC, EP, NB, PB, SR+2.
- *
- * CALLS AUA, CCS, ERR, FNC, GGS, IFI, RSS, WFS, WTU.
- *
- * MACROS CCBA.
- RIO SUBR ENTRY/EXIT
- RJM IFI INITIALIZE FOR I/O
- RIO1 LDN FCRD ISSUE READ FUNCTION
- * LDN FCCO (CONTROLLER ERROR RECOVERY IN PROGRESS)
- RIOA EQU *-1
- RJM FNC
- PJN RIO2 IF NO ERROR
- AOD EP SET PREVIOUS SECTOR ERROR FLAG
- UJN RIO5 CALL ERROR PROCESSOR
- RIO2 LDD SB POST SLAVE REQUEST
- ADK SBRQ
- CWD SR POST SLAVE REQUEST
- RIO3 FJM RIO6,CH IF CHANNEL FULL
- SBN 1
- NJN RIO3 IF NOT TIMEOUT
- LCN CHFE SET *CHANNEL FAILURE* ERROR CODE
- RIO4 STD EC
- RJM RSS RESET SLAVE TO IDLE LOOP
- RIO5 RJM ERR CALL ERROR PROCESSOR
- RIO6 LDD BS INPUT DATA
- IAM BUFF,CH
- * IAM BUFF+HLEN (SECOND HALF OF SECTOR)
- RIOB EQU *-1
- ZJN RIO8 IF DATA TRANSFER COMPLETE
- SFM RIO7,CH IF CHANNEL PARITY ERROR
- LCN IDTE SET *INCOMPLETE DATA TRANSFER* ERROR CODE
- UJN RIO4 SET ERROR CODE
- RIO7 LCN CHPE SET *CHANNEL PARITY* ERROR CODE
- UJN RIO4 SET ERROR CODE
- RIO8 CCF *,CH PASS CHANNEL TO SLAVE
- RJM WTU WRITE DATA TO UEM/STORE LINKAGE BYTES
- AOD SR+2 SET *CHANNEL DISCONNECT* FLAG
- LMN 2
- ZJN RIO11 IF LAST BLOCK TRANSFERRED
- RJM AUA ADVANCE MASTER/SLAVE UEM ADDRESSES
- RJM WFS WAIT FOR SLAVE COMPLETION
- PJP RIO2 IF SLAVE DID NOT ENCOUNTER ERROR
- RIO8.1 STD EC STORE ERROR CODE
- RIO9 UJN RIO5 CALL ERROR PROCESSOR
- RIO11 RJM WFS WAIT FOR SLAVE COMPLETION
- MJN RIO8.1 IF SLAVE ENCOUNTERED ERROR
- ZJN RIO12 IF NO CONSECUTIVE REQUEST
- * UJN RIO12 (ERROR RECOVERY IN PROGRESS)
- RIOC EQU *-1
- LDN 0 CLEAR NEXT BUFFER ORDINAL
- STD NB
- LJM RIO1 PROCESS NEXT REQUEST
- RIO12 RJM GGS GET GENERAL STATUS
- ZJP RIOX IF NO ERROR
- LDD PB BACKUP TO PREVIOUS BUFFER
- STD CB
- LDN 0 AVOID BUFFER COMPLETION
- STD PB
- UJN RIO9 CALL ERROR PROCESSOR
- RPI SPACE 4,10
- ** RPI - RELEASE *PUT* INTERLOCK.
- *
- * ENTRY (CC) = COMPLETION COUNT.
- * (IL) = *PUT* INTERLOCK FLAG.
- * (PB) = PREVIOUS BUFFER ORDINAL.
- * (PO) = *PUT* ORDINAL.
- * (RW) = READ/WRITE FLAG.
- * (SB) = SLAVE MESSAGE BUFFER ADDRESS.
- * (TB) = TOTAL BUFFER COUNT.
- *
- * USES CC, IL, PB, CM - CM+4.
- *
- * MACROS MONITOR.
- RPI2 LDD PB
- ZJN RPI3 IF NO PREVIOUS BUFFER
- LDN 1 ACCOUNT FOR PREVIOUS BUFFER
- RPI3 ADD CC
- LMC 4000 SET *RELEASE INTERLOCK* FLAG
- STD CM+3
- LDD TB SET TOTAL BUFFER COUNT
- STD CM+4
- LDD PO
- STD CM+2
- LDN DCBS CLEAR UNIT INTERLOCK
- STD CM+1
- LDN 0 CLEAR COMPLETION COUNT BEFORE *CRQ* CALL
- STD CC
- MONITOR BIOM
- * LDN 0
- STD IL CLEAR *PUT* INTERLOCK FLAG
- STD PB CLEAR PREVIOUS BUFFER ORDINAL
- LDC CREQ UPDATE *CCT* TABLE
- RPIA EQU *-2 (*CCT* FWA SET BY *PRS*)
- CWD IL
- RPI SUBR ENTRY/EXIT
- LDD IL
- ZJN RPIX IF *PUT* NOT INTERLOCKED
- RPI1 LDD SB
- ADK SBRC
- CRD CM
- LDD CM
- NJP RPI2 IF SLAVE FINISHED
- LDK SDLY
- SBN 1
- NJN *-1 IF DELAY NOT FINISHED
- UJN RPI1 CHECK FOR SLAVE COMPLETION
- RSS SPACE 4,25
- ** RSS - RESET SLAVE TO IDLE LOOP.
- *
- *
- * ENTRY (SB) = FWA OF SLAVE REQUEST BUFFER.
- *
- * USES CM - CM+4.
- RSS SUBR ENTRY/EXIT
- LDN 1
- STD CM ERROR FLAG
- LDD SB
- ADK SBME
- CWD CM SET MASTER ERROR FLAG
- CCF *,CH CLEAR CHANNEL FLAG
- RSS1 LDK SDLY
- SBN 1
- NJN *-1 IF DELAY NOT COMPLETE
- LDD SB
- ADK SBME
- CRD CM REREAD MASTER ERROR FLAG WORD
- LDD CM
- NJN RSS1 IF SLAVE HAS NOT CLEARED ERROR FLAG
- SCF *,CH SET CHANNEL FLAG
- UJN RSSX RETURN
- RTM SPACE 4,25
- ** RTM - REQUEST TRACK FLAW IF MEDIA ERROR.
- *
- * THIS ROUTINE DETERMINES IF THE ERROR RESULTED FROM A MEDIA
- * FAILURE. IF IT DID, *CPUMTR* WILL BE CALLED TO PLACE THE
- * LOGICAL TRACK NUMBER IN THE MST SO *1MV* CAN PERFORM A MEDIA
- * VERIFICATION WHEN THE TRACK IS RELEASED. AN ERROR LOG
- * MESSAGE IS ISSUED INFORMING THE OPERATOR THAT A MEDIA FAILURE
- * OCCURRED BUT THE TRACK HAS NOT YET BEEN FLAWED BY THE SYSTEM.
- *
- * ENTRY (CA - CA+3) = PHYSICAL ADDRESS.
- * (CB) = BUFFER ORDINAL.
- * (EC) = ERROR CODE.
- * (T5) = EST ORDINAL.
- *
- * USES T1, CM - CM+4.
- *
- * CALLS C2D, IMB.
- *
- * MACROS MONITOR.
- RTM SUBR ENTRY/EXIT
- LDD EC
- LMK PARE
- NJN RTMX IF NOT MEDIA ERROR
- LDD T5 CONVERT AND STORE EST ORDINAL IN MESSAGE
- SHN -3
- RJM C2D
- STM RTMB+1
- LDD T5
- STD CM+1 STORE EST ORDINAL FOR *SMDM*
- LPN 7
- SHN 6
- ADC 2R0,
- STM RTMB+2
- LDD CA+1
- SHN 1
- ADC 4000
- STD CM+2
- LDD CA+2 PHYSICAL TRACK
- LPN 77
- STD T1
- SHN 1
- ADD T1
- ERRNZ PSPT-3 CODE DEPENDS ON VALUE
- ADD CA+3
- SBK PSLT
- MJN RTM1 IF FIRST LOGICAL TRACK OF CYLINDER
- AOD CM+2
- RTM1 LDD CM+2 CONVERT AND STORE TRACK NUMBER IN MESSAGE
- SHN -6 CONVERT UPPER 6 BITS
- RJM C2D
- STM RTMB+4 STORE RESULT IN DISPLAY BUFFER
- LDD CM+2 CONVERT LOWER 6 BITS
- LPN 77
- RJM C2D
- STM RTMB+5 STORE RESULT IN DISPLAY BUFFER
- LDK SFTS SET SUBFUNCTION
- STD CM+3
- MONITOR SMDM
- LDD CM+1
- NJN RTM2 IF THIS TRACK FLAW ALREADY REQUESTED
- LDC RTMA ISSUE ERROR LOG MESSAGE
- RJM IMB
- RTM2 UJP RTMX RETURN
- RTMA VFD 24/0 RESERVED
- VFD 12/1 ERRLOG ALERT FLAG
- VFD 12/RTMAL MESSAGE LENGTH
- VFD 12/ELDY ERRLOG DAYFILE
- RTMB DATA C*EQXXX,TKNNNN, MEDIA DEFECT ENCOUNTERED.*
- .1 SET *-RTMA+4
- RTMAL EQU .1/5
- SCD SPACE 4,10
- ** SCD - SET DRIVER DROPPED FLAG.
- *
- * THIS ROUTINE SETS A FLAG IN THE CONTROLWARE TABLE INDICATING
- * THAT THE DRIVER OF THIS CHANNEL HAS DROPPED.
- *
- * EXIT (A) = 0.
- *
- * USES CM+1 - CM+4.
- *
- * MACROS MONITOR.
- SCD SUBR ENTRY/EXIT
- LDD MA STORE *UTEM* PARAMETERS
- CWM SCDB,ON
- LDC **
- SCDA EQU *-1 (CONTROLWARE TABLE ADDRESS)
- STD CM+4
- SHN -14
- STD CM+3
- LDN 1
- STD CM+1
- LDN 0
- STD CM+2
- MONITOR UTEM SET DRIVER DROP FLAG
- UJN SCDX RETURN
- SCDB VFD 1/0,5/0,6/1,6/,42/1
- SSF SPACE 4,15
- ** SSF - SET SUSPECT FLAG.
- *
- * THIS ROUTINE SETS THE SUSPECT FLAG AND THE *E,M* DISPLAY
- * ERROR CODE IN THE MST ENTRY VIA *SEQM* FUNCTIONS, PROVIDED
- * THAT THE *SET SUSPECT* FLAG IS SET IN TABLE *TEPF* FOR THE
- * PARTICULAR TYPE OF ERROR ENCOUNTERED.
- *
- * ENTRY (EC) = ERROR CODE.
- * (RC) = RETRY COUNT.
- * (T5) = EST ORDINAL.
- *
- * USES CM+1 - CM+3.
- *
- * CALLS RTM.
- *
- * MACROS MONITOR.
- SSF1 LDK SURT
- SSF2 SBD RC
- NJN SSFX IF NOT TIME TO SET SUSPECT FLAG
- RJM RTM CHECK FOR MEDIA FAILURE
- LDM TEPF,EC
- SHN 21-7
- PJN SSFX IF SUSPECT FLAG NOT TO BE SET
- LDD T5 SET SUSPECT FLAG
- STD CM+1
- LDN SSES
- STD CM+2
- MONITOR SEQM
- LDD T5 SET ERROR CODE IN MST
- STD CM+1
- LDN STDE
- STD CM+2
- LDN SERS
- STD CM+3
- MONITOR SMDM
- SSF SUBR ENTRY/EXIT
- LDD ER
- NJN SSFX IF RECOVERY IN PROGRESS
- LDD EC
- SBK NRVE
- PJP SSF1 IF NO CONTROLWARE RELOAD
- LDM TREC,EC
- SHN -1
- ADN 1
- UJP SSF2 SEE IF TIME TO SET SUSPECT
- SUQ SPACE 4,30
- ** SUQ - SCAN UNIT QUEUE.
- *
- * THIS ROUTINE SCANS THE *PUT* ENTRIES OF UNITS ACCESSED BY
- * THIS CHANNEL UNTIL IT HAS SCANNED THE ENTIRE TABLE OR FINDS
- * AN ENTRY ELIGIBLE FOR PROCESSING.
- *
- * ENTRY (TI) = CURRENT *TPOR* INDEX.
- *
- * EXIT (A) .EQ. 0 IF ENTIRE TABLE SCANNED AND NO ELIGIBLE
- * ENTRY FOUND.
- * .NE. 0 IF ENTRY SELECTED.
- * (CB) = CURRENT BUFFER ORDINAL.
- * (ER) = 1 IF ERROR RECOVERY IS IN PROGRESS.
- * (PO) = ORDINAL OF SELECTED *PUT* ENTRY.
- * (RC) = 0 IF ELIGIBLE ENTRY FOUND AND *RECOVERY IN
- * PROGRESS* FLAG IS CLEAR.
- * = N/2+1 WHERE N IS THE RETRY LIMIT FOR THE ERROR
- * CODE SET IN *EC* IF *RECOVERY IN PROGRESS*
- * FLAG IS SET.
- * (RW) = READ/WRITE FLAG.
- * TO *ERR* IF ERROR RECOVERY IS IN PROGRESS FOR
- * SELECTED BUFFER.
- * (TB) = TOTAL BUFFER COUNT.
- *
- * USES CB, EC, ER, PO, RC, RW, S1, TB, TI, CM - CM+4,
- * CN - CN+4, T1 - T5.
- *
- * MACROS CCBA, CPTA, SFA.
- SUQ7 LDD TI
- LMN 1
- SUQA EQU *-1
- NJN SUQ1 IF NOT FINISHED WITH *PUT* SCAN
- SUQ SUBR ENTRY/EXIT
- SUQ1 AOD TI ADVANCE *TPOR* INDEX
- ERRNZ TPORE-1 CODE IS VALUE DEPENDENT
- LDM TPOR-1,TI
- NJN SUQ2 IF NOT END OF *TPOR* TABLE
- STD TI RESET INDEX
- UJN SUQ1 CONTINUE
- SUQ2 SHN 21 SET *PUT* ORDINAL
- STD PO
- SHN -21 SET CHANNEL INDEX BYTE
- STD S1
- CPTA UNCT READ *PUT* ENTRY
- CRD CM
- LDD CM
- SHN 21-13
- MJN SUQ7 IF UNIT INTERLOCK SET
- LDD CM+3
- NJN SUQ3 IF REQUEST IN QUEUE
- SUQ2.1 UJN SUQ7 PROCESS NEXT *PUT*
- SUQ3 STD CB SAVE BUFFER ORDINAL
- CCBA IOLK,A READ *CBT* ENTRY
- CRD CN
- ADK HSLK-IOLK
- CRD T1
- SFA EST,CM+1 READ EST ENTRY
- ADK EQDE
- CRD CM
- LDM CM+1,S1
- SHN -11
- LPN 3
- STD T2 SAVE CHANNEL STATE INDICATOR
- LMN 3
- NJN SUQ4 IF CHANNEL NOT DOWN
- SUQ3.1 UJN SUQ2.1 PROCESS NEXT *PUT*
- SUQ4 LDD T1
- SHN 0-12
- ZJN SUQ4.1 IF NOT CHANNEL SPECIFIC REQUEST
- CCBA PAD4 GET CHANNEL FROM CBT ENTRY
- CRD CM
- LDD CM CHECK IF OTHER CHANNEL SPECIFIED
- SHN -6
- LMD IR+4
- STD T2
- SUQ4.1 LDD T2
- NJN SUQ3.1 IF IDLE STATE OR OTHER CHANNEL SPECIFIED
- LDD CN SET/CLEAR READ/WRITE FLAG
- SHN 0-11
- LPN 1
- STD RW
- SHN 13-0
- ADN 1
- STD TB
- LDD T1
- SHN 0-13
- STD ER SET/CLEAR RECOVERY IN PROGRESS FLAG
- ZJN SUQ6 IF NOT ERROR RECOVERY
- LDD T1 SAVE ERROR CODE
- LPN 77
- STD T1
- LMC 7777 COMPLEMENT ERROR CODE
- STD EC
- LDM TREC,T1 SET RETRY COUNT = LIMIT/2+1
- SHN -1
- ADN 1
- STD RC INITIALIZE RETRY COUNT
- LDN 0 INITIALIZE PASS COUNTER
- STM ERRA
- RJM ERR CALL ERROR PROCESSOR
- * LJM MST ERROR PROCESSOR RETURNS TO *MST*
- SUQ6 LDD TI SET SCAN LIMIT
- LMC LMNI
- STM SUQA
- LJM SUQX RETURN
- TEP SPACE 4,30
- ** TEP - TERMINATE ERROR PROCESSING.
- *
- * THIS ROUTINE PERFORMS OPERATIONS NECESSARY TO RESTORE THE
- * DRIVER TO ITS NORMAL STATE (NON-ERROR PROCESSING).
- *
- * ENTRY (EC) = ERROR CODE.
- * (PO) = *PUT* ORDINAL.
- * (RS) = RECOVERY STATUS.
- * (RW) = READ/WRITE FLAG.
- *
- * EXIT (EC) = 0.
- * (ER) = 0.
- * (RC) = 0.
- * (RS) = RECOVERY STATUS.
- * 0 RECOVERED BY CONTROLLER.
- * 1 RECOVERED BY DRIVER.
- * 2 UNRESOLVED.
- * 3 UNRECOVERED.
- *
- * USES EC, ER, IL, RC, RS, S2, T1, T2, CM - CM+4.
- *
- * CALLS IBM, RHR, RPI.
- *
- * MACROS MONITOR.
- TEP4 LDN 0
- STD EC CLEAR ERROR CODE
- STD ER CLEAR RECOVERY IN PROGRESS FLAG
- STD RC CLEAR RETRY COUNT
- STM TEPA CLEAR VERIFICATION/INTERLOCK REJECT FLAG
- TEP SUBR ENTRY/EXIT
- LDD RW
- SHN 1
- STD T1
- LDM TEPB,T1 RESTORE INSTRUCTIONS
- STD T2
- LDM TEPB+1,T1
- STI T2
- LDM TEPC,T1
- STD T2
- LDM TEPC+1,T1
- STI T2
- LDC **
- TEPA EQU *-1
- NJP TEP4 IF OTHER DRIVER IS HANDLING ERROR
- LDD EC SAVE ERROR CODE IN CASE FUNCTION TIMEOUT
- STD S2
- RJM RHR RELEASE HARDWARE RESERVES
- LDD S2 RESTORE ERROR CODE
- STD EC
- LDD RS
- LMN 2
- NJN TEP2 IF NOT UNRESOLVED ERROR
- * ISSUING SUBFUNCTION *IOES* OF THE *BIOM* MONITOR FUNCTION
- * CAUSES ONE OF THE FOLLOWING TO OCCUR -
- * A. IF THE RECOVERY IN PROGRESS FLAG IS SET IN THE CBT
- * ENTRY, THE REQUEST WILL BE TERMINATED WITH STATUS
- * RETURNED TO THE PROGRAM THAT ISSUED THE REQUEST.
- * IN THIS CASE IT IS THE RESPONSIBILITY OF THIS
- * DRIVER TO ISSUE MESSAGES TO THE BML, ERROR LOG, JOB
- * DAYFILE AND SYSTEM DAYFILE INDICATING AN
- * UNRECOVERED ERROR OCCURRED.
- * B. IF THE RECOVERY IN PROGRESS FLAG IS CLEAR AND AN
- * ALTERNATE CHANNEL EXISTS (WITH AN ACTIVE DRIVER),
- * THE REQUEST WILL BE MODIFIED TO FORCE CONTINUATION
- * OF ERROR RECOVERY BY THE OTHER DRIVER.
- * C. IF THE RECOVERY IN PROGRESS FLAG IS CLEAR BUT
- * EITHER THERE IS NO ALTERNATE ACCESS PATH OR IT HAS
- * BEEN DOWNED, THE REQUEST WILL BE MODIFIED TO FORCE
- * CONTINUATION OF ERROR PROCESSING ON THIS CHANNEL.
- LDN SETS SET SUBFUNCTION
- STD CM+1
- LDD PO SET *PUT* ORDINAL
- STD CM+2
- LDN 1
- STD CM+3
- LDD EC SET ERROR CODE
- STD CM+4
- MONITOR BIOM
- STD IL CLEAR *PUT* INTERLOCK FLAG
- LDD CM+1
- ZJN TEP2 IF PROCESSING WILL RESUME ON OTHER CHANNEL
- AOD RS SET UNRECOVERED STATUS
- * ISSUE THE BML MESSAGE AND INCREMENT ERROR COUNTERS IF
- * APPROPRIATE FOR THIS ERROR TYPE AND RESOLUTION OF THE ERROR
- * HAS BEEN DETERMINED.
- TEP2 LDD RS
- LMN 2
- ZJN TEP3 IF UNRESOLVED ERROR
- RJM RPI RELEASE *PUT* INTERLOCK
- TEP3 RJM IBM ISSUE BML MESSAGE
- * CLEAR B-DISPLAY MESSAGE.
- LDK ZERL
- CRD CM
- LDD CP
- ADK MS2W
- CWD CM
- UJP TEP4 CONTINUE CLEARING AND RETURN
- TEPB BSS 0
- CON RIOC,ZJNI+RIO12-RIOC
- CON WIOC,ZJNI+WIO8-WIOC
- ERRNG RIO12-RIOC CODE DEPENDS ON VALUE
- ERRNG WIO8-WIOC CODE DEPENDS ON VALUE
- TEPC BSS 0
- CON RIOA,LDNI+FCRD
- CON WIOA,LDNI+FCWR
- WFS SPACE 4,25
- ** WFS - WAIT FOR SLAVE TO PASS THE CHANNEL.
- *
- * THIS ROUTINE WAITS FOR THE SLAVE TO TAKE THE CHANNEL AND
- * CHECKS FOR AN ERROR STATUS FROM THE SLAVE.
- *
- * ENTRY (RW) = READ/WRITE FLAG.
- * (SB) = FWA OF SLAVE REQUEST BUFFER.
- * (SR+2) = 2 IF END OF CURRENT TRANSFER.
- *
- * EXIT (A) .LT. 0 IF SLAVE ENCOUNTERED ERROR.
- * .EQ. 0 IF NO CONSECUTIVE REQUEST FOUND.
- * .GT. 0 IF CONSECUTIVE REQUEST FOUND.
- *
- * USES CB, PB, CM - CM+4, CN - CN+4.
- *
- * CALLS CCS, IFI, IIC, RFU.
- WFS5 LDD NB
- WFS SUBR ENTRY/EXIT
- RJM IIC ISSUE I/O COMPLETION REQUEST IF NECESSARY
- RJM CCS CHECK FOR CONSECUTIVE REQUEST
- LDD SR+2
- LMN 2
- NJN WFS1 IF NOT END OF CURRENT TRANSFER
- LDD CB ADVANCE BUFFER POINTERS
- STD PB
- LDD NB
- STD CB
- RJM IFI INITIALIZE FOR NEXT REQUEST
- LDD NB
- ZJN WFS1 IF NO CONSECUTIVE REQUEST
- LDD RW
- ZJN WFS1 IF READ OPERATION
- RJM RFU READ NEXT BLOCK FROM UEM
- WFS1 LDD SB
- ADK SBRQ
- CRD CM
- LDD CM
- ZJN WFS3 IF SLAVE HAS TAKEN CHANNEL
- LDK SDLY
- WFS2 SBN 1
- NJN WFS2 IF NOT END OF DELAY
- UJN WFS1 CHECK IF SLAVE HAS CHANNEL
- WFS3 LDD SB
- ADK SBSE
- SCF *,CH HANG WAITING FOR CHANNEL FLAG
- CRD CN CHECK FOR SLAVE ERROR
- LDD CN
- ZJP WFS5 IF NO ERROR
- LDD SR+2
- NJN WFS4 IF NOT AT END OF CURRENT TRANSFER
- LDD PB RESTORE CURRENT BUFFER ORDINAL
- STD CB
- LDN 0 AVOID COMPLETION OF CURRENT REQUEST
- STD PB
- WFS4 LDD SB
- ADK SBSE
- CWD CM REWRITE CLEARED SLAVE ERROR FIELD
- LCN 0
- LMD CN COMPLEMENT ERROR CODE
- UJP WFSX RETURN
- WIO SPACE 4,40
- ** WIO - PERFORM WRITE I/O OPERATIONS.
- *
- *
- * ENTRY (CB) = CURRENT BUFFER ORDINAL.
- * (EP) = 0.
- * (PB) = 0.
- * (SB) = FWA OF SLAVE REQUEST AREA.
- *
- * EXIT (PB) = ORDINAL OF LAST BUFFER PROCESSED.
- *
- * USES CB, EC, EP, NB, PB, SR+2.
- *
- * CALLS AUA, ERR, FNC, GGS, IFI, RFU, RSS, WFS.
- *
- * MACROS CCBA.
- WIO SUBR ENTRY/EXIT
- RJM IFI INITIALIZE FOR I/O
- RJM RFU READ DATA FROM UEM
- WIO1 LDN FCWR ISSUE WRITE FUNCTION
- * LDN FCCO (CONTROLLER ERROR RECOVERY IN PROGRESS)
- WIOA EQU *-1
- RJM FNC
- PJN WIO2 IF NO ERROR
- AOD EP SET PREVIOUS SECTOR ERROR FLAG
- UJN WIO3 CALL ERROR PROCESSOR
- WIO2 LDD SB POST SLAVE REQUEST
- ADK SBRQ
- CWD SR
- LDD BS OUTPUT DATA
- OAM BUFF,CH
- * OAM BUFF+HLEN,CH (SECOND HALF OF SECTOR)
- WIOB EQU *-1
- ZJN WIO4 IF NO DATA TRANSFER ERROR
- LCN IDTE SET *INCOMPLETE DATA TRANSFER* ERROR CODE
- STD EC
- RJM RSS RESET SLAVE TO IDLE LOOP
- WIO3 RJM ERR CALL ERROR PROCESSOR
- WIO4 CCF *,CH PASS CHANNEL TO SLAVE
- AOD SR+2 SET *CHANNEL DISCONNECT* FLAG
- LMN 2
- ZJN WIO7 IF LAST BLOCK TRANSFERRED
- RJM AUA ADVANCE MASTER/SLAVE UEM ADDRESSES
- RJM RFU READ DATA FROM UEM
- RJM WFS WAIT FOR SLAVE COMPLETION
- PJP WIO2 IF SLAVE DID NOT ENCOUNTER ERROR
- WIO4.1 STD EC SET ERROR CODE
- WIO5 UJN WIO3 CALL ERROR PROCESSOR
- WIO7 RJM WFS WAIT FOR SLAVE
- MJN WIO4.1 IF SLAVE ENCOUNTERED ERROR
- ZJN WIO8 IF NO CONSECUTIVE REQUEST
- * UJN WIO8 (ERROR RECOVERY IN PROGRESS)
- WIOC EQU *-1
- LDN 0 CLEAR NEXT BUFFER ORDINAL
- STD NB
- LJM WIO1 PROCESS NEXT REQUEST
- WIO8 RJM GGS GET GENERAL STATUS
- ZJP WIOX IF NO ERROR
- LDD PB BACK UP TO PREVIOUS BUFFER
- STD CB
- LDN 0 AVOID BUFFER COMPLETION
- STD PB
- UJN WIO5 CALL ERROR PROCESSOR
- WTU SPACE 4,25
- ** WTU - WRITE TO UEM.
- *
- * THIS ROUTINE WRITES THE BLOCK OF DATA TO UEM AFTER THE DISK
- * READ. WHEN WRITING THE FIRST DATA BLOCK ROUTINE *SLB* IS
- * CALLED TO STORE LINKAGE BYTES AND SHORT PRU FLAGS IN THE CBT
- * ENTRY.
- *
- * ENTRY (BL) = LENGTH OF DATA BLOCK IN CM WORDS.
- * (SR+2) = 0 IF FIRST BLOCK OF SECTOR.
- * (UA - UA+1) = UEM ADDRESS.
- * (BUFF) = HEADER AND DATA.
- *
- * USES CM - CM+4, T1 - T4.
- *
- * CALLS SLB.
- WTU SUBR ENTRY/EXIT
- LDD SR+2
- NJN WTU2 IF NOT FIRST BLOCK OF SECTOR
- ERRNZ PAD1 CODE DEPENDS ON VALUE
- STD T1
- LDC BUFF+3-4
- STD T2
- * GET SHORT PRU FLAGS, VALID DATA FLAGS AND LINKAGE BYTES FROM
- * SECTOR HEADER AND STORE THEM IN THE CBT ENTRY.
- WTU1 LDN 4 ADVANCE SECTOR BUFFER ADDRESS
- RAD T2
- CCBA PAD1
- ADD T1
- CRD CM
- STD T4
- SHN -14
- STD T3
- LDI T2 STORE SHORT PRU AND VALID DATA FLAGS
- STD CM+3
- AOD T2
- LDI T2 STORE LINKAGE BYTE
- STD CM+4
- LDD T3
- SHN 14
- LMD T4
- CWD CM
- AOD T1 INCREMENT WORD INDEX
- LMN PAD4+1
- NJN WTU1 IF NOT FINISHED
- * WRITE DATA TO UEM.
- WTU2 SRD T2 SAVE R-REGISTER
- LRD UA
- LDC 400000 USE R-REGISTER FOR WRITE ADDRESS
- CWM BUFF+HLEN,BL WRITE DATA TO UEM
- LRD T2 RESTORE R-REGISTER
- UJP WTUX RETURN
- 1XM SPACE 4,10
- * COMMON DECKS.
- *CALL COMPIMB
- *CALL COMPC2D
- 1XM SPACE 4
- USE PRESET DEFINE LITERAL BLOCK BEFORE PRESET
- BUFF EQU * DATA BUFFER
- ERRPL BUFF+DLEN+HLEN-10000 BUFFER OVERFLOWS PP
- PRS TITLE PRESET MASTER PROGRAM.
- PRS SPACE 4,10
- ** PRS - PRESET *1XM*.
- *
- * EXIT (BL) = MASTER BLOCK LENGTH IN CM WORDS.
- * (CC) = 0.
- * (CS) = 1.
- * (EC) = 0.
- * (EP) = 0.
- * (ER) = 0.
- * (FU - FU+1) = UEM BASE ADDRESS.
- * (IL) = 0.
- * (PB) = 0.
- * (RC) = 0.
- * (TI) = 0.
- * (BMLCR) = 6/ CHANNEL, 6/0.
- * (BMLMF) = MAINFRAME ID.
- * (BMLPP) = 6/ PP NUMBER, 6/ CHANNEL.
- * (CCRA) = WORD ADDRESS OF CHANNEL TABLE ENTRY.
- * (CCRB) = BYTE ADDRESS OF CHANNEL TABLE ENTRY + LDDI.
- * (CRQA) = FWA OF PP EXCHANGE PACKAGE.
- * (CRQB) = FWA OF PP EXCHANGE PACKAGE.
- * (CRQC) = CPU EXCHANGE INSTRUCTION (MXN).
- * (CRQD) = FIRST WORD OF PP EXCHANGE PACKAGE.
- * (MSD) = 0.
- * (SCDA) = WORD ADDRESS OF CONTROLWARE TABLE ENTRY.
- * (SCDB) = BIT NUMBER OF DRIVER DROP FLAG.
- * ALL *CCBA* REFERENCES TO *CBT* PLUGGED.
- * ALL *CPTA* REFERENCES TO *PUT* PLUGGED.
- * ALL *EMBE* REFERENCES TO *EMB* PLUGGED.
- *
- * USES BL, CC, CS, EC, EP, ER, IL, PB, RC, TI, CM - CM+4,
- * CN - CN+4, T0 - T7.
- *
- * CALLS DFM, RCH, SSL.
- *
- * MACROS CPTA, MONITOR, SETMS, SFA.
- PRS SUBR ENTRY/EXIT
- SETMS NODRIVER FORCE DRIVER LOAD ON NEXT *SETMS*
- LDK NCPL VALIDATE CALLER
- CRD CM
- AOD CM+1 NUMBER OF CONTROL POINTS
- SHN 7
- LMD CP
- ZJN PRS1 IF SYSTEM CONTROL POINT
- LDC =C* 1XM - UNAUTHORIZED CALL.*
- RJM DFM ISSUE DAYFILE MESSAGE
- MONITOR ABTM ABORT CONTROL POINT
- LJM PPR RETURN
- PRS1 LDD IR+3
- ZJN PRS2 IF MASTER
- EXECUTE 2XM,PPFW-5
- PRS2 STD CC CLEAR COMPLETION REQUEST COUNT
- STD CS CLEAR CHANNEL STATUS
- STD EC CLEAR ERROR CODE
- STD EP CLEAR ERROR ON PREVIOUS SECTOR FLAG
- STD ER CLEAR RECOVERY IN PROGRESS FLAG
- STD IL CLEAR *PUT* INTERLOCK FLAG
- STD RC CLEAR RETRY COUNT
- STD TI INITIALIZE *TPOR* INDEX
- LDK DLEN/5 SET MASTER BLOCK SIZE
- STD BL
- LDD IR+4 CHANNEL NUMBER
- STM BMLPP
- * PLUG CHANNEL INSTRUCTIONS.
- LDC PRSD SET FWA OF CHANNEL TABLE
- STD T1
- PRS3 LDI T1
- ZJN PRS4 IF END OF CHANNEL TABLE
- STD T2
- LDD IR+4 CHANNEL
- RAI T2 STORE CHANNEL IN INSTRUCTION
- AOD T1 ADVANCE CHANNEL TABLE POINTER
- UJN PRS3 CONTINUE
- * REQUEST CHANNEL AND SET CHANNEL FLAG.
- PRS4 RJM RCH REQUEST CHANNEL
- ZJN PRS4 IF CHANNEL NOT ASSIGNED
- * PLUG EXCHANGE PACKAGE LOCATIONS.
- PRS5 LDK PXPP READ PPU STATUS
- CRD CN
- ADN 1
- CRM CRQD,ON READ FIRST WORD OF PP XP
- AOM CRQD+4
- LDK PPCP READ PP COMMUNICATIONS AREA POINTER
- CRD CM
- ADK MMFL-PPCP
- CRD T1
- LDD T1 SAVE MAINFRAME ID
- STM BMLMF
- LDD IA GET ((PP NUMBER - 2) * 10B)
- SBD CM+4
- SBN 20
- SHN -3
- STD T1 PP NUMBER - 2
- SBN 10
- MJN PRS5.1 IF PP 0-11
- ADN 6 ADJUST FOR PP 20-31
- PRS5.1 ADN 12
- SHN 6
- RAM BMLPP SET PP NUMBER
- SHN 6
- STM BMLCR SET RECOVERY CHANNEL
- LDD T1 PP NUMBER - 2
- SHN 4
- ADD T1 (PP NUMBER - 2) * 21B
- RAD CN+4 SET EXCHANGE ADDRESS
- STM CRQA
- STM CRQB
- SHN -14
- RAD CN+3
- RAM CRQA-1
- STM CRQB-1
- LDD CN+4 SET *MA* ADDRESS
- ADN 6
- STM CRQE
- SHN -14
- ADD CN+3
- RAM CRQE-1
- LDD IR+4
- STD T2
- LDK ACPL CHECK CPU STATUS
- CRD CM
- LCN 0
- STD T1 PRESET CHANNEL TABLE WORD INDEX
- LDN 60D PRESET BIT POSITION FOR LOAD REQUEST
- STD T3
- LDD CM
- SHN 21-13
- PJN PRS6 IF CPU 0 ON
- AOM CRQC SET EXCHANGE TO CPU 1
- LDD HN
- RAM CRQD+3 SET (A0) TO 1
- * PLUG CHANNEL TABLE ADDRESSES.
- PRS6 AOD T1 ADVANCE CM TABLE INDEX
- LCN 5
- RAD T2
- PJN PRS6 IF NOT TO PROPER INDEX
- ADN 5
- RAM CCRB PRESET CHANNEL TABLE BYTE INDEX
- LPN 7 BYTE ADDRESS
- STD T2
- PRS7 LCN 12D
- RAD T3 DECREMENT POSITION
- SOD T2
- PJN PRS7 IF NOT TO PROPER POSITION
- LDD T3 BIT POSITION
- ADN 13 ADD OFFSET WITHIN BYTE
- SHN 6
- SBK 200
- STM SCDB+1
- LDK CHTP CHANNEL TABLE(S) POINTER
- CRD CM
- LDD CM+2 FWA OF CHANNEL TABLE
- SHN 14
- LMD CM+3
- ADD T1 ADD WORD INDEX
- STM CCRA CM ADDRESS OF CHANNEL TABLE ENTRY
- SHN -14
- RAM CCRA-1
- LDD CM+2 COMPUTE FWA OF CONTROLWARE TABLE
- SHN 14
- LMD CM+3
- ADN CTALL*2
- ADD T1 ADD WORD INDEX
- STM SCDA
- SHN -14
- RAM SCDA-1
- * SET UEM BASE ADDRESS.
- LDK UEML
- CRD CM
- LDD CM
- SHN 21-2
- STD FU
- SHN 2-21
- SHN 11
- STD FU+1
- * PLUG *EMB* ADDRESSES.
- LDK EMBP FETCH *EMB* POINTER
- CRD CM
- .CM1 EQU CM+1
- LDC .CM1*10000+PRSC
- RJM STA SET *EMB* ADDRESSES
- * READ BUFFERED I/O TABLE POINTERS.
- LDK BIOL
- CRD CM
- LDD CM+1
- SHN 14
- LMD CM+2
- ADK CCTP GET *CCT* DESCRIPTOR
- CRD CA
- ADK PUTP-CCTP GET *PUT* DESCRIPTOR
- CRD T3
- ADN CBTP-PUTP GET *CBT* DESCRIPTOR
- CRD CN
- AOD T3
- * PLUG *CCT* ADDRESS.
- LDD IR+2 SET ADDRESS OF *CCT*
- SHN CCTLS-6
- ADD CA+4
- RAM OVIA+1
- STM RPIA+1
- SHN -14
- ADD CA+3
- RAM OVIA
- STM RPIA
- * PLUG *CBT* ADDRESSES.
- .CN3 EQU CN+3
- LDC .CN3*10000+PRSA
- RJM STA SET *CBT* ADDRESSES
- * PLUG *PUT* ADDRESSES.
- LDC T6*10000+PRSB
- RJM STA SET *PUT* ADDRESSES
- * BUILD *TPOR* TABLE.
- PRS11 STD T1 INITIALIZE *TPOR* INDEX
- PRS12 SOD T3 DECREMENT *PUT* ORDINAL
- ZJP PRS14 IF SCAN COMPLETE
- CPTA UNCT,A READ *PUT* ENTRY
- CRD CM
- SFA EST,CM+1 READ EST ENTRY
- ADK EQDE
- CRD CM
- LDN 0 INITIALIZE EST CHANNEL BYTE INDEX
- STD T2
- LDD CM+1
- LPN 77
- LMD IR+4
- ZJN PRS13 IF DEVICE SUPPORTED BY THIS DRIVER
- LDD CM+2
- ZJN PRS12 IF SINGLE ACCESS DEVICE
- LPN 77
- LMD IR+4
- NJN PRS12 IF DEVICE NOT SUPPORTED BY THIS DRIVER
- AOD T2 INCREMENT CHANNEL BYTE INDEX
- PRS13 AOD T1 INCREMENT *TPOR* INDEX
- ERRNZ TPORE-1 CODE DEPENDS ON VALUE
- LMK MAXU+1
- ZJN PRS13.1 IF TOO MANY UNITS ON CHANNEL
- LDD T3 POSITION *PUT* ORDINAL
- SHN 1
- LMD T2 SET CHANNEL BYTE INDEX
- STM TPOR-1,T1
- UJP PRS12 CONTINUE SCAN
- PRS13.1 LDC =C* 1XM - TOO MANY UNITS ON CHANNEL.*
- RJM DFM ISSUE SYSTEM DAYFILE MESSAGE
- MONITOR HNGM
- UJN * HANG
- PRS14 RJM SSL START SLAVE
- LDN 0 CLEAR PREVIOUS BUFFER ORDINAL
- STD PB
- LJM PRSX RETURN
- 1XM SPACE 4
- PRSA BSS 0 TABLE OF *CBT* ADDRESSES
- TCBT HERE
- CON 0 TERMINATE TABLE
- PRSB BSS 0 TABLE OF *PUT* ADDRESSES
- TPUT HERE
- CON 0 TERMINATE TABLE
- PRSC BSS 0 TABLE OF *EMB* ADDRESSES
- QUAL COMPIMB
- TEMB HERE
- QUAL *
- CON 0 TERMINATE TABLE
- PRSD BSS 0 TABLE OF CHANNEL INSTRUCTION ADDRESSES
- CHTB
- SSL SPACE 4,20
- ** SSL - START SLAVE.
- *
- * SET UP SLAVE INPUT REGISTER.
- * CALL MONITOR TO START SLAVE.
- * FIND SLAVE PP COMMUNICATION AREA.
- * WAIT FOR SLAVE TO INITIALIZE.
- *
- * ENTRY (IR - IR+4) = INPUT REGISTER.
- *
- * EXIT (SB) = SLAVE REQUEST BUFFER ADDRESS.
- *
- * USES IR+2, IR+3, T1 - T7, CM - CM+4.
- * CALLS C2D.
- *
- * MACROS DELAY, MONITOR.
- SSL SUBR ENTRY/EXIT
- LDD IR+4 STORE CHANNEL NUMBER IN MESSAGE
- RJM C2D
- STM SSLA+7
- LDD CP ISSUE WAIT MESSAGE
- ADK MS2W
- CWM SSLA,TR
- LDN 0
- STD IR+2
- LDN 1
- STD IR+3 SET SLAVE FLAG
- LDD MA
- CWD IR PUT SLAVE INPUT REGISTER IN MESSAGE BUFFER
- SSL1 LDN 0
- STD CM+1 CLEAR MONITOR REPLY BYTE
- MONITOR RPPM START SLAVE
- LDD CM+1
- NJN SSL2 IF SLAVE STARTED
- DELAY
- UJN SSL1 RETRY SLAVE STARTUP
- SSL2 LDK PPUL
- CRD CM GET NUMBER OF PPS
- LDD CM+2
- STD T1 SAVE NUMBER OF PPS
- LDK PPCP
- CRD T2 GET FWA OF PP COMMUNICATION AREA
- SSL3 DELAY GIVE PP A CHANCE TO INITIALIZE
- LDN 2
- STD T7 START SEARCH WITH PP 2
- SSL4 LDD T7
- SHN 3
- ADD T2+4
- STD T2
- CRD CM READ PP INPUT REGISTER
- LDD CM
- LMD IR
- NJN SSL5 IF NOT *1XM*
- LDD CM+1
- LMD IR+1
- NJN SSL5 IF NOT *1XM*
- LDD CM+4
- LMD IR+4
- NJN SSL5 IF NOT PROCESSING SAME CHANNEL
- LDD CM+3
- NJN SSL6 IF SLAVE FOUND
- SSL5 AOD T7 CHECK NEXT PP
- SBD T1
- ZJN SSL3 IF ALL PPS CHECKED
- UJN SSL4 CHECK NEXT PP
- SSL6 LDD CM+2
- NJN SSL7 IF SLAVE IS INITIALIZED
- DELAY
- LDD T2
- CRD CM READ PP INPUT REGISTER
- UJN SSL6 WAIT FOR SLAVE TO START
- SSL7 LDD T2
- ADN 2
- STD SB SAVE SLAVE REQUEST BUFFER ADDRESS
- LDD CP CLEAR WAIT MESSAGE
- ADK MS2W
- CWD IR+2
- LJM SSLX RETURN
- SSLA DATA C*WAITING FOR CH00 SLAVE PP.*
- STA SPACE 4,10
- ** STA - SET TABLE ADDRESSES.
- *
- * ENTRY (A) = 6/ TP, 12/ TA
- * TP = TABLE POINTER.
- * TA = INSTRUCTION TABLE ADDRESS.
- *
- * EXIT (A) = 0.
- *
- * USES T0, T1, T2.
- STA1 STD T2 SET INSTRUCTION ADDRESS
- LDM 1,T1
- RAM 1,T2 SET LOWER 12 BITS OF ADDRESS
- SHN -14
- ADI T1 SET UPPER 6 BITS OF ADDRESS
- LPN 37
- RAI T2
- AOD T0 ADVANCE INSTRUCTION LIST
- STA2 LDI T0
- NJN STA1 IF NOT END OF TABLE
- STA SUBR ENTRY/EXIT
- STD T0
- SHN -14 SET ADDRESS POINTER
- STD T1
- UJN STA2 ENTER LOOP
- 1XM SPACE 4
- OVERFLOW
- USE *
- TTL 1XM/2XM - 7195/895 (CCC) DRIVER.
- 2XM TITLE SLAVE DRIVER.
- QUAL 2XM
- IDENT 2XM,SXMX
- *COMMENT 1XM - SLAVE FOR THE 7165/895 DRIVER.
- COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
- 2XM EJECT
- ORG PPFW
- SXM SUBR ENTRY
- RJM PRS PRESET
- 2XM SPACE 4
- ** SLV - SLAVE MAIN PROGRAM.
- SLV LDN 0 CLEAR ERROR CODE
- STD EC
- RJM WFR WAIT FOR REQUEST
- LMK SLRD
- ZJN SLV1 IF READ REQUEST
- LMK SLWR&SLRD
- ZJN SLV2 IF WRITE REQUEST
- LDK DPPM DROP PP
- RJM FTN
- LJM PPR RETURN TO IDLE LOOP
- SLV1 RJM RPR PROCESS READ REQUEST
- UJN SLV PROCESS NEXT FUNCTION
- SLV2 RJM WPR PROCESS WRITE REQUEST
- UJN SLV PROCESS NEXT FUNCTION
- PER SPACE 4,20
- ** PER - POST ERROR MESSAGE FOR MASTER.
- *
- * THIS ROUTINE STORES THE ERROR CODE IN THE SLAVE ERROR
- * BUFFER FOR THE MASTER TO SEE.
- *
- * ENTRY (A) = COMPLEMENTED ERROR CODE.
- *
- * EXIT (EC) = ERROR CODE.
- *
- * USES EC, CM - CM+4.
- PER SUBR ENTRY/EXIT
- LMC 777777
- STD EC STORE ERROR CODE
- LDK ZERL
- CRD CM
- LDD EC
- STD CM PLUG ERROR CODE
- LDD MA
- ADK SBSE
- CWD CM POST ERROR IN SLAVE ERROR BUFFER
- UJN PERX RETURN
- RPR SPACE 4,30
- ** RPR - READ REQUEST PROCESSOR.
- *
- * ENTRY (BS) = BLOCK SIZE.
- * (SR - SR+4) = READ REQUEST FROM MASTER.
- *
- * USES CM, T2 - T3.
- *
- * CALLS PER, WFC.
- RPR SUBR ENTRY/EXIT
- RJM WFC WAIT FOR CHANNEL
- NJN RPRX IF MASTER ENCOUNTERED AN ERROR
- LDC BUFLGTH INPUT DATA BLOCK
- IAM BUFFER,CH
- ZJN RPR1 IF ALL DATA TRANSFERRED
- LCN IDTE SET *DATA TRANSFER* ERROR CODE
- UJN RPR3 CONTINUE
- RPR1 LDD SR+2
- ZJN RPR4 IF NOT TIME TO DISCONNECT
- SFM RPR2,CH IF CHANNEL PARITY ERROR
- DCN CH+40
- UJN RPR4 CONTINUE
- RPR2 LCN CHPE SET *CHANNEL PARITY* ERROR CODE
- RPR3 RJM PER POST ERROR TO MASTER
- RPR4 LDD MA SET READ INCOMPLETE
- ADK SBRC
- CWD CM
- CCF *,CH PASS CHANNEL TO MASTER
- LDD EC
- NJN RPR5 IF ERROR ENCOUNTERED
- SRD T2 SAVE R-REGISTER
- LRD SR+3 LOAD R-REGISTER WITH UEM ADDRESS
- LDC 400000 USE R-REGISTER FOR WRITE ADDRESS
- CWM BUFFER,BS WRITE BLOCK TO UEM
- LRD T2
- RPR5 AOD CM SET READ COMPLETE
- LDD MA
- ADK SBRC
- CWD CM POST COMPLETE MESSAGE TO MASTER
- UJP RPRX RETURN
- WFC SPACE 4,25
- ** WFC - WAIT FOR CHANNEL FLAG.
- *
- * THIS ROUTINE OBTAINS CONTROL OF THE CHANNEL AND NOTIFIES
- * THE MASTER THAT IT HAS THE CHANNEL.
- *
- * ENTRY (CM) = 0.
- *
- * EXIT (A) = 0 IF READY FOR I/O.
- * .NE. 0 IF MASTER REPORTED ERROR.
- * (CM) = 0.
- *
- * USES CM - CM+4.
- WFC SUBR ENTRY/EXIT
- LDD MA
- ADK SBRQ
- SCF *,CH GET CHANNEL FLAG
- CWD CM INDICATE CHANNEL TAKEN
- ADK SBME-SBRQ
- CRD CM READ MASTER ERROR FLAG WORD
- LDD CM
- ZJN WFCX IF NO ERROR ENCOUNTERED
- LDN 0
- STD CM CLEAR MASTER ERROR FLAG
- LDD MA
- ADK SBME
- CWD CM UPDATE MASTER ERROR FLAG WORD
- CCF *,CH RETURN CHANNEL TO MASTER
- UJN WFCX RETURN
- WFR SPACE 4,20
- ** WFR - WAIT FOR REQUEST FROM MASTER.
- *
- *
- * EXIT (A) = SLAVE REQUEST TO PROCESS.
- * (CM) = 0.
- * (SR - SR+4) = REQUEST BUFFER.
- *
- * USES CM - CM+4, SR - SR+4.
- WFR SUBR ENTRY/EXIT
- LDK ZERL
- CRD CM
- WFR1 LDD MA
- ADK SBRQ
- CRD SR READ SLAVE REQUEST BUFFER
- LDD SR
- NJN WFRX IF REQUEST TO PROCESS
- LDK SDLY
- WFR2 SBN 1
- NJN WFR2 IF DELAY NOT FINISHED
- UJN WFR1 LOOK FOR REQUEST
- WPR SPACE 4,30
- ** WPR - WRITE REQUEST PROCESSOR.
- *
- * ENTRY (BS) = BLOCK SIZE.
- * (SR - SR+4) = WRITE REQUEST FROM MASTER.
- *
- * USES T2 - T3.
- *
- * CALLS PER, WFC.
- WPR SUBR ENTRY/EXIT
- SRD T2 SAVE R-REGISTER
- LRD SR+3 LOAD UEM ADDRESS INTO R-REGISTER
- LDC 400000 USE R-REGISTER FOR READ ADDRESS
- CRM BUFFER,BS READ BLOCK FROM UEM
- LRD T2 RESTORE R-REGISTER
- RJM WFC WAIT FOR CHANNEL
- NJN WPRX IF MASTER ERROR ENCOUNTERED
- LDC BUFLGTH OUTPUT DATA BLOCK
- OAM BUFFER,CH
- ZJN WPR1 IF DATA TRANSFER COMPLETE
- LCN IDTE SET *DATA TRANSFER* ERROR CODE
- UJN WPR3 POST ERROR TO MASTER
- WPR1 LDD SR+2
- ZJN WPR5 IF NOT TIME TO DISCONNECT CHANNEL
- WPR2 EJM WPR4,CH IF LAST BYTE ACCEPTED
- ADN 1
- NJN WPR2 IF NOT TIMEOUT
- LCN CHFE SET *CHANNEL FAILURE* ERROR CODE
- WPR3 RJM PER POST ERROR
- WPR4 DCN CH+40 DISCONNECT CHANNEL
- WPR5 CCF *,CH PASS CHANNEL TO MASTER
- UJP WPRX RETURN
- 2XM SPACE 4
- USE PRESET DEFINE LITERALS BLOCK BEFORE PRESET
- BUFLGTH EQU SPRU*100*5 BUFFER LENGTH
- BUFFER EQU 10000-BUFLGTH
- ERRNG BUFFER-* CODE OVERFLOWS INTO BUFFER AREA
- PRS TITLE PRESET SLAVE PROGRAM.
- ** PRS - PRESET SLAVE FOR PROCESSING.
- *
- * ENTRY (IR - IR+4) = PP INPUT REGISTER.
- *
- * EXIT (BS) = BUFFER LENGTH IN CM WORDS.
- * (IR+2) = 1.
- *
- * USES BS, IR+2, T1, T2, CM - CM+4.
- PRS SUBR ENTRY/EXIT
- * PLUG CHANNEL INSTRUCTIONS.
- LDC PRSA SET FWA OF CHANNEL TABLE
- STD T1
- PRS1 LDI T1
- ZJN PRS2 IF END OF CHANNEL TABLE
- STD T2
- LDD IR+4 CHANNEL
- RAI T2 STORE CHANNEL IN INSTRUCTION
- AOD T1 ADVANCE CHANNEL TABLE POINTER
- UJN PRS1 CONTINUE
- PRS2 LDK ZERL
- CRD CM
- LDD MA
- ADK SBRQ
- CWD CM CLEAR SLAVE REQUEST BUFFER
- ADK SBSE-SBRQ
- CWD CM CLEAR SLAVE ERROR BUFFER
- ADK SBME-SBSE
- CWD CM CLEAR MASTER ERROR BUFFER
- AOD CM SET READ COMPLETE FLAG
- LDD MA
- ADK SBRC
- CWD CM
- AOD IR+2 SET SLAVE STARTED FLAG
- LDD IA TELL MASTER SLAVE IS UP
- CWD IR
- LDK BUFLGTH/5 SET BLOCK LENGTH
- STD BS
- UJP PRSX RETURN
- TCHA SPACE 4,10
- PRSA BSS 0 TABLE OF CHANNEL INSTRUCTION ADDRESSES
- CHTB
- 2XM SPACE 4
- OVERFLOW
- USE *
- TTL 1XM/2XN - 7195/895 (CCC) DRIVER.
- 2XN TITLE RELOAD CONTROLWARE.
- QUAL 2XN
- IDENT 2XN,RLCX
- *COMMENT 1XM - RELOAD CONTROLWARE FOR THE 7165/895 DRIVER.
- COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
- 2XN SPACE 4,10
- ORG BUFF+505B
- RLC SPACE 4,10
- ** RLC - RELOAD CONTROLWARE.
- *
- * EXIT (A) .EQ. 0 IF RELOAD SUCCESSFUL.
- * (A) .NE. 0 IF RELOAD ATTEMPT FAILED.
- RLC SUBR ENTRY/EXIT
- RJM PRS PRESET
- * CHECK FOR SYSEDIT IN PROGRESS AND DELAY IF NECESSARY.
- RLC1 LDK PLDP CHECK PERIPHERAL DIRECTORY POINTER
- CRD CM
- LDD CM
- ADD CM+1
- NJN RLC2 IF SYSEDIT NOT IN PROGRESS
- DELAY
- UJN RLC1 RECHECK SYSEDIT IN PROGRESS
- * FIND CONTROLWARE.
- RLC2 LDN ZERL
- CRD CM
- LDD MA PUT CONTROLWARE ID IN MESSAGE BUFFER
- CWM RLCA,ON
- MONITOR SCDM SEARCH CENTRAL DIRECTORY
- LDD CM+3
- SHN 14
- LMD CM+4
- CRD CM READ *PST* ENTRY
- LDD CM+1
- SHN 21-12
- PJN RLC3 IF NOT CM RESIDENT
- LDD CM+3 GET ADDRESS OF *RCL* ENTRY
- SHN 14
- LMD CM+4
- ADN 1
- CRD CN READ 5200 RECORD HEADER
- ADN 1 SET FWA OF 5200 RECORD DATA
- STD CM+4
- SHN -14
- STD CM+3
- LCN 1 ADJUST WORD COUNT FOR HEADER
- RAD CN+4
- * LOAD CONTROLWARE.
- LDK FCAL AUTOLOAD FUNCTION
- RJM FNC ISSUE FUNCTION AND ACTIVATE CHANNEL
- ZJN RLC4 IF NO ERROR ON FUNCTION
- RLC3 DCN CH+40
- UJP RLCX RETURN WITH ERROR INDICATION
- RLC4 LDD CN+4
- RLC5 SBD HN
- MJN RLC6 IF LESS THAN 100B WORDS LEFT
- LDN 0
- RLC6 ADD HN
- STD T1
- LDD CM+3
- SHN 14
- LMD CM+4
- CRM BUFF,T1 READ BLOCK OF CONTROLWARE FROM CM
- STD CM+4 UPDATE BLOCK ADDRESS
- SHN -14
- STD CM+3
- LDD T1 SET BYTES TO TRANSFER
- SHN 2
- ADD T1
- OAM BUFF,CH LOAD BLOCK OF CONTROLWARE TO CCC
- FJM *,CH IF TRANSFER NOT COMPLETE
- NJN RLC3 IF INCOMPLETE TRANSFER
- LDD CN+4
- SBD T1
- STD CN+4
- NJN RLC5 IF MORE WORDS TO TRANSFER
- DCN CH+40
- DELAY
- RJM GGS GET GENERAL STATUS
- UJP RLCX RETURN
- RLCA VFD 42/0LMA464,18/0 CONTROLWARE NAME
- PRS SPACE 4,10
- ** PRS - PRESET RELOAD CONTROLWARE OVERLAY.
- *
- * EXIT CHANNEL INSTRUCTIONS SET UP.
- *
- * USES T1, T2.
- PRS SUBR ENTRY/EXIT
- LDC PRSA SET FWA OF CHANNEL TABLE
- STD T1
- PRS1 LDI T1
- ZJN PRSX IF END OF CHANNEL TABLE
- STD T2
- LDD IR+4 CHANNEL
- RAI T2 STORE CHANNEL IN INSTRUCTION
- AOD T1 ADVANCE CHANNEL TABLE POINTER
- UJN PRS1 CONTINUE
- TCHA SPACE 4,10
- PRSA BSS 0 TABLE OF CHANNEL INSTRUCTION ADDRESSES
- CHTB
- 2XN SPACE 4,10
- OVERFLOW RLCX,EPFW
- END
cdc/nos2.source/opl871/1xm.txt ยท Last modified: 2023/08/05 17:24 by Site Administrator