RECORDFORMAT PARMF(INTEGER DEST,SRCE,P1,P2,P3,P4,P5,P6) RECORDFORMAT DDTFORM(INTEGER SER,PTS,PROPADDR,STATUS, C CCA,RQA,LBA,ALA,STATE,IW1,IW2,SENSE1,SENSE2,SENSE3,SENSE4,C REPSNO,BASE,ID,DLVN,MNEMONIC,STRING (6)LAB,BYTEINTEGER MECH) ! RECORDFORMAT PROPFORM(INTEGER TRACKS,CYLS,PPERTRK,BLKSIZE,TOTPAGES,C RQBLKSIZE,LBLKSIZE,ALISTSIZE,KEYLEN,SECTINDX) ! RECORDFORMAT RQBFORM(INTEGER LSEGPROP,LSEGADDR,LBPROP,LBADDR,ALPROP,C ALADDR,W6,W7,W8) ! RECORDFORMAT COMF(INTEGER OCPTYPE,IPLDEV,SBLKS,SEPGS,NDISCS, C DLVNADDR,GPCTABSIZE,GPCA,SFCTABSIZE,SFCA,SFCK,DIRSITE, C DCODEDA,SUPLVN,TOJDAY,DATE0,DATE1,DATE2, C TIME0,TIME1,TIME2,EPAGESIZE,USERS,CATTAD,EXDQADDR, C BYTEINTEGER NSACS,RESV1,SACPORT1,SACPORT0, C NOCPS,RESV2,OCPPORT1,OCPPORT0, C INTEGER ITINT,CONTYPEA,GPCCONFA,FPCCONFA,SFCCONFA, C BLKADDR,RATION,SMACS,TRANS,LONGINTEGER KMON, C INTEGER DITADDR,SMACPOS,SUPVSN,PSTVA,SECSFRMN,SECSTOCD, C SYNC1DEST,SYNC2DEST,ASYNCDEST,MAXPROCS,INSPERSEC,ELAPHEAD, C COMMSRECA,STOREAAD,PROCAAD,SFCCTAD,DRUMTAD,TSLICE,FEPS, C MAXCBT,SP1,SP2,SP3,SP4,SP5,SP6,SP7, C LSTL,LSTB,PSTL,PSTB,HKEYS,HOOT,SIM,CLKX,CLKY,CLKZ, C HBIT,SLAVEOFF,INHSSR,SDR1,SDR2,SDR3, C SDR4,SESR,HOFFBIT,S2,S3,S4,END) CONSTINTEGER DISCSNO=X'00200000' CONSTINTEGER SD=X'58000000'; ! STRING DESRCPTR FOR ADDRSS LIST ! EXTERNALROUTINESPEC DEFINE(STRING (63)S) EXTERNALROUTINESPEC DOUT18(RECORDNAME P) EXTERNALROUTINESPEC DPON(RECORDNAME P) EXTERNALROUTINESPEC DPOFF(RECORDNAME P) EXTERNALROUTINESPEC PROMPT(STRING (15) S) CONSTBYTEINTEGERARRAY H(0:15)='0','1','2','3','4','5','6','7', '8','9','A','B','C','D','E','F'; STRING (8) FN STRHEX(INTEGER VALUE) STRING (8) S *LD_S; *LSS_8; *ST_(DR ) *INCA_1; *STD_TOS ; *STD_TOS *LSS_0; *LUH_VALUE; *MPSR_X'24'; ! SET CC=1 *SUPK_L =8 *LD_TOS ; *ANDS_L =8,0,15; ! FORCE ZONE CODE TO 0 *LSS_H+4; *LUH_X'18000010' *LD_TOS ; *TTR_L =8 RESULT =S END EXTERNALROUTINE TRACKREAD(STRING (63) S) !*********************************************************************** !* READS A COMPLETE TRACK WITH CYCLIC CHECKS ETC FROM EDS * !*********************************************************************** ROUTINESPEC DUMP(INTEGER CYL,TRK,ADDR,L) RECORD P(PARMF) RECORDNAME DDT(DDTFORM) RECORDNAME PROP(PROPFORM) RECORDNAME RQB(RQBFORM) RECORDNAME COM(COMF) BYTEINTEGERARRAY DATA(0:19*1024) INTEGER STATE,MNEM,SLOT,DSNO,TRACK,CYL,PPTRK INTEGER I,J,ALA,LBA,KEYLEN COM==RECORD(X'80C00000') CYCLE I=0,1,19*1024 DATA(I)=X'EE' REPEAT PRINTSTRING("DEVICE??") AND RETURN UNLESS LENGTH(S)=4 CYCLE I=0,1,3 BYTEINTEGER(ADDR(MNEM)+I)=CHARNO(S,I+1) REPEAT PROMPT("CYL:") READ(CYL) PROMPT("TRACK:") READ(TRACK) ! ! CLAIM THE DISC FOR PRIVATE USE ! P_DEST=DISCSNO+1 P_P2=1 P_SRCE=1 P_P3=MNEM P_P1=M'TKRD' DPON(P) DPOFF(P) UNTIL P_P1=M'TKRD' SLOT=P_P3 DSNO=P_P2 IF DSNO=0 THEN C PRINTSTRING("TRACK READ CLAIM FAILS ") AND RETURN DDT==RECORD(INTEGER(COM_DITADDR+SLOT*4)) PROP==RECORD(DDT_PROPADDR) KEYLEN=PROP_KEYLEN ALA=DDT_ALA LBA=DDT_LBA RQB==RECORD(DDT_RQA) INTEGER(LBA)=X'00C03E00';!DIAGREAD &IGNORE SB&LB INTEGER(ALA)=SD+19*1024 INTEGER(ALA+4)=ADDR(DATA(0)) ! RQB_W7=X'1E001300'; ! SEEK CYL & DO CHAIN RQB_W8=CYL<<16!TRACK; ! SEEK DATA P_DEST=DSNO P_SRCE=2 P_P6=ADDR(DATA(0)) P_P5=X'80000000'!19*1024 P_P2=CYL<<16!TRACK P_P1=M'TKRD' DOUT18(P) IF P_P2#0 THEN START ; ! FAILURE PRINTSTRING('CYL ') WRITE(CYL,1) PRINTSTRING(' TRK ') WRITE(TRACK,1) PRINTSTRING(' FAULTY ') PRINTSTRING(STRHEX(P_P3)." ") CYCLE I=0,4,12 PRINTSTRING(STRHEX(INTEGER(P_P6+I))." ") REPEAT NEWLINE FINISH PRINTSTRING('TRACK READ COMPLETE ') ! RETURN DEVICE P_DEST=DISCSNO+1 P_P3=SLOT STATE=0 P_P2=0 DPON(P) DEFINE("ST9,.LP") SELECT OUTPUT(9) DUMP(CYL,TRACK,ADDR(DATA(0)),19*1024) SELECT OUTPUT(0) RETURN ROUTINE DUMP(INTEGER CYL,TRK,ADD, LENGTH) INTEGER I, K, END, SPTR, VAL STRING (132) S ADD=ADD&(-32) PRINTSTRING(" DUMP OF CYL&TRK ".STRHEX(CYL<<16!TRK)) NEWLINE END = ADD+LENGTH; I = 1 S = " " UNTIL ADD >= END CYCLE *LDTB_X'18000020'; *LDA_ADD *VAL_(LNB +1); *JCC_3,<INVL> IF I = 0 THEN START CYCLE K = ADD,4,ADD+28 -> ON IF INTEGER(K) # INTEGER(K-32) REPEAT S = "O"; -> UP FINISH ON: CHARNO(S,2) = '('; SPTR = 3 CYCLE I = 28,-4,0 CHARNO(S,SPTR) = H((ADD>>I)&15) SPTR = SPTR+1 REPEAT CHARNO(S,SPTR) = ')' CHARNO(S,SPTR+1) = ' ' SPTR = SPTR+2 CYCLE K = ADD,4,ADD+28 VAL = INTEGER(K) CYCLE I = 28,-4,0 CHARNO(S,SPTR) = H((VAL>>I)&15) SPTR = SPTR+1 REPEAT CHARNO(S,SPTR) = ' ' SPTR = SPTR+1 REPEAT CHARNO(S,SPTR) = ' ' SPTR = SPTR+1 CYCLE K = ADD,1,ADD+31 I = BYTEINTEGER(K)&X'7F' UNLESS 32 <= I <= 95 THEN I = ' ' CHARNO(S,SPTR) = I SPTR = SPTR+1 REPEAT CHARNO(S,SPTR) = ' ' SPTR = SPTR+1 CHARNO(S,SPTR) = NL BYTEINTEGER(ADDR(S)) = SPTR PRINTSTRING(S) S = " " UP: ADD = ADD+32 I = 0 REPEAT RETURN INVL: PRINTSTRING("ADDRESS VALIDATION FAILS ") END ; !ROUTINE DUMP END EXTERNALROUTINE FLAGTRACK(STRING (63) S) !*********************************************************************** !* FLAGS A SINGLE TRACK BY WRITING A HOME ADDRESS WITH TRKCHECK SET * !*********************************************************************** RECORD P(PARMF) RECORDNAME DDT(DDTFORM) RECORDNAME PROP(PROPFORM) RECORDNAME RQB(RQBFORM) RECORDNAME COM(COMF) BYTEINTEGERARRAY DATA(0:1024) INTEGER STATE,MNEM,SLOT,DSNO,TRACK,CYL,PPTRK INTEGER I,J,ALA,LBA,KEYLEN COM==RECORD(X'80C00000') CYCLE I=0,1,1024 DATA(I)=0 REPEAT PRINTSTRING("DEVICE??") AND RETURN UNLESS LENGTH(S)=4 CYCLE I=0,1,3 BYTEINTEGER(ADDR(MNEM)+I)=CHARNO(S,I+1) REPEAT PROMPT("CYL:") READ(CYL) PROMPT("TRACK:") READ(TRACK) ! ! CLAIM THE DISC FOR PRIVATE USE ! P_DEST=DISCSNO+1 P_P2=1 P_SRCE=1 P_P3=MNEM P_P1=M'FLTK' DPON(P) DPOFF(P) UNTIL P_P1=M'FLTK' SLOT=P_P3 DSNO=P_P2 IF DSNO=0 THEN C PRINTSTRING("FLAG TRACK CLAIM FAILS ") AND RETURN DDT==RECORD(INTEGER(COM_DITADDR+SLOT*4)) PROP==RECORD(DDT_PROPADDR) KEYLEN=PROP_KEYLEN ALA=DDT_ALA LBA=DDT_LBA RQB==RECORD(DDT_RQA) DATA(0)=2 DATA(1)=CYL>>8 DATA(2)=CYL&255 DATA(3)=0 DATA(4)=TRACK INTEGER(LBA)=X'80000300';! WRITE HOME ADDRESS INTEGER(ALA)=SD+5 INTEGER(ALA+4)=ADDR(DATA(0)) ! RQB_W7=X'1E001300'; ! SEEK CYL & DO CHAIN RQB_W8=CYL<<16!TRACK; ! SEEK DATA P_DEST=DSNO P_SRCE=2 P_P6=ADDR(DATA(0)) P_P5=X'80000000'!1024 P_P2=CYL<<16!TRACK P_P1=M'FLTK' DOUT18(P) IF P_P2#0 THEN START ; ! FAILURE PRINTSTRING('CYL ') WRITE(CYL,1) PRINTSTRING(' TRK ') WRITE(TRACK,1) PRINTSTRING(' FAULTY ') PRINTSTRING(STRHEX(P_P3)." ") CYCLE I=0,4,12 PRINTSTRING(STRHEX(INTEGER(P_P6+I))." ") REPEAT NEWLINE FINISH PRINTSTRING('TRACK FLAGGED ') ! RETURN DEVICE P_DEST=DISCSNO+1 P_P3=SLOT STATE=0 P_P2=0 DPON(P) RETURN CONSTBYTEINTEGERARRAY H(0:15)='0','1','2','3','4','5','6','7', '8','9','A','B','C','D','E','F'; END ENDOFFILE