IDENT 6DE,MSFW
PERIPH
BASE MIXED
SST
*COMMENT 6DE - *PIOM* DEVICE DRIVER.
COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
TITLE 6DE - *PIOM* DEVICE DRIVER.
SPACE 4,10
*** 6DE - *PIOM* DEVICE DRIVER.
* G. R. MANSFIELD. 70/04/07.
* W. E. GOEBEL. 78/04/29.
SPACE 4,10
*** *6DE* PROVIDES ACCESS TO EXTENDED MEMORY AND BUFFERED DISK
* DEVICES THROUGH THE *PIOM* *CPUMTR* INTERFACE.
SPACE 4,10
** ENTRY CONDITIONS.
*
*
* (T5) = EST ORDINAL.
* (T6) = TRACK.
* (T7) = SECTOR.
SPACE 4,10
** EXIT CONDITIONS.
*
*
* NONE.
SPACE 4
** COMMON DECKS.
*CALL COMPMAC
*CALL COMSCPS
*CALL COMSDFS
LIST X
*CALL COMSMSP
LIST *
*CALL COMSPIM
SPACE 4,10
** ASSEMBLY CONSTANTS.
DEC MICRO 1,, 6DE DECK NAME
TITLE
ORG MSFW
SPACE 4
** ENTRY POINT TRANSFERS.
CON PRS PRESET ADDRESS
RDS CON 0 ENTRY
UJN RDS. ENTER DRIVER
WDS CON 0 ENTRY
UJN WDS0 ENTER DRIVER
EMS SPACE 4,20
** EMS - END MASS STORAGE OPERATION.
*
* ENTRY (CHRV, BIT 6) = 0, IF NO PP BUFFER TO RELEASE.
* (T4) = INCREMENT OF PP BUFFER IF ASSIGNED.
*
* EXIT PP I/O BUFFER RELEASED.
* (CHRV) = 0.
* (A) = 0.
*
* CALLS SEA.
*
* NOTE - THE *.EMS* ENTRY POINT IS SUPPORTED ONLY VIA THE
* *ENDMS* MACRO DEFINED IN *COMPMAC*. IF THIS LOCATION
* CHANGES, THE DEFINITION OF *.EMS* MUST BE CHANGED IN
* *PPCOM* AND ALL PROGRAMS USING THE *ENDMS*
* MACRO MUST BE REASSEMBLED.
.EMS SUBR ENTRY/EXIT
LDM CHRV
LPN 1
ZJN EMS1 IF BUFFER NOT RESERVED
RJM SEA SET ECS BUFFER ADDRESS
CWM ZERO,ON CLEAR BUFFER RESERVATION
EMS1 LDM CHRV CLEAR BUFFER RESERVATION/LINK FLAGS
LPC -201
STM CHRV
LDN 0 SET EXIT CONDITION
UJN .EMSX RETURN
WDS0 LJM WDS. ENTER DRIVER
RDS SPACE 4,10
** RDS - READ SECTOR.
*
* ENTRY (A) = 5/0, 1/S, 12/ BA.
* S = SKIP TRANSFER OF DATA IF SET.
* BA = BUFFER ADDRESS FOR SECTOR.
*
* EXIT (A) .LT. 0 IF UNRECOVERED ERROR.
*
* CALLS ECS, SEA.
RDS. STM RDSA SET BUFFER ADDRESS
ADN 2
STM RDSC
SHN -14
ERRNZ DTSF-10000 ERROR IF VALUE CHANGES
ZJN RDS1 IF NOT SKIP DATA TRANSFER
LDC UJNI+RDS2-RDSB
ERRPL RDS2-RDSB-37 CHECK JUMP IN RANGE
RDS1 STM RDSB MODIFY CODE FOR SKIP
LDD HN READ SECTOR
ERRNZ RESS*100B-100B ERROR IF VALUE CHANGES
RJM ECS
LDM CHRV CHECK IF BUFFER ASSIGNED
SHN 21-0
PJN RDS3 IF BUFFER NOT ASSIGNED
RJM SEA SET ECS BUFFER ADDRESS
ADN 1
CRM *,ON
RDSA EQU *-1
RDSB PSN
* UJN RDS2 (SKIP DATA TRANSFER)
CRM *,HN
RDSC EQU *-1
SBD HN
RDS2 SBN 2
CWM ZERO,ON CLEAR BUFFER RESERVATION
SOM CHRV CLEAR BUFFER RESERVATION FLAG
RDS3 LDM RDS RETURN ADDRESS
LJM CST CHECK STATUS
WDS SPACE 4,10
** WDS - WRITE SECTOR.
*
* ENTRY (A) = 6/ LSI, 12/ BA.
* LSI = WLSF, IF LAST SECTOR WRITE.
* = WCSF, IF CONSECUTIVE SECTOR WRITE.
* BA = BUFFER ADDRESS FOR SECTOR.
*
* EXIT (A) .LT. 0 IF UNRECOVERED ERROR.
*
* CALLS ECS, SEA.
WDS. STM WDSB SET BUFFER ADDRESS
ADN 2
STM WDSC
SHN -16 SAVE WRITE LAST SECTOR FLAG
LPN 3
LMN 3
STM WDSA
ERRNZ WLSF ERROR IF VALUE CHANGES
ERRNZ WCSF-300000 ERROR IF VALUE CHANGES
LDM UERR GET REWRITE AND DISABLE BUFFER FLUSH FLAGS
SHN -6
ERRNZ EPRW-100 ADJUST IF VALUE CHANGES
ERRNZ EPNF-200 ADJUST IF VALUE CHANGES
LMN 2
LPC **
* LPC 3 (WRITE LAST SECTOR)
* LPC 1 (WRITE CONSECUTIVE SECTOR)
WDSA EQU *-1
STM WDSD
LDM CHRV
SHN 21-0
MJN WDS3 IF BUFFER RESERVED
WDS2 LDC **
WDSD EQU *-1
ADK REBS*100 RESERVE WRITE BUFFER
RJM ECS
LDD CM+1
NJN CST1 IF ERROR STATUS SET
WDS3 RJM SEA SET ECS BUFFER ADDRESS
ADN 1
CWM *,ON
WDSB EQU *-1
CWM *,HN
WDSC EQU *-1
LDM WDSD
ADC WESS*100 WRITE SECTOR
RJM ECS
LDM WDS RETURN ADDRESS
* UJN CST CHECK STATUS
CST SPACE 4,15
** CST - CHECK STATUS.
*
* ENTRY (A) = RETURN ADDRESS.
* (CM+1) = STATUS RETURNED BY *PIOM* TRANSFER.
* (MB+1) = PHYSICAL DATA RETURNED BY *PIOM* IF ERROR.
*
* EXIT RETURN TO CALLER IF NO ERROR.
*
* EREXIT TO *7DE*.
*
* USES T1, T2.
CST BSS 0 ENTRY
STD T1 SAVE BIAS FOR EXIT ADDRESS
LDD CM+1
NJN CST1 IF ERROR
LJM 0,T1 RETURN
* PROCESS ERROR.
CST1 STM STSA SAVE STATUS
MSERR 7DE
ECS SPACE 4,15
** ECS - ECS TRANSFER.
*
* ENTRY (A) = 6/ *PIOM* SUBFUNCTION, 6/ FUNCTION FLAGS.
*
* EXIT (A) = 0.
* (CM+1) = ERROR CODE IF NONZERO.
* (CM+3 - CM+4) = PHYSICAL DATA IF ERROR.
* TO *WDS2* IF WRITE BUFFER MUST BE RE-RESERVED.
*
* USES T4, T5, T6, T7, CM - CM+4.
*
* MACROS DELAY, MONITOR, PAUSE.
ECS5 LDM CHRV
STD CM
LPN 20
ZJN ECS6 IF CHANNEL NOT SELECTED BY CALLER
LDM STSB STORE CHANNEL NUMBER
STD CM+4
ECS6 LDD MA STORE PARAMETERS IN MESSAGE BUFFER
CWD T4
LDC ** SET FUNCTION CODE
ECSA EQU *-1
STD CM+1 SET FUNCTION CODE AND FLAGS
MONITOR PIOM
LDD MA UPDATE PARAMETERS
CRD T4
LDD CM
STM CHRV
LDD CM+1 CHECK RETURN STATUS
SHN -13
NJN ECS4 IF RETRY REQUIRED
ECS SUBR ENTRY/EXIT
STM ECSA SAVE FUNCTION CODE
ECS1 LDD OA WAIT OUTPUT REGISTER CLEAR
CRD CM
LDD CM
ZJP ECS5 IF NO MONITOR FUNCTION PENDING
DELAY
UJN ECS1 LOOP
* RETRY FUNCTION.
ECS2 LDM ECSA CHECK FOR WRITE REJECT
SHN -7
ZJN ECS1 IF RESERVE BUFFER OR READ SECTOR
LDM CHRV
SHN 21-6
MJN ECS1 IF RECALL AFTER FLUSH
SHN 21-0-21+6
MJN ECS1 IF WRITE BUFFER RESERVED
LJM WDS2 RE-RESERVE WRITE BUFFER
* WAIT FOR PENDING BUFFERED I/O.
ECS3 DELAY 1*8D DELAY 1 MILLISECOND
ECS4 PAUSE NE
LDD OA WAIT FOR REISSUE ALLOWED STATUS
ADN 2
CRD CM
LDD CM+1
SHN 21-12
PJN ECS3 IF PENDING I/O NOT COMPLETE
UJN ECS2 RETRY FUNCTION
SEA SPACE 4,10
** SEA - SET ECS ADDRESS.
*
* ENTRY (T4) = RELATIVE ECS BUFFER ADDRESS.
*
* EXIT (A) = ECS BUFFER ADDRESS.
SEA SUBR ENTRY/EXIT
SEAA LDC **
ADD T4
UJN SEAX RETURN
PRS SPACE 4,10
** PRS - PRESET DRIVER.
*
* ENTRY (CM - CM+4) = EST ENTRY.
*
* EXIT NONE.
PRS LDC EPBP GET FWA ECS PP BUFFERS
CRM ZERO,ON
LDM ZERO+4
STM SEAA+1
LDM ZERO+3
LPN 77
ADC LDCI
STM SEAA
LDN ZERL ZERO BUFFER
CRM ZERO,ON
LJM SMSX RETURN
ZERO BSS 0 FIVE BYTES FOR READING BUFFER ADDRESS
.1 SET *+5+4-MSFW CHECK FOR OVERFLOW
.1 SET .1/5
.1 SET MSFW+.1*5
.2 SET PPFW-5-*-5 BYTES AVAILABLE BEFORE OVERFLOW
ERRNG PPFW-5-.1 DRIVER OVERFLOWS INTO *PPFW*-5
* THE FOLLOWING CHECK VERIFIES THAT CELLS *ZERO* - *ZERO*+4
* ARE NOT DESTROYED BY THE ERROR PROCESSOR.
ERRPL ZERO+4-DEFW CODE IS DESTROYED BY ERROR PROCESSOR
7DE MSOVL 7644,T2,EPFW-1,(MASS STORAGE ERROR PROCESSOR.)
SPACE 4
*** *7DE* IS CALLED BY *6DE* WHEN AN UNRECOVERED ERROR HAS
* OCCURRED.
MSE SPACE 4,35
** MSG - PROCESS MASS STORAGE ERROR.
*
* ENTRY (T1) = RDCT.
* (T2) = DEST.
* (T4 - T7) = DRIVER PARAMETERS.
* (RDCT) = ERROR PROCESSOR INTERFACE WORD.
* BIT 4 = 0 IF FIRST RETRY ATTEMPT.
* (STSA) = ERROR CODE RETURNED BY *CPUMTR*.
* (MB+1) = PHYSICAL DATA RETURNED BY *PIOM* FUNCTION.
*
* EXIT TO *7EK*.
* (T2) = READ BUFFER ADDRESS.
* (T4 - T7) = UNCHANGED.
* (DEDT) = 8/0, 4/*6DE* DRIVER TYPE.
* (DEEC) = ERROR CODE.
* (DENR) = 0 IF NOT 819 DEVICE OR IF 819 DEVICE AND *NOT
* READY* ERROR.
* (DENR) = 1 IF 819 DEVICE AND NOT *NOT READY* ERROR.
* (DERC) = 0 IF FIRST RETRY ATTEMPT, ELSE UNCHANGED.
* (DERW) = 1 IF WRITE REQUEST, 0 IF READ REQUEST.
* (DEST) = 2000 (UNRECOVERED ERROR).
* (DEWR) = 0 IF FIRST RETRY ATTEMPT, ELSE UNCHANGED.
* (DEXA) = ERROR PROCESSOR EXIT ADDRESS.
* (RDCT) = ERROR PROCESSOR INTERFACE WORD.
* BITS AFFECTED BY THIS OVERLAY -
* BIT 4 = 1 IF FIRST RETRY ATTEMPT, OTHERS 0.
* (MB+2) = DRIVER DEPENDENT PART OF BML MESSAGE.
* 12/, 12/S, 12/W, 24/E.
* S = ERROR STATUS.
* W = WORD COUNT.
* E = EXTENDED MEMORY ADDRESS.
*
* USES T1, T2, CM - CM+4.
*
* MACROS MSERR.
MSG ENTRY *7DE* ENTRY
* PRESET ERROR PROCESSING CELLS. THE *DEST* UNRECOVERED ERROR
* FLAG IS PRESET *ON* TO AVOID ERROR RETRIES ON BUFFERED DISK
* OR EXTENDED MEMORY DEVICES. THE BUFFERED DISK DRIVER OR
* *CPUMTR* WILL HAVE ALREADY PERFORMED ANY APPROPRIATE RETRY
* SEQUENCE FOR THE ERROR.
SFA EST,T5 GET EST ENTRY
ADK EQDE
CRD CM
LDM STSA PRESET ERROR CODE
STM DEEC
ERRPL DEEC-* CODE DESTROYED
LDC 2000 SET UNRECOVERED FLAG
STI T2
LDK /COMSDFS/D6DE SAVE DRIVER TYPE
STM DEDT
ERRPL DEDT-* STORE DESTROYS CODE
LDM ECSA SET READ/WRITE FLAG
SHN -6
LPN 1
LMN 1
STM DERW SAVE READ/WRITE FLAG
ERRPL DERW-* STORE DESTROYS CODE
ERRNZ REBS
ERRNZ RESS-1
ERRNZ WESS-2
ERRNZ WRIP-1
ERRNZ REDP
LDI T1
LPC 100
NJN MSG2 IF ERROR RECOVERY ALREADY IN PROGRESS
STM DERC INITIALIZE RETRY COUNT
STM DENR INITIALIZE NON-RECOVERABLE FLAG
LDD HN SET RECOVERY IN PROGRESS FLAG
STI T1
MSG2 LDM DERW SET/CLEAR DATA WRITTEN FLAG
STM DEWR
* SINCE THE 819 INTERRUPT HANDLER DOES NOT ATTEMPT TO
* ACCURATELY ASSESS THE RECOVERABILITY OF THE FAILURE, FORCE
* THE ERROR NON-RECOVERABLE UNLESS IT-S A *NOT READY*
* CONDITION.
LDD CM+3
LPN 77
LMN 1RV
ZJN MSG3 IF 819 DEVICE
LMN 1RW&1RV
NJN MSG4 IF NOT 819 DEVICE
MSG3 LDM DEEC
LMK NRDE
ZJN MSG4 IF DEVICE NOT READY ERROR
LMK LNRE&NRDE
ZJN MSG4 IF LOGICAL NOT READY ERROR
AOM DENR SET ERROR NOT RECOVERABLE
MSG4 LDC ECS2 SET RETURN ADDRESS
STM DEXA
ERRPL DEXA-* STORE DESTROYS CODE
LDD CM+3 CHECK EQUIPMENT TYPE
LPN 77
LMN 1RE
* *7DE* AND ASSOCIATED *PPR* ERROR PROCESSING OVERLAYS ISSUE NO
* BML, ERROR LOG OR DAYFILE MESSAGES FOR BUFFERED DISK DEVICES.
* BUFFERED DEVICE DRIVERS ISSUE ALL SUCH MESSAGES.
NJN MSG8 IF BUFFERED DISK
LDD MA GET PHYSICAL DATA FOR MESSAGE
ADN 1
CRD CM
LDN 0 CLEAR UNUSED FIELDS IN BML MESSAGE
STD CM
LDM STSA ADD *PIOM* STATUS TO MESSAGE
LMK ADDE
ZJN MSG7 IF ADDRESS ERROR
LDN 1&10 SET *HARDWARE ERROR* FLAG
MSG7 LMN 10
STD CM+1
LDC 101 SAVE WORD COUNT
STD CM+2
MSG8 LDM RDSA SET READ BUFFER ADDRESS
STD T2
LDD MA WRITE *7EK* PARAMETERS
ADN 2
CWD CM
MSERR 7EK EXECUTE *7EK*
SPACE 4,10
ERRNG 10000-* *7DE* HAS OVERFLOWED
BSS 10000-* SPARES (ADJUST ORIGIN BY 5 AS REQUIRED)
CON MSG-1 (T0) = ENTRY ADDRESS - 1
CON RDCT (T1) = RDCT
CON DEST (T2) = DEST
ERRNZ LN-* INCORRECT OVERLAY LENGTH
QUAL *
SPACE 4
END