2IMGCdrP@@08L2C)pJJJJ IH(ȱH:=IH[H`@HcH  $ +   I/H`JLNGȄBȄF aK  haaFF  mJm# KKJ UJ )J ۈ) ;J3ȱJFȱJGJKaȄM  aaNNJFLGJL LL !Cb" %n"o" (#M8( % ) L'"p"q" (\4, )7(P0  ( @p 8  x"!b"i"0 ~&i"0 %r"s" (,) &t"u" ( %L'")0I0hx H( +x U!U%PART3U!U%PART4U!U)FREEWARES U!*CRACK.WARE  |U!U$LOGO U!`U%DATAS0U!>*PRODOC.CTNU!p>+PRODOC.NOMSU!U+TYPE.PRODOS#U!P>,INTRODUCTIONU!U%PART1%U!U%PART2gU! UDIGITsU!U&UNPACKuU!>'LOGO.HFxk"U! NPARLE1.OBJ`U!>+DIRE.STRAITI1U!@>DHGROFFU!>AMDEU' &PRODOS }<U!B/,BASIC.SYSTEM((U! Ѳ STARTUP<8U!U%WATCH>8*U!` (SC.FINALU4U! U'BK.FONDq? &PRODOS `DaElH$?EGvѶK+`L HHLy XP LM ŠϠĠӠS)*+,+`F)) (*=GJFjJJA QE'+ '== `@ STSP8QSS8 m P o R(8R %Щ ߩx"L! )L! 8'  )ɀ)4,- U JNT) x"Lv"w" ( !` a"M)Fi/ e"3 k"  !"#$%&آ <B*IBGF08Lé'+8H <,``h(`@ڍL3<>=?<>CAB@?A` 1 L  <>`ڢF]PL8i m L   6< L  BLRAM' hLDLHB-9F 3"aɿ LLB Nϰ H  @h( L Lj  @`eLJCAB@=?.<ʆ>,=?BC8 é&'112``* G** c*` v* G* c*`hh8`8`***`}*`e`H)hJJ*0JJ)` (< ( < *? ( < (? ( < (? ( <*? * **? *? *? ( < *? ( <ȱȱȱȱ0]cȱeem*ȱ*ȱ**ȱ**ȱ* )* * )L(`L?* *Ll) ) L( )Ll)8e` ,$`ee` < @( )m((.(( M(i  ``) |'(j21 z& {&!` ({&z&(i({&(( CBDFGE (r&$ 3(,}&r& … 3(ŅL&JJJJ`Ϡ'8`r&h)hr')L&18|&"m11 2H22h2舌|&|&12H)M0 h10200I20h2 (`LE%12 `_'"L  <8# ȱ)ɀ  )( ` (Xp`ŠŠʎ1|&… (n}&Dž (\%Tz&Lc()8= (J 8'z&'{& 3((ʎ1|&|&|&3223 `BYYZLYLYLY뿭` 8!@8` %MNЩUMߩ  L 5   8 0 8  `0 / X& & +&&7&P^& S ɘL   V7 L ' 0% '8 Jm ʈ0  0ŠϠĠ͢Š͠͠ϠŠŠϠĠخ͠ ͍B B(8. ) ɘ"    L=#=#&ŠϠĠԠŠ  m# m# J Qڨ)̰m] нȱ ̀𩠙 i F >l"m" h" iL X%;"L8"ΠΠҠ`y""""""*$ Fk%YeQP!/RB}QBiBB}\ ĉFEL/#> ț6 hh@ihAiH(ؠȱ@JJJJq@)@vvȱ@Hȱ@Ah@@cve J) LL LJiB LJ) JxhHHHHL(  ްƠx@BEOD  ް(`( C)CJJJl`B l-`J,~@~@}J@` ߩ%S @ ~`E hhhߺ0 h ߐ(     0 HϭߍLпlJHIH IL;FHGI ҭJjHIHB>IؙJJ c: QLHIHI`JKJK`FHIG ( Ȣ؝؈JL)eKM`)` J }J͢ $0 ΑJFJL8`JG ް(`(8`ؑ@`M8`8@ؐʈI묉)}8}} L LةC8`؍)@ i)}8}yJ ^ ؅F L{) +%J(a 6FإGؐ.` 6}۩ ٰ}~`JJJJ;i 묈͝ ٍ0  `H8` `ٍyٍiB0H0FG h0`FG `ϩBxED0C` }~ `ٽJJJJ`H͓hn) NjNjNjN. OH͓ ;٭ *Nۙ۰ڙک `Z8` O# 4`~ .~ .~ .~8۰*JF٥G٭'ܝ٭(ܝ`)َ 8ʈ` 0ٝ)i `8`R ꍓ}~ NمFمG < Γ0 FGL鮈0 ٭~٭}ٽ8`H8`  ,} ~ 8 S01 E8`100 e 0ʩ 谼 谷`12)1`0`Ȏi 0U`)8`ί` W G I8`FHGH hGhF܌ բFܽܕF芝ܝ 밶=> ?܅I m@IHHyHȘI Lܝ` @f@ n@Ю׍V)؍0JHi 뎈`C8` @ 3N@) S莴 ⭱i`0 e; 뮈ٝ٘ 0 W,0 .H hȑNWȮّNW8`ٍّN@`,뎕׮Б` L` @>V)I38Pghם`K8`@Nȱ@O@ IiNȽבN)/ȩ/N`@[ WHJjjjhA I'KIlllhh8` Qx")T'P() ɺiLG )?      `l@Hȱ@IױHXATȱH ɯȩ׍̕5H)/@a)_ .0 :A[8BJ \ FإG`BH \FإG`,H hHB؅F  ؅GxDE؍00C ް(`(8` L3J  B"L H  B 9ؙ` @ P8`K8`B8` O؈VJJJJحt) ) )Ю ЪGgF $ ᭔ع+ؠ >H  Wh8` 䮈ٽ ٬ؠ@` ( O )8`)i п`  H hхhꭋILhH),kx8 (8` ԍ`@ABe Or88`zw! NIJK,-NOPQRSu' Bɼ>K@J5 9X(K XXK تKo`V8`no` I on I9XX`) HJJJh`OeNeO࿰ 9XАO`@ȭ@` ON fNJKO`H݅G ` wͬ 밽܅F݅G ` * w% L`L뮷HH &hFhG܍ݍ 8 `FHGH & hGhF`ݹܙ݊`@OEgFhG 6%&N   & ܮ `J HH hh` 0 @ LLL w`̻Yܝ ݝ0̻ȩFG   0` ܅F׍Vgh 밑 %LȹL@ȅH@IL,0` G פֿ= eH.t)N 0 PghV)@LP8` a᮷ &֩VJKJ L䬈yٙ٭yٙ٩`K 8` @LL =@ 4ȹP8` %i` Bם0 4B B)( ȹ`8m8m@8` G8`F Pt)@N8`V)@J 4טyרםVV))ꭸJJJJ Ȣ؝I؈ >h(8H E h(8Hh(`ؑ@`@ȱ@ ` B@8ZV p鮈ٍٍٍvHٍu8ihjVJJJJV)V@` %I -t) 0@V)N ) C⬉Ȣ؝@ݡ@ʈLO KIJHȢݡ)Jn 8 λ ؍ ؍ aH8 ع؉i 8` L )߹0 )p )@ ) ȩ ؝O0QR 방 STQRFG 嬉؍i؍j؝k ؝f }V) }V )حP͝ `H@h`h``N8` IhHIhH  iع `  عiعi` )؍0CGHFHBFGx ް(8hFhG`@4͔ L @Ai ׭2` . W#ع؍0 e讈)`.@+ HI}H؊  PLKΥʱNLMO MЈMEKݸP%MEKΥL0 O, PeNNO O(` C  7 #2J}HI~HI؊ LQ  6` #A H} ع H~ ؙ؊`@Nȱ@O`؝}}I}ؐ` rؽ؝} r 1 r؝}؈` ` H  \h)N@ C; L  >$ )bJ e ) H @hL ) # )حJjI~@L>쬉8NNO 8 ؍JL`RΥʱLN1MOMEKP/MEKΥLCL-M O,p莤eNNO(`JNKOL >/  .P L8 cؑJ`L@ȱ@ )N$% LL L L >  .pJ덦 )@፩NJOK >iKKΥΥ IJΦ JФ̭JjHFIH HIGxKE ް((H hH h8`8@ȭ@   !"#$Ԡ͠ˠ(C)1983-87APPLELKL`BL Lެެެެެެެެެެެެެެެ(C)APPLE'83xLLM Mh@8nЍLޭ 0J @,,LZLG ASTARTUP$#   / XXύX?klmnÍoL) "6L'?"(0`6708" = ***)<0h)ύh0HHHH " ׍hhhhhhh .hh8`JIMJAYKERRY&MIKE  (L](L u ʆ L u  L XLt $ ]` L  `$ i [ ] 0 ] bȱ ]L]úŠōκԠōϠӠɯϠ` 0ei H @橭 )Ƨƨn  Х ? b ) LH % h*,7 Q$ ɛLDLI ԥ ΅  uL u ɛɈqɋmɕxɊtɍ  bȱ 蝀 ^  ةI XʩXύX1021ʆ X ;)4i/ O M ] o+ T# L$0)Ħ 8V%֌&8V֌֠)HV)hH)hHIhդD?DRIDQD)҅; ?JDQD]ՎՎՎ`MY pӭY)p  ӭp`C)`BFGV 8``8LխӅ:HhHh Ո թ թ ՘VYҪҦ>:Y)Ң`;R?AJ;<ȰY)Ң`Y?)Ң`ȐҰ ;HhHh=Ң`Hh `Hh`DEiȍ0֌1֍ZԍsԍԍԍԥDEԌ8TԌ8WpԌqԠ 7I꽌ɪ꽌ɭ蠪:љVE:8`]ѾV]H)]ѾV]ҙ)]ѾT]ҙ)] >8hUD` ԝY`> Hh݌(`HCJJJJ)*h`0($ p,&"op8`kkV꽌ɪɖxlӽ*kӽ-kәmMlӈ 꽌ɪ`8` *L o % ԽYӍZӭoӝY 3Ѡ шNZ`rZLkӭZӍq8r7IZӐiZkӐk 8 ѹs ӭq ѹ| kн Z)*>>` @ $(,048<@DHLPTX\`dh 0ުlptx| ֽ ְ& .Vӈ  JJJJH 8h Ei 8EX`'8`jӍWӥC)p> pӥCYӍY 轊( ( ӈBV ( ӭp0 \BkJ ՠ@iӦ> Ӑi'j:ZH i@ioZZH h ѐȭnWǥBJ Ӱ8XӦ>` Ր+>P׽8H  ): e: y8鰕:Jjjj<)yאi8i;i(*=>hPם8`;Zx3QZYXXWV[HEVhEhH)IWHPHHHAHHHLaVEWLӿJJH !h穖tp% ;"Z/݀>">"' 1" 7"5).莀/ ;" " 6" >" 1"6"$ "g"" !"""""I򭱻L')*+,-./0123456789:;j>>m>` im8iɻnjʻki»ljûoɻi>?Ek?>Q>> L> \/ e>>?͸?ޱ>ȥpn͏ @p;폻=po:Q>>>Ͷͷ `` \>Ͷ ͷ `e>>?͸?>?Emn(>e>ȱ>e?>Q>ؠ> ie>>?`;=:<:<=;`ͳm;>:8o>oȑ>ppȑ>> :op` DKJپھ pHJh` D!hgtp `tp8nnitpi͵tso8pinii>j?kͻ>pIiͳͻ l - `>i>LK8L933LΞAAJL ةޘг uv $ 8LƞaЌ>?@`>?@`B?8`[ K  LK ҟ ҟ p KK`JJJJ8`轐K)` #hhL𚾤3 @LtJ)s@J b  l`a?sa?,E30ɍФ3 E3HD F3 Ʉ%h3 bM E  lLthɍLL3`3,A0s0% Ipn DpnI:L ؅303پھ p /H־Ǿh۰8L־Jjjj67ﻭɾ)Ⱦ8  OLӜ ΤLLX>(F󻩍`ڻ־ؾپھ׾` bɄ KDEF vLl v lL9 bKɍKL?`  vLl@$݅3`(l8L3LX>(Ƀ,`3,G0]ɾ g` H`پ_پ p _پ׾`>( p۾m׾) W)ʩ@`ɾ>(O puȾ ɾ-O c־Jjjj6ﻝ7 `O>0O v PODEF޾ p ޾ p($ذ v (0 C( L?ԦʚLeةީa s  lL b,FLg,DL,C0$3 >@ Ɉ 3ɾꩈL(3ɾ;Ƀ CB94 l% bʽ  ՚,S` H H06172839h` v97L75v^a ?/( va?L9LLɍ$?`?a ɍɥAH93827160hH46576879h`,C bL ɍ b ,S0 @ lLޭBYL 8!9 詍` "  4"/pŠϠŠà͠ӠàԠŠDH߹h,PIN'ҍIxy 9L@Ix y Jp軭noF 9= zlm 9w)!,ZJ컽YH)h****)  m껍껭d8-`\H[< h  9( 󩭙뻢L9id 9`H) 'hJJJJ ɺi`绍 W  ` .8 `O`S ໩ %AI-LC B C VWS 1⻽2$I2 U)VJ T)`l⻩8`a HbIJhjǾȾɾ p٭b=aIe f`8` gP־ǾҾ,G0C =W)_``\"׾پӾؾھ pD`־ǾY׾ؾOW)ݩȾɾʾ pD`8`W)CB) ɵ 5W) )W)@! pZ}ȾȾ󰹩 p` gx`x ө8x,, Ey,,`d@ h`x x`DGH hx, xx ` xlx@`x,,,,`LxH,=?@ABCDEFGHIJKLMNOPQRS'9yna  A@`حlmA*RSUTG.P/Q`8LWATCHx h טLxxxx xx x)ɲ4 / X#` LӠàҠŠׯ ga.<0ka ja)/ha gaH - h L )00& '8L`&`'`&'12)p00ӽ321ScЅ7D$(4):D$"- WATCH":D$"WATCH FINAL":D$"- DIGITLLLLL9<߻)M߻ `6I߻8` ԠŬLL>孓`仫6VtCicQĿUKqtVt Nʮq$6,⨁ K6, VtI=v!gNVt Vt  lg~T٭   LiLMTRüϠž(+@ABCDEFGHIKLMNPSV     T[fouu~ՠٯ* PWN*]ĿNTz @n6VC/+A>@I5gN Oz @n[Dz @nd0,~z @`$仫@v$⩔,C[B?ICKCHAIN#FLUSHREADPOSITIONOMONPR#PREFIXCLOSEAPPENDf~Dp iŬ-⭚keF<{TZM@@ -!S    !C- !ABELSDFRV@@ !$(19@EmȾȾmɾɾʾiʾ` Lpl8l:/,s̝sƬƀ#(ZZV4G_0=( A P FjL\5p-e9ABSAVERIFYBLOADELETEBYECATALOGOPENWRITEXECREATEFRESTORENAMEBRUNLO־ǾҾ,G 8`׾ؾ  p ۥs׾tؾE` g ( о(־Ǿ,G 8`_`W)H־Jjjjh6ۻ7ܻ p̭ܻۻ L)Ǿ黎껠 ..8ۻܻ 黍滈ۭ (ۻ8黪ܻ껨,h,,`h`Ѕ_y&_0yLy`բLlmV) sipLySqCr.spxx N ߩ$`%&b'q ߩ %op ӐLy ߩxxx@x ӭ@@@@@@@@ @ @ @ @ @@@@@⥌x8駍vI,vh6)-6ۦ! 䅐䆰( %,-  ) 11/(e/()*e/*+I.L~ަ 1օ!16ۅ-vI,! 䅐䆰( %,-  ) 11/ `bLܤ 䅐䆰( %,-  LL( ) %,- LܩL۩L1ܩL1ܩL1ܩLۥ0 $(&i*ȱ$)&i+(.ȱ(/(i() ֥ /vڙ6ۈvڍ6ۦ 1օ!11(H* :e/:; `(e/()*e/*+ :e/:;)I.LJ&&&&&ݦ11(H L2ݦ11(H*vI,vh6)-6ۥ d݅e݅!lptݬݬݰ`Lܤ (Z䅐䆰%,- ZLL`0 $(&i*ȱ$)&i+(.ȱ(/(i() ֥ /vڙ6ۈvڍ6ۦ 1օHh !16ۅ-vI,LQݥ ݅݅l! ) 11/h HLMٍh h/h.`-,-), ,-), ,-), ,-), ,-), 8,-) , p,,`I`օHh ''`LڅH h`JJ`)8 թh` H H()(H***)e  ) h)/ȱ(.ȱ(h(i()i) h h `0 $(ȱ$)(.ȱ(/ ֥.H/H H /օHh ( 䅐䆰q ) лI.0                    x pة@ թ  Lߢ ) ) ) ) ) )JJJJJ((((((((((((((((((((((((((((((((PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP     HLՍPRTW ^_ ^_^` Ս `HHH  օ օI`  IE LRօ  bե)IJ$II8ii(hhh`HHHL7LUԭLLIԭLU )pp   w LUԍ ߢ dxՍս**)LxPRTV ʆJejf``&&&8`&8`8Hh`H@ՊHH000hhh`x ө8xLEyĠx exLLy8` ԩ LȢx ex8`xxx`ʢĠx exLy`̢̠x ex` ߩ dڢ  ЩЩcɛLɈɕ!ɠ2ɍ9Lԭ:i+&8LԭI xL ӥ (L =ӥ8 LL bӥL L ӥ өAxx өxx Ӑ LӢ@Lөx өЅLx8x өp8xLEyx өhLEy8x 8xi@xLgө x ө@x Jy`XLJy87x ө8xLEyx өLEy8Kxx`x ӥx8驍xxbx ӥxxx@x Ӧ@@xLҥɠ* pL ] qҩ` DL ]ҩ  DLҩ DL҆fx8x ӦfLHy xx LEyx  LEyXLx@x߅ xLҥ ߅Т` ߩ` T`@U` U`@T`` XLy 8Xo 8X_ 8ЪSTTो8UR8KJ8I8N` Lii`8`8`_` `_0 gye)ppL) +ee_i_`i`L`8`P`@ gy`` gy)pp zLX gye)ppL) +eeL gy)pp`ea `еб`օ`p  L ߩxxx@xx x ӐLy  9 ^ 9L ԩ ^8xc?xdL1ϢΠx exLy` $LӠ H h`@ a``__` 䆐(aX`LLa0X`LLOťbL /a JFa/8abȹ/eaa8bLPLX`L-ø{{ttmnghab\\WWRRMNIIEEAA=>::673401..+,))&'$%"# !@ @ ogk kLl ii)iljШme ɀp8`gIgfd0L o8 oX`~|xp`@?xL) LyLLb0X`L~La0X`LLOb0qr   ɀfpo8./ oo` x.d/efg h io   ./ hejli=9օ f(& u`x hejliOKօ lkgf($mn I`k) k ii)iljАme gIgfd0L`fopHh &Ն./Hf}qh}ropѭ`HH gy gy0 K) KhhL`off &Hf}sh}t ݠ ݐ$ t s}s ݰsf8`f  ֦fgf楅m楆n潰hideХ 8項 ) 8 ) ` H H H H *h h h h `HI` qh`HHHf.g/ f e L :I`Zڍ gyH) EH إI`Zh إI`Zڥ eh i hhhhZLf e i )p +e8e)_)_` `Ly)pp`PL`L0L@LLk फ ТLdPЅ0Ѕ Ѕ ЅeJJJ) e) 8項 ) 8 ) !٤8К` L*ޥHI hL#ޤ0(iЪ0Х Х Х )e )eP`@$LLa! gyH!h/h.L! gyH!hf0h h he) eJJJ) h` +/! gyH!h h he) hghf/8e`) gy/ii8e/` gye)pp.@e)e0 %@O^cmv)3DUfw->O`q ,?Par(.;LYjw)6CTanpppp~|xp``px|~ppppN|x8`s|s@@`FxxxxxxFP(P(P(*U*U*U @|``~pcqq8xxx??s?ҶT'r$8^ 6  cccccxxx``````Ac6CccC1``1< xx || xx || x4dD@ +zwy+UUUUUUWWWwwwwwwwwwWQUp~`aCC@~~~~~~CCCCpp BD@@@@ppppppp`HQQQSS @@cc>| |L Caag0?0|@0|oF@a3 | | |AF>cAAc> 1A@@  pppp~|||pxxxppppa~???<<<<ppppp~~aaa?|?@|||?< 9pp``~~~~~~~~~~~~~~~~~~~~`````~~```@||||||@|||||||<<x ///T~=~~?x~?+(**zU_zj?` |~~~?_/EQTUu}03333300"*++++*++ ??? ggggaffffffffLLLLLLLLLL P @ppppppL LLLLLLLLL (*zzz*~???z(*+/?~yQup ?`Xx??~P_}jQUUWpC330""""""""j~xqu~q?:;_?****ca`f`DDDDTU}GWkkkkk?GT}7@wjuUUUUppppp LL pppppa~a||~CCC 900333 """""""""""""""""xxp @fffffff```@DDDDDDDDDDDDTTTt|||||~}zth?|<<<xxxxx @@a8a?xFFF 3aaxxCFFCCN11aaaa>~~~~~~~?Op}~UUUU5rrr"r"<<<<<xxxxx``````CCpp~~?????? 6@H\HH@@@@``@89999;;Q{UWWUWWW?FF~FFFq1q11q@@@113{NLLLFFC11?111 yxx``````Ac6Cccc0?0qqq11188888````pppaa0qqqpppOO@@pHHxx#@@pppp888xx@``c@@pcO88````ppp````p@AAA@@xGG@@@? pppppppppppppppa?CCCC@@xxx``````~~~.>.>.> F1_ ~Nc^KOOMN}7pUj% Bw@cE7wx7?_g׋͇s NiW;  Z,0|ys''sy|"&*.26:>#'+/37;?#'+/37;? $(,048< $(,048"&*.26:>#'+/37;?#'+/37;? $(,048< $(,048"&*.26:>#'+/37;?#'+/37;?((((((((((((((((((((((((((((((((PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPtv^_^ @`E$0`H8ԥ@DHLPTX\@DHLPTX\AEIMQUY]AEIMQUY]BFJNRVZ^BFJNRVZ^CGKOSW[_CGKOSW[_@DHLPTX\@DHLPTX\AEIMQUY]AEIMQUY]BFJNRVZ^BFJNRVZ^CGKOSW[_CGKOSW[_@DHLPTX\@DHLPTX\AEIMQUY]AEIMQUY]BFJNRVZ^BFJNRVZ^CGKOSW[_CGKOSW[_LLF @ @`ɧhh ` ` f  i`  0 ) = ))  ) = )(`@`PTRW] ^_ "-PRODOC.CTN":D$(4)$ D$"BLOADUNPACK",:HG32768:UNHG3:D$"BLOADLOGO.HF,A$4000,T$F2":HG:UN:D$"BLOADPARLE1.OBJ":D$"BLOADDIRE.STRAIT":0,0:1,64:819 D$"BRUNDHGROFF":D$"-TYPE.PRODOS":D$"BLOADDATAS":D$"BLOADPRODOC.NOMS":D$"BLOADLOGO":D$Y殼Y؂[WYჃYXX혀prXˋΜYYȶJWX䩬YެXY[WظYZYY͝ƠWឈǜX򭬬X{~"PPSH!~|9G9|~?$m">IcI>{9I9| ~.t` G x73xx oc`c U{!GP?|ys{}~wrssx ѯy@~gfg}<-5Y]o{0=]^_ 8Bwyz{|}~* äW;F` wX|tX-j_귂"Ӆ냂ЂԪŚРȿā̐ɂ+헡ʩ쫖ŚŠڀäÆ [ -S$u𲈁%@ ĀШ׈ϋန¸ba8ZA@ 0 'HJ6m?Wr_k5^k>ߡK4[~zE`0~+TH3Ų6*T'Z5 ]*Jj@_t`-$x0E hʠԒЂ# !`:` (@4X mxu@:U~m>_0@ςшh5(J5LCP@V @i AD O5 @1@" €P~'(@ MF9T)TZ(փꁂ5׭ᤐДꕉՀՀ%*0P+}/u>w[}b<݂׺Ѓp_$>H7-V+EZ=j BA` *)J5J }C4uHB+@1F/R-R)/7{?w;]6㿂*:(縟؄փ@ UHwm5_?-p(@F#5^!Tm0` @ P @`0P|z]~-6_nw}>[m$w(%©ĒĨ׺߷ɮꕋ Ֆ @pj?u?>ڤܪԡ!څp@T0*h@ ?kH-2 Rc>c S z)2P @ T?Zon'_N7-^V *U D4*o5P]ՠ Ń ཱĂ@p @*V=j(oE3-@ ar 3E$@?>68?|{}|{}!勝øşyy붂Պ׊ԫᇚggX[]mlmogkm67;{;?]n }>_hB5o@ *Uӯ@cGp <g,tZ-D3Lߋ`o`~pwp~~ s{}~}{}~r,no7~?딀۠g[]^nq}|=]mvwp~ۆxc' ow{}~~}{wov6._/7w{0=]^_xwx{|:E:mWZu~_k* >\qps?|sp?]^`now _nm7Wfeuv7xwx{|o7;:=}p_:Wz/z*T_ ڱ |9awpcCcxcC;=^NQ ł-ۥ굟'ڎ݀ЀҁăڭȀքЀ  ш腀ºۥߟǏLJȢĂĂ˞݂ Ͽ輸֫햩a NJͬ|4`@  P ]"}CE(Uz.{l7]cic~k5_eZ rP$j$RB  B@ T8H 蒞 Ѓ G(`EI$V+`T)Ptn%R9nQj?I$ji>@P(p ޿àǗ@ h6(U4Ec1 @x$@.zV=b {U%]+u^U(Z%z Vo @׿؄ؠ҃͟@*C)P* &+RjL2@P,g@4 zpXQ}hK7}w{>y` ?]xW4K6T)2Y6Q$RYfTj4w? L7ട҉ᚌաߴԠڨ傀P/z/{[n;O>Ձ€D@ @<(!Vy>H= ,sSȪ¸էҨA @ B@A H`шē+Űʀa Aj@B?,"Pr(`DPh,[lvj9X'|@0@ F @`xlw}~_o}o@"@%k=.^ժҴ֪Ԡܶկ-l1Nzo6;?_VHnj` @ 1J"]9T0 ~mm p,@#L ]#P*ŶˠEʕ… ˜ _hh$P@TJ~K%P~I8gQ"D AQ%H @ B(`@`Pp(xX*?k}}OɤʀۭЪ@ P Pȁ"ۆݥ߷֋ϰŢ պޅȇ P΂'϶ۡԃÌ7݀Ղ ជ背3웋ğ᠀ 𳇡꤂z] q ߽.NJѠծ δ b*͹𞀃ŋ ʻ׉ƋʪڈĐ矇¹ɂʸИ ϝBЄĨ™ ߯߿}*;W ߦ矠ԁ@`e]nXlm۴Ͼƛ쒁Îpf~fpޫծӥ¿֟ø恎㆞||ыﻐ؞{}~smnw{ {}4e>k_$*tW߿jdxm7ݯǿom ~?;=]cX_o/owsmn/78w{{;G?_P$@_`pXv-݂a ;LQO 1@A c@HaLag[]^nq `w{}~opws5UVfv?!?|qb7l0~| \__|~w{=#?~y6W[=|@-4+@ }W*<|h͙gg~?>ow{~y6W[={;7Wo_oa6]v[vm@_߮Ճ>\xSaac]^`~nq>]muv?/7)T 3Y\~~li3 <LdpxpdL| P|!?,nv4`/?x_o0 vK4H/U(|~{z| N>_oFGG ~`v{Qh`ǻogopgOowx ?Sj<<?_o? qwPg$@ 9;;?;? Z(b!HB@ N@NN@N֠Q} @4Phh@dcMOGCIL@Opw|owx^k?m>Pk:iT+1eGk96e=4B <7n/{=7A6kFg:6hLm4A:9u?hC0=:oDcHs9sDi6C99rHdDr:tE`Ln8wBi6@=@8U? R$?'<@6D#1*C1>(=<7>(4?)8#>6@'3+>7=*:!>7@#4,>6<+= >7?';#>6>&9'H,=+;!>4=*9%J*>&;$?8=':N*X% A5;%[, 0#A1|9I5 !E;X+ nJ=p8L *5ZE>G 8D S2U;V8=)2w7m;e7T 9$WE2m /V!m5E@6f8P34r25t8M#&m95lA`,l7>a8o .l85n@`+h75v,P O ?N7? N'P#Q l N ? L9? M9@ N8? P > M > O9>  O:? Q > R9? P  ?#Q;UEK5@I8 .$r!,9\,%+O@4J(\ 7!F,?%H'9!Y0+S#VL%1(V%6 S!7+S-,\9Q"L(?7&X"6R"OM%4!T%6aS'<":6BA\\9?9S A\] ??:W :#X=,C><#U @* ?3=+?A2E3'  H+<-3G3& ?2 `<*S9Th > ==e8R?]`bI+f J5C#H<[ M)K%M%Q < #Q M(N M5A N%P#Q%774M4=+<75;43N5=+8?-872L3>+983;42=7?,;;+A42F5?+;;,A60B6>+<<.B12>7B*:>+C20@7@)<@.A20!?3C+:A1=3;D5/G,@4/A7C21E2<39D4.H/?29E40?2;HthA70!E-<+5E0A21H/A15K/A*<C4B02I/;-LC7?42>-3A51<.9M*>60W*D+;9;C4W+@,=<9B1- @-A.?B3C2+ J A5M:-?H+H@%L)7ME,GC#N(5I!G,H ?4E&5F$H)K >3E&4E$H)G?5B(6C%I+E?&M,6II*C>%P+5E!K*E?)Q'7G$K'I?'@95J L3;?&A96G%H89 @%A96:6I69=%S(596K84=&B87<6K73<&A95K2=82:#E85<4K90:#D78J5>6293656J6>72;5275B?@(>95645N4>/<;5375M6>*<82e"HV'DRN*&V<KL(5EF7:Jk`D{kuv ;%'g2Y 9j4p_G87/> va(P2F6P%LFI 1W0%Q'8- , ;!k?h@6C<\<V( 5XVK,E-E@:H%3%D&E*F>1B#.)>@08K,KQ7<6L#.+<-98;=-G*OB(97<+1.C*O C+2:<>0C*M C1Q;@*F*L A/R9@(G/``E0,0L`,0Hh0L3 꼊螝/ǯɈ耬0㏟ ӽƴσrCeDn;wHZLp7zAi?v@wF_Cm=xD]Kq6A:=f@u<{Bd@j={=aJo5A96pCm?x>kDbFt;lBn38uTW>v=pH]Lp8tEfBw;|G\Bp?rSOKp6~AcAsBsE_DgCsOOKp7~D`V\@vEb^KHq>cKbI\OweC%):KI2<{+h<@V>=!<2;^7< M)OC)UK!;>98 M *L D4=?A3d%3"&?=6*=@87 3:@67.!T/6@76AR08A5907@69GR/9?6:;b0<O\k9q6'4Ec0K+'Z3n5pbV:f1g2 &G;)/>#56S*3=M./!C%<.>"78X84?J/(#F5<+6!5DF'3B(K%) N?+*46H8B+E(,OA'">4H8BT)!"RF(H6G9AR+&UE5A7C9?!W#+LD5F2" S%(/9;.K: =2 V&)2>T-K= =9X')4DK@U+L@ P=  Z(*3BEFJEQYY**3EEPQ[*&7;LEB+C~^,$7<GM?/D18V%34@9=6!8M-;Y,/;5%[KY)%'81)X=}&2/+KOm9B?3A 9C <:)?5.@<G=>a3B9; ,@3g:37 R#PAG7E>K2D-^4ATN(8VD7H@7B@3<5=22)?8K=8%: O794=44*?7M1+0%9A891;69'>=F/0*&<C6914::(=?D23)%>H58067:)=;G42+#>H39.>/7.;7H72)#c82:->/9-:2L84*` ?/9,48=+:/L94'g$+<(38@)9-M 92# &'<"@/?(8.M"91!  "+8F97'7/7":1   ,8K97'6/ 9 >/w$%-HO78&4G:<2S$'-GK8$6.MIF4;&8 !S3C'62a HB[ + a'.>F35'LMC]@".B(<B9:7>-4&DGw%?/<B7;6:25'B6=1:D4<7:23)A8]<:,<mFCA D`>G6 GkJB? _E]?XDGfLB>  ]FXB\C ^HdOC; ^GRE^@ aVVNE9 aDTE] =_TVOe& bETD^ *IR_Df;aCXBg  )JQcAE )/[J]?`<,MQj8B )3\HdC0IYoIi>[I=cSRWM\\M9zFKLt7j;[>z,W:bQ`6f9iI[GS:iWQ7e7`![@ HH0FN&.W9?4"A9^*:H,@4/!G/<8yASED5GE;0 @9x>>/#' B!3P@F5+ T"1KF`(,T#*"V?G$%.J EMD?L-2DAb!/g?ME@Q2XE^) 3lFJ:Y IRKW!>pFDJ=bHUIa ArECJ>]MTIabqEEI>\LWJ{GrFDY?^GH I|GeFDW?^DGGCqFDG @aAWFDoFCC Ca@EZF$ H 9*;N8AW `893K,DH$E8P-~.?8] iC6U&C8M8;)F5L+"C6I-&C4I.%I/H"<I&C5E)D B(@5F+$B5C,=K!C1E(5G#J*I!9K P!T#L]!y]c7/B;Z)*!$4J3>oqDYB:lDS@ !B3MC+ B)k2>7A*D6S6F4Z(98^9=7S>I(d)D  i  X5D;P-;AnN%hp?d9D^F,(K* A:Z4 &GSt+Q@\BB .U+A: T)H>(I>y/QBM}+QGJ #QYPOBUQDCW;dDV J9|?BOc2?3f M?R[G>7;BPc 1?=nN?Xc:=7mLA;2?4xN=Yc;=86@:2>39>Ym0<>}6A9 @3a!9>Ym1=On4B: fA5;=Yk3=QVLA; T@6^  :=Zi4=OSOAQSB5 Fj>Zh5=QROAQPB6\%)=Zi5=QSNBTL@: eM?Yi6=RROB @. ? L@??QG`=T$" ?86:DC-2 @AF4~?@5< 9C6=?6!@7(?14 C>A7>?78;CCp&>2DA8i @?8~>CDlG?2{I@9 TC?8a f)[ %:G `CPGQ1]>b.{%=u&DHHBRRD3F?a/{&'D7\CNEP7\q=S7b2\?K$\&6|L]$c9`3Z e&\"z(:4C DP1I+[0C5N783]6< $O4Z0B6b%:6\3< }$M6Z1A._0?1X;: {'M6Y4@/P?>5c'E ub/`1?+R;F;X(bm'K@d#I+Q6S-G(H ="p } J+Q5P/I8H 0:M"8")!P10C%A37"96H$7,3&M-4C-A0E76@%=%>,&D <%SQ"K:D6?[8O4?{%?2E9D6M/X A7]>CIH(K@E9Q6A4E9h48B- ]3 E)%:)1T#'*/F.%(*eJ<(@7I9b"z;Z /6)'<4B0-2F H-F0:4F0@6+96?,?)0J*O+05;C ;17"Z;3=%S=I8F(37F;$8-8#H$=/4:I;K792865G47%<4H!1..9F/4B8S)4"42A;.M-T"1'<.O+7 ?9Q*7#,9F8,K/Q%/D5F1>@8Q'< ?:R7y8S%6@:T9* ?9R': ?9R'<A8R*8 A"G13%71;.A71$75D'<64&E%32;:8&@&9,<3='8/>/;&:/959&72B-009.B/9':-?0;%?):89&;+A+?$80A*>$;.:4@"70>/?$;-=.B#80B(@$70;/A@=3&DS!;/@Z'<#=:!P%9%?<50=52G.<#A+>)=%:"U%5+<;/2<#42E05%=1;-:&99;)7):?-2;&;0B,7&>,799%84=+:(<8:*:(;:506(=0>/<#:781?95;3:!<626:"=3848&<374;!83<4;'=.397#C2:-8#54>552=98>2?,2C:H2&,H)0!T#?58S/.,1'=0C2,1F-B<%2 6A 15M -&7 I/uCQ,5#<5?N,-;l!#38Ke44KA 5D> C09Cf66Cg12Cb4?: a42? B78;(W28 E.N4$c24 =4M5.<H26 H,O26@3I08 C7B8+: K33 H4D08;4N0&E3K06S >M"'4\|,-$ a58+=G ;21:/O:#>9C31J;3?J%=#<3F"@ 9,?7=$AO<3=P-;%=6=,;>$<  Ea;;1B3HCB-V25\Jd=;5<0?JA5O6GZIl;8/WEIB49GA*SIl.G0ZMJ?0<>F0OMk/ /+YDT@69:Q+NF ,C-JR>47U^F%NRS?42JS#Rc ?Gj^)R""6>(d%+0;$FA-9.# #)<> A4L; <9'0>A35D*$9=',;B<+?)9*;*;+;%A);-8+9*=*6(B*:'>,3,A+2(E&7'F&@!=&D+O 46\$ @XOXe68~]FTwv`l 1BR_aa 8=QWad tIZ /$X_L1[-/_8m;u6< [DF@Z$ ;? >O?F<%U#G:>?H886#/5:#:<:,> .E69=>.-66.T5)$I&549. *C8+!I51';?"K;*Q.2+:A"J?+F53-8B:H<3>?6.8Ef>sI/8D sAL  L<8B9R  J6!+TD;7U~7-J$):.J  ; 9+I > 9,V+=7'U1=4*V18/(T39.'U67/$U66."V78!+#V66%&b.?%.X7>'.X5@',X6?),W5B( -[6@-'U8=0&T8:&4=!!P%3,@*E-+U0?$(O?35;2Z#9-/#CH/C5+5;(&0I/=*B9:7T6.1;(#7I13-FA?2?8>+<*#4L:(&M;?5>8<0;)&2J7*'A!=@:<.:.%0OC!A!?D9Y71$/L<@I*8X!2 A=@I+7U$1/?@?H-7T%00@@?H.7R+.->@=F+7R5/!> ?>9U5C 9%@<8T0/C:E!3K=6C:5F= q4F=6E>3G=7F=6D>8F;7E>7E;=B8GK  KS'B@" R>zJYTHDl?MBmCMAh/J3"`1F .hC[Kf?S>j7]Ge=S@hCPAf@Q@jANCh@O=m?P@m:Q8G';U7F.6T9s;X7z2Y2}2]/} mB I?i E[B=_=k AYHC^>AZK?Z;A\jC]>>\k<4w+a;8Am"#8?a#)W*'6F\!(Z+'7G-#4L.3Z0?L=:W 76V(T*4R&2/C>>6V*)/C=>8U+(.B@7X"1-B9)L"&5V**L7,(=2)1G20"M...?/*2L+/#>86(A-+3K*1$B70+@-,4F--(@8.-C*/4H(,*?81)E(/6F+++A91'C+.7G*)+B:/(C*06H((,P,1&D*16C+*,O-0%D-03D*).D83&>1-8C))0H3\Y? fAe JX=Eg;N EZ?HA =k BY!  D;1' B ]6)/?"+K3206,4-<,)'L23)F!756,):01"F.8)H A3= _809:'#b5&g"*/= I6: S8UB7> T8VT8S S8UV7= T8TS9S S8S S6@J< ]A;<-c7X3~@D e#1J=4>=E4I 2\.+= X ,T$o , !J9 @ LR$:  $ VMQ$6  #>JOS F <$S @HPV ;Fa b7 @MM<X@1N !1 >%S $"O5@ K#R3"L&@&) 5(XBH&16&]$'-DS:TM `;h / B7YES) 2C,DI <  :;"S$;V ;  :!7"Q%;U : :8#Q$:T: : 4'P$;S!;P 4(Q#=T!<N 2+Q$;R"=M$;P$=S#< 8%9P%<R"; 8$:P%>S#;N#1)N&?R%=M#2(Q%?D4< S88R> `IE02`Z$+B-i+ d.g$0c*:3?/1&64>1*+:5=*8'65>0++:5=*6)66<2++9694-+57%=(D*?!<,A'F!:)?/HA$K @(A!%A!'?*B$D <#U;'@M.5I3<(+.Y:6LA,C?);+F27<=< >09)=3; ;6J!018074@6;G105/73B M2626$8.@11'66;33#85=0..76<03&63>1/+76=12%75<2.-74?/2&77:2+\'14 ]05N+ \)&U $N2#!' 2+  $3sB@)[3J;[CAC+%-0y>PHM993Z! YDG<&*6]7nKF#>56W$U(KB!13' ^>iMI5? D[;VOrA.p=gPG(a7D "C8`S-"8iRE # 6C $ YG)*k;SVY/(X>g;] )&5i 'iWYH;\=a;:;iAaWVHH-d;]:~8 VfBJE2fGKM O5>:{?UgL@G/jIH; Q6<9~?UfM@J,jJG6 N7?9~@T8&N>M(nDU=X5@;}A_-(K )A.gAEPUDD;},m1 (G ' Ax@E;jHA8}-h2e % <|?D:j 9>6(d26<$<?!###?!##??!#?!!###????!9##?!!?!### 001! ##??IIIKKK')))++3?!!!##??!!??!!)+/?!!?##??00?? !!!###?!!##"AAIIKK! !!!!!? ?? @< <6c66$""""">> >G%tRq  .     > >>@ ? ?? >>>>~B@x_Q  `u!L/.(%]8LC*</*2;-*E'Ci4KY$#/AN o%R6J i (XH A( AJ< ^E193CB)ST,B-A<44B Ak*>vW=0$q D K)J9_9o P@ 9^9#L/-O9 "mU@9O7%4a!0K4X9h*E KYR' [0c3d[ cZa2787c'Z3 VPK*H #X[DF/@eN;CcGE3D !)@ C,09'TF ` ('KL (C;+T'> I<2:1,1#ICF # E>-6< Z-:"?)7a (J521:abL1ej;8GQd2mR>:M.M4CY%06U"7@'O(-<9U& >A.R;G>\ D;/<7b'+74F*O&%6:-F-6&=&4*/OC&>!T'P2"O'V2-Q9 /=#E* Qb8LC/ @#   <EUjh E. ~KFEc/SsyT\mA @951*!GP BEϴ {V^fg/>;Pb RK_ -XJ,RIJD8'PXbZ>&.A4R[, HW1 yUabs-@G;i~af1./^btD943U(;UUK'AXc=&6B;*b&]DLH.AWalA:Dd0E]Z56?WelC8E%`+8^R9;C[`i8DG8S,2bHEnVGaLt;DCKQ/:eBVTaZd6G=R@/>d; ^LUd)8:m;^4>> q;F8/H9Y2#/GB41^5&I/0C5J;p-\<[(j,9?/\ {?G?l0]:['j-= ;-_7r6e/m.g2u;\4q!<_9"J.{&t2$( 4!4D1 3: O 6. :(f09O Y8qR:'$G> f.T .Q A BA/F3+U9h,Z?: 8D^6IB?WSG4>7QY vG)=2/ SK: yA?>?2BVSC;= [oiV'@6[g XF1@ 4 sOcxV <@Te PO4=:F.'F5=)++^ 5)*3L1: B0F8?$-(A6<-6'U&3#7'H59$3(G';"4'@$;(63D6,"7'H8P 01E6:!,3T%8$)9D75%-5A75%18T"9#*3V&4'-1E75<7@46#04B59#05S$4',-G:5/?J/742F8,!?1D)?+=P/=BI<(;*/V-?(* I5,(C B2,"@G;'sAM;<%%[67-9V(0"C0M%3T5r0V:2,1b%/@=L4N9u+Z=x8Y+4@5A+C*QA4)C 8?8S7?7A A7(U>98S?<6T<;7W<:9P:>7U9=9T7>:SF=/S?99e0>3SA<3\6F-Q7@;S;;9R9='S:<;Q:>;P8B/09>19'7K5<+>?6=&7$@9)7$O17,+"H69,(.F6:'(0D2<),5C6:*/E:;$6%B6<+'.[:)-1G59)%/D:A'9.11@8.(1,M*4*9!?=2.1$S.-,1+J-4(..W"3*9!? +3*8R)2,5(G*6(9+A$/+:2D*3'<,C&5,?0:&6+;<=+/?<;)-,>19*38@)<#5+G-=1/";:9,I83678)>";13# 5)97E37:)@1;?;$= ,=<'*91DEd;A@@:Q5W;C=D8A9a0=CS,?7^=7O;>?T1N?G3KGB1LDA3Z6C0]>9*QDD-[9C,OK0(cDD,R?C.R87*RA:9SD@ ' 3*i =D;h,G-X ( L16U)5*g /@ 4J+;N';1; ?7E1FF+83? 6>/1H'92<?0>;E  :84A*' P*:0<;<=%*0@9?#;>7?.:F1>,<I.;%0->69,7<9=.1 =5=.23-:<':$;89*7-/8=-3!L%;.31<,:&4,<86*6%;99.1/> >">>""">>> >""">>">><>""> >>""""  IIII>"""">""">>"">>""> >">> >><$$$$<"""AIII"""""> >>>in!! HACKERFORCE Inserez la face SVP.Branchez l'imprimante.ҠŠħɠ٠ŠŠΠàҠ٠ĠҺǮNsqנ p s,Q @v$ % "w :۩ Lf,Q @v X Lfթ$% "w : sqtʆ pmqvvmqwviw $% "w : r`PRODOC CTN: (C)1989 by DeckardErreur, tete de na>q s s sLtɊLu Wu sLtɋL-u =u sLtɍLt rt sqtqtqt rt su` rt sqtqt0qt rt su` ` sqt%ss0sLrsιssLtLu s q sLr q s Nsq͠ p sLu tuqtʽ)uui0&w NsqҠ p s>q2 tLts pe`4tsssq`sJJH@t8qhiqssqà pqqiqqiqL#tqt p eit`V &I&Ltqt rt'tLuLudu 0  =uLt0 WuLta b suLyuɉ>q>qLuJ  jpLs,P,R,T,W`>q 5q  ?q 5q#  ?q>q 5q` ɠ`8 `&gsigshsihsLRsɠ a b0Ls s` q`s't'tqȠ pLss p peqeq` s w :۩$% "Bw :۩$% ""#`9rH` 2::(4)"TYPE ":28675C28678ĩ>q +r q r s Ns shsfsgsLqsrssss Ns sLt` q p p  jpLr p `((((PPPPI`x pi@opipp=qQɠLgQbɠL>QaɠLgQQ Q L,QL VQLPQbɠ VQL ,p` VQɠL{Qaɠ VQLӡ p' ,N HCNh`Πů٠Ԡé٠ŠӠ XQ( L"PQ : LXPYPZPBCVQ? ,`8Llm ٹNPQRTUS` B ξtϾ pL о־޾׾پھؾ p  Lp LQ۾TY@   !"#$Ԡ͠ˠ%%%%хhꭋILhH),kx8 (8` ԍ`@ABe Or88`zw! NIJK,-NOPQRSu' Bɼ>K@5 9X(K XXK تKo`V8`no` I on I9XX`) HJJJh`OeNeO࿰ 9XАO`@ȭ@` ON fNJKO`H݅G 될 wͬ 밽܅F݅G ` * w% L`L뮷HH &hFhG܍ݍ 8 `FHGH & hGhF`ݹܙ݊`@es questions posez-les aussi dans la bal HACKERFORCE (36-14 code:135060318*RTEL) et nous vous aiderons. Big HELLLLLLLLOOOOOOO TO: THE BRAIN TRUST (je sais qu'il sont encore dans les parages) THE WARRIORS OF DESTINY THE LYON'S GA) comporte 16 chiffres. Les 10 premiers sont communs @ la notation d{cimale et les 6 suivants sont les caract}res alphab{tiques A, B, C, D, E et F. Voici un tableau montrant les correspondances binaire-d{cimal-hexa. BINAIRE DECIal pour plus de commodit{, car il permet de repr{senter une suite de 16 {tats sur 4 chiffres. -------------------------- ! HEXACHLORURE D'APPLE ! -------------------------- Le syst}me hexadicimal (que j'appelerai hexa pour aller plus vite'en binaire ou en puissances de 2. Mais vous avouerez qu'un groupe de bits de ce genre: 00101001, 01001001 ou 01011101 n'est pas tr}s lisible. Il y a quelques ann{es, on utilisait le syst}me octal (base 8). Nous sommes pass{s au syst}me hexad{cimjet. L'assembleur est en fait un traducteur. Votre Apple ne connait en fait qu'une seule langue, c'est l' {lectricit{. Elle passe ou ne passe pas. Cependant, l'Apple sans l'adjonction du Basic ne connait pas le d{cimal. On ne peut lui parler quous int{ressent pas pour le moment. Supposez que vous souhaitiez apprendre l'espagnol et que vous ayez d{j@ des notions d' anglais, vous ne ferez pas appel @ la premi}re langue pour apprendre la seconde.Ceci {tant dit, passons au vif du su d'abord, que les choses soient claires. Dans ce cours d'assembleur pour Apple, il n'est pas question de faire r{f{rence @ des langages {volu{s comme le Cobol ou le Pascal. La plupart de ces programmes ont {t{ {crits eux- memes en assembleurs et ne n------------------------------------------------------------------------------- ! PART1 ASSEMBLEUR MODE D'EMPLOI THE WHITE MAN FROM HACKERFORCE ! ------------------------------------------------------------------------------- Tout OOO Y Y ----- B B O O Y Y C RRRR AAAAA Z Y ----- BBBB O O Y C R R A A Z Y B B O O Y CCCC R R A A ZZZZZ Y BBBB NG W.O.R.P. MV GANG DOX A GAZ'S TEAM $FF59 CONNECTION R.P.C.B. VISUAL EYES GODFATHER BIIIIIIIIIIIGS SHIIIIIIIIIIIITS TO: CCCC RRRR AAA ZZZZZ Y Y BBBB OOO Y Y C R R A A Z Y MAL HEXA ------- ------- ---- 00000000 0 0 00000001 1 1 00000010 2 2 00000011 3 3 00000100 4 4 00000101 5 5 00000110 6 6 00000111 7 7 00001000 e est appel{e RAM et la seconde ROM. La ROM est l'endroit de la m{moire qui ne s'efface pas lorsque que l'on {teint l'ordinateur et o| l'on ne peut pas {crire. La RAM s'efface et on peut la modifier. La ROM contient le BASIC et le moniteur, c'e --------------- L'Apple ne sait compter que jusqu'@ 65535, ce qui correspond @ $FFFF en hexa. On dira que $0000 est l'adresse la plus basse et $FFFF la plus haute. C'est simple comme bonjour. Le tableau est divis{ en deux parties. La premi}r ! ! ! ! ! ! ! ! 0000 --------------- --------------- ! TABLEAU 1 ! C000 ! ! ! RAM ! ! ! ! ! ! ! ! ! ROM ! ! ! D000 --------------- ! ! --------------- asic, je vous souhaite bien du courage. Avant de se promener dans le m{moire, voyons de quoi elle a l'air. Voici un tableau qui vous aidera @ vous y reconnaitre FFFF --------------- !nd beaucoup moins de place qu'un programme {crit en langage {volu{. Il permet aussi de communiquer directement avec la machine et de lui faire ex{cuter des choses qu'on croyait impossibles: essayer d'obtenir un curseur en forme d'{toile en Bpil{, mais assez compr{hensible pour l'homme, cette bete qu'on dis sauvage (excusez-moi). Pourquoi programmer en assembleur? Parce qu'un programme assembl{ tr}s vite, beaucoup plus vite que n'importe quel autre langage, et parce qu'en g{n{ral, il pre. --------------------------------- ! L'ASSEMBLEUR: LANGAGE TURBO ! --------------------------------- L'assembleur est une aide @ la programmation en hexad{cimal. C'est le langage le plus proche de la machine qui n'est ni interpr{t{ ni coml peut corresponde @ 100 en d{cimal, @ 4 en binaire ou @ 256 en hexa. Les nombres binaires seront pr{c{d{s du caract}re %. L'assembleur vous parait peut-etre assez difficile @ comprendre, mais vous avouerez que c'est plus clair qu'un listing hexa traduire ceci en EFE4. En effet, en partant de la droite, 0100 est {gal @ 4 en hexa. 1110 correspond @ E 1111, @ F et 1110 @ E. On fera toujours pr{c{der un nombre en hexa de $ pour {viter les confusions. Par exemple, si vous avez le nombre 100, i 18 12 etc..... Il est plus facile de convertir de binaire en hexa que de d{cimal en hexa. Par exemple, si vous avez la suite 11101111 11100100, vous pouvez 13 D 00001110 14 E 00001111 15 F 00010000 16 10 00010001 17 11 00010010 8 8 00001001 9 9 00001010 10 A 00001011 11 B 00001100 12 C 00001101 st @ dire le programme qui conduit la plupart des op{rations. Vous ne vous etes jamais demand{ pourquoi lorsque vous tapez ABC sur votre clavier, la meme chose s'inscrit sur votre {cran? Eh bien la r{ponse est simple: c'est le moniteur qui s'en occupe. Sans lui vous ne pourriez pas faire grand chose et le Basic lui-meme y fait appel. La RAM, comme indiqu{ sur le tableau va de l' adresse $0000 jusqu'@ $BFFF. La ROM va de $D000 @ $FFFF. Qu'est-ce qu'il y a de $C000 @ $CFFF? Ni ROM ni RAM, nous n'en parle------------------------------------------------------------------------------- ! PART2 ASSEMBLEUR MODE D'EMPLOI THE WHITE MAN FROM HACKERFORCE ! ------------------------------------------------------------------------------- La desistible envie de regarder ou de modifier une adresse comprise entre $C000 et $CFFF, je vous laisse le faire, mais @ vos risques et p{rils. vos yeux {bahis que le contenu a effectivement chang{. Donc, voil@ pourquoi nous pourrons {crire des programmes en hexad{cimal sur l'Apple directement sans passer par un assembleur, chose que nous ferons plus tard. Je vous sens pris d'une irr{0L et vous y trouvez le nombre 4C. Pour changer le contenu, {crivez 0000:F4 (F4 est pris comme exemple, vous pouvez y mettre ce que vous voulez). Regardez @ nouveau ce qui se passe en $0000 par la meme op{ration que tout @ l'heure, et vous voyer devant0L comme tout @ l'heure, on s'aper\oit que le contenu n'a pas chang{. Donc la ROM n'est pas modifiable. Maintenant passons @ la RAM. Nous allons essayer de modifier l'adresse $0000. Mais auparavant, voyons voir ce qu'il y a @ cette adresse. Tapez 000de taper l'adresse suivie de deux points puis ce que l'on veut y mettre et voir si le contenu a chang{. Pour cela tapez E000:40 (sans $, car l'Apple ne parle qu'hexa en mode moniteur). Normalement, l'adresse $E000 devrait etre modifi{e. En tapant E00ogramme. Nous avons dit plus haut qu'il n'{tait pas possible de modifier le contenu d'une adresse plac{e en ROM (car si l'on fait r{f{rence au tableau 1, on s'aper\oit que l'adresse $E000 se trouve en ROM). Pour le v{rifier, il suffit ne $, car l' Apple ne parle qu'hexa en mode moniteur. Il n'est donc pas n{cessaire de lui pr{ciser). La premi}re colonne correspond aux adresses. La deuxi}me est le programme en hexad{cimal, la troisi}me est la correspondance en assembleur du pr D0 10 BNE $E036 E026- C9 25 CMP #$25 E028- D0 13 BNE $E03D E02A- A5 14 LDA $14 1e COL. 2e COL. 3e COL. --------------- ! TABLEAU 2 ! --------------- (Notez que nous n'avons pas fait pr{c{der l'adresse du sig TAX E012- 20 B1 00 JSR $00B1 E015- 90 FB BCC $E012 E017- 20 7D E0 JSR $E07D E01A- B0 F6 BCS $E012 E01C- C9 24 CMP #$24 E01E- D0 06 BNE $E026 E020- A9 FF LDA #$FF E022- 85 11 STA $11 E024- . Vous devez voir ceci: *E000L E000- 4C 28 F1 JMP $F128 E003- 4C 3C D4 JMP $D43C E006- 89 20 BIT #$20 E008- B1 00 LDA ($00),Y E00A- 90 05 BCC $E011 E00C- 20 7D E0 JSR $E07D E00F- 90 0B BCC $E01C E011- AAr, ce qui veut dire que nous sommes en communication directe avec la machine et que nous ne lui aprlons qu' en hexad{cimal. Tapez alors E000L (en clair: faire le listing sur 24 lignes de ce qui se trouve en m{moire @ partir de l'adresse $E000 en hexa)en fran\ais, c'est le signe paragraphe) que vous obtenez lorsque vous allumez l'ordinateur. Il vous indique alors que vous etes en Basic et que la machine attend un orde de votre part. Dans notre cas, il nous pr{vient que nous sommes en mode moniteurons pas maintenant, vous le d{couvrirez plus tard. Alors passon aux actes et promenons-nous dans l'Apple pour voir ce qui s'y trouve. Tapez CALL-151 et le prompt se trouve transform{ en * (le prompt, c'est le crochet gauche rni}re fois, nous nous sommes promen{s dans la m{moire. Pour cela, nous avons tap{ CALL-151 suive de , ce qui nous permettait d'entrer dans le moniteur. D{sormais et @ partir de maitenant tout de suite, je ne repr{ciserai plus la fa\on d' transferts de donn{es ou d'op{rations comme l'addition et la soustraction. On y met un nombre compris entre 0 et 255 et on peut alors en faire ce qu'on veut ( sauf de le donner @ sa grand-m}re comme cadeau de Noel). Dans notre cas, l' accumulateur nouSTA est la traduction du code 8D. LDA veut dire en clair et sans d{codeur: LoaD Accumulator ou en fran\ais: charger l'accumulateur avec la valeur suivante. L' accumulateur est un registre avec l'aide duquel s'effectuent pas mal de ramme, tapez 300G et en retapant 300L, vous pourrez appercevoir que l' adresse $300 a effectivement chang{. G{nial, non? -------------------- ! SALADE DU CHEF ! -------------------- Le code A9 en hexa correspond au mn{monique LDA, et RTS Ce programme ne fait rien d'autre que de ranger @ l'adresse $300 le chiffre 01. Pour etre sur de notre r{sultat, nous avons d'abord stock{ en commande directe un 00 @ cette adresse (300:00). Pour faire tourner le proget notez que le signe # correspond au signe di}se au clavier am{ricain). Ce qui suit notre programme ne nous int{resse pas pour le moment, je ne l'indique donc pas ci-dessous. 300- 00 301- A9 01 LDA #$01 303- 8D 00 03 STA $300 306- 60 d{nu{ d'int{ret. A la fin de chaque ligne, ne jamais oublier de taper . *300:00 *301:A9 01 8D 00 03 60 Tapez ensuite 300L et vous devez voir ce qui suit sur votre {cran (si ce n'est pas le cas, vous vous etes plant{ quelque part bailler vous tourmente. Entrons donc dans le moniteur (je pense que vous savez comment). La petite {toile et le curseur clignotant vous indiquent que l'ordinateur attend un ordre: nous allons donc commencer par un programme compl}tement idiotnulcon etelles-memes appel{es "code mn{monique" et la deuxi}me contient les op{randes, c'est @ dire les adresses affect{es par les mn{moniques qui les pr{c}dent. Nous allons vite {crire un petit exemple car je sens qu'une irr{sistible envie dePour etre plus clair, car je sens que vous vous embrouillez, je parlerai de la troisi}me colonne en tant que listing assembleur. Or, ce listing assembleur est lui-meme compos{ de deux colonnes dont la premi}re contient toujours trois lettres, CMP #$24 E01E- D0 06 BNE $E026 E020- A9 FF LDA #$FF E022- 85 11 STA $11 E024- D0 10 BNE $E036 E026- C9 25 CMP #$25 E028- D0 13 BNE $E03D E02A- A5 14 LDA $14 1e COL. 2e COL. 3e COL. 00),Y E00A- 90 05 BCC $E011 E00C- 20 7D E0 JSR $E07D E00F- 90 0B BCC $E01C E011- AA TAX E012- 20 B1 00 JSR $00B1 E015- 90 FB BCC $E012 E017- 20 7D E0 JSR $E07D E01A- B0 F6 BCS $E012 E01C- C9 24 epr{sentation en assembleur des codes hexad{cimaux de la deuxi}me colonne. --------------- ! TABLEAU 1 ! --------------- *E000L E000- 4C 28 F1 JMP $F128 E003- 4C 3C D4 JMP $D43C E006- 89 20 BIT #$20 E008- B1 00 LDA ($y entrer, car je penseque cela ne vous est pas trop difficile @ m{moriser. Nous avons sur le tableau 1 le listing de la m{moire allant de $E000 @ $E02B. Comme je l'ai montr{ la fois pr{c{dente, chers petits amis, la troisi}me colonne est une rs a servi d'interm{diaire pour ranger une valeur @ l'adresse $300. Cette valeur {tait $01, nous aurions tr}s bien pu en prendre une autre. Le dernier mn{monique (RTS) est une instruction de retour de sous- programme. Cette instruction nous servira beaucoup. Sans elle, on ne peut en g{n{ral pas reprendre le controle de la machine, ce qui est assez genant. Nous allons traduire en fran\ais ce que nous venons d'expliquer en suivant pas @ pas le d{roulement du programme. LDA #$01: ChaD ! I ! Z ! C ! --------------------------------- Le bit 1 (appel{ bit z{ro ou bit Z) est celui qui nous int{resse en premier. Ce sera un des plus utilis{s dans nos prochains programmes. Il est mis @ un par le microprocesseur lorsque le r{suldont sept sont utilis{s. Comme vous pouvez le voir sur le tableau 2 ils sont num{rot{s de 0 @ 7 de droite @ gauche. --------------- ! TABLEAU 2 ! --------------- 7 6 5 4 3 2 1 0 --------------------------------- ! N ! V ! - ! B ! dans quel {tat (d'o| le nom) se trouvent divers bits (s'ils sont @ 1 ou @ 0) qui nous donnerons de pr{cieux renseignements sur le d{roulement du progranmme. En effet, ce registre contient 8 bits (comme tous les autres registres d'ailleurs) le mode utilis{. --------------------- ! REGISTRE D'ETAT ! --------------------- En plus des registres que nous venons de d{crire, il existe un quatri}me registre qui n'est pas utilis{ pour ranger des nombres mais pour indiquerivement les valeurs 1, 2 et 3 en $2000, $2001 et $2002 et qu'en $2003 nous avons le nonbre qui se trouve @ l'adresse $21. Les codes hexad{cimaux correspondants aux diff{rents types de modes d'adressages diff{rent bien entendu selon 01 20 STX $2001 30A- A0 03 LDY #$03 30C- 8C 02 20 STY $2002 30F- A5 30 LDA $21 311- 8D 03 20 STA $2003 314- 60 RTS Si vous tapez 200L apr}s l'ex{cution du programme, vous remarquerez qu' il y a effect$2003 la valeur contenue @ l'adresse $21. 300:A9 01 8D 00 20 A9 02 8D 01 20 A9 03 8D 02 20 Le programme en m{moire doit ressembler @ ceci: 300- A9 01 LDA #$01 302- 8D 00 20 STA $2000 305- A2 02 LDX #$02 307- 8E enfoncer dans les profondeurs modales (quelle po{sie!). Voici un deuxi}me programme commen\ant @ l'adresse $300 et utilisant les instructions que nous venons de d{crire, qui range aux adresses $2000 @ $2002 les valeurs 1,2 et 3 et en sont appel{es "mode d'adressage". Dans notre programme nous avions utilise le mode "imm{diat", et dans l'autre exemple le mode "absolu". Il existe d'autres modes d'adressages, mais je pense que vous devez d'abord ingurgiter tout cela avant de vous 30, il me suffit d'{crire LDA $30, sans faire p{c{der le signe $ du signe #. C'est l@ que nous nous apercevons de l'utilit{ de se signe, qui nous permet d' indiquer @ l'ordinateur quel type d'instruction nous d{sirons utiliser. Ces deux fa\ons d'agir avec une valeur quelconque comprise entre 0 et 255 ($FF). Cependant, nous pouvons aussi mettre dans ce registre une valeur contenue dans une adresse sp{cifi{e. Par exemple, si je veux charger le regitre A avec la valeur contenue @ l'adresse numero $t A0 et les instructions de rangement STX et STY. Dans notre programme, nous pouvons donc remplacer les deux primi}res instructions par ces nouvelles venues et nous obtiendrons le meme resultat. Nous avons vu que nous pouvions charger un registre ------------------------ ! PLUS D'INSTRUCTION ! ------------------------ Le mn{monique LDA n'est pas tout seul. Il en existe deux autres qui transporte des donn{es: LDX et LDY. Leurs correspondance en hexa sont respectivement A2 erger le registre accumulateur avec la valeur $01 STA $300: Ranger le contenu de l'accumulateur @ l'adresse $300 RTS: Retour @ l'utilisateur Nous reparlerons plus trad de la signification du signe # qui se trouve juste apr}s l'instruction LDA. tat d'une op{ration n'est pas {gal @ z{ro, et est mis @ z{ro dans le cas contraire. Mais attention, j'entends par r{sultat d'op{ration le fait que: 1: le chiffre r{sultant de l'op{ration soit 0 2: l'op{ration donne un r{sultat vrai. Par exemple, si vous comparez deux chiffres qui sont {gaux, le r{sultat de la comparaison sera vrai, donc le bit 1 sera mis @ z{ro. in de se retrouver @ la bonne adresse. Par exemple, dans notre programme, le branchement devant s'effectuer @ l'adresse $305, le programme doit sauter 01 octet pour atterir o| il faut. L' assembleur calcule automatiquement le nombre d'octets @ sauter l'adresse $305. Vous comprendrez qu'il est plus facile de lire un listing qui admet des {tiquettes comme FAUX que des adresses. A l'adresse $303 se trouve le chiffre 01. Ce chiffre correspond au nombre d'octets que le programme doit sauter aftap{ ceci suivit de 300L, vous devez voir ce listing: 0300- A9 01 LDA #$01 0302- D0 01 BNE $305 0304- 00 BRK 0305- 60 RTS Si vous comparez les deux listings, vous remarquerez que le mot FAUX a {t{ remplac{ pars rendez compte plus loin pourquoi cette aide est vraiment primordiale pour {crire de vrais programmes. Voici le meme exemple {crit directement sans assembleur: entrez dans le moniteur et tapez 300:A9 01 D0 01 00 60 . Apr}s avoir ----------------- Vous remarquerez que dans ce programme je n'utilise pas d'adresses comme dans les programmes pr{c{dents. La raison est simple, ce programme est {crit @ l'aide d'un assembleur qui calcule lui meme les adresses et vous vou. L'instruction ORG n'est pas une instruction du 6502, mais est sp{cifique @ l'assembleur et lui indique que je d{sire commencer mon programme @ l'adresse $300. --------------------------------- ! MAIS OU SONT LES ADRESSES ? ! ---------------- LDA #$01 BNE FAUX BRK FAUX RTS Ce programme est tr}s simple. Nous mettons dans le registre a la valeur 01, le bit Z se positionne donc automatiquement @ 1 et l'instruction BNE effectue le branchement au programme FAUXmme continue son d{roulement normal. BNE FAUX effectue comme vous pouvez le deviner ais{ment un branchement au programme FAUX si le bit Z est @ 1. Voici un petit programme illustrant ce que je viens de vous d{crire ci-dessus. ORG $300 x nouvelles instructions qui tiennent pr{cis{ment compte de ce bit. ------------------- ! BRANCHEZ-VOUS ! ------------------- BEQ VRAI effectue toujours un branchement au programme VRAI si le bit Z est @ z{ro. Sinon, le prograons vu la derni}re fois @ quoi correspondait le registe d'{tat et nous avons expliqu{ la fonction du bit Z. Mais que se bit se mette @ un ou @ z{ro nous fais une belle jambe si on ne peut pas en tirer profit. C'est pour cele que le vais introduire deu------------------------------------------------------------------------------- ! PART3 ASSEMBLEUR MODE D'EMPLOI THE WHITE MAN FROM HACKERFORCE ! ------------------------------------------------------------------------------- Nous avalors qu'en {criture directe il faut le calculer soit meme. Dans nos prochains listing je vous {crirai les programmes en assembleur et vous donnerai l'{quivalent en {criture directe comme le l'ai fait au-dessus en attendant que vous ayez appris @ vous servire d'un assembleur. QUELQUE ASSEMBLEUR: ------------------- MERLIN (anciennement BIG MAC), rapide tr}s simple d'utilisation et admet des macros instructions. LISA est impressionant par sa rapidit{ mais est moins simple d'utilisation quero, donc le bit Z est mis @ un et le branchement s'effectue. Par contre, si vous intervertissez STX et STY afin que STX se trouve juste avant le BNE et vous refassiez torner le programme, vous remarquerez qu'il ne vous rend plus la Z serait mis @ 1, ou retourne @ $300 dans le cas contraire. Si vous faites tourner ce programme, vous remarquerez qu'il vous redonne la main, donc qu'il passe en $311. La raison est simple, le registre Y contient la valeur $D0 qui est diff{rent de z{ $F2 30C- D0 03 BNE $311 30E- 4C 00 03 JMP $300 311- 60 RTS Ce programme n'est pas compliqu{, il remplit les registres A, X, et Y de valeurs, les stocke @ certaines adresses effectue un branchement @ $311 dans le bit A9 00 85 F0 A2 00 A0 D0 86 F1 84 F2 D0 03 4C 00 03 60 . Ce qui donne en m{moire: 300- A9 00 LDA #$00 302- 85 F0 STA $F0 304- A2 FF LDX #$00 306- A0 D0 LDY #$D0 308- 86 F1 STX $F1 30A- 84 F2 STY comprendre la diff{rence entre ces branchements. DEBUT ORG $300 LDA #$00 STA $F0 LDX #$00 LDY #$D0 STX $F1 STY $F2 BNE NONEGAL JMP DEBUT NONEGAL RTS Equivalent en {criture directe: 300: de la valeurs d' un bit du registre d'{tat. Ce saut s'appelle un branchement inconditionnel alors que les autres instructions que nous avons vu pr{c{demment sont des branchements contionnels. Le petit programme qui suit vous permettra de bien mme et en tapant CTRL-E lorsqu'il vous redonne la main. ---------------- ! JMP MOUTON ! ---------------- Une instruction nouvelle: JMP, contraction de JUMP qui comme son nom l' indique ex{cute un saut @ un porgramme, mais sans tenir compte st effectivement {gale @ 0 dans notre cas. Il est aussi possible d'obtenir ces valeurs sans l'intermediaire du BRK mais en tapant CTRL-E . Vous pouvez donc v{rifier que tout se d{roule bien en mettant 01 dans A, en ex{cutant le prograpu distinguer le fait que le branchement se soit bien r{alis{ ou non!". Le charabia affich{ @ la suite du BRK est bien utile: il s'agit en effet des valeurs registres A, X, Y suivit d'autres renseignements. La valeur du registre A ection de BREAK) signifie "interruption du programme en cours". Vous me direz "Mais pourquoi ne pas avoir mis un RTS au lieu d'un BRK puisque le programme {tait de toutes fa\ons fini", je vous r{pondrai alors "Ah petit malin! Mais comment aurions-nous he des choses bizarres. Ne vous inqui{tez pas, il n'est pas plant{, vous n'avez pas besoin d'aller le faire r{parer, il a simplement ex{cut{ l'intruction BRK (hexa 00) car le branchement @ l'adresse $305 ne pouvait se faire. Cette instruction (contra L'ordinateur nous rend donc la main apr}s avoir fait ce qu'on lui a demand{ de faire. Changez la valeur donn{e du registre A en 00 (301:00) et ex{cutez-le programme. Que se passe-t-il cette fois-ci ? L'ordinateur fait bip et vous affic Revenons @ notre programme. Ex{cuter le programme (300G) et que se passe-t-il ? Rien. C'est normal puisque notre branchement s'effectue correctement et que nous arrivons @ l'adresse $305 qui contient un RTS (ReTour de Sous-programme). MERLIN et @ ma connaissance disponible qu'en DOS 3.3. EDASM d'Apple (sous PRODOS) aurait pu etre correct si l'acc}s au disque n'{tait pas si fr{quent. MERLIN PRO en face B de ce disque V2.43 ----------------- ! BRAIKCQUEUE ! ----------------- main mais qu'il tourne sur lui meme (JMP $300) et que le seul fa\on de l'arreter est d'appuyer sur RESET. Voil@ j'esp}re que vous avez bien compris le fonctionnement des instructions de branchement, exercez-vous @ {crire des petits programmes qui tiennent compte de toutes les instructions que nous avons vues mais soyer tout de meme en forme pour la prochaine fois, ne vous ruinez pas la sant{...et allez don faire un tour en face B (il y a MERLIN PRO V2.43). eux services plus tard. LDA $300, qui signifie charger dans A la valeur se trouvant en $300 est un adressage absolu. LDA #$A0 charge dans A la valeur $A0. Cet adressage est appell{ Imm{diat. Les instructions LDA, STA, LDX, STX, LDY et STY utilisckons @ l'adresse 03 le valeur de A. L' adresse 03 se trouve dans la page z{ro. Mais qu'est ce que s'est la page z{ro ? La page z{ro, se sont toutes les adresses allant de $00 @ $FF. Toutes ces adresses n'ont qu'un octet, ce qui nous rendra de nombr et transf{rer le r{sutat obtenu dans X. ----------------------------- ! AH DRESSONS L'ADRESSAGE ! ----------------------------- Nous connaissons l'adressage sur la page z{ro sans le savoir. En effet, lorsque nous {crivons STA $03, nous stogramme avec la valeur de A dans X et Y. Les instructions de transfert sont tr}s utiles. Si nous voulons par exemple additioner #$03 @ une valeur du registre X, ce n'est pas possible, il faut donc transf{rer X dans A, effectuer le calcul sur A, ORG $300 LDA #$A0 STA $02 STA $03 STA $04 BRK 300- A9 A0 LDA #$A0 302- 85 02 STA $02 304- 85 03 STA $03 306- 85 04 STA $04 308- 00 BRK mais nous voulions finir ce pro STY $03 308- 85 04 STA $04 30A- 00 BRK Ce programme permet de prendre dans les registres A, X, et Y la valeur $A0 et de stocker cette valeur dans les adresses $02 @ $04. Il aurait {t{ possible d'{cire: ions de transfert: ORG $300 LDA #$A0 TAX TAY STX $02 STY $03 STA $04 BRK 300- A9 A0 LDA #$A0 302- AA TAX 303- A8 TAY 304- 86 02 STX $02 306- 84 03 s {tendu (le 65C02), il est possible de transf{rer de X @ Y par TXY et vice- versa. Une autre instruction de transfert existe (TXS et TSX) mais celle-ci ne sera {tudi{e que plus tard. Ce Petit programme illustre l'utilisation des instructes valeurs d'un registre @ un autre. Par exemple, TYA transfer la valeur du registre Y dans le registre A. Y contient toujours cette valeur. Il existe TXA, TAY, TYA, et TAY. Sur apple //c (ou nouveau //e) qui contient un micro-processeur 6502 plufois-ci, nous allons d{couvrir les instructions de transfert, les diff{rentes fa\ons d'addresser et le saut @ des sous-programmes. -------------------- ! TRANSFERONS... ! -------------------- Il se peut que nous ayons besion de transf{rer l------------------------------------------------------------------------------- ! PART4 ASSEMBLEUR MODE D'EMPLOI THE WHITE MAN FROM HACKERFORCE ! ------------------------------------------------------------------------------- Cette ent ces adressages. Quand on utilise un assembleur, qu'on {crive LDA #$A0 ou LDA $9FD0, on ne voit pas la diff{rence entre les codes correspondants aux mn{moniques. Par contre, en hexad{cimal, les codes de LDA imm{diat et LDA absolu sont diff{rents. Si le microprocesseur voit par exemple le code A9 (LDA imm{diat), il sait que le code hexa qui suit est la valeur @ charger dans A. Par contre, s'il voit la valeur AD (LDA absolu), il sait que les deux octets qui suivent corresponden, vous voyer ce que le veux faire ? Non ? Eh bien regardez le programmequi suit: ORG $300 COUNT EQU $FDED LDX #$00 BOUCLE LDA CHAINE,X BEQ FIN JSR COUNT INX JMP BOUCLE FIN RTS CHAINE ASC "TWM" ndex{ par X. Ne sautez pas sur vos chaises, ce n'est pas compliqu{ et c'est super. Le processus est simple: si vous {crivez par exemple LDA $2000,X et que X est {gal @ 1, il chargera A avec la valeur contenue dans $2001. Super, non ? Et pour afficher TWM--- Vous me direz {videmment qu'{crire TWM comme \a de carct}re en caract}re, c'est pas g{nial, surtout si on veut {crire de longue phrases. Une solution tr}s simple existe cependant, qui utilise un nouveau mode d'adressage: l'obsolu it en hexad{cimal tapez le programme en assembleur ou en hexa et ex{cutez-le (par 300G sans assembleur) Que voyez-vous apparaitre si vous ne vous etes pas tromp{ ? TWM ! Ca c'est de la pub @ domicile ! ---------------- ! RALAPATATE ! -------------Je vous ai dit plus haut que la lettre A {gale @ $C1. Nous aurions donc pu {crire LDA #$C1 au lieu de LDA #"A", mais puisque l'assembleur nous le traduit, pourquoi s'{nerver @ trouver chaque code de chaque lettre! Ci-dessous vous trouverez l'{quivalenns assign{ @ COUNT la valeur $FDED. Donc @ chaque fois que l'assembleur verra la chaine COUNT, il la transformera en $FDED. Pour la fonction HOME qui efface l'{cran, c'est la meme chose. Le programme se termine par un RTS pour nous redonner la main. DA #$D7 030A- 20 ED FD JSR $FDED 030D- A9 CD LDA #$CD 030F- 20 ED FD JMP $FDED 0312- 60 RTS 0313- 00 BRK Qu'est-ce que c'est que ce JSR COUNT ? On voit au d{but du programme assembleur que nous avo sur l'{cran en haut @ gauche. HOME EQU $FC58 COUT EQU $FDED ORG $300 JSR HOME LDA #"T" JSR COUNT LDA #"W" JSR COUNT LDA #"M" JSR COUNT RST 0300- 20 58 FC JSR $FC58 0303- A9 D4 LDA #$D4 0305- 20 ED FD JSR $FDED 0308- A9 D7 L Revenons @ JSR. Cette instruction va sauter (comme un JUMP) @ un sous-programme, mais contrairement au JUMP, va calculer l'adresse de retour et y aller d}s qu'il va rencontrer un RTS dans ce sous-programme. Alors allons-y, et {crivons TWMformation interchange). En clair: @ chaque caract}re est assign{ une valeur de 0 @ 255. La lettre A a comme code $41. Evidemment, chez Apple on ne fait pas comme les autres, et le code de A est $C1. La raison vous sera expliqu{{ plus tard. ion, nous n'allons pas nous crever @ en inventer une autre. L'appel de cette routine est tr}s facile, il faut mettre dans le regitre A le code ascii de carct}re @ afficher. Le code quoi ? ? ? Le code ascii (am{rican standard code for ins. Pourquoi ne l'{cririons-nous pas nous-meme ? Il serait tout @ fait possible d'{crire une routine d'affichage. Cependant ceci est beaucoup plus compliqu{ qu'il n'y parait. Cette routine {xistant d{j@ et {tant simple d'utilisatouvoir nous amuser et afficher des choses @ l'{cran. L'instruction JSR va nous permettre d'ex{cuter des sous-programmes d{j@ {crits par les gentils programmeurs de chez Apple. Nous allons utiliser l'{ffacement de l'{cran text et l'affichage de caract}ret @ l'adresse o| se trouve la valeur @ charger. L'assembleur transforme de lui-meme en code distincts afin que le microprocesseur ex{cute le programme correctement. ---------------- ! JSR, ENFIN ! ---------------- Enfin nous allons p 300- A2 00 LDX #$00 302- BD 0F 03 LDA $030F,X 305- F0 07 BEQ $030E 307- 20 ED FD JSR $FDED 30A- E8 INX 30B- 4C 02 03 JMP $0302 30E- 60 RTS 30F- D4 ??? 310- D7 ??? 311- CD CMP Ce programme charge dans X la valeur 00, ensuite charge dans A la valeur se trouvant @ l'adresse $030F + X, c'est-@ dire $030F, part l'afficher, ajoute un @ la valeur de X (INX incr{mente un, et DEX d{cr{mente un @ X) et rctions qui me viennent a l'esprit sans ordre de preference ( a part les productions Hackerforce qui sont les meilleures evidement ) . Procurez vous vite tous ces disks qui constituent les tresors de l'apple // . leins de disks sur la communication ) . Realise par Whisky Hdc . * Digitsquettes ( des digits , des digits ... ) . Par TDMC ( la digit de The hunt for red october , c'est lui ... ) . Il y en a d'autres evidement . Je cite ici les noms des produ 3 ( super ... ) . * Beyound picture ( cool ) . Et c'est fait par Diabolik tout ca . * Slide show picture par Mv Gang ( des images ... ) . * Slide show labels ( plusieurs disks d'etiquettes ) . Fait par le Mv Gang evidement . * Hdc Networks ( p * Deplombage mode d'emploi ( Qui ne les a pas tous ?) . * Du Godfather par les oreilles ( tout un programme ) . Dit , papy , J'attend la suite . Signe : Dieu . * Diabolik's serie ( plusieur disks d' animations take one ) . * animate men 1 , 2 et et Dhgr ) . C'est fait par Astraban . * Les docs de lyon ( Toute une serie . Vous ne les avez pas encore ? ) . Le Lyon's Gang a encore frappe ... * Docs a gaz ( Rien que des docs en francais ) . Bien sur realise par Max A Gaz et son equipe . Brain Trust . * Prodoc ( fait par deckard . Vous voyez le resultat en ce moment ) . * La serie des Archives ( Indispensable ... ) . Par un des plus cool groupe : The Warriors Of Destiny . * Speedycopy ( un receuil des meilleurs copieur en Fbootlware 1 et 2 ( un journal , tout simplement ) . * Brain Trust animation show disk ( avec les sources ) . * Hardcore 1 , 2 et 3 ( des disks tres chauds ... ) . * Crackware ( Ԡ.. ) . Et c'est evidement realise par The allez y , ca c'est du delire ... ) . * Sierra Solver ( ) . Le tout realise par Hackerforce , evidement . * Keyboards ( un receuil d'utilitaires par The Jokersoft ) . * Megalo silde show ( comme son nom l'indique ) . * Coo PUUUUUB Sur ce fichier vous trouverez tous les noms des productions digne d'attirer votre illustre attention ( la , je fait du leche-bottes ) . On commence tres fort : * Electronic Body Music 1 , 2 et 3 (res en codes Ascii. ecommence jusqu'@ ce que X soit {gal @ trois auquel cas le programme vous rend la main. On peut remplacer dans certains assembleurs la commande EQU par =. ASC est une commande assembleur qui dit @ l'assembleur que ce qui suit est une chaine de caract} Max Headroom dans ses delire La face cachee de Crackware par Max Headroom Completee par The White Man Fichier dedicace a The Jokersoft En revenant de l'Apple Expo , je me suis rue sur mon apple // pour essayer Crackware . Horreured O liver Twist P atchman T he Jokersoft Vous pouvez soit utiliser ce password , soit le shunter . Pour cela il vous suffit de noter les codes hexa du debut de la demande de password et de faire une recherche sur disk avec Anstrom 2.3 par exemple (salut Per les 6 caracteres que l'on retrouvent dans les comparaisons (juste apres les CMP) . Des que vous avez ces codes , vous allez jetter un oeil dans une table des codes ASCII et vous trouvez CCLOPT . Ce qui correspond a : C aptain Crack C opperfield L oockhe et cela 6 fois de suite . Donc il vous suffit de taper 6 fois toutes le touches de votre clavier pour passer la demande de password . Le password est donc contenu dans ces tests de touche . Vous vous armez d'un papier et d'un crayon et vous allez donc notn $2DFC l'on trouve une tres jolie serie de tests de touche . C'est la demande de password ... Elle fonctionne d'une facon tres simple : elle attend une touche et quand vous tapez la bonne touche elle passe au test suivant qui fait exactement la meme chose , un tres joli plantage vous rend la main . B66A: 4C B66AL B66A- JMP $2DD0 Le menu saute donc apres en $2DD0 , adresse de chargement du brainsmith . 2DD0L En 2DD0 il y a d'abord diverses routines (vectorisation du reset , affichage de la presentation) . E servent tous ces parametres , il y a beaucoup plus simple : B66A: 00 De cette facon , tout se chargera et nous redonnera la main au moment de sauter au programme . Donc : B600G On se retrouve sous le menu . La , on tape 9 pour charger le brainsmith et hoparametres en place ( ne vous inquietez pas pour le JMP $C600 en $B66A ) et entre autre , elle modifie ce fameux JMP $C600 . Ensuite elle saute a la routine de chargement et saute au debut du programme demande ... Je ne me suis pas amuse a comprendre a quoi 10 touches de 1 a 0 mais aussi 2 codes suplementaires ... Pendant le menu , amusez vous a taper soit _ , ou ) ou delete ( he oui , ils ont ose ... ) . Bon , apres cette parenthese , revenons a notre menu . Selon la touche tapee , la routine met certains pdiverses petites routines et en $B61D la fameuse routine d'attente de touche du menu . Comment ca marche ??? D'abord on attend une touche , ensuite on compare la touche avec une table en $BBE0 . J'ai jette un oeil sur cette table : il y a effectivement les tres interressant ... Deuxieme etape du boot tracing : 16F8: A9 00 8D A5 08 4C 01 08 En clair : 16F8- LDA #$00 STA $08A5 JMP $0801 1600G Et quelques secondes apres , le doux bruit d'un plantage vous chatouille les oreilles ... B600LL D'abord J'aime travailler avec une memoire propre ... 1600|qgwy1 0x``@a@@pX=|xg>|fgwxY`gN0N3cNvLa s `cF0LcF6@a 3 `c~0LcF6@a 3 `c0LcF6@a 3 `cNation (je reconnaitrais mon boulot , soyez en sur ) ... Max Headroom dans ses delires 0`2La d Fcl1Ca0 XF0FLa `fc8LGa?0x~0~Lq `fcpo8~a0xFpFL? `fcl0@a0x0 L1 `fcl0@a0 2La ` fcn1ca0 F38Laf0LOysG~py<~<>{8pgcys?