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