FTN4,L PROGRAM TXMD0(3,90),91711-16106 REV.2001 791017. C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C THIS PROGRAM IS THE "FATHER" FOR THE DIAGNOSTICS "TXMD1". C IT WILL RETRIVE ALL THE NECCESARY PARRAMETERS AND RELEASE C THE EQT LOCK IF THE DIAGNOSTICS WILL BE ABORTED, AND INITIALIZE C BACK THE TRACKS USED IN THE DIAGNOSTIC TO ORIGINAL POSITION. C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C TO RUN THE HP-IB DISC (7906/20/25H) DIAGNOSTICS YOU HAVE TWO C OPTIONS: DIRECT AND INDIRECT MODE. IN THE INDIRECT MODE THE PROGRAM C WILL COME BACK TO YOU RETREIVING ALL NECESSARY PARAMETRS. C TO RUN IN THE INDERCT MODE ENTER: RU,TXMD0. C C IN THE DIRECT MODE YOU WILL SUPPLY ALL THE PARAMETRS IN THE RUN C COMMAND. TO RUN IN THIS MODE ENTER: C RU,TXMD0,IP1,IP2,IP3,IP4,IP5 C WHERE: IP1=LOGLU (WHERE ALL ERROR MESSAGES WILL BE PRINTED). C IP2=HP-IB DISC LU. C IP3=DISC DRIVE ADDRESS. C IP4=DRIVE TYPE (7906,7920 OR 7925) C IP5=1/0. STOP / DO NOT STOP AFTER THE FIRST FAILURE. C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C C C C DIMENSION INAM(3),IP(5),IBF(20),ISC(2),IHD(2),ICY(2),IPR(5) DIMENSION IBF1(160),ISTAT(2),ID(5),IW1(19) C C DATA IW1/2HTX,2HMD,2H1 ,2H- ,2H: ,2HRE,2HAD,2HY ,2HDR,2HIV,2HE., +2H E,2HNT,2HER,2H ",2H ",2H ,,2HCR,2H / CALL RMPAR(IP) C C C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C LOCK PROGRAM INTO MEMORY. C C ICD=22 IOPT=1 CALL EXEC(ICD,IOPT) C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C LOAD IFL1 WITH DATA SO IFL1#IFL2 C C IFL1=2HYE IFL2=7 C C C LOAD THE FAULTS COUNTER TO 0. C IKL=0 C C SET IUN=0 IUN=0 C C C C C C PRINT MESSAGES ON THE CRT CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C IF THIS THE DIRECT MODE SKIP THE MESSAGES. THE DIRECT MODE GETS C THE PARAMETERS REQUIRED FROM RMPAR. C C C IF IP(4)#0 SKIP THIS MESSAGES C IF(IP(4).NE.0)GO TO 603 C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C WRITE(1,978) 978 FORMAT(/,"TXMD1 - : HP-IB DISC DIAGNOSTIC",/,/,/,/, +"TXMD1 - : THE DIAGNOSTIC NEEDS TO USE ONE DISC LU FOR ITS" +,/,10X,"TESTS. THE DATA ON THIS LU WILL BE DESTROYED.",/,10X,"THE +DIAGNOSTIC WILL NOT DAMAGE ANY OTHER DATA OUTSIDE THIS" +,/,10X,"LU. BEFORE YOU ASSIGN THE LU FOR THE DIAGNOSTICS USE," +,/,10X,"MAKE SURE YOU DO NOT NEED THE DATA ON THIS LU.",/,/,10X, +"TURN ON FORMAT SWITCH BEFORE CONTINUE.") C GO TO 885 C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C DIRECT MODE SECTION CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C IP(1)=LOGLU (WHERE ALL ERROR MESSAGES WILL BE PRINTED). C IP(2)=HPIB DISC LU C IP(3)=DISC DRIVE ADDRESS C IP(4)=DRIVE TYPE (7906,7920 OR 7925) C IP(5)=1/0. STOP/DO NOT STOP AFTER THE FIRST FAILURE. C C C C 603 ILST=IP(1) IF(ILST.EQ.0)ILST=1 ILU=IP(2) IADR=IP(3) IDVID=IADR ISTOP=IP(5) C C GO AND VERIFY THE ILU AND IADR C C GO TO 660 C C 880 IF(IP(4).EQ.7906)GO TO 102 IF(IP(4).EQ.7920)GO TO 104 IF(IP(4).EQ.7925)GO TO 105 C C GO TO 990 C C C END OF DIRECT MODE SECTION. C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C C SET UNIT NUMBER TO 0. C 885 IUN=0 C C RTRIEVE ALL NECESARY PARAMETERS. C 806 WRITE(1,107) 107 FORMAT(/,"TXMD1 - : ENTER DISC LU") CALL INDC(IK,ISTAT) IEX=2HEX IF(ISTAT(1).EQ.IEX)GO TO 777 ILU=IK C C C C C C VERIFY THAT THIS IS A HP-IB DISC LU. C C FIRST CHECK THAT THIS IS A 32 TYPE DRIVER, MEAN ITS A DISC LU: C C C CHEKC IF ILU<64 C 660 IF(ILU.GT.63)GO TO 666 C C CALL EXEC(13,ILU,ISD1,ISD2,ISD3) IST1=IAND(ISD1,37400B) IST1=IST1/256 IF(IST1.NE.32B)GO TO 666 C C C CALL EXEC(1,ILU+2200B,IBF,5,0,5) C ITA=IAND(IBF(5),100000B) IF(ITA.NE.0)GO TO 808 666 WRITE(1,807)ILU 807 FORMAT(/,"TXMD1 - : LU",2X,I3,2X,"IS NOT AN HP-IB DISC LU.") GO TO 806 C C C C C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C IF IT IS DIRECT MODE GO TO CHECK THE DRIVE ADDRESS. 808 IF(IP(4).NE.0)GO TO 770 C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C SEND LAST WARNINIG TO OPERATOR BEFORE STARTING THE TEST. C C C C WRITE(1,804)ILU,ILU 804 FORMAT(/,/,"TXMD1 - : THE DATA ON LU",2X,I3,2X,"WILL BE" +" DESTROYED.",/,10X,"DO YOU WANT TO USE LU",2X,I3,2X,"? (YES" +" OR NO)") READ(1,803)IYE 803 FORMAT(A2) C C IF(IYE.EQ.IEX)GO TO 777 C C IF(IYE.NE.IFL1)GO TO 806 C C C 798 WRITE(1,279) 279 FORMAT(/,/,"TXMD1 - : ENTER DISC ADDRESS") CALL INDC(IK,ISTAT) IF(ISTAT(1).EQ.IEX)GO TO 777 IADR=IK IDVID=IADR C C CHECK IF IADR IS EQUAL TO DISC ADDRESS IN THE SYSTEM TRACK MAP C C 770 ITB=IAND(IBF(3),17B) C IF(IADR.EQ.ITB)GO TO 802 WRITE(1,801)ILU,ITB,IADR 801 FORMAT(/,/,"TXMD1 - : THE ADDRESS OF LU",2X,I3,2X,"IN THE" +" SYSTEM TABLE IS",2X,I3,2X,".",/,/,10X,"ARE YOU SURE THAT THE" +" CURRENT ADDRESS IS",2X,I3,2X,"? (YES OR NO)") READ(1,799)IYB 799 FORMAT(A2) C C IF(IYB.EQ.IEX)GO TO 777 C C IF(IYB.NE.IFL1)GO TO 798 C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C IF IT IS DIRECT MODE, GO BACK TO DIRECT MODE SECTION. 802 IF(IP(4).NE.0)GO TO 880 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C WRITE(1,309) 309 FORMAT(/,/,"TXMD1 - : ENTER LIST DEVICE LU") C C CALL INDC(IK,ISTAT) IF(ISTAT(1).EQ.IEX)GO TO 777 C C ILST=IK C C IF(ILST.EQ.0)ILST=1 C C 106 WRITE(1,409) 409 FORMAT(/,/,"TXMD1 - : ENTER DRIVE TYPE (7906,7920 OR 7925)") C CALL INDC(IK,ISTAT) IF(ISTAT(1).EQ.IEX)GO TO 777 C C C ITYP=IK C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C IF IT IS DIRECT MODE, SET IP(4) TO NEW DRIVE TYPE AND GO BACK TO C DIRECT MODE SECTION. C IF(IP(4).EQ.0)GO TO 882 IP(4)=ITYP GO TO 880 C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C 882 IDVID=IADR C C C C C IF(ITYP.EQ.7906)GO TO 102 IF(ITYP.EQ.7920)GO TO 104 IF(ITYP.EQ.7925)GO TO 105 C C C ITYP IS NOT THE CORRECT ONE. PRINT MESSAGE AND RETURN. C C 990 WRITE(1,993) 993 FORMAT(/,/,"TXMD1 - : YOU DID NOT INPUT A VALID DRIVE TYPE.") C C GO TO 106 C C 102 ITYP=0 NSCT=48 IT=7906 GO TO 99 104 ITYP=1 NSCT=48 IT=7920 GO TO 99 105 ITYP=3 NSCT=64 IT=7925 C C 99 CALL XSTAT(ILU,IDVID,ISTAT(1),ISTAT(2),IER) CALL DECST(ISTAT,ID) C C C CHECK IF DRIVE READY C C IF(IER.EQ.4)GO TO 1111 GO TO 2222 1111 CALL EXEC(2,201B,IW1,19) C C READ(1,*)IQ C GO TO 99 C C C C 2222 IF(ITYP.NE.ID(4))GO TO 3434 GO TO 4545 3434 WRITE(1,5656)IT,IT 5656 FORMAT(/,/,"TXMD1 - : DRIVE TYPE IS NOT ",I4, +" PER STATUS REPORT. IS ",I4," THE",/,10X,"RIGHT DRIVE TYPE ?", +" (YES OR NO)") C C READ(1,606)IY IYS=2HYE INO=2HNO IF(IY.EQ.IYS)GO TO 4545 IF(IY.EQ.INO)GO TO 106 GO TO 3434 C C C IF IT IS DIRECT MODE GO TO 717. C 4545 IF(IP(4).NE.0)GO TO 717 C C 6055 WRITE(1,605) 605 FORMAT(/,/,/,/,"TXMD1 - : THE DIAGNOSTIC HAS TWO OPTIONS:", +/,10X,"IT CAN STOP AFTER IT FOUND THE FIRST FAILURE OR,", +/,10X,"IT CAN CONTINUE WITH THE REST OF THE TEST EVEN IF", +/,10X,"IT FOUND FAILURES.", +/,/,10X,"DO YOU WANT IT TO STOP AFTER THE FIRST FAILURE ?", +/,10X," (YES OR NO)") C C IFL1=2HYE READ(1,606)IFL2 606 FORMAT(A2) C C IF(IFL2.EQ.IEX)GO TO 777 C C C C C SET ISTOP INO=2HNO ISTOP=3 IF(IFL2.EQ.INO)ISTOP=0 IF(IFL1.EQ.IFL2)ISTOP=1 IF(ISTOP.EQ.3)GO TO 6055 C C C THE PROGRAM WILL COMPAR IFL1 WITH IFL2 AFTER EACH STEP AND C MAKE THE RIGHT BRANCHING. C C C C C C CALCULATE THE CYLINDERS,ICY(1),ICY(2),IHD(1),IHD(2), THAT THE C DIAGNOSTICS WILL USE IN THE DESTACTIVE TESTS. C 717 ITR=0 IS=0 C C IDK=IDVID CALL XGTAD(ILU,IDK,ITR,IS,ICY(1),IHD(1),ISC(1)) IDK=IDVID ITR=1 CALL XGTAD(ILU,IDK,ITR,IS,ICY(2),IHD(2),ISC(2)) C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C CALCULATE THE PARAMETERS C C C C 15 14 13 12:11 10 9 8 7 6:5 4 3 2 1 0 C IPR(1) -----------:-------------:----------- C : ILU : ILST C C C C 15 14 13:12 11:10 9 8 7:6 5 4 3:2 1 0 C IPR(2) --------:-----:--------:-------:----- C :ITYP : IHD(2) : IHD(1): IADR C C C C 15 14 13 12 11:10:9 8 7 6 5 4 3 2 1 0 C IPR(3) --------------:--:------------------- C : I: ICY(1) C : S: C : T: C : O: C : P: C C C 15 14 13 12 11 10:9 8 7 6 5 4 3 2 1 0 C IPR(4) -----------------:------------------- C : ICY(2) C C C C C C C C C 15 14 13 12:11 10 9 8 7 6:5 4 3 2 1 0 C IPR(5) -----------:-------------:----------- C : ISC(2) : ISC(1) C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C IPR(1) C ILU1=ILU*64 IPR(1)=IOR(ILST,ILU1) C C IPR(2) C IH1=IHD(1)*8 IH2=IHD(2)*128 ITYP1=ITYP*2048 IPR(2)=IOR(IADR,IH1) IPR(2)=IOR(IPR(2),IH2) IPR(2)=IOR(IPR(2),ITYP1) C C C IPR(3) C ISTP=ISTOP*1024 IPR(3)=IOR(ICY(1),ISTP) C C C IPR(4) C C C IPR(4)=ICY(2) C C C C C IPR(5) C IS2=ISC(2)*64 IPR(5)=IOR(IS2,ISC(1)) C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C LOCK DISC EQT C IOP=1 CALL EQTRQ(IOP,ILU) C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C READ FULL SECTOR OF THE TRACK THAT THE DIAGNOSTIC GOING TO USE C SAVE THE FIRST TWO WORDS THAT CONTAIN THE INFORMATION OF THE C CYLINDER,HEAD AND THE SPD BITS. AFTER THE END OF THE DIAGNOSTIC C IT WILL USE THIS INFORMATION TO RECOVER THE TRACKS TO ORIGINAL C POSITION. C C C IC1=ICY(1) IH1=IHD(1) IS1=ISC(1) CALL DID09(ILU,IDVID,IPAS,IBF1,IC1,IH1,IS1,ISTAT) C C C IF WAS NOT SUCCESSFULL READ, SET IER=1. C C IF(IPAS.NE.0)IER=1 C C C SAVE THE REQUIRED INFORMATION C IKP1=IBF1(18) IKP2=IBF1(19) C C C C C READ THE SECTOR FROM THE SECOND TRACK. C C IC2=ICY(2) IH2=IHD(2) IS2=ISC(2) CALL DID09(ILU,IDVID,IPAS,IBF1,IC2,IH2,IS2,ISTAT) C C IF(IPAS.NE.0)IER=1 IKP3=IBF1(18) IKP4=IBF1(19) C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C UNLOCK DISC EQT C C IOP=0 CALL EQTRQ(IOP,ILU) C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C SCHEDULE THE DIAGNOSTIC PROGRAM - TXMD1. C C C INAM(1)=2HTX INAM(2)=2HMD INAM(3)=2H1 ICOD=23 CALL EXEC(ICOD,INAM,IPR(1),IPR(2),IPR(3),IPR(4),IPR(5)) C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C LOCK DISC EQT. C C IOP=1 C CALL EQTRQ(IOP,ILU) C C C C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C INITIALIZE BACK TRACKS TO ORIGINAL POSITION. C C WRITE(1,343) 343 FORMAT(/,/,"TXMD1 - : WAITING FOR PROGRAM TO CLEAN UP THE", +" DISC.") C C C IF THE READ FULL SECTOR WAS NOT SUCCESSFULL SKIP THE INITIALIZATION C PART, AND PRINT MESSAGE. C C IF(IER.EQ.1)GO TO 555 C C CALCULATE REQUIRED PARAMETERS. C IKP=IAND(160000B,IKP2) IKP=IKP/8192 ISPD=IKP C C IKP=IAND(17400B,IKP2) IKP=IKP/256 IH2=IKP IC2=IKP1 IS2=0 IC1=ICY(1) IH1=IHD(1) IS1=0 CALL INIT(ILU,IDVID,IPAS,IC1,IH1,IS1,IC2,IH2,IS2, +ISPD,ID,IBF1,NSCT,ISTAT) C C C C IF IT NOT SUCCESSFULL PRINT MESSAGE. C C IF(IPAS.NE.0)GO TO 555 C C C C INTIALIZE SECOND TRACK. C C IKP=IAND(160000B,IKP4) IKP=IKP/8192 ISPD=IKP C C IKP=IAND(17400B,IKP4) IKP=IKP/256 IH2=IKP C C IC2=IKP3 IS2=0 IC1=ICY(2) IH1=IHD(2) IS1=0 C C CALL INIT(ILU,IDVID,IPAS,IC1,IH1,IS1,IC2,IH2,IS2, +ISPD,ID,IBF1,NSCT,ISTAT) C C IF(IPAS.EQ.0)GO TO 8888 C C C SEND ERROR MESAGE IN CASE THE TRACKS WERE NOT INITIALIZED CORRECTLY. C C 555 WRITE(1,7878)ICY(1),IHD(1),ICY(2),IHD(2),ILU 7878 FORMAT(/,/,"TXMD1 - : CYLINDER",X,I3,X,"HEAD",X,I1,X, +"AND CYLINDER",X,I3,X,"HEAD",X,I1,X,/,10X,"OF LU",X,I2,X, +"COULD NOT BE CLEANED UP. PLEASE CHECK", +/,10X,"BEFORE USING THIS LU.") C C IF ILST#1 PRINT ALSO ON THE LIST DEVICE. C IF(ILST.EQ.1)GO TO 8888 WRITE(ILST,7878)ICY(1),IHD(1),ICY(2),IHD(2),ILU C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C UNLOCK DISC EQT. C C C 8888 IOP=0 CALL EQTRQ(IOP,ILU) C C REMIND OPERATOR TO PUT FORMAT SWITCH IN THE ORIGINAL POSITION. C C WRITE(1,6565) C C C IF ILST#1 PRINT ON LIST DEVICE. C IF(ILST.EQ.1)GO TO 777 WRITE(ILST,232) C C C 777 WRITE(1,232) 232 FORMAT(/,/,"TXMD1 - :END OF DIAGNOSTIC.") C C 6565 FORMAT(/,/,"TXMD1 - : CHECK ALL THE SWITCHES BEFORE USING THE", +" DISC !!!!") CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C END