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