IDENT 1HP,FHP
1HP TITLE 1HP - 885-42 DRIVER.
PERIPH
BASE MIXED
SST
*COMMENT 1HP - 885-42 DRIVER.
COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
1HP SPACE 4,10
*** 1HP - 885-42 DRIVER.
*
* P. T. BARNETT. 83/09/04.
* R. M. DANISCH. 85/12/23.
1HP SPACE 4,10
*** 1HP PROVIDES THE CAPABILITY TO ACCESS THE 885-42 DRIVE
* THROUGH THE 7155-401 (FA211-C) CONTROLLER. 1HP IS A
* DEDICATED PROGRAM THAT IS INITIATED AT DEADSTART AND REMAINS
* ACTIVE AS LONG AS ITS CHANNEL IS UP AND FUNCTIONAL. 1HP USES
* THE *BIOM* MONITOR FUNCTION TO COMMUNICATE WITH *CPUMTR*.
1HP SPACE 4,10
*** CALL FORMAT -
*
*T,IR 18/*1HP*, 1/0, 5/CP, 6/CCTO, 18/0, 12/CH
*
* CP CONTROL POINT NUMBER (MUST BE SYSTEM CP).
*
* CCTO CCT ORDINAL.
* CH CHANNEL NUMBER.
1HP SPACE 4,35
*** ORGANIZATION OF 885-42.
*
* UP TO THREE 885-42 UNITS CAN BE COMBINED TO FORM
* A LOGICAL DEVICE.
*
* EQUIPMENT TYPE = *DB*.
*
* SECTORS/TRACK = 640 LOGICAL / 160 PHYSICAL.
* (4 LOGICAL SECTORS FORM 1 PHYSICAL SECTOR)
*
* CM WORDS/PHYSICAL SECTOR = 400B.
*
* LOGICAL SECTORS/PHYSICAL SECTOR = 4.
*
* LOGICAL SECTORS/LOGICAL TRACK = 1200B (640D).
*
* LOGICAL SECTORS/BUFFER = 40B.
*
* TRACKS/UNIT = 3222B (1682D).
*
* WORDS/UNIT = 68,894,720.
*
* UNITS/DEVICE = 1-3.
*
* WORDS/DEVICE = 68,894,720 - 206,684,160.
*
* MAXIMUM DATA RATE = 491.52 K WORDS/SECOND.
1HP SPACE 4,20
** MESSAGES.
*
* * EQXXX CC ERROR RETRY UNDERWAY.*
* ISSUED TO THE SYSTEM CONTROL POINT FOR PRESENTATION ON THE
* B-DISPLAY TO ALERT THE OPERATOR THAT ERROR RECOVERY IS BEING
* PERFORMED ON THE DEVICE WHOSE EST ORDINAL IS XXX. THE TWO
* CHARACTER MNEMONIC CC DESCRIBES THE ERROR TYPE.
*
* * 1HP - UNAUTHORIZED CALL.*
* ISSUED TO THE SYSTEM DAYFILE IF 1HP WAS NOT CALLED FROM
* THE SYSTEM.
1HP SPACE 4,65
** IMPLEMENTATION NOTES.
*
* THE 7155-401 CONTROLLER IS CONNECTED TO ESM THROUGH A LOW
* SPEED PORT, AND THE DATA TRANSFER IS DONE THROUGH THAT
* CONNECTION. THEREFORE, UPON ISSUING A READ OR WRITE
* FUNCTION, A 2-BYTE ESM ADDRESS IS SENT TO THE CONTROLLER
* THROUGH THE CHANNEL, AND THEN THE CHANNEL IS DISCONNECTED.
* *1HP* IS THEN FREE TO DO AS IT PLEASES WHILE THE CONTROLLER
* READS/WRITES THE DATA FROM/TO ESM. SOMETIME BEFORE ISSUING
* THE NEXT READ/WRITE FUNCTION *1HP* WILL ISSUE A GENERAL
* STATUS FUNCTION. THE CONTROLLER WILL PROVIDE STATUS ONLY
* AFTER COMPLETION OF THE DATA TRANSFER.
*
* IN ORDER TO MAXIMIZE THE TRANSFER RATE, *1HP* WILL SCAN THE
* UNIT QUEUE WHILE WAITING FOR I/O COMPLETION TO SEE IF THE
* CURRENT TRANSFER CAN BE CONTINUED. IF THE 10B SECTORS
* IMMEDIATELY FOLLOWING THE CURRENT 10B SECTORS ARE TO
* BE USED IN THE SAME TRANSFER DIRECTION, *1HP* WILL CONTINUE
* THE OPERATION, WITHOUT LOSING A DISK REVOLUTION.
* DURING THE SUCCEEDING TRANSFER, *1HP* WILL ATTEMPT TO NOTIFY
* *CPUMTR* OF COMPLETION ON THE PREVIOUS BUFFER.
1HP SPACE 4,10
* COMMON DECKS.
*CALL COMPMAC
RICHI$ EQU 1 SELECT DEFERRED INSTRUCTION REDEFINITION
*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.
1HP SPACE 4,10
** DIRECT CELL ASSIGNMENTS.
RS EQU 16 ERROR RECOVERY STATUS
ER EQU 17 ERROR RECOVERY IN PROGRESS
CC EQU 20 COMPLETION REQUEST 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 SCRATCH
WB EQU SR - SR+4 FOR *COMPIMB* COMPATIBILITY
PI EQU 32 *PADN* WORD INDEX
CN EQU 33 - 37 SCRATCH (5 CELLS)
CD EQU 40 - 45 CURRENT DATA (6 CELLS)
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 *PUT* ORDINAL
S2 EQU 67 SCRATCH
1HP 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
FCCO EQU 14 CONTINUE
FCDS EQU 23 DETAILED STATUS
FCES EQU 66 EXTENDED GENERAL STATUS
FCAL EQU 414 AUTOLOAD
1HP SPACE 4,10
** STATUS AND CONTROL REGISTER FUNCTION CODE(S).
FCTC EQU 3000 TEST AND CLEAR *SCR* BIT
1HP SPACE 4,10
** ASSEMBLY CONSTANTS.
BFRL EQU 10 *EMB* FLUSH RETRY COUNT
CH EQU 0 MASS STORAGE CHANNEL
EMAI EQU 400 EXTENDED MEMORY ADDRESS INCREMENT
FCESL EQU 5 LENGTH OF EXTENDED GENERAL STATUS
FCRDL EQU 2 NUMBER OF PARAMETER BYTES FOR READ
FCSKL EQU 4 NUMBER OF PARAMETER BYTES FOR SEEK
FCWRL EQU 6 NUMBER OF PARAMETER BYTES FOR WRITE
MAXU EQU 16D MAXIMUM NUMBER OF UNITS PER CHANNEL
PCRL EQU 10 PP CALL RETRY LIMIT
MFRL EQU 10 MONITOR FUNCTION RETRY LIMIT
PPSLB EQU 10 PHYSICAL SECTORS PER BUFFER
PSPT EQU 40 PHYSICAL SECTORS PER PHYSICAL TRACK
SOSF EQU 100 SEEK OPTION SELECT FLAGS
TPORE EQU 1 LENGTH OF *TPOR* ENTRY
SPACE 4,10
** 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
1HP SPACE 4
TITLE MAIN PROGRAM.
FHP SPACE 4,10
** FHP - 885-42 DRIVER.
ORG PPFW
FHP RJM PRS PRESET
MST SPACE 4,10
** MST - 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 5/ 0, 1/ I, 6/ *PUT* ORDINAL
* I EST CHANNEL BYTE INDEX.
*
* TABLE IS TERMINATED BY A ZERO BYTE.
TPOR BSSZ TPORE*MAXU
CON 0 TERMINATE *TPOR* TABLE
TITLE SUBROUTINES.
CCP SPACE 4,10
** CCP - CHECK FOR CHANNEL PARITY ERROR.
*
* EXIT (A) .EQ. 0 IF NO CHANNEL PARITY ERROR.
* .LT. 0 = COMPLEMENT OF *CHPE* ERROR CODE IF
* CHANNEL PARITY ERROR.
CCP1 LDN 0
CCP SUBR ENTRY/EXIT
LDC FCTC+30 TEST AND CLEAR SCR BIT
CCPA EQU *-1 (BIT NUMBER)
FJM CCP1,CHSC IF MAINTENANCE CHANNEL IN USE
CCPB EQU *-2
OAN CHSC ISSUE REQUEST
CCPC EQU *-1
IAN CHSC INPUT RESULT
CCPD EQU *-1
ZJN CCPX IF NO CHANNEL PARITY ERROR
LCN CHPE
UJN CCPX RETURN
1HP SPACE 4
RICHI REDEFINE CHANNEL INSTRUCTIONS
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.
*
* EXIT (A) .LT. 0 IF CHANNEL IS GLOBALLY DOWN.
*
* USES CM - CM+4.
*
* CALLS DCH, RCH, SCD.
*
* MACROS DELAY.
CCR2 RJM SCD SET DRIVER DROP FLAG
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 CONSECUTIVE SECTORS.
*
* 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.
* (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, T0 - T4.
*
* 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 NO BUFFER
STD NB STORE BUFFER ORDINAL OF NEXT REQUEST
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 2
LMD CN+2
ZJN CCS2 IF CONSECTUTIVE SECTOR ON SAME TRACK
LDD CM+2
ADD HN
SCN 77
LMD CN+2
NJN CCS1 IF NOT FIRST SECTOR ON CONSECUTIVE TRACK
LDD CM+2
LPN 77
SBN PSPT-2
NJN CCS1 IF NOT CONSECUTIVE REQUEST
CCS2 AOD TB INCREMENT TOTAL BUFFER COUNT
LJM CCSX RETURN
CDS SPACE 4,25
** CDS - CRACK DETAILED STATUS.
*
* THIS ROUTINE DETERMINES WHAT ERROR CODE TO SET BY EXAMINING
* DETAILED STATUS. IT WILL ALSO ATTEMPT TO RECOVER BY ISSUING
* A *CONTINUE* FUNCTION IF GENERAL STATUS INDICATES THE ERROR
* IS RECOVERABLE BY THE CONTROLLER.
*
* ENTRY (EC) = ERROR CODE.
* (GS) = GENERAL STATUS.
* (RW) = READ/WRITE FLAG.
* (T7) = SECTOR COUNT.
*
* EXIT (A) .EQ. 0 IF ERROR WAS RECOVERED BY CONTROLLER.
* .LT. 0 IF A FUNCTION TIMEOUT, CHANNEL PARITY
* ERROR, OR DATA TRANSFER ERROR OCCURRED
* WHILE TRYING TO OBTAIN STATUS.
* .GT. 0 OTHERWISE.
* (EC) = ERROR CODE.
*
* USES CB, EC, PB, RS.
*
* CALLS GDS, GGS, PCH.
CDS SUBR ENTRY/EXIT
CDS1 RJM GDS GET DETAILED STATUS
MJN CDSX IF ERROR
LDD GS
SHN 21-13
PJP CDS6 IF NOT ABNORMAL TERMINATION
SHN 13-10
PJN CDS3 IF ERROR NOT RECOVERABLE BY CONTROLLER
* ATTEMPT CONTROLLER RECOVERY.
LDK FCCO ISSUE *CONTINUE* FUNCTION
RJM PCH
MJN CDSX IF TIMEOUT/DATA TRANSFER ERROR
RJM GGS GET GENERAL STATUS
MJN CDSX IF STATUS NOT OBTAINED
NJN CDS1 IF NOT YET RECOVERED
LCN 1 INDICATE CONTROLLER RECOVERY
STD RS
LDN 0
UJN CDSX RETURN
* CHECK FOR *NOT READY* CONDITION.
CDS3 SHN 10-4
PJN CDS4 IF NOT *NOT READY*
LDM DST+7
LPN 1
NJN CDS4 IF NOT *NOT READY*
LDM DST+10
SHN 0-7
LPN 1
ZJP CDS8 IF DRIVE *NOT READY*
* DURING SPINUP, THE STATUS OF THE DRIVE CHANGES SO AS TO
* APPEAR NOT TO BE A *NOT READY* CONDITION. TO AVOID
* MISHANDLING THIS SITUATION THE ERROR PROCESSOR CHECKS FOR
* PRIOR DETECTION OF *NOT READY* AND ASSUMES NO CHANGE IN
* THE SITUATION UNTIL GENERAL STATUS BECOMES ZERO.
CDS4 LDD EC
LMK NRDE
ZJP CDS8 IF *NOT READY* ALREADY DETECTED
* CHECK FOR *BUFFER TO DISK* ERROR.
LDD RW
ZJN CDS5 IF READ OPERATION
LDM DST+14
SHN 21-13
PJN CDS5 IF NOT ERROR ON PREVIOUS SECTOR
LDD T7
LMK PPSLB-1
NJN CDS5 IF NOT AT BUFFER BOUNDARY
LDD PB BACKUP TO PREVIOUS BUFFER
STD CB
LDN 0
STD PB
UJN CDS6 SET ERROR CODE
* CHECK FOR MEDIA ERROR.
CDS5 LDM DST+17
LPN 40
NJN CDS6 IF PROCESSOR INSTRUCTION TIMEOUT
LDM DST
LPN 17
LMN 10
ZJN CDS7 IF MEDIA ERROR
LDM DST+1
SHN 21-13
MJN CDS7 IF MEDIA ERROR
SHN 13-11
MJN CDS7 IF MEDIA ERROR
LDM DST+20
SHN 21-10
MJN CDS7 IF MEDIA ERROR
LDM DST+17
SHN 21-6
MJN CDS9 IF CHANNEL PARITY ERROR ON OUTPUT
CDS6 LDN DSTE
UJN CDS10 SET ERROR CODE
CDS7 LDK PARE&NRDE
CDS8 LMK NRDE
UJN CDS10 SET ERROR CODE
CDS9 LDN CHPE SET ERROR CODE
CDS10 STD EC
LJM CDSX RETURN
CRL SPACE 4,10
** 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.
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 1
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 NOW 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 (IR+4) = CHANNEL NUMBER.
* (CS) = CHANNEL RESERVATION STATUS.
*
* 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
UJN DCHX RETURN
ERR SPACE 4,30
** ERR - PROCESS ERROR.
*
* THIS ROUTINE IS CALLED TO PERFORM 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 THE POINT OF CALL IF THE ERROR WAS RECOVERED BY THE
* CONTROLLER.
* TO *MST* IN ALL OTHER CASES.
*
* USES EC, RC, RS, T1.
*
* CALLS CDS, CRL, CRQ, GGS, IBM, ISF, PDT, PFR, PRE,
* RLC, SSF, TEP.
ERR SUBR ENTRY/EXIT
RJM PRE PRESET ERROR PROCESSOR
NJP ERR11 IF INTERLOCK/VERIFICATION FAILURE
LDD EC
SHN 21-13
PJN ERR3 IF ERROR CODE NOT SET BY CALLER
ERR2 LCN 0 STORE ERROR CODE
LMD EC
STD EC
UJN ERR3.1 CHECK FOR RETRY LIMIT
ERR3 RJM GGS GET GENERAL STATUS
MJN ERR2 IF STATUS NOT OBTAINED
RJM CDS CRACK DETAILED STATUS
MJN ERR2 IF STATUS NOT OBTAINED
ERR3.1 LDD RC
NJN ERR4 IF NOT FIRST RETRY
LDD GS SAVE INITIAL GENERAL STATUS
STM BMLGS
ERR4 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 NO PENDING MONITOR FUNCTION
NJN ERR4.1 IF FUNCTION STILL PENDING
RJM IBM ISSUE BML MESSAGE IF FIRST RETRY
AOD RS
SHN 21-13
MJN ERR6.1 IF ERROR RECOVERED BY CONTROLLER
RJM CRL CHECK FOR RETRY LIMIT REACHED
MJN ERR7 IF RETRY LIMIT NOT REACHED
* ATTEMPT TO RELOAD THE CONTROLLER IF THE ERROR TYPE IS
* APPROPRIATE FOR SUCH AN ACTION.
LDM TEPF,EC
SHN 21-5
PJN ERR5 IF RELOAD INAPPROPRIATE FOR ERROR TYPE
RJM RLC RELOAD CONTROLLER
ERR5 SOD RC ADJUST FINAL RETRY COUNT
AOD RS SET RECOVERY STATUS
ERR6.1 UJN ERR11 TERMINATE ERROR PROCESSING
* SET THE SUSPECT FLAG IF APPROPRIATE FOR THIS ERROR TYPE.
ERR7 RJM SSF SET SUSPECT FLAG (IF APPROPRIATE)
* 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
LMN 10&2
NJN ERR9.1 IF DRIVE NOT RESERVED ON OTHER CHANNEL
LDC 4000 CAUSE PRIORITY OVERRIDE ON SEEK
RAM ISFA
UJN ERR9 REISSUE SEEK
ERR9.1 LDD CS
LPN 10
ZJN ERR11 IF CONTROLLER WAS NOT CONNECTED
LDK DSTE SET ERROR CODE FOR LOST CONTROLLER RESERVE
STD EC
UJP ERR4 RETRY OPERATION
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
LDM ERRA,RS
STD T1
LJM 0,T1 EXIT ERROR PROCESSOR
ERRA INDEX TABLE OF EXIT ADDRESSES
INDEX 0,ERRX
INDEX 1,MST
INDEX 2,MST
INDEX 3,MST
INDEX 4
TEPF SPACE 4,25
** 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/ERROR LOG MESSAGE INDICATOR
* 0 DO NOT ISSUE ERROR LOG MESSAGE.
* 1 ISSUE ERROR LOG MESSAGE WITH DETAILED
* STATUS.
* 2 ISSUE ERROR LOG MESSAGE WITHOUT
* DETAILED STATUS.
* VFD 1/SUSPECT FLAG
* 0 DO NOT SET SUSPECT FLAG.
* 1 SET SUSPECT FLAG.
* VFD 1/DOWN CHANNEL FLAG
* 0 DO NOT DOWN CHANNEL.
* 1 DOWN CHANNEL.
* VFD 1/CONTROLLER RELOAD FLAG
* 0 DO NOT RELOAD CONTROLLER.
* 1 RELOAD CONTROLLER.
* VFD 5/UNUSED (ZERO)
LIST G
TEPF EQU *-1
ECHO 1,EC=("DREC")
VFD 2/IEC._EC,2/IEM._EC,1/SUS._EC,1/IDC._EC,1/CWR._EC,5/0
LIST *
TEPO SPACE 4,10
** TEPO - TABLE OF IMMEDIATE RETURN ERROR PROCESSING OPTIONS.
LIST G
TEPO EQU *-1
ECHO 1,ERRCODE=("DREC")
CON EPO._ERRCODE "TXT._ERRCODE" ERROR
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.
* .GE. 0 IF NO ERROR.
*
* 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
FNC2 LCN FTOE SET COMPLEMENT OF *FTOE* ERROR CODE
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 *IDTE* ERROR CODE IF INCOMPLETE
* TRANSFER OCCURS.
*
* USES EC, T1.
*
* CALLS CCP, FNC.
GDS1 LCN IDTE SET *INCOMPLETE DATA TRANSFER* ERROR CODE
GDS2 STD EC
GDS3 LDN MXSL-1 INVALIDATE DETAILED STATUS
STD T1
GDS4 LCN 0
STM DST,T1
SOD T1
PJN GDS4 IF MORE BYTES
GDS SUBR ENTRY/EXIT
LDN FCDS ISSUE DETAILED STATUS FUNCTION
RJM FNC
MJN GDS3 IF ERROR
LDN MXSL
IAM DST,CH INPUT DETAILED STATUS
NJN GDS1 IF INCOMPLETE DATA TRANSFER
RJM CCP CHECK FOR CHANNEL PARITY ERROR
ZJN GDSX IF NO CHANNEL PARITY ERROR
UJN GDS2 INVALIDATE STATUS AND RETURN
GGS SPACE 4,15
** GGS - GET GENERAL STATUS.
*
* THIS ROUTINE OBTAINS THE EXTENDED GENERAL STATUS FROM THE
* CONTROLLER.
*
* EXIT (A) .GE. 0 IF GENERAL STATUS OBTAINED. (GS) = STATUS.
* .LT. 0 IF STATUS NOT OBTAINED. (GS) = 7777.
* (EC) = COMPLEMENT OF *IDTE* ERROR CODE IF INCOMPLETE
* TRANSFER OCCURRED.
* = COMPLEMENT OF *CHPE* ERROR CODE IF CHANNEL
* ERROR OCCURRED.
*
* USES EC, GS, T1.
*
* CALLS CCP, FNC.
GGS1 LCN IDTE SET *INCOMPLETE DATA TRANSFER* ERROR CODE
GGS2 STD EC
GGS3 LDN FCESL-1 INVALIDATE EXTENDED GENERAL STATUS
STD T1
GGS4 LCN 0
STM GGSA,T1
SOD T1
PJN GGS4 IF MORE BYTES
LCN 0 INVALIDATE GENERAL STATUS
GGS5 STD GS
GGS SUBR ENTRY/EXIT
LDM FNCA SAVE FUNCTION BEFORE GENERAL STATUS
STM GGSB
LDN FCES ISSUE EXTENDED GENERAL STATUS FUNCTION
RJM FNC
MJN GGS3 IF ERROR
LDN FCESL
IAM GGSA,CH
NJN GGS1 IF INCOMPLETE TRANSFER
RJM CCP CHECK FOR CHANNEL PARITY ERROR
MJN GGS2 IF CHANNEL PARITY ERROR
LDM GGSB RESTORE LAST FUNCTION FOR ERROR PROCESSOR
STM FNCA
LDM GGSA
UJN GGS5 SAVE FIRST STATUS BYTE
GGSA BSS FCESL EXTENDED GENERAL STATUS BUFFER
GGSB BSS 1 LAST FUNCTION BEFORE GENERAL STATUS
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 IBM2 IF FINAL RETRY
LDD RC
NJN IBMX IF NOT INITIAL RETRY
AOD RC INCREMENT RETRY COUNT
UJN IBM3 CONTINUE
* 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/D1HP*400 STORE SYMPTOM CODE
LMM TSYM,EC
STM BMLSC
LMK /COMSDFS/HS0040+/COMSDFS/D1HP*400
NJN IBM4 IF NOT A MEDIA ERROR
LDD RW SET WRITE MEDIA ERROR SYMPTOM CODE
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/RM0014 MESSAGE ID
BMLSC VFD 4//COMSDFS/D1HP 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
BMS1L EQU *-BML LENGTH OF MESSAGE (PP WORDS)
.A SET BMS1L+4
BMS1LC EQU .A/5 LENGTH OF MESSAGE (CM WORDS)
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.
*
* 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
RJM CRQ ISSUE COMPLETION REQUEST
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 CONTROLLER RESERVED TO OPPOSITE ACCESS,
* DRIVE RESERVED TO OTHER CONTROLLER, OR
* POSITIONER BUSY.
* (CA - CA+2) = PHYSICAL ADDRESS OF FIRST SECTOR IN
* BUFFER.
* (CS) = BIT 3 SET IF CONTROLLER HARDWARE RESERVE IS
* HELD. BIT 3 IS CLEAR IF *OPERATION COMPLETE*
* FUNCTION WAS ISSUED.
* TO *ERR* IF ERROR.
*
* USES CS, EC, CA - CA+4, CM - CM+4.
*
* CALLS ERR, FNC, GGS, RHR.
*
* MACROS CCBA.
ISF SUBR ENTRY/EXIT
CCBA PAD1 GET DISK ADDRESS FROM CBT ENTRY
CRD CA
LDD CA SET OPTION SELECT FLAGS
LMC SOSF
* LMC SOSF+4000 (PRIORITY OVERRIDE REQUIRED)
ISFA EQU *-1
STD CA
LDD CA+2 SET HEAD NUMBER
SHN 14
STD CA+2
SHN -14 SET SECTOR NUMBER
STD CA+3
LDD CS
LPN 10
NJN ISF1 IF CONTROLLER ALREADY CONNECTED
RJM GGS GET GENERAL STATUS
MJN ISF2 IF GENERAL STATUS WAS NOT OBTAINED
SHN 21-12
MJP ISFX IF COUPLER RESERVED ON OTHER ACCESS
LDN 10 SET HARDWARE RESERVE FLAG
RAD CS
ISF1 LDN FCSK ISSUE SEEK FUNCTION
RJM FNC
ISF2 MJN ISF5 IF ERROR
LDN FCSKL OUTPUT SEEK PARAMETERS
OAM CA,CH
ZJN ISF3 IF ALL DATA WAS TAKEN
LCN IDTE SET *INCOMPLETE DATA TRANSFER* ERROR CODE
UJN ISF4 PROCESS ERROR
ISF3 EJM ISF6,CH IF LAST BYTE TRANSFERRED
SBN 1
NJN ISF3 IF NOT TIMEOUT
LCN CHFE SET *CHANNEL FAILURE* ERROR CODE
ISF4 STD EC
ISF5 RJM ERR CALL ERROR PROCESSOR
ISF6 DCN CH+40
RJM GGS GET GENERAL STATUS
ZJN ISF8 IF NO ERROR AND ON-CYLINDER
MJN ISF5 IF STATUS WAS NOT OBTAINED
SHN 21-3
MJN ISF7 IF UNIT IS RESERVED TO OTHER ACCESS
SHN 3-1
PJN ISF5 IF ERROR
ISF7 RJM RHR RELEASE HARDWARE RESERVES
NJN ISF5 IF ERROR
LDN 1 INDICATE NOT ON CYLINDER
ISF8 LJM ISFX RETURN
OVI SPACE 4,15
** 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
ERRNZ SUIS CODE DEPENDS ON VALUE
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
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
PCH SPACE 4,20
** PCH - PROCESS CHANNEL REQUEST.
*
* THIS ROUTINE IS CALLED TO ISSUE A READ, WRITE OR CONTINUE
* FUNCTION TO THE CONTROLLER.
*
* ENTRY (A) = FUNCTION CODE.
* (CD - CD+1) = EXTENDED MEMORY ADDRESS.
* (CD+2 - CD+5) = SHORT PRU FLAGS IF WRITE REQUEST.
* (RW) = READ/WRITE FLAG.
*
* EXIT (A) .EQ. 0 IF COMPLETED SUCCESSFULLY.
* .LT. 0 IF FUNCTION TIMEOUT, INCOMPLETE DATA
* TRANSFER OR CHANNEL FAILURE.
* (EC) = COMPLEMENT OF *IDTE* ERROR CODE IF DATA
* TRANSFER ERROR.
*
* USES EC.
*
* CALLS FNC.
PCH3 LCN IDTE SET *INCOMPLETE DATA TRANSFER* ERROR CODE
PCH4 STD EC
PCH SUBR ENTRY/EXIT
RJM FNC FUNCTION CHANNEL
MJN PCHX IF ERROR
LDC ** OUTPUT PARAMETERS
PCHA EQU *-1 (PARAMETER BLOCK SIZE)
OAM CD,CH
NJN PCH3 IF INCOMPLETE DATA TRANSFER
PCH1 EJM PCH2,CH IF LAST BYTE ACCEPTED
SBN 1
NJN PCH1 IF NOT TIMEOUT
LCN CHFE SET *CHANNEL FAILURE* ERROR CODE
UJN PCH4 SET ERROR CODE
PCH2 DCN CH+40B
LDN 0 SET REPLY = SUCCESSFUL
UJN PCHX RETURN
PDT SPACE 4,15
** 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 RECOVERY IS IN PROGRESS.
* (PO) = *PUT* ORDINAL.
* (RW) = READ/WRITE FLAG.
*
* USES NB, PB, PI, T1, T7, CD - CD+1, CN+2 - CN+4.
*
* CALLS ERR, OVI, RHR, RIO, RPI, WIO.
*
* MACROS CCBA.
PDT SUBR ENTRY/EXIT
LDM PDTB,RW STORE PARAMETER BLOCK LENGTH
STM PCHA
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
STD PI SET *PADN* WORD OFFSET
LDM IICB,RW
STM IICA
LDM PDTA,RW STORE SUBROUTINE ADDRESS
STD T1
CCBA IOLK
CRD CD-3
ERRNZ CD-CN-5 CODE IS VALUE DEPENDENT
LDN PPSLB SET SECTOR COUNT
STD T7
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 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
PDTB BSS 0 PARAMETER BLOCK LENGTH TABLE
CON FCRDL
CON FCWRL
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 RIOA,RIOX
CON WIOA,WIO6.1
PRE SPACE 4,15
** 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.
* (RS) = RECOVERY STATUS.
* (T5) = EST ORDINAL.
* (TEPA) = 1 IF VERIFICATION/INTERLOCK REJECT.
*
* USES RS, T5, CM - CM+4.
*
* CALLS CRQ, OVI.
*
* MACROS CPTA.
PRE2 AOM TEPA SET VERIFICATION/INTERLOCK REJECT FLAG
STD RS FORCE EXIT TO *MST*
PRE SUBR ENTRY/EXIT
DCN CH+40 DISCONNECT CHANNEL IN CASE STILL ACTIVE
LDM FNCA SAVE CURRENT FUNCTION
STM BMLLF
LCN 0 INITIALIZE RECOVERY STATUS
STD RS
LDD HN
ERRNZ SOSF-100 CODE DEPENDS ON VALUE
STM ISFA
RJM OVI GET *PUT* INTERLOCK (IF NOT ALREADY HELD)
NJN PRE2 IF INTERLOCK NOT OBTAINED
CPTA UNCT GET EST ORDINAL
CRD CM
LDD CM+1
STD T5
PRE1 RJM CRQ ENSURE NO PENDING MONITOR FUNCTIONS
NJN PRE1 IF FUNCTION STILL PENDING
UJN PREX RETURN
RCH SPACE 4,10
** 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
AOD CS SET CHANNEL RESERVATION FLAG
UJN RCHX 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,15
** RIO - PERFORM READ OPERATION.
*
* ENTRY (CB) = CURRENT BUFFER ORDINAL.
* (CD - CD+1) = BUFFER ADDRESS.
* (NB) = 0.
* (PB) = 0.
* (PI) = 0.
* (T7) = *PPSLB*.
*
* EXIT (PB) = ORDINAL OF LAST BUFFER PROCESSED.
*
* USES CB, PB, PI, T7, CD - CD+1, CM - CM+4, CN+2 - CN+4.
*
* CALLS CCS, CRQ, ERR, GGS, IIC, PCH.
*
* MACROS CCBA.
RIO SUBR ENTRY/EXIT
RIO1 LDN FCRD ISSUE READ FUNCTION
RJM PCH
MJN RIO4 IF ERROR
RJM IIC CHECK FOR NEED TO ISSUE COMPLETION REQUEST
LDD T7
LPN 1
ZJN RIO3 IF FIRST SECTOR OF CONTROL WORD
CCBA PAD1 UPDATE PRU FLAGS
ADD PI
CRD CM
LDM GGSA+3
STD CM+3
LDM GGSA+4 UPDATE LINKAGE BYTE
STD CM+4
CCBA PAD1
ADD PI
CWD CM
AOD PI INCREMENT *PADN* WORD OFFSET
RIO3 RJM CCS CHECK FOR CONSECUTIVE REQUEST
RJM GGS GET GENERAL STATUS
ZJN RIO5 IF NO ERROR
RIO4 RJM ERR PROCESS ERROR
RIO5 AOD CA+3 ADVANCE CURRENT POSITION
LMN PSPT
NJN RIO6 IF NOT END OF TRACK
STD CA+3 RESET TO SECTOR 0
AOD CA+2 ADVANCE TO NEXT TRACK
RIO6 SOD T7 DECREMENT SECTOR COUNT
ZJN RIO7 IF FINISHED WITH BUFFER
LDC EMAI INCREMENT EXTENDED MEMORY ADDRESS
RAD CD+1
SHN -14
RAD CD
LJM RIO1 READ NEXT SECTOR
RIO7 STD PI RESET *PADN* WORD OFFSET
RJM CCS CHECK FOR CONSECUTIVE REQUEST
LDD CB ADVANCE BUFFER POINTERS
STD PB
LDD NB
STD CB
ZJP RIOX IF NO CONSECUTIVE REQUEST FOUND
CCBA IOLK,A INITIALIZE EXTENDED MEMORY ADDRESS
CRD CD-3
ERRNZ CD-CN-5 CODE IS VALUE DEPENDENT
LDN PPSLB RESET SECTOR COUNT
STD T7
LDN 0 CLEAR NEXT BUFFER ORDINAL
STD NB
LJM RIO1 CONTINUE TRANSFER
* LJM RIOX (ERROR RECOVERY IN PROGRESS)
RIOA EQU *-1
RLC SPACE 4,15
** RLC - RELOAD CONTROLWARE.
*
* THIS ROUTINE CALLS *1DS* TO INITIATE THE CONTROLWARE RELOAD.
*
* EXIT (A) = 0 IF CONTROLWARE RELOADED.
*
* USES S2, CM - CM+4, CN - CN+4.
*
* CALLS *1DS*.
*
* MACROS DELAY, EXECUTE, MONITOR.
RLC6 LDN 1 INDICATE CONTROLWARE NOT RELOADED
RLC SUBR ENTRY/EXIT
LDC **
RLCJ EQU *-1
NJN RLCX IF RELOAD WAS ALREADY ATTEMPTED
LDK DSSL AVOID CONTROLWARE LOAD DURING DEADSTART
CRD CM
LDD CM+4
LPN 4
NJN RLCX IF DEADSTART IN PROGRESS
LDC ** READ CONTROLWARE TABLE
RLCA EQU *-1 CM ADDRESS OF TABLE ENTRY
CRD CM
LDD CM+**
RLCB EQU *-1 BYTE ADDRESS OF TABLE ENTRY
SHN 21-13
MJN RLCX IF RELOAD IN PROGRESS
SHN 13-21-6
LPN 7 CONTROLWARE LOAD COUNT
LMK CRTH
ZJN RLC6 IF RELOAD LIMIT REACHED
AOM RLCJ SET RELOAD ATTEMPTED FLAG
* SET RELOAD REQUEST BIT IN CONTROLWARE TABLE.
LDN 0
STD CM+2
LDD MA MESSAGE BUFFER ADDRESS
CWM RLCG,ON REQUEST WORD
LDC **
RLCC EQU *-1 ADDRESS OF CONTROLWARE TABLE ENTRY
STD CM+4
SHN -14
STD CM+3
LDN 1 NUMBER OF REQUESTS TO PROCESS
STD CM+1
MONITOR UTEM
* LDN 0 INITIALIZE RETRY COUNT
STD S2
* CALL *1DS* TO INITIATE CONTROLWARE LOAD JOB.
RLC1 DELAY
LDD MA MESSAGE BUFFER ADDRESS
CWM RLCH,ON *1DS* REQUEST
EXECUTE 1DS,=
MONITOR RPPM REQUEST PP
LDD CM+1
NJN RLC2 IF PP ASSIGNED
AOD S2 INCREMENT RETRY COUNT
LMK PCRL
NJN RLC1 IF NOT RETRY LIMIT
RLC2 LJM RLCX RETURN
RLCG VFD 1/0,5/0,6/1,6/,42/1 *UTEM* REQUEST
RLCH VFD 18/3L1DS,6/,12/ILJF,24/0 *1DS* REQUEST
RPI SPACE 4,10
** RPI - RELEASE *PUT* INTERLOCK.
*
* ENTRY (CC) = COMPLETION COUNT.
* (IL) = *PUT* INTERLOCK FLAG.
* (PB) = PREVIOUS BUFFER ORDINAL.
* (PO) = *PUT* ORDINAL.
* (TB) = TOTAL CBT COUNT.
*
* USES CC, IL, PB, CM - CM+4.
*
* MACROS MONITOR.
RPI SUBR ENTRY/EXIT
LDD IL
ZJN RPIX IF *PUT* NOT INTERLOCKED
LDD TB SET TOTAL BUFFER COUNT
STD CM+4
LDD PB
ZJN RPI1 IF NO PREVIOUS BUFFER
LDN 1 ACCOUNT FOR PREVIOUS BUFFER
RPI1 ADD CC
LMC 4000 SET *RELEASE INTERLOCK* FLAG
STD CM+3
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
UJP RPIX 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 COMPUTE LOGICAL TRACK
SHN 1
ADC 4000
STD CM+2
LDD CA+2 PHYSICAL TRACK
LPN 77
SHN 5
ERRNZ PSPT-40 CODE DEPENDS ON VALUE
ADD CA+3
SBK PSLTDB
MJN RTM1 IF FIRST LOGICAL TRACK OF CYLINDER
AOD CM+2
RTM1 LDD CM+2
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,15
** 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 IN THE MST ENTRY VIA
* AN *SEQM* MONITOR FUNCTION IF CERTAIN CRITERIA ARE MET. IT
* ALSO SETS AN ERROR CODE IN THE MST THAT APPEARS ON THE *E,M*
* DISPLAY.
*
* ENTRY (EC) = ERROR CODE.
* (RC) = RETRY COUNT.
* (T5) = EST ORDINAL.
*
* USES CM+1 - CM+3.
*
* CALLS RTM.
*
* MACROS MONITOR.
SSF SUBR ENTRY/EXIT
LDD RC
LMK SURT
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
UJN SSFX RETURN
SUQ SPACE 4,15
** 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 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.
*
* CALLS ERR.
*
* 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 14 SET CHANNEL BYTE INDEX
STD S1
SHN -14 SET *PUT* ORDINAL
STD PO
CPTA UNCT,A 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
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 SET TOTAL BUFFER COUNT
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
SHN -1
STD RC
RJM ERR CALL ERROR PROCESSOR
LJM SUQ1 CONTINUE SCAN
SUQ6 LDD TI SET SCAN LIMIT
LMC LMNI
STM SUQA
LJM SUQX RETURN
TEP SPACE 4,25
** 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 RLCJ CLEAR RELOAD ATTEMPTED FLAG
STM TEPA CLEAR VERIFICATION/INTERLOCK REJECT FLAG
LDD HN RESET SEEK SELECTION OPTIONS
ERRNZ SOSF-100 CODE DEPENDS ON VALUE
STM ISFA
TEP SUBR ENTRY/EXIT
LDD RW
SHN 1
STD T1
LDM TEPB,T1 RESTORE INSTRUCTIONS
STD T2
LDM TEPB+1,T1
STI T2
LDC **
TEPA EQU *-1
NJP TEP4 IF OTHER DRIVER HANDLING ERROR
LDD RS
ZJN TEP1 IF RECOVERED BY CONTROLLER
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
TEP1 LMN 2
NJN TEP2 IF NOT UNRESOLVED ERROR
* ISSUING SUBFUNCTION *SETS* 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 SET BUFFER COUNT
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
LPN 1
ZJN TEP3 IF UNRESOLVED OR RECOVERED BY CONTROLLER
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 RIOA,RIO1
CON WIOA,WIO1
WIO SPACE 4,10
** WIO - PERFORM WRITE OPERATION.
*
* ENTRY (CB) = CURRENT BUFFER ORDINAL.
* (CD - CD+1) = BUFFER ADDRESS.
* (NB) = 0.
* (PB) = 0.
* (PI) = 0.
* (T7) = *PPSLB*.
*
* EXIT (PB) = ORDINAL OF LAST BUFFER PROCESSED.
*
* USES CB, PB, PI, T1, T7, CA+2 - CA+3, CD - CD+5,
* CN+2 - CN+4.
*
* CALLS CCS, CRQ, ERR, GGS, IIC, PCH.
*
* MACROS CCBA.
WIO SUBR ENTRY/EXIT
WIO1 LDD T7
LPN 1
NJN WIO2 IF NOT FIRST SECTOR OF CONTROL WORD
LDD CD+1 SAVE EXTENDED MEMORY ADDRESS BYTE
STD T1
CCBA PAD1 GET LINKAGE BYTES FROM *CBT* ENTRY
ADD PI
CRD CD+1
LDD T1 RESTORE EXTENDED MEMORY ADDRESS BYTE
STD CD+1
AOD PI INCREMENT *PADN* INDEX
WIO2 LDN FCWR ISSUE WRITE FUNCTION
RJM PCH
MJN WIO4.1 IF ERROR
AOD CA+3 ADVANCE CURRENT POSITION
LMN PSPT
NJN WIO3 IF NOT END OF TRACK
STD CA+3 RESET TO SECTOR ZERO
AOD CA+2 ADVANCE TO NEXT TRACK
WIO3 SOD T7 DECREMENT SECTOR COUNT
ZJN WIO5 IF FINISHED WITH BUFFER
LMK PPSLB-1
ZJN WIO4 IF FIRST SECTOR OF BUFFER
RJM IIC ISSUE I/O COMPLETION REQUEST IF REQUIRED
WIO4 LDC EMAI INCREMENT EXTENDED MEMORY ADDRESS
RAD CD+1
SHN -14
RAD CD
RJM CCS CHECK FOR CONSECUTIVE REQUEST
RJM GGS GET GENERAL STATUS
ZJP WIO1 IF NO ERROR
WIO4.1 UJN WIO8 CALL ERROR PROCESSOR
WIO5 STD PI RESET *PADN* WORD INDEX
RJM CCS CHECK FOR CONSECUTIVE REQUEST
LDD CB ADVANCE BUFFER POINTERS
STD PB
LDD NB
STD CB
ZJN WIO6 IF NO CONSECUTIVE REQUEST
CCBA IOLK,A SET EXTENDED MEMORY ADDRESS
CRD CD-3
ERRNZ CD-CN-5 CODE IS VALUE DEPENDENT
LDN PPSLB RESET SECTOR COUNT
STD T7
RJM GGS GET GENERAL STATUS
NJN WIO7 IF ERROR
STD NB CLEAR NEXT BUFFER ORDINAL
LJM WIO1 CONTINUE TRANSFER
* LJM WIO6.1 (ERROR RECOVERY IN PROGRESS)
WIOA EQU *-1
WIO6 RJM GGS GET GENERAL STATUS
NJN WIO7 IF ERROR ON LAST SECTOR
WIO6.1 RJM GGS GET GENERAL STATUS
ZJN WIO9 IF NO ERROR
WIO7 LDD PB BACKUP TO PREVIOUS BUFFER
STD CB
LDN 0 AVOID BUFFER COMPLETION
STD PB
WIO8 RJM ERR CALL ERROR PROCESSOR
WIO9 LJM WIOX RETURN
SPACE 4,10
* COMMON DECKS.
*CALL COMPC2D
*CALL COMPIMB
SPACE 4,10
PRS TITLE PRESET PROGRAM.
PRS SPACE 4,10
** PRS - PRESET *1HP*.
*
* EXIT (CC) = 0.
* (CS) = 0.
* (EC) = 0.
* (ER) = 0.
* (IL) = 0.
* (PB) = 0.
* (RC) = 0.
* (TI) = 0.
* (BMLCR) = 6/ CHANNEL, 6/0.
* (BMLMF) = MAINFRAME ID.
* (BMLPP) = 6/ PP NUMBER, 6/ CHANNEL.
* (CCPA) = *SCR* CHANNEL PARITY BIT + FCTC + 30B.
* (CCPB) = *SCR* CHANNEL OUTPUT INSTRUCTION (OAN).
* (CCPC) = *SCR* CHANNEL INPUT INSTRUCTION (IAN).
* (CCRA) = WORD ADDRESS OF CHANNEL TABLE ENTRY.
* (CCRB) = BYTE ADDRESS OF CHANNEL TABLE ENTRY + LDDI.
* (CHRV) = 1.
* (CRQA) = FWA OF PP EXCHANGE PACKAGE.
* (CRQB) = FWA OF PP EXCHANGE PACKAGE.
* (CRQC) = CPU EXCHANGE INSTRUCTION (MXN).
* (CRQD) = FIRST WORD OF PP EXCHANGE PACKAGE.
* (RLCA) = WORD ADDRESS OF CONTROLWARE TABLE ENTRY.
* (RLCB) = BYTE ADDRESS OF CONTROLWARE TABLE ENTRY.
* (RLCC) = WORD ADDRESS OF CONTROLWARE TABLE ENTRY.
* (RLCG) = BIT NUMBER OF LOAD REQUESTED FLAG.
* (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 CC, CS, EC, ER, IL, PB, RC, TI, CM - CM+4, CN - CN+4,
* T0 - T7.
*
* CALLS DFM, RCH.
*
* MACROS CPTA, MONITOR, SFA.
PRS SUBR ENTRY/EXIT
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* 1HP - UNAUTHORIZED CALL.*
RJM DFM ISSUE DAYFILE MESSAGE
MONITOR ABTM ABORT CONTROL POINT
LJM PPR RETURN
PRS1 STD CC CLEAR COMPLETION REQUEST COUNT
STD CS CLEAR CHANNEL/CONTROLLER STATUS
STD EC CLEAR ERROR CODE
STD ER CLEAR RECOVERY IN PROGRESS FLAG
STD IL CLEAR *PUT* INTERLOCK FLAG
STD PB CLEAR PREVIOUS BUFFER ORDINAL
STD RC CLEAR RETRY COUNT
STD TI INITIALIZE *TPOR* INDEX
LDD IR+4 CHANNEL NUMBER
STM BMLPP
PRS2 RJM RCH REQUEST CHANNEL
ZJN PRS2 IF CHANNEL NOT ASSIGNED
* 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
PRS4 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 PRS4.1 IF PP 0-11
ADN 6 ADJUST FOR PP 20-31
PRS4.1 ADN 12
SHN 6
RAM BMLPP SET PP NUMBER
SHN 6
STM BMLCR SET RECOVERY CHANNEL
LDD IR+4
STD T2
SBN 20
PJN PRS5 IF IN SECOND PPS
ADN 20
RAM CCPA SET *SCR* BIT NUMBER
LDK CHSC *SCR* - FIRST PPS
UJN PRS6 CONTINUE
PRS5 RAM CCPA SET *SCR* BIT NUMBER
LDK CHSC+20 *SCR* - SECOND PPS
PRS6 ADC FJMI
STM CCPB
ADC IANI-FJMI
STM CCPD
ADC OANI-IANI
STM CCPC
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
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 6
PJN PRS7 IF CPU 0 ON
AOM CRQC SET EXCHANGE TO CPU 1
LDD HN
RAM CRQD+3 SET (A0) TO 1
PRS7 AOD T1 ADVANCE CM TABLE INDEX
LCN 5
RAD T2
PJN PRS7 IF NOT TO PROPER INDEX
ADN 5
RAM CCRB PRESET CHANNEL TABLE BYTE INDEX
STM RLCB PRESET CONTROLWARE TABLE BYTE INDEX
LPN 7 BYTE ADDRESS
STD T2
PRS8 LCN 12D
RAD T3 DECREMENT POSITION
SOD T2
PJN PRS8 IF NOT TO PROPER POSITION
LDD T3 BIT POSITION
ADN 13 ADD OFFSET WITHIN BYTE
SHN 6
STM RLCG+1
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 RLCA CM ADDRESS OF CONTROLWARE TABLE ENTRY
STM RLCC
STM SCDA
SHN -14
RAM RLCA-1
STM RLCC-1
STM SCDA-1
* PLUG *EMB* ADDRESSES.
LDN EMBP FETCH *EMB* POINTER
CRD CM
.CM1 EQU CM+1
LDC .CM1*10000+PRSC
RJM STA SET *EMB* ADDRESSES
* GET BUFFERED I/O TABLE POINTERS.
LDK BIOL READ BUFFERED I/O TABLE POINTERS
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.
PRS12 STD T1 INITIALIZE *TPOR* INDEX
PRS13 SOD T3 DECREMENT *PUT* ORDINAL
ZJP PRSX 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 37
LMD IR+4
ZJN PRS14 IF DEVICE SUPPORTED BY THIS DRIVER
LDD CM+2
ZJN PRS13 IF SINGLE ACCESS DEVICE
LPN 37
LMD IR+4
NJN PRS13 IF DEVICE NOT SUPPORTED BY THIS DRIVER
AOD T2 INCREMENT CHANNEL BYTE INDEX
PRS14 AOD T1 INCREMENT *TPOR* INDEX
ERRNZ TPORE-1 CODE DEPENDS ON VALUE
LMK MAXU+1
ZJN PRS14.1 IF TOO MANY UNITS ON CHANNEL
LDD T2 POSITION CHANNEL BYTE INDEX
SHN 6
LMD T3 SET *PUT* ORDINAL
STM TPOR-1,T1
UJP PRS13 CONTINUE SCAN
PRS14.1 LDC =C* 1HP - TOO MANY UNITS ON CHANNEL.*
RJM DFM ISSUE SYSTEM DAYFILE MESSAGE
MONITOR HNGM
UJN * HANG
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
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
1HP SPACE 4,10
OVERFLOW
1HP SPACE 4,10
END