$ 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