IDENT 6DP,MSFW PERIPH BASE MIXED SST *COMMENT 6DP - DDP/ECS DRIVER. COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992. TITLE 6DP - DDP/ECS DRIVER. SPACE 4 *** 6DP - DDP/ECS DRIVER. * R. A. LARSEN. 72/10/01. * R. E. TATE. 73/10/17. * L. L. CLINTON 78/07/28. SPACE 4 *** *6DP* PROVIDES THE CAPABILITY TO ACCESS THE ECS I * AND ECS II SECONDARY STORAGE DEVICES VIA THE DC135 OR * THE PARITY ENHANCED DC145 DDP. SPACE 4 *** ORGANIZATION OF ECS I SUBSYSTEM. * * EQUIPMENT TYPE = *DP* * * SECTORS/TRACK = *SLDE* (20B, 40B, 100B, 200B). * * WORDS PER DEVICE = 131,072 FOR 131K ECS I. * 262,144 FOR 262K ECS I. * 524,288 FOR 524K ECS I. * 1,048,576 FOR 1048K ECS I. * 2,097,152 FOR 2096K ECS I. * * MAXIMUM DATA RATE = 80K WORDS PER SECOND. FOR PP/CM TRANSFER. SPACE 4 *** ORGANIZATION OF ECS II SUBSYSTEM. * * EQUIPMENT TYPE = *DP*. * * SECTORS/TRACK = *SLDE* (20B, 40B, 100B, 200B). * * WORDS PER DEVICE = 131,072 FOR 131K ECS II. * 262,144 FOR 262K ECS II. * 524,288 FOR 524K ECS II. * 1,048,576 FOR 1048K ECS II. * 2,097,152 FOR 2096K ECS II. * * MAXIMUM DATA RATE = 160K WORDS PER SECOND FOR 2X PPS. SPACE 4 ** ENTRY CONDITIONS. * * * (T4) = CHANNEL, IF PREVIOUSLY RESERVED. * (T5) = EST ORDINAL. * (T6) = TRACK. * (T7) = SECTOR. SPACE 4 *CALL COMPMAC *CALL COMPCHI *CALL COMSDFS *CALL COMSMSP *CALL COMSPIM SPACE 4 * ASSEMBLY CONSTANTS. CH EQU 0 DDP CHANNEL SC EQU 5000 DDP SELECT CODE DEC MICRO 1,, 6DP DECK NAME TITLE ** ENTRY POINT TRANSFERS. ORG MSFW CON PRS PRESET ADDRESS RDS CON 0 ENTRY UJN RDS. ENTER DRIVER WDS CON 0 ENTRY UJN WDS. EMS SPACE 4,10 ** EMS - END MASS STORAGE OPERATION. * * ENTRY (T4) = CHANNEL, IF PREVIOUSLY RESERVED. * (T5) = EQUIPMENT. * * EXIT (A) = 0. * * 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 - END MASS STORAGE OPERATION LDN 0 RJM DSW *DSWM* PROCESSING UJN .EMSX RETURN RDS SPACE 4 ** RDS - READ SECTOR. * * ENTRY (A) = BUFFER ADDRESS FOR SECTOR. * * EXIT (A) < 0, IF UNRECOVERABLE PARITY ERROR. * * CALLS LDE. RDS. STM RDSA SET BUFFER ADDRESS LDC 50S12+RDS UJN LDE REQUEST READ WDS SPACE 4 ** WDS - WRITE SECTOR. * * ENTRY (A) = BUFFER ADDRESS FOR SECTOR. * * EXIT (A) < 0, IF UNRECOVERABLE PARITY ERROR. * * CALLS LDE. WDS. STM WDSA SET BUFFER ADDRESS LDC 51S12+WDS * UJN LDE REQUEST WRITE LDE SPACE 4,10 ** LDE - TRANSFER DATA TO/FROM ECS. * * ENTRY (A) = 6/ OPTION,12/ ENTRY * 50 = READ. * 51 = WRITE. * (LDEF) = EM TRACK SHIFT COUNT. * (RDSA) = BUFFER ADDRESS IF READ. * (WDSA) = BUFFER ADDRESS IF WRITE. * * EXIT TO *RDSX*/*WDSX* WITH (A) =0 IF NO ERROR. * TO *ERR* IF ERROR. * * CALLS SFN, STS. LDE STD T0 SAVE ENTRY ADDRESS SHN -14 STI D1 SET OPERATION LDEA SBN 50 * SBN 51 (DRIVER SET FOR WRITE) ZJN LDE0 IF DRIVER SET FOR REQUESTED OPERATION RAM LDEA LDM LDED SET PROPER JUMP LMN .A&.B ERRPL LDE3.1-LDED-40 JUMP OUT OF RANGE ERRPL LDE5-LDED-40 JUMP OUT OF RANGE STM LDED LDE0 LDI T0 SET RETURN ADDRESS STM LDEE * REENTER HERE FOR ERROR RETRY. LDE1 LDN 1 RJM DSW CHECK FOR CHANNEL RESERVED LDD T6 COMPUTE HEADER ADDRESS LPC 3777 LDEF SHN 4 * SHN 4+EMTS (EMTS = EM TRACK SHIFT COUNT) STD CM+1 SHN -6 STD CM SHN -6 RAD CM LDC ** LARGEST TRACK VALUE LDEB EQU *-1 SBD T6 MJN LDE4 IF TRACK TOO LARGE LDD T7 SBM SLM PJN LDE4 IF SECTOR TOO LARGE LDD CM+1 LPN 77 SHN 6 ADD T7 LDE3 RAD CM+1 SHN -14 RAD CM LDI D1 LOAD READ OR WRITE FUNCTION LPN 7 RJM SFN SEND FUNCTION LDN 2 OAM CM,CH OUTPUT ADDRESS LDI D1 SET WORD COUNT SHN -3 LDED UJN LDE3.1 READ OPERATION * UJN LDE5 (WRITE OPERATION) LDE3.1 IAM *,CH RDSA EQU *-1 READ BUFFER ADDRESS .A EQU LDE3.1-LDED UJN LDE6 CHECK STATUS LDE4 LDN ADDE SET ADDRESS ERROR UJN LDE10 PROCESS ERROR LDE5 OAM *,CH WDSA EQU *-1 .B EQU LDE5-LDED FJM *,CH IF DATA NOT ACCEPTED BY CONTROLLER LDE6 STM ERRB SAVE BYTE COUNT DCN CH+40 * (T0) = P ADDRESS OF IAM/OAM INSTRUCTION. LDE7 SOD T0 ZJN LDE9 IF TIME OUT LDN 4-1 SELECT STATUS RJM SFN SELECT FUNCTION IAN CH+40 DCN CH+40 STM STSA LMN 2 NJN LDE7.1 IF NOT ACCEPT STATUS LDC ** CHECK REMAINING BYTE COUNT ERRB EQU *-1 NJN LDE8 IF INCOMPLETE TRANSFER LDI D1 LPN 70 NJN LDE12 IF HEADER OPERATION LJM * RETURN LDEE EQU *-1 LDE7.1 SCN 13 ZJN LDE7 IF NO PARITY ERROR LDE8 LDN PARE&DSTE LDE9 LMN DSTE LDE10 UJN ERR PROCESS ERROR LDE12 LDC 5000-50 SET DATA WORD COUNT RAI D1 LDN 2 SET DATA BUFFER ADDRESS RAM RDSA LDN 2 RAM WDSA LDD T7 SHN 6 SBD T7 ADM SLM LJM LDE3 PROCESS DATA SFN SPACE 4,10 ** SFN - SELECT FUNCTION. * * ENTRY (A) = FUNCTION CODE - 1. * * EXIT FUNCTION SELECTED. * TO *ERR* IF FUNCTION TIMEOUT. SFN2 ACN CH SFN SUBR ENTRY/EXIT ADC SC+1 FAN CH+40 SFN1 IJM SFN2,CH IF SELECT ACCEPTED SBN 1 NJN SFN1 IF NOT TIMED OUT LDN FTOE * UJN ERR PROCESS ERROR ERR SPACE 4,10 ** ERR - ERROR PROCESSOR. * * ENTRY (A) = ERROR CODE, IF ENTRY AT *ERR*. * PARE = PARITY ERROR. * ADDE = ADDRESS ERROR. * DSTE = WRITE TIMEOUT. (STATUS ERROR) * FTOE = FUNCTION TIMEOUT. * EXIT TO *7DP* IF ENTRY AT *ERR*. * TO *7SP* IF ENTRY AT *ERR2*. ERR DCN CH+40 STM ERRA SAVE ERROR CODE ERR1 MSERR 7DP,* UJN ERR3 LOAD *7DP* ERR2 MSERR 7SP,* ERR3 LJM LEP1 LOAD ERROR PROCESSOR DSW SPACE 4,10 ** DSW - DRIVER SERVICE PROCESSING. * * ENTRY (A) = 1, CHECK IF CHANNEL RESERVED. * (A) = 0, RELEASE CHANNEL. * * EXIT (A) = 0. * (LDEF) = EM TRACK SHIFT COUNT. * (MSEA) = EM TRACK SHIFT COUNT. * * USES T0, T1, CM - CM+4. * * MACROS MONITOR. DSW2 RAI T0 AOD CM+2 DSW3 LDM TCHS-12,CM+2 STD T0 LDD T4 DSWA SBN CH NJN DSW2 IF MORE INSTRUCTIONS TO MODIFY DSW SUBR ENTRY/EXIT STD CM+3 SET *DSWM* REQUEST CODE LMM CHRV LPN 1 ZJN DSWX IF CORRECT CHANNEL STATUS LDM CHRV SET CHANNEL STATUS AND FLAGS FOR *DSWM* STD CM DSW1 LDD OA CRM SBUF,ON LDM SBUF NJN DSW1 IF OUTPUT REGISTER BUSY LDD MA WRITE *DSWM* PARAMETERS CWD T4 MONITOR DSWM LDD MA READ UPDATED CHANNEL CRD T4 LDD CM+3 SET CHANNEL STATUS STM CHRV LJM DSW3 MODIFY INSTRUCTIONS SPACE 4 ** CHANNEL TABLE. CHTL DSWA TERMINATE CHANNEL TABLE TCHS CHTB SBUF BSS 5 SCRATCH BUFFER PRS SPACE 4 ** PRS - PRESET DRIVER. * * ENTRY (CM - CM+4) = EST ENTRY. PRS LDD CM+4 GET MAXIMUM TRACK SHN 3 ADK TDGL CRM SBUF,ON SOM SBUF ADC 4000 STM LDEB LDI D1 GET EM TRACK SHIFT COUNT SHN -6 LPN 3 ADC SHNI+4 STM LDEF LJM SMSX RETURN OVERFLOW MSFW,PPFW-5,CMR 7DP MSOVL 7512,T2,EPFW-1,(DDP/ECS ERROR PROCESSOR.) SPACE 4,10 ***** 7DP - DDP/ECS ERROR PROCESSOR. * W. E. GOEBEL 78/10/18. * SPACE 4 *** *7DP* IS CALLED WHEN AN UNRECOVERED ECS ABORT HAS OCCURRED. * *7RP* IS CALLED TO COMPLETE THE INITIAL DATA TRANSFER AFTER * AN ECS PARITY ERROR HAS OCCURRED DURING AN ECS READ FUNCTION. * FOR AN ECS PARITY ERROR DURING A ECS READ OR WRITE FUNCTION * *7DP* CALLS *7SP* TO PERFORM SINGLE WORD REREAD/REWRITE OF THE * BLOCK IN AN ATTEMPT TO RECOVER FROM THE ERROR. *7DP* EXITS * TO CALL *7ER* OR *7ES* TO ISSUE APPROPRIATE FINAL ERROR * MESSAGES. MSE SPACE 4 QUAL BEGIN BSSN PRS ERRA BSSN 1 ERROR FLAG WORD ADDR BSSN 1 BUFFER ADDRESS ECSA BSSN 2 ECS ADDRESS (2 BYTES) WDCT BSSN 1 WORD COUNT OF BLOCK RECF BSSN 1 ERROR TYPE FLAG SPSA BSSN 1 *7SP* STATUS ERRNG DEFW-* *7DP*/COMMON ERROR PROCESSOR CONFLICT END BSSN QUAL * MSE SPACE 4,10 ** MSE - MASS STORAGE ERROR PROCESSOR. * * ENTRY (T1) = ERRA. * (T2) = RDCT. * (T4 - T7) = DRIVER PARAMETERS. * (RDCT) = ERROR PROCESSOR INTERFACE WORD. * BIT 6 = 0 IF FIRST RETRY ATTEMPT. * (DEST) = ERROR PROCESSING CONTROL WORD. * BIT 12 = 1 IF *7MP* IS REPORTING AN * UNRECOVERED PARITY ERROR. * ((D1)) BIT 0 = 0 IF READ, 1 IF WRITE. * ((D1)) BITS 3-11 = TOTAL BYTE COUNT (5 FOR HEADER * OPERATION, 500 FOR DATA OPERATION). *T ERRA 2/ OP,1/ D,1/ A,1/ S,1/ R,6/ EC * OP = OPERATION. * 0 = READ HEADER. * 1 = READ DATA. * 2 = WRITE HEADER. * 3 = WRITE DATA. * D = DDP TYPE. * 0 = DC145. * 1 = DC135. * A = *7RP*/*7SP* ABORT FLAG. * S = *7SP* CALL FLAG (SET IF CALLED). * R = *7RP* CALL FLAG (SET IF CALLED) * EC = ERROR CODE AS DEFINED IN *COMSMSP*. * (ERRB) = BYTES LEFT TO BE TRANSFERED IF DISCONNECT ON I/O. * * EXIT (DEDT) = ERROR PROCESSING CONTROL WORD. * BITS AFFECTED BY THIS OVERLAY - * BITS 3 - 0 = *6DP* DRIVER TYPE. * BIT 4 = 1 IF RETURN TO *7SP*. * (DEEC) = ERROR CODE. * (DENR) = 0 IF FIRST RETRY ATTEMPT, ELSE UNCHANGED. * (DERC) = 0 IF FIRST RETRY ATTEMPT, ELSE UNCHANGED. * (DERW) = 1 IF WRITE REQUEST, 0 IF READ REQUEST. * (DEST) = 0. * (DEWR) = 0 IF FIRST RETRY ATTEMPT, ELSE UNCHANGED. * (DEXA) = EXIT ADDRESS. * (RDCT) = ERROR PROCESSOR INTERFACE WORD. * BIT 6 = 1. * * USES CM - CM+4, T0 - T2. * * MACROS ENDMS, MSERR. DDP ENTRY *7DP* ENTRY LDM LDEF STM MSEA USE EXISTING INSTRUCTION TO SAVE SPACE SFA EST,T5 READ EST ENTRY ADK EQDE CRD CM LDD CM+4 READ DILL OF MST ENTRY SHN 3 ADN DILL CRD CM SOD CM+3 SET DDP TYPE LPN 1 STD CM+2 LDI D1 SET READ WRITE FLAG LPN 1 STM DERW ERRPL DERW-* STORE DESTROYS CODE ERRNZ REDP CODE DEPENDS OF VALUE OF *REDP* ERRNZ WRIP-1 CODE DEPENDS OF VALUE OF *WRIP* ZJN MSE1 IF READ OPERATION SHN 2 RAD CM+2 SET WRITE OPERATION LDN WDSA-RDSA MSE1 ADC RDSA SET BUFFER LOCATION STD CM LDC LDE1 SAVE ERROR EXIT RETURN ADDRESS STM DEXA ERRPL DEXA-* STORE DESTROYS CODE LDI T2 LPC 100 NJN MSE1.1 IF NOT FIRST RETRY ATTEMPT STM DENR INITIALIZE *NON-RECOVERABLE ERROR* FLAG STM DERC INITIALIZE RETRY COUNT STM DEWR INITIALIZE *DATA WRITTEN/READ* FLAG LDD HN SET RECOVERY IN PROGRESS FLAG STI T2 LDD T4 SAVE INITIAL CHANNEL STM MSFW MSE1.1 LDK /COMSDFS/D6DP SAVE DRIVER TYPE FOR *7EK* STM DEDT ERRPL DEDT-* STORE DESTROYS CODE LDI T1 SCN 77 NJN MSE3 IF CALLED FROM *7RP* OR *7SP* STM DEST INITIALIZE ERROR PROCESSING CONTROL WORD ERRPL DEST-* CODE DESTROYED LDI CM STM ADDR SET BUFFER ADDRESS LDI D1 SHN -5 SCN 76 STM WDCT SHN -6 ZJN MSE2 IF HEADER OPERATION LCN 2 RAI CM LDC 50-5000 RESET DRIVER FOR HEADER OPERATION RAI D1 LDN 2 FLAG ERROR IN DATA OPERATION MSE2 LMD CM+2 SHN 13-2 APPEND STATUS FLAGS TO *ERRA* RAI T1 MSE3 LPC 2000 ZJN MSE4 IF HEADER OPERATION * DATA ADDRESS = HEADER ADDRESS + SECTOR LIMIT + 77 * SECTOR LDD T7 SHN 6 SBD T7 ADM SLM MSE4 STD T2 SHN -14 STD T0 * HEADER ADDRESS = TRACK * SECTOR LIMIT * 101 + SECTOR LDD T6 LPC 3777 MSEA SHN 4 * SHN 4+EMTS (EMTS = EM TRACK SHIFT COUNT) STD CM+4 SHN -6 STD CM+3 SHN -6 RAD CM+3 LDD CM+4 LPN 77 SHN 6 ADD T7 ADD T2 RAD CM+4 STM ECSA+1 SHN -14 ADD T0 RAD CM+3 STM ECSA LDI CM SAVE BUFFER ADDRESS FOR *7EK* STD T2 LDN 0 DEFAULT IS NO FIRST OR SECOND WORD PRESENT STD CM LDM STSA DEFAULT STATUS IS LAST STATUS STD CM+1 LDM WDCT ADD WORD COUNT TO MESSAGE STD CM+2 LDI T1 SAVE ERROR CODE LPN 77 STM DEEC ERRPL DEEC-* CODE DESTROYED LMK PARE NJN MSE8 IF NOT PARITY ERROR LDD T2 SBK EPFW+1-502 PJN MSE8 IF BUFFER OVERLAYS ERROR PROCESSOR AREA LDI T1 SHN 21-13 MJN MSE6 IF WRITE OPERATION SHN 13-6 MJN MSE6 IF *7RP* ALREADY CALLED MSERR 7RP,* UJN MSE9 EXECUTE *7RP* MSE6 LDI T1 SHN 21-10 MJN MSE8 IF *7RP* OR *7SP* ABORTED SHN 10-7 MJN MSE10 IF *7SP* ALREADY CALLED LPN 20 SET SINGLE WORD READ FOR DC135 SHN 12-4 RAM ECSA LDC ERR2 SET RETURN ADDRESS TO *7SP* STM DEXA LDN 20 SET RETURN TO ERROR PROCESSOR RAM DEDT MSE8 LDD MA STORE *7EK* PARAMETERS ADN 2 CWD CM MSERR 7EK,* MSE9 LJM LEP1 LOAD ERROR PROCESSOR MSE10 LDM DEST SHN 21-12 MJN MSE11 IF AT LEAST ONE ERROR WAS UNRECOVERED LDI T1 SHN 21-12 PJN MSE12 IF A HEADER OPERATION ENDMS MSERR 7ES,* UJN MSE9 LOAD ERROR PROCESSOR MSE11 ENDMS ISSUE ERRLOG AND DAYFILE MESSAGES MSERR 7ER,* UJN MSE9 LOAD ERROR PROCESSOR MSE12 LDN 0 CLEAR MESSAGE FROM *MS2W* STD T1 LDD CP ADK MS2W CWD T1 LJM LDE1 RETRY THE OPERATION HERE SPACE 4 ERRNG 10000-* *7DP* HAS OVERFLOWED BSS 10000-* SPARES (ADJUST ORIGIN BY 5 AS REQUIRED) CON DDP-1 (T0) = ENTRY ADDRESS - 1 CON ERRA (T1) = ERROR FLAG WORD CON RDCT (T2) = RDCT ERRNZ LN-* INCORRECT OVERLAY LENGTH QUAL * 7RP MSOVL 7613,T2,EPFW-1,(DDP/ECS READ ERROR PROCESSOR.) SPACE 4,10 ***** 7RP - DDP/ECS REMAINING BLOCK ERROR PROCESSOR. * * J. L. LARSON. 78/07/28. SPACE 4,10 *** *7RP* IS CALLED BY *7DP* WHEN A ECS PARITY ERROR HAS * OCCURRED DURING AN ECS READ FUNCTION. *7RP* RETRIEVES THE * DATA IN ERROR FROM THE DDP PORT AND COMPLETES THE READ OF * THE REMAINING ECS WORDS. SPACE 4,10 *** ENTRY CONDITIONS. * * (T4) = CHANNEL NUMBER. * (T5) = ECS EST ORDINAL. * CHANNEL RESERVED. * (WDCT) = TOTAL WORD COUNT (1 OR 100B). * (ERRA) = AS DOCUMENTED IN *7DP*. * (ERRB) = REMAINING BYTE COUNT. * (ECSA - ECSA+1) = ECS FWA. * (ADDR) = PP BUFFER FWA. SPACE 4,10 *** EXIT CONDITIONS. * * (ERRA) BIT 6 SET TO INDICATE *7RP* CALLED. * (ERRA) BIT 10 SET IF *7RP* ABORT. * (ECSA - ECSA+1) = UNCHANGED. * (ADDR) = UNCHANGED. * (WDCT) = UNCHANGED. SPACE 4,10 ** COMMON DECKS. FWDL$ EQU 1 SELECT FORWARD LINKED LIST *CALL COMPCHL RRP SPACE 4,10 ** RRP - DDP/ECS REMAINING BLOCK ERROR PROCESSOR. DRP ENTRY *7RP* ENTRY * MODIFY CHANNEL INSTRUCTIONS. LDN 0 RRP1 RAD T1 LDI T1 SAVE LINK TO NEXT INSTRUCTION LPN 37 STD CM LDD T4 MODIFY CHANNEL INSTRUCTION SBD CM RAI T1 LDD CM NJN RRP1 IF MORE CHANNEL INSTRUCTIONS * READ ERROR DATA FROM DDP PORT. RRP2 LDI T2 CALCULATE NUMBER OF BYTES TO INPUT ZJN RRP5 IF NO BYTES TO INPUT STD CM+2 SBN 10*5 MJN RRP3 IF NOT FULL RECORD TO BE READ LDN 10*5 STD CM+2 RRP3 LDM ERRA CHECK DDP TYPE (1 = DC135, 0 = DC145) LPC 1000 STD CM SET MAINTENANCE MODE ADDRESS BIT SHN 4-11 LMN 20 RJM RED READ ECS DATA NJN ABT IF ERROR DATA NOT SUCCESSFULLY READ STD CM SBD CM+2 DECREMENT REMAINING BYTE COUNT RAI T2 ZJN END IF NO MORE ECS WORDS TO READ * READ REMAINING ECS WORDS. STD CM+2 SET BYTES TO INPUT LDN 7 MASTER CLEAR PORT RJM SFC DCN CH+40 LDN 0 RJM RED READ ECS DATA STI T2 SAVE REMAINING BYTE COUNT NJN RRP2 IF NOT ALL DATA TRANSFERRED SUCCESSFULLY RRP5 UJN END RETURN TO *7DP* SFC SPACE 4,10 ** SFC - SELECT FUNCTION. * * ENTRY (A) = FUNCTION CODE - 1. * * EXIT CHANNEL ACTIVATED. * TO *ABT*, IF CHANNEL PREVIOUSLY ACTIVE, OR FUNCTION * TIMEOUT. SFC2 ACN CH SFC SUBR ENTRY/EXIT ADC SC+1 AJM ABT,CH IF ILLEGAL CHANNEL STATE FAN CH SFC1 IJM SFC2,CH IF SELECT ACCEPTED SBN 1 NJN SFC1 IF NOT FUNCTION TIMEOUT * UJN ABT ABORT ABT SPACE 4,10 ** ABT - ABORT PROCESSOR. ABT DCN CH+40 LDC 400 SET *7RP* ABORT FLAG * UJN END RETURN TO *7DP* END SPACE 4,10 ** END - END PROCESSOR. END ADD HN INDICATE *7RP* CALLED RAM ERRA LJM ERR1 RETURN TO *7DP* RED SPACE 4,10 ** RED - READ ECS DATA. * * ENTRY (A) = FUNCTION CODE (NORMAL OR MAINTENANCE MODE READ). * (CM) = ADDRESS BIT FOR MAINTENANCE MODE READ. * (CM+2) = NUMBER OF BYTES TO INPUT. * * EXIT (A) = BYTE COUNT REMAINING AFTER INPUT. * TO *ABT*, IF ECS ADDRESS NOT ACCEPTED. * * USES T1, CM, CM+1, CM+3. * * CALLS SFC. RED1 LDN 10 INCREMENT ECS ADDRESS OFFSET RAD CM+1 LCN 10*5 DECREMENT BYTE COUNT RAD T1 RED2 NJN RED1 IF MORE BYTES TO COUNT LDM ECSA+1 CALCULATE ECS ADDRESS FOR NEW READ RAD CM+1 SHN -14 ADM ECSA RAD CM LDD CM+3 SELECT READ FUNCTION RJM SFC LDN 2 OUTPUT ECS ADDRESS OAM CM,CH NJN ABT IF ADDRESS NOT ACCEPTED LDD CM+2 INPUT ECS DATA IAM *,CH REDA EQU *-1 DCN CH+40 STD T1 LDN 4-1 SELECT STATUS RJM SFC IAN CH+40 DCN CH+40 LDD T1 RETURN BYTE COUNT AFTER INPUT RED SUBR ENTRY/EXIT STD CM+3 LDM WDCT CALCULATE BYTE COUNT ALREADY READ SHN 2 ADM WDCT SBI T2 STD T1 ADM ADDR SET PP BUFFER ADDRESS FOR NEW READ STM REDA LDN 0 STD CM+1 LDD T1 SCN 7 LJM RED2 CALCULATE ECS ADDRESS OFFSET SPACE 4,10 HERE TERMINATE LINKED CHANNEL INSTRUCTIONS SPACE 4,10 ERRNG 10000-* *7RP* HAS OVERFLOWED BSS 10000-* SPARES CON DRP-1 (T0) = ENTRY ADDRESS - 1 CON CH01$ (T1) = FIRST CHANNEL INSTRUCTION ADDRESS CON ERRB (T2) = POINTER TO REMAINING BYTE COUNT ERRNZ LN-* INCORRECT OVERLAY LENGTH QUAL * 7SP MSOVL 7555,T2,DDMD+4,(DDP/ECS SINGLE WORD RETRY PROCESSOR.) SPACE 4 ***** SINGLE WORD RETRY ERROR PROCESSOR. * * L. L. CLINTON 78/07/28. SPACE 4,10 *** *7SP* IS INITIALLY CALLED BY *7DP* WHEN AN ECS PARITY ERROR * HAS OCCURRED DURING AN ECS READ OR WRITE FUNCTION. * *7SP* REREADS OR REWRITES THE DATA ONE WORD AT A TIME * AND COMPARES PREVIOUSLY READ DATA WITH THE NEW DATA. * *7SP* CALLS *7MP* TO ISSUE AN ERROR MESSAGE WHENEVER A * SINGLE WORD READ OR WRITE FUNCTION IS UNSUCCESSFUL AND * WHENEVER THE DATA READ DOES NOT COMPARE. AFTER ISSUING * THE ERROR MESSAGE, *7MP* RECALLS *7SP* TO CONTINUE THE * SINGLE WORD READ OR WRITE ERROR RECOVERY. SPACE 4,10 *** ENTRY CONDITIONS. * * (ADDR) = PP BUFFER FWA. * (ECSA - ECSA+1) = ECS FWA. * (ERRA) = AS DOCUMENTED IN *7DP*. * (WDCT) = TOTAL WORD COUNT (1 OR 100B). SPACE 4,10 *** EXIT CONDITIONS. * * FOR *7DP* - * (ERRA) BIT 7 SET TO INDICATE *7SP* CALLED. * (ERRA) BIT 10 SET IF *7SP* ABORT. * * FOR *7MP* - * (RECF) BIT 0 SET IF DATA DID NOT COMPARE. * (RECF) BIT 1 SET IF ECS ERROR ON REREAD/REWRITE. * (SWBF - SWBF+4) = DATA FROM SINGLE WORD REREAD. SPACE 4,10 ** COMMON DECKS. FWDL$ EQU 1 SELECT FORWARD LINKED LIST *CALL COMPCHL 7SP SPACE 4,10 QUAL SWBF EQU /7SP/OFFW SINGLE WORD RETRY BUFFER QUAL * ERRPL SWBF+4-* RETRY BUFFER OVERLAYS CODE MSW SPACE 4,10 ** MSW - MOVE SINGLE WORD FROM PP BUFFER TO SINGLE WORD BUFFER. * * ENTRY (MSWA) PP BUFFER ADDRESS FOR MOVE. MSW SUBR ENTRY/EXIT LDD MA CWM **,ON MSWA EQU *-1 SBN 1 CRM SWBF,ON UJN MSWX RETURN STS SPACE 4,10 ** STS - GET DDP STATUS. * * EXIT (SPSA) = DDP STATUS. * * CALLS SFC. STS SUBR ENTRY/EXIT STS1 LDN 4-1 ISSUE STATUS FUNCTION RJM SFC IAN CH+40 STM SPSA SAVE DDP STATUS LPN 2 DCN CH+40 NJN STSX IF FUNCTION ACCEPTED UJN STS1 RETRY SFC SPACE 4,10 ** SFC - SELECT FUNCTION AND OUTPUT ECS ADDRESS. * * ENTRY (A) = FUNCTION CODE-1. * (CM - CM+1) = ECS ADDRESS TO OUTPUT. * * EXIT (A) = 2. * TO *ABT*, IF FUNCTION TIMEOUT OR ADDRESS NOT * ACCEPTED. SFC2 ACN CH LDN 2 SFC SUBR ENTRY/EXIT ADC SC+1 AJM ABT,CH IF ILLEGAL CHANNEL STATUS FAN CH SFC1 IJM SFC2,CH IF SELECT ACCEPTED SBN 1 NJN SFC1 IF NOT TIMEOUT * UJN ABT ABORT ABT SPACE 4,10 ** ABT - ABORT *7SP*. ABT LDC 400-1 SET *7SP* ABORT FLAG DCN CH+40 * UJN END RETURN TO *7DP* END SPACE 4,10 ** END - END *7SP*. END ADC 200+1 SET *7SP* CALLED FLAG RAI T2 LJM ERR1 RETURN TO *7DP* SPACE 4,10 DSP ENTRY *7SP* ENTRY SSP LDN 1 RESERVE CHANNEL RJM DSW * LDN 0 * SET CHANNEL INSTRUCTIONS. SSP1 RAD T1 LINK TO NEXT CHANNEL INSTRUCTION LDI T1 SAVE LINK TO NEXT CHANNEL INSTRUCTION LPN 37 STD CM LDD T4 MODIFY CHANNEL INSTRUCTION SBD CM RAI T1 LDD CM NJN SSP1 IF MORE CHANNELS TO MODIFY STM RECF SSP2 SOM WDCT CHECK WORD COUNT MJN END IF ALL WORDS PROCESSED LDN 7 MASTER CLEAR PORT RJM SFC DCN CH+40 LDI D1 CHECK FUNCTION LPN 1 NJN SSP3 IF WRITE LDI T2 SET SINGLE WORD READ FUNCTION FOR DC145 SHN 5-11 LPN 40 LMN 40 SSP3 RJM SFC SELECT FUNCTION OAM ECSA,CH OUTPUT ADDRESS LDM ADDR STM MSWA STM SSPB RJM MSW MOVE SINGLE WORD LDI D1 LPN 1 NJN SSP4 IF WRITE LDN 5 IAM SWBF,CH INPUT DATA UJN SSP5 CHECK STATUS SSP4 LDN 5 OAM SWBF,CH OUTPUT DATA FJM *,CH IF DATA NOT ACCEPTED SSP5 STD CM SAVE REMAINING BYTE COUNT DCN CH+40 ZJN SSP6 IF DATA TRANSFERED RJM MSW RESTORE DATA FROM PP BUFFER SSP6 LDN 5 STD T1 RJM STS GET STATUS LDD CM NJN SSP9 IF DATA NOT TRANSFERED * COMPARE DATA. SSP7 SOD T1 MJN SSP8 IF END OF COMPARE LDM **,T1 SSPB EQU *-1 LMM SWBF,T1 ZJN SSP7 IF DATA COMPARES AOM RECF SSP8 LDM SPSA SCN 2 ZJN SSP10 IF NO ERROR IN STATUS SCN 10 NJN SSP9 IF NOT *WRITE BUSY* RJM STS GET STATUS UJN SSP8 RECHECK STATUS SSP9 LDN 2 SSP10 RAM RECF ZJN SSP11 IF NO ERROR MESSAGE ENDMS MSERR 7MP CALL *7MP* TO ISSUE ERROR MESSAGE SSP11 AOM ECSA+1 INCREMENT EXTENDED MEMORY ADDRESS SHN -14 RAM ECSA LDN 5 INCREMENT PP BUFFER ADDRESS RAM ADDR LJM SSP2 READ NEXT WORD 7SP SPACE 4,10 HERE TERMINATE LINKED CHANNEL INSTRUCTIONS. SPACE 4,10 ERRNG 10000-* *7SP* HAS OVERFLOWED BSS 10000-* SPARES CON DSP-1 (T0) = ENTRY ADDRESS - 1 CON CH01$ (T1) = FIRST CHANNEL INSTRUCTION ADDRESS CON ERRA (T2) = POINTER TO ERROR FLAG WORD ERRNZ LN-* INCORRECT OVERLAY LENGTH QUAL * 7MP MSOVL 7656,T2,SWBF+4,(DDP/ECS ERROR MESSAGE PROCESSOR.) SPACE 4,10 ***** ERROR MESSAGE PROCESSOR. * * L. L. CLINTON 78/08/15. SPACE 4,10 *** *7MP* IS CALLED BY *7SP* TO ISSUE INTERMEDIATE ECS ERROR * MESSAGES WHEN A SINGLE WORD REREAD OR REWRITE IS * UNSUCCESSFUL OR WHEN THE DATA READ DOES NOT COMPARE WITH * THE PREVIOUSLY READ DATA. AFTER ISSUING THE ERROR * MESSAGES, *7MP* RECALLS *7SP* TO CONTINUE THE SINGLE WORD * READ OR WRITE ERROR RECOVERY. SPACE 4,10 7MP SPACE 4,10 ** DMP - DAYFILE MESSAGE PROCESSOR. * * ENTRY (ADDR) = ADDRESS OF WORD IN BUFFER. * (STSB) = LAST READ/WRITE DDP FUNCTION STATUS. * (RECF) = 9/, 1/R, 1/C. * R = 1, IF REREAD/REWRITE FAILED TO COMPLETE * OR IF THE STATUS TAKEN AFTER THE * REREAD/REWRITE INDICATES AN ERROR. * C = 1, IF DATA RECEIVED ON READ RETRY DID * NOT COMPARE WITH THE DATA RECEIVED * THE FIRST TIME. * (SWBF - SWBF+4) = DATA FROM SINGLE WORD RE-READ. * (ECSA - ECSA+1) = EXTENDED MEMORY ADDRESS. * (MSGH - MSGH+4) = *EMB* MESSAGE HEADER. * (HEDR - HEDR+11) = BML MESSAGE HEADER, PREPARED BY * *7EK* THROUGH *7EP*. * (DDMD - DDMD+4) = DEVICE DEPENDENT MESSAGE DATA. DMP ENTRY *7MP* ENTRY LDM DERW CALCULATE DRIVER ENTRY POINT SHN 1 ADC RDS ERRNZ RDS+2-WDS CODE DEPENDS ON VALUE STD T0 LDI T2 ZJN DMP1 IF NO EXIT ADDRESS SET STI T0 DMP1 LDC ERR2 SET RETURN TO *7SP* STI T2 LDI T1 ZJN DMP2 IF RECOVERED ERROR LDM DEST LPC -2000 LMC 2000 SET *UNRECOVERED ERROR* FLAG STM DEST LDC 1S17 DMP2 LMM DERW SET READ/WRITE FLAG IN MESSAGE SHN 1 LMD HN APPEND RETRY COUNT STM HEDR+6 LDN 5 SET BML MESSAGE LENGTH STM MSGH+3 LDM ADDR STM DMPA STM DMPB LDD MA ADN 3 CWM **,ON DMPA EQU *-1 CWM SWBF,ON LDM SPSA STM DSFA+1 SET FUNCTION STATUS IN MESSAGE LDM ECSA STM DSFA+3 ADD XM ADDRESS TO MESSAGE LDM ECSA+1 STM DSFA+4 LDN 1 APPEND WORD COUNT TO MESSAGE STM DSFA+2 STM DSFA INDICATE FIRST DATA WORD PRESENT LDI T1 LMN 2 ZJN DMP3 IF ONLY ONE WORD TO BE REPORTED AOM MSGH+3 LDN 2 RAM DSFA INDICATE SECOND DATA WORD PRESENT LDI T1 LMN 1 NJN DMP3 IF WORD NOT TO BE TRANSFERED LDD MA ADN 4 CRM **,ON DMPB EQU *-1 DMP3 LJM LEP CALL *7EQ* TO ISSUE BML MESSAGE SPACE 4,10 ERRNG 10000-* *7MP* HAS OVERFLOWED BSS 10000-* (SPARES) CON DMP-1 (T0) = ENTRY ADDRESS - 1 CON RECF (T1) = RECF CON ERXA (T2) = ERXA ERRNZ LN-* INCORRECT OVERLAY LENGTH QUAL * SPACE 4 END