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