$ od -c -N 50000 [_CD6_]<sil>GobSources.dm!1>boardlm.bcpl 0000000 / / F U N C T I O 0000020 N S F O R D 1 0000040 L O G I C A N D 0000060 M E M O R Y 0000100 B O A R D S \r g e t 0000120 " s y s d e f s . d " \r g e t 0000140 " g o b . d e f s " \r \r e x t e 0000160 r n a l \r [ \r B o a r d L \r B o 0000200 a r d M \r ] \r \r \r l e t B o a 0000220 r d L ( ) b e \r [ \r G e t S V 0000240 C o o r d s = G e t S V C o o r 0000260 d s L \r G e t S V i n d e x = G 0000300 e t S V i n d e x L \r S V o l t 0000320 R e q = t a b l e [ 3 3 0000340 6 ; 1 4 4 ; 1 4 4 ; 1 4 0000360 4 ; 1 4 4 ] \r N e t H a s 0000400 S V o l t = N e t H a s S v 0000420 o l t L \r L e g a l B l o c = 0000440 L e g a l B l o c L \r C h i p 0000460 t o P i n P o s = C h i p t 0000500 o P i n P o s T \r G e t E p i n 0000520 C o o r d s = G e t E p i n 0000540 C o o r d s L \r G e t C p i n C 0000560 o o r d s = G e t C p i n C 0000600 o o r d s L \r G e t I C c o o r 0000620 d s = G e t I C c o o r d s 0000640 L \r A d d P o t e n t i a l T e 0000660 r m s = A d d P o t e n t i 0000700 a l T e r m s L \r F i n d B e s 0000720 t T e r m = F i n d B e s t 0000740 T e r m L \r S e t U p T e r m s 0000760 = S e t U p T e r m s L \r G 0001000 e t B o a r d P i n s = G e 0001020 t B o a r d P i n s L \r m a x n 0001040 = 6 3 / / b o a r d l o 0001060 c a t i o n s 1 - 6 3 \r m a x 0001100 a l p h = $ l - $ a \r T a b 0001120 l e Z e r o S t r i n g = 0001140 " * n Z e r o T a b l e A t 0001160 C 1 8 8 : < 0 > { 2 2 , 0 0001200 } * n Z e r o T a b l e A t 0001220 E 6 : < 0 > { 2 2 , 5 2 5 0001240 } * n Z e r o T a b l e A t 0001260 E 1 8 7 : < 0 > { 4 7 7 , 0001300 5 2 5 } * n Z e r o T a b l e 0001320 A t C 5 : < 0 > { 4 7 7 0001340 , 0 } " \r \r ] \r \r a n d B o a 0001360 r d M ( ) b e \r [ \r G e t S V 0001400 C o o r d s = G e t S V C o o r 0001420 d s M \r G e t S V i n d e x = G 0001440 e t S V i n d e x M \r S V o l t 0001460 R e q = t a b l e [ 3 3 0001500 6 ; 0 ; 0 ; 0 ; 0 ] 0001520 \r N e t H a s S V o l t = 0001540 N e t H a s S v o l t M \r L e g 0001560 a l B l o c = L e g a l B l 0001600 o c M \r C h i p t o P i n P o s 0001620 = C h i p t o P i n P o s T 0001640 \r G e t E p i n C o o r d s = 0001660 G e t E p i n C o o r d s L \r 0001700 G e t C p i n C o o r d s = 0001720 G e t C p i n C o o r d s L \r G 0001740 e t I C c o o r d s = G e t 0001760 I C c o o r d s M \r A d d P o t 0002000 e n t i a l T e r m s = A d 0002020 d P o t e n t i a l T e r m s M 0002040 \r F i n d B e s t T e r m = 0002060 F i n d B e s t T e r m L \r S e 0002100 t U p T e r m s = S e t U p 0002120 T e r m s M \r G e t B o a r d P 0002140 i n s = G e t B o a r d P i 0002160 n s M \r m a x n = 4 2 / / 0002200 b o a r d l o c a t i o n s 0002220 1 - 2 6 \r m a x a l p h = $ 0002240 l - $ a \r T a b l e Z e r o S t 0002260 r i n g = " * n Z e r o 0002300 T a b l e A t C 1 8 8 : < 0002320 0 > { 2 2 , 0 } * n Z e r o 0002340 T a b l e A t E 6 : < 0 > 0002360 { 2 2 , 5 2 5 } * n Z e r o 0002400 T a b l e A t E 1 8 7 : < 0002420 0 > { 4 7 7 , 5 2 5 } * n Z e 0002440 r o T a b l e A t C 5 : 0002460 < 0 > { 4 7 7 , 0 } " \r ] \r \r 0002500 a n d N e t H a s S v o l t L 0002520 ( n e t n a m e ) = v a l o 0002540 f \r [ 032 ( 1 2 7 0 ) \ f 1 \r i f 0002560 S t E q ( " V C C " , n e t n 0002600 a m e ) t h e n r e s u l t 0002620 i s $ F \r i f S t E q ( " G 0002640 N D " , n e t n a m e ) t h e 0002660 n r e s u l t i s $ G \r i f 0002700 S t E q ( " V E E " , n e t n 0002720 a m e ) t h e n r e s u l t 0002740 i s $ M \r i f S t E q ( " V 0002760 T T " , n e t n a m e ) t h e 0003000 n r e s u l t i s $ T \r i f 0003020 S t E q ( " V D D " , n e t n 0003040 a m e ) t h e n r e s u l t 0003060 i s $ D \r r e s u l t i s 0 0003100 032 l 4 2 6 9 \ f 1 \r ] \r \r a n d 0003120 G e t S V i n d e x L ( S V T 0003140 y p e , b l , p i n ) = v a l o 0003160 f \r [ 032 \ f 1 \r l e t a l p h 0003200 = b l r e m 2 6 \r l e t 0003220 n u m = b l / 2 6 \r s w i 0003240 t c h o n S V T y p e i n t 0003260 o \r [ 032 l 4 2 6 9 \ f 1 \r c a s 0003300 e $ G : \r [ 032 l 5 5 3 9 \ f 1 0003320 \r i f ( n u m g e 1 ) & 0003340 ( n u m l e 2 4 ) r e s 0003360 u l t i s a l p h * 2 4 + 0003400 n u m \r i f ( n u m g e 4 0003420 1 ) & ( n u m l e 5 2 ) 0003440 r e s u l t i s a l p h * 2 0003460 4 + ( n u m - 4 0 ) * 2 - 1 \r 0003500 i f ( n u m g e 6 0 ) & 0003520 ( n u m l e 6 3 ) r e s 0003540 u l t i s a l p h * 4 + ( n 0003560 u m - 5 9 ) + 2 8 8 \r r e s u 0003600 l t i s 0 032 l 6 8 0 9 \ f 1 \r 0003620 ] \r \r c a s e $ T : \r c a s e 0003640 $ D : \r c a s e $ F : \r c a 0003660 s e $ M : \r [ 032 l 5 5 3 9 \ f 0003700 1 \r i f ( n u m g e 1 ) 0003720 & ( n u m l e 2 4 ) r e 0003740 s u l t i s a l p h * 1 2 + 0003760 ( n u m + 1 ) / 2 \r i f ( n u 0004000 m g e 4 1 ) & ( n u m 0004020 l e 5 2 ) r e s u l t i s 0004040 a l p h * 1 2 + n u m - 4 0004060 0 \r i f ( n u m g e 6 0 ) 0004100 & ( n u m l e 6 3 ) r 0004120 e s u l t i s a l p h * 1 2 + 0004140 ( n u m - 6 0 ) * 3 + 2 \r r e s 0004160 u l t i s 0 032 l 6 8 0 9 \ f 1 0004200 \r ] \r \r d e f a u l t : r e s 0004220 u l t i s 0 032 l 5 5 3 9 \ f 1 0004240 \r ] 032 l 4 2 6 9 \ f 1 \r ] \r \r a 0004260 n d G e t S V C o o r d s L ( 0004300 S V T y p e , S V I n d e x , c 0004320 v ) b e \r [ 032 \ f 1 \r l e t 0004340 a l p h = ( S V I n d e x - 1 ) 0004360 / 1 2 \r l e t n u m = ( ( S V 0004400 I n d e x - 1 ) r e m 1 2 0004420 ) + 4 1 \r s w i t c h o n 0004440 S V T y p e i n t o \r [ 032 l 4 0004460 2 6 9 \ f 1 \r c a s e $ G : 0004500 t e s t S V I n d e x l e 0004520 2 8 8 \r i f s o \r [ 032 l 5 5 3 9 0004540 \ f 1 \r a l p h = ( S V I n d e 0004560 x - 1 ) / 2 4 \r n u m = ( ( S V 0004600 I n d e x - 1 ) r e m 2 4 ) 0004620 + 1 \r G e t I C c o o r d s L ( 0004640 a l p h , n u m , 1 6 , c v ) \r 0004660 r e t u r n 032 l 6 8 0 9 \ f 1 \r 0004700 ] \r i f n o t \r [ 032 l 5 5 3 9 \ 0004720 f 1 \r S V I n d e x = S V I n d 0004740 e x - 2 8 8 \r a l p h = ( S V I 0004760 n d e x - 1 ) / 4 \r n u m = ( ( 0005000 S V I n d e x - 1 ) r e m 4 0005020 ) + 6 0 \r G e t I C c o o r d 0005040 s L ( a l p h , n u m , 2 4 , c 0005060 v ) \r r e t u r n 032 l 6 8 0 9 \ 0005100 f 1 \r ] \r \r c a s e $ T : \r [ 0005120 032 l 5 5 3 9 \ f 1 \r G e t I C c 0005140 o o r d s L ( a l p h , n u m , 0005160 1 , c v ) \r r e t u r n 032 l 6 8 0005200 0 9 \ f 1 \r ] 032 l 5 5 3 9 \ f 1 0005220 \r \r c a s e $ D : \r [ 032 l 5 5 0005240 3 9 \ f 1 \r G e t I C c o o r d 0005260 s L ( a l p h , n u m , 8 , c v 0005300 ) \r c v ! 0 = c v ! 0 - 4 \r t 0005320 e s t ( a l p h r e m 3 ) 0005340 e q 0 \r i f s o c v ! 0 0005360 = c v ! 0 - 4 \r i f n o t 0005400 c v ! 1 = c v ! 1 - 1 8 \r r 0005420 e t u r n 032 l 6 8 0 9 \ f 1 \r ] 0005440 032 l 5 5 3 9 \ f 1 \r \r c a s e 0005460 $ F : \r [ 032 l 5 5 3 9 \ f 1 \r G 0005500 e t I C c o o r d s L ( a l p h 0005520 , n u m , 8 , c v ) \r c v ! 0 = 0005540 c v ! 0 - 4 \r i f ( a l p h 0005560 r e m 3 ) n e 0 t h e 0005600 n c v ! 1 = c v ! 1 + 1 8 \r 0005620 r e t u r n 032 l 6 8 0 9 \ f 1 \r 0005640 ] 032 l 5 5 3 9 \ f 1 \r \r c a s e 0005660 $ M : \r [ 032 l 5 5 3 9 \ f 1 \r 0005700 G e t I C c o o r d s L ( a l p 0005720 h , n u m , 8 , c v ) \r s w i t 0005740 c h o n ( a l p h r e m 3 0005760 ) i n t o \r [ 032 l 6 8 0 9 \ f 0006000 1 \r \r c a s e 0 : \r [ 032 l 8 0 0006020 7 9 \ f 1 \r c v ! 0 = c v ! 0 0006040 + 2 \r c v ! 1 = c v ! 1 - 1 0006060 2 \r r e t u r n 032 l 9 3 4 9 \ f 0006100 1 \r ] 032 l 8 0 7 9 \ f 1 \r \r c a 0006120 s e 1 : \r [ 032 l 8 0 7 9 \ f 1 0006140 \r c v ! 0 = c v ! 0 + 1 4 \r 0006160 c v ! 1 = c v ! 1 + 1 2 \r r 0006200 e t u r n 032 l 9 3 4 9 \ f 1 \r ] 0006220 032 l 8 0 7 9 \ f 1 \r \r c a s e 0006240 2 : \r [ 032 l 8 0 7 9 \ f 1 \r c v 0006260 ! 0 = c v ! 0 - 1 8 \r c v ! 0006300 1 = c v ! 1 - 1 2 \r r e t u r 0006320 n 032 l 9 3 4 9 \ f 1 \r ] 032 l 8 0 0006340 7 9 \ f 1 \r ] 032 l 6 8 0 9 \ f 1 0006360 \r ] 032 l 5 5 3 9 \ f 1 \r ] 032 l 4 0006400 2 6 9 \ f 1 \r ] \r \r a n d G 0006420 e t I C c o o r d s L ( a l p h 0006440 , n u m , p i n , c v ) b e \r 0006460 [ 032 \ f 1 \r i f ( n u m g r 0006500 0 ) & ( n u m l e 2 4 ) 0006520 d o \r [ 032 l 4 2 6 8 \ f 1 \r c v 0006540 ! 0 = 3 7 + a l p h * 3 0006560 6 + ( a l p h g e ( $ d 0006600 - $ a ) ? 4 , 0 ) + ( a l p 0006620 h g e ( $ g - $ a ) ? 2 7 , 0006640 0 ) + ( a l p h g e ( $ 0006660 j - $ a ) ? 4 , 0 ) - ( p i 0006700 n g r 8 ? ( 1 6 - p i n ) , 0006720 ( p i n - 1 ) ) * 4 \r \r c v ! 1 0006740 = 1 6 + ( p i n g r 0006760 8 ? 1 2 , 0 ) + ( n u m - 1 0007000 ) * 1 8 + ( n u m / 2 ) * 6 0007020 \r r e t u r n 032 l 5 5 3 8 \ f 1 0007040 \r ] \r \r i f ( 4 1 l e n u 0007060 m ) & ( n u m l e 5 2 ) & ( 0007100 p i n l e 8 ) d o \r [ 032 l 0007120 4 2 6 8 \ f 1 \r n u m = n u 0007140 m - 4 0 \r c v ! 0 = 3 7 + 0007160 a l p h * 3 6 + ( a l p h 0007200 g e ( $ d - $ a ) ? 4 , 0 ) 0007220 + ( a l p h g e ( $ g - 0007240 $ a ) ? 2 7 , 0 ) + ( a l p 0007260 h g e ( $ j - $ a ) ? 4 , 0 0007300 ) - ( p i n - 1 ) * 4 \r \r c 0007320 v ! 1 = 3 4 + ( n u m - 0007340 1 ) * 4 2 \r r e t u r n 032 l 5 5 0007360 3 8 \ f 1 \r ] \r \r i f ( 6 0 0007400 l e n u m ) & ( n u m l e 0007420 6 3 ) d o \r [ 032 l 4 2 6 8 \ f 0007440 1 \r n u m = n u m - 6 0 \r l 0007460 e t d e l = 0 \r s w i t c 0007500 h o n ( a l p h + $ a ) i n 0007520 t o \r [ 032 l 5 5 3 8 \ f 1 \r c a 0007540 s e $ l : d e l = d e l 0007560 + 5 2 \r c a s e $ k : d e l 0007600 = d e l + 6 0 \r c a s e $ 0007620 i : d e l = d e l + 5 2 \r 0007640 c a s e $ h : d e l = d 0007660 e l + 8 3 \r c a s e $ f : d 0007700 e l = d e l + 5 2 \r c a s e 0007720 $ e : d e l = d e l + 6 0007740 0 \r c a s e $ c : d e l = 0007760 d e l + 5 2 \r c a s e $ b : 0010000 \r c v ! 0 = 5 5 + d e 0010020 l - ( p i n g r 1 2 ? ( 0010040 2 4 - p i n ) , ( p i n - 1 ) ) 0010060 * 4 \r c v ! 1 = 6 4 + n 0010100 u m * 1 2 6 + ( p i n g r 0010120 1 2 ? 2 4 , 0 ) \r r e t u r n 032 0010140 l 6 8 0 8 \ f 1 \r ] \r \r 032 l 5 5 0010160 3 8 \ f 1 \r ] \r \r l e t v = 0010200 v e c 5 0 ; v ! 0 = 0 0010220 / / b a d b o a r d l o c 0010240 a t i o n \r A p p e n d S ( " * 0010260 n B a d B o a r d L o c , P 0010300 i n : " , v ) \r A p p e n d B 0010320 L ( 2 6 * n u m + a l p h , v 0010340 ) \r A p p e n d S ( " , " , v 0010360 ) \r A p p e n d N ( p i n , v ) 0010400 \r W S S ( E r F i l e , v ) \r c 0010420 v ! 0 = 0 \r c v ! 1 = 0 \r 032 0010440 l 4 2 6 8 \ f 1 \r ] \r \r \r a n d 0010460 A d d P o t e n t i a l T e r 0010500 m s L ( ) b e / / m a k e 0010520 i c d e s c r i p t o r s f 0010540 o r a l l p o s s i b l e 0010560 t e r m i n a t o r \r / / p o s 0010600 i t i o n s w h i c h w e r 0010620 e n o t p r e d e f i n e d 0010640 b y t h e u s e r \r [ 032 \ 0010660 f 1 \r f o r i = 4 1 t o 0010700 5 2 d o f o r j = 0 0010720 t o m a x a l p h d o S 0010740 p r a y T e r m L ( i , j ) \r 032 0010760 l 4 2 6 8 \ f 1 \r ] \r \r a n d 0011000 S p r a y T e r m L ( n , a l p 0011020 h ) b e \r [ 032 \ f 1 \r l e t 0011040 b l = 2 6 * n + a l p h 0011060 \r l e t b p = B o a r d v 0011100 e c ! b l \r t e s t b p e q 0011120 0 \r i f s o / / a s s i g n 0011140 t e r m i n a t o r t o p 0011160 o s i t i o n \r A s s i g n I C 0011200 ( 8 , t e r m t y p e , t e r m 0011220 s t p , b l ) \r i f n o t i f 0011240 b p > > i c d e s c . i c t y 0011260 p e n e t e r m t y p e t 0011300 h e n \r [ 032 l 4 2 6 8 \ f 1 \r l 0011320 e t e r v = v e c 5 0 ; 0011340 e r v ! 0 = 0 \r A p p e n 0011360 d S ( " * n T e r m i n a t o r 0011400 p o s i t i o n " , e r v ) 0011420 \r A p p e n d B L ( b l , e r v 0011440 ) \r A p p e n d S ( " i s d 0011460 e f i n e d a s a n o n - 0011500 t e r m i n a t o r " , e r v ) 0011520 \r W S S ( E r F i l e , e r v ) 0011540 032 l 5 5 3 8 \ f 1 \r ] \r 032 l 4 2 0011560 6 8 \ f 1 \r ] \r \r a n d F i n 0011600 d B e s t T e r m L ( x , y ) 0011620 = v a l o f / / a s s u m e s 0011640 t e r m s a r r a y e d a 0011660 t N e w I t e m ( b y S e 0011700 t U p T e r m s ) \r [ 032 \ f 1 \r 0011720 d t s = # 7 7 7 7 6 / / i 0011740 n f i n i t y \r l e t t p t r 0011760 = 0 ; l e t t i = 0 0012000 \r l e t t p = N e w I t e 0012020 m \r [ 032 l 4 2 6 8 \ f 1 \r l e t 0012040 t y = t p ! 1 \r i f t y 0012060 e q 0 t h e n b r e a k 0012100 \r l e t d e l y = t y g 0012120 r y ? t y - y , y - t y \r i 0012140 f d e l y l s d t s t h 0012160 e n \r f o r i = 2 t o 0012200 8 d o \r [ 032 l 5 5 3 8 \ f 1 \r 0012220 l e t t x = t p ! i \r i f 0012240 t x e q 0 t h e n l o 0012260 o p / / a l r e a d y a s s 0012300 i g n e d \r l e t d e l x = 0012320 t x g r x ? t x - x , x 0012340 - t x \r i f ( d e l x + d 0012360 e l y ) g r d t s t h e n 0012400 l o o p \r / / h a v e b e s 0012420 t o n e s o f a r \r d t s 0012440 = d e l x + d e l y \r t p t 0012460 r = t p \r t i = i \r 032 l 0012500 6 8 0 8 \ f 1 \r ] \r t p = t 0012520 p + 9 \r 032 l 5 5 3 8 \ f 1 \r ] 0012540 r e p e a t \r i f t p t r 0012560 e q 0 t h e n [ W S S ( 0012600 E r F i l e , " * n T e r m i n 0012620 a t o r s u p p l y e x h a 0012640 u s t e d " ) ; r e s u l t i 0012660 s 0 ] \r t e r m y = t 0012700 p t r ! 1 \r t e r m x = t p 0012720 t r ! t i \r t p t r ! t i = 0012740 0 / / m a r k u s e d \r r e 0012760 s u l t i s l v ( ( B o a r d 0013000 v e c ! ( t p t r ! 0 ) ) > > i 0013020 c d e s c . p i n p t r ^ t i ) 0013040 032 l 4 2 6 8 \ f 1 \r ] \r \r a n d 0013060 S e t U p T e r m s L ( ) b 0013100 e \r [ 032 \ f 1 \r l e t w o r d 0013120 s = 0 \r f o r i = 4 1 0013140 t o 5 2 d o f o r j 0013160 = 0 t o m a x a l p h d 0013200 o \r [ 032 l 4 2 6 8 \ f 1 \r l e t 0013220 b l = ( 2 6 * i ) + j \r l 0013240 e t t p = B o a r d v e c 0013260 ! b l \r i f ( t p e q 0 ) 0013300 % ( ( t p > > i c d e s c . i c 0013320 t y p e ) n e t e r m t y p e 0013340 ) t h e n l o o p \r / / h a 0013360 v e a t e r m i n a t o r \r 0013400 l e t c v = v e c 2 \r G 0013420 e t I C c o o r d s ( j , i , 1 0013440 , c v ) \r C h e c k F i t ( w o 0013460 r d s + 9 ) \r l e t t = N 0013500 e w I t e m + w o r d s \r t ! 0 0013520 = b l \r t ! 1 = c v ! 1 0013540 / / t e r m i n a t o r y 0013560 c o o r d i n a t e \r f o r k 0013600 = 2 t o 8 d o \r [ 032 l 0013620 5 5 3 8 \ f 1 \r t e s t ( t p 0013640 > > i c d e s c . p i n p t r ^ 0013660 k ) e q 0 \r i f s o / / t 0013700 e r m i n a t o r u n a s s i 0013720 g n e d - f i l l i n x 0013740 c o o r d i n a t e \r t ! k = 0013760 ( c v ! 0 ) - ( ( k - 1 ) 0014000 * 4 ) \r i f n o t t ! k = 0014020 0 \r 032 l 6 8 0 8 \ f 1 \r ] \r w o 0014040 r d s = w o r d s + 9 032 l 5 0014060 5 3 8 \ f 1 \r ] \r N e w I t e m 0014100 ! w o r d s = 0 \r N e w I t 0014120 e m ! ( w o r d s + 1 ) = 0 0014140 032 l 4 2 6 8 \ f 1 \r ] \r \r 032 \ f 0014160 1 \r \r a n d L e g a l B l o c 0014200 L ( b l ) = v a l o f \r [ 032 0014220 \ f 1 \r l e t a l p h = ( 0014240 b l r e m 2 6 ) + $ a ; l 0014260 e t n u m = b l / 2 6 \r i 0014300 f a l p h g r $ l t h e 0014320 n r e s u l t i s f a l s e 0014340 / / l e t t e r a l w a y s 0014360 l e l \r i f n u m e q 0014400 0 t h e n r e s u l t i s 0014420 f a l s e \r i f ( n u m g r 0014440 2 4 ) & ( n u m l s 4 1 ) 0014460 t h e n r e s u l t i s f 0014500 a l s e \r i f ( n u m g r 0014520 5 2 ) & ( n u m l s 6 0 ) 0014540 t h e n r e s u l t i s f a 0014560 l s e \r i f n u m g e 6 0 0014600 t h e n \r s w i t c h o n a 0014620 l p h i n t o \r [ 032 l 4 2 6 8 0014640 \ f 1 \r c a s e $ b : \r c a s 0014660 e $ c : \r c a s e $ e : \r c 0014700 a s e $ f : \r c a s e $ h : 0014720 \r c a s e $ i : \r c a s e $ 0014740 k : \r c a s e $ l : r e s u 0014760 l t i s t r u e \r d e f a u l 0015000 t : r e s u l t i s f a l s 0015020 e 032 l 5 5 3 8 \ f 1 \r ] \r r e s 0015040 u l t i s t r u e 032 l 4 2 6 8 0015060 \ f 1 \r ] \r \r a n d G e t E p 0015100 i n C o o r d s L ( p i n , c v 0015120 ) b e \r [ 032 \ f 1 \r i f ( ( 0015140 p i n l s 4 ) % ( p i n g 0015160 r 1 8 9 ) ) t h e n E r r 0015200 N ( " * n S i g n a l a s s i 0015220 g n e d t o p o w e r o r 0015240 i n v a l i d E p i n : " 0015260 , p i n ) \r c v ! 1 = 5 2 5 \r 0015300 l e t p g = ( p i n - 1 ) 0015320 r e m 4 \r i f ( ( p g e 0015340 q 0 ) % ( p g e q 3 ) ) 0015360 t h e n E r r N ( " * n S i g 0015400 n a l a s s i g n e d t o 0015420 g r o u n d E p i n : " , p 0015440 i n ) \r l e t p x = ( p i 0015460 n - 1 ) / 4 \r c v ! 0 = 1 2 0015500 + ( p x * 1 0 ) + ( p g 0015520 / 2 ) * 5 032 l 4 2 6 8 \ f 1 \r ] 0015540 \r \r a n d G e t C p i n C o o 0015560 r d s L ( p i n , c v ) b e \r 0015600 [ 032 \ f 1 \r i f ( ( p i n l 0015620 s 4 ) % ( p i n g r 1 8 9 0015640 ) ) t h e n E r r N ( " * n 0015660 S i g n a l a s s i g n e d 0015700 t o p o w e r o r i n v a 0015720 l i d C p i n : " , p i n ) 0015740 \r c v ! 1 = 0 \r l e t p g 0015760 = ( p i n - 1 ) r e m 4 \r 0016000 i f ( ( p g e q 1 ) % ( p 0016020 g e q 2 ) ) t h e n E r 0016040 r N ( " * n S i g n a l a s s 0016060 i g n e d t o g r o u n d 0016100 C p i n : " , p i n ) \r l e t 0016120 p x = ( p i n - 1 ) / 4 \r 0016140 c v ! 0 = 1 2 + ( ( 4 7 0016160 - p x ) * 1 0 ) + ( ( 1 - p 0016200 g / 2 ) ) * 5 032 l 4 2 6 8 \ f 1 0016220 \r ] \r \r a n d G e t B o a r d 0016240 P i n s L ( b l ) = v a l o 0016260 f \r [ 032 \ f 1 \r l e t n = 0016300 b l / 2 6 / / n u m \r i f 0016320 ( n g r 0 ) & ( n l e 2 0016340 4 ) t h e n r e s u l t i s 0016360 1 6 \r i f ( n g e 4 1 ) 0016400 & ( n l e 5 3 ) t h e n 0016420 r e s u l t i s 8 \r i f ( n 0016440 g e 6 0 ) & ( n l s 6 4 0016460 ) t h e n \r s w i t c h o n 0016500 ( ( b l r e m 2 6 ) + $ a 0016520 ) i n t o \r [ 032 l 4 2 6 8 \ f 0016540 1 \r c a s e $ b : \r c a s e 0016560 $ c : \r c a s e $ e : \r c a s 0016600 e $ f : \r c a s e $ h : \r c 0016620 a s e $ i : \r c a s e $ k : 0016640 \r c a s e $ l : r e s u l t 0016660 i s 2 4 032 l 5 5 3 8 \ f 1 \r ] 0016700 \r E r r B L ( " * n I l l e g a 0016720 l B o a r d L o c a t i o n 0016740 : " , b l ) \r r e s u l t i 0016760 s 0 032 l 4 2 6 8 \ f 1 \r ] \r / 0017000 / F U N C T I O N 0017020 S F O R D 1 M 0017040 E M O R Y B O 0017060 A R D \r \r a n d N e t H a 0017100 s S v o l t M ( n e t n a m e ) 0017120 = v a l o f \r [ 032 \ f 1 \r i 0017140 f S t E q ( " G N D " , n e t 0017160 n a m e ) t h e n r e s u l 0017200 t i s $ G \r r e s u l t i s 0017220 0 032 l 4 2 6 9 \ f 1 \r ] \r \r a n 0017240 d G e t S V i n d e x M ( S V 0017260 T y p e , b l , p i n ) = v a l 0017300 o f \r [ 032 \ f 1 \r l e t a l p 0017320 h = b l r e m 2 6 \r l e 0017340 t n u m = b l / 2 6 \r i f 0017360 n u m l s 3 r e s u l t 0017400 i s 0 \r i f n u m g r 2 0017420 4 r e s u l t i s 0 \r i f 0017440 a l p h g r ( $ j - $ a 0017460 ) t h e n r e s u l t i s 0017500 0 \r r e s u l t i s a l p h * 0017520 2 7 + n u m 032 l 4 2 6 9 \ f 0017540 1 \r ] \r \r a n d G e t S V C o 0017560 o r d s M ( S V T y p e , S V I 0017600 n d e x , c v ) b e \r [ 032 \ f 0017620 1 \r l e t a l p h = S V I n d 0017640 e x / 2 7 \r l e t n u m = S V 0017660 I n d e x r e m 2 7 \r G e t 0017700 I C c o o r d s M ( a l p h , n 0017720 u m , 8 , c v ) 032 l 4 2 6 9 \ f 0017740 1 \r ] \r \r \r a n d L e g a l 0017760 B l o c M ( b l ) = v a l o 0020000 f \r [ 032 \ f 1 \r l e t a l p h 0020020 = b l r e m 2 6 ; l e 0020040 t n u m = b l / 2 6 \r i f 0020060 a l p h g r ( $ l - $ a ) 0020100 t h e n r e s u l t i s f 0020120 a l s e / / l e t t e r a l 0020140 w a y s l e l \r i f ( n u 0020160 m g r 2 6 ) & ( n u m n e 0020200 4 1 ) & ( n u m n e 4 2 ) 0020220 t h e n r e s u l t i s f 0020240 a l s e \r i f ( ( n u m g r 0020260 2 ) & ( n u m l s 2 5 ) ) 0020300 t h e n i f a l p h g r 0020320 ( $ j - $ a ) t h e n r e 0020340 s u l t i s f a l s e \r r e s 0020360 u l t i s t r u e 032 l 4 2 6 8 0020400 \ f 1 \r ] \r \r a n d G e t I C 0020420 c o o r d s M ( a l p h , n u m 0020440 , p i n , c v ) b e \r [ 032 \ f 0020460 1 \r c v ! 0 = a l p h * ( ( 0020500 ( n u m l s 3 ) % ( n u m 0020520 g r 2 4 ) ) ? 4 0 , 4 8 ) + 0020540 2 8 - ( p i n g r 8 ? 0020560 1 6 - p i n , p i n - 1 ) * 4 0020600 \r i f ( n u m g e 3 ) & ( 0020620 n u m l s 2 5 ) & ( a l p h 0020640 g r ( $ e - $ a ) ) t h e 0020660 n c v ! 0 = c v ! 0 + 0020700 1 6 \r i f ( ( n u m l s 3 0020720 ) % ( n u m g r 2 4 ) ) & ( 0020740 a l p h g r ( $ f - $ a ) ) 0020760 t h e n c v ! 0 = c v ! 0021000 0 + 8 \r \r c v ! 1 = 7 0021020 + ( n u m g r 1 ? 2 4 , 0021040 0 ) + ( n u m g r 2 ? 0021060 1 8 , 0 ) + ( n u m g r 0021100 3 ? 1 8 , 0 ) + ( n u m 0021120 g r 4 ? ( 2 0 * ( n u m - 4 0021140 ) ) , 0 ) + ( p i n g r 8 0021160 ? 1 2 , 0 ) - ( n u m g r 0021200 2 3 ? 2 , 0 ) - ( n u m 0021220 g r 2 4 ? 2 , 0 ) + ( n 0021240 u m g r 2 5 ? 4 , 0 ) \r \r 0021260 i f n u m e q 4 1 t h e 0021300 n c v ! 1 = 2 5 \r i f n 0021320 u m e q 4 2 t h e n c v 0021340 ! 1 = 5 0 1 \r \r 032 l 4 2 6 8 0021360 \ f 1 \r ] \r \r a n d A d d P o 0021400 t e n t i a l T e r m s M ( ) 0021420 b e / / m a k e i c d e s 0021440 c r i p t o r s f o r a l l 0021460 p o s s i b l e t e r m i n 0021500 a t o r \r / / p o s i t i o n s 0021520 w h i c h w e r e n o t 0021540 p r e d e f i n e d b y t h 0021560 e u s e r \r [ 032 \ f 1 \r f o r 0021600 i = 4 1 t o 4 2 d o 0021620 f o r j = 0 t o m a 0021640 x a l p h d o S p r a y T e 0021660 r m L ( i , j ) \r 032 l 4 2 6 8 \ 0021700 f 1 \r ] \r a n d S e t U p T e 0021720 r m s M ( ) b e \r [ 032 \ f 1 \r 0021740 l e t w o r d s = 0 \r f o 0021760 r i = 4 1 t o 4 2 d 0022000 o f o r j = 0 t o m 0022020 a x a l p h d o \r [ 032 l 4 2 6 0022040 8 \ f 1 \r l e t b l = ( 2 0022060 6 * i ) + j \r l e t t p = 0022100 B o a r d v e c ! b l \r i f ( 0022120 t p e q 0 ) % ( ( t p > > i 0022140 c d e s c . i c t y p e ) n e 0022160 t e r m t y p e ) t h e n l 0022200 o o p \r / / h a v e a t e r 0022220 m i n a t o r \r l e t c v = 0022240 v e c 2 \r G e t I C c o o r 0022260 d s ( j , i , 1 , c v ) \r C h e 0022300 c k F i t ( w o r d s + 9 ) \r l 0022320 e t t = N e w I t e m + w 0022340 o r d s \r t ! 0 = b l \r t ! 0022360 1 = c v ! 1 / / t e r m i 0022400 n a t o r y c o o r d i n a 0022420 t e \r f o r k = 2 t o 0022440 8 d o \r [ 032 l 5 5 3 8 \ f 1 \r 0022460 t e s t ( t p > > i c d e s c 0022500 . p i n p t r ^ k ) e q 0 \r 0022520 i f s o / / t e r m i n a t o 0022540 r u n a s s i g n e d - f i 0022560 l l i n x c o o r d i n a 0022600 t e \r t ! k = ( c v ! 0 ) 0022620 - ( ( k - 1 ) * 4 ) \r i f n o 0022640 t t ! k = 0 \r 032 l 6 8 0 8 0022660 \ f 1 \r ] \r w o r d s = w o 0022700 r d s + 9 032 l 5 5 3 8 \ f 1 \r ] 0022720 \r N e w I t e m ! w o r d s = 0022740 0 \r N e w I t e m ! ( w o r d 0022760 s + 1 ) = 0 032 l 4 2 6 8 \ f 0023000 1 \r ] \r \r a n d G e t B o a r 0023020 d P i n s M ( b l ) = v a l 0023040 o f \r [ 032 ( 6 3 5 ) \ f 1 \r l e 0023060 t x = b l / 2 6 \r i f ( 0023100 x e q 4 1 ) % ( x e q 4 0023120 2 ) t h e n r e s u l t i s 0023140 8 \r r e s u l t i s 1 6 032 l 0023160 4 2 6 9 \ f 1 \r ] \r 032 \ f 1 \r \0 0023200