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