$ od -c -N 50000 [Indigo]<AltoSource>TFSSOURCES.DM!2 0000000 377 \0 \0 T f s . d \0 373 227 e 020 036 \0 \0 0000020 376 001 \0 200 216 / / T f s . d - 0000040 d e f i n i t i o n s f i l e 0000060 f o r d r i v i n g t h e 0000100 T r i d e n t w i t h T F 0000120 S \r / / C o p y r i g h t X 0000140 e r o x C o r p o r a t i o n 0000160 1 9 7 9 , 1 9 8 0 , 1 9 8 0000200 1 \r \r / / \t L a s t m o d i f 0000220 i e d J u n e 2 7 , 1 9 8 0000240 1 2 : 1 7 P M b y T a 0000260 f t \r \r / / F o r m a t o f 0000300 f i l e D i s k D e s c r i 0000320 p t o r : \r / / D a t a P a 0000340 g e 1 : T h i s i s m 0000360 o s t l y e m p t y . F i 0000400 r s t l T F S K D H e a d e r 0000420 w o r d 376 001 \0 262 323 s h a v e 0000440 t h e \r / / \t i n i t i a l 0000460 p o r t i o n o f t h e T 0000500 F S K D s t r u c t u r e r 0000520 e c o r d e d - - r e m a i 0000540 n d e r e m p t y \r / / D a 0000560 t a P a g e s 2 t h r o u 0000600 g h n ( n i s a t m o 0000620 s t 5 ) . T h e s e h a v 0000640 e b i t t a b l e \r / / \t ( 0000660 K D H . d i s k B T S i z e t 0000700 o t a l w o r d s ) . \r / / 0000720 T h e v i r t u a l d i s k 0000740 a d d r e s s e s o f a l 0000760 l d a t a p a g e s a r e 0001000 k e p t i n t h e \r / / \t 0001020 T F S K D s t r u 376 001 \0 275 ' c 0001040 t u r e ( V D A d i s k D D ) 0001060 s o t h e y c a n b e 0001100 r e f e r e n c e d d i r e c 0001120 t l y . \r \r \r m a n i f e s t \r 0001140 [ \r / / l o w m e m o 0001160 r y c e l l s o f i n t e 0001200 r e s t \r D A s t a r t 0001220 = # 4 2 0 \t \t / / d i s p l 0001240 a y l o c a t i o n \r / / d 0001260 i s k a c c e s s i n g c o 0001300 n s t a n t s ( s a m e f o 0001320 r B F S a n d T F S ) \r 0001340 l F I D = 3 \t \t \t / / 0001360 l e n g t h o f a F I D \r 0001400 / / T F S f i l e - r e l a 0001420 t e d c o n s t a n t s \r / 376 0001440 001 \0 & 304 / N o t e t h a t 0001460 t h e p h y s i c a l d i s 0001500 k s h a p e p a r a m e t e 0001520 r s v a r y a c c o r d i n 0001540 g t o t h e \r / / d i s k 0001560 m o d e l , a n d a r e 0001600 d e t e r m i n e d d y n a m 0001620 i c a l l y b y D e t e r m 0001640 i n e D i s k M o d e l . \r 0001660 T F S w o r d s P e r P a g e 0001700 = 1 0 2 4 \t / / w o r d s 0001720 i n d a t a b l o c k o 0001740 f s e c t o r \r T F S l 0001760 n W o r d s P e r P a g e = 0002000 1 0 \r p a c k I D = 0 0002020 \t \t \t / / p a r t o f F I 0002040 D \r \r / 376 001 \0 274 G / d e f i n 0002060 i t i o n s f o r b i t t 0002100 a b l e f o r m a t \r l 0002120 e n g t h T F S D D p r e a m b 0002140 l e = 2 \t / / n u m p a 0002160 g e s i n D i s k D e s c 0002200 r i p t o r a h e a d o f 0002220 B T \r l e n g t h T F S B 0002240 T = 1 7 7 7 7 7 B r s h i 0002260 f t ( T F S l n W o r d s P e 0002300 r P a g e + 4 ) + 1 \r \t 0002320 \t \t \t / / m a x l e n g t h 0002340 o f T F S B i t T a b l 0002360 e ( p a g e s ) \r ] \r \r 0002400 / / u s e d b y d i s k b 0002420 i t t a b l e r o u t i n e 0002440 s t o c o m p 376 001 \0 022 204 u t 0002460 e b i t l o c a t i o n s \r 0002500 s t r u c t u r e V D A : 0002520 / / V i r t u a l D i s k 0002540 A d d r e s s \r [ \r 0002560 w o r d N u m b i t 1 2 = 0002600 \t / / w o r d i n d e x i 0002620 n w h o l e f i l e \r 0002640 [ \r p a g e N 0002660 u m b i t 1 2 - T F S l n W 0002700 o r d s P e r P a g e \r 0002720 w o r d N u m I n P a g e 0002740 b i t T F S l n W o r d s P e 0002760 r P a g e \r ] \r 0003000 b i t N u m b i t 4 \t \t / 0003020 / b i t i n d e x \r ] 0003040 \r \f \r / / T r i d e n t d 376 001 0003060 \0 i 251 i s k h a r d w a r e - 0003100 r e l a t e d d e f i n i t i 0003120 o n s \r \r m a n i f e s t \r 0003140 [ \r d c b I D = # 1 0003160 2 2 6 4 5 \t \t / / d i s k c 0003200 o m m a n d s e a l \r / / H 0003220 a r d w a r e c o m m a n d 0003240 b i t a s s i g n m e n t s \r 0003260 C h e c k D a t a = # 0003300 4 0 0 0 \r W r i t e B i t 0003320 = # 2 0 0 \r R e a d B 0003340 i t = # 1 0 0 \r H e a 0003360 d S e l e c t = # 4 \r 0003400 R e Z e r o = # 1 2 \r 0003420 C h e c k R e s e t = # 1 0 0003440 \r / / H a r d w a r e d i s 0003460 k c 376 001 \0 224 273 o m m a n d s 0003500 u s e d i n c o n j u n c t 0003520 i o n w i t h a b o v e \r 0003540 d i s k R e a d = R e a 0003560 d B i t + H e a d S e l e c 0003600 t \r d i s k W r i t e = 0003620 W r i t e B i t + H e a d 0003640 S e l e c t \r d i s k C h 0003660 e c k = C h e c k D a t a 0003700 + R e a d B i t + H e a d 0003720 S e l e c t \r d i s k R e 0003740 s e t = C h e c k R e s e t 0003760 \r d i s k R e s t o r e 0004000 = R e Z e r o \r d i s k 0004020 N o o p = H e a d S e l e c 0004040 t \r \r / / S p e c i a l d i 0004060 s k c o m m a 376 001 \0 025 320 n d 0004100 f o r v e r i f y i n g f r 0004120 e e l a b e l s : \r D C 0004140 r e a d L n D = d i s k M a g i 0004160 c + 8 \t / / C h e c k h e a d 0004200 e r , r e a d l a b e l , 0004220 n o d a t a \r D C r e a 0004240 d n D = d i s k M a g i c + 9 \t 0004260 \t / / C h e c k h e a d e r , 0004300 c h e c k l a b e l , n o 0004320 d a t a \r D C w r i t e 0004340 L n D = d i s k M a g i c + 1 0 0004360 \t / / c h e c k h e a d e r , 0004400 w r i t e l a b e l , n o 0004420 d a t a \r ] \r \r / / D 0004440 i s k s t a t u s w o r d . 0004460 S e e h a r d w a r 376 001 \0 0004500 ; 242 e m a n u a l f o r d 0004520 e t a i l e d d e f i n i t i 0004540 o n s \r s t r u c t u r e D S 0004560 T : \r [ \r S t a t u 0004600 s w o r d = \r [ 0004620 \r E r r o r s b i 0004640 t 1 0 = \r 0004660 [ / / * = m a y r e 0004700 q u i r e a r e s t o r e 0004720 t o c l e a r \r 0004740 S e e k I n c b i t \t \t / 0004760 / 1 0 0 0 0 0 * \r 0005000 C y l O v f l b i t \t 0005020 \t / / 4 0 0 0 0 - m i s n 0005040 a m e d , r e a l l y b a d 0005060 h e a d # \r 0005100 D 376 001 \0 362 i e v i c e C k b 0005120 i t \t \t / / 2 0 0 0 0 * \r 0005140 N o t S e l e 0005160 c t e d b i t \t / / 1 0 0 0005200 0 0 \r N o t O 0005220 n L i n e b i t \t \t / / 0005240 4 0 0 0 \r N o 0005260 t R e a d y b i t \t \t / / 0005300 2 0 0 0 \r S 0005320 e c O v f l b i t \t \t / / 0005340 1 0 0 0 \r D 0005360 a t a L a t e b i t 2 = \r 0005400 [ \r 0005420 W r L a t e 0005440 b i t \t \t / / 4 0 0 \r 0005460 R d L a 0005500 t e b i t \t 376 001 \0 004 M \t / / 0005520 2 0 0 \r 0005540 ] \r C o 0005560 m p E r r b i t \t \t / / 0005600 1 0 0 \r ] \r 0005620 R e a d O n l y b 0005640 i t \t \t / / 4 0 \r 0005660 O f f s e t b i t \t \t 0005700 / / 2 0 \r 0005720 S e c t o r b i t 4 = \t \t 0005740 / / 1 7 - - r e p 0005760 o r t e d o n l y i n # 6 0006000 4 3 \r [ \t \t 0006020 \t / / f o l l o w i n g r e 0006040 p o r t e d o n l y i n C 0006060 B : \r E C C e 0006100 r r o r b i t \t \t / / 376 001 \0 201 0006120 023 1 0 \r 0006140 F o r g o t t e n b i t \t 0006160 \t / / 4 - - s e 0006200 t b y s o f t w a r e o n 0006220 l y \r T i m e 0006240 o u t b i t \t \t / / 0006260 2 - - s e t b y s o f 0006300 t w a r e o n l y \r 0006320 D o n e b i t \t \t / / 0006340 1 \r 0006360 ] \r ] \r ] \r 0006400 \r m a n i f e s t \r [ \r / 0006420 / S o m e b i t m a s k s 0006440 c o r r e s p o n d i n g t 0006460 o t h e D S T s t r u c t 0006500 u r e \r d s t D a t a L a 0006520 t 376 001 \0 024 b e = # 6 0 0 \r 0006540 d s t C o m p E r r = # 1 0 0 \r 0006560 d s t E C C e r r o r = # 0006600 1 0 \r d s t F o r g o t t 0006620 e n = # 4 \r d s t T i m e 0006640 o u t = # 2 \r d s t D o n 0006660 e = # 1 \r / / M a s k b i t 0006700 s f o r s t a t u s w o r 0006720 d \r d s t E r r o r s = # 0006740 1 7 7 7 1 6 \t \t / / a l l e 0006760 r r o r s - - i g n o r e 0007000 R e a d O n l y a n d O f f 0007020 s e t \r d s t R e s t o r 0007040 e = # 1 6 0 1 0 0 \t \t / / e r 0007060 r o r s t h a t m a y r e 0007100 q u i r e a r e s t o r e 0007120 t o c l e 376 001 \0 n % a r \r 0007140 d s t R e t r y I n d e f i n 0007160 i t e l y = # 6 0 4 \t / / r e 0007200 t r y t h e s e e r r o r s 0007220 w i t h o u t c o u n t i n 0007240 g t h e m \r / / S t a t u s 0007260 w o r d v a l u e s \r 0007300 d s t F r e e = # 1 7 7 7 7 7 \t 0007320 \t / / d e n o t e s f r e e 0007340 C B - - s e t b y s o 0007360 f t w a r e \r ] \r \f \r / / 0007400 T r i d e n t C o n t r o l 0007420 l e r C o n t r o l B l o c 0007440 k f o r m a t \r m a n i f e s 0007460 t K B L K = # 6 4 0 \t \t / 0007500 / T r i d e n t c o n t r o 0007520 l l e r C B a d d 376 001 \0 ~ 212 0007540 r e s s \r s t r u c t u r e K 0007560 B L K : \r [ \r p t r 0007600 w o r d \t / / K B L K + 0 0007620 = # 6 4 0 = p o i n t e r 0007640 t o c o m m a n d b l o c 0007660 k \r d r i v e w o r d \t 0007700 / / K B L K + 1 = # 6 4 1 0007720 = n u m b e r o f c u r 0007740 r e n t l y s e l e c t e d 0007760 d r i v e \r t r a c k w 0010000 o r d \t / / K B L K + 2 = 0010020 # 6 4 2 = t r a c k n u m 0010040 b e r i n l a s t c o m m 0010060 a n d \r @ D S T \t \t / / 0010100 K B L K + 3 = # 6 4 3 = 0010120 s t a t u s a t l a s t s 0010140 376 001 \0 242 371 e c t o r p u l s e 0010160 \r a b o r t e d w o r d 0010200 \t / / K B L K + 4 = n o n 0010220 - z e r o i f a c o m m a 0010240 n d w a s a b o r t e d \r 0010260 ] \r \r \r / / H e a d e r , L 0010300 a b e l , D a t a f o r m a t 0010320 s o n d i s k \r \r / / H a 0010340 r d w a r e d i s k a d d r 0010360 e s s - s a m e a s d i 0010400 s k a d d r e s s u s e d 0010420 i n t h e K C B \r s t r u c 0010440 t u r e D A : \r [ \r 0010460 t r a c k w o r d \r h 0010500 e a d b y t e \r s e c t 0010520 o r b y t e \r ] \r \r / / 0010540 D i s k 376 001 \0 262 W h e a d e 0010560 r - m u s t b e t h e 0010600 s a m e a s D A \r s t r u c 0010620 t u r e D H : @ D A \r m a n 0010640 i f e s t l D H = s i z e 0010660 D H / 1 6 \r \r / / D i s k 0010700 l a b e l . \r / / T h e l a 0010720 s t t w o w o r d s m u s 0010740 t b e t h e n e x t s e 0010760 c t o r a d d r e s s i n 0011000 D H f o r m a t \r / / ( u s 0011020 e d f o r c h a i n i n g 0011040 o p e r a t i o n s ) \r / / * 0011060 = s e t b y D o D i s k C o 0011100 m m a n d \r / / # = c o n s t 0011120 a n t f o r a l l p a g e 0011140 s \r s t r u c t u r 376 001 \0 002 335 e 0011160 D L : \r [ \r f i l 0011200 e I d w o r d l F I D \t / / 0011220 # * \r p a c k I D w o 0011240 r d \t \t / / # * \r n u 0011260 m C h a r s w o r d \t / / b 0011300 e t w e e n 0 a n d c h a 0011320 r s P e r P a g e i n c l u s 0011340 i v e . \r \t \t \t / / n e 0011360 c h a r s P e r P a g e o n 0011400 l y o n l a s t p a g e \r 0011420 p a g e N u m b e r w o 0011440 r d \t / / * p a g e n u m 0011460 b e r i n f i l e o f t 0011500 h i s p a g e \r p r e v 0011520 i o u s @ D H \t \t / / d i s 0011540 k a d d r e s s o f p r 376 0011560 001 \0 327 347 e v i o u s f i l e 0011600 p a g e , o r e o f D A \r 0011620 n e x t @ D H \t \t / / d 0011640 i s k a d d r e s s o f n 0011660 e x t f i l e p a g e , o 0011700 r e o f D A \r ] \r m a n 0011720 i f e s t l D L = s i z e D 0011740 L / 1 6 \r \f \r / / D i s k c 0011760 o m m a n d b l o c k . \r / / 0012000 o n e f o r e a c h s e 0012020 c t o r t r a n s f e r \r s t 0012040 r u c t u r e K C B : \r 0012060 [ \r d i s k A d d r e s s 0012100 @ D H = @ D H \t / / + 0 0012120 + 1 \r d r i v e w o 0012140 r d \t \t \t / / + 2 \r n e 0012160 x t K C 376 001 \0 347 E B w o r d \t 0012200 \t \t / / + 3 \r I D w o 0012220 r d \t \t \t / / + 4 c o m m a 0012240 n d s e a l \r C o m m H 0012260 w o r d \t \t \t / / + 5 h e 0012300 a d e r c o m m a n d b l o 0012320 c k \r C o u n t H w o 0012340 r d \t \t \t / / + 6 \r A d 0012360 d r H w o r d \t \t \t / / + 7 0012400 \r E C C 0 H w o r d \t \t 0012420 \t / / + 1 0 \r E C C 1 H 0012440 w o r d \t \t \t / / + 1 1 \r 0012460 S t a t u s H @ D S T \t \t 0012500 \t / / + 1 2 \r C o m m L 0012520 w o r d \t \t \t / / + 1 3 l 0012540 a b e l c o m m a n d b l o 0012560 c k \r C o 376 001 \0 313 375 u n 0012600 t L w o r d \t \t \t / / + 1 4 0012620 \r A d d r L w o r d \t \t 0012640 \t / / + 1 5 \r E C C 0 L 0012660 w o r d \t \t \t / / + 1 6 \r 0012700 E C C 1 L w o r d \t \t \t / 0012720 / + 1 7 \r S t a t u s L 0012740 @ D S T \t \t \t / / + 2 0 \r 0012760 C o m m D w o r d \t \t \t / 0013000 / + 2 1 d a t a c o m m a 0013020 n d b l o c k \r C o u 0013040 n t D w o r d \t \t \t / / + 2 0013060 2 \r A d d r D w o r d \t 0013100 \t \t / / + 2 3 \r E C C 0 0013120 D w o r d \t \t \t / / + 2 4 \r 0013140 E C C 1 D w o r d \t \t \t 0013160 / / + 2 5 \r S t a t 376 001 0013200 \0 001 _ u s D @ D S T \t \t \t / / 0013220 + 2 6 \r e n d W o r d 0013240 w o r d \t \t \t / / + 2 7 \r 0013260 b l a n k w o r d \t \t \t / / 0013300 + 3 0 i n t e r r u p t b 0013320 i t s w h e n i m p l e m e 0013340 n t e d \r n o r m a l W a 0013360 k e u p s w o r d \t \t / / + 0013400 3 1 \r e r r o r W a k e u 0013420 p s w o r d \t \t / / + 3 2 \r 0013440 ] \r m a n i f e s t l K 0013460 C B = s i z e K C B / 1 6 \r \r 0013500 / / C o m m a n d f o r m a 0013520 t f o r e a c h b l o c k 0013540 w i t h i n a s e c t o r 0013560 \r / / u s e d t o f i l l 0013600 i n 376 001 \0 323 266 C B \r s t r u 0013620 c t u r e K C B b l o c k : 0013640 \r [ \r C o m m w o 0013660 r d \r C o u n t w o r d 0013700 \r A d d r w o r d \r 0013720 E C C 0 w o r d \r E C 0013740 C 1 w o r d \r S t a t u 0013760 s w o r d \r ] \r m a n i 0014000 f e s t l K C B b l = s i z e 0014020 K C B b l o c k / 1 6 \r \r \f \r 0014040 / / T F S s p e c i a l i z 0014060 a t i o n o f t h e D i s 0014100 k C B Z \r s t r u c t u r e 0014120 T F S C B Z : \r [ \r 0014140 @ C B Z \t \t \t \t / / s t a n d 0014160 a r d p a r t \r C B s 0014200 w o r d 0 \t \t 376 001 \0 201 R \t / / 0014220 * a s m a n y C B s a 0014240 s w i l l f i t s t a r t 0014260 h e r e \r ] \r m a n i f 0014300 e s t l T F S C B Z = s i 0014320 z e T F S C B Z / 1 6 / / 0014340 f i x e d p a r t o f C 0014360 B Z \r \r / / e a c h C B Z 0014400 c o n t a i n s a C B f o 0014420 r e a c h p o s s i b l e 0014440 t r a n s f e r e n q u e u e 0014460 d \r / / t h e l a b e l m 0014500 u s t c o m e f i r s t f 0014520 o l l o w e d b y t h e D 0014540 C B ( f o r c h a i n i n g 0014560 ) \r / / a f r e e C B m 0014600 u s t h a v e s t a t 376 001 \0 0014620 211 024 u s = D S T f r e e S t a t 0014640 u s ( i n i t i a l i z a t i 0014660 o n d o e s t h a t ) \r / / 0014700 * = i n i t i a l i z e d b 0014720 y I n i t i a l i z e C b S t 0014740 o r a g e ; e v e r y t h i n 0014760 g e l s e i s z e r o e d 0015000 \r s t r u c t u r e C B : \r 0015020 [ \r l a b e l @ D L 0015040 \t \t / / l a b e l ( 1 0 w 0015060 o r d s ) \r @ K C B \t \t \t 0015100 / / h a r d w a r e o r i e 0015120 n t e d c o n t r o l b l o 0015140 c k ( 2 7 w o r d s ) \r 0015160 t r u e P a g e N u m b e r 0015200 w o r d \t / / ' v a r i a b 0015220 l e 376 001 \0 A 253 ' p a r t o f 0015240 t h e c b e n d s h e r 0015260 e \r / / r e m a i n i n g w 0015300 o r d s a r e n o t z e r 0015320 o e d b y T F S G e t C b \r 0015340 c b z w o r d \t \t / / 0015360 * \r v D i s k A d d r e s 0015400 s w o r d \t / / V D A f o 0015420 r t h i s x f e r ( o f f 0015440 s e t = 3 8 . ) \r n e 0015460 x t C B w o r d \t \t / / * 0015500 p o i n t e r t o n e x t 0015520 C B o n C B Z q u e u e \r 0015540 ] \r m a n i f e s t \r 0015560 [ \r l C B = s i z 0015600 e C B / 1 6 \r l V a r C 0015620 B = o f f 376 001 \0 341 267 s e t 0015640 C B . c b z / 1 6 \r C B z 0015660 o n e L e n g t h = l T F S 0015700 C B Z + 6 * l C B / / 6 C 0015720 B s r e q u i r e d t o r 0015740 u n a t d i s k s p e e d 0015760 \r ] \r \f \r / / D S K s 0016000 t r u c t u r e f o r T r i 0016020 d e n t \r / / F i r s t , t 0016040 h e l o c a l d e f i n i t 0016060 i o n s f o r T r i d e n t 0016100 o n l y : \r / / f i r s t 0016120 l T F S K D H e a d e r w o r 0016140 d s a r e r e a d i n f 0016160 r o m d i s k a t n o r m 0016200 a l s t a r t u p \r m a n i f 0016220 e s t T F S K D v e r 376 001 \0 \0 0016240 351 s i o n = 2 \r \r s t r u c t u 0016260 r e T F S K D : \r [ \r 0016300 @ K D H \t \t \t \t / / s t a 0016320 n d a r d 1 s t p a r t \r 0016340 v e r s i o n w o r d \t \t 0016360 \t / / v e r s i o n n u m b 0016400 e r o f t h i s D i s k D 0016420 e s c r i p t o r \r m o d 0016440 e l w o r d \t \t \t / / d i s 0016460 k m o d e l n u m b e r \r 0016500 p a c k I D w o r d \t \t \t 0016520 / / f i e l d s e t u p w 0016540 h e n d i s k i n i t i a l 0016560 i z e d \r V D A d i s k D 0016600 D ^ 1 , l e n g t h T F S B T + 0016620 1 w o r d / / V D A s 0016640 o 376 001 \0 C 365 f t h e d a t a 0016660 p a r t o f D D \r f 0016700 i r s t V T r a c k w o r d \t 0016720 \t / / f i r s t t r a c k 0016740 u s e d i n f i l e s y s 0016760 t e m \r n V T r a c k s 0017000 w o r d \t \t / / n u m b e r 0017020 o f t r a c k s u s e d i 0017040 n f i l e s y s t e m \r 0017060 n T r a n s f e r s w o r d 0017100 2 \t \t / / t o t a l n u m 0017120 b e r o f t r a n s f e r s 0017140 o n t h i s d i s k \r 0017160 n E r r o r s w o r d 2 \t 0017200 \t / / t o t a l n u m b e r 0017220 o f e r r o r s - - s e 0017240 e T f s G 376 001 \0 367 347 e t C b \r 0017260 n E C C E r r o r s w o 0017300 r d 2 \t \t / / t o t a l n 0017320 u m b e r o f E C C e r r 0017340 o r s e n c o u n t e r e d \r 0017360 n E C C F i x e s w o r 0017400 d 2 \t \t / / t o t a l n u 0017420 m b e r o f t i m e s r e 0017440 c o v e r y s u c c e s s f u 0017460 l \r n R e s t o r e s w 0017500 o r d 2 \t \t / / n u m b e r 0017520 o f " r e s t o r e " o p 0017540 e r a t i o n s d o n e \r 0017560 n U n R e c o v w o r d 2 0017600 \t \t / / n u m b e r o f u 0017620 n r e c o v e r a b l e e r r 0017640 o r s \r n B T E 376 001 \0 220 335 0017660 r r o r s w o r d 2 \t \t / / 0017700 n u m b e r o f b i t t 0017720 a b l e d i s c r e p a n c i 0017740 e s \r l a s t P a g e A l 0017760 l o c w o r d \t \t / / l a s 0020000 t V D A a l l o c a t e d 0020020 - - f o r b i a s i n g s 0020040 e a r c h \r \r / / w o r d s 0020060 b e y o n d h e r e a r e 0020100 n o t s a v e d o n t h e 0020120 d i s k \r i n i t m o d 0020140 e w o r d \t \t / / n o n z e 0020160 r o i f p e r m i t t e d 0020200 t o c r e a t e n e w f i 0020220 l e s \r z o n e w o r d 0020240 \t \t \t / / z o n e o f t h 0020260 376 001 \0 v = i s D S K \r d 0020300 d M g r w o r d \t \t \t / / p 0020320 o i n t e r t o D i s k D e 0020340 s c r i p t o r M a n a g e r 0020360 o b j e c t \r f p T F S 0020400 S y s D i r b l k w o r d l 0020420 F P \t / / s t o r a g e f o 0020440 r F P \r f p T F S D D b 0020460 l k w o r d l F P \t \t / / 0020500 s t o r a g e f o r F P \r 0020520 f p T F S W D b l k w o r 0020540 d l F P \t \t / / s t o r a g 0020560 e f o r F P \r W D N a 0020600 m e b l k w o r d m a x L e 0020620 n g t h F n I n W o r d s / 0020640 / s t o r a g e f o r n a 0020660 m e \r 376 001 \0 | 033 ] \r m a n 0020700 i f e s t l T F S K D H e a d 0020720 e r = ( o f f s e t T F S 0020740 K D . i n i t m o d e / 1 6 ) \r 0020760 \r / / e x t e n d e d v e r 0021000 s i o n o f t h e d i s k 0021020 s t r u c t u r e \r s t r u c 0021040 t u r e T F S D S K : \r 0021060 [ \r @ D S K \r @ T F 0021100 S K D \r ] \r m a n i f e s 0021120 t l T F S D S K = s i z e 0021140 T F S D S K / 1 6 \r \r / / T 0021160 F S D S K o f f s e t s k n 0021200 o w n t o T f s A . A s m \r 0021220 c o m p i l e i f o f f s e t 0021240 T F S D S K . n H e a d s / 1 0021260 6 n e 2 6 % 376 001 \0 ~ j o 0021300 f f s e t T F S D S K . n S e 0021320 c t o r s / 1 6 n e 2 7 % 0021340 \r o f f s e t T F S D S K . 0021360 f i r s t V T r a c k / 1 6 n 0021400 e 4 8 % o f f s e t T F 0021420 S D S K . n V T r a c k s / 1 6 0021440 n e 4 9 t h e n \r [ 0021460 B a r f ( " T F S D S K o f 0021500 f s e t s w r o n g " ) ] \r 0021520 \r / / b a d p a g e l i s 0021540 t ( o n p h y s i c a l p 0021560 a g e 0 o f p a c k ) \r s 0021600 t r u c t u r e B P L : \r 0021620 [ \r s e a l w o r d \t 0021640 \t / / i n d i c a t e s p r 0021660 e s e n c e o f b a d p 376 0021700 001 \0 031 H a g e l i s t \r 0021720 n B a d P a g e s w o r d \t / 0021740 / n u m b e r o f b a d 0021760 p a g e s \r d a ^ 0 , 0 0022000 @ D A \t \t / / r e a l d i s 0022020 k a d d r e s s e s o f b 0022040 a d p a g e s \r ] \r m a 0022060 n i f e s t b p l S e a l = 0022100 # 1 2 3 4 5 6 \r \r / / e r r 0022120 o r c o d e s \r m a n i f e s 0022140 t \r [ \r e c O s V e 0022160 r s i o n = 2 4 0 3 \r 0022200 e c T f s Q u e u e = 2 4 0 0022220 4 \r e c N o C r e a t i o 0022240 n A b i l i t y = 2 4 0 5 \r 0022260 e c B a d A c t i o n = 0022300 2 4 0 376 \0 254 354 y 6 \r e c 0022320 B a d B t P a g e = 2 4 0 7 0022340 \r e c E s s e n t i a l F 0022360 i l e = 2 4 0 8 \r e c 0022400 B a d A s s i g n P a g e = 0022420 2 4 0 9 \r e c R e a d O n 0022440 l y = 2 4 1 0 \r e c D 0022460 r i v e H u n g = 2 4 1 1 \r 0022500 e c U n R e c o v D i s k 0022520 E r r o r = 2 4 1 2 \r 0022540 e c D i s k F u l l = 2 4 1 3 \r 0022560 ] \r 377 \0 \0 T f s I n i t . 0022600 b c p l \0 373 227 030 332 371 \0 \0 376 001 \0 / 0022620 355 / / T f s I n i t . b c p l 0022640 \r / / C o p y r i g h t X e 0022660 r o x C o r p o r a t i o n 0022700 1 9 7 9 , 1 9 8 0 , 1 9 8 1 0022720 \r \r / / \t L a s t m o d i f i 0022740 e d A p r i l 3 0 , 1 9 8 0022760 1 8 : 2 8 P M b y T a 0023000 f t \r \r g e t " A l t o f i l 0023020 e s y s . d " \r g e t " D i s 0023040 k s . d " \r g e t " T f s . d 0023060 " \r g e t " S t r e a m s . d 0023100 " \r g e t " A l t o D e f s . 0023120 d " \r \r e x t e r n a l \r [ \r 0023140 / / T F S p r o c e d u r e 0023160 s d e f i n e d h e r e \r T 0023200 F S I n i t \r T F S S e t D i s 0023220 k 376 001 \0 K 255 \r T F S T r y D i s 0023240 k \r T F S D i s k M o d e l \r \r 0023260 / / T F S p r o c e d u r e 0023300 s d e f i n e d e l s e w h 0023320 e r e \r T F S R e a d B T p a g 0023340 e \r T F S A c t O n P a g e s \r 0023360 T F S V i r t u a l D A \r T F S 0023400 R e a l D A \r T F S W r i t e P 0023420 a g e s \r T F S C r e a t e F i 0023440 l e \r T F S D e l e t e P a g e 0023460 s \r T F S A s s i g n D i s k P 0023500 a g e \r T F S R e l e a s e D i 0023520 s k P a g e \r T F S I n i t i a 0023540 l i z e C b S t o r a g e \r T F 0023560 S D o D i s k C o m m a n d \r T 0023600 F S G e t C b \r T F S C l o s e 0023620 \r T F S N o 376 001 \0 031 e n E x \r D 0023640 o R e c o v e r y \r T F S W a i 0023660 t Q u i e t \r T F S M o d S h i 0023700 f t \r T F S M o d S h i f t A \r 0023720 T F S S i l e n t B o o t \r T F 0023740 S C r e a t e D D M g r \r O p e 0023760 n D D \r \r / / O S \r A c t O n 0024000 D i s k P a g e s \r S e t W o r 0024020 k i n g D i r \r O p e n F i l e 0024040 \r C l o s e s \r G e t s \r R e a 0024060 d B l o c k \r W r i t e B l o c 0024100 k \r A l l o c a t e \r F r e e \r 0024120 Z e r o \r M o v e B l o c k \r S 0024140 y s E r r \r S t a r t I O \r D 0024160 e f a u l t A r g s \r I d l e \r 0024200 N o o p \r \r / / S t a t i c s 0024220 \r T F S L o c k \r T F 376 001 \0 311 200 0024240 S L e a v e D i s p l a y \r O s 0024260 V e r s i o n \r A l t o V e r s 0024300 i o n \r ] \r m a n i f e s t R 0024320 T C = # 4 3 0 \t \t / / R e a l 0024340 t i m e c l o c k \r \f \r / / - 0024360 - - - - - - - - - - - - - - - - * 0024460 - - - - - - - - - - - \r l e t 0024500 T F S I n i t ( z o n e , i n 0024520 i t m o d e , d r i v e N u m 0024540 b e r , d d M g r , f r e s 0024560 h D i s k ; n u m a r g s n 0024600 a ) = v a l o f \r / / - - - 0024620 - - - - - - - - - - - - - - - - 0024640 376 001 \0 254 3 - - - - - - - - - - - 0024660 - - - - - - - - - - - - - - - - * 0024720 - - - - - - - - - - - - - - \r [ 0024740 \r D e f a u l t A r g s ( l v 0024760 n a , - 1 , 0 , 0 , 0 , 0025000 0 ) \r m a n i f e s t m i n 0025020 O s V e r s i o n = 1 6 \r i 0025040 f O s V e r s i o n l s m 0025060 i n O s V e r s i o n t h e n 0025100 S y s E r r ( m i n O s V e r 0025120 s i o n , e c O s V e r s i o 0025140 n ) \r \r / / A l t o I I c 0025160 o n v e n t i o n i s t o 0025200 s e t l o c a t i o n 6 1 3 0025220 t o - 1 . \r / / T h e r 0025240 e a s o n 376 001 \0 034 \f w e r e 0025260 c o m p u t e A l t o V e r s 0025300 i o n i s t o e n s u r e 0025320 i t i s c o r r e c t e 0025340 v e n \r / / i n a b o o t 0025360 f i l e t h a t w a s c 0025400 r e a t e d o n a d i f f 0025420 e r e n t t y p e o f m a 0025440 c h i n e . \r A l t o V e r s i 0025460 o n = ( t a b l e [ # 6 0025500 1 0 1 4 ; # 1 4 0 1 ] ) ( ) 0025520 / / V E R S \r @ # 6 1 3 0025540 = A l t o V e r s i o n < < V 0025560 E R S . e n g g r 1 \r i f 0025600 A l t o V e r s i o n < < V E R 0025620 S . e n g g e 4 t h e n \r 0025640 [ / / D 376 001 \0 254 310 o 0025660 l p h i n o r D o r a d o \r 0025700 T F S L e a v e D i s p l 0025720 a y = t r u e \t / / d o n 0025740 ' t n e e d t o t u r n 0025760 d i s p l a y o f f \r T 0026000 F S S i l e n t B o o t = N 0026020 o o p \t \t / / d o n ' t s i 0026040 l e n t b o o t w h e n f 0026060 i n i s h i n g \r T F S M 0026100 o d S h i f t = T F S M o d 0026120 S h i f t A \t / / u s e s o 0026140 f t w a r e E C C c o r r e 0026160 c t i o n s u b r o u t i n e 0026200 \r ] \r \r / / s e p a r a 0026220 t e o u t t h e f i l e 0026240 s y s t e m n u m b e r ( 376 0026260 001 \0 " 004 i f T - 3 0 0 ) \r l e 0026300 t f s N u m b e r = d r i 0026320 v e N u m b e r r s h i f t 0026340 8 \r d r i v e N u m b e r = 0026360 d r i v e N u m b e r & # 3 0026400 7 7 \r \r / / F i r s t , t r 0026420 y t o s e l e c t a d i 0026440 s k t h a t d o e s n o t 0026460 e x i s t . I f \r / / s 0026500 e l e c t i o n s u c c e e d 0026520 s , i t i s b e c a u s e 0026540 t h e c o n t r o l l e r 0026560 d o e s n o t \r / / h a v e 0026600 a m u l t i - d r i v e m 0026620 u l t i p l e x o r a t t a c 0026640 h e d . N o t e t h a t 0026660 t h e \r 376 001 \0 217 270 / / i m p o 0026700 r t a n t b i t i n t h e 0026720 d i s k n u m b e r i s 0026740 1 0 b , b e c a u s e t h i 0026760 s w i l l \r / / c a u s e 0027000 n o n e o f t h e 8 c o 0027020 p i e s o f t h e s e l e 0027040 c t i o n l o g i c t o b 0027060 e \r / / e n a b l e d . ( 0027100 T h e d r i v e - s e l e c t 0027120 d e c o d e r i s o n l y 0027140 4 b i t s w i d e ! ! ) \r 0027160 / / 3 7 i s u s e d r a 0027200 t h e r t h a n 1 7 b e c 0027220 a u s e 3 7 i s s p e c i 0027240 f i c a l l y d e f i n e d \r 0027260 / / a s a n 376 001 \0 b T o n 0027300 e x i s t e n t d r i v e o 0027320 n t h e D o r a d o . \r l e 0027340 t p = T F S T r y D i s k 0027360 ( 3 7 b ) \t \t / / S e e i f 0027400 c o n t r o l l e r h o o k e 0027420 d u p \r i f p e q 0 t 0027440 h e n r e s u l t i s 0 \t / 0027460 / N o - - n o d i c e \r i 0027500 f d r i v e N u m b e r n e 0027520 0 & p e q 1 t h e n 0027540 r e s u l t i s 0 \t / / N o 0027560 t m u l t i - d r i v e c o 0027600 n t r o l l e r \r p = T F S 0027620 T r y D i s k ( d r i v e N u m 0027640 b e r ) \t / / N o w l o o k 0027660 f o r e x a c t d r i v 376 001 0027700 \0 \a ^ e \r i f p n e 1 t 0027720 h e n r e s u l t i s 0 \t / 0027740 / N o t t h e r e o r n o 0027760 t o n - l i n e \r \r / / S e 0030000 t u p s t r u c t u r e s n 0030020 e e d e d f o r s u b s e q 0030040 u e n t a c c e s s e s \r l e 0030060 t d i s k = A l l o c a t 0030100 e ( z o n e , l T F S D S K ) 0030120 \r Z e r o ( d i s k , l T F S 0030140 D S K ) \r T F S S e t D i s k ( 0030160 d i s k , i n i t m o d e , 0030200 d r i v e N u m b e r ) \r d i s 0030220 k > > T F S D S K . z o n e = 0030240 z o n e \r \r / / d o a r 0030260 e s t o r e i f t h e d r 0030300 i v e 376 001 \0 265 241 a p p e a r s 0030320 t o b e i n t r o u b l 0030340 e \r i f K B L K > > K B L K . 0030360 D e v i c e C k % K B L K > 0030400 > K B L K . S e e k I n c t h 0030420 e n D o R e c o v e r y ( d i 0030440 s k , d i s k R e s t o r e ) 0030460 \r \r / / s e t u p p h y s 0030500 i c a l d i s k s h a p e \r 0030520 l e t m o d e l = D e t e 0030540 r m i n e D i s k M o d e l ( d 0030560 i s k ) \r d i s k > > T F S D S 0030600 K . m o d e l = m o d e l \r 0030620 \r / / S e t u p f i l e 0030640 s y s t e m r e l a t e d p 0030660 a r a m e t e r s . \r / / L a 0030700 r g e s t p o 376 001 \0 o 234 s s i 0030720 b l e f i l e s y s t e m 0030740 h a s 2 ^ 1 6 - 1 p a g e s 0030760 . I f t h e p h y s i c 0031000 a l d i s k \r / / i s b i 0031020 g g e r t h a n t h i s , 0031040 t h e n m u l t i p l e f i 0031060 l e s y s t e m s m u s t 0031100 b e c o n s t r u c t e d . \r 0031120 / / E a c h f i l e s y s 0031140 t e m ( e x c e p t t h e 0031160 l a s t ) c o n s i s t s o 0031200 f t h e l a r g e s t i n 0031220 t e g r a l \r / / n u m b e r 0031240 o f t r a c k s ( n V T r 0031260 a c k s ) s u c h t h a t 0031300 t h e f i l e s y s t 376 001 \0 0031320 033 240 e m c o n t a i n s f e 0031340 w e r \r / / t h a n 2 ^ 1 6 0031360 p a g e s , a n d i s o 0031400 f f s e t f r o m t h e b 0031420 e g i n n i n g o f t h e 0031440 d i s k b y a n \r / / i n 0031460 t e g r a l n u m b e r o f 0031500 t r a c k s ( f i r s t V T 0031520 r a c k ) . \r / / T h e c o 0031540 r r e c t g e n e r a l c o 0031560 m p u t a t i o n f o r t h 0031600 i s i s : \r / / n V T r 0031620 a c k s = ( 2 ^ 1 6 - 1 ) / 0031640 ( n H e a d s * n S e c t o r s 0031660 ) \r / / f i r s t V T r a 0031700 c k = f s N u m b e r * n V 0031720 T r 376 001 \0 / 366 a c k s \r / / H 0031740 o w e v e r , t h i s i s 0031760 m e s s y t o d o i n B 0032000 C P L b e c a u s e i t r 0032020 e q u i r e s u n s i g n e d 0032040 \r / / d i v i s i o n . S 0032060 i n c e t h e T r i d e n t 0032100 T - 3 0 0 i s t h e o n 0032120 l y d i s k l a r g e e n 0032140 o u g h \r / / t o r e q u i 0032160 r e t h i s t r e a t m e n 0032200 t , i t i s t h e r e f o 0032220 r e h a n d l e d a s a 0032240 s p e c i a l c a s e . \r m a 0032260 n i f e s t m a x T 3 0 0 n V 0032300 T r a c k s = 3 8 3 / / 0032320 ( 2 ^ 1 6 - 376 001 \0 336 8 1 ) / ( 0032340 1 9 * 9 ) \r i f ( m o d e l 0032360 n e 3 0 0 & f s N u m b e 0032400 r n e 0 ) % f s N u m b 0032420 e r g r 2 t h e n \r 0032440 [ F r e e ( z o n e , d i s 0032460 k ) ; r e s u l t i s 0 ] 0032500 / / n o s u c h f s o 0032520 n p a c k \r d i s k > > T F S 0032540 D S K . f i r s t V T r a c k 0032560 = f s N u m b e r * m a x T 3 0032600 0 0 n V T r a c k s \r d i s k > 0032620 > T F S D S K . n V T r a c k s 0032640 = d i s k > > T F S D S K . 0032660 n T r a c k s - d i s k > > T F 0032700 S D S K . f i r s t V T r a c k 0032720 \r i f m o d e l e q 376 001 \0 ) 0032740 N 3 0 0 & d i s k > > T F 0032760 S D S K . n V T r a c k s g r 0033000 m a x T 3 0 0 n V T r a c k s 0033020 t h e n \r d i s k > > T 0033040 F S D S K . n V T r a c k s = 0033060 m a x T 3 0 0 n V T r a c k s 0033100 \r \f \r / / T F S I n i t ( c 0033120 o n t ' d ) \r \r / / S e t u p 0033140 d i r e c t o r y f p f o 0033160 r t h i s d i s k \r l e t 0033200 f i d T F S S y s d i r = t 0033220 a b l e [ # 1 0 0 0 0 0 ; 0033240 1 0 0 ] \r l e t f p T F S 0033260 S y s D i r = l v ( d i s 0033300 k > > T F S D S K . f p T F S S 0033320 y s D i r b l k ) \r M o v e B l 0033340 o 376 001 \0 s 223 c k ( l v f p T F 0033360 S S y s D i r > > F P . s e r i 0033400 a l N u m b e r , f i d T F S 0033420 S y s d i r , l S N ) \r f p T 0033440 F S S y s D i r > > F P . v e r 0033460 s i o n = 1 \r f p T F S S y 0033500 s D i r > > F P . l e a d e r V 0033520 i r t u a l D a = 1 \r S e t 0033540 W o r k i n g D i r ( " < S y s 0033560 D i r . " , f p T F S S y s D i 0033600 r , d i s k ) \r \r / / O p e n 0033620 d i r e c t o r y , a n d 0033640 s e t u p i m p o r t a n t 0033660 f p ' s f o r t h i s d i 0033700 s k , e t c . \r u n l e s s 0033720 f r e s h D i s k d o \r 0033740 [ \r l 376 001 \0 235 251 e t D A 0033760 s = v e c 2 \r D A s 0034000 ! 1 = 1 \r i f A c t 0034020 O n D i s k P a g e s ( d i s k 0034040 , 0 , D A s + 1 , f p T F 0034060 S S y s D i r , 0 , 0 , D 0034100 C r e a d n D , \r 0 , 0034120 0 , 0 , 0 , 0 , t r u e 0034140 ) l s 0 t h e n \r 0034160 [ F r e e ( z o n e , d 0034200 i s k ) ; r e s u l t i s 0 0034220 ] / / n o S y s D i r \r 0034240 l e t d d s = O p e 0034260 n F i l e ( " D i s k D e s c r 0034300 i p t o r " , k s T y p e R e 0034320 a d O n l y , 0 , 0 , \r 0034340 d i s k > > T 376 001 \0 002 031 0034360 F S D S K . f p D i s k D e s c 0034400 r i p t o r , 0 , z o n e , 0034420 0 , d i s k ) \r i f 0034440 d d s e q 0 t h e n [ 0034460 F r e e ( z o n e , d i s k ) 0034500 ; r e s u l t i s 0 ] 0034520 / / n o D i s k D e s c r i p 0034540 t o r \r R e a d B l o c k 0034560 ( d d s , l v d i s k > > T 0034600 F S D S K . k d , l T F S K D 0034620 H e a d e r ) \r i f d i 0034640 s k > > T F S D S K . v e r s i 0034660 o n n e T F S K D v e r s i 0034700 o n t h e n \r [ 0034720 C l o s e s ( d d s ) ; F r e 0034740 e ( z o n e , d i s k ) ; r 0034760 376 001 \0 036 205 e s u l t i s 0 ] 0035000 / / v e r s i o n i n c o 0035020 m p a t i b l e \r \r / / 0035040 C o u n t f r e e p a g e s 0035060 i n t h e f i l e s y s 0035100 t e m \r f o r i = 1 t 0035120 o T F S w o r d s P e r P a g 0035140 e - l T F S K D H e a d e r d 0035160 o G e t s ( d d s ) \r l 0035200 e t p a g e s = 0 \r f o 0035220 r i = 1 t o d i s k > > T 0035240 F S D S K . d i s k B T s i z e 0035260 d o \r [ \r 0035300 l e t w = G e t s ( d d s 0035320 ) \r t e s t w e 0035340 q 0 \r i f s 0035360 o p a g 376 001 \0 240 ! e s = p 0035400 a g e s + 1 6 \r 0035420 i f n o t i f w n e - 0035440 1 t h e n \r 0035460 f o r j = 0 t o 1 5 0035500 d o i f ( ( w r s h i f 0035520 t j ) & 1 ) e q 0 t h e 0035540 n p a g e s = p a g e s + 0035560 1 \r ] \r \r / / 0035600 N o w f i l l i n f r e 0035620 e c o u n t w h e r e i t 0035640 i s s u p p o s e d t o 0035660 b e : \r d i s k > > T F S 0035700 D S K . f r e e P a g e s = 0035720 p a g e s \r C l o s e s ( 0035740 d d s ) \r ] \r \r / / s e 0035760 t u p D D m a 376 001 \0 224 361 n 0036000 a g e r , i f n e e d e d \r 0036020 i f i n i t m o d e n e 0 0036040 t h e n \r [ \r i f 0036060 d d M g r e q 0 t h e n 0036100 d d M g r = T F S C r e a 0036120 t e D D M g r ( z o n e ) \r 0036140 d i s k > > T F S D S K . d d 0036160 M g r = d d M g r \r O 0036200 p e n D D ( d d M g r , d i s 0036220 k ) \r ] \r \r / / r e t u 0036240 r n h a n d l e o n d i s 0036260 k o b j e c t \r r e s u l t i 0036300 s d i s k \r ] \r \f \r / / - - - 0036320 - - - - - - - - - - - - - - - - * 0036360 - - - - - - - - - - - - - - - 376 0036400 001 \0 357 v - - - - - - - - - - - - 0036420 - - - - - - - - - - - - - - \r a 0036440 n d T F S T r y D i s k ( d r 0036460 i v e ) = v a l o f \r / / - 0036500 - - - - - - - - - - - - - - - - * 0036600 - - - - - - - - - - - \r / / T 0036620 r y t o a c c e s s d i s 0036640 k a n d r e t u r n : \r / / 0036660 \t 0 i f c o n t r o l l 0036700 e r a p p e a r s n o t t 0036720 o w o r k \r / / \t 1 i f 0036740 d i s k a p p e a r s t o 0036760 b e t h e r e \r / / \t 2 0037000 i f 376 001 \0 < 241 d i s k a p 0037020 p e a r s t o b e a b s e 0037040 n t \r [ \r w h i l e T F S L o 0037060 c k n e 0 d o I d l e ( 0037100 ) \r T F S L o c k = - 1 \t \t 0037120 / / l o c k o u t a l l o 0037140 t h e r a c c e s s \r T F S W 0037160 a i t Q u i e t ( f a l s e ) \r 0037200 l e t o l d D r i v e = K 0037220 B L K > > K B L K . d r i v e \r 0037240 i f o l d D r i v e u g e 0037260 # 1 7 t h e n o l d D r i v 0037300 e = 0 \r \r l e t r e s u l 0037320 t = T r y D i s k ( d r i v 0037340 e ) \r \r / / I f s e l e c t 0037360 e d a n o n e x i s t e n t 0037400 d r i v e , m 376 001 \0 322 222 u s 0037420 t l e a v e c o n t r o l l 0037440 e r p o i n t i n g \r / / a 0037460 t t h e p r e v i o u s l y 0037500 - s e l e c t e d d r i v e , 0037520 w h i c h i s a s s u m e 0037540 d t o e x i s t . \r / / ( 0037560 N o t e t h a t d r i v e 0037600 0 m u s t e x i s t o r 0037620 t h e c o n t r o l l e r w 0037640 o n ' t w o r k - - \r / / 0037660 t h i s i s a h a r d w a 0037700 r e r e s t r i c t i o n . ) 0037720 \r i f r e s u l t e q 2 0037740 t h e n T r y D i s k ( o l d 0037760 D r i v e ) \r \r T F S L o c k 0040000 = 0 \r r e s u l t i s r 376 001 0040020 \0 317 375 e s u l t \r ] \r \r / / - - 0040040 - - - - - - - - - - - - - - - - * 0040140 - - - - - - - - - - \r a n d T 0040160 r y D i s k ( d r i v e ) = 0040200 v a l o f \r / / - - - - - - - - 0040220 - - - - - - - - - - - - - - - - * 0040320 - - - - \r [ \r S t a r t I O ( # 0040340 2 0 ) \t \t / / t u r n o f f 0040360 a n d r e s e t c o n t r o 0040400 l l e r \r \r [ / / r e p 0040420 e a t 376 001 \0 244 237 \r K B L K 0040440 > > K B L K . p t r = 0 \r 0040460 K B L K > > K B L K . d r i 0040500 v e = d r i v e % 1 0 0 0 0 0040520 0 b \t / / F o r c e d r i v e 0040540 s e l e c t \r K B L K > 0040560 > K B L K . S t a t u s = - 0040600 1 \r K B L K > > K B L K . 0040620 t r a c k = - 1 \t \t / / F o 0040640 r c e s e e k n e x t t i 0040660 m e \r l e t t i m e d O 0040700 u t = n i l \r \r / / S e 0040720 e i f u n i t r e s p o n 0040740 d s . L e t e a c h S t 0040760 a r t I O w o r k f o r 1 0041000 / 2 0 s e c o n d . \r / 0041020 / I f S t a 376 001 \0 344 9 t u s 0041040 h a s n o t b e e n s e 0041060 t a f t e r l a s t S t a 0041100 r t I O , t i m e d O u t w 0041120 i l l \r / / b e t r u 0041140 e . T h e r e a s o n f 0041160 o r s e v e r a l S t a r t 0041200 I O ' s i s t h a t w e 0041220 m a y \r / / b e t r y 0041240 i n g t o s e l e c t a 0041260 n o n - e x i s t e n t d i s 0041300 k , w h i c h w i l l n o 0041320 t \r / / p r o v i d e 0041340 s e c t o r p u l s e s a n 0041360 d c o r r e s p o n d i n g 0041400 w a k e u p s . \r f o r 0041420 r e T r i e s = 1 t 376 001 \0 0041440 \f 232 o 4 d o \t / / M a y h 0041460 a v e t o g i v e s e v e 0041500 r a l S t a r t I O ' s \r 0041520 [ \t \t \t \t / / f o r 0041540 a n o n - e x d i s k \r 0041560 S t a r t I O ( # 4 0 ) 0041600 \t / / C a u s e s m i c r o 0041620 c o d e t o s t a r t \r 0041640 t i m e d O u t = f 0041660 a l s e \r l e t i 0041700 n T i m e = @ R T C \r 0041720 [ \r 0041740 i f K B L K > > K B L K . S 0041760 t a t u s n e - 1 t h e n 0042000 b r e a k \r 0042020 i f ( @ R T C - i n T i m e ) 0042040 g 376 001 \0 h 343 r 1 t h e n 0042060 t i m e d O u t = t r u e \r 0042100 I d l e ( ) \r 0042120 ] r e p e a t u 0042140 n t i l t i m e d O u t \r 0042160 u n l e s s t i m e d 0042200 O u t b r e a k \r 0042220 ] \r \r i f t i m e d O u 0042240 t t h e n r e s u l t i s 0042260 0 \t / / C o n t r o l l e r n 0042300 o t h o o k e d u p \r 0042320 ] r e p e a t u n t i l K B 0042340 L K > > K B L K . W r L a t e 0042360 e q 0 \r \r / / W h i c h s 0042400 t a t u s b i t t o t e s 0042420 t ? A d r i v e w i l l 0042440 s e l e c t 376 001 \0 277 361 i f p 0042460 o w e r i s o n \r / / ( e 0042500 v e n i f t h e d i s k 0042520 i s n o t s p i n n i n g ) 0042540 : N o t S e l e c t e d i s 0042560 t h e r e f o r e o n l y \r 0042600 / / a n i n d i c a t i o n 0042620 o f a n o n - e x o r 0042640 f u l l y p o w e r e d d o 0042660 w n d r i v e . T h e O n 0042700 L i n e \r / / i n d i c a t i 0042720 o n i s b e s t , a l t h 0042740 o u g h i f t h e d r i v 0042760 e i s i n t h e m i d d 0043000 l e o f \r / / a r e s t o 0043020 r e , i t i s c o n c e i 0043040 v a b l e t h a t O 376 001 \0 324 0043060 277 n L i n e g o e s a w a y 0043100 . \r r e s u l t i s K B L K > 0043120 > K B L K . N o t O n L i n e 0043140 e q 0 ? 1 , 2 \r ] \r \f \r / 0043160 / - - - - - - - - - - - - - - - 0043200 - - - - - - - - - - - - - - - - * 0043260 - - - - - - - - - - - - - \r a n 0043300 d T F S D i s k M o d e l ( d 0043320 i s k ) = d i s k > > T F S 0043340 D S K . m o d e l \r / / - - - - 0043360 - - - - - - - - - - - - - - - - * 0043460 - 376 001 \0 ; Q - - - - - - - \r \r / 0043500 / - - - - - - - - - - - - - - - 0043520 - - - - - - - - - - - - - - - - * 0043600 - - - - - - - - - - - - - \r a n 0043620 d D e t e r m i n e D i s k M 0043640 o d e l ( d i s k ) = v a l 0043660 o f \r / / - - - - - - - - - - - 0043700 - - - - - - - - - - - - - - - - * 0044000 - \r / / D e t e r m i n e s 0044020 w h a t m o d e l d i s k 0044040 i s a t t a c h e d , p u t 0044060 s d e f a 376 001 \0 260 303 u l t d 0044100 i s k s h a p e \r / / p a r 0044120 a m e t e r s i n t h e d 0044140 i s k o b j e c t , a n d 0044160 r e t u r n s t h e d i s k 0044200 m o d e l n u m b e r : \r / 0044220 / \t 8 0 \t T r i d e n t T - 0044240 8 0 \r / / \t 3 0 0 \t T r i d e n 0044260 t T - 3 0 0 \r / / \t 4 0 0 4 \t 0044300 S h u g a r t S A - 4 0 0 4 \r 0044320 / / \t 4 0 0 8 \t S h u g a r t 0044340 S A - 4 0 0 8 \r \r [ \r / / T h 0044360 e f o l l o w i n g p a r a 0044400 l l e l t a b l e s d e f i 0044420 n e t h e d i s k p a r a 0044440 m e t e r s f o r t h e \r / 0044460 / d i s k m o d e 376 001 \0 350 P 0044500 l s c u r r e n t l y k n o 0044520 w n a b o u t . D e t e r 0044540 m i n a t i o n o f d i s k 0044560 m o d e l \r / / i s d o n 0044600 e b y s e l e c t i n g h 0044620 e a d s a n d s e e i n g 0044640 w h a t h a p p e n s - - 0044660 e a c h m o d e l \r / / d i 0044700 s k h a s a d i f f e r e 0044720 n t m a x i m u m h e a d 0044740 n u m b e r . \r / / n H e a d 0044760 s T ! ( i - 1 ) b u t n o t 0045000 n H e a d s T ! i i s a 0045020 l e g a l h e a d f o r d 0045040 i s k m o d e l m o d e l T 0045060 ! i , \r / / 0 < = i < = 0045100 376 001 \0 233 % m a x M o d e l . 0045120 n H e a d s T m u s t b e 0045140 m o n o t o n i c ! \r m a n i 0045160 f e s t m a x M o d e l = 0045200 3 \r l e t m o d e l T = t 0045220 a b l e [ 4 0 0 4 ; 8 0 ; 0045240 4 0 0 8 ; 3 0 0 ] \r l e t 0045260 n T r a c k s T = t a b l 0045300 e [ 2 0 2 ; 8 1 5 ; 2 0 0045320 2 ; 8 1 5 ] \r l e t n H e 0045340 a d s T = t a b l e [ 4 0045360 ; 5 ; 8 ; 1 9 ] \r l e t 0045400 n S e c t o r s T = t a b 0045420 l e [ 8 ; 9 ; 8 ; 9 0045440 ] \r \r w h i l e T F S L o c k 0045460 n e 0 d o I d l e ( ) \r 0045500 T F S L o 376 001 \0 265 - c k = - 0045520 1 \r T F S W a i t Q u i e t ( f 0045540 a l s e ) \r l e t m o d e l I 0045560 n d e x = 0 \r \r [ / 0045600 / r e p e a t \r l e t 0045620 k c b = v e c l K C B \r 0045640 Z e r o ( k c b , l K C B 0045660 ) \r k c b > > K C B . d r 0045700 i v e = d i s k > > T F S D 0045720 S K . d r i v e N u m b e r \r \r 0045740 / / I s s u e n o r 0045760 e a l c o m m a n d s - - 0046000 j u s t s e l e c t a h e 0046020 a d \r k c b > > K C B . 0046040 h e a d = n H e a d s T ! m 0046060 o d e l I n d e x \r k c b 0046100 > > K C B . I D = 376 001 \0 _ 023 0046120 d c b I D \r K B L K > > K 0046140 B L K . p t r = k c b \r 0046160 w h i l e K B L K > > K B L 0046200 K . p t r n e 0 d o I d 0046220 l e ( ) \r \r / / T r i d 0046240 e n t d i s k s r a i s e 0046260 C y l O v f l a n d S h u g 0046300 a r t d i s k s r a i s e 0046320 S e c O v f l \r / / w h 0046340 e n a n i l l e g a l h e 0046360 a d i s s e l e c t e d . \r 0046400 i f K B L K > > K B L K 0046420 . C y l O v f l % K B L K > 0046440 > K B L K . S e c O v f l t h 0046460 e n b r e a k \r u n l e 0046500 s s K B L K > > K B L K . W 376 0046520 001 \0 / 361 r L a t e d o m o d 0046540 e l I n d e x = m o d e l I 0046560 n d e x + 1 \r ] r e 0046600 p e a t u n t i l m o d e l I 0046620 n d e x e q m a x M o d e l 0046640 \r \r T F S L o c k = 0 \r D o 0046660 R e c o v e r y ( d i s k , d 0046700 i s k R e s e t ) / / t u r 0046720 n o f f e r r o r i n d i 0046740 c a t i o n s \r \r / / N o w 0046760 s e t p h y s i c a l d i s 0047000 k s h a p e p a r a m e t e 0047020 r s \r d i s k > > T F S D S K . 0047040 n D i s k s = 1 \r d i s k > 0047060 > T F S D S K . n T r a c k s 0047100 = n T r a c k s T ! m o d e l 0047120 I n d e 376 001 \0 240 231 x \r d i s k > 0047140 > T F S D S K . n H e a d s = 0047160 n H e a d s T ! m o d e l I n 0047200 d e x \r d i s k > > T F S D S K 0047220 . n S e c t o r s = n S e c 0047240 t o r s T ! m o d e l I n d e x 0047260 \r r e s u l t i s m o d e l T 0047300 ! m o d e l I n d e x \r ] \r \f \r 0047320 / / - - - - - - - - - - - - - - 0047340 - - - - - - - - - - - - - - - - * 0047420 - - - - - - - - - - - - - - \r a 0047440 n d T F S S e t D i s k ( d i 0047460 s k , i n i t m o d e , d r 0047500 i v e n u m b e r ) b e \r / / 0047520 - - - - - - - - - 376 001 \0 @ 366 - - 0047540 - - - - - - - - - - - - - - - - * 0047640 - \r / / T F S S e t D i s k 0047660 s e t s u p c o n s t a n t 0047700 p a r t o f d i s k s t 0047720 r u c t u r e . \r / / d i s k 0047740 p o i n t s t o t h e T 0047760 F S D S K s t r u c t u r e 0050000 f o r d r i v e d r i v e n 0050020 u m b e r \r [ \r / / A c c e s 0050040 s d i s p a t c h e s \r d i s 0050060 k > > D S K . A c t O n D i s k 0050100 P a g e s = T F S A c t O n 0050120 P a g e s \r d i s k > > D S 376 001 0050140 \0 335 376 K . W r i t e D i s k P a 0050160 g e s = T F S W r i t e P a 0050200 g e s \r d i s k > > D S K . C r 0050220 e a t e D i s k F i l e = T 0050240 F S C r e a t e F i l e \r d i s 0050260 k > > D S K . D e l e t e D i s 0050300 k P a g e s = T F S D e l e 0050320 t e P a g e s \r d i s k > > D S 0050340 K . A s s i g n D i s k P a g e 0050360 = T F S A s s i g n D i s k 0050400 P a g e \r d i s k > > D S K . R 0050420 e l e a s e D i s k P a g e = 0050440 T F S R e l e a s e D i s k P 0050460 a g e \r d i s k > > D S K . C l 0050500 o s e D i s k = T F S C l o 0050520 s e \r d i s k > > D S K . V i r 0050540 t u a 376 001 \0 D 243 l D i s k D A 0050560 = T F S V i r t u a l D A \r d 0050600 i s k > > D S K . R e a l D i s 0050620 k D A = T F S R e a l D A \r 0050640 d i s k > > D S K . I n i t i a 0050660 l i z e D i s k C B Z = T F 0050700 S I n i t i a l i z e C b S t o 0050720 r a g e \r d i s k > > D S K . D 0050740 o D i s k C o m m a n d = T 0050760 F S D o D i s k C o m m a n d \r 0051000 d i s k > > D S K . G e t D i s 0051020 k C b = T F S G e t C b \r \r 0051040 / / D e n y a c c e s s i 0051060 n c e r t a i n c a s e s \r 0051100 / / W r i t e D i s k P a g e 0051120 s i s N O T i n c l u d e 0051140 d b e c a u s 376 001 \0 300 376 e i 0051160 t h a s s e v e r a l u s 0051200 e s t h a t d o n o t \r / 0051220 / r e q u i r e m o d i f i 0051240 c a t i o n s t o t h e b 0051260 i t t a b l e . \r i f i n i 0051300 t m o d e e q 0 t h e n \r 0051320 [ \r d i s k > > D S 0051340 K . C r e a t e D i s k F i l e 0051360 = T F S N o n E x \r d 0051400 i s k > > D S K . D e l e t e D 0051420 i s k P a g e s = T F S N o 0051440 n E x \r d i s k > > D S K 0051460 . A s s i g n D i s k P a g e 0051500 = T F S N o n E x \r d i 0051520 s k > > D S K . R e l e a s e D 0051540 i s k P a g e = T F S 376 001 \0 0051560 275 251 N o n E x \r ] \r \r / / 0051600 F P ' s \r d i s k > > D S K . 0051620 f p S y s D i r = l v d i 0051640 s k > > T F S D S K . f p T F S 0051660 S y s D i r b l k \r d i s k > > 0051700 D S K . f p D i s k D e s c r i 0051720 p t o r = l v d i s k > > 0051740 T F S D S K . f p T F S D D b l 0051760 k \r d i s k > > D S K . f p W o 0052000 r k i n g D i r = l v d i 0052020 s k > > T F S D S K . f p T F S 0052040 W D b l k \r \r / / W o r k i n 0052060 g d i r \r d i s k > > D S K . 0052100 n a m e W o r k i n g D i r = l 0052120 v d i s k > > T F S D S K . W 0052140 D N a m e b l k \r \r / / O t h 0052160 e r 376 001 \0 J 021 p a r a m e t e 0052200 r s \r d i s k > > D S K . l n P 0052220 a g e S i z e = T F S l n W 0052240 o r d s P e r P a g e \r d i s k 0052260 > > D S K . d r i v e N u m b e 0052300 r = d r i v e n u m b e r \r 0052320 d i s k > > D S K . r e t r y C 0052340 o u n t = 1 6 \r d i s k > > 0052360 D S K . t o t a l E r r o r s 0052400 = 0 \r d i s k > > D S K . d i 0052420 s k K d = l v d i s k > > 0052440 T F S D S K . k d \r d i s k > > 0052460 D S K . l e n g t h C B Z = 0052500 l T F S C B Z \r d i s k > > D S 0052520 K . l e n g t h C B = l C B 0052540 \r d i s k > > T F S D S K . i n 0052560 i t m o d e 376 \0 \r 357 @ = i n 0052600 i t m o d e \r ] \r 377 \0 \0 T f s B 0052620 a s e . b c p l \0 373 227 t 301 / \0 \0 0052640 376 001 \0 217 I / / T f s B a s e . 0052660 B c p l \r / / C o p y r i g h 0052700 t X e r o x C o r p o r a t 0052720 i o n 1 9 7 9 , 1 9 8 0 , 0052740 1 9 8 1 \r \r / / \t L a s t m o 0052760 d i f i e d J u l y 9 , 1 0053000 9 8 1 1 : 2 3 P M b y 0053020 T a f t \r \r g e t " A l t o f 0053040 i l e s y s . d " \r g e t " D 0053060 i s k s . d " \r g e t " T f s 0053100 . d " \r \r c o m p i l e i f n 0053120 e w n a m e d e b u g t h e 0053140 n [ m a n i f e s t [ d 0053160 e b u g = f a l s e ] ] \r 0053200 c o m p i l e i f n e w n a m 0053220 e s a v e r e g s t h e n 0053240 [ m a n 376 001 \0 s 2 i f e s t 0053260 [ s a v e r e g s = f a l 0053300 s e ] ] \r \r e x t e r n a l \r 0053320 [ \r / / p r o c e d u r e s 0053340 d e f i n e d h e r e \r T F 0053360 S I n i t i a l i z e C b S t o 0053400 r a g e \r T F S D o D i s k C o 0053420 m m a n d \r T F S G e t C b \r T 0053440 F S A c t O n P a g e s \r D e f 0053460 a u l t T F S E r r o r R t n \r 0053500 D o R e c o v e r y \r T F S W a 0053520 i t Q u i e t \r T F S N o n E x 0053540 \r D a t a F i x \r \r / / p r o 0053560 c e d u r e s d e f i n e d 0053600 e l s e w h e r e \r T F S I n c 0053620 r e m e n t \r T F S M o d S h i 0053640 f t \r V i r t u a l 376 001 \0 314 275 D 0053660 i s k D A \r R e a l D i s k D A 0053700 \r Z e r o \r M o v e B l o c k \r 0053720 C a l l S w a t \r S y s E r r \r 0053740 D i s a b l e I n t e r r u p t 0053760 s \r E n a b l e I n t e r r u p 0054000 t s \r R e t u r n T o \r D e f a 0054020 u l t A r g s \r S t a r t I O \r 0054040 I d l e \r N o o p \r S a v e R e 0054060 g s \t / / i f f s a v e r e 0054100 g s c o m p i l e - t i m e 0054120 s w i t c h = t r u e \r \r / 0054140 / s t a t i c s d e f i n e 0054160 d h e r e \r T F S L e a v e D 0054200 i s p l a y \r T F S S a v e d D 0054220 i s p l a y \r T F S L o c k \r T 0054240 F S D e b u g \r ] \r \r s t a t 376 0054260 001 \0 322 , i c / / s t a t i 0054300 c s d e f i n e d h e r e \r 0054320 [ \r T F S L e a v e D i s p l a 0054340 y = f a l s e \t / / n o n 0054360 z e r o t o l e a v e d i 0054400 s p l a y o n d u r i n g 0054420 t r a n s f e r s \r T F S S a v 0054440 e d D i s p l a y = - 1 \t / 0054460 / s a v e d d i s p l a y 0054500 l i s t h e a d ( - 1 = > 0054520 n o n e ) \r T F S L o c k = 0054540 0 \t \t / / n o n z e r o t 0054560 o l o c k o u t n e w c 0054600 o m m a n d s \r T F S D e b u g 0054620 = d e b u g \r ] \r \r m a n i 0054640 f e s t R T C = # 4 3 0 \r 0054660 \f \r c o 376 001 \0 224 204 m p i l e i f 0054700 d e b u g t h e n \r [ \r s t 0054720 a t i c \r [ \r T F S 0054740 E r r o r R a t e \t / / s i m 0054760 u l a t e d e r r o r r a t 0055000 e , m e a s u r e d i n 6 0055020 4 t h s \r T F S R e s t o 0055040 r e R a t e \t / / s i m u l a 0055060 t e d r e s t o r e r a t e 0055100 , m e a s u r e d i n 6 4 0055120 t h s \r ] \r \r / / - - - - 0055140 - - - - - - - - - - - - - - - - * 0055240 - - - - - - - - \r l e t R e c 0055260 o r d T F S ( a , 376 001 \0 243 # b , 0055300 c ) b e \r / / - - - - - - - 0055320 - - - - - - - - - - - - - - - - * 0055420 - - - - - \r / / K l u d g e 0055440 f o r r e c o r d i n g e r 0055460 r o r s . E x p e c t s t 0055500 o f i n d # 6 4 5 z e r o 0055520 ( f o r \r / / n o e r r o 0055540 r r e c o r d i n g ) o r 0055560 a p o i n t e r t o a D 0055600 e b u g D a t a s t r u c t u 0055620 r e ( s e e b e l o w ) . \r 0055640 / / R e c o r d s a , b i 0055660 n r i n g b u f f e r 376 001 0055700 \0 307 357 ( u n l e s s a = 0 , 0055720 i n w h i c h c a s e b = 0055740 d i s k , c = C B , \r / / a 0055760 n d w h a t i s r e c o r 0056000 d e d i s 0 , V D A o f 0056020 C B ) . \r / / T h e n , i 0056040 f a = 1 , f i n d s o r 0056060 c r e a t e s s t a t u s e 0056100 n t r y w h o s e w o r d 0056120 0 i s e q u a l t o b \r 0056140 / / a n d i n c r e m e n t 0056160 s w o r d s 1 a n d 2 0056200 ( d o u b l e - p r e c i s i o 0056220 n c o u n t e r ) . \r / / U 0056240 n u s e d e n t r i e s a r 0056260 e i n d i c a t e d b y w 0056300 o r d 376 001 \0 251 > 0 = - 1 . 0056320 \r / / C u r r e n t i n t e 0056340 r p r e t a t i o n s : \r / / \t 0056360 a \t b \r / / \t 0 \t v d a \t C o m 0056400 m a n d c o m p l e t e d ( 0056420 T F S G e t C b ) \r / / \t 1 \t s 0056440 t a t u s \t E r r o r o c c u 0056460 r r e d ( D o R e c o v e r y 0056500 ) \r / / \t 2 \t c o m m a n d \t C 0056520 o m m a n d i s s u e d ( D 0056540 o R e c o v e r y ) \r / / \t # 1 0056560 x x \t v d a \t C o m m a n d i 0056600 s s u e d , x x = a c t N 0056620 u m b e r ( T F S D o D i s k 0056640 C o m m a n d ) \r [ \r s t r u c 0056660 t u r e D e b u g D a t a : \r 0056700 [ \r 376 001 \0 M 241 p N e 0056720 x t R i n g w o r d \t / / - 0056740 > n e x t e n t r y t o 0056760 u s e i n r i n g b u f f 0057000 e r \r p E n d R i n g w 0057020 o r d \t / / - > f i r s t 0057040 w o r d b e y o n d e n d 0057060 o f r i n g b u f f e r \r 0057100 p B e g i n R i n g w o r 0057120 d \t / / - > f i r s t w o 0057140 r d o f r i n g b u f f e 0057160 r \r p B e g i n S t a t u 0057200 s w o r d \t / / - > b e g 0057220 i n n i n g o f b l o c k 0057240 f o r 3 - w o r d s t a t u 0057260 s e n t r i e s \r p E n 0057300 d S t a t u s w o r d \t 376 001 \0 0057320 002 226 / / - > f i r s t w o 0057340 r d b e y o n d e n d o f 0057360 s t a t u s e n t r i e s \r 0057400 ] \r \r i f @ # 6 4 5 n 0057420 e 0 t h e n \r [ \r 0057440 l e t p = @ # 6 4 5 \r 0057460 i f a e q 0 t h e n 0057500 b = V i r t u a l D i s k 0057520 D A ( b , l v c > > C B . d 0057540 i s k A d d r e s s ) \r l 0057560 e t s = p > > D e b u g D 0057600 a t a . p N e x t R i n g \r 0057620 s ! 0 = a ; s ! 1 = 0057640 b \r s = s + 2 \r 0057660 i f s e q p > > D e b u g 0057700 D a t a . p E n d R i n g t h 0057720 e n 376 001 \0 272 312 s = p > > D 0057740 e b u g D a t a . p B e g i n R 0057760 i n g \r p > > D e b u g D 0060000 a t a . p N e x t R i n g = 0060020 s \r \r i f a e q 1 0060040 t h e n \r [ \r 0060060 s = p > > D e b u g D 0060100 a t a . p B e g i n S t a t u s 0060120 \r u n t i l s e 0060140 q p > > D e b u g D a t a . p 0060160 E n d S t a t u s d o \r 0060200 [ \r 0060220 i f s ! 0 e q - 1 t h 0060240 e n [ Z e r o ( s + 1 , 2 0060260 ) ; s ! 0 = b ] \r 0060300 i f b e q s ! 0060320 0 t h e n 376 001 \0 241 305 [ T F 0060340 S I n c r e m e n t ( s + 1 ) ; 0060360 b r e a k ] \r 0060400 s = s + 3 \r 0060420 ] \r ] \r 0060440 ] \r ] \r ] / / c o m p i l e 0060460 i f d e b u g \r \f \r / / T F 0060500 S R e a l D A , T F S V i r t 0060520 u a l D A , a n d T F S I n 0060540 c r e m e n t a r e d e f i 0060560 n e d i n T f s A . a s m \r 0060600 \r \r / / - - - - - - - - - - - - 0060620 - - - - - - - - - - - - - - - - * 0060720 \r l e t T F S I n i t 376 001 \0 : 0060740 030 i a l i z e C b S t o r a g e 0060760 ( d i s k , c b z , f i r s 0061000 t P a g e , l e n g t h , r 0061020 e t r y , e r r o r R t n ; \r 0061040 n u m a r g s n a ) 0061060 b e \r / / - - - - - - - - - - 0061100 - - - - - - - - - - - - - - - - * 0061200 - - \r / / I n i t t h e c 0061220 b z s u c h t h a t s u b 0061240 s e q u e n t l y i t c a n 0061260 b e u s e d f o r \r / / 0061300 T F S d i s k t r a n s f e 0061320 r s . \r [ \r i f n a g e 4 0061340 376 001 \0 o 241 t h e n \r [ \r 0061360 Z e r o ( c b z , l e n 0061400 g t h ) \r c b z > > C B Z 0061420 . l e n g t h = l e n g t h 0061440 \r c b z > > C B Z . e r r 0061460 o r R t n = n a g e 6 0061500 & e r r o r R t n ? e r r o 0061520 r R t n , l v D e f a u l t 0061540 T F S E r r o r R t n \r c 0061560 b z > > C B Z . r e t r y = 0061600 r e t r y \r c b z > > C B 0061620 Z . c l e a n u p R o u t i n e 0061640 = N o o p \r ] \r c b z 0061660 > > C B Z . d i s k = d i s 0061700 k \r c b z > > C B Z . c u r r e 0061720 n t P a g e = f i r s t P a 0061740 g e \r c b z 376 001 \0 B 317 > > C B Z 0061760 . q u e u e H e a d = l v 0062000 c b z > > C B Z . h e a d / 0062020 / f o r b a c k w a r d c 0062040 o m p a t i b i l i t y \r l e t 0062060 c b = l v c b z > > T F 0062100 S C B Z . C B s \r c b z > > C B 0062120 Z . h e a d = c b \r [ 0062140 \r c b z > > C B Z . t a i 0062160 l = c b \r c b > > C B 0062200 . c b z = c b z \r c b 0062220 > > C B . S t a t u s H = d 0062240 s t F r e e \r c b = c 0062260 b + l C B \r i f c b + l 0062300 C B g r c b z + c b z > > C 0062320 B Z . l e n g t h t h e n c 0062340 b = 0 \r c b 376 001 \0 243 267 0062360 z > > C B Z . t a i l > > C B . 0062400 n e x t C B = c b \r ] 0062420 r e p e a t u n t i l c b 0062440 e q 0 \r ] \r \f \r / / - - - - - 0062460 - - - - - - - - - - - - - - - - * 0062560 - - - - - - - \r a n d T F S D 0062600 o D i s k C o m m a n d ( d i s 0062620 k , c b , C A , D A , f 0062640 p , p a g e N u m b e r , a 0062660 c t i o n , \r n e x t C 0062700 b ; n u m a r g s n a ) b 0062720 e \r / / - - - - - - - - - - - 0062740 - - - - - - - - - - - - - - - - 0062760 376 001 \0 246 L - - - - - - - - - - - 0063000 - - - - - - - - - - - - - - - - * 0063040 - - - - - - \r / / E x p e c t 0063060 s c o m m a n d a n d l a 0063100 b e l t o b o t h b e z 0063120 e r o e d o n e n t r y , 0063140 o r \r / / o t h e r w i s e 0063160 a p p r o p r i a t e l y i n 0063200 i t i a l i z e d \r [ \r l e t 0063220 c b z = c b > > C B . c b z 0063240 \r \r / / R e s u r r e c t / 0063260 / * l i n e s i f i n t e 0063300 r r u p t s e v e r i m p l 0063320 e m e n t e d a n d u s e d 0063340 \r / / * i f c b > > C B 0063360 . n o r m 376 001 \0 w 222 a l W a k e 0063400 u p s e q 0 t h e n \r / / 0063420 * c b > > C B . n o 0063440 r m a l W a k e u p s = c b 0063460 z > > C B Z . n o r m a l W a k 0063500 e u p s \r / / * i f c b 0063520 > > C B . e r r o r W a k e u p 0063540 s e q 0 t h e n \r / / * 0063560 c b > > C B . n o r m 0063600 a l W a k e u p s = c b z > 0063620 > C B Z . e r r o r W a k e u p 0063640 s \r \r / / S e t u p h e a d 0063660 e r b l o c k p a r t o f 0063700 s e c t o r t r a n s f e r 0063720 \r c b > > C B . A d d r H = 0063740 l v ( c b > > C B . d i s k A 0063760 d d r e s s ) / 376 001 \0 / 021 / 0064000 i n f r o n t o f t h i 0064020 s K C B \r c b > > C B . C o u 0064040 n t H = l D H \r \r / / S e 0064060 t u p l a b e l b l o c k 0064100 p a r t o f s e c t o r t 0064120 r a n s f e r \r i f c b > > C 0064140 B . A d d r L e q 0 t h e 0064160 n / / c a l l e r m a y 0064200 w a n t l a b e l t o g 0064220 o e l s e w h e r e \r c 0064240 b > > C B . A d d r L = n a 0064260 g e 8 & n e x t C b ? 0064300 l v n e x t C b > > C B . l a 0064320 b e l + l D H , l v c b > > 0064340 C B . l a b e l \r c b > > C B . 0064360 C o u n t L = l D L \r \r / 376 0064400 001 \0 305 ) / S e t u p d a t a 0064420 b l o c k p a r t o f s 0064440 e c t o r t r a n s f e r \r c 0064460 b > > C B . A d d r D = C A 0064500 \r c b > > C B . C o u n t D = 0064520 T F S w o r d s P e r P a g e 0064540 \r \r / / S e t u p f o r L 0064560 a b e l c o m p a r e \r M o v 0064600 e B l o c k ( l v ( c b > > C 0064620 B . A d d r L > > D L . f i l e 0064640 I d ) , f p , l F I D ) 0064660 / / F I D p a r t \r c b > > 0064700 C B . A d d r L > > D L . p a c 0064720 k I D = d i s k > > T F S D 0064740 S K . p a c k I D \r c b > > C B 0064760 . A d d r L > > D L . p a g e N 0065000 u m b e 376 001 \0 001 & r = p a g 0065020 e N u m b e r \r c b > > C B . t 0065040 r u e P a g e N u m b e r = 0065060 p a g e N u m b e r \r \r / / P 0065100 o s s i b l y p u t i n t 0065120 h e d i s k a d d r e s s 0065140 f o r t h i s c o m m a n d 0065160 . D A e q f i l l i n D A 0065200 m e a n s \r / / i t i s 0065220 a l r e a d y s e t u p , 0065240 o r w i l l b e f i l l e 0065260 d i n f r o m t h e p r 0065300 e v i o u s l a b e l t r a 0065320 n s f e r \r i f D A n e f 0065340 i l l I n D A t h e n R e a 0065360 l D i s k D A ( d i s k , D A 0065400 , l v c b > > 376 001 \0 257 250 C B 0065420 . d i s k A d d r e s s ) \r c 0065440 b > > C B . v D i s k A d d r e 0065460 s s = D A \r \r / / F i l l 0065500 i n t h e a c t u a l d 0065520 i s k a c t i o n f o r e 0065540 a c h b l o c k o f t h e 0065560 s e c t o r \r l e t a c t N 0065600 u m b e r = a c t i o n - d 0065620 i s k M a g i c \r i f a c t N 0065640 u m b e r u g r 1 0 t h e 0065660 n S y s E r r ( a c t i o n , 0065700 e c B a d A c t i o n ) \r c b 0065720 > > C B . C o m m H = ( t a 0065740 b l e \r [ \r d i s k 0065760 R e a d ; d i s k C h e c k 0066000 ; d i s k C h e c k ; 376 001 0066020 \0 206 237 d i s k W r i t e ; 0066040 d i s k C h e c k ; \r d 0066060 i s k C h e c k ; d i s k N 0066100 o o p ; d i s k N o o p ; d 0066120 i s k C h e c k ; d i s k C h 0066140 e c k ; d i s k C h e c k \r 0066160 ] ) ! a c t N u m b e r \r c 0066200 b > > C B . C o m m L = ( t 0066220 a b l e \r [ \r d i s 0066240 k R e a d ; d i s k R e a d 0066260 ; d i s k C h e c k ; d 0066300 i s k W r i t e ; d i s k W 0066320 r i t e ; \r d i s k C h 0066340 e c k ; d i s k N o o p ; 0066360 d i s k N o o p ; d i s k R e 0066400 a d ; d i s k C h e c k ; d 0066420 i s k 376 001 \0 326 273 W r i t e \r 0066440 ] ) ! a c t N u m b e r \r c b 0066460 > > C B . C o m m D = ( t a 0066500 b l e \r [ \r d i s k 0066520 R e a d ; d i s k R e a d 0066540 ; d i s k R e a d ; d i s 0066560 k W r i t e ; d i s k W r i 0066600 t e ; \r d i s k W r i t 0066620 e ; 0 ; 0 ; 0 ; 0 ; 0066640 0 \r ] ) ! a c t N u m b e 0066660 r \r \f \r / / T F S D o D i s k 0066700 C o m m a n d ( c o n t ' d ) 0066720 \r \r / / F i l l i n t h e 0066740 d r i v e n u m b e r \r c b 0066760 > > C B . d r i v e = d i s 0067000 k > > T F S D S K . d r i v e N 0067020 u m b e r \r \r / 376 001 \0 347 = / W 0067040 a i t f o r i n t e r l o c 0067060 k e d a c t i v i t y ( D o 0067100 R e c o v e r y , T F S T r y 0067120 D i s k , e t c . ) t o c 0067140 o m p l e t e \r w h i l e T F 0067160 S L o c k n e 0 d o I d 0067200 l e ( ) \r \r / / T u r n o f 0067220 f t h e d i s p l a y , i 0067240 f n o t a l r e a d y o f 0067260 f \r i f T F S S a v e d D i s 0067300 p l a y e q - 1 t h e n \r 0067320 [ \r T F S S a v e d 0067340 D i s p l a y = @ D A s t a 0067360 r t \r u n l e s s T F S 0067400 L e a v e D i s p l a y d o 0067420 @ D A s t a r t = 0 \r 376 001 \0 0067440 247 W ] \r \r / / F i l l 0067460 i n t h e c o m m a n d s 0067500 e a l \r c b > > C B . I D = 0067520 d c b I D \r \r / / E n q u e u 0067540 e t h e c o m m a n d \r c o 0067560 m p i l e i f d e b u g t h 0067600 e n [ R e c o r d T F S ( # 0067620 1 0 0 + a c t N u m b e r , D 0067640 A ) ] \r / / * D i s a b l e 0067660 I n t e r r u p t s ( ) \r l e t 0067700 p = K B L K > > K B L K . 0067720 p t r / / c h a s e d o 0067740 w n c h a i n \r i f p n e 0067760 0 t h e n \r [ \r 0070000 u n t i l p > > K C B . n e x 0070020 t K C B e q 0 d o p = 0070040 p 376 001 \0 357 275 > > K C B . n e x 0070060 t K C B \r p > > K C B . n 0070100 e x t K C B = l v c b > > 0070120 C B . d i s k A d d r e s s \r 0070140 ] \r i f K B L K > > K B L 0070160 K . p t r e q 0 t h e n 0070200 K B L K > > K B L K . p t r = 0070220 l v c b > > C B . d i s k A 0070240 d d r e s s \r / / * E n a b l 0070260 e I n t e r r u p t s ( ) \r \r / 0070300 / P u t t h i s C B b a 0070320 c k o n t h e a v a i l a 0070340 b l e q u e u e \r c b > > C B 0070360 . n e x t C B = 0 \r t e s t 0070400 c b z > > C B Z . h e a d e 0070420 q 0 \r i f s o c b z > 0070440 > C B Z . h e 376 001 \0 G 313 a d = 0070460 c b \r i f n o t c b z 0070500 > > C B Z . t a i l > > C B . n 0070520 e x t C B = c b \r c b z > > 0070540 C B Z . t a i l = c b \r ] \r 0070560 \f \r / / - - - - - - - - - - - - 0070600 - - - - - - - - - - - - - - - - * 0070700 \r a n d T F S G e t C b ( d i 0070720 s k , c b z , d o n t C l e 0070740 a r , r e t u r n I f N o C b 0070760 ; n u m a r g s n a ) = 0071000 v a l o f \r / / - - - - - - - 0071020 - - - - - - - - - - - - - - - - 0071040 - - - - - - - - - - - - 376 001 \0 220 0071060 234 - - - - - - - - - - - - - - - 0071100 - - - - - - - - - - - - - - - - 0071120 - - - - - - - - - - \r [ \r / / 0071140 D e q u e u e n e x t C B 0071160 f r o m C B Z \r l e t c b 0071200 = c b z > > C B Z . h e a d \r 0071220 i f c b e q 0 t h e n \r 0071240 [ \r i f n a g e 0071260 4 & r e t u r n I f N o C 0071300 b r e s u l t i s 0 \r 0071320 S y s E r r ( c b z , e c T f 0071340 s Q u e u e ) / / t h e r e 0071360 s h o u l d b e o n e \r 0071400 ] \r c b z > > C B Z . h e a 0071420 d = c b > > C B . n e x t C 0071440 B \r \r / / I f h e a d e r 0071460 s 376 001 \0 332 201 t a t u s i s d 0071500 s t F r e e , c b i s u s 0071520 a b l e \r i f c b > > C B . S 0071540 t a t u s H e q d s t F r e 0071560 e t h e n [ Z e r o ( c b 0071600 , l V a r C B ) ; r e s u l 0071620 t i s c b ] \r \r / / M a n 0071640 y w a y s t o r e t u r n 0071660 a g o o d c b \r [ 0071700 / / r e p e a t ( g i v e s 0071720 u s s o m e t h i n g t o 0071740 b r e a k o u t o f ) \r 0071760 / / F o l l o w i n g c 0072000 o d e d e p e n d s o n t 0072020 h e f a c t t h a t l a b 0072040 e l i s a l w a y s t r a 0072060 n s f e r r 376 001 \0 * 311 e d , \r 0072100 / / a l t h o u g h t h 0072120 e d a t a f i e l d m a y 0072140 n o t b e ( D C r e a d L 0072160 n D ) \r l e t l v S t a 0072200 t u s = c b > > C B . C o m 0072220 m D e q 0 ? l v c b > > 0072240 C B . S t a t u s L , l v c 0072260 b > > C B . S t a t u s D \r \r 0072300 / / H e r e i s t h e 0072320 m a i n p l a c e t o w 0072340 a i t f o r c o m m a n d 0072360 c o m p l e t i o n : \r i 0072400 f @ l v S t a t u s e q 0 0072420 t h e n \r [ \r 0072440 i f n a g e 4 & 0072460 r e t u r n I f N o 376 001 \0 P 275 0072500 C b t h e n / / P u t 0072520 c b b a c k o n q u e u e 0072540 a n d r e t u r n 0 \r 0072560 [ c b z > > C B 0072600 Z . h e a d = c b ; r e s 0072620 u l t i s 0 ] \r \r 0072640 l e t i n T i m e = @ R 0072660 T C + 5 * ( 1 0 0 0 / 3 9 ) 0072700 / / P r e p a r e a t 0072720 i m e r ( 5 s e c o n d s ) 0072740 \r [ / / W 0072760 a i t f o r c o m m a n d 0073000 t o c o m p l e t e o r t 0073020 i m e o u t \r 0073040 I d l e ( ) \r 0073060 i f @ l v S t a t u s n e 0073100 376 001 \0 3 _ 0 t h e n b r e 0073120 a k / / c o m m a n d c 0073140 o m p l e t e d \r 0073160 i f K B L K > > K B L K . 0073200 p t r e q 0 & c b > > C 0073220 B . I D e q d c b I D t h 0073240 e n \r / 0073260 / c o n t r o l l e r w e n 0073300 t i d l e w i t h o u t e 0073320 v e n s t a r t i n g t h i 0073340 s c o m m a n d \r 0073360 [ @ l v S t a t u 0073400 s = d s t F o r g o t t e n 0073420 % d s t D o n e ; b r e a 0073440 k ] \r i f 0073460 @ R T C - i n T i m e g r 0 0073500 t h e n 376 001 \0 234 376 \r 0073520 / / c o m m a n 0073540 d t i m e d o u t a n d 0073560 c o n t r o l l e r s e e m s 0073600 t o b e h u n g u p \r 0073620 [ @ l v 0073640 S t a t u s = d s t T i m e 0073660 o u t % d s t D o n e ; b 0073700 r e a k ] \r 0073720 ] r e p e a t \r ] 0073740 \r \r c o m p i l e i f d 0073760 e b u g t h e n \r 0074000 [ \r / / I f s t 0074020 a t u s i s n o t s e t , 0074040 i t m u s t m e a n t h 0074060 a t t h e c o m m a n d a 0074100 b o r t e d , \r 376 001 \0 " * 0074120 / / o r t h e r e a 0074140 d t a s k c o m m i t t e d 0074160 s u i c i d e , o r s e c 0074200 t o r p u l s e s a r e n 0074220 o t t h e r e . \r 0074240 i f ( @ l v S t a t u s & 0074260 ( d s t F o r g o t t e n % 0074300 d s t T i m e o u t ) ) n e 0074320 0 t h e n \r 0074340 [ \r l e t s 0074360 a v e I t N o w = v e c l 0074400 V a r C B \r M 0074420 o v e B l o c k ( s a v e I t N 0074440 o w , c b , l V a r C B ) \r 0074460 c o m p i l e 0074500 i f s a v e r e g s t h e 376 0074520 001 \0 376 \ n [ S a v e R e g s 0074540 ( ) ] \r i f 0074560 K B L K > > K B L K . a b o r 0074600 t e d e q 0 t h e n C a 0074620 l l S w a t ( " d e a d " ) \r 0074640 ] \r 0074660 l e t E r r o r R a n = n 0074700 i l \r i f K B L K 0074720 > > K B L K . a b o r t e d t 0074740 h e n @ # 2 2 = @ # 2 2 + 0074760 1 \r i f T F S E r 0075000 r o r R a t e t h e n \r 0075020 [ \r 0075040 l e t l b = ( t a b l e 0075060 [ # 6 1 0 0 3 ; # 1 2 1 0 0075100 0 0 ; # 1 4 0 1 ] ) ( ) \t 0075120 / / R C 376 001 \0 033 J L K \r 0075140 E r r o r R a n = 0075160 ( l b r s h i f t 6 ) & # 7 0075200 7 \t \t / / m a k e 6 - b i t 0075220 q u a n t i t y \r 0075240 i f E r r o r R a n l 0075260 s T F S E r r o r R a t e t 0075300 h e n c b > > C B . S t a t u 0075320 s H = d s t T i m e o u t \r 0075340 ] \r 0075360 R e c o r d T F S ( 0 , d i 0075400 s k , c b ) \t \t / / R e c o r 0075420 d c o m p l e t i o n o f 0075440 c o m m a n d \r ] \r 0075460 \r / / M e r g e t o g 0075500 e t h e r s t a t u s f o r 0075520 a l l b l o c 376 001 \0 5 210 k s 0075540 \r l e t e r r o r S t a 0075560 t u s = ( c b > > C B . S 0075600 t a t u s D % c b > > C B . 0075620 S t a t u s L % c b > > C B 0075640 . S t a t u s H ) & \r 0075660 d s t E r r o r s / / m a 0075700 s k o u t n o n - e r r o r 0075720 s \r \r / / M o s t s u 0075740 c c e s s f u l t r a n s f e 0075760 r s e x i t h e r e : \r 0076000 i f e r r o r S t a t u s 0076020 e q 0 t h e n b r e a k \r 0076040 \f \r / / T F S G e t C b ( c 0076060 o n t ' d ) \r \r / / M u 0076100 s t r e s e t t h e d i s 0076120 k a f t e r e a c h e 376 001 0076140 \0 350 Z r r o r - - b u t d 0076160 o n ' t t a m p e r w i t h 0076200 z o n e . \r / / N o t 0076220 e t h a t o t h e r d i s 0076240 k a c t i v i t y c a n b 0076260 e t a k i n g p l a c e ( 0076300 e . g . , w e m i g h t \r 0076320 / / j u s t h a v e a 0076340 n E C C e r r o r a n d 0076360 c a n f i x i t w i t h o 0076400 u t f l u s h i n g r e m a 0076420 i n d e r \r / / o f c 0076440 o m m a n d b l o c k c h a 0076460 i n ) . \r c o m p i l e i 0076500 f d e b u g t h e n [ R 0076520 e c o r d T F S ( 1 , e r r o 0076540 r S t 376 001 \0 231 033 a t u s ) ] \r 0076560 D o R e c o v e r y ( d i 0076600 s k , d i s k R e s e t , c 0076620 b z > > C B Z . e r r o r R t n 0076640 ) \r \r / / R e t r y d 0076660 a t a - l a t e a n d " f o 0076700 r g o t t e n " e r r o r s 0076720 i n d e f i n i t e l y , w i 0076740 t h o u t a n y \r / / 0076760 o t h e r r e c o v e r y a 0077000 c t i o n s , a n d w i t h 0077020 o u t c o u n t i n g t h e 0077040 m a s e r r o r s . \r 0077060 i f ( e r r o r S t a t u s 0077100 & d s t R e t r y I n d e f i 0077120 n i t e l y ) e q 0 t h e 0077140 n \r 376 001 \0 231 \t [ \r 0077160 c b z > > C B Z . e r 0077200 r o r C o u n t = c b z > > 0077220 C B Z . e r r o r C o u n t + 1 0077240 \r l e t e r r o r 0077260 C o u n t = c b z > > C B Z 0077300 . e r r o r C o u n t \r \r 0077320 / / D i s k i s n o 0077340 w q u i e t . N o w d o 0077360 e r r o r r e p o r t i n g 0077400 a n d r e c o v e r y . \r 0077420 / / R e p o r t a 0077440 c h e c k e r r o r n o t 0077460 a c c o m p a n i e d b y 0077500 o t h e r e r r o r s o n l 0077520 y a f t e r \r / / 0077540 i t h a s b e e n 376 001 \0 0077560 R 344 r e t r i e d a t l e a 0077600 s t o n c e - - b e c a u 0077620 s e E O F i s s o m e t i 0077640 m e s \r / / d e t 0077660 e c t e d b y s l a m m i n 0077700 g i n t o p a g e 0 a n 0077720 d g e t t i n g a c h e c 0077740 k e r r o r . \r u 0077760 n l e s s e r r o r C o u n t 0100000 e q 1 & e r r o r S t a 0100020 t u s e q d s t C o m p E r 0100040 r d o \r [ \r 0100060 c o m p i l e 0100100 i f d e b u g t h e n \r 0100120 [ \r 0100140 i f T F S E r 0100160 r o 376 001 \0 236 034 r R a t e n e 0100200 0 & E r r o r R a n l s 0100220 T F S R e s t o r e R a t e t 0100240 h e n \r 0100260 e r r o r C o u n t = 0100300 ( d i s k > > D S K . r e t r y 0100320 C o u n t r s h i f t 1 ) + 0100340 1 \r ] \r 0100360 \r T F S I n c 0100400 r e m e n t ( l v d i s k > > 0100420 T F S D S K . n E r r o r s ) \r 0100440 l e t b l o 0100460 c k = l v c b > > C B . C 0100500 o m m H \r e r 0100520 r o r S t a t u s = 0 \r \r 0100540 [ / / 0100560 r e p e a t 376 001 \0 C 342 f o r 0100600 e a c h b l o c k \r 0100620 / / A t t e m p 0100640 t E C C o n l y i f t h 0100660 e r e w e r e n o o t h e 0100700 r e r r o r s i n t h i s 0100720 b l o c k . \r 0100740 / / T h i s i n c l 0100760 u d e s c h e c k e r r o r 0101000 s , s i n c e t h e f i r 0101020 s t t w o w o r d s o f 0101040 a \r / / 0101060 c h e c k e d b l o c k a 0101100 r e n o t s t o r e d i n 0101120 m e m o r y a n d t h e r 0101140 e f o r e i t i s \r 0101160 / / h 376 001 \0 s 0101200 211 o p e l e s s t o c o r r 0101220 e c t a n E C C e r r o r 0101240 i n a c h e c k e d b l 0101260 o c k . \r 0101300 / / A l s o , d o n o t 0101320 i n v o k e E C C u n t i 0101340 l w e h a v e r e t r i e 0101360 d a t l e a s t \r 0101400 / / 4 t i m e 0101420 s , t o r e d u c e t h e 0101440 r i s k o f f a l s e E 0101460 C C c o r r e c t i o n \r 0101500 / / o n 0101520 t r a n s i e n t d a t a e 0101540 r r o r s . \r 0101560 l e t s t a t u s = 0101600 b 376 001 \0 362 n l o c k > > K C B b 0101620 l o c k . S t a t u s & d s 0101640 t E r r o r s \r 0101660 i f s t a t u s e q 0101700 d s t E C C e r r o r t h e 0101720 n \r 0101740 [ \r 0101760 T F S I n c r e m e n t ( l 0102000 v d i s k > > T F S D S K . n 0102020 E C C E r r o r s ) \r 0102040 i f e r r 0102060 o r C o u n t g e 4 & D 0102100 a t a F i x ( b l o c k ) e q 0102120 - 1 t h e n \r 0102140 [ s t a 0102160 t u s = 0 ; T F S I n c r 0102200 e m e n t ( 376 001 \0 332 311 l v d i 0102220 s k > > T F S D S K . n E C C F 0102240 i x e s ) ] \r 0102260 ] \r 0102300 e r r o r S t a t u s 0102320 = e r r o r S t a t u s % 0102340 s t a t u s \r 0102360 b l o c k = b l o c 0102400 k + ( s i z e K C B b l o c k 0102420 / 1 6 ) \r 0102440 ] r e p e a t w h i l e b 0102460 l o c k u l e ( l v c b > 0102500 > C B . C o m m D ) \r \r 0102520 i f e r r o r S t a 0102540 t u s e q 0 t h e n b r 0102560 e a k / / s u c c e s s f u 0102600 l E C C f i x \r 376 001 \0 ] k 0102620 ] \r \r 0102640 / / T u r n d i s p l a y 0102660 b a c k o n n o w , s i 0102700 n c e e r r o r r o u t i n 0102720 e m i g h t n e v e r r e 0102740 t u r n \r i f T F 0102760 S S a v e d D i s p l a y n e 0103000 - 1 t h e n \r 0103020 [ @ D A s t a r t = T 0103040 F S S a v e d D i s p l a y ; 0103060 T F S S a v e d D i s p l a y 0103100 = - 1 ] \r \f \r / / T F S G 0103120 e t C b ( c o n t ' d ) \r \r 0103140 c b z > > C B Z . e r 0103160 r o r D A = c b > > C B . v 0103200 D i s k A d d r e s s \r 0103220 376 001 \0 + * i f e r r o r C 0103240 o u n t g e d i s k > > D S 0103260 K . r e t r y C o u n t t h e 0103300 n \r [ / 0103320 / N o n - r e c o v e r a b l 0103340 e e r r o r \r 0103360 T F S I n c r e m e n t ( l v 0103400 d i s k > > T F S D S K . n U 0103420 n R e c o v ) \r 0103440 ( @ c b z > > C B Z . e r r o 0103460 r R t n ) ( c b z > > C B Z . e 0103500 r r o r R t n , c b , e c U 0103520 n R e c o v D i s k E r r o r ) 0103540 \r b r e a k 0103560 / / L e t r e m a i 0103600 n d e r o f t r a n s f e r 0103620 s p r o 376 001 \0 213 373 c e e d \r 0103640 ] \r \r 0103660 / / I f m o r e t h a n 0103700 8 e r r o r s , d o r e 0103720 s t o r e b e f o r e t r y 0103740 i n g a g a i n . \r 0103760 i f e r r o r C o u n t g 0104000 r ( d i s k > > D S K . r e t 0104020 r y C o u n t r s h i f t 1 0104040 ) t h e n \r 0104060 [ \r / / C h 0104100 e c k f o r r e a d - o n l 0104120 y e r r o r . W e d o 0104140 t h i s a f t e r 8 r e t 0104160 r i e s \r / / 0104200 ( r a t h e r t h a n i m 0104220 m e d i a t e l y ) 376 001 \0 310 \b 0104240 b e c a u s e t h e h a r d 0104260 w a r e d o e s n ' t p r o 0104300 v i d e \r / / 0104320 a n u n e q u i v o c a l 0104340 " t r i e d t o w r i t e 0104360 w h e n r e a d - o n l y " 0104400 i n d i c a t i o n . \r 0104420 / / A l s o , w e 0104440 m u s t d o a r e s t o 0104460 r e a f t e r t h e e r r 0104500 o r r o u t i n e r e t u r 0104520 n s i n \r / 0104540 / o r d e r t o f o r c e 0104560 t h e d r i v e t o n o 0104600 t i c e t h e n e w s t a 0104620 t e o f t h e s w i t c 376 0104640 001 \0 237 V h . \r 0104660 / / N o t e t h a t t h e 0104700 R e a d O n l y b i t h a 0104720 s b e e n m a s k e d o u 0104740 t i n e r r o r S t a t u s 0104760 , \r / / b u 0105000 t t h e s t a t u s s t o 0105020 r e d o n t o p o f t h 0105040 e I D c o n t a i n s t h 0105060 e t r u e s t a t e \r 0105100 / / o f t h e 0105120 R e a d O n l y s w i t c h . 0105140 \r i f ( c b 0105160 > > C B . I D ) < < D S T . R e 0105200 a d O n l y & e r r o r S t 0105220 a t u s < < D S T . D e v i c e 0105240 C k t 376 001 \0 ~ R h e n \r 0105260 ( @ c b z > > 0105300 C B Z . e r r o r R t n ) ( c b 0105320 z > > C B Z . e r r o r R t n , 0105340 c b , e c R e a d O n l y ) 0105360 \r T F S I n c 0105400 r e m e n t ( l v d i s k > > 0105420 T F S D S K . n R e s t o r e s 0105440 ) \r D o R e c 0105460 o v e r y ( d i s k , d i s k 0105500 R e s t o r e , c b z > > C B 0105520 Z . e r r o r R t n ) \r 0105540 ] \r ] \r \r 0105560 / / I n i t i a l i z e 0105600 t h i n g s a g a i n \r 0105620 T F S I n i t i a l i z e C b 0105640 S t o r a g e ( d 376 001 \0 257 235 i s 0105660 k , c b z , c b > > C B . t 0105700 r u e P a g e N u m b e r ) \r 0105720 R e t u r n T o ( c b z > > 0105740 C B Z . r e t r y ) \r ] 0105760 r e p e a t \r \r / / T u r n 0106000 d i s p l a y b a c k o n 0106020 i f d i s k n o w i d l e 0106040 \r i f K B L K > > K B L K . p 0106060 t r e q 0 & T F S S a v 0106100 e d D i s p l a y n e - 1 0106120 t h e n \r [ @ D A s t a 0106140 r t = T F S S a v e d D i s 0106160 p l a y ; T F S S a v e d D i 0106200 s p l a y = - 1 ] \r \r / / 0106220 G o o d c b f r o m p r 0106240 e v i o u s t r a n s f e 376 001 0106260 \0 l 335 r , r e a d y t o r 0106300 e t u r n \r T F S I n c r e m e 0106320 n t ( l v d i s k > > T F S D 0106340 S K . n T r a n s f e r s ) \r c 0106360 b z > > C B Z . n e x t D A = 0106400 V i r t u a l D i s k D A ( d 0106420 i s k , l v c b > > C B . A 0106440 d d r L > > D L . n e x t ) \r c 0106460 b z > > C B Z . c u r r e n t N 0106500 u m C h a r s = c b > > C B 0106520 . A d d r L > > D L . n u m C h 0106540 a r s \r c b z > > C B Z . e r r 0106560 o r C o u n t = 0 \r c b z > 0106600 > C B Z . c l e a n u p R o u t 0106620 i n e ( d i s k , c b , c b 0106640 z ) \r u n l e s s ( ( n a g 0106660 e 3 376 001 \0 275 211 ) & d o n t 0106700 C l e a r ) d o Z e r o ( c 0106720 b , l V a r C B ) \r r e s u l 0106740 t i s c b \r ] \r \f \r / / - - - 0106760 - - - - - - - - - - - - - - - - * 0107060 - - - - - - - - - \r a n d D o 0107100 R e c o v e r y ( d i s k , c 0107120 o m m a n d , e r r o r R t n 0107140 ; n u m a r g s n a ) b e 0107160 \r / / - - - - - - - - - - - - - 0107200 - - - - - - - - - - - - - - - - * 0107260 - - - - - - - - 376 001 \0 235 S - - - 0107300 - - - - \r / / R e c o v e r y 0107320 c o d e f o r m a n y p 0107340 u r p o s e s . C a l l e d 0107360 f r o m T F S G e t C b a 0107400 n d T F S I n i t \r \r / / T 0107420 h e c o a x i n g o p e r a 0107440 t i o n i s p e r f o r m e 0107460 d i f a c o m m a n d t 0107500 i m e s o u t . I t m a 0107520 y \r / / b e t h a t w e 0107540 h a v e i n a d v e r t e n t 0107560 l y s e l e c t e d a n o 0107600 n - e x i s t e n t d r i v e 0107620 . \r / / A l s o , w e m u 0107640 s t h a n d l e t h e c a 0107660 s e i n w h i c h t 376 001 \0 0107700 Z & h e \r / / p r e s e n t l 0107720 y - s e l e c t e d d r i v e 0107740 h a s b e e n t a k e n 0107760 o f f l i n e , a n d n o 0110000 m o r e \r / / s e c t o r 0110020 p u l s e s a r e a r r i v 0110040 i n g ( R o g e r d i d n 0110060 o t p u t t h e o n e - s 0110100 h o t \r / / s e c t o r - p u 0110120 l s e i m p e r s o n a t o r 0110140 i n h i s i n t e r f a c 0110160 e t h a t M c C r e i g h t 0110200 d i d \r / / i n h i s ! ) 0110220 . S o b e p r e p a r e 0110240 d t o g i v e s o m e " 0110260 f a k e " s e c t o r p u l 0110300 s e 376 001 \0 L 202 s v i a S t a 0110320 r t I O . \r / / A l s o , t 0110340 h e r e i s a b u g i n 0110360 t h e c o n t r o l l e r 0110400 s u c h t h a t i f y o u 0110420 i s s u e a R e a d \r / / 0110440 a n d t h e d r i v e d 0110460 o e s n ' t s e n d y o u 0110500 a n y d a t a ( e . g . , 0110520 b e c a u s e i t ' s i n 0110540 s e l e c t \r / / l o c k o 0110560 r t h e p a c k h a s b 0110600 e e n D C - e r a s e d ) , 0110620 t h e c o n t r o l l e r g 0110640 e t s h u n g u p \r / / w 0110660 a i t i n g f o r t h e s 0110700 y n c b i t 376 001 \0 314 \n . T 0110720 h e o n l y s a f e w a y 0110740 t o g e t o u t o f t 0110760 h i s s t a t e i s \r / / 0111000 t o r e s e t t h e c o n 0111020 t r o l l e r , t u r n i t 0111040 b a c k o n , a n d i s 0111060 s u e a d i s k R e s e t . 0111100 \r [ \r i f n a l s 3 t h 0111120 e n e r r o r R t n = l v 0111140 D e f a u l t T F S E r r o r 0111160 R t n \r l e t c o a x = f a l 0111200 s e \r l e t k c b = v e c 0111220 l K C B \r w h i l e T F S L 0111240 o c k n e 0 d o I d l e 0111260 ( ) \r T F S L o c k = d i s 0111300 k \r T F S W a i t Q u i 376 001 \0 \0 0111320 024 e t ( f a l s e ) \r l e t r 0111340 e t r y C o u n t = 0 \r \r 0111360 [ / / r e p e a t u 0111400 n t i l w e s u c c e e d 0111420 i n m a k i n g a l l e r 0111440 r o r s g o a w a y \r 0111460 i f c o a x t h e n S t a 0111500 r t I O ( # 2 0 ) / / r e 0111520 s e t c o n t r o l l e r \r 0111540 r e t r y C o u n t = r 0111560 e t r y C o u n t + 1 \r i 0111600 f ( r e t r y C o u n t & 0111620 1 7 B ) e q 0 t h e n \r 0111640 [ \r c o m 0111660 p i l e i f s a v e r e g s 0111700 t h e n [ S a v e R e g s ( 0111720 ) 376 001 \0 270 / ] \r ( 0111740 @ e r r o r R t n ) ( e r r o r 0111760 R t n , d i s k > > D S K . d 0112000 r i v e N u m b e r , e c D r 0112020 i v e H u n g ) \r ] 0112040 \r Z e r o ( k c b , l K 0112060 C B ) \r k c b > > K C B . 0112100 I D = d c b I D \r k c 0112120 b > > K C B . t r a c k = - 0112140 1 \r k c b > > K C B . d r 0112160 i v e = d i s k > > D S K . 0112200 d r i v e N u m b e r \r k 0112220 c b > > K C B . C o m m H = 0112240 c o m m a n d \r K B L K > 0112260 > K B L K . t r a c k = - 1 0112300 / / F o r c e m i c r o 0112320 c o d e t 376 001 \0 204 345 o f o r 0112340 g e t c y l i n d e r a d d 0112360 r e s s \r K B L K > > K B 0112400 L K . d r i v e = d i s k > 0112420 > D S K . d r i v e N u m b e r 0112440 % 1 0 0 0 0 0 B / / F 0112460 o r c e d r i v e s e l e c 0112500 t \r K B L K > > K B L K . 0112520 a b o r t e d = 0 \r c 0112540 o m p i l e i f d e b u g t 0112560 h e n [ R e c o r d T F S ( 0112600 2 , c o m m a n d ) ] \r 0112620 K B L K > > K B L K . p t r 0112640 = k c b \r i f c o a x 0112660 t h e n S t a r t I O ( # 4 0112700 0 ) / / s t a r t c o n 0112720 t r o l l e r \r 376 001 \0 " l 0112740 T F S W a i t Q u i e t ( c o m 0112760 m a n d e q d i s k R e s t 0113000 o r e ) \r \r / / I f w 0113020 e t i m e d o u t , p e r 0113040 h a p s s e c t o r p u l s 0113060 e s h a v e g o n e a w a 0113100 y . \r / / I s s u e t 0113120 h e c o m m a n d m o r e 0113140 f o r c e f u l l y n e x t 0113160 t i m e a r o u n d . \r 0113200 t e s t k c b > > K C B . S t 0113220 a t u s H e q 0 % k c b 0113240 > > K C B . I D e q d c b I 0113260 D \r i f s o c o a 0113300 x = t r u e \r i 0113320 f n o t \r [ \r 0113340 376 001 \0 273 364 / / 0113360 N o t R e a d y i n K C B 0113400 h a p p e n s n o r m a l l 0113420 y i f c o m m a n d e q 0113440 d i s k R e s t o r e . \r 0113460 m a n i f e s t N 0113500 o t R e a d y = 1 0 0 0 0 0 0113520 B r s h i f t o f f s e t 0113540 D S T . N o t R e a d y \r 0113560 l e t s t a t u s 0113600 = K B L K > > K B L K . S t 0113620 a t u s % ( k c b > > K C B 0113640 . S t a t u s H & n o t N 0113660 o t R e a d y ) \r \r 0113700 / / C o n s i d e r r 0113720 e c o v e r y s u c c e s s f 0113740 u l i f 376 001 \0 } < c o m m a 0113760 n d e x e c u t e d w i t h 0114000 o u t \r / / 0114020 e r r o r i n n o n - c o a 0114040 x m o d e . \r 0114060 i f s t a t u s < < D S T . 0114100 E r r o r s e q 0 & n o 0114120 t c o a x t h e n b r e a 0114140 k \r c o a x 0114160 = f a l s e \r \r 0114200 / / C e r t a i n e r r 0114220 o r s s o m e t i m e s r e 0114240 q u i r e a r e s t o r e 0114260 t o r e s e t . \r 0114300 / / I f w e d i d n 0114320 ' t s u c c e e d i n r e 0114340 s e t t i n g o n 376 001 \0 m 264 e 0114360 , t r y a r e s t o r e 0114400 n e x t t i m e . \r 0114420 i f ( s t a t u s & 0114440 d s t R e s t o r e ) n e 0114460 0 t h e n c o m m a n d = 0114500 d i s k R e s t o r e \r 0114520 ] \r ] r e p 0114540 e a t \r \r T F S L o c k = 0 0114560 \r ] \r \f \r / / - - - - - - - - - 0114600 - - - - - - - - - - - - - - - - * 0114700 - - - \r a n d T F S W a i t Q 0114720 u i e t ( a w a i t I n d e x ) 0114740 b e \r / / - - - - - - - - - 376 0114760 001 \0 304 O - - - - - - - - - - - - 0115000 - - - - - - - - - - - - - - - - * 0115060 - - - - - - - \r / / W a i t 0115100 u n t i l d i s k i s t h 0115120 o r o u g h l y i d l e . 0115140 E v i d e n c e f o r i d l 0115160 e i s : \r / / 1 - K B 0115200 L K . p t r = 0 , i . e . n 0115220 o c o m m a n d s r e m a i 0115240 n \r / / 2 - K B L K . S 0115260 e c t o r i s c o u n t i n 0115300 g , i . e . n o t i n a 0115320 w r i t e c o m m a n d , \r 0115340 / / \t a n d r e a d t a s k 0115360 h a s 376 001 \0 K \b h a d t i 0115400 m e t o f i n i s h . \r / / 0115420 A l s o w e s h o u l d 0115440 n o t e t h a t a f t e r 0115460 a R e s t o r e i s e x e 0115500 c u t e d , \r / / i t t a k 0115520 e s a w h i l e f o r s 0115540 e c t o r p u l s e s t o 0115560 s t a r t a r r i v i n g a 0115600 g a i n , \r / / a n d w e 0115620 m u s t a w a i t a n i n 0115640 d e x m a r k b e c a u s e 0115660 t h e s e c t o r c o u n 0115700 t m a y h a v e \r / / g o 0115720 t t e n o u t o f s y n c 0115740 . \r [ \r l e t s t a g e = 0115760 0 \r l e t l a s 376 001 \0 . 231 t P 0116000 t r = - 1 \r l e t t i m e 0116020 r = n i l \r l e t s e c t 0116040 o r = n i l \r \r [ / 0116060 / r e p e a t \r s w i t 0116100 c h o n s t a g e i n t o \r 0116120 [ \r c a 0116140 s e 0 : \r / 0116160 / W a i t f o r c b q u 0116200 e u e t o e m p t y , b u 0116220 t t i m e o u t i f a 0116240 s i n g l e c o m m a n d \r 0116260 / / s t a y s 0116300 s t u c k o n t h e q u 0116320 e u e f o r m o r e t h a 0116340 n 5 0 0 m s . \r 0116360 i f K B L K > > K B 376 001 0116400 \0 322 267 L K . p t r n e l a s 0116420 t P t r t h e n \r 0116440 [ l a s t P t r 0116460 = K B L K > > K B L K . p t r 0116500 ; t i m e r = @ R T C + 0116520 5 0 0 / 3 9 ] \r 0116540 i f K B L K > > K B L K 0116560 . p t r e q 0 t h e n s 0116600 t a g e = 1 \r 0116620 e n d c a s e \r 0116640 c a s e 1 : \r 0116660 / / W a i t f o r r e s 0116700 t o r e t o c o m p l e t e 0116720 \r u n l e s s 0116740 a w a i t I n d e x & K B 0116760 L K > > K B L K . N o t R e a d 0117000 y d 376 001 \0 020 373 o \r 0117020 [ s e c t o r = 0117040 K B L K > > K B L K . S e c t 0117060 o r ; t i m e r = @ R T C 0117100 + 1 ; s t a g e = 2 ] \r 0117120 e n d c a s e 0117140 \r c a s e 2 : \r 0117160 / / W a i t 0117200 f o r s e c t o r n u m b e 0117220 r t o a d v a n c e , b u 0117240 t t i m e o u t a f t e r 0117260 \r / / 3 9 0117300 m s ( t w o r o t a t i o n 0117320 s ) . \r i f 0117340 K B L K > > K B L K . S e c t o 0117360 r n e s e c t o r t h e n 0117400 \r 376 001 \0 353 237 0117420 [ u n l e s s a w a i t 0117440 I n d e x b r e a k ; s t a 0117460 g e = 3 ] \r 0117500 e n d c a s e \r 0117520 c a s e 3 : \r 0117540 / / I f d i d r e s t o 0117560 r e , w a i t f o r i n d 0117600 e x m a r k ( s e c t o r 0117620 0 ) \r i f K 0117640 B L K > > K B L K . S e c t o r 0117660 e q 0 b r e a k \r 0117700 e n d c a s e \r 0117720 ] \r I d l e ( ) \r 0117740 ] r e p e a t u n t i l 0117760 @ R T C - t i m e r g r 0 \r 0120000 \r K B L K > > K B L K . p 376 001 \0 0120020 R 205 t r = 0 / / i n 0120040 c a s e m i c r o c o d e d 0120060 i d n ' t d o a n y t h i n 0120100 g \r ] \r \r / / - - - - - - - - - 0120120 - - - - - - - - - - - - - - - - * 0120220 - - - \r a n d D e f a u l t T 0120240 F S E r r o r R t n ( l v E r r 0120260 o r R t n , c b , e c ) b 0120300 e S y s E r r ( 0 , e c , 0120320 c b ) \r / / - - - - - - - - - - 0120340 - - - - - - - - - - - - - - - - * 0120420 - - 376 001 \0 341 F - - - - - - - - - 0120440 - - - - - - - \r \r / / - - - - - 0120460 - - - - - - - - - - - - - - - - * 0120560 - - - - - - - \r a n d T F S N 0120600 o n E x ( d i s k ) b e S y 0120620 s E r r ( d i s k , e c N o C 0120640 r e a t i o n A b i l i t y ) \r 0120660 / / - - - - - - - - - - - - - - 0120700 - - - - - - - - - - - - - - - - * 0120760 - - - - - - - - - - - - - - \r / 0121000 / W h a t h a p p e n s i 0121020 f y o u t 376 001 \0 w 216 r y t 0121040 o c r e a t e o r d e l e 0121060 t e f i l e s w h e n i n 0121100 i t m o d e w a s 0 \r \f \r / 0121120 / - - - - - - - - - - - - - - - 0121140 - - - - - - - - - - - - - - - - * 0121220 - - - - - - - - - - - - - \r a n 0121240 d D a t a F i x ( b l o c k ) 0121260 = v a l o f \r / / - - - - - 0121300 - - - - - - - - - - - - - - - - * 0121400 - - - - - - - \r / / E C C f 0121420 i x e r . A r g u m 376 001 \0 341 0121440 ? e n t i s a " b l o c k 0121460 " o f t h e d i s k c o 0121500 m m a n d . \r / / R e t u r n 0121520 s : - 1 i f e v e r y t h 0121540 i n g f i x e d c o r r e c 0121560 t l y . \r / / . . . o t h e r 0121600 w i s e . . . a n u m b e r 0121620 i n d i c a t i n g w h e r 0121640 e t h e E C C g a v e u 0121660 p . \r [ \r m a n i f e s t L C 0121700 M = 2 1 * 2 0 4 7 \r \r l e t 0121720 s i n k = v e c 1 \r l e 0121740 t r e m 0 = b l o c k > > 0121760 K C B b l o c k . E C C 0 & 0122000 # 3 7 \r l e t r e m 1 = b 0122020 l o c k > > K C B b l o c k . E 0122040 C 376 001 \0 G 0 C 1 \r l e t S 0 , 0122060 S 1 = 0 , n i l \r l e t D 0122100 x , D , D b i t s , p , d a t a 0122120 , m a s k = n i l , n i l , 0122140 n i l , n i l , n i l , n i l \r 0122160 [ / / r e p e a t \r 0122200 i f ( r e m 1 & # 1 0122220 7 7 7 ) e q 0 t h e n b 0122240 r e a k \r l e t m s b 0122260 = r e m 0 r s h i f t 4 \r 0122300 r e m 0 = ( ( r e m 0 0122320 l s h i f t 1 ) & # 3 7 0122340 ) + ( r e m 1 r s h i f t 0122360 1 5 ) \r r e m 1 = ( 0122400 r e m 1 l s h i f t 1 ) + 0122420 m s b \r S 0 = S 0 0122440 + 1 \r 376 001 \0 \0 204 i f S 0122460 0 g e 2 1 t h e n r e s 0122500 u l t i s 1 \r ] r e 0122520 p e a t \r r e m 0 = r e m 0 0122540 l s h i f t 6 + r e m 1 0122560 r s h i f t 1 0 \r r e m 1 0122600 = b l o c k > > K C B b l o c 0122620 k . E C C 0 r s h i f t 5 \r 0122640 i f r e m 1 e q 0 % r 0122660 e m 0 e q 0 t h e n r e 0122700 s u l t i s 2 \r S 1 = T F 0122720 S M o d S h i f t ( r e m 1 , 0122740 r e m 0 ) + 1 1 \r i f S 1 0122760 g r 2 0 4 7 + 1 1 t h e n 0123000 r e s u l t i s 3 \r D x = 0123020 ( ( - 1 9 * S 0 - 2 * S 1 0123040 ) + 2 2 0 * 2 1 ) r 376 001 \0 177 017 0123060 e m 2 1 \r / / D = 2 0 4 7 0123100 * D x - S 1 + 2 0 4 7 0123120 / / I d o n t k n o w 0123140 w h y I m u s t a d d 2 0123160 0 4 7 ! ! ! \r D = 2 0 4 8 * 0123200 D x - D x - S 1 + 2 0123220 0 4 7 / / D = 2 0 4 7 0123240 * D x + 2 0 4 7 - S 1 \r 0123260 / / i f D u g e L C M t 0123300 h e n D = D - L C M 0123320 / / F i a l a c l a i m s 0123340 t h i s c a n ' t h a p p 0123360 e n \r D b i t s = D & # 0123400 1 7 \r p = b l o c k > > K C 0123420 B b l o c k . C o u n t - ( 0123440 D r s h i f t 4 ) \r d a t a 0123460 376 001 \0 + n = b l o c k > > K 0123500 C B b l o c k . A d d r \r m a s 0123520 k = r e m 0 r s h i f t 0123540 ( 1 6 - D b i t s ) \r f o r p 0123560 t r = p t o p + 1 d o 0123600 \r [ \r i f m a s 0123620 k n e 0 t h e n \r 0123640 [ \r i f p t r 0123660 l s 0 r e s u l t i s 4 0123700 / / e r r o r o u t s i d 0123720 e o f b l o c k \r 0123740 i f p t r l s b l o c k 0123760 > > K C B b l o c k . C o u n t 0124000 t h e n / / e r r o r m 0124020 i g h t b e i n E C C w 0124040 o r d s \r d a 0124060 t a ! p t 376 001 \0 344 v r = d a 0124100 t a ! p t r x o r m a s k \r 0124120 ] \r m a s k 0124140 = r e m 0 l s h i f t D b 0124160 i t s \r ] \r r e s u l t i 0124200 s - 1 \r ] \r \r / / M i c r o 0124220 c o d e v e r s i o n s h a 0124240 r e s S r e g i s t e r s 0124260 w i t h t h e R e a d t a 0124300 s k . \r / / T h e r e f o r e 0124320 , c a l l t h i s o n l y 0124340 w h e n d i s k i s q u 0124360 i e t . \r \r / / a n d T F S M 0124400 o d S h i f t ( n u m , r e f 0124420 ) = v a l o f \r / / [ 0124440 \r / / l e t S 1 = 0 0124460 \r / / [ 376 001 \0 374 U \r 0124500 / / i f ( # 4 0 0 0124520 0 - S 1 l s 0 ) % ( n u 0124540 m - r e f e q 0 ) t h 0124560 e n b r e a k \r / / 0124600 n u m = n u m l s h i f 0124620 t 1 \r / / i f ( 0124640 n u m & # 4 0 0 0 ) n e 0124660 0 t h e n n u m = n u m 0124700 x o r # 4 0 0 5 \r / / 0124720 S 1 = S 1 + 1 \r / 0124740 / ] r e p e a t 0124760 \r / / r e s u l t i s S 0125000 1 \r / / ] \r / / \r \f \r / / 0125020 - - - - - - - - - - - - - - - - * 0125060 - - - - - - - - - - - - - - - 376 0125100 001 \0 231 356 - - - - - - - - - - - - 0125120 - - - - - - - - - - - - - - - - 0125140 - \r a n d T F S A c t O n P a 0125160 g e s ( d i s k , C A s , D 0125200 A s , f p , f i r s t P a g 0125220 e , l a s t P a g e , a c t 0125240 i o n , \r l v N u m C h 0125260 a r s , l a s t A c t i o n , 0125300 f i x e d C A , c l e a n u 0125320 p R o u t i n e , e r r o r R 0125340 t n , \r r e t u r n O n 0125360 C h e c k E r r o r , h i n t 0125400 L a s t P a g e ; n u m a r g 0125420 s n a ) = v a l o f \r / 0125440 / - - - - - - - - - - - - - - - 0125460 - - - - - - - - - - - - - - - - 0125500 - - - - 376 001 \0 D 307 - - - - - - - 0125520 - - - - - - - - - - - - - - - - * 0125560 - - \r / / S e e A c t O n D 0125600 i s k P a g e s d e s c r i p 0125620 t i o n i n B F S s e c t 0125640 i o n o f O . S . m a n u 0125660 a l . \r / / R e t u r n s t 0125700 h e p a g e n u m b e r o 0125720 f t h e l a s t p a g e 0125740 s u c c e s s f u l l y a c t 0125760 e d o n . \r / / C A s ( 0126000 c o r e a d d r e s s e s ) 0126020 a n d D A s ( d i s k a d 0126040 d r e s s e s ) a r e v e c 0126060 t o r s \r / / i n d e x e d 0126100 b y p a g e n 376 001 \0 6 336 u m 0126120 b e r ( e . g . C A s ! f i 0126140 r s t P a g e ) \r / / t h e 0126160 a r g u m e n t s f o l l o w 0126200 i n g a c t i o n a r e o 0126220 p t i o n a l ; i f o n e 0126240 o f t h e m i s \r / / o m 0126260 i t t e d o r 0 , t h e 0126300 d e f a u l t a c t i o n i 0126320 s t a k e n \r [ \r D e f a u l 0126340 t A r g s ( l v n a , - 7 , 0126360 l v n a , a c t i o n , 0126400 0 , T F S D e f a u l t C l e 0126420 a n u p R t n , \r 0 , f a l 0126440 s e , l a s t P a g e ) \r \r / 0126460 / I n i t i a l i z e f o r 0126500 t r a n s f e r s \r l e t 376 001 0126520 \0 y 360 r e s u l t = n i l 0126540 \r l e t c b z = v e c C 0126560 B z o n e L e n g t h \r T F S I 0126600 n i t i a l i z e C b S t o r a 0126620 g e ( d i s k , c b z , f i 0126640 r s t P a g e , C B z o n e L 0126660 e n g t h , A r e t r y , e 0126700 r r o r R t n ) \r c b z > > C B 0126720 Z . D A s = D A s \r c b z > 0126740 > C B Z . c l e a n u p R o u t 0126760 i n e = c l e a n u p R o u 0127000 t i n e \r i f h i n t L a s t 0127020 P a g e - f i r s t P a g e u 0127040 g r l a s t P a g e - f i r s 0127060 t P a g e t h e n \r h i 0127100 n t L a s t P a g e = l a s 0127120 t P a 376 001 \0 253 t g e / / h 0127140 i n t L a s t P a g e n o t 0127160 i n [ f i r s t P a g e . . l 0127200 a s t P a g e ] \r \r / / E a c 0127220 h c b i s u s e d t w i 0127240 c e : \r / / \t t o h o l d 0127260 t h e D L f o r p a g e 0127300 i - 1 , a n d \r / / \t t o h 0127320 o l d t h e K C B f o r 0127340 p a g e i . \r / / I t i s 0127360 n ' t r e u s e d u n t i l 0127400 t h e c o m m a n d f o r 0127420 p a g e i i s d o n e , 0127440 a n d t h a t i s \r / / 0127460 g u a r a n t e e d t o b e 0127500 a f t e r t h e D L f o 0127520 r p a g e i 376 001 \0 252 z - 1 0127540 i s n o l o n g e r n e e 0127560 d e d , \r / / s i n c e e v 0127600 e r y t h i n g i s d o n e 0127620 s t r i c t l y s e q u e n 0127640 t i a l l y b y p a g e n 0127660 u m b e r . \r \r / / N o t e : 0127700 i f t h e h i n t L a s t 0127720 P a g e l o o k s r e a s o 0127740 n a b l e a n d i s l e s 0127760 s t h a n l a s t P a g e , 0130000 \r / / w e t r a n s f e r 0130020 p a g e s u p t o t h a t 0130040 p o i n t , t h e n c h e 0130060 c k t o s e e w h e t h e 0130100 r t h e l a s t \r / / p a 0130120 g e t r a n s f e r r e 376 001 \0 0130140 # 241 d r e a l l y w a s t 0130160 h e l a s t p a g e o f 0130200 t h e f i l e . I f s o 0130220 , w e r e t u r n \r / / w 0130240 i t h o u t h a v i n g c a 0130260 u s e d t h e d i s k t o 0130300 s e e k t o c y l i n d e 0130320 r 0 a s a r e s u l t 0130340 o f \r / / c h a i n i n g f 0130360 o r w a r d f r o m t h e 0130400 l a s t p a g e . I f t 0130420 h e h i n t w a s w r o n 0130440 g , w e h a v e t o \r / / 0130460 q u e u e u p t h e r e 0130500 m a i n d e r o f t h e t 0130520 r a n s f e r s ; t h i s c 0130540 o s 376 001 \0 213 ? t s a n e x t 0130560 r a d i s k r o t a t i o n 0130600 . \r \f \r / / T F S A c t O n P 0130620 a g e s ( c o n t ' d ) \r \r A 0130640 r e t r y : \r [ / / r 0130660 e p e a t \r / / G e t 0130700 a f i r s t c b \r r e 0130720 s u l t = h i n t L a s t P 0130740 a g e \r l e t c b = 0130760 T F S G e t C b ( d i s k , c 0131000 b z ) \r l e t c u r F i 0131020 r s t P a g e = c b z > > C 0131040 B Z . c u r r e n t P a g e \r 0131060 f o r p a g e N u m b e r 0131100 = c u r F i r s t P a g e 0131120 t o h i n t L a s t P a g e 0131140 d o \r 376 001 \0 354 376 [ \r 0131160 i f D A s ! p a g 0131200 e N u m b e r e q e o f D A 0131220 t h e n / / L a s t p 0131240 a g e h a s b e e n f i x 0131260 e d u p \r [ 0131300 r e s u l t = p a g e N u 0131320 m b e r - 1 ; b r e a k ] \r 0131340 \r / / B e v e r 0131360 y c a r e f u l , i f l a 0131400 s t A c t i o n i s d i f f 0131420 e r e n t , t o l e t f i 0131440 r s t s e t o f \r 0131460 / / t r a n s f e r s , i 0131500 f a n y , f i n i s h a n 0131520 d b e r e t r i e d i f 0131540 n e c e s s a r y . 376 001 \0 r 0131560 303 F o r e x a m p l e , \r 0131600 / / i f t h e y a 0131620 r e a l l w r i t e s , a 0131640 n d l a s t A c t i o n i s 0131660 a r e a d ( i n t o t h 0131700 e s a m e \r / / 0131720 b u f f e r ) , w e m u s t 0131740 n o t q u e u e t h e r 0131760 e a d u n t i l t h e w r 0132000 i t e h a s c o m p l e t e 0132020 d \r / / a n d b 0132040 e e n c h e c k e d . T h 0132060 i s i s b e c a u s e t h 0132100 e T r i d e n t ( u n l i k 0132120 e t h e D i a b l o ) \r 0132140 / / d o e s n o t 0132160 s 376 001 \0 e : t o p e x e c u t 0132200 i n g c o m m a n d s w h e 0132220 n a n e r r o r o c c u r 0132240 s , b u t r a t h e r \r 0132260 / / c o n t i n u e s 0132300 r a c i n g d o w n t h e 0132320 c o m m a n d c h a i n . \r 0132340 l e t t h i s C B 0132360 a c t i o n = a c t i o n \r 0132400 i f p a g e N u m 0132420 b e r e q l a s t P a g e 0132440 & t h i s C B a c t i o n n 0132460 e l a s t A c t i o n t h e 0132500 n \r [ \r 0132520 i f c u r F i r s 0132540 t P a g e n e l a s t P a g 0132560 e t h e n 376 001 \0 252 237 \r 0132600 [ r e s u l t 0132620 = p a g e N u m b e r - 1 ; 0132640 b r e a k ] \r 0132660 t h i s C B a c t i o n = 0132700 l a s t A c t i o n \r 0132720 ] \r i f 0132740 t h i s C B a c t i o n e q 0132760 D C d o N o t h i n g t h e n 0133000 l o o p \r \r / / 0133020 N o n r e c o v e r a b l e e 0133040 r r o r ( s ) c h e c k \r 0133060 i f r e t u r n O n C 0133100 h e c k E r r o r & \r 0133120 ( c b z > > C B Z . e r r 0133140 o r C o u n t e q d i s k > 0133160 > D S K . r e t r y C 376 001 \0 261 K 0133200 o u n t r s h i f t 1 ) t 0133220 h e n \r r e s 0133240 u l t i s - ( p a g e N u m b 0133260 e r + 7 7 B ) \r \r / 0133300 / I f w e a r e c h a i 0133320 n i n g , c a u s e t h i s 0133340 c o m m a n d t o f i l l 0133360 i n \r / / t h e 0133400 d i s k a d d r e s s p a 0133420 r t o f t h e n e x t c 0133440 o m m a n d \r l e t 0133460 n e x t C b = T F S G e t 0133500 C b ( d i s k , c b z ) \r 0133520 c b > > C B . A d d r L 0133540 = D A s ! ( p a g e N u m b 0133560 e r + 1 ) e q f i l l I n D 0133600 376 001 \0 324 * A ? \r l 0133620 v n e x t C b > > C B . l a b 0133640 e l + l D H , l v n e x t C 0133660 b > > C B . l a b e l \r 0133700 T F S D o D i s k C o m m a 0133720 n d ( d i s k , c b , ( f i 0133740 x e d C A n e 0 ? f i x e 0133760 d C A , C A s ! p a g e N u m 0134000 b e r ) , \r D A s 0134020 ! p a g e N u m b e r , f p , 0134040 p a g e N u m b e r , t h i 0134060 s C B a c t i o n ) \r 0134100 c b = n e x t C b \r 0134120 ] \r w h i l e c b 0134140 z > > C B Z . h e a d n e 0 0134160 d o T F S G e t C b ( d i s 0134200 k , c b 376 001 \0 245 305 z ) \r 0134220 i f r e s u l t e q l a s 0134240 t P a g e % D A s ! ( r e s 0134260 u l t + 1 ) e q e o f D A 0134300 t h e n b r e a k \r h i 0134320 n t L a s t P a g e = l a s 0134340 t P a g e / / h i n t w 0134360 a s w r o n g , r e s t a r 0134400 t t r a n s f e r \r T F 0134420 S I n i t i a l i z e C b S t o 0134440 r a g e ( d i s k , c b z , 0134460 r e s u l t + 1 ) \r ] r 0134500 e p e a t \r \r / / C l e a n u 0134520 p \r @ l v N u m C h a r s = 0134540 c b z > > C B Z . c u r r e n t 0134560 N u m C h a r s \r r e s u l t i 0134600 s r e s u l t \r ] 376 001 \0 327 \a \r 0134620 \r \r / / - - - - - - - - - - - - 0134640 - - - - - - - - - - - - - - - - * 0134740 \r a n d T F S D e f a u l t C 0134760 l e a n u p R t n ( d i s k , 0135000 c b , c b z ) b e \r / / - - 0135020 - - - - - - - - - - - - - - - - * 0135120 - - - - - - - - - - \r / / T h 0135140 e d e f a u l t c l e a n u 0135160 p R o u t i n e s u b s t i t 0135200 u t e s t h e a c t u a l 376 0135220 001 \0 217 \ v i r t u a l D A 0135240 f o r \r / / e a c h i n s t 0135260 a n c e o f f i l l I n D A 0135300 i n t h e D A s v e c t 0135320 o r \r [ \r l e t l v D A = 0135340 l v ( ( c b z > > C B Z . D A 0135360 s ) ! ( c b > > C B . t r u e P 0135400 a g e N u m b e r ) ) \r i f l 0135420 v D A ! 1 e q f i l l I n D 0135440 A t h e n l v D A ! 1 = 0135460 c b z > > C B Z . n e x t D A \r 0135500 i f l v D A ! ( - 1 ) e q 0135520 f i l l I n D A t h e n \r 0135540 l v D A ! ( - 1 ) = V i r 0135560 t u a l D i s k D A ( d i s k , 0135600 l v ( c b > > C B . A d d r 0135620 L > > D 376 \0 017 7 215 L . p r e v i 0135640 o u s ) ) \r ] \r 377 \0 \0 T f s A . 0135660 a s m \0 373 227 031 351 231 \0 \0 376 001 \0 + 8 0135700 ; T f s A . A s m - - a s 0135720 s e m b l y - l a n g u a g e 0135740 c o d e \r ; C o p y r i g h t 0135760 X e r o x C o r p o r a t i 0136000 o n 1 9 7 9 , 1 9 8 0 , 1 0136020 9 8 1 \r \r ; \t L a s t m o d i 0136040 f i e d M a y 1 , 1 9 8 1 0136060 3 : 2 8 P M b y T a f 0136100 t \r \r . e n t T F S R e a l D 0136120 A , T F S V i r t u a l D A , 0136140 T F S I n c r e m e n t \r . e 0136160 n t T F S M o d S h i f t , 0136200 T F S M o d S h i f t A , T F 0136220 S S i l e n t B o o t \r \r ; o 0136240 f f s e t s i n T F S D S K 0136260 s t r u c t u r e d e f i n 0136300 376 001 \0 202 306 e d i n T f s . d 0136320 \r \r n H e a d s = 2 6 . \r n 0136340 S e c t o r s = 2 7 . \r f i 0136360 r s t V T r a c k = 4 8 . \r 0136400 n V T r a c k s = 4 9 . \r \r 0136420 . s r e l \r \r T F S R e a l D A 0136440 : . T F S R e a l D A \r T F S 0136460 V i r t u a l D A : . T F S V 0136500 i r t u a l D A \r T F S I n c r 0136520 e m e n t : . T F S I n c r e 0136540 m e n t \r T F S M o d S h i f t 0136560 : . T F S M o d S h i f t \r T 0136600 F S M o d S h i f t A : . T F 0136620 S M o d S h i f t A \r T F S S i 0136640 l e n t B o o t : . T F S S i 0136660 l e n t B o o t \r \r . n r e l \r 0136700 \r \r ; T 376 001 \0 * 362 F S I n c r 0136720 e m e n t ( l v C o u n t e r ) 0136740 \r ; I n c r e m e n t s a 0136760 d o u b l e - p r e c i s i o n 0137000 c o u n t e r \r \r . T F S I n 0137020 c r e m e n t : \r \t i n c 0 0137040 0 \t \t \t ; p o i n t t o l 0137060 o w - o r d e r w o r d \r \t s 0137100 t a 0 2 2 \r \t i s z @ 2 0137120 2 \t \t ; i n c r e m e n t 0137140 i t \r \t j m p 1 3 \t \t ; 0137160 n o o v e r f l o w \r \t d s z 0137200 2 2 \t \t \t ; o v e r f l o 0137220 w , p o i n t t o h i g h 0137240 - o r d e r w o r d \r \t i s z 0137260 @ 2 2 \t \t ; i n c r e m e 0137300 n t i t \r \t j m 376 001 \0 335 322 p 0137320 1 3 \r \t j m p 1 3 \r \f \r 0137340 ; T F S M o d S h i f t ( n u 0137360 m , r e f ) \r ; C a l l s 0137400 m i c r o c o d e t o a s s 0137420 i s t w i t h E C C c o r 0137440 r e c t i o n \r \r . T F S M o d 0137460 S h i f t : \r \t s t a 0 1 0137500 2 \r \t s t a 1 2 2 \r \t i n 0137520 c 2 0 \t \t \t ; l v n u m 0137540 \r \t l d a 1 c 2 1 \t \t ; r 0137560 a m a d d r e s s o f m i 0137600 c r o c o d e r o u t i n e \r 0137620 \t # 6 1 0 1 0 \t \t \t ; j m p r 0137640 a m \r \t j m p 1 3 \r \r c 2 1 0137660 : \t 2 1 \r \r ; T F S M o d S h 0137700 i f t A ( n u m , r e f ) \r 376 0137720 001 \0 345 326 ; A s s e m b l y - l 0137740 a n g u a g e v e r s i o n 0137760 - - f o r D - m a c h i n e 0140000 s w h e r e t h e r e i s 0140020 n o \r ; m i c r o c o d e d 0140040 r o u t i n e . \r \r . T F S M 0140060 o d S h i f t A : \r \t s t a 3 0140100 1 2 \r \t m k z e r o 3 3 0140120 \r \t s t a 3 2 2 \t \t ; i 0140140 n i t r e s u l t t o z e 0140160 r o \r m o d s h 1 : \t s n e 0 0140200 1 \t \t \t ; n u m e q r e 0140220 f ? \r \t j m p m o d s h 3 \t 0140240 \t ; y e s \r \t m o v z l 0 0140260 0 \t \t ; n u m = n u m l 0140300 s h i f t 1 \r \t l d a 3 c 0140320 4 0 0 0 376 001 \0 M 330 \t \t ; i f 0140340 ( n u m & 4 0 0 0 B ) n e 0140360 0 t h e n . . . \r \t a n d # 0140400 3 0 s n r \r \t j m p m 0140420 o d s h 2 \r \t l d a 3 c 4 0 0140440 0 5 \t \t ; . . . n u m = 0140460 n u m x o r 4 0 0 5 B \r \t a 0140500 n d z l 0 3 \r \t s u b 3 0140520 0 \r \t l d a 3 c 4 0 0 5 \r \t 0140540 a d d 3 0 \r m o d s h 2 : \t 0140560 i s z 2 2 \t \t \t ; c o u n 0140600 t = c o u n t + 1 \r \t j m 0140620 p m o d s h 1 \r \t d s z 2 0140640 2 \t \t \t ; r e t u r n - 1 0140660 i f i n f i n i t e l o o p 0140700 \r \r m o d s h 3 : \t l d a 0 0140720 2 2 \r \t l d a 376 001 \0 033 372 3 0140740 1 2 \r \t j m p 1 3 \r \r c 4 0140760 0 0 0 : \t 4 0 0 0 \r c 4 0 0 5 : 0141000 \t 4 0 0 5 \r \f \r ; T F S R e a 0141020 l D A ( d i s k , v i r t u a 0141040 l D A , l v R e a l D A ) \r ; 0141060 C o n v e r t s v i r t u a 0141100 l D A t o a r e a l D A 0141120 a n d s t o r e s i t i 0141140 n @ l v R e a l D A . \r ; R 0141160 e t u r n s t r u e i f f 0141200 t h e v i r t u a l D A a 0141220 p p e a r s t o b e l e g 0141240 a l . \r ; A v i r t u a l 0141260 D A o f e o f D A ( - 1 ) 0141300 r e s u l t s i n a r e 0141320 a l D A o f z e r o . 376 001 0141340 \0 240 274 \r \r . T F S R e a l D A : 0141360 \r \t s t a 3 1 2 \r \t c o m 0141400 1 3 s n r \t \t ; e o f D 0141420 A ? \r \t j m p e o f D A \t \t 0141440 ; y e s , r e t u r n r e 0141460 a l D A o f z e r o \r \t s 0141500 t a 0 2 2 \t \t ; s a v e 0141520