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