Trailing-Edge
-
PDP-10 Archives
-
dec-10-omona-u-mc9
-
redall.mac
There are 8 other files named redall.mac in the archive. Click here to see a list.
TITLE REDALL - READ ALL BLOCKS OF ALL DSK UNITS IN SYSTEM
SUBTTL T. HASTINGS 06 OCT 71 V006
VRDALL==6
VWHO==0
VMINOR==0
VEDIT==1
LOC 137
.JBVER: BYTE (3)VWHO(9)VRDALL(6)VMINOR(18)VEDIT
IFNDEF FTRAN,<FTRAN==0> ;ASSUME SEQUENTIAL RATHER THAN RANDOM
IFN FTRAN,<EXTERN RAN,IFIX> ;USE FORTAN LIB RANDOM NOS.
IFNDEF NBLKS,<NBLKS==^D40> ;NO. OF BLOCKS PER GULP
IFNDEF FTSINGLE,<FTSINGLE==0> ;ASSUME NOT SINGLE BLOCK MODE
IFN FTSINGLE,<NBLKS==^D1> ;SINGLE BLOCK AT A TIME FOR USE
; RUNNING SCRIPT WITH ONE JOB PER UNIT
REPEAT 0,<
INSTRUCTIONS:
TYPE:
LOGIN
1,2
RUN DEV:REDALL
REDALL WILL READ ALL DISK UNITS IN SYSTEM(FHA,DPA,DPB,DPC, ETC)
WHETHER THEY ARE IN A FILE STRUCTURE OR NOT USING SUPER USETI
EXCEPT DOWN AND OFF-LINE ONES.
THE 503 MONITOR IS NEEDED INORDER FOR THE BAT BLOCKS TO BE UPDATED.
REDALL RINGS A BELL EACH TIME IT FINDS AN ERROR.
THEN IT PRINTS CYLINDER,SURFACE AND SECTOR IN DECIMAL
FOLLOWED BY CONI BITS 12 THRU 29, THEN THE UNIT NAME.
IF REDALL GET AN UNEXPECTED ERROR RETURN FROM ANY UUO, IT
PRINTS "ABNORMAL ERROR RETURN" AND EXITS TO MONITOR.
IF REDALL READS ALL UNITS (WITH OR WITHOUT ERRORS) IT PRINTS
"ALL DISK UNITS READ" AND EXITS TO THE MONITOR.
REDALL TAKES ABOUT 2 MINUTES FOR EACH RP02 UNIT.
REDALL CAM BE RUN DURING TIME SHARING WITHOUT SLOWING DOWN SYSTEM
APPRECIABLY.
READ ALGORITHM:
A. SEQUENTIAL (FTRAN=0)
READ 40 (DEC.) BLOCK GULPS AT A TIME IN DUMP MODE
IF ERROR, READS EACH BLOCK IN BULP ONE BLOCK AT A TIME
UNTIL IT FINDS THE ERROR OR EXHAUSTS GULP. IT PRINTS
EACH BLOCK IT FINDS BAD ON RE-READ. IF IT DOES NOT FIND
ANY BLOCKS BAD IN GULP ON RE-READ, IT PRINTS FIRST BLOCK
OF GULP AND FLAGS IT WITH AN *. UPON FINDING FIRST
GOOD BLOCK AFTER ONE OR MORE BAD BLOCKS IT RETURNS
TO MAIN LOOP AND READS A 40 BLOCK GULP STARTING WITH THE
BLOCK FOLLOWING THE FIRST GOOD BLOCK.
ALL BLOCKS OF A UNIT BEFORE STEPPING ONTO THE NEXT ONE.
B. RANDOM (FTRAN=1)
RANDOM IS JUST LIE SEQUENTIAL, EXCEPT THAT ONLY ONE GULP
IS READ AT RANDOM ON A UNIT BEFORE STEPPING ONTO NEXT UNIT.
>
MLON ;MULTI LINE LITERALS
;ACS
T=1 ;TEMP
T1=T+1
D=3 ;DISK UNIT NAME
B=4 ;BLOCK NO. ON UNIT
F=5 ;FLAGS
MISBLK==100000 ;MISSED FINDING EXACT BLOCK WITH ERROR IN GULP
OUTLIN==40000 ;DEVICE SHOULD BE OUTPUT A LINE AT A TIME(TTY,LPT)
FIRMIS==20000 ;0 FOR FIRST MISSED RE-READ, 1 AFTERWARDS.
; USED TO EXPLAIN THE * FLAG.
P=6 ;PD LIST
PDLEN==20 ;PD LENGTH
CH=7 ;CHAR AC
E=10 ;ERROR COUNT WITHIN GULP
NN=11 ;CONTAINS JOB NO. IF RUNNING UNDER SCRIPT, ELSO 0
C==1 ;IO CHANNEL FOR SUPER USETI
TC==2 ;OUTPUT CHANNEL FOR ERROR MESSAGES ON DEVICE "TTY"
;DSKSHR PARAMETERS
.STNAM==4 ;CONTAINS FILE STRUCTURE NAME
.UNCHR==5 ;BLOCKS PER CYL, TRACK
.UNBPU==6 ;CONTAINS NO. OF BLOCKS PER UNIT
.DSLEN==10 ;LENGTH OF DSKCHR ARGS
;PARAMTERS
BLKSIZ==^D128 ;NO. WORDS PER BLOCK
;DEFINE SOME SYMBLOS WITH VALUES SUGGESTED BY NAME
; NEEDED SO CAN ASSEMBLE SOURCE UNDER SCRIPT OR NOT
IFN FTSINGLE,<
N00==0
N01==1
N02==2
N03==3
N04==4
N05==5
N06==6
N07==7
N10==10
N11==11
N12==12
N13==13
N14==14
N15==15 ;SCRIPT ONLY HAS 14. DECIMAL JOBS
>
OPDEF PJRST [JRST] ;EQUIVALENT TO PUSHJ P, FOLLOWED BY POPJ P,
BEG: RESET
MOVE P,[IOWD PDLEN-1,PDLIST] ;SETUP PD POINTER
SETZB F,ERRUNI ;CLEAR UNIT NAME OF LAST ERROR
INIT TC,0 ;INIT OUTPUT DEVICE FOR ERROR MESSAGES
SIXBIT /TTY/ ;
XWD OBUF,0
JSP T1,ERRRET ;ERROR
MOVSI T,(SIXBIT /TTY/) ;DEVICE NAME
DEVCHR T, ;DEVICE CHARACTERISTICS
TLNN T,40010 ;TTY OR LPT?
TLZA F,OUTLIN ;NO, CLEAR OUTPUT LINE AT A TIME FLAG
TLO F,OUTLIN ;YES, SET LINE OUTPUT AT A TIME FLAG
ENTER TC,FILNAM ;ENTER FILE NAME IN CASE ASSIGN TTY
JSP T1,ERRRET ;ERROR
IFN FTSINGLE,<
MOVEI NN,N# ;SCRIPT JB NUMBER OR VARIABLE
CAILE NN,100 ;IS IT A VARIABLE?
MOVEI NN,0 ;YES, NOT ASSEM. THRU SCRIPT
JUMPN NN,BEG1 ;ONLY FIRST SCRIPT JOB PRINTS HEADING
>
MOVEI T,[ASCIZ /
?CYL. SURF. SECT. CONI UNIT
?(DEC.) (DEC.) (DEC.) (12-29)
/]
PUSHJ P,MSG ;PRINT HEADING
PUSHJ P,PCRLF ;PRINT CRLF AND OUTPUT
BEG1: MOVEI D,0 ;START AT BEGINNING OF DISKS
LOOP0:
IFN FTSINGLE,<
MOVEI NN,N# ;SCRIPT JOB NUMBER OR VARIABLE
CAILE NN,100 ;IS IT A VARIABLE?
MOVEI NN,0 ;YES, SET SO STEP THRU ALL UNITS
LOOP0A:
>
SYSPHY D, ;GET NEXT PHYSICAL UNIT IN SYSTEM
JSP T1,ERRRET ;ERROR, UUO NO IMPLEMENTED
JUMPE D,FINISH ;0 MEANS DON ALL UNITS
IFN FTSINGLE,<
SOJGE NN,LOOP0A ;IS THIS THE UNIT FOR THIS JOB?
>
MOVEM D,DSKTAB ;STORE NAME FOR DSKCHR
MOVEM D,DSKNM ;STORE NAME FOR INIT
MOVE T,[XWD .DSLEN,DSKTAB] ;GET UNIT CHAR.
DSKCHR T,
JSP T1,ERRRET ;ERROR
TLNN T,200000 ;IS UNIT OFF-LINE?
TLNE T,3000 ;OR DOWN, NO PACK MOUNTED, OR BEING MOUNTED?
JRST LOOP0 ;YES, GO TRY NEXT UNIT
IFE FTRAN,<
MOVEI B,0 ;START AT BLOCK 0 OF UNIT
MOVEI T,[ASCIZ /
?BEGIN READING ALL OF UNIT /]
PUSHJ P,MSG ;TELL WHICH UNIT READING NOW
PUSHJ P,PNTPHY ;UNIT NAME
PUSHJ P,PCRLF ;CRLF
>
IFN FTRAN,<
JSA 16,RAN ;GET RANDOM NO. IN AC 0
JUMP 0
MOVE T,DSKTAB+.UNBPU ;NO. OF BLOCKS PER UNIT
SUBI T,NBLKS ;REDUCE SO AS NOT TO RUN OFF END
FSC T,233 ;CONVERT TO FLOATING POINT
FMP T ;GET FLOATING INTEGER 0 THRU BPU-NBLKS
JSA 16,IFIX ;CONVERT TO INTEGER
JUMP 0
MOVE B,0 ;SETUP RANDOM BLOCK NO.
>
LOOPE: OPEN C,OPENDT ;INIT IN DUMP MODE
JSP T1,ERRRET ;ERROR
LOOP1: MOVEI T,NBLKS ;NO. OF BLOCKS TO READ IN ONE GULP
PUSHJ P,READ ;READ ONE GULP
JRST LOOP0 ;READ PAST END OF UNIT, GO TO NEXT ONE
JRST ERROR ;ERROR, GO FIND EXTEND OF BADNESS
IFE FTRAN,<
JRST LOOP1 ;OK, KEEP READING SEQUENCIALLY
>
IFN FTRAN,<
JRST LOOP0 ;KO, GO TO NEXT UNIT
>
;HERE ON AN ERROR READING AN ENTIRE GULP
ERROR: MOVEI T,C ;DISK CHANNEL NO.
DEVSTS T, ;GET GULP ERROR STATUS IN CASE RE-READ
JSP T1,ERRRET ;ERROR
MOVEM T,GULPER ;DOES NOT FIND ERROR
RELEAS C, ;RELEASE SO MONITOR WILL UPDATE BAT BLOCK
; IF IT AS A 5.03 MONITOR
OPEN C,OPENDT ;SELECT SAME UNIT AGAIN
JSP T1,ERRRET ;ERROR
SUBI B,NBLKS ;BACKUP TO FIRST BLOCK OF GULP WITH ERROR
MOVEI E,NBLKS ;NO. OF TIMES TO READ IN GULP
; IN CASE CANNOT FIND BAD BLOCK
ERROR0: MOVEI T,1 ;READ IN GULPS OF ONLY ONE BLOCK
PUSHJ P,READZ ;READ ONE BLOCK, CLEAR ERROR FLAGS
JRST LOOP0 ;READ PAST END OF UNIT, GO TO NEXT ONE
JRST ERROR1 ;FOUND FIRST ERROR IN BIG GULP
SOJG E,ERROR0 ;OK, KEEP LOOKING FOR FIRST ERROR IN BIG GULP
TLO F,MISBLK ;FLAG THAT ERROR BLOCK WAS NOT FOUND
SUBI B,NBLKS-1 ;PNTERR WILL SUBTRACT 1 BEFORE PRINTING
; BUT LEAVE B ONE PAST FIRST BLOCK IN
; THIS GULP, SO NOT KEEP TRYING THIS ONE.
PUSHJ P,PNTERR ;PRINT ERROR FOR FIRST BLOCK IN GULP
JRST LOOP1 ;READ ANOTHER GULP 1 BLOCK FURTHER
; THAN THIS GULP STARTED, SO OVERLAP
; ALL BUT FIRST BLOCK OF GULP.
;HERE ON ONE BLOCK ERROR RE-READING GULP ONE BLOCK AT A TIME
ERROR1: PUSHJ P,PNTERR ;PRINT ERROR FOR THIS BLOCK
SOJL E,ERROR2 ;LOOKED AT ALL BLOCKS IN GULP YET?
RELEAS C, ;NO, RELEASE SO MONITOR WILL UPDATE BAT BLOCK
; IF IT AS A 5.03 MONITOR
OPEN C,OPENDT ;SELECT SAME UNIT AGAIN
JSP T1,ERRRET ;ERROR
MOVEI T,1 ;KEEP READING BAD REGION ONE BLOCK AT A TIME
PUSHJ P,READZ ;READ ONE BLOCK,CLEAR ERROR FLAGS
JRST ERROR2 ;READ PAST END OF UNIT, RELEASE
JRST ERROR1 ;ANOTHER BAD BLOCK IN THIS BAD REGION
ERROR2: RELEAS C, ;END OF BAD REGION, RELEASE SO
; MONITOR WILL UPDATE BAT BLOCKS(503 MONITOR)
IFE FTRAN,<
JRST LOOPE ;GO READ SOME MORE ON THIS UNIT
>
IFN FTRAN,<
JRST LOOP0 ;GO TO NEXT UNIT
>
;HERE IF UUO ERROR RETURN
ERRRET: TTCALL 3,[ASCIZ /?ABNORMAL ERROR RETURN/]
EXIT
;HERE WHEN READ ALL UNITS
FINISH:
IFE FTRAN,<
TTCALL 3,[ASCIZ /ALL DISK UNITS READ/]
EXIT
>
IFN FTRAN,<
JRST BEG1 ;START ON FIRST UNIT AGAIN
>
;SUBOUTINE TO READ T BLOCKS STARTING AT B
;CHECK FOR ERRORS AND FOR RUNNING OFF END
;INCREMENT B BY T AFTERWARDS
;CALL: MOVE B,FIRST BLOCK TO READ
; MOVEI T,NO.OF BLOCKS TO READ IN ONE GULP
; PUSHJ P,READ
; B WAS ALREADY PAST END OF UNIT
; ERROR READING GULP
; OK READING GULP
READZ: SETSTS C,17 ;CLEAR ERROR FLAGS
READ: CAML B,DSKTAB+.UNBPU ;ALREADY PAST END OF UNIT?
POPJ P, ;YES, GIVE FIRST ERROR RETURN
AOS (P) ;NO, SET FOR NEXT TWO RETURNS
USETI C,B ;POSITION TO BLOCK B
STATZ C,760000 ;ANY ERRORS?
JSP T1,ERRRET ;YES, PRINT MESSAGE AND EXIT
MOVE T1,DSKTAB+.UNBPU ;BLOCKS PER UNIT
SUB T1,B ;DISTANCE TO END OF UNIT
ADD B,T ;INCREMENT B BY NO. OF BLOCK TO READ
CAMLE B,DSKTAB+.UNBPU ;READ PAST END OF UNIT?
MOVE T,T1 ;YES, JUST READ UP TO END
IMULI T,BLKSIZ ;NUM OF WORDS
MOVNS T ;MINUS
HRLM T,IOLIST ;SET - NO. OF WORDS TO READ IN IOLIST
IN C,IOLIST ;READ GULP
CPOPJ1: AOS (P) ;OK RETURN
CPOPJ: POPJ P, ;ERROR RETURN
;SUBROUTINE TO PRINT ERROR BLOCK INFORMATION
;CALL: MOVE B,BLOCK+1 WITH ERROR IN IT
; PUSHJ P,PNTERR
PNTERR: MOVEI CH,7 ;PRINT BELL TO DISTINGUISH FROM OTHER MESS.
; IN CASE PERSON IS NOT NEARBY
PUSHJ P,PNT
TLNN F,MISBLK ;WAS ACTUAL ERROR BLOCK NOT FOUND?
JRST PNT1 ;NO, IT WAS FOUND
TLOE F,FIRMIS ;IS THIS THE FIRST MISS?
JRST PNT1 ;NO, ALREADY EXPLAINED *
MOVEI T,[ASCIZ /?BLOCKS MARKED WITH * FAILED IN A /] ;YES
PUSHJ P,MSG ;PRINT
MOVEI T,NBLKS ;NO. OF BLOCKS IN GULP
PUSHJ P,PNTDEC ;PRINT DECIMAL
MOVEI T,[ASCIZ / BLOCK READ
?BUT NOT ON BLOCK BY BLOCK RE-READ
/]
PUSHJ P,MSG
PNT1: MOVEI CH,"?" ;PRINT LEADING ? IN CASE RUNNING UNDER SCRIPT
PUSHJ P,PNT
MOVE T,B ;ERROR BLOCK+1
SUBI T,1 ;ERROR BLOCK
HRRZ T1,DSKTAB+.UNCHR ;NO. OF BLOCKS PER CYLINDER
IDIVI T,(T1) ;T=CYLINDER, T1=REMAINDER
PUSHJ P,PNTDEC
PUSHJ P,PNTTAB ;PRINT TAB
MOVE T,T1 ;REMAINDER
LDB T1,[POINT 9,DSKTAB+.UNCHR,17] ;BLOCKS PER TRACK
IDIVI T,(T1) ;T=SURFACE NO., T1=SECTOR
PUSHJ P,PNTDEC ;PRINT SURFACE
PUSHJ P,PNTTAB ;PRINT TAB
MOVE T,T1 ;SECTOR
PUSHJ P,PNTDEC
PUSHJ P,PNTTAB ;PRINT TAB
MOVEI T,C ;CHANNEL NO. FOR DISK UNIT
DEVSTS T, ;GET LAST CONI STATUS
JSP T1,ERRRET ;ERROR
TLNE F,MISBLK ;DID RE-READ FAIL TO FIND ERROR?
MOVE T,GULPER ;YES, USE ORIGINAL GULP ERROR CONI
LSH T,-6 ;PRINT BITS 12 THRU 29
PUSHJ P,PNTOCT ;PRINT IT IN OCTAL
MOVEI CH,"*" ;GET SET TO FLAG MISSED RE-READ
TLZE F,MISBLK ;IS TIS A MISSED ERROR ON RE-READ OF GULP?
PUSHJ P,PNT ;YES, APPEND * AFTER CONI WORD.
IFN FTRAN,<
MOVE T,DSKNM ;DISK UNIT NAME
CAMN T,ERRUNI ;SAME AS LAST ERROR?
JRST NOTUNI ;YES, DO NOT PRINT UNIT AGAIN
>
IFN FTSINGLE+FTRAN,<
PUSHJ P,PNTTAB ;PRINT TAB
PUSHJ P,PNTPHY ;PRINT UNIT NAME
>
IFN FTRAN,<
NOTUNI: MOVE T,DSKNM ;REMENBER THIS UNIT NAME
MOVEM T,ERRUNI ;FOR NEXT TIME
>
PJRST PCRLF ;PRINT CRLF AND RETURN
;OCTAL PRINT
;CALL: MOVE T,#
; PUSHJ P,PNTOCT
PNTOCT: MOVE T1,[POINT 3,T,17]
OCT1: ILDB CH,T1
ADDI CH,"0" ;CONVERT TO ASCIZ
PUSHJ P,PNT ;PRINT
CAME T1,[POINT 3,T,35] ;FINISHED OCTAL
JRST OCT1 ;NO, KEEP PRINTING
POPJ P,
;DECIMAL PRINT
;CALL: MOVE T,#
; PUSHJ P,PNTDEC
; T1 RESPECTED
PNTDEC: PUSH P,T1
PUSHJ P,DIGPNT
POP P,T1
POPJ P,
DIGPNT: IDIVI T,^D10
HRLM T1,(P)
JUMPE T,.+2
PUSHJ P,DIGPNT
HLRZ CH,(P)
ADDI CH,"0"
PNT: SOSG OBUF+2
OUTPUT TC,
IDPB CH,OBUF+1
POPJ P,
;ROUTINE TO PRINT A STRING
;CALL: MOVEI T,ADR OF STRING
; PUSHJ P,MSG
MSG: HRLI T,440700 ;SETUP BYTE POINTER
MSG1: ILDB CH,T ;GET NEXT CHAR
JUMPE CH,CPOPJ ;RETURN ON NULL
PUSHJ P,PNT ;PRINT CHAR
JRST MSG1 ;LOOP BACK FOR MORE
;SUBROUTINE TO PRINT PHYSICAL UNIT NAME
PNTPHY: MOVE T,[POINT 6,DSKNM] ;BYTE POINTER
PNTUNI: ILDB CH,T ;GET NEXT CHAR
JUMPE CH,CPOPJ ;FINISHED WHEN GET NULL
ADDI CH,40 ;CONVERT SIXBIT TO ASCIZ
PUSHJ P,PNT ;PRINT
JRST PNTUNI ;LOOP
;ROUTINE TO PRINT TAB
PNTTAB: MOVEI CH,11 ;ASCIZ TAB
JRST PNT
;ROUTIN TO PRINT CRLF
PCRLF: MOVEI CH,15 ;CR
PUSHJ P,PNT
MOVEI CH,12 ;LF
PUSHJ P,PNT ;PRINT CHAR
TLNE F,OUTLIN ;TTY OR LPT LINE AT A TIME OUTPUT?
OUTPUT TC, ;YES
POPJ P,
;DATA AREA
ERRUNI: 0 ;UNIT NAME OF LAST ERROR
FILNAM: SIXBIT /REDALL/ ;FILE NAME FOR DEVICE TTY
SIXBIT /LST/ ;EXTENSION
0
0
;OPEN UUO ARGS:
OPENDT: XWD 0,17 ;DUMP MODE
DSKNM: 0 ;DEVICE NAME
0 ;BUFFER HEADERS
OBUF: BLOCK 3 ;OUTPUT BUFFER
GULPER: 0 ;CONI ON GULP ERROR
; USED IN CASE RE-READ FINDS NO ERRORS
PDLIST: BLOCK PDLEN ;PD LIST
IOLIST: IOWD NBLKS*BLKSIZ,BUFFER ;IO LIST FOR IN UUO
0 ;END OF LIST
DSKTAB: BLOCK .DSLEN ;DSKCHR ARGS AND VALUES
BUFFER: BLOCK NBLKS*BLKSIZ ;READ IN HERE
END BEG