2IMG!nfc@@@ HZH6H4H"H) , 6@ ))pJJJJ F  / LX j j ( I IݭiE < d ! < 0 0ҩ) < X  , |č č č ĩ ,0 ĭ|,, L 8  hhL} ,  ,") ,"`',00LH8  X0H "eeK_ `CMHI^ ^IAMI^O IDxErr $   h"h4h6hzh(LLƈ0H(8 N  / X8 8 L5 &ӠӠŠӠũhx5"(0+C+0k0BЩTRЩT"rTLrGSR4|7' @&PRODOS'n=* =0 SYSTEM-% %START *% DOCS%  $PIC1#bB| |6.JAZZCOMBO.WBNK% R7FACT.TITREa)LSD.SYS160\\ \ FINDER.ROOT { p|7FINDER.DATAT|7FLASHDANCE.SNG&\ \+ LSD.SYS16#<v\) \9 $PIC2*\ \ $PIC3\ \ JUMP.SNG-\ \, SIDESTEP.SNG $\ \, &M1.MCS4\ \ &M2.MCS- \ \ &M3.MCS9 w\ \ &M4.MCSDd&\ \ &M5.MCSY\ \ &M6.MCSj \ \ SS.SYSTEM{ خ R)U R*V R+SILENT.DOCS{,ٮ8R+  !"#$%&'()*+,&'()*+,-./01234567 | yBi }|  y/ 8 y LJ{ #LJ{񃠝| 7| |} y3) LJ{} gw LJ{ sLJ{ {L"y00" {}+8}}&  0}[012ɿ0>&6&081 9}(0)(  LJ{񃠼| 7|" =} LJ{"~ LJ{"0.}.} u u0h|3 7|"]}c}ɶ 3 u 䆅LJ{|3 7| v t}}k:<& tO}Q}"M}t}Y} vd"M}X t 2w} 2w-} }s h|"C}& uuРk"C}_ ȆLJ{O}Q}}` v#s)%s}$s)}O}Q}iO}"M}`΀}Y}"S} Y}}"S} 0s0`0 s)ss 08`03}} 7|}s 7|`}}} {L0x} 6{}} X{L0x 2x  5LJ{}8}}͖} }} xLx x}8}}}"}} 6{} NxH}8}%}} 6{}} X{#}}} x x}}Lw`8`}T}} x`} sx %}} X{'}Ti`} X{8` x }m}}H:ThHmhm}}`}LBy}轰轰轰}莨}}  } Qy/} y%} Dy cLJ{}} {`8`} {` iy 񃬬)T bЭ)T` y )T`}}}}Z X{z6(p } z z( Dz!m}}͜}} (@(LJ{(8`(@`})})}}` 0 )/ ȑȩ/0`}}i(p eΈ}() }( z z֬}(`}(8`0ȱ}) 1`80`0)L}}}ɳ}}|ݵ|1'}}|ݭ|}}||)|1`80`H00h X{`8`i  ` " +CDF)pJJJJ H {h8}{{{B(x  cLJ{ (1+`Hh(80+`  1`80` ȋ {{H ʊ T`HH "`HHH0HHZڢ "z`HHHکH " H h` 0r Zzʈ Zzʈ0` 0  1`08`SYSTEMSTARTP8P16 SYSTEM/START.SYSTEM.SYS16 SYSTEM/LIBSSYSTEM/SYSTEM.SETUPSYSTEM/DESK.ACCSSYSTEM/SYSTEM.SETUP/TOOL.SETUP TOOL.SETUP/ }3s3#No x.SYSTEM or x.SYS16 file found $No SYSTEM directory found $A .SYS16 file was found $No SYSTEM/P8 file found $No SYSTEM/P16 file found $ Error reading volume directory $ Error reading SYSTEM directory $!SYSTEM/P8 not tree storage type $"SYSTEM/P16 not tree storage type $Error reading SYSTEM/P16 file $SYSTEM/P16 file bad $Unable to get user ID $"Unable to reserve memory segment $Unable to set library prefix $"Unable to relocate System Loader $Unable to load setup file $ Unable to load TOOL.SETUP file $Unable to load Desk Accessory $Cannot allocate direct page $Unable to Shutdown Setup File $Cannot Boot from Disk ][ $ ;8[HH4p "z w  HH4+"HHTp "z w 8 R i ii%$ i&(*HH "H;i+kH`ڢHZ 0hHϋϋ0\ hh +zhk\\\0KМtММ0@v)0@0A 0@"ᨪvXoύX00""0 )"0v0K Ӑ qԀ0K\8 (kK)"hММРt""ለ)  Ӑ qԀt)?tМ"a"a;) ;00\ ** 8 kvӰ,00k*b ԩč$%&"_ Ԑ\S\ȍ$%&":э$%&"%̍$%&"0T0)H h8` ӫ1|0k0`,0)v0vિv@0H@"ੳ" Ԑ\8`" Ѣ" `E/ H" "`vિv*`0)ɳɵ \ (8`(` SYSTEM/STARTXK0 0ُ0 "h0jjԩ, &޽ޟL&޽ޟZ((((PPP_'''OOOOwww(rߟL&P   ޢޟޟL  ޢޟޟZ   2222ZZZ_EEEEmmmrߢrߟrߟLYZԜԜԜԬԩԩ,0  ٯ  ɋmɊVɍԜԜ ٬ԩD,0TM,0{,0ԂNԂHԂ8x8[5GA 99hLb \bv"08 Ӎ ѐ0 Pڂj Kۮ:,0:߽:ߟ);ߟ3:;ߟ3:,0ߠߟ̜$j ߟY̜ߟY̜ p۰#0v)@88 Ӎ ѐ}0 P Wݐ H ک,0&"**ߠ̜3333孛j Y̜ Y̜낲0,0  00k0v0`,0B޽, 1۟޽, 1߽۟, 1۟, 1۟, 1۟բ, 1۟, 1۟բ, 1۟, 1۟0 0`,0 I߽Iߟhߢ!hߟʈ8JߟIJߟIh߹hߟ hߟʈ HJJJJ ,0h) ,0` ɺi`0H 0,0 &0h0`ɠ )? ``)?`)`,L,0 &``0k۠@IvЈvȌm ݯ  ɛ8`,jnonӭo,l0l۩Un۩oۮmAʩTl۩n۩*oۮmAʽvH! ,Jh41h4*h,#8 ,:Jh hhK  ɈLɕLLɄLɅL'ɆL:ɒLuɘLuəLzɍLɠEH,jm@@uЙvЈmmAhvЭv@m,jvЀmmۂm:vа@mۂm۬mAIЀvЙuAIumvЂ_,jjۂTjۂmۈvȹwЙv@vЂ/v v vAkۭvm@PmۘA:vЩIvAPmۂv@ w@k ݯvv)v`,([vП4ȹvП4!vПȹvПA h` HJh4`4`H8 Jh``vП,!vПA h` ,`H8h`,k0,j`mAʽvI ` )`)`)?`(Z _(Z纠_堢Ԣ 򠽠(ZJKM_ àZb{{" }x ć{0 {+)@{[Cz x1" }xn{n{&  x^ {[800k{{+8`12ɿ0-&%&081 Ń{(0)(8``{t zLyt z{r zLy yLy{8{{͠{ {{ yLjy y{8{{{"{{t z{ yZ{8{%{{t z{r z5{{{ y *z$p{{Lx T{`8`rvTv{{ *z`{ {y %r{ z'r{T{i{`{{ z8` {z rm{{{H:ThHm{{hm{{`{vLz{v{v{v{莪{{  {"{{ z{{{{ zA`@`8`{{{ T{`Hh z`8`i  ` ȋ zzH ʊ T` +CDFh)JJJ8Bx (1h+`Hh(80h+)`  1`80`HHH0HHZڢ "z`r { SYSTEM/P16LL1LLLtLSL?Ջ0HМѭЪ0 Тv)/v)/ vАF2@ Ԁr0V* "(980#" #H#" #4vНtAvvи ԭ mvA@80)k8 )k0vp)/ڿvp(`H@ h"kK0#" #k0H"k8k05h0"&  ݀ 0))?)QRT0"0<7Эt ݭЬt ֯cHaH "hh9HZ"`K+L֢  ۰ ۰ ڰv "b%"1"H \h"ۍۍ"ۍ" ""t +RנaT"]+vРv)T૩ࢽנT+ 0િ50]"\8  ᬃ-@\ୃ0ѝ8 ,'0k\8 ƅ0)" p3 v+z&yɘx { ̃L 0)")8 K+0L ۰U ڰGY܌[ܢРxTਯ"xH \h "㫩[HYH"4" (b%"1" "g ݟ;00 3گH@"5H Hڰ0૫ vЈ0hHHHHHH "HHHHH@ "aܜc z/z1z z ܐ Lޢ" H+m ܀ ܩ x۰8[i: Hڰ( 0 / 0 ۥ" ܇ x050"0)H0'蚭 ܏0\́@0vિv@0`HHH" `0૫bнbНП0` "hi "hi HH "h:` ڰ( ڰ@ ڰ `HHH0HHZڢ "z`0"`p" p"`K ;[0 g ܛʈܛʈ0+ ;i kHHHکH " acH h` PQUIT error $ SYSTEM/P8 SYSTEM/LIBS/rvv%% ;8[HH4p "z `ݘ n݅ {ݥ HH4+"HHTp "z `ݘ n݅8 R i ii%$ i&(*HH "H;i+kH`ڢHZ 0hHϋϋ0\ hh +zhk @Н"tН"`_Ю ʽ"ЍЎ ` н"t"Ѝt``KhߌH&hF]01߽1ߟ 0LE/L0eeܫk"xkK0\\/ʊ0hߍ"܍hߩEeܫkeHFZhߢ"h܍hk8khLaީ 0 ૫ ݠ ր૫ Ѝ[LCan't run next app $Please insert disk: Accept: M Cancel: Esc0&ɱ &ɴ(kᪿ 0 " BAD OS VER tSYSTEMuHUSTON!% ' '"P8/ }<%  -#P16OKƓ6 !"-SYSTEM.SETUP% -TOOLS% * -FINDER.DATAh -L !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"L! )L! 8'  )ɀ)4,- U JNT) x"Lv"w" ( !` a"M)Fi/ e"3 k".0123456789:;<=>?@ABCDEFGHIJKLMl"m" h" iL X%;"L8"ΠΠҠ`y""""""*$ Fk%YeQP!/RB}QBiBB}\ ĉFEL/#> ț6 . ) ɘ"    L=#=#&ŠϠĠԠŠ ԩ m# m# J Qڨ)̰m] нȱ ̀𩠙 i F > S ɘL   V7 L ' 0% '8 Jm ʈ0  0ŠϠĠ͢Š͠͠ϠŠŠϠĠخ͠ ͍B B(8`%YYZLYLYLY뿭` 8!@8` %MNЩUMߩ  L 5   8 0 8  `0 / X& & +&&7&P^&0`ŠӠֱҭԠŠҬî̠ӠĮʎ1|&… (n}&Dž (\%Tz&Lc()8= (J 8'z&'{& 3((ʎ1|&|&|&3223 ')L&18|&"m11 2H22h2舌|&|&12H)M0 h10200I20h2 (`LE%12 `_'"L  <8# ȱ)ɀ  )( ` (Xp< @( )m((.(( M(i  ``) |'(j21 z& {&!` ({&z&(i({&(( CBDFGE (r&$ 3(,}&r& … 3(ŅL&JJJJ`Ϡ'8`r&h)hrȱȱȱȱ0]cȱeem*ȱ*ȱ**ȱ**ȱ* )* * )L(`L?* *Ll) ) L( )Ll)8e` ,$`ee` `* G** c*` v* G* c*`hh8`8`***`}*`e`H)hJJ*0JJ)` (< ( < *? ( < (? ( < (? ( <*? * **? *? *? ( < *? ( <.<ʆ>,=?BC8 é&'112`HB-9F 3"aɿ LLB Nϰ H  @h( L Lj  @`eLJCAB@=?<>=?<>CAB@?A` 1 L  <>`ڢF]PL8i m L   6< L  BLRAM' hLDLآ <B*IBGF08Lé'+8H <,``h(`@ڍL3hh@ihAiH(ؠȱ@JJJJq@)@Yvȱ@Hȱ@Ah@y@cYe J) LL LJiB LJ) >xhHHHHL(  ްƠx@BEOD  ް(`( C)CJJJlB O-`J,~@~@}J@` ߩ%S @ ~`E hhhߺ0 h ߐ( ߐ ߐ ߐ  0 HϭߍLпllllhh8` Qx")T'P) ɺiL; )?     ~ `l@Hȱ@IױHXATȱH ɯȩ׍̒5H)/@a)_ .0 :A[8@`,뎒׮Б` L` @>S)I38Mdeם`K8`@Nȱ@O@ rIiNȽבN)/ȩ/N`@[ WHJjjjhA ,'KI؍0JHi 뎅`C8` @ r3N@) G莱 ⭮i`0 Y; 뮅ٝ٘ 0 W,0 .H hȑNWȮّNW8`ٍّNά0NN` G8`F@ 0 > LK8`: ;I8`FHGH hGhF܌ բFܽܕF芝ܝ 밶:; <܅I m=IHHyHȘI Lܝ` @c@ k@Ю׍S)mיSʈ@qȱ@cȱ@mopfNxOyS)5SI0ܢܽ iP'E* 7deFG (GH Lv܅IR mEIH` tq qM0PQ ESHNFOG 밳NO 밨G%܈D" T)Ii)܍R*܍E'ܮ( 4 䭐 $H %HFFHGHG 됬`R8`)` EHS` #Q'܅IHHSSЍS@`8 ` ͍% ΍Q8`܅I `P܍QR d8D`F` ]lH)HFȍNHGO $%܍&܍!ܢ8* J8` L ܝ>)I 'ܝ:`F8iRFPGQ`F܅IH3H ( )ȱHά`Ύ8EeHI |SB:0M ٙKٙIFNGʈ d献`8m0`,0H hi PȽάhٍ0GF8yאFG  $0 G01 E8`1ݾ00 Y 0ʩ 谼 谷`12)1`0`Ȏi 0U`)8`ά` W xG 0A)H ܝʈh٭0٭)ܝ٭*ܝ٥F٥G٭'ܝ٭(ܝ`)َ 8ʈ` 0ٝ)i `8`R ꍐz{ vNمFمG < ΐ0 FGL鮅0 ٭{٭zٽ8`H8`  ,z { 8` z{ `ٽJJJJ`H͐hn)NjNjNjN. CH͐ v;٭ *Nۙ۰ڙک `Z8` C# (`{ .{ .{ .{8۰*Jz۩ ٰz{`JJJJ;i v묅͚ vٍ0  `H8` `ٍyٍiB0H0FG h0`FG `ϩBxED0C ް(`(8`ؑ@`M8`8@ؐʈI묆)z8zz Ly LةC8`؍)@ i)z8zyJ ^ ؅F Lo) +%J(a *FإGؐ.` *JHIH IL/FHGI ҭJjHIHB>IؙJJ W: ELyHIHI`JKJK`FHIG ( Ȣ؝؈JL)eKM`)` J zJ͟ $0 ΎJFJL8`JGBJ P FإG`BH PFإG`,H hHB؅F  ؅GxDE؍00C ް(`(8` vL'J  6"L vH  6 9ؙ` @ P8`K8`B8` L؈SJJJJحq) ) )Ю ЪGdF $ ᭔ع+ؠ 2H  :h8` 䮅ٽ ٬ؠ@` ( L )8`)i п` H h)N$% LL L r L 2 "pJ덣 )@፦NJOK 2iKK΢΢ IJΣ JФ̭JjHFIH HIGxKE ް((H hH h8`8@ȭ@L2쬆8NNO 8 ؍JL`R΢ʱLN1MOMEKP/MEK΢L7L-M O,p莡eNNO(`JNKOL 2/ "P L8 y WؑJ`L@ȱ@ `@Nȱ@O`؝}zIzؐ` f~ؽ؝z f % f؝~z؈` ` H  Ph)N@ 1; L  2$ )bJ Y ) H 4hL )  )حJjI{HIzH؊ PLE΢ʱNLMOMEKP%MEK΢L$ O, PeNNO 2(` C  7 2JzHI{HI؊ }LE  *` A Hz ع H{ ؙ؊ؠIhHIhH } iع `  عiعi` )؍0CGHFHBFG ުhFhG`@4͔ L @Ai ׭2` . :#ع؍0 Y讅)`.@+ i 8` L )߹0 )p )@ ) ȩ ؝L0NO 방 PQNOFG 嬆؍f؍g؝h ؝c zS) zS )حM͚ v`H@h`h``N8`  ) 1⬆Ȣ؝~@~ݞ@ʈL2 KIJHȢݞ)Jn 8 θ ؍ ؍ DH8 ع)ꭵJJJJ Ȣ؝I؈ 2h(8H ( h(8Hh(`ؑ@`@ȱ@ ` B@8ZS d鮅ٍٍٍsHٍr8fhgSJJJJS)S@` %I -q) 0@S)N8` @LL =@ ȹP8` i` %ם0 B %)( ȹ`8m8m@8` G8`F Pq)@N8`S)@J טyרםSS)׍Sde 밑 LȹL@ȅH@IL,0` G וֹ= YH.q)N 0 >deS)@LP8` D᮴ ֩SGHG v L䬅yٙ٭yٙ٩`K CEdFeG 6%&N    ܮ `J HH hh` 0 @ L/L Z`̸Yܝ ݝ0̸ȩFG   0` ܅F݅G ` c Zͬ 밽܅F݅G ` c* Z% L`L뮴HH hFhG܍ݍ 8 `FHGH  hGhF`ݹܙ݊`@Bɼ>K@J5 c9X(K cXXK تKo`V8`no` , on cI9XX`)HJJJh`OeNeO࿰ c9XАO`@ȭ@` ON INJKO`HхhꭋILhH),Nx8 (8` ԍ`@ABe 2U,,CnZ1IJK,-NOPQRSuHUSTON!' @   !"#$Ԡ͠ˠĠԠҠ(c)1983-1987 AppleLKL`BLL ެެެެެެެެެެެެެެެ(C)APPLE'83xLLM Mh@8nЍLޭ 0J @,,LNP׽8H  ): e: y8鰕:Jjjj<)yאi8i;i(*=>hPם8`;Zx3QZYXXWV[HEVhEhH)IWHPHHHAHHHLaVEWLӿ ֽ ְ& .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Ӧ>` Ր+>*L o % ԽYӍZӭoӝY 3Ѡ шNZ`rZLkӭZӍq8r7IZӐiZkӐk 8 ѹs ӭq ѹ| kн Z)*>>` @ $(,048<@DHLPTX\`dh 0ުlptx| 0($ p,&"op8`kkV꽌ɪɖxlӽ*kӽ-kәmMlӈ 꽌ɪ`8` ZԍsԍԍԍԥDEԌ8TԌ8WpԌqԠ 7I꽌ɪ꽌ɭ蠪:љVE:8`]ѾV]H)]ѾV]ҙ)]ѾT]ҙ)] >8hUD` ԝY`> Hh݌(`HCJJJJ)*h`8LխӅ:HhHh Ո թ թ ՘VYҪҦ>:Y)Ң`;R?AJ;<ȰY)Ң`Y?)Ң`ȐҰ ;HhHh=Ң`Hh `Hh`DEiȍ0֌18V%֌&8V֌֠)HV)hH)hHIhդD?DRIDQD)҅; ?JDQD]ՎՎՎ`MY pӭY)p  ӭp`C)`BFGV 8``  / XʩXύX X %   % ɍRH hɛɘɉɈ $ Ld :Ldې)ɮ۰ɺ' Ld  : X ( % ɛ$ɘɉ ɈL :Lɍ)ې)ɮ۰ɺH h 'L  ġLL ̹L)'L ȳL O'F ʻ ̹(((L $ʩ $$ $L `ީ % K@D EFby LҠؠӠ΢ϠԩҠŠƠԠԠŠӢɯϠҠůȠԠĠ  0h)ύh0HHHH " ׍hhhhhhh .hh8`JIMJAYKERRY&MIKE|\&\@b@Av  }< \$\hH Whh@x00ex00H!j)Z"dz ኏hH0H(0h \c ((8k )  0) x0h0) )!c )H"hh((k    ;i`8 Z8 P8 F8 <8 #28 5(8 98 <8 NPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~B 8 F(k8 N8 V8 X8 Z8 _8 d8 i8 @n8 Ar8 t8 z8 \\\\ \\\0 J[*V )/Aa{7)߀A[+0 :!.ZȻz:(k(8k88KhH hh(k hh뫂rl_"00Lz 0[Z! ;id0; : ȷȷ(3#: H `8`00hhhhz+0)\``0ȷ0ȷȷ$ȷȷȷȷ ȷȷS20 ȷ "a0 "# 0) "a`0 "- 0ȷȷȷHHt00"OHH "O0t/tO t /ttʎtu ʎ L[@0 оtʽt/ ꈹ //:: t ʈ0"0B  @4 ꪽ /  `)ߙ Ȁ똍t骽t/t鰵t`)ߙdtȀ똍dt@$ @tt\ ꟝t Aʽt/ڠt\\0\:0 "_zzZAȹt\t\zAȹ ꟝  00"#\{ 0$08H"Kh" P8"K\$% *Cu0Fxv0 " R0v "K0 " 诋P0F`x00u " 谦0d) )dȿd ̔b0i'ꀾ0) ")ȿ̔鎖0i'ꀸ0 b)H)hb) 0ibi bHڮh0b0|~0u{ " 00|`~0 "  "- |0i hx~y0 " <'識  " 0)G 詝"-0\ | t`t t  /8`0ȷ$ȷȷȷȷȷȷS0ȷȷ!"a0 "A "a0 "Ki&ȩȯ'Ȋȯ(ȯ)Ȋȗȯ*Ȋ01ȯ3ȯ-ȯ/ȯ+ȩ0)`8`"0%81% )/0HH"\"0 "K60 8(+ ȩȩ0`0 0)8` 訹26"U`S8`ȷȷ d 0)*[:ȌMլL՗ȌLժ M/ÈȢ / 0@0  +;i8kK C JSk: "Ȣ"֘i" Ơȷ֮ k֭3: װ8֐LMةa װΪmְLM װޭ: ȩ֝֝֝֍֍k€` i Z"z" ֝ ڰ<%a80֩֩֩" ֽ֮`)`0֍ֽͬ֐U֪֪* ڿ)ֽ:Hֻhͬbѯag ڐ_֪% ڿ)ֽHֻhͬ֯a ڐ,k֪֝ ֗֩0.)ȿȿ()ȿ! # ڠ& ڮֿ  ڠ ڠȷNIֿ)ه:(:"::0ȀשkO8kٍ0ٜ٭):0)JJJJJ0:٭J٭)?٭)٭ٮ Xڍ0`ZJJ٘)m}{cz8`    ٗ`x֝0֏u"0`8'`i'`K0(kZ i"zϔשրE1& 0s%k: 012)0` 81k0Yk0ȩk0LG: 1 ;Hȷ.Dh0  H1hHh 0kkL !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"L! )L! 8'  )ɀ)4,- U JNT) x"Lv"w" ( !` a"M)Fi/ e"3 k"l"m" h" iL X%;"L8"ΠΠҠ`y""""""*$ Fk%YeQP!/RB}QBiBB}\ ĉFEL/#> ț6 . ) ɘ"    L=#=#&ŠϠĠԠŠ ԩ m# m# J Qڨ)̰m] нȱ ̀𩠙 i F > S ɘL   V7 L ' 0% '8 Jm ʈ0  0ŠϠĠ͢Š͠͠ϠŠŠϠĠخ͠ ͍B B(8`%YYZLYLYLY뿭` 8!@8` %MNЩUMߩ  L 5   8 0 8  `0 / ة)2 & +&&7&P^&0`ŠӠֱҭԠŠҬî̠ӠĮʎ1|&… (n}&Dž (\%Tz&Lc()8= (J 8'z&'{& 3((ʎ1|&|&|&3223 ')L&18|&"m11 2H22h2舌|&|&12H)M0 h10200I20h2 (`LE%12 `_'"L  <8# ȱ)ɀ  )( ` (Xp< @( )m((.(( M(i  ``) |'(j21 z& {&!` ({&z&(i({&(( CBDFGE (r&$ 3(,}&r& … 3(ŅL&JJJJ`Ϡ'8`r&h)hrȱȱȱȱ0]cȱeem*ȱ*ȱ**ȱ**ȱ* )* * )L(`L?* *Ll) ) L( )Ll)8e` ,$`ee` `* G** c*` v* G* c*`hh8`8`***`}*`e`H)hJJ*0JJ)` (< ( < *? ( < (? ( < (? ( <*? * **? *? *? ( < *? ( <.<ʆ>,=?BC8 é&'112`HB-9F 3"aɿ LLB Nϰ H  @h( L Lj  @`eLJCAB@=?<>=?<>CAB@?A` 1 L  <>`ڢF]PL8i m L   6< L  BLRAM' hLDLآ <B*IBGF08Lé'+8H <,``h(`@ڍL3hh@ihAiH(ؠȱ@JJJJq@)@Yvȱ@Hȱ@Ah@y@cYe J) LL LJiB LJ) >xhHHHHL(  ްƠx@BEOD  ް(`( C)CJJJlB O-`J,~@~@}J@` ߩ%S @ ~`E hhhߺ0 h ߐ( ߐ ߐ ߐ  0 HϭߍLпllllhh8` Qx")T'P) ɺiL; )?     ~ `l@Hȱ@IױHXATȱH ɯȩ׍̒5H)/@a)_ .0 :A[8@`,뎒׮Б` L` @>S)I38Mdeם`K8`@Nȱ@O@ rIiNȽבN)/ȩ/N`@[ WHJjjjhA ,'KI؍0JHi 뎅`C8` @ r3N@) G莱 ⭮i`0 Y; 뮅ٝ٘ 0 W,0 .H hȑNWȮّNW8`ٍّNά0NN` G8`F@ 0 > LK8`: ;I8`FHGH hGhF܌ բFܽܕF芝ܝ 밶:; <܅I m=IHHyHȘI Lܝ` @c@ k@Ю׍S)mיSʈ@qȱ@cȱ@mopfNxOyS)5SI0ܢܽ iP'E* 7deFG (GH Lv܅IR mEIH` tq qM0PQ ESHNFOG 밳NO 밨G%܈D" T)Ii)܍R*܍E'ܮ( 4 䭐 $H %HFFHGHG 됬`R8`)` EHS` #Q'܅IHHSSЍS@`8 ` ͍% ΍Q8`܅I `P܍QR d8D`F` ]lH)HFȍNHGO $%܍&܍!ܢ8* J8` L ܝ>)I 'ܝ:`F8iRFPGQ`F܅IH3H ( )ȱHά`Ύ8EeHI |SB:0M ٙKٙIFNGʈ d献`8m0`,0H hi PȽάhٍ0GF8yאFG  $0 G01 E8`1ݾ00 Y 0ʩ 谼 谷`12)1`0`Ȏi 0U`)8`ά` W xG 0A)H ܝʈh٭0٭)ܝ٭*ܝ٥F٥G٭'ܝ٭(ܝ`)َ 8ʈ` 0ٝ)i `8`R ꍐz{ vNمFمG < ΐ0 FGL鮅0 ٭{٭zٽ8`H8`  ,z { 8` z{ `ٽJJJJ`H͐hn)NjNjNjN. CH͐ v;٭ *Nۙ۰ڙک `Z8` C# (`{ .{ .{ .{8۰*Jz۩ ٰz{`JJJJ;i v묅͚ vٍ0  `H8` `ٍyٍiB0H0FG h0`FG `ϩBxED0C ް(`(8`ؑ@`M8`8@ؐʈI묆)z8zz Ly LةC8`؍)@ i)z8zyJ ^ ؅F Lo) +%J(a *FإGؐ.` *JHIH IL/FHGI ҭJjHIHB>IؙJJ W: ELyHIHI`JKJK`FHIG ( Ȣ؝؈JL)eKM`)` J zJ͟ $0 ΎJFJL8`JGBJ P FإG`BH PFإG`,H hHB؅F  ؅GxDE؍00C ް(`(8` vL'J  6"L vH  6 9ؙ` @ P8`K8`B8` L؈SJJJJحq) ) )Ю ЪGdF $ ᭔ع+ؠ 2H  :h8` 䮅ٽ ٬ؠ@` ( L )8`)i п` H h)N$% LL L r L 2 "pJ덣 )@፦NJOK 2iKK΢΢ IJΣ JФ̭JjHFIH HIGxKE ް((H hH h8`8@ȭ@L2쬆8NNO 8 ؍JL`R΢ʱLN1MOMEKP/MEK΢L7L-M O,p莡eNNO(`JNKOL 2/ "P L8 y WؑJ`L@ȱ@ `@Nȱ@O`؝}zIzؐ` f~ؽ؝z f % f؝~z؈` ` H  Ph)N@ 1; L  2$ )bJ Y ) H 4hL )  )حJjI{HIzH؊ PLE΢ʱNLMOMEKP%MEK΢L$ O, PeNNO 2(` C  7 2JzHI{HI؊ }LE  *` A Hz ع H{ ؙ؊ؠIhHIhH } iع `  عiعi` )؍0CGHFHBFG ުhFhG`@4͔ L @Ai ׭2` . :#ع؍0 Y讅)`.@+ i 8` L )߹0 )p )@ ) ȩ ؝L0NO 방 PQNOFG 嬆؍f؍g؝h ؝c zS) zS )حM͚ v`H@h`h``N8`  ) 1⬆Ȣ؝~@~ݞ@ʈL2 KIJHȢݞ)Jn 8 θ ؍ ؍ DH8 ع)ꭵJJJJ Ȣ؝I؈ 2h(8H ( h(8Hh(`ؑ@`@ȱ@ ` B@8ZS d鮅ٍٍٍsHٍr8fhgSJJJJS)S@` %I -q) 0@S)N8` @LL =@ ȹP8` i` %ם0 B %)( ȹ`8m8m@8` G8`F Pq)@N8`S)@J טyרםSS)׍Sde 밑 LȹL@ȅH@IL,0` G וֹ= YH.q)N 0 >deS)@LP8` D᮴ ֩SGHG v L䬅yٙ٭yٙ٩`K CEdFeG 6%&N    ܮ `J HH hh` 0 @ L/L Z`̸Yܝ ݝ0̸ȩFG   0` ܅F݅G ` c Zͬ 밽܅F݅G ` c* Z% L`L뮴HH hFhG܍ݍ 8 `FHGH  hGhF`ݹܙ݊`@Bɼ>K@J5 c9X(K cXXK تKo`V8`no` , on cI9XX`)HJJJh`OeNeO࿰ c9XАO`@ȭ@` ON INJKO`HхhꭋILhH),Nx8 (8` ԍ`@ABe 2U,,CnZ1IJK,-NOPQRSuHUSTON!' @   !"#$Ԡ͠ˠĠԠҠ(c)1983-1987 AppleLKL`BLL ެެެެެެެެެެެެެެެ(C)APPLE'83xLLM Mh@8nЍLޭ 0J @,,LNP׽8H  ): e: y8鰕:Jjjj<)yאi8i;i(*=>hPם8`;Zx3QZYXXWV[HEVhEhH)IWHPHHHAHHHLaVEWLӿ ֽ ְ& .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Ӧ>` Ր+>*L o % ԽYӍZӭoӝY 3Ѡ шNZ`rZLkӭZӍq8r7IZӐiZkӐk 8 ѹs ӭq ѹ| kн Z)*>>` @ $(,048<@DHLPTX\`dh 0ުlptx| 0($ p,&"op8`kkV꽌ɪɖxlӽ*kӽ-kәmMlӈ 꽌ɪ`8` ZԍsԍԍԍԥDEԌ8TԌ8WpԌqԠ 7I꽌ɪ꽌ɭ蠪:љVE:8`]ѾV]H)]ѾV]ҙ)]ѾT]ҙ)] >8hUD` ԝY`> Hh݌(`HCJJJJ)*h`8LխӅ:HhHh Ո թ թ ՘VYҪҦ>:Y)Ң`;R?AJ;<ȰY)Ң`Y?)Ң`ȐҰ ;HhHh=Ң`Hh `Hh`DEiȍ0֌18V%֌&8V֌֠)HV)hH)hHIhդD?DRIDQD)҅; ?JDQD]ՎՎՎ`MY pӭY)p  ӭp`C)`BFGV 8``  / XʩXύX X %   % ɍRH hɛɘɉɈ $ Ld :Ldې)ɮ۰ɺ' Ld  : X ( % ɛ$ɘɉ ɈL :Lɍ)ې)ɮ۰ɺH h 'L  ġLL ̹L)'L ȳL O'F ʻ ̹(((L $ʩ $$ $L `ީ % K@D EFby LҠؠӠ΢ϠԩҠŠƠԠԠŠӢɯϠҠůȠԠĠ  0h)ύh0HHHH " ׍hhhhhhh .hh8`JIMJAYKERRY&MIKEK, H`i9iiailiif|tuѥҴ^riiک@%H$k0;88[ LHJHHH"zNP Щz">8>;i>%H$ k0;88[ CѥLLHJHHHJHH " Cѩz">8>;i>%H$ k0;88[ sdXPVNHLH" s0" s0HUʷH~0jZLN" sҥVHHH" XK.iXVHXHHHHH" sp""VHXHZH"zRT sҩz">8B;iB%H$ k0;88[ JHHH"hh ӠL LH"hh   ӥХʽH8JNP NPKLHNHPH " өKz">8<;i<%H$ k0;88[ ,PHNHLH"z K ,Ԋ"iiHHJHHH "z">8B;iB%H$ k0;88[ ԥHJ" HH" ԽLz"KHp"h>8<;i<%H$ k0;88[ >եJHHH" >ՊiLh)Nz"K>8<;i<%H$ k0;88[ 4֥JLHUH "LH"HLH!"LH "LH"LH"5H "LH#"LH"LH%"z">8<;i<%H$ k0;88[ ">dRdTdVdXN)) ڢ " ׎PLHJH" dd眲d4d6 ""e ׭\R)Jd$d&H" :\) `b"\! `VPXRT `RbT"JL" ׭HHHVHXHHH" p"6"9z ץ"ZڦH"z Zڀةz"H"p"H"hh>8@;i@%H$ k. "k: Hy؃H[k+k0;88[ ">dLdNH) ڋHH"JPR ڥH " dd4d6 HH"hh46x6465ڽ H H" HK")  "$&LN$L&NKaK46 HH"hh@ڋ HHHHH "ZHK"zhh:hh  ڀ)ڽ ""\ڽ H H " H H$"KWKHH"RKHH" "HHHHHHڦڦH "JzLNPR p" کKz">8:;i:%H$ k0;88[ ۥB8 D)HHHHH"zz ۠ee \ C:B>>;i8%H$ kz"H" H H H"hh KBHH ""FHH" Y HH" H H H"zz Y܊ Hhz";ik H H" ݽ6ڋ ZHKHH"zhhhh K " ݥHHHH" ݣ:" " ݣ \j  "$&46dd" ݭ`bHh%"9z ݢ" ݩz"Hp"p""h  ;i k946 H H"H"hh K 8"$&W  8߭j"  8ߠ h) 8߭V) 8߭ZX 8߭fd 8߭H JP R$&.&Hb$H`"hz ""E " 8߭`$b& HHH H"H\H " 8ߥ4646" 8߭)K|M  8ߩKz"kg?i" 8ߥ&H$HHH" 8߭m<<筐m>>.\) HH&H$H" 8߀ HH&H$H " 8߭e$$e&&" 84筎e$$e&& +$m&m$m&m0r +⭐e$e&e$e&6H + j$m&mmm2 +46 H H)H"hh  8߽ "Ke$e&ee8炰 +✚Ύΐ" 8Ύΐ00)" 8Ύΐ筚e$e&)筒)&  8H@8 8 :玜 j⭘ee筘e$e& 0001m獚筎  \) `$b&"h" ``h46 H HH"hh  ` "K`00%0 i JF 0Z͎zz0 8 ͪ*筲" " H," r8,i,F  t" ""LMz"kcͪ H"4hA8H"4  c i 8h" Фz"  ;ik Imi@ 000HHHHH"m獨km,m.̪"k(k"k筲" +H" +"獰筲獲z"kd"0 0me0e28 ͪ" " ii "z";ikHk"H8hk) σσ H)\ ϋϋ (k掼 hH "E) ϋϋ H)H(k hh k\ "H\`\H Ѓk]KEҪMӃ,,)gFz4i:Wߒ )iHp "z  'ъ""   HHiiHH)iH" HH"z";ik  d K ѥ " =  4 E ih)    z"   ;ik"ii)H"HHHHڢ"z"k "  8 "K  H H HH" K  ;ikHHv"M "A"i2&  "   iɣ"Hhhh  ;iKk "HHHHKAK""HH"hhhhK   ;ik` b XZ dX dd  \稉   @ ) \) k hHHHHii"HH" ԣ )iei p"z"   ;iki i9 HZ  zhiiL<p "z ֥"" H hHH"HH"" ֩z"   ;ikp "z ֥"    KHH"z" ;i kRHPHH"HbH`H \z h nҰNH 2ѥh Kfg Ѥg ѥhfh n` eȊ8je`h8`e`t ҈e`8t  `g)tg)fhjg`a) ag`eDdF0dBmC Ұ0g`"`0ceDooF0mCB Ґ(8`0c(`eDdF0mCB 0`"`H $P h`H $P h`K0 ׫0`8L2C)pJJJJ IH(ȱH:=IH[H`@HcH  $ +   I/H`JLNGȄBȄF aK  haaFF  mJm# KKJ UJ )J ۈ) ;J3ȱJFȱJGJKaȄM  aaNNJFLGJL L? &PRODOS `DaElH$?EGvѶK+`L HHLy XP LM ŠϠĠӠS)*+,+`F)) (*=GJFjJJA QE'+ '== `@ STSP8QSS8 m P o R(8RLnSOS BOOT 1.1 SOS.KERNEL SOS KRNLI/O ERRORFILE 'SOS.KERNEL' NOT FOUND%INVALID KERNEL FILE: xةw,@  ȱlmi8#)!) >dLԡm#i㰼m#iЕOLԡȱfg hi !dLԡ憦  Ljmkm l y`2 Lԡ8(Je稽)ʈ@LPROx :(`+L!'L!i08` DۍVۊJJJJV ND`)pCۊC**LS׽ׅZPD۩ #ץZ OLdש^^SP@iTQQC #׮C۽L xڐT?۰LؤT?۰L@ېLX OxBۍEELخC uذXC ذQQ#HC۽ #h` \I꽌ɪVɭUɖ0UUɖ!Uɖ 꽌ɪi8` ػ`\\繌까ɪɖ[*]%]WE[ЪС까ɪЗ`WۍVD\XۭDۍY8V7IDېiDXېX 8 5ٹ` OڭY 8ٹl OXн OD)* W۪W` .۽݌HhHh و ٩ ٩ ٠V .꩖݌$ .۩݌ ٩ ٩ ٩ ٩ ٽ`Hh݌`80^݌Hh 3 3ڝ݌ Eک Eک EڥS 4ڥQ 4ڥR 4ڥSEQERHJPh Dک Eک Eک E`HJP݌h Hh݌`YZ8`0($ p,&"AۅVRLڤTC ِL.ۮC FRRRBۍEۙFۈT8 . .HhC uذ5  ,@ MAIN 50hH h8"hh0H"h)" " k,0" ,@ MOREMAIN 3 "". H"h)Lᯂᯄᯆ"< "J "X HH"hh"f "t " k"h\  !Jgwp 30"0L/L/L/ L/ HHH;["dK xii  iiکzzzL HH"hhHH"hh``HUP DH "&hhhhh x . #hzhhHZڢ " /`8` DHڢ " hzhh` ")) )8`) )hh`HH &"d 0  h`*/system/tools/tool  h`H " 8hh`hH "h DH@"`H."Cannot Unload Tool: $) @` ;["dK x L "d L) HH;[K"d"hChEK"K+) J1 1$GI=iA;iA?;C wC L"IHGH "hh-/""";U" ,";S"CS";"#"  !K""HH" hhL EHCH"K"`K)` 33 '`aDaaHH3 "h`="c  [  `c[uk ws H"h.= "k sπ֭sϩs ĭs u8``H=HO"h` 6^"""u E` 6_" 6]"""u E`k `3HHH"s8Jme5:"HH"`HH H"s8Jm]5:"H H"`5 `uck w  u8`u[:"HH":"HH"c '[uk wLK+;S+KS;A+8+8 ` ;[KHH"6H8H"d " " " "D " " H0'$0> " h:0${0 " J HH"  J HH"  J H H" )H&h J H H" ( 3500) ϩ "h8h6"᫠L 020`0  " ` "k "k Z_ 0$%0HHHHHHH"$"hhhh`HH ;[૫HH  "h h  0h)04    0)))QRT20HHH " hhhHH "hhȗHHH "hhhHH "hh" +hhL    kHH ;[૫  0  ) ))QPSRUTWV   h0 4 0HHH "HH "HHH "HH "x r " ( "᪫+hhL    kz (xHHxHHxHHxHH0Z`z (hhxhhxhhxhhx0Z`"h+Z;c;ڪ;cik"hǢ ;8 [: ` [;ikf HHHH "0 + 5 Jhhȥ "` ^7HH"z& Z" *"` ^1  "`dd HH "h` 5ȷ J8` !Jgwp  3{".KCEY;};C;KK63E===c8kK+; S+KS!;D  >      3Sv~ %V^fov3;H\f" "')+-/19HRUZ]dlrux~03;a%(+.1 &)H J0)8h`h`HZ  h !!`'E3RbS!$*6 B%)' ,@ ROM1A # "kk$%%bD'|e/Li1^y2'J4B[$;U W' 8妅8娅"\ W' "\ W' "\ W' "\ W'"@  "\48 'hdԢ8妕8娕 P\*Hȷ*k`@P:"kd8:` "k: |^v W'   "\4 W'   "\4 W'   "\4 W'   "\4 W'"@    "\8 'hdԩ@\ *Hȷ*k W'   "\4 W'   "\4 W'   "\4 W'   "\4 W'"@ԣ ң  "\8 '8妕8娕 `\*Hȷ*k * ,ڻ*ʈ`  ` ԣ `d,0&,.I.00I08.0d** 00.0,8**k*8ɴi0*d,[0 ,8I* ,IIkZ* ?`d*-0@0 )* ` 9xk fo#($-1j6;?DhIDN.S&X-]Ebnglq`w|p͓ҙ@AN֊ށ7 Q&1"[y[zVE|hTb%٫QP$nLע0J  8  8 d* ,F,f*e*e,8 * ,u I0 :H H "HH " h (h"**h$*,h&*.k@00Kk i 8u u"u$u& u( "u*"$u,$&u.&J8 i8 ( "*"$,$&.&8 "$&0*0d,*,*&,*&,8*,k F $&"l"" ""^ ""k $&"<"""H"X""^ ""k $&"<""$ "X""^ ""k $&"<"")"T"X""^ ""kD$ .ȷ$0`hkk"" eԅԥIdh0$ e u8ju8j8H8H "hhԅ*"r "hh*"r "hhJIHޢ "hheԮ "hheɴ8Z8ԅڥɴ8Z8d0 Z 沀0沩"J*u8*de F 80e0M8.e.;氢20 Iu . Iu2 "@8H "he@) $ 0 iʵ̵.ε0ХIʥI"@00"2"K@Ŵ1IڥId0  q0h W@N0 2@00> %   20 􅨥 %00 2   􅨵 J@A/2@0&"H2H hh  @0k@eeee ih0`8hh`ڦ܆څܥަޅ`0$0Ŭ"p"`$ȷ$8``p"k8: |#9OePR k   K"H h@   5" H h*   "$H h    "(H hrh$h$h$k$H$H$ȗ$r$H$`RPm"`h %g"HHn"pr`H$H$$H$"h8`rph"`HHH ;[  UȷZHڢ:"h*ȷZHڢ<"zH)h+8` HH<")+hhh`r$k`"Juu88آ & Ƣ@ N N@00+" N N N N@@0¥ N NƗ &kƨiZi &z@ȊȢ`3zH &8hk  "kr$0\E ) Lx0 8eԅܥ0 8eօޥ0Lr0Lr8u "Ln8uܕ """ " {$8H888hȆ:8HҢ "he΅eЅ$ :8H "hee"|"""Կ@ :@$05@"("@ Q@e津e"("@:0 @8҅ƴ8"("૩k8k8``$ 8`` 2& C& T&tȷtȷt 0 ȷt"0"$. )$0ȷ$0ȷ$ȷ$"k {(0܅0ޅ "k W'.0.̈"<.0.܈  8e 8e" "ੀpr"\ $*ȷ$,*\$ *Hȷ*k W'$̕ 0܅0ޅ " 0e8 e 8 ܣ0e8 e""8d{B興&H$Hg"Lg"zHZڢh"hL ;[!l"L H Hq"L H Hq"L i"L o"L+hPhRh`hbhhpr{B興d"nb`RP ;[ s"5{"i"+h"h"\Hh" h"h+\ W' * H./.̈*./. *. /.܈* . /..8e 8e"䩀P`pRbr prd"\ W'ڣܣ أ ң ԩ"\a8 '\0,*Hȷ*k"%p)p p) 0"D)k W' V P"\VeVeVi$Ve( ԥJP0PdҀҥJJJJTHT0 TVҢV0VdV"k W' ң "i\ҩҩҩҩHҩ ҩ ҩ kShaston W' . ң ".\v$$ e&prp eptriv.d.p8p..gp..Rp..=p..(t.. p ..v$$ {&k W' ң ԩ ."\$0"d*|$)*$$*0 .$$*0 \{) ) `) `UU""33DDUUffww"D "b"kň0Ŋ08 k)k)kkeee e셔ek W' . 0"\"dॄ..e..k) {i[` $i edh$i %%ii+L%x i[$dΥ0{8+(\Ax i[$+(\{8+(\A{i[HHHHԲ԰"Բ԰"{8 HHH "hhHH""k W'  - PpRr 2&T TdVf   =&\ i & HP &\ "H &HH"P &\!ȷȄ $ȥ٥JJ:"""P &HH"\HP &HH"h\*,*ڠ*ܠ*ޠ* * ,****`8څJ8܅J8888`d8ڦOIHH "ccH "hIde8ܦMIHH "ccH "hIe`dȷdZ $zdd` W'  df  \ W'  df \ W'  `b C&d ih N&\dڀ5k8ނ ڥ8޷ȷȄ@ܷ*ȷ,Ȅ*ޥȥȄ+*,*,*ޗ,ȗȄޥJJ:k W' P RP &TV 8df y ŲŴ T 8iJJJ)Ģ & HP &\4¤ĈdƠ T0_ȷT?ŴHIhŰ0Z8尅*) ,*JJJ)E,z@ @ A*Ĉ7*TŲ.T?Ű IƀŴ0 T?ϩP & &HH"᪰\1\4TdddT0TdT0TTdd`pPrR\\\fdd(( $kĢ $}  " "8)iȠƠ$?$$$$ ԷЅȄԤڷօȄڥ?̥@F e!vʅΥЅ҅Ԅ #ЅȄԦ`Lm"? e!̅Υօ؅څ #օȄڦ! J# #ƀ**ȷ,ȄƥΗȥ*ȥΗȥ,ȄȐiȢ $¤?еLX!H"y"h8kƗJJ:ܢ"k TIХҠTРTР РTзTР Щ?РРd`TХVҩ ` dR֥ؠd֠d֠֠d֠d֠֩?֠ ֠"֩`d֥fة `0A*?*ȷȄ8帅,*e*,ݤȥ,Ȅ̈́?Ȅ`ȅ*?Ȅ8帅,*eŀȥ,ȄɤxȄzȄzx(ȄzȄxȄxȄ?зȄ`૫%&%%%%d%f%efh \ \ \$.)i'e'f'i'j%%,QR   \  v%\\1\^ \\C\ E\)\rk ;[H HHH "hhh"%["Qh\="e kHH%" H HH"h(k" Hr$0`hkP &TV`PL&` &df``L&p &tv`pL&*,* ***`*,*)*`*,* ***`*,*)*`HH &,*" &*,h**`z`HH  "z*z,* &*,h**`zz`$*ȷ$,8`*` W' N P\ W'$ &) \"d [Hh{`$ $ 0 B0."h.0 kB."h.k*,B , &*&,,먥*k$%!%D'u|y}e/Li =AEU1Ymqy2')4m;quUy,$8$%R$l$x$h~$$$$$$$$$.$)$i'$'$$%%+%7%,C% I%R%^%  ~H\^`bdgj14?NQ\knyUtwIdr:CS $'*4:=@JPSV`filv !&8=Jj]= {W!4^ !/69FZFff f  ee0F  &dh0& $ $0h8\: d dZ &&& &8   z&&0& &8   㰔@@ ;[ ȗ ȥH8  ȗ ȗ h & ȥ h j \: ;[  \ ;[d8 @ @ 8  e e  & F d f 8 H h  e e  & F 8 H h *& 8 H @ h  \ ;[$ 0 ;[$ 8 8 d0 & & e HJ d F f F f F f HH "z hH)KHHZ "hiM1hiHHHZ "hi ֨hiHHHZ "z MHHZnB* "hihi*HHHZ "hihiHHHZ "h hi@h)8 \ ;[d f8  f8 8  fd d  HH0    "z HHZZ "z HHZ?b "hihi^HHHZ "hiwhiHHHZ "hi,hib HHHZ "hiNhiHHHZ "hishi?HHHZ "hz && && h   @$ \: ;[  ;[ \ ;[ H8 03 &0- ;[ H8 Dd h0_ Yd dhR@@ ;[ ȷ ȷ H)  0!Ff : $0h8 \%C E B N Q " % k\P@ ] \p / /HZ0 0z C J)@(  h`P@  ] )@ ] \P@ L H ;[ ) Z ] zȰ+h`P@ ;[ e i(d ]  \=P@ ;[ ) Z ] zȰ\ H᫫R H) c )}}K HZ 8  k hh +`hHh;[ ) $:0 ) :  )  K P x :H )ZP*  860hhhhh0hhh+0 8` ):: ͈ z$ 66 r  K( $ 66(h hhh0+` ᫫H:h HHh Hh`0HH6HhHh ;[  Ȱ*)$  )) -jj60 ; :  Z 0 w H H0++h0h0+hhh60hh(0`0K 06)76k0 6h` ;[0 +\᫫)  8H6h6 HH)0 C h)ɀ66(h+\ ;[0 +\᫫ 0 C +\ ;[0 +\ 0 C +\-qsV '1v|rk\ ;8[1 1 - !!'')+4 8'L ' -55L' - #%' 5L 1g-1i H'8!e!i e 8!hL H HHHڢ+"'8!HFH e  i8)) h:Hz!%H#HHH!H+"e!1i1 -[/13;i.ke'i8  8   `H) )H) hh`hh:H   \\   \ ;[0 ʈ0"0\\ ;[0"00 ʈ0\HH"hh)xH$"hhhh(\ ;[HH" hZHZH" " ]))?))  ȗ) گHH""hhhhh+\HH"8HH"\ ;[)ZHZHZH"hh " ]&) ȷȀ""HH"8HH"hhhh\ ;[ZHZH ""hh ]) )ȀdHH""hhh\ \᪯HH` ;[ :H a)) (\: xH+ H<) H) < # M \ @Hi>==i >==:i>==hi@>==뭶ڿ@ h<(\T>\U> \U>@@@"  ==k  =kH >(`H> 01Kb H0:Hk0Hx0 0ʜ0zh(k1ij00k\  H;8[ )4:/-:3{iH/ {i H+{iH)+"++;i ) \\j\:\ "^  C  E   N  Q    $ ( , 0 " 4 % qs>'B1FNv^|frjn"1[goL 0CVi|)5W7|b-9 Wzq~"5?l Sl> 7 ,@ ROM1C 7  "k -E!Y@-^DqK@4 0B6 0+ @ A"hh P "hh   L ) H"   L "  |:0_    " i  ֯HH"" L )iH:kHi  "  i"  h`L' L' x y0gH0Ki ௥H05H)50"b0h50h0hg0(L' (  L' 44`  V  7 2  +"h` @ !#  {i"u  +"h`;T "" "ዋhT௜Hk H" "i8" HH"[ e e    ȗ  ȗ  ȥ  L :{H" "hie   H H"2" h h %"h h  L  L e     L      L  L i     i"    L "  ȗ `  V "u X(i  R = 38 ȥ I  ȥ "u i"  hHh  L )8 a  L s2]ssss"h!!  #%"u `!HH"`#)$"h! !HH" #H#H!HH"` #H#H!HH"!HH"` #H#H!HH"h !   ` #H#H!HH&"h !HH'"` "h  i"u   L i  ]]LQ ȷ  i \ȷH h ȭ]HHH" i"  ]  L  L "  "u  L  `)`  ` ) `H7i ihh8de e 8`hh`8``"hhh  ``HHZ  :zhkHHZ  :zhkHHZ  :zhkHHZ  :zhkz ;8"dZ`z;iZ`"h+Z;c;ڪ;cik"hǢ©h\- E$,!LhYlp@tx|-^Dq+  /28;>DNQWZd , 58?TW IOU[^ #(+.47:CFIL^ix}69?BESVY_acegikmoq UZ(MRU[`cjpsvp( #AKW_fyP M3 ,@ XBANK ૫   !!" uvyzH@@!"@%&@)*-. 12 56 9: =>k0:"k8 " kLA0:LA  "l"""k"8Jո"tQe"t 8庅e"t 8帅8庅"t ee8帅"t""k`" k"""p ^ ""@Ū@ kr$0`hkD$ ȷ$`hk "k"k "k  "l"४ŦŨee"L" ŰŲ0"xLօڥeHH8H8H "hhHHHHHH "hh jjޢeޕֵe$0$8֥إ܀6e֥҅eԅ؀'8ڥܥ؀e҅ڥeԅ܀""०Ů,8HHHҢ "zeօ֘e؅؊eڅژe܅ ^ Ŵ0ŰŬ"p ""@Ū"@e֥҅eԅإe҅ڥeԅ L""૩k@$ȷ$`@$ȥ$`:"k8 " kLA:LA  qt tȷtȷtȷt |\, |D$Hȷ$Hrpg" ;[ i" p" s"+zzzzzzpr"@rph"k"""p ^ ""@Ū@ kt `*,* ***`*,*)*`P TV`PL` df``Lp tv`pLP TVT`` dfd`p tvt`*,* ***`*,*)*`HH ,*" *,h**`z``P@:"kd8:` "kLA LA "<"$9 q "" $9p 8 "X""""$9 |k"DH$`"H` `)"T`$90p\x\\ࠔ$ȷ$8```D$ .ȷ$0`hkk"" eԅԥIdh0$ e u8ju8j8H8H "hhԅ*" "hh*" "hhJIHޢ "hheԮ "hheɴ8Z8ԅڥɴ8Z8d0 Z 沀0沩"J*u8*de 80e0M8.e.;氢20 Iu . Iu2 "@8 ^ "@00"॰2"८K@Ŵ1IڥId0  q0h W@N0 2@00> 3 %  3  3 20 3 􅨥 3 %00 2  3  3 􅨵 3 J@A/2@0&"H2H 3 hh 3  3 @0k@eeee  ih0`8hh`ڦ܆څܥަޅ`0$0Ŭ"p"`@8IHHH "hehe) 8h`@) $ 0 iʵ̵.ε0ХIʥI`e`澋` %!1 =IUamHy@@@@    k+7CO[gs `u+7:ry2>FILov S^dou(9 %   20 􅨥 %00 2   􅨵 J@A/2@0&"H2H hh  @0k@eeee  ih0`8hh`ڦ܆څܥަޅ`0$0Ŭ"p"`@8IHHH "hehe) 8h`@) $ 0 iʵ̵.ε0ХIʥI`e`澋``p"k8: |(>PR k ~ i K"H h@ ~ i 5" H h* ~ i "$H h ~ i  "(H hrh$h$h$k$H$H$ȗ$r$H$`RPm"`h %g"HHn"pr`H$H$$H$"h8`rph"`HHH ;[  UȷZHڢ:"h*ȷZHڢ<"zH)h+8` HH<")+hhh`r$k` . ң " . ң ԩ ." +\v$,\i   ੱ  ੽  kk ;[ "' ["+\" k   V. { "d [Hh{` dd\RpPrR\V\\dd(( CkĢ C}   8)iȠƠ$?$$$$ ԷЅȄԤڷօȄڥ?̥@F hvʅΥЅ҅Ԅ ЅȄԦ`Lp? h̅Υօ؅څ օȄڦ M ƀ**ȷ,ȄƥΗȥ*ȥΗȥ,ȄȐiȢ ¤?еL[H"|h8kƗJJ:ܢ"k TIХҠTРTР РTзTР Щ?РРd`TХVҩ ` dR֥ؠd֠d֠֠d֠d֠֩?֠ ֠"֩`d֥fة `0A*?*ȷȄ8帅,*e*,ݤȥ,Ȅ̈́?Ȅ`ȅ*?Ȅ8帅,*eŀȥ,ȄɤxȄzȄzx(ȄzȄxȄxȄ?зȄ`HH ,*" *,h**`z`HH  "z*z,* *,h**`zz`*,* ***`*,*)*` pr\Hb{i[HHHHԲ԰"Բ԰"{8 HHH "hhHH""kM-(@, Q]e!(,8LW   0 4   \   ] 0CTgqL$x'5ir #),/9?BEOdTf"2qj  ,@ SEGJPTABLE"""""""""TOOLSuHUSTON!% ' -''TOOL0145% 7'TOOL015% 'TOOL016 [% 'TOOL0189% 2'TOOL020;%  'TOOL021J0% ''TOOL022d % & 'TOOL023k+% 'TOOL025 k%  'TOOL059w % X2'TOOL019T% 'TOOL027+% 55/ ,@ M-X_  Xq oFVG%&(P'} j >&3 d  Z?%; #+T d t   .)) b IH "+  "~tpm- . / Ȇ L   -" '-)@( w  / +LK  -""-"dТ/-Т/@...HHH-Hl" D'"ieiHH"ᥴHH" A'"ᥚ8喏o-8嘏m-" / `z;[;c[. .8k 7 [ +H "ᥐ dh"-""HHH "+ [ 7 (H x"h 'Ȋ  L [ -  iHHl"  QHH i iq"᥎  ih" / LL- L [ = + +L [ +LҪ҅҆) Ҧ(`Ŧ{ ``׶ȥ׶ ץ` [  0 L [ L  ih"LHH"hL z [Z  iHHl" ƒ  H HIHIHo" HH s"`r"`  tL  o""   q"   L  L  j"L/ "   hhhh` /...  L  J : L      J L   ȣL    ȣ  ^   7 k =  Q HH `" 8#h HH u" 8#h  / `  )? )? )e:  e: H  Q צ `hhH `" צH r"  / :HH` 8#HH`      ȷL         L     + L i L ) i : L  J   i" > A / L  ȷL   /    ȣL  ȷL  -"` 'H"`ܥHH"hh`ب Z"dd`ȗ`  L ) L  L  L   &  / L    i" >s- As- /    i" >  i"0 & L [ Q -l"  / +LH h%ddd%:e D'L"` [ H ` mZZHHZ s"Tr"KȆʥȦʀ<  Qdd u   ii"  Q / L [ H ̪N5JLQHH.H@HH "hh .L   'H"̗̲ȗ )?ȷ)?̪8H8H!"ᥠHH"" ZHHg"hzȊ  D'"iei N : ) " j"AŶ:Ÿ6 =1.  d q"   A Q g  =Ŧ      ' / / L FH`IHIH888ȷ8h` A  A888 88ȷ"eeee`HH" HڷH"h"`      i" > A / L   ii"  ih"`  N `LHH 'H̠"th`):H;k`) Y,Z0"` >II  IHIHo"8t` -IH-IHo"   / ` A' Y,ZW" A'S"` &H`1 `K)   ) O A'HHڢ," L"  A' HHڢ," L"  L"H,"s-  <'HL")L s- 4 A' HL" A' Y,ZW")@ )@ i8堠JeŜHH:" ")  )n:w8ЅeЅ  A'HL"  A'l" A'  'H"t -l"s-  -"`ƞ8ЅeЅ >枥eЅ8Ѕ`֏.  HH"ԴԲ"ԘԖ:".H""`8 8m-i om-ioo-`ȷ` IwIwHH"hh   A'l" A')  ieЀТIHڢL"8) e8Ѕ)e:) 8  A'l")` .- "8888 I)':8垅 I:e):8堅 I.ȯ.`跦ȷHH- A'HHHHHHHڢ "hh `)..ȷ..`)HH"JJJJ)H"h`` e&` >) 2Deż4 u& )@ `) `)``e)eżh  h  / h` %  Q H D'ԾԼ-" / h`  H 7' A'O"h` ` i i"  ij"L  i  q"  > A i  is"   q" i$H}"   r" Q`) "t`-0 Y,ZW"`ԦԨ di"᥎Y L  i" >  o" " i" s"П Qhh` QLu d  q"Lu d i"`zHHZ`*)  HH s"檧ŦLH iH x"h`z-H-HZ`ĥ…HHg"h` dd΢ N|    'H "hh Ȋ 'H " 'ńdňdH")HHԨԦ"" / L H#   i" >  ii"Z h"z p   =w.]    i ir""  i" IHIHo" i  is" d i iq"  ih" h`" j"`  :  ) c c s L  )  Q A  A888-8-8-8--- <i{ b( e:e: / d溢 L K[d̩΢ N- <'S"ᥖ楘襚c꥜c D'S"+hhk ;[     :  :L I) a 1 F8嘪8 sd L` A` nZHhz`   ii"   ii" G N  o  i  ir" -- uh-h-# _  _q" i _ is" l i iq"  ih"᥺ _h"dL/  'H"ᥜ8H8H!"ᦖ  L/ H))cצc7צRNcצ8dc7צ87dhh` [ 8ʅ`HH`i`ȥɀ ȷ樧iȅ敞`H    o" iZH  i~"hh iIHIHo" i  r"  / ih"`8H8H`H#"`) ` A8`   yL  g yL08ʅ`HZ  0  i" >  ii" L4    i" > i  it")?d楎/ ") &     Hɥ  ih"  / hhh`   s" > i  is"  N Q  MŨ) $)ܠ  y 'H#"L  4 = +HHH#"h   = +H"L   EbI ) " j"   i" >%   ii"᥎  ih"  / L '` '` )` d0ȷ(`( d{iȷ` [.h.".HHHH " ȷ .hh E#f=8+#) !  !.H $h)ԸԶHH " `#y)nHiH HH"  E#.0 !&)  ԸԶԨԦڢ". R$ .ԸԶ =   'H"`ȷ ȷ` 8 t ԨԦ  .[.H"t+hh  ` 4#)ȷ )蛷8 ) f"H`w""#"#"#""""H .8 8HwH8)h7H8)8H87h k ! /#  h HH"hhhk `)`ԸԶHH+")@ ȷ`I)> =92ԥ +H"3H8H" `)1HH"h. H,"`) @ ! ), !HH"ԨԦԨԦM"" "`K$8 $% %|$`$$Z%%%%$$$%@ |! .`$`) |! !ԾԼԨԦ". |! !)@ .〬HԾԼԨԦ"h .`ڤZ.HԾԼZ&"hzZ'". |! !HHԨԦHHd(ԾԼԨԦ"hh". . |! !  !HԾԼ""h.   / [H;i HHHu"9(  K&)ȷЩ  'L̆Π e&`LNH 7' u"h` =`$0Ŗ$0Ś$0䘐 $0䜰Ș`    Q  )  -- *' ' ' A( *' ' ' >  /   ` 7'"`--`H{c`  A(- U(- U(L;(-0 ) 8 D'-0L"{id-)8-  Q-IHHL" > 8 dd b(8IH8IH 'H" / LHu-"hu-`I`HH--ԾԼ D'--S"h` K ) >..  $" >    ii"  _i"  ) ) )  io".K" i i" >  ii"..."  i is" Q  _  is"  ih"Ģh"  / o"`) I F 1`) k ;8"[51,)F:I+)J+)@89 89 8 8 I% %ee % +) ::tt dEdG?=0"."," + ,+) BA"t N, *܀݅! * +6";i"LH +/-O"h9;! &+EG + &+EG`+)+ ++8`!8;%H% ch O+Z89 O+` t+08 t+  8 0`Z8p00h`z`+)uE t+uEuE+) 5+)+)+HGEBA"t` D'S"`Hu- "hH "h8`- " -"ᯁ--` D' "`)) --y -tKJJJJ ,M- M-Q ,M-ZH)HM-))HM-)- ,0 , ,00 ,hhM-`M-`M-`)H `--..  % ??--   b `    _   $ (X,0q 4o8<@DFHLPVTXG\%`&d(hP'lp}t xj| >&3 d  Z?%;  # $+(,T 0d 4t 8< @ D H.L)P)T X\b /--&-V/b.m-3--- /- -- --\---6i%"'-F(u-i(--y(-(-).K).)),u-%,-4,-,M-.-.-....W  )7=D]q)6py!$-;#IUlorx~! %-5;>AIY\dk}(5NX[s$':=knqwz} Vcfsvy|  $(W`4:WZgjr>AGh!'*47BHKV\&(*,.03EKNXly| ,:i +HO 5_b %1Az (-258;HKNXou{/9IWcgjv RXdpu -9?Ilv|$'147CHN[^aknqwz ?JRc(7Okp}RYy:Yn!Dq;C !A(c,Vt`/U+1]iQAF ,@ ;tttnDTKY|DOcz9\3G>(fv k [H "t  90HHHH"hh *"z;[;c[ 8k [ڂ| @ [ ( lȷ lZl"  z""HHH "+ [" 9 @> *"+W / %K H"""dRR d>fvt@R>tfv N/"h "jijehihHHg"lnl"nl "hhhnlh" `` [Kڽ f)H"" Zx> "z֫+Lu [ #  z, R,"( i e H,"  K `+Lu [  D #6"  @ :D jBF  ) ) `L^ [ Q Q+Lu  z*l(l*"`H )eRH w Kzh` LHک(. " K(.LKhh` Zz`  Z z`  0 H  H H"Ld`bHH"h`hb``bdbZ"d`db`$ lȷ nl(` [   l2ȷl4 # {" {l w 2d2d4  2lȥ4l `L^ln` [  d2d4l)Ƞlpl Pl P)Ц <4,"ပ $ ) l)p  K` iH{i2HZO"h` [ 6 8L? Y0"`HZHZ:"HH<"zh`X #K ^dLdf%dX {Xނ ֧J jTVB44 K  dX'"0 HLIL 0H:䂲 ^dH {T4V4{dL E cH { O"h=dHdfXZ L"H { O"  L"h)dLF ) )@Hdf)@fLH ) HL L- E d2d4L)?Lf)?L <4d2 < ``4L 2`. ȷ Ȅ.LH "h24 {"`J,"  :@wDBwi>iF@ "D " 0F eBBeFF@^DbB `F i>i dHHHH 8J>JH|8H "ᯑH@HH "h:h<:2:x:zVX"*""@ "D ", F>FD@@  QW"@R,"@ S"FZ@iHZDڥBiHڢ:"<"R H,"<"HH," RL"`@:<("@""<:"'DDFiF 9"6867 6 hhfLJ,"dJ`)>))>)`N | D e  [) )`H 42N"6 h`):H;k ^ ` e  `dHHHH ^3{   \-H 0 ) @``dd TH H")0c  e ˠ ȷ`H z" N V"h`(N* YW" ^\\- gBi 8j"+)H""  8jB |  ))K2"  YW"S2"h`N)?: ^ N)@1."K2"7"S"6"h`) V"h`(* YW"hA) ),K2" () YW"S2"`(*)H")H" \-8Je \8ji |)$^#\8j |)(^&\8j 8 | T )@  ʤ `UUUU`H @  dd e h:H ehBF `)Ih`^\`i`i ` [ #  7HHH"h HHH" Kɠ  8eh 8 `+Lu [  # ! ȣ  `L2@H{c` [ n p l  l n p  L?n\p^dldt XB\]ȗ\ @ \ z)Hiȅ f ell\e~^\\)ttt`ڠȷ\) \|\)|\dvdx zȷ\)LTȷ\)*ȷ\ȅx) x)xC ȷ\)vN8HHȘ^e\H\)0 : ("hHzHȷ\HȀzB 0I &U V @D XI zL ~\\` X$H\^ȗxȥzv ` HH"L? [,   +*    ȣ L?HHHHHH "h` [  F ? 3 l hl  8  ( \^ fL [   ; /  (. e.$&.  ( $ $L^ [  "Zz  Lu  " K.8 ȗ  Lu "lHHH"helHl" "`$&nl8 ::n$Z$z$ʈ` [  +Lu [ L? [ L? [  +Lu [ dl l l Lu [  z 0lȣ 0lȣ 0lL [  z, *( +Lu [  ) Lu [  ) +Lu    LuZ z`   L?   L?   L^   07L[    Lu   ȣ HHڢ"hL    ȷ Lul   K`l l  ` `   L? [  \ ^ X\]ȗL    ȷ Lu    ȣ   H H&"Lu H&" H H&"L?   ) Lu   07L?H  h   ) L?   ) Lu   Lu [ 0Lu(*z) ieHZ`K) elnr>) %nErl1nr`???TPUU@UUUUTUUPT""""""""""""""""""""""""""""""""33333333333333333333333333333333DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUffffffffffffffffffffffffffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwHH YW"S"`Z:"^\"`fv^Zvf~V @f @ t t t$(n,0D4T8<@DKHYLP|TX\`dhlpDtOxc|z9\3G>(fv@W7`c *U @q  K S Ki K S #&[e*f.v2^6Z@vDfH~LVf{!R=CZkpsv|:LOVY\cv:=CHKORUx $.1F *1@Q`pu %+.Pafy ,59F\fqv{ *4=dlqv 6X &HNY`nz 2 0% 4: 2 6:e6 , 2 :"  `88"Je8` .,8 ? (^( ? Q. px*| |xxx   ZW")Ɂ6d4 *`)p6  8L" { pt8r. xȷr p* *vr8vr { 8r ک(ephetev`( 0 .,K"` ;  b`6VNN  8L"V  )( ZL")ʆ^` { . ,.)u8HZڠ6  8L"88h88h "`8)40` H`J 4 J J J J J J C 6i , 40 ~ ` `   ~ i"iUUUU   @| 9 9@| `dob!|/cx9ߴ|@_x;߾??cx9߲!@_`dob!|/ 9 9!P8   '4@LXdmv   ?0?8p0?`8?~ ? 90?03??~? 9 0038?~ ? p 3`? 8.E\q .@RR    $X(9,B048<&@SDH LP(T<X\U`d h4lAp[tx8|mrzEC ; c  _ V[c  %(7;@FIOZbqy5;>DGYakr #06CFIW]t| (>AGJOUXgnqt| 69*6>GORbmps|_g ?W_er #5>KNY\fp 4Hu-036Ly#*,.02468:<>@Bx&4:=Ycfv##%')+-/13579;EHqt$(2>BDLNPR_ly .8>KXew +)JJJ<kooz4il EHEHh"GE)""KIh"`HH"hEhGe kGE("-tEEMȷEOHHg"IKkHHg"KHIHh"h8khEhE E@JEjjEr@EȗEDEȗEHE"xEQȷESEEU~EWE|EEȗEEȗEEEddHHki"hhY \GE)E) 8 e 8Je {i H"80 808 0 8 0kH Rh8ki!i`+ |vK  a i q  &  +( ` c9HHHHKIi"% , "OMEHEHq" h"`zHZڢh"h8` He he He heHHg"hHHHKIHi"ᰩ` eEGH "` l Z `H .hDH HJ  H .h5h7` 1 )` Y`   | EȊE`E`JeEGH "`[iH "`jeEGH"` QS` U` W`HH ;[    [ B"+zZ`iHڥ[ B"H$*ȷ$,*hkr$0 "n k:ɰ)JJJ π| 8-Y" `80 [#%' ce!e!'J0#0!#%''##e'hhhk $H$HHH;[ g eȷ<,iiHڠHH"H g h(HhȪhȷePeȷeJ'00ȷeȷhhhh+hhhk` Z $" ~H vH oH#%# ##H#H H"A#%#)# [[zhhhhԬԪZ$"+zHZڢ"h`zHZڢ"h8`"k - & *, X 0.Ԩ"DH c h(`* *`*)*`Hr$h`RPH Zw"h" Zi" PR sz hPhR $. $.L$H$H.H.H.ȗ.88zzzzH ;H"D* |$F..  ~$<..  $8..  $:..  $$>. .,.ȗ.@.H.H sh k $$B. .,.ȗ.D.H.H /h ' $L..   $N..  x$$+t$.ȷ$0..0..H.H h z$$4. .,.ȗ.6.H.H }h s ɐ_ 8H$P.. : 0d88m"P"L8 F8. 5. 8 P {iH "D j$Z.Ȼzr9$Z.Ȼzr $ij&iH"Di F$$V. .,.ȗ.X.H.H -h % $..  hkkZZzz  $H$H.H.H`HHH HH "h` [[ v+`$*ȷ$,*.*0`###%`H;H"D`H;H"h)``H;H"D`H;H"h``H;H"D`HH;H"h``Y) k k0.$.ȷ$0. h.h0\8H5..h.h0kE#ȷE%#\41#H#kH$.ȷ$0.Hkzȷ.H.k #'+/37;iH B"`;iH B"`;iH B"`HHHH{i {i`"d [Hh{` rH m hHHHHH;H"EHHHH;H"-HHHH;H"   H%$  H;88`` $+) cH , [["<zhphrhhhh h"hhhhhhhhhh) )FFFFڀ )ڥ8ԦZ+HHHڢ " k#%H %# H"O#% [#% [ " "p $r rp"+"hh` @ҥ΅Ѕ8HHHҢ "hehe܃8J$JHe $ c:8J$J8 8܅ $rHpH ;rrHpH ;H M F >;H "D-zhhhhhZ{iH"D{iH"D` hɐ pr ]"D٥e҅` ;[   8+zhhhhZ`x ??T)HH .zS)H)Q"UE+8( | `A `C1 `eCC% `eAA `H)eAAh)eCCCA @hEhE+, ` `[ C#%H##H[H"[8 [["+"`8! Ȁ إ,m@$8H.ZHB$8J.hF -H+  hhB`* h -H) h ( ֠@$ ̠B$ ¥8)  "  HHH"D @$H.B$J.`HHHH+) | a Z S LM=? 9 2 +) c) c=?`=? [hhhh8 ["+` R.T. 8i8i  !j jj `8)H8) hh R.ȥ.`+) 31/-HHHH;H"6 [h-h/h1h3+)8 ["+``0:..h:8 {iH"D`:8  `+) 31/-HHHH;H"` [h-h/h1h3+)857 h [ "+``.ȷ.    @`+) 31/-HHHH;H"f [88 hh-h/h1h3+)8 ["+``Pj+) 31/-HHHH;H"g  _[88 h-h/h1h3+)8 ["+``` 3Ԧ ` cKHHH B"[P`pRbr+)8 ["+"`pPR ` c6HHH , *[pr+)8 ["+"``pr `8ZZ > ;[   H["D;[)+hhhh`+`ZZڀ .H 'H#% ##i%HڈZ"hz`zHZڢ"h8` Z.0*,.̷* .0*,.ܷ* p rp $pr " $P`Rb"'L6 $*ȷ$,*\$ *Hȷ*kd 橐"kr$k 8"88ܕ8ޕ \\$ 8`` "+8k"""# """ """dBdd",.Կ[ e6"e:"p!"""!2[@0"ล@"ॾeԿ@@8ǥ["" #H H"+k(kE )8k{2i@̕4ҕ68: `!L":8 `!N8֕8 `!H:8 `!J[00$38)H:)8Bi 8)H:)8Bi D:$3J):8:$3Je:P!!!!9HH0!!!!!!!! "h0hJ8Hi HN8Li c #,. .,(,*he(,*.JI2[HH8HҢ "heΕheЕHuHH8IH "0 hehe8hhkH hj$ H hj)`e6 (( e:0k\!\!\!\F"k(,k d8J& ($&: e0 eJd$)  "&(Ȅ&$)*L*"dB$?Ω"P)e|,ȷ|8,:.)eee."ŒŐ0ҥҠ@$8儠ҊekB$?Ω"TQ"d"P)*e*|,ȷ|8,:.)eee.0"T" Υ:ХŒ0ҥŐҠ@$8儠Ҋek Z . 0"La"d⥄..e..k@ń0 0kkJJ,JJ0,)eЅХ0)*8*Υk@.ʅȥJJJ)*eԳJJJ)8*,0=)+ 걲"ұ""ґ -ii8.,,)/ """҈ȀP -,0) "0 -ii8.,,) " -keąԳ,8.,`ƢŒΥ:ЀΥΥ:0Х):JJJ)*ei0....0e*膰.0 eą i)JJJ)8*ʅȤ귲*,J,,* ,,҈0:Է.0 0J00,J00, ,ҥ,뗶0,.*Ԁ* ,뇶eą津eą渀eą쥸i UȤ귶숈eąi귶*W**숈$eą洀".귶W kʅȩ*J** *뇶eą津eą渀ԥʅȥeą쥸*8ąƸ*G*8ąƴk"/%"/"1"L0"0"'1 kƢŒ8kΥ:ΥΥ:0Х8kkJJJ)*e0..,.e*, eą JJJ)8*8kkʅȤ귲*J*J** **d,&,҈Է.J.J.J.. .,0* 0*d,&,0뇶eą津eą渀kꥶeą쥸i ʅȤ귶숈)eąi귶엶숈kʅȥeąi엮귶숈ꥶ8ąW숈 8ąƴkʅȩ*J*J** *뇶eą津eą渀ѥʅȥeą쥸*8ąƸ**ʅd**G*eąeą洀٥eą*eąk Z"<.0ddޠ..:J$ ܅ԥޅ֥إڥ ̥.i0iw.i  e e". ddd) ) )$0.) ) 5.)JJJ50" # # ""L'48uܕ ""HH8H "heeeee"|""Կ@)""64@ 8@)eee"" L6dd褶0L"ĥ"…%ą·Ȅ"ĥ"ą褼0UI1$33$%$"H)4)h)4)Hz$0 %0*I%.*%Ȅĸ\k""33DDUUffww"h+Z;c;ڪ;cik"hǢ|7 /|2| |$(,P2  y #]/;G SY _s kN1 $ $ $rrx $ $ $$%g+K )5AMYeq8QaQ^r "9<>@BDFHJLNP^tvxz|~bjrz!'Knnt &-4ADS 7?T\qy 3;PX k 5==A $8msxz  "(4#5AH\zZw)Y]fjw dju%(QȂ݁ԁ9<ixdR7:S4+pw~tx65]M6g'&ZpV3#kSO<&48< cgkoy}"*.6BJNVbjnv "*.6BJNVbjnv* (0<@EIMRVZ_cglpty} $,4?@ABCDEFGHhh #   #"hh{iH"e e \ Le i ` [   FHH \"L] H H"L]LW [ c  " & L; [ c&T,I *<"h<*oho 2 (W L; [ cdR Z <ȷ>{i<H" L   G ": :X)4"8X)4 8G4 ¥X)"X) "!:  ": "X)"6 ] L X)B" 8X)4":X): :K4 X) "X)"L " LL"4 6`d{iV  G  L; [ H H" H H"LWL]{"k{"jk [ c  .  .j0  L; [ c   G  .  L; [ c    8 L; [ c   G   G L; [ c  d4 G L; [L 0 2d42020" hh Lhh k20U"8 we40i2d 4)  4 H *20 "8 0JheH:"20 "4 wLS "L@L;{"Ck{";k ["#hLQ."hhLQh"h$ r .j&  LK [ " . " LQ LK [, * LK [. LK [ .L [.L [2   Fz ȣ \L [   F 6 \L [   F  \L [   F \L C8"  e0e20 "8`  8$ w 000 0& 8 ee "`` ` e:8Ne: 888 *0ee2 000 0 000 0 " !`e`{i<Hi iHڢO"h8`d46 }B>Bd<`F <`@DJ(&"heF{i<H{i@HO"F8e&)H"hJ H8FeFF{i<H{i@HO"h<`&)!00 &)!Ȅ8&)!Ȁ &)!:`$ &(L2 `$&(L2 ` 46 }F4 g `$` 4"6 }0 g `{i@HV"`" `8ȷ H k6d446 }F{i@HU"6 BH@wH:"84&e4(iHZ"`H(&ڢ"8 *0J cB0 8hh`H8h0J8 B0 chh`46664@wD B4(&4"heBB64B(&6"h wF` 4` e&0e(2`"8 `" `  H"h`" `^L^LLLLLL  ^dT F g"h hHH"g"HTL(%"HTLi iHڢ&" "HHq"HTL`dT$"HTh"HT "  \T`:hL@  `)`"$" ""&"(`")"`* ***`*)*` [hhhhhhhhhh,\H "HehhHH vhhРР7g"hdhfHfHdH%"Hg"h~hHH~HHHl"Hg"hhHfHdHH~HHHq"HlHH$"HYHHU"{idHH"HР8H:"d"\H "HhhHH vhhHH"᧒)H)H"hH"h dbd`dl "" "D  0Ϡ r֥vԀ HH"fHdH$"᥄HHh"᥀H~Hh"fHdHh"ᥪHH"HHH[ke`hhnhpnHnHH`jddddddddxd|dkР8Р 88``be`eօ֥iإ8墅` ddz   p dddddz  = g( d ) kdĥkU0C+H8HH ""#8JH;"8H;" "kdx> Ś907 %  8嚅 暥 c 暀ť  `SH") jF'暥 c M  `C H"-B H"JQX LM  ` 8墅d`|+F|)H"|F| M`HHH"`Р wHle€e8ejwH:"` c 暀 暀` c   暀` PIx g@ p  p cS(H"z)| |`F- p cz Mz | |yCzpH"dQ lZBzQH"EX 7L &M  J΀ R  +dlօrԅvdl漥r֥v` pd` p `)`` ll`{idHH"ᧆww`)H" MH"H"`HH"` ``eiHHH"heŜ0d` peddd`ƚ gd漥`"h+Z;c;ڪ;cik"hǢ $,=D D$B(:,v048<@DHL P<TiX\`dhX l p t x |    6 #+9QTWc| &069O/CIOU[aps47DL &2:DJ >dt}: )HH3")@HH8"HHH"h"HH "᠌  +!;ikLU# H"+d+kz#%&X+,*%;8 [ddHH"hh:H8H"HH#"0) G?, . { ,.|4, , , ,,,,.C ,.{ ,. 86( (8 G I HH:H8H4H2H.H,H(H *HHHVE0AH:H8H6H"x"H:H8H6H"x"H:H8H6H"x" *H , H H0H6H&H$H "hh  H A<HH"8ȗHHH "hHHH"h+#;!97;i6k ;8 [  " L";8 [HHHHH"hhHH"hhHH"HH#"/HHHHH"?HH!"HH"HH "HHH"hL";8 [ H HHiiHڠ HH HHȷHHH "L";8  [dd  ,  ҥ L";8 [ZHHHHH"hhzL";8 [ZHHHHH"hhzL""L"LV;8 [HHHHH"?hh  L";8 [HHHHH"YhhHH"  HH"L";8 [ d  L";8 [HHHHH"0hh L"d;8 [HHH HHH""h L";8 [HHHHHH""L";8 [ L";8  [HHHHH"hhHHHHH"~hh/ )HH"HH"  HHHH "HH " L";8 [HH HHH" ""L";8 [dH{iHHHHH"h L";8 [HHHHH",hh") L";8 [HH*H(H&H"hh")8 " }  ) "" R   ȗ"" " L";8 [HHHHH"hh")! aHHHH "K i iH H)H HH " HHHH "L";8 [HHHHH"hh ") HH"HH"HH#"  HHH H"bHHHHڢ"&hh HH"HH"h H H""L";8 [H"hd   ȵ Ȁ+ ;ik;8 [ddH"hdH H H"hL";8, [d6d"HH""* HH"h(h*HH"HH#"H"h$d&"HH"H{iH "h23+HHH{iH{i6H23"x"hX4) HHH{iH{i6H"h1 XH`}6V*H(H""$,L"H{iH H H"h)H{iH H HHH"h" " {iHHH ""   "50+&Ɂ!H H HHHHH"h"DyH H H)HH"h""W$ $" $"x"d6d"HHHHڢ"hh) )HHHHH"?HH!"J)) )HHHH" "d6d"HH"HH"HH"d6d"GHHHHڢ";hh HH) ""d6d"w ") 6d6d"N;8 [ _" (HHZH"hz  +  ;i k;8 [ 7HH H Hڢ"9hhHH "+  ;i k;8 [d)J) xHH"cHH"ႶvHH"Ⴁ) HHHHH"hh") V)K)AHH"HH"")  +  ;ik;8 [0 ,"+;ik;8 [  7")Ǡ + ;i k  ;8 [HH H HHH"h+ ;i k;8 [dHH""*S GSN3H{iH H H"h)KE@9*HH"*ՠHH"*L";8 [&HH"hhHH""*FHH"HH#"HH"HHH$H"HHH"h&-" =H`\\\h \ \\\\\\\HH"+%#!;i kH HH "H "H"h)ЮХH{iH "H "HHH"hr  ] $H"H H H "   ;61,Ɂ'H "H "HHHHH"h+H "H "H)HH"hrHHHHڢ"hh") )HHHHH"?HH!"O")")0  ")H"H H H"Ⴗ !HH"HH"HH"Ⴜ !HHHHڢ":hh   H H") ""W"ȷ"`  " ) &;8 [HH"L";8 [HH"hhHH"HHg"hhHH%"HH$"HH"HHHH$"HHh"HH"hL" ;8 [ڠ  V^QW΁!HS&8 E@p8(.4:@GKbkt}  ,@ Ohnt~KKy &8JVvx c uLdLLkvx c aY[ uLdLv xv]x_4B "Ah]h_  U"/UW_H]H "``aLna*/system/clipboard cU  uLd cU cF uLd cUcefghi W uLd XU檀 cU c ! L _H]H"i _H]H"L e e !  ȗ B "Lh h e e  e#ȷ e%Hڠ H H"^ ȷ  w w HHHH%H#H+"  e# ȷ e%  u Ld cU c  Ye e  H H!HH"2 H H!HH H H*"  uLd cU c  +e e  ȷ !  uLd cU c  +e e  ȷ !  uLdY[ LY [LWLULz ;8"dZ`z;iZ`]_ `]_)`  ` ) `H i hd`h` &Zȷ"2zi _H]H"  `z`"Y`Y![#"LXA)tCEGI"ALXtH "GiI_H]H"LX tiCE"AKi  H _. i  h")U  X`H h8` H? H=B "`h  hȗ CE?=G"A=8G=?? =H h(` XYO[Q"OLY![#"L/) 13_H]H"\h5h7"/Hi  H + i  h")U  `H h8` ȷ  13 +ȷ --+55"/+85+-- +H h(`"h+Z;c;ڪ;cik"hǢOh nt~K K$y(,04 8<@&D8HJLVa//aYa^YutAAB)AO^/)/Z]agms!S{~'+8;"%*-2 "7IUa/8h@`@>"`   H H "` "'.d0 i)+9;" 7 "' E u',1"1- =  WL"'0:`H"'h"+,}. d."}'"} .)ɩ`'),8n,0# )) ``H )H:HkIh`,0608f)./ A)$0 d(8f0` ^)(*0> ͟a)ٟ͟0i耾008(*&H$H"hiH&H$H" ^(eH*ehHHiH8 Hڢ+"hhhh h`$($*`  )  :  ) u0 MM0c0cnE y"emoqs8+u#  i)/ iȂCCc ,E0 8nEQ 5 7 "h) H H"LC0z.w .wz8 0z` iIKik" G` i)/Ȋ)/爌M0a)_M0" _` c y"emoqs`Mw.D9 ^H "he((he**(H(HZ(z ()0 i ȧ( ȩ/ 8ʊ 0h h)`0 i: /8 0`0(*0` H H E ""?E  Wm :00ͫ  8 `E  b OpenCloseDiskCancelSave New FolderReplace Existing File "^0" !File is Locked. Continue Anyway? I can't Destroy a Directory This File's name is invalid.Free: ^0k out of ^1k. NoYesOKCancelInsert a disk and click OK Insert '^0' and click OK T22d  )  ,X G  o, J Q 8 @ H P X `"h)`     ` ~  5#68 ~ !68t " "h , k ,| | ,0 R 0,0 ,,0  H H " ` , H H H H /"&H$H"   H@ J 6 n V  6    ' ' H H E "E )IfHHH H HH"" H H H"" H H0 :"9"႖ H H Hl )ISV^a)JRUX]al @O_r X[aw|5;DNUk}#&.4=CFOhlz+.147:=@~(,6RUXbehknr|$BHKNTWZ`cflorx{-"%,147EPTbjv#(,0DQes(-2BDFILOSZjmpsw~ !%;@FJQUlqu|#'7=@DGJNckqt >[agtkL ,@ l7G^PD k)"h " ") [l   \ HHHH"hh <> =.>*=N>=Ώ>=ᩮ>= +hhhk)#8k " <ᩮ>=0HHHH"hh  "kk"_k)k8k [xK l0:l0' # l  (+hk ! [xK0 2 tl< i> <==00"H) cz [H <  i|  i ) H cze  )Ȁ e ) Ȁ e )w)w ) ix> <= =i>ȷ= =(ȷH H  d @ d d   ix> <==(0h  h+h h h hhkxH ) cz [ H)9) 1 q  0 J h+( hhkx [ Kl)$di> <=={i[ʫ+(k)H : k0)")k 0 )[l K)FHx(h8(Z0  zh  0 )zh{i[Шx)(+ ki> <==i>==i >==`J0 epF B e0; 070e8i@x> <==i >==(hh ` 8 0 i )L 0J`    !"$%')+-/1358:=?BEHKORVZ^bfkptz$2:@EIMPRUWY[\^_abcdefghijklmnnoppqrrsstuuvvwwxxyyzzz{{||}}}~~~~~~~}}|||{{zzyyxxwwvvuuttssrqqpoonmllkjihgfedca`_][ZXVTQNKGC>7,QQQQQQQQQQRRR$R-R7R@RJRSR]RfRpRzRRRRRRRRRRRRRRR SSS&S/S9SCSLSVS_SiSsS|SSSSSSSSSSSSSSTTT!T+T4T>THTRT[TeToTyTTTTTTTTTTTTTTU UUU)U3U=UGUPUZUdUnUxUUUUUUUUUUUUUUV VV V*V4V>VHVRV\VfVpVzVVVVVVVVVVVVVVWWW%W/W9WCWMWWWaWkWuWWWWWWWWWWWWWWX XX"X,X6X@XJXUX_XiXsX}XXXXXXXXXXXXXY YY"Y,Y6YAYKYUY`YjYtYYYYYYYYYYYYYYZZZ%Z/Z9ZDZNZYZcZnZxZZZZZZZZZZZZZ[ [[ [*[5[?[J[U[_[j[t[[[[[[[[[[[[[[ \\\)\3\>\H\S\^\h\s\~\\\\\\\\\\\\\ ]]])]4]?]J]U]_]j]u]]]]]]]]]]]]]^ ^^"^-^8^C^N^Y^d^n^y^^^^^^^^^^^^^___)_4_?_J_U_`_k_v_____________```'`2`=`H`S`^`j`u`````````````aaa(a3a>aIaUa`akavaaaaaaaaaaaaa bb b+b6bBbMbYbdbob{bbbbbbbbbbbbccc&c1c=cHcTc_ckcvccccccccccccd dd#d/d:dFdQd]didtdddddddddddde ee#e/e:eFeRe]eieueeeeeeeeeeeefff%f1f=fIfTf`flfxffffffffffffggg*g6gBgNgZgfgrg~ggggggggggghhh&h2h>hJhVhbhnhzhhhhhhhhhhhh ii#i0inJnWndnqn}nnnnnnnnnnn oo$o1o=oJoWodoqo~ooooooooooo pp&p3p@pMpZpgptpppppppppppqqq*q7qDqQq^qkqyqqqqqqqqqqq rr#r1r>rKrXrersrrrrrrrrrrrsss,s:sGsTsbsos|ssssssssssttt*t8tEtSt`tmt{ttttttttttuuu*u8uEuSuaunu|uuuuuuuuuuvvv-v:vHvVvcvqvvvvvvvvvvvww#w1w?wMwZwhwvwwwwwwwwwwxxx*x8xFxTxbxox}xxxxxxxxxx yy%y3yAyOy]ykyyyyyyyyyyyyzz"z0z>zLzZzhzwzzzzzzzzzz{{!{/{={L{Z{h{v{{{{{{{{{{||"|0|?|M|[|j|x||||||||||}}%}4}B}P}_}m}|}}}}}}}}}} ~~*~9~H~V~e~s~~~~~~~~~~#2AO^m{-;JYhwЀ߀ )8GVet΁݁ (7FUds΂݂ )8GVetЃ߃ +:JYhxĄӄ 0?N^m}ʅم'6FUet†҆ /?N^n}̇ۇ *:IYiyȈ׈'6FVfvʼnՉ%5EUeuŊՊ%5EVfvƋ׋'8HXhxʌڌ +N_pđՑ):K\m~’Ӓ'8IZk}ғ'8J[l}”Ӕ):K]nĕ֕ ,>O`rɖږ 1CTfwϗ'8J[mŘט /ASdvϙ(:K]oȚښ"4FXj|ě֛ 0BTfxҜ -?Qdvѝ,>Qcuў-?Qdvӟ /ATfyà֠ 3EXk}ȡۡ&8K^qϢ-@7G ^ $(P,0D4l.loBk{ ǃ7aw i ,@ i e%yn+ (c) 1987 MESTEMA from M.C.S. kkkkH"᪩qs ` Erreur disk !H"h5"hH *"hFhH "h8`2dJe,F"D$  n. bOK F" [l+  [dl+hK [pn+kd "btp ::jjjndjj ej)8)Petiv6tLNi9idrdt+k  hhK [vxv)vvn+(2qs kPas plus de 40 musiques !" k" "kHH}H "hh;8 [" ""Ͱ Ͳ1 qs aFichier Jukebox incorrect !ii [n en +Q ̓ك +;i qs Fichier WaveBank absent ! ̓ك +;i0"?F yqs dFichier wavebank introuvable !" "HH}H "hh" ""ͨ ͪ2qs fichier WaveBank incorrect !6eiHx "\(+;iHH"@"+ [n+kHH"+;ikGSWVMCS1.MCS  [d+k [d ""h ""+k [+k}hK";}H "hh;8 [i+;iڢ" [t "hfhhf f fȷfhf+kK [d+ "ᜁ [bt+k"K [dlnn: en)HH"/"h "+k [r+k [j+k\0 [Rtt rdt:=dd d )4P0 ȷ ȷ0)Gdrl+k+"kޅ0ȷ ȷ 0 )  f @ " df)i "" d )H0PH ): LȷLHڢ " ii) ) H0hhꀩ):ڊJH0H "+k0ȷTT0ȥ8stT0i`e% yn $(,048<+@D J e$,8DVbNt/P_ |9HMt 3;Ii6?BEHWjmps|7BGX`vy(+.1@PSVYbfj6:P_mqO^5jp )-rwT ,@ 12o^ Q!'-39?Ew K2W]ciou{tk K [ $"'I"&  F@  8  F.  &  " "+-H"h [K     "+k K {+         [K"& )  "7+WLLL LLLLL L$L(L,L0L4L8LLLL LLLLL L$L(L,LHH:hkHH:hk  ) E J  C )`  ) E J  S )`"1  "hzhh`E {8`*/c  `  `H"h` C 8`` S 8` H"h k H"v k"^ ^ h v `F E `"L "7 {" `  0  0`John Q. Public LASERWRITER i 0 0` i 0 0`    "  ~   ",% )5 )ɻD "C"O"   kH hH h8k"  ""k  HHHH"hiHHH" % )gi % % ) ik8``HHH$HHH "h`` ;[0 !  0+hH`0+hH`az`8 ` ;[ 0+hH` ;[0  Zȗ zȀ튇 0+hH` "`"` HH"` HH"`;i;i;iw ;i a  ;i K   hhhh6  hhh" hhhk"("HHH`   "h` % '%  +*/system/drivers  ` `*/system/drivers/printer.setupd*/system/drivers/H |g k | k pV;"OKCancelChoose Printerv1.2 Printer type: Printer port: Printer name: User Name:Insert the disk% [K oH"h)IM I6MHHG2"h#h%HH"%H#H"p T"""} wH"hYH )CH  o      ""7 w w )H'H "9H7H "))%H#H "+kHH)H'H#"h+h-')4/ȷ1HH1H/H#"h3h5HH9H7H#"h;h=794?ȷAHHAH?H#"hChE)H'H""1H/H""9H7H""AH?H""`-H+H)H'H""5H3H1H/H""=H;H9H7H""EHCHAH?H""`Iuqiv i}v   ,& #u+ #,9 #auQ #a Q ;[KU"iH::H:""" i Hڢ" ) V"+ ;i k K;[d Hy H H%H#H"hjy'{)2y7{9"y/{1y?{A( H H H{HyH"h q +hzzzzzzHkHHHHHH ,hhh hHHHHHH ,hEhGh1hCHH%H#H "h'h)HH%H#H) "h7h9 HHHH u1HCHGHEH uk ;[    HH 8H "h h i i +hH` ;[ H i iHڥHH   )   e i h h h  +hH` ;[HH  "hhhi hi 0 8 0+hH` [KH"h)37 <37HH12"hh HHHHH ,hhhhHHHH "h!h#HHHH u m wHp"hH oh0H HH "#H!H " )HH "+ kHH#H!H#"h%h'!#4)ȷ+HH+H)H#"h-h/#H!H""+H)H""`'H%H#H!H""/H-H+H)H""`3Wozs z U   G _ n S _U  O ;[KU"iH::H:""" i Hڢ" ) V"+ ;i k K;[d nH H HHH"hJ!#)+( H H HHH"h +hzzzzzzHk 2o^ $(, 04Q8<!@'D-H3L9P?TEXw \K`2dWh]lcpitoxu|{t              C     7 =S Pi c   C  S /h @v N^ vL  w   .>`   % %   L ` j x g k o s w {                      G p      )' UqY]aei}   & + 9 Q=Qy)  # c1 pp  ?WCoGKOc { G  U  9DJPV\bhntz  #&).14:@Cl  '48EUX[^l} +38=PX]b~ !36DIPUZ d ~!  #*-038;@EHX`jny}# ".25:OV[_kox| IM- !$),149rt ) $ " H "L " " """Lp) ppfh uhڀ `#<))녌%< ` Jdd<:#<<Ɣƒi&d$)4)$攠$)$撛$( Ő"接Ō$e$&i& ` P ` V b n J {iH"ᥪ0,,0ȗ0,ȗ,ȩ, 0 ,ȥ,$& (    db` Mpfh uhڂD `8(H,<)<,ȷ<)Hȷ<),h,ȗ,ȗ,P, ibZP,,z)ȩP884T0,<$>& (,0,) 0b   `  `攥Œ \ h t P Z` ee +  8  8  `8(HH"84T\H"80PZH "8,LXH "`(H` [ L V ,H,H"d) $HH,) "h$" 报` \" " ""~ " " "LL LLL [ ) # bd0)  b hb L [ b)  :b4 ee002i2&d0) 报  b80 $ , & n0e446i64)4$ t hL [  L b0  b;0 $ , & n4w046i64)4$ t hL [ $ &$) L )  n4Ō') 4$ bh e0 h b˩ tL [ L $ &$) LZiH "L$)e\H"HZ "L b n0eZ02i24e\46i6 0\0ȩ 0 ( t hZ\bL [d L ) ) V \ W녘념Ř9 )2 0""P @ń")I!) )v )h" H H" )H" )H" \LL{"#kdddddd,Ś,)Ŗ,)ŘX,)J Ř0 Ř$ŘŐLuŐ=f,)  UM Ţ 5 0 +,,.,,. 栥` ,.`8`J` [ L ) V, , `A L * %,),H$" \L \L [HHHH V ) ) ) ))d   ,),,) ,)f) ,)U) ,)D),7) ,)Œ$,)Ő)Đ 接Ō` `j8` \hhhhL \h LhhhL [ $ & V  $! ,$,$,$ \ L \ L [L [ V    \L [ )    b08 b  hLXiH " H  hL V,eX,.i.8)Hȷ8)z,0,0ȗ,ȗ,0)   ,ȣ ,ȣ ,X`$"   \ hL [ L V, ,  ` \L L " \L [ L [H{iH"h )녎) L !  o ` "" `  ,Ȋ, 8p:rt Y T)!, ,$"$),) ,$")  `" 8` J,e((*i* Mpfh u P` Pd K n,4) tprt )8媅d &` 8`{i "`{i5"` [ rL  KԊ"@H@HH:" *ƌХ~ " " "  @D * :ƌ  H^"~L [~ L 8 ^ D L [~ L D ^ Je L [;8 [dH@{iH"h+;id rL L )£ )ċKHH"dH"h)g @B ;d "H{iH"h΢,"H{iHԖԔ"hHԖԔHȢ"hɈHHȢ#"h:H`  Ecd¢HHH"h " "" t"᫥¨   Z"ƒL{" kddd̢"HH"肥HȢ"hIHȢ"̢"x HH "h@hB@ @ XIHH " =  3"{iH ") z# 0:HԘ"Ⴑ,"ႧWHH "hihk"HH "hh@ *B@ "HH "hh XHHeHeH "hmho =  3eHrڢ "hh'eHڢ "hh87i9dZZ7i 77sHqHZZZZ=ZZ "hhХ+ƩFƐHH"̢""` Vd,&,),) ` \# "᭹ iH"`HHHH ("h`)H "`"` 3?H?"h` HH"h `K n b @B0) #@4w0@6i@0@ *Ɗ  " h `{"kKkHiH"ᭋH:H:""᭳H:H:""g,"mgHS"gH:H:""mgHS"gH8 H:""gH:H:""oHmH"oHmH"k" k ;[ = L"(k ;[ LLKH &") `{id"`dn|`{in"`{i|"`ZZZHԂZZZ "hh`h` ,ȷ,``8` `H)h 8`h`,ń,ņ`$)H$44)4h`()iH() /p)ph`"8 8H8 i8H",H,H",)H",)H"`()e((*i*`,i,.i.`0i02i2`4)e446i6`@i@BiB`DiDFiF`LLLL L LL~`LLLLLLL L L $&`)`LLLLL XiH "H h8k V,eX,.i.8)Hȷ8)z,,ȷ,ȗ,) #, ,ȗ,X`$"   \k"h+Z;c;ڪ;cik"hǢ """"!D"g"""Dk"DS" "!D7"!"!>HH<@HSp  #Bt $)8M^fin !&).69?SVempv&+3HPV\awzjm >CFTW_w 0?E{szkyADUbh{~"(-03CLZu~ Y\}!FNQa%/3BOdgruy !5;DK^iloNTZ`flr} &aUc,y${]eos|"&D2Ugy)EKFt48<@D'TOOL028b % b ,@ FFFCFHFFKPp] Z ;[  C  " C HH;[ȷIhh+` ;[$ ȷ HH ȷ H  8   Z" H HHH "h hȗ z;[;c[k ;8[':' ') b8ʅ ddee I8 e Hн  e: h 8Р b;i:, U U,+" `ȷȷ0Ș:ȷ  80`eZH`''` ;[ C  ;[  C   ;[  Cs HH;[ H  "HH "hߥX   " ȷ  w ڠ H H"hhHHHZڠ H H"Zh` ;8@[ , ȷ  )N PRF)F;i@ z;[;c .~......+ V `d/d1  `   HeK 6J0(ȷ+HH HF)" hb!#i H::H:")ɀ+' ` #)H!")@   .w h:LH2"`UUUU U"`$ȷ 0!#!%6"H"hH"`HHg"=?%"  &"`/1/1H8"/"``)%) )3  : Y l53> 9 75599;I: Y  553`579d775;;79  ?=h" ` '`HI "hSJUL "`;; 77e;7 5 )7`8`9La 570=I70479 I$I   JL `H O"h=J0`` ` :H e H  Rh` L JL `e혨`?=H$"`8`JH(h4::dHH  HH :H HHFHH "4ȣ "`HH`  :8JJ0-HHL8JH "h H J dJdL h" (:H6HH"`HHg" H H H~"hz` HH;[  )| |# G G G 8 8 wH8H "  H"HH"hh+hhhkJH6HH"J:H"JJ0Ȋ`` ,"%7" S" :K +' `  =HHF:H6  ""F FFF2`< a `K))8`JdK`l H h H h ` L"`HH:H.H "he#!``JH{c`ڋ:kFF FCFHF F$(K,048P<p@]RZZ0^I{Wbl~u|cf +z}SV $)=Bax  UX[W\gq,/tǁT?lrb*@  ,@ LAUNCHER  "" chh @K{hHH"h:Hh:)" b " ch0h2030 000"  c0)0TA " ch0h22H0H " c"  c " cs  " c0 000"  c0)02kogir)i0o0 gik """""""" M"+HH"mH""ɳ8 Lc a")gޭޯ"(0&0gi`One moment please...!Select the file you want to open: o0/ */*/BASIC.LAUNCHERH *"h h  "` ""h`"" chm" cmiH " chhHmiH" c :"""""E  X8`8p miH" c9"miHiH" cmiHiH" cmiH" cmiHiH" cmiHiH" c7-" "%-" "-" ""h*""`,08iHmiH" c"` " "0a {8 0)NHP8J:H " "` >L \N1 LX\N256V LX\N700V .>L@\XN2 LX\N257 .>L Apple IIGS Program Launcher\N3 LX\N258 .`H *"hhh H"Could not handle error ;[)ɳ   +hhkK0)9C"<)I00`90`C<ՈIɈP8PRODOSSTARTBASIC.LAUNCHER"("h`Please insert the diskOKShutdown * B Z r 6 Bw H Tw  (w b nw n  n  s OpenCloseDiskQuitVersion 2.1 a)& HH";[K [ 0 "+zhhhhZk HH"HH 2"m o " HHo Hm H  "hq hs "H"hs Hq H "o Hm H ""`HHs Hq H#"hu hw q (s *(,(.4,y ȷ,{ HH{ Hy H#"h} h s Hq H""{ Hy H""`w Hu Hs Hq H"" H} H{ Hy H""`^     m        - ? L V h x       "5H\rOKVersion Reporter1. Tool Locator2. Memory Manager3. Miscellaneous Tools4. QuickDraw II5. Desk Manager6. Event Manager 7. Scheduler8. Sound Manager 9. ADB Tool 10. SANE11. Integer Math12. Text Tools13. Used Internally14. Window Manager15. Menu Manager16. Control Manager 17. Loader18. QuickDraw Auxilary19. Print Manager20. Line Edit21. Dialog Manager22. Scrap Manager23. Standard File24. Disk Utilities25. Note Synthesizer26. Note Sequencer27. Font Manager28. List Manager ;[Ki H::H:" H H"8*H::H:" )  !+ ;i k K;[d [H H Ho Hm H"h72 Ɂ( > H H HHH"h  +hzzzzzzHk"h/)H"")HH"hh) h:H)аh`4"` N/AH)H &".)H d  &""h "`.P"` ???? -3?E Kzo]gugo 7%^lrx~ * B Z r      6 N  ? j                  - # ? ) L / V 5 h ; x A G M S Y _ e k q "w 5} H \ r  $'4Hg#9e$06BHN[jr  %7K^jDOCSuHUSTON!% ' '(INT.MATHNU U %DEBUGGER9k T9T:#PACWW%INTRO5 U7 U7 'MEM.MANE܇U U 'MEM.BAS }qU U +MODE.EMPLOIW &\2 \3 'PRO.SELiU U $TASKk4U U $DEFIWW%CRACK WW*SMACK.SHITWW _______________________________ ! ! ! INTEGER MATHS TOOLS ! ! ! ! OUTILS Num{ro : $0B ! !_______________________________! ! ! ! DOCUMENTATION : Apple ! ! AUTEURS : Cheryl Ew Aie aie aie, notre beau pi}ge @ con {crit tout sp{cialement par les Anciens du LSD a comme un gout de d{ja vu. Non ? Vous ne voyez pas ? Et si je vous dit ONLY FOR YOUR EYES ? Ca va mieux ? Toujours pas ? D{cid{ment, vous }tes en retard d'un TGV, les mecs. Si vous n'avez toujours pas la disquette CANAL FUCK + avec ses mots de passe et autres astuces du m}me accabit, il faut toute affaire cessante vous pr{cipiter chez votre dealer habituel et lui extorquer ce GSWVPianone2Ac BassaAlto SaxDrumkit; - G`$S@- p$;? GoS_ --   0<H6~~~~}~~}~~~}~~~~}}|}|{{{zyzyxxyyyy{|yzyxxyyzyywxwttttsstsssrvr[skedi}]arxzdhYk`qwmvwlomohgpe^ggtw||t}þxpkllmmjfijigb`^TG><852,)(('')'%&+05689@IS\bgjllnmkimqw}zuqpnrvyyxssuw  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUĿ}skfbccddcb`_`bflrutoke_[VNFDA??>;<;::;<:75449?GORUVX\`dhlouz~zvoha\XURPNPNNLHFB><;960.,+*)%"#,4=FMRTY]aefecb\YUROPRTVYZZ\]^`bfmv}wrnjhfdb_^ZTQMJIFCCCCEHKRX^cffe`YRMHDB@>><:::<@FKS[^cfgjknnoprqssqoonmlkjknrx~|zywwvuspmjfb`^[VTQOMJHFB??===;87533357;@GOU\dls{~}|z{~ǿ|tnhc_][Z[[YXTONKGFFGJOT[binqtwy}}xsme^WPKHFFGGHKNRU[_behikjigdb`^YWTTSSTUW[]^`bcdefeedeefefedeffhhhhhhgffghgghfd`^ZVUQONKHEB@>@BCFIOU\bku|ÿ~zwvvwx{~~ytnkfc_^[Z[[ZYWTRQOLKJIIKNRW\bgkprvyzzyxusoke`\YWVUVVWXYZ[\_bfhjklmnnmmkkkjihffhhhjkkkkjjkjigfdb__^\[Z\]^_`abcccdb`_^\ZYWVUSRRPOLIGFEDDEGJOTZbhov}}yvusrrrsuvxz{{yvsmhc^[VTTTSSRQPONKGDB?@ABDGJNRV[`dimopponlifcb_ZYWTSRQRTUVYZ\_``abbbcbcdfghhhjjkmnoqtvxz{|{zyxuspmihffgghhklnoprrrrqonmjigfc``]ZXVTRTTTVXY]afkqw}¿Ŀ|ywvvwxz|~~|zwqlgb^\XVVUUVUUSRPNKGEB@@@?BGHLQUX\abdfffeb_^ZWUSPPPMNNNORTUXYZ]^^^^^__`__a``aabbbbdfimpruwxzzyyxwwvvuvuvyz|||xvuronkihfdccbdegkoqv||zyyz|~~ywusrppppppponkhd`\WURQRRUW\_cfhjllllkjhfcb^]ZWUSRPPPPRTUXY[\]^__`aa``````^]____bcefhikmnpoopoonmlllmoqrvz|~~|zxutrqpopppsuw{}ywwxxz}}}|{{|||{ywuqnjeb_\[[[[^`begikklllkjhgfdb`^\ZXVUTRSUUWYZ\^`acddefeeeddcbaaaacdegijlmnoprrrsrrrsrstvwy|}zvtrpomnnooruwz~~|{z{~|yvrolifedbcdfhjlopqrssrrpomljhdb_]YWTRQPPPPRTUWY[\^^``abbbddddddfghjlnpqstttuuvvuuvvvvwy{}~{wtspmmnmnopsvxz~ytpkiihknrx~~{xvtrqrqqstuvxxzzzyyxvwvsrpljfb`]ZXWWWVVXYZZZ[\\]]]^_`__```aacdegijlllnnnonnnnnmooorrtvxz~}zvromjhgeeeeeggjmnqtvx{|}~~~}~|}~}yvqnjgeffhlpu|¿|xvtqpoonqprtttvvuvvutuqonjgd`][XVTSSSSTUUUWWWYYYZZZ\[[]^^```bcdffghihjjjjkkjlllnnpqsvxz~~zvspnkihgeeffghjkmortuxy||}}}}~}}~~~~|zvqnkhfeeehkotzþ~{xvurqqqqrsttuvvvwwxwvtrpmkhd`^\ZXWXVVXWXZZZ\]]_``acccddefgfghhijllmnoppqqqrsuvvxy{|~|zvromkjihihijkmnpqsvwyz|}}}|||{{|||}}~~}|zwsoljgffgjnrw}Ŀ~zxvtsrrstuuvvvuvvvwwutqnkigda^[YWVVWWWXYYZ[[[\]^_``bbcccdcccdefgihijijjklnpprrtvvx{~~{xurpljhfefffgghjlmppruwwy{{zzzxwvvvvvwxyxwwvtqoljgfddegkou|~zyvtsrpooommnmmnoopqqppnljfd`\XVTRQPOOPPRSTUVVXY[\^___`````aabbbccefghghjjkkllnortuwy|~|ywtronmlklmnoprsuwxy{{}~~~}~~~}~~}{xuroljihjlnty~ÿ}zxvtsrppooooppqrrsststsrpolifd_^\YXVUUUVWYZ\]^_``bcddfghijiijiijjjllklmmmnopprstvxy{}|zwusqonlkjjkllnoqtuvxz{}~~~~~}|{{{z{||~~~}|zwtrolkihjlosx~}{ywvsrrpppoppoqqrrrrsssssqonkhfb`][ZXWXYY[\__`bcdeffhijkkklkkjjjjikkjkllmmnoqqrttvxzz|~~~zyvsqnkigedccddegfilmoqsuxyyz{zzzyxxwwxyy{||||{yvspnkihiikpsx}~|zwwusrqpnnmmnnoopqrssttuuuutronkhfcb`^]]]]^_acefgiijlmnooopppppopooonooooppqrsttvwxyy|}}~~}zvusomkiffdccbbcefhjmoqsuxyz{|||{{{yzz{|~~~|ywtqomlmnptx}~{zxvusqpoomnnnnoqrsuvvwyzzzz{yxvurpnljgggegghjlmorrttuvxwwyxy{{{|{yyyxyyyyyyz{z{||}~|xvtpnkhecb`__^^^^_`deghkmnpqsttuutttsrrstuwwxxxwvtqnljhghjmouz~~|zxvvttsrssstuuwyxz||~}|zxvurpnmlljklmoqstvxxy{{|}}}~~~~}|}||||{|}}}||~}~~~~{zwspmkgeb`^\[YYXWYZ[]``dfgjlnpprrrrrqqppprrtuvvwvtspmkheedehlpu|~|yxvtssrrsrsuvvxyz{|}~~~~~}|zyvtsqonlkklmnoprttvxyzz{||}|~~~~~~}}~~}~~}}}}}}~~~~|zxvsqmkgeb_][ZXWWWWXZ[]``dfhjlnopppppopopoqrstuvvutronjgfedehjoty~|zxwvuuuuuvwwxz{{}}~~|{xvtrppnnoopqstvxxz{{|~}}~~~~~~~~~{yvtqnkheb_\[YXWVVWXY\^_bdfhkmnoppqppoonoooprstuttqpmjhecaabdgkpw|~}|||{|}}~~{zxuttrrrtuxyz|}~~~~~}~}}}}|||{{|||||}~}||yvtpmkifc`^\[YWWWWXZ\^`behimoprtstutttrrsstvwxyywwvspnkigffhjmsx}~}}}}}~~}{zxuttrtuuwyz{|~~~~~~|~~~~~~~~}~~~}}|{|{z|{{}}|~}~~{zwtspljhed_^\[ZZYZ\]^bdeilmprtuwwwwwvvutuvvxyzz{{yxvspnkihhiknrx}~~||||}~~{zxvutttuwxz{|}~~~~~~~}~}}}|}~~|zwtqnjheb_^\ZYYYZZ\]_behjmprtvwwxxxxwvvvwxxy{|{{zxvtqnkihfgilotz~~}|||}}~~}{ywvutttuvxyz|||~~~~~~~~~~~~|}|{|{{||{{||}~}{xvrpmied`^\YWWVUVVWY\]`behkmpqrstttuttsrstuvwxxxwvtromjhfefgjmqv|~}}}~~}|zzyxwxxyz{{}~~~}{ywvssrrsstvxy{}}~~~~~~~~~~}{xuqolhfba_\ZZYYZ[\^`behknortuvvwvvvuttttuwwxyxwwurpnjhfddegkpty~||||}||zyzzyz{{|}~~|zxwutssstvxy|}~}zxuqnjheb_^][[[[\]_behkmortuvvvuvuttsrsstuuvvvtromifeb```beimrx}~~~~~}}}|{|||||~~~~{zxvutrrssvvxz{}~~zwurnlifcb__^^^_`bdfiknprtuvvvutttsrrqrrstuutsrpnjheca``abfkouy~~~}~~}||zzzz{||}~~~|{xwutsrqrrstvxy{|}|zvspmjhfcba``abdfhlnpstvxxxyxxwwuuttsttuuuutsonkgfc`_`_aegkqvz}|{|{}}||||||}}~}zyxutsrqrstvxy{}~zwuqmkhfcb````bddgjlnquvwxyyyxxwvuuuttutuuutsromjgeb__``cfjntx{~~|{{||~~~~~}}~~~{zxwvttttuvxz{|~~{z{|~}|||}}~~||{{|~}|{{|}~~~}{zxwvuvx|~yurpru{~{yxxz}{pf]WUVY^cglpuz~|xsolkkmqv}}yx||vog^VOJILR[fr~yj[ND@@DHMPSVY^dkrx~ytplifdb_[VROORXalx¶}|}~{xusoje^XSPPQTW[^adgjnrvwuph`ZVW\dnw~zqg]VRRUZ^`_[TMGBABEJQZdp}xlc\XWY]clv}unjils}ú~obWNGB>;9:=AGNU\cjqw|tfYND;1',>?BHQ]l|}vmd\VSSV[`eijjjjlrzȾ·~skfb`^ZUMC:303;GS^flrx{iYLB:3-' $/:ELOQQRTX]ciou{vkdbgqvnfa^^`dinsx~|od]Z[`ejllhaXNC9/'" #,9Lbxyri_VOJILRZagklkjjkovɾžxfXNGA<61.-07AKV`gnsy|jZJ=2)$"%+5@JRUTNF<2-.5DWlwnhgjsylaZWY^fnv}uonqw~{n^M=/%  %,5@LYhwwne^[[_cgiigeeehmrw{ҿķn^PF=720015:?EJNRW_iwydSF=99;>@A?;5.' '7K`szvuvy|~~yne``elu|~{yy||wodXJ>3+%""$(-5>HR]fou{wj^TOOSZbimnjc[TQS[hwǺ}sjbZQH>5.,.4=HVds}yx{xk[H5&&.6)!2F[lw|{wsoory}o_N?1'!"'.5:=><;;=93.+,3>KYeovyzwrkd\WUV\eq}}ɾyusqooptz~|yupjc\TJA7/+,3>N_p~tiaZURQQRUX\`dhlorvz;~skfb^ZUQMLLMOQSUX]eq~{riaZTOJFB>94-($#%+3=GPW[][XTQNNORVZ]adipxtlhjr}{rjc_]_cjt}tkaXND:2,)*-3;DMV_ejmprux{~vkb[XWXXVRJ@7228CRcu}vtw¶~rf[PG@<;1)%%(,16;?EJPVZ\ZTLB933:EUdr|}xsnjiikoty~}|{zzz|~unieb_[WQMJILQX`fknpqtyzhVG;426@N_p||ö{xx}ųsaSKHKQZcjnomjfeglt}~lYF5)##+7ER\bb_XOF>60./3;EP[djnonljgeccdgjmptx{þvleabhq|xnfa^^^][VPG>7349BN[hs|{uoifgluyaL:.)+2=JV`hlmkgb]YVW\fs|qjffksǷ}rg_YWX[_bb`\VPMMS\j{tcSG?<=BHOUYZYVQKE?;85568>?AEINRVYZZYVTTUY^ekorsrpnlklmptx}xqljlpwufZRMMQV]bgihd^VME>:;@KXhy|uokjknqrpkbWK@8437>GQ\fnuz{wspoorxʽxhYNGEGLS\fnu{|wrnieb_][XVSPMJHGHIJKKJGC?;98:?FNV]abb_\ZYYZ\^`bcdfgjlorvy||uokjnvſrf_]ahqyzrgZMA70-/5@N^p}xwy~vi]RIB=;=<=?BFLRX^bdec`]YWVVXZ^chnsvxwuqligipz¸pc[X\gvĹ|wux~o\J<303;FSamw~}|}~qe[TOMMNQSVXYXWVWY^fq{ofcchpyò|nfbbejotxyywurrsw|ysnhd`]\\]^```]YTOJEA>;98:=BIPW[\ZVQLHFGJQYaioqple]UOKJNWcrÿsg]XX^iw~~wk_TKEBBEJQX^begghhiknrv{yrmiec_ZTMD<5115=GTanz}yvuttssrrrsux|ķ~xtqpppqrrsux|}yupmkjkmoonjd\UOJGFGJMPSTSQOLJHHIKOTZagmpplf]TKFDEJR[enu|Ƚvqoryztnhc`]]]_`aa`__`djr{|n^PC9449CO[fouz}|wrnkjmqxµ|ywxz{}}~{uoid_[YXY[_beeb]TJ@8338@KWajopojd]UNIEDFJQXahnqplga\[]do}xoe[SMIGHKPW_hovyzyurompvyj[OD<756:@HQY`ehiiiikou{{qg]TOMOU^hs}ʿ|tpoqu{{wtqpqu{th_YWY^djorsrng^SH=50/3AGPYbioqojaVJ@:9?K]r{wvy~qf\WUW[agkmmljhgghjnrx|ocZSNMNQV\bfhhfcabekt{ri`YUTW]fpz³{ussv|wpkkmryxof\SKEBBEJQX`fklke^TLECELU`jqutoh_WOGB><=AHTbs~{{~|vronmnnmjfa\XUTUWZ_dkr{}wqmhc]XTQOOQTVXYYZ]ckuxphaZURQSV[ahnt{¹}wrpqtz}ywvuvwz~xk_TLHINU\bed`ZTNJGFFGIKOTY_ejmmkf_VME>9768:8:AKXftvnklpwsh]TMHEEHLRX^chlorvztfYPJIKPV[]]ZVRPQV_jw{k[L@97;CO[hry|~~~ǻ|ywwx{}yvuvx{~~wndZPHBACIR[bgjihffghjkjgb\UOJFEDDDDCBCFLT]gpw|}z{}|rh^VQOPSX^bfggffhmu}unga\YXWVTRPNNPWaovmf`[YWWXYZZ[[]`enz}|~}xtrpolhaZSLHGHMRY_eilopponkf`YRKEA@@BDFHIJJJKLNRW\ciqx~zuog^UNIGIMSY_dinu|ynbWNFB?@BGNXcnxxoe[QIC@?AEKT^jw~|{}~{xupke^VOJFEHMU^gouxywsmf_XRNKJJJKLLMLLJHFEDDEFIMT]iv~~xmbWOIGHKQX_gmswz}xhZPJGIMRW\aeiknpsux}ufYNFCBDGKQX`is~Žwog_XTQQSW\afkosvxxwsmf_WQMLNRX]``\VNE=8558=BIQZdny|nbYSQRV[_ceedba`bfmwwkb][[\]]\ZWVUW[`gnv}yj[ND?>AFNU\bgjmoqtw|wog_XTQQSW\afkosvxxwsmf_WQMLNRX]``\VNE=8558=BIQZdny|nbYSQRV[_ceedba`bfmwwkb][[\]]\ZWVUW[`gnv}yj[ND?>AFNU\bgjmoqtw|wog_XTQQSW\afkosvxxwsmf_WQMLNRX]``\VNE=8558=BIQZdny|nbYSQRV[_ceedba`bfmwwkb][[\]]\ZWVUW[`gnv}yj[ND?>AFNU\bgjmoqtw|~|yvrmhd`\ZXXXZ\`dhmrvz~|wromlklnqtw{~|wrlf`ZTOKHFDDEGIMQV[aflrx}xof^WRNLKLNRV\cjqx~ytplifcba``abcefhkmoqsuwxyz{{|{{{zyxwvuuttuuvwy{}~|yvtrponnoqtw{ytojgca___`bdgkosw{~zvqmieb_]\[[\]_adhkosx|¿ui^SIA:5100148>DJQX_ejoruvwwvtrolieb`][ZYXXYZ[\^`bdfhijkkkkjhgeb`]ZXUSPNMLLLMORVZ_djqw~zuqmjhggikotzĽyrlfa\XURONMLLLLMMOPRTVZ]afkqxĹxk^SI@940.-./26:?DIMRUY[]_````__^]\\\\]]_`bdgiloruxz|~~|yuqmid_ZVQNKJIIKMQV\cjrz}vpjea^]\]`chnu}~}|}|xvtstuw{~ytpnlkkmosw|vlaVLA8/'!#&),.01222222222357:=BGMSZaipw~}wrnjgeddfhlqw~xof]UOJGEDEHLQW^elsz}{zzz{}~ysmhc^ZWUTTUX[`elrz|umg`ZUPKHECA??>>=====<;:97531/,*)(((),/39?FNV_hpy|vpkfb_^]_aejpwxrmheb`_^^_`bdegilnpruxz}Ⱦzrle`[WTRQRSTWZ^bglrw}ztokfc`]\ZYYXXWVTRPLHC>81+$  &/8BKT\cimprrqokgb]XSOKHFEFGKOU[ckt|{wsplifda`_^^^`adgkotx}zuqnljiijknqtx|~~|{yvrnic\TLC:0'  $-6?HPW\adefec`\WSNIEA><;;<>@DHMRX]chnsx|}zuqlgc^ZWTRPPPQTW[`flryztpkhfedegilptx}zpf\QG>5-'! $).49>CHKNQSTTTTSQPOMLKJJIJJKLMOQSUWZ]`cgkpuzzupmjhhhiknruy}~{yvutsttvy|ztplihggikmqux|}{zzz|~ƿuld]VPKGCA?=<;;;;<<<<<<;;:99876543210/.-,*)'%$"! !#&*.4;BIQZbjrz|xurpoooqsvz~~|{{|}|wsqonnopqsuwxyyxwurokgc_\YXWWY\`els|ľ{vqlhc_ZVSPMKIHGGGHIJKLMNOOONMKIFC?;840-*'%$$%'*-28?FOW`iqy~|{{{{}~{xuromkjiiijlorv{zupkfa]YVTSSTVY]agms{¾|vqkfb^[YWVVVWXZ\^`abccba_\XTOIC=72,($  #',17=CJPV[`ehknoqqqqppnmljigedcbaaaabcegjmqux|{wrmhc_\YXXY[_cipw~{unhc^ZVSQOONOPQTWZ^bgmsy|wrolkjjklnprtvwxxwusplhc]WQKE?940,(%#"!!!"$&),048<@EJNRWZ^aceghhhhgfdca`_^^_`bdhlqv|{vqmjhggikoty}wqkfa\XTPLIGECBBCDFIMRX_fnv~{wrmhc]WQLFA<841/---/148;75322358>>@BEINRW\afjnqstuvutrqnljhfdcbbcdegiloruwy{}~~}|zxvtrponnnnoprtwy||vpkfb^[YWWWWY\_cglqw}~wqkea]ZXVUUUVWXZ[\]^^^]\ZWTPMIDA=:7543457:>BGKPUZ^bfhklmnnmlkjihgffffghikmpruwz|~}{ywutrqppppqrtvy{½yqjc]XTQONNPRVZ`ekrx~~|||}~|zyxxxyyzz{{zyxvtqmjfb]YTPLIFCA@???ABDGJMPSUX[]_`bccddddccbbbaaaabbcdfhilnpruwy{|}~~~}{zxvtrpnmlkjkkmnqtw{~}||||}úzuqnmlmoqtwz~~{xuronlllnpsv{|zwsplhd_[WSPMJGECA@@??@@BCDFHJLMOQSTUVWXYYYZZZZZZZ[[\\^_acegjmoruwy{}~~~~}{ywtqnligecbbbcdfhkorv{~{wuromlkkkmosw|ž}zvspmkjiijlnquz~~zvqmiea^[XVTRQPOOOPPQQRSSTTUUTTSRQPONNMLLLLMOQSUX[^adhkmoqstttssqpnljhfdba_^]]\\\\]]^_`bdfhknrvz~~xrlfa\YWUUWY]bhowĿ|xuqnljhhhhikmpruy|~yupkfa]YVSQOMMLLMNOPRSTUUUUTSRPNMKIGFEEEEFHJLORVY\_cfhkmoprssttuuuuuuuuuutsrqomkigeca_^]]^`beinsyyqjb[UPLIGGHKNSY`gnv~}zwusrrrrstuwy{}}yurpnmkkjjjjjjihgeca_\YVTQNLJHFEEEEEFGIJLNPRTVXZ\^`cegilnprstuvvutsqnkhd`\XTQMKIHHIKNRW]dks{|uoic^[XVUVWY\`eiotz¾~|{{{{||}~}|{ywvtrpnljheca^\YWTROMKIGFEDCCCDFHJMPTX]afkosw{~}zvrmid_[WSPNMLMORUZ_els{{uojea]ZXWVVWXY[^`begjlmoqrstvwxy{}}|||}~~|{yxvsqnkgc_[WRNJFB>;976668;>BGLSY`fmsx}}xsnhb\WRMJGEDDFHKPUZ`gmtz~zwtqomkihhggghhhijjkkllmmmnnoppqstvy|}{yxwvvwwyz||wqke_XQKE?:63100248=BHOW^elsx}}ytnha[UOJFB@>=>?BEIMRW\bglqvz~}|{zyxxwwvvuutsrqpnmkigfdbaaaacegkosx~~|{zyyyyyz{|}wph`XQJD>:754458;@EKQX^djotx{|}}|yvsnje_ZVQMIFDBAABCEGJMQUY]aeimpsuwyz{|||{{{zzyyyz{{|}~~|yvsokgda^[YXXYZ\_cglrw}~}{zxwwvvvvwyz|~~vnf_XRLHDA>===?ADGKOTX]aeimoqsssrpmjfb^YUQMIFDBAAABDFILORVY\_adeghhiiiiiijklnprux{~}xsniea]ZXVUUVWY\_cfjnrvz}{xvsqponooqsuy|ÿ~vpid_[WTRQQQSUWZ]`cgjlnpqrrqomjgda]YVSPMKJIHHHHIJKMNOQQRSSSSSSSSSTUVWY\_bfjnrw{~{wtpmjgdba`_^^^_`bcegikmortvx{}}zwutttuwz|Mstudioxjazzcombo.wbnkPianoStr. BassAlto SaxDrum KitSus PianoPluckBassTenor SaxDrumkit2VibesPnoGuitar1sGuitar2sGuitar3sShort PnoMute BassShort Basp02xdP-6<0<7yynQ<0pQ<<2v((<-e!z\lG}#k <Add~4n+h<<(+ {Phd=<0<wn<(+VhM<>?d=<0<p<V<!@e"u0[J<<<d<<<0<BlocksHarmonicaSaxpetGuitarClarinetFluteHihatianSopranoBassSaxtoneClarinetPianoBasssVibesetHihat2D3C1SR11251Q14**(((ossa Nova by Ed Bogas zAEA@B-! E! @"- E C @IGA E @ C H A GE>A&A EA AA >! >! A! E E A > E A > J 2EA J L -A MA JA GB /" /!M!J!G 0 / - A+ X VA LA H! L! H 0 0 T 2 L 0) )"h)Hh((k8 喀Z8 P8 F8 <8 28 (8 8 8 & 8 *(k8 28 :8/WORDPERFECT/SYSTEM/START /WORDPERFECT//WORDPERFECT/SYSTEM/LIBS/WORDPERFECT/SYSTEM/DESK.ACCSTUP/TOOL.SETUPATLOAD.04FF1')/WORDPERFECT/SYSTEM/SYSTEM.SETUP/ATLOAD.0UP#No x.SYSTEM or x.SYS16 file found $No SYSTEM directory found $A .SYS16 file was found $No SYSTEM/P8 file found $No SYSTEM/P16 file found $ Error reading volume directory $ Error reading SYSTEM directory $!SYSTEM/P8 not tree storage type $"SYSTEM/P16 not tree storage type $Error reading SYSTEM/P16 file $SYSTEM/P16 file bad $Unable to get user ID $"Unable to reserve memory segment $Unable to set library prefix $"Unable to relocate System Loader $Unable to load setup file $ Unable to load TOOL.SETUP file $Unable to load Desk Accessory $Cannot allocate direct page $Unable to Shutdown Setup File $ ;8[HHEp "z i y 􆇥 HHE+"HHTp "z i y8 R i ii%$ i&i5( i*HH "H ;i+kH`ڢHZ 0hHϋϋ0\ hh +zhk D Seg Load Err-hH"Whh@x00K ) Z"dz ኏hH0H(0h \i i((8k+0) )  0) x0h0) )"h)Hh((k H8 喀Z8 P8 F8 <8 28 (8 8 8 & 8 *(k8 28 :8 <8 >8 C8 H8 M8 @R8 AVk8 X8 ^8 \äۮ\\\ \ۮۮ`ޘ\$70 [WSɗ )/?a{5)߀A[)0 :.ZȻzɗ:(k(8k8KhH hh(kKhH "hh(kl_"00L/MUSIQUE/WP.SP.TMP.TMPARTACCSTUP/ATLOAD.0UP /WORDPERFECT/ /WORDPERFECT/SYSTEM//WORDPERFECT/SYSTEM/LIBS/ /WORDPERFECT/>@ABCDEFGHIJKLMNOPDESNOUES Patrick 19/06/87 19 avenue des pins 38090 Villefontaine TEL:74 96 42 98 껻11 12 AZEEEERTYUIOPOIUYTREZZAQSFDGHWJK 0 EZREZOP~REZ ZRTEZTREOP~* TLMRLRMTMRTLRELTMERLTERLTRELTMRLM%LM%L%LL%MLE%ZLEZA{{"'( @\!}]('"* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&PATRICKTW&    AZAZ ZAZ = 121212PRINT COUCOU U1 AAC= A  1   IZ908U~8Z & {" 1111 111111111111111111111111111111 1Z1Z1_3 3320 1 11 2 4334 30 POIMLKJHGF䬝ckk|xfnlpbyslkSptPiUZ}MNzzipr{v~x@L~Ym[nQ|uVu_bĈHctx\|uMTrmygǙ|oadtpoOScu~|x[iMmvvm}lmx~vy|sCrpdqnnahXqqyvtUi{nsqxgt\]yp]ugysZa|krflelr{inUiprszpZu}[{b]us{~{|aps{mZt}j|mtawmrtq|Wn_^x}}~ncm{lq}}x{rydnw}qygy}xyfq~rbw{u[Zookk{raz^`rjytx|zcfvcyqxhfvgsbZiqTholqs|oe}|~Xxf}t|nb_pqxz{oxqmshbnUpzjybrdLwYQyuiazs]kZ_~rgj}ktk}rR^gi~{|}p\`nnsoixc~m_xqmIhmj{zz|`c|f\nmvx~ezaypn}xU~k|o^^i\iihyqZz…bXh|wy~cy\_isyy\~ikr[jxta{e]V{a_~htmhWkyd~rxmz|fcvx_w|rf|{wg~wsp|osq~wz}uq|wqp~v|ttwsv|`~~w^r{qwi{yqgujnuog}Wf}pg~}nrwo|pv|rin~vx}izuRjytt}^lqux}f]~tql}irov}]PzyZdelr`a`mzptf|~zxhxnnpwut{kswxgr~ywo}uafmj~}ijcdevhl~wqyrck|yz{s[qfnyo}pzwzv~ployqx~zphv_~TYvgns{Zuf}wszmyimhtzsrm|wv}werznrnk~usx}ittg{klze}wxnpt}yfpvt~osr{xjkxy}no||r|wwib~wpuv{zpvxeM{ygkrfzqytpt|t}qin}}xg|pp|bxqzw}z{{sndx~qrylr|ztsq{}}lm~x^x|{~vty~t~}uq{r~|}~{jshwvh{||x~ri~gw{~yw{{qtxd{jk~m`ywvnuv_}e_ltsulvzkh|wxjwspmsr{}ylzfzz|zNzmfrod}tpjmvxuuy|}r{bpy{wynzswziuttx{g|tyjysn|kyqu~ur|Feu|]{z~y|vc{qe}tztpuxurx{ZynS}swbcit{~~tpux\ow|q{rqry{hxozdwzwk{ztqylx}pfpvyvwqvw~~qwun|{fqxxpsqrTyrhyky|trv~|k{rpr}xrsds|w|kjw~}uypvpynvhjqlg}sumyl|x~^d~|qnvz}^p|oxvyv~m{fkutqxu|i{v~zxjfpvyydshqgtxlqu}jvmns|}oXrl}wwqo|u|vnkvysz{z~t{}~rhyvw}x~tqgrxwk{suyy|w{xlf{~iw|p}wsyXsruymrqp|u|~zx~qusr~xirghtf|p}gjvf^w}kwxp_jkw|uo|svvfm{oo{{h|btby}r{rzyzlpvenhuxxttjwy}ii~xwqsrqsczwxhz~tawirx{{~xv{~{svrooxvpkyuzyyqz~xsskz}|rd|zysz|if~}tomn~z|otgj~wpasypwys|yyutzu{}yhwxxtrj|kp}zze|tz|x{vw}~l}grmjxgz]gsf|qwqn~xx|~t~{~]oocnr~~xwv}pi}r{rxws}}{}~ytrw{mnsz~{{{vqwdusupqqrqrng~}tu{zvot~{x{upp{u~yy}fuz{pywwrvpywsy}twtpvr{~}oe{vmxowzuzzswnzttpyztty}yzo|^y}y{vqrpw~|unsyj{zu|exwyz}sq}o|mzz~{}ruxyv{z}}}zvqvyy|wsygd}o|spzzom}~{{v{uy{|{oyxiouw|zy~~uwg}}kyezpztuvou}syvhtyw~jvqa~yqy}zkylzzqy}~yzt|`xyv}}sokszsx}zqu{wx~zy}nskt~~tpm~w~z|vt{}t|ywruyztozkt{{}r{uw{|zv}{ouquslzuiz{z}oyz}{~z}djw}~rsu{u~xg{v~x|yv}}v|y{~y}y{{w{vsyy}|z}}vz|{ysyv~y{y}~~{wy|{x|||zvz~v|y|mtwxz|zrwwpv|zm|t~{t|{y}x~{z~q}lzwszl{t_tr|u||kxwtk}|||xttx|}zzut|pt~utux~rttx|wiy~twv|yvx{x|lxl}ntuwumyjrmqx{~~oz|u}ngyqx~rw~yyyvyrrr~pt}~v~zy|zvsx~~tsvu}{}zkv~quwu}t|w{v\sz~}x~{ysos|}}sow}x|zx}{~~vm}v~{ypw}vr{yadwyyz~vo}{w}zusz{kxzo}~wy~|wzz~zz~uxu}vdu|{e{us|}z{s{{~{|s}wu{}u{{{rwz}wtxsvfx|u{~{xuz{{|{{z{}~{~}u~{z}nxvtyley|vxy|wx{tuwzz~~~~~ww~|ww}~~yzy|xzrw{yxxy|yq{w{ws}{~|w||yu}ru|t{||wp~xlq|u}noy|q~y}~r}zzs~nx{~|}x}wzvpz~z~q{yx}yu|w{y|v|~y|w~z{xyzv}}xzrty}|ux~~|zxu|}}}|w}{{{{|tyw}wq{w}|}{~|qswx{usy{y}wy~}{{z{}~|y}||{}wwy}}~|{}|wx}}vrv~zw}v}t{{zzz{vz}xzx}|x~~{|~x{{}~}{x|ys}|zxy}}}}|}txw|~~xx~z~v}up{}}y{{~}~~|}y{{|}}{|zyv~~u{{|y}}yyx|yx}~t~u{yy}~xzxx}yyt{~{z~y{|~|~{~~wu~zz{}x|}~|~w}~{{~~}}~~}}}~y|~{~~~}~vz{}x~~~zuw~|}{~zr~{y|~{y}}u{~x}}y~||xt}yw~}}w~vzy~~}}}xz|{}|{wu~{y}{{{w||{~xx}nu~}}z}~}|~t}{u{wv}vw~}xxz~{rzr}}}zty}x}|q~{~|zyy}zw|~{~|~~~{{{y|}{u~|x~|{z{|}z~~}~}{w}y|}~~}{{z{}z}|y}z{w}~|{{|~}}}}~}~~}|}{|{xz~}|{}}{~yx|~y{|}~~~z}~{{~|zwz||yyz~|y~~|}{|x~|}{|x}~~w}u~{~~|{~}{zz~~}}~}}{{}z||{~}zzz}}~{}~}}}~}||zz|}~{}~}z~z{~{}~~zz|~}s{}|y|}}{|~~{~~{}||~|~{||~}{}~}{~~|z~~|zz~|~}~{~~~~~~~~|~}}~~|}~~{{|{}~~{}{}z}}~w~}~}}~|}y|}{||y|~}z~~~~~~}~|~|y}}~}~}}}~~~~|~~{}~}~}{}~|~}~|}}{~|~|~y~|~~|~~~|~|}~~}~~|~}~}{~~~~~|}}~}}~~}~}}z~|~~}{}~}~||~~~~}}|}}~{|}}yy~|||~~~~}}}}}~~}~}~~~{|~~||~~}}~~~~~~~}~~}~~~~~}~}|~|~~}~~~~~~~}~~~~~~~~~~~~~~~~~}}~}}}}~~~~~~~~~||}}}}~~~~~~~~~~~~~}}}}}}}}}|{{zzz{|{||}}}}}}}}~~}~~~}}}}}~~~}}}}~~}}|}}}||||}||||}||}}~~~~~~~~}~~}}||||}}{{{|{{zzzzyyyyyz{{||||}||}}}}}~~~~}}}}||||}}}}~~~~~~~~~~~~~~~~~}}||}}~~~~~~~~~~~~~~~~~~~~~}}}}}}~}~~~~~~~~}}}}}||}||{{{{{z{{{{||||||}}||}}}}}}}}~~~~~~}}~~~~}|}}||||||||{{||||||{{{zzzz{zzzz{|}||}}}}}}}}}}}||{{{{||}}|}}}||||}}}||}}}}}}}~~~~~~}}||||}}~~~~~~~~~~~~~~}}}}~~~~~~~~}}}}}}~~~~}}}}}}}}~~~~~~~~~~~~~~~~}||{{{{{|}~}}||||}}}||}}}||||}~~~~~~~~~~~~~}|}}}}}}}~~~}~~}}||||}|||}}||{{{{{{||~~}}}}}}}|||}}||||}}|||}||||}}}}{{z{zzzz{{{{zz{{zzzzzyzzzzzz{{|||{{{{|||||}}}||}||{{||}~~}}||{{{{zzzzz{{{zzzzyyzzz{||||}}}||}}}}}}}}}||}}||{{zz{zzzz{||}}~~~~~~~~~~~~~~~~~~~~~~~~~}}||{{||}|~~~~~~~}}}}~~~~~~~~~~}~}}||||}}|||}}}}}}}~~}}}}}}}}}}}|||||{{{{{zzz{{{{{{{{{zzzyyzzzzzzzz{{{||||||||{{{{{zz{{|||||}|||||||{zzyyyyyyyxxxxxxxyyzz{zzzyyxyyyyzzz{{{|{{{{||}|}}~~~~}}}}}||}}}}}~~~}}}}}}}|{{z{{{||}}~}~~}}}}}}~~}}~~}}}~~~~~~~~~~~~~~~}}||||}||}||{{{{|{|||}||||||}|||}}}}}}~~}||}||||||{zzyxxwxyyyyzzzzz{zz{{|||||}}}||}}}}||}}||{{{{zzyyyzyyyyzyzzzzyzyyyyxxxxyyzzzzyyyyzzyyyyxxxwxxxxwwxxyyzyzzzzyzyyzz{z{{{|||{{{{|{||{|||||}~}||}}||{{|{|||}}}||}}}|||{|{{{{{|}|}}~~~~~~~}|{zyyzyz{||~~~~~~~~~~}}}}}}~~~~~~~~~~~~}}}}}}}}}}}|{{{{{{{zzzyzzzzz{|}||}}}||||{z{{{|||||{{{zzzyyxyyyyxxxyyyyzzzzzz{zzzz{{{{{{{zzzzyzzzzzzyyyxxxyyyyxxxxxwwvvxwxxyyzzzzyyyyxxxxxxxyxxxwxxxxyyzz{{{{|{zz{{{{{{{{|{{|{{{{{{{zzzz{{{||}}~~~~}}||{{||{{{||||||}~~~~}}|||||}}~}}}}}}~~~~~~~~~}}}}}}~~~~~~~~~~~~~~~~}}}}~~~~}}}}}}~~~~}}||}}|||}|||||||{zzyyyyyyyxxxxxwwxxxxxxyyyyxyyyxxwwwwwwwxyyzzyyzzz{zzzzzyzzyyyzyyyyxxxxxxxyyyyxxxxxwwvvwvvvvvwwvvvwwvwwxxxxwxxxxwxxxxxxwxxxxxyyyyyzyyyywwxxxxxyyyzz{zzzzzzzyyyyxxxxxxyyz{||}||}}}|||||||||}||||||}}||~~~~~~}}}}{{||||}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~}~}}}}}}}}|||}}}}}~~~~~~~}||{{{{|{{{z{zzyyzyyyyyyzyyyyzyzzzzzzyyyyxxxxwwxxxxyxyyxxwwxxxxwwwwvvuuwwwvwwxxwwvwwwvvwwwwwwwwwwvvvvvvuuttttuuvvvvvvwwwvvvvvvvvwxxwwxxwwvvwwwvvvwwvvvvuuvvvvvvuuttttttuuvvvvvwxxxxyyyyzzzz{{|{||}|{{{{{{|{{{{|||||||{{zz{{||||}}{{}}}}~~~~~~~~~}|{{{{zz{{z{||||}}~~~~~~~~~~~~~~~~}}}~~~}}}}||}}~}|}}}||{{{zyyxxwxxxwwxxxxwwxxxxwwwwvvuuuuvvwwxxxxyyxxyxwwwvuuttttttuuuuttttssttttttttttuuvvvvvvvwwwvvvvuuttttttuuvvuuttssssssttttttttttuuuuuuuuuuuuuuttttttuuvvuuttssssttuuvvvvvwxxxxyyyyxyyyyyxxyyyy{{{{||}}|}}}}}||}}}||}||{{{{{zzzzz{{||}~~|xvtrponnmmnopsuw{}}}||~~~}}}|||||{|~~~}~~}}|{zzzyzzzz||}}~~~~~~~~~~~~}|{zyxwvuuttssssssssssttuutttttuvvvvwwwxxxxxyyyyyzyyxxwwvvvvvvvvyxyyyyxxxxxxwwwwwwvvwwwvvvvvvvuuttsssssrrrqqqpppqpooppppppqqqppqqqppppqqppqqqqppppponnmmnnnnonoooopppppppooonnnnnnoprqssttuuwvvvvvwwvvvwvvwwwwwwwxyy{{zzzz{{zzzzzyyz{{{{||}}}}{zxwwwwxxy{{}}|{zyxvvvwwwwwyxxxxxz{y{{||}~~~}}|{{}|{{{||{{z{||}}||~~~~}}|||zyxywxxuuuutssrqqqqqqqqrrssssssttssssssttttuuuuuvvvuuuuvvvvuuuuuuuuuuuvvvvvwwvvuuvvvvvvvvvvvwwwvvuutttssssrrrqqpppponnnlllklkkkjjjiiiiihhhhhhffffgghhhhhhhhggggggffffghhhiiijjkjjkkllmnnonoooppppqqopppppppqqqqqqqqrrrrrrrrrrssssttuuwwxxzz{|}~}~{yvvuuutvvxy|}~}zwusqponllkjjkklmmnpqrsuvwxx{|}~~~}}||{{{||||}}~~~}}|{yzxwwvuutsqqpooonmllllllkkmmonnpppppppppppnnpppqppqqsstttuuvvvwwxwvvwwwwwwxxwwxxxxxxxxwwwwxxwwvvuuuuuuuutttsttsssrrqpponmkkjhhgghgffeecccbaa````____^^]]^^^^__````____^^^^^^^^____``aabceefghhiijkkkklkkkkllllkklkkkkkjjjjkkkkkkklllllnnnppqrrrstuwxzz}~|wspnlmllmnqsvx}{xsqmjheca_^]]^_`bceijmpqrtvwxyy}}}~}{{zzzzwwxxyyyy{||}}|{zxwvtssrqppommlkjiigggfffeeffeefghhjjjjjkkkmllllmmoooqqqrrrrssstuuvwwwwxxxyyyxxyyyyxxyyyyxxwwwwwwyywwxxyyxxwvvuutsqpponkjihgfedba``____^^^]\\[Z[ZYYYYWWWXVWWVXYXXXYYYXWXXVVVVVVWXXXVXYZ[\]^__acdeefgghhiihhhhgfffeeeedeffggggggggggggffgghhjkmnnqrtuvy|}ǿwokdb^^^acimrw~{xroljffcb``__abccehjkmpqrstuvvwwx{|}}~~}{yvutrqooppprrtuvy|}~|zxwutrqponlkjihffedddcbbbcceeeeghiiiikklmlkllllkkkkkkkkllmnoopqsstuvvwwxxxxyyyxyyzzz{{{yyxwwwwwvvvvvvwwxxxxwwvutssrpnljihffddcbaa``_^]]\[ZYWWUTSROONNNMMMOOOOQRSSSSRRQQQPOOOOOOOOPPQQSUVXYZ\]^^^_`abbcccdddddcbbbaaab`ababbccdeffgghhiiiiiiijknnpqsvxz}~ǽsme^ZXWWZ^ckr{|upkec^[WTSSQOOOPQRTWZ\_adhjmortvx{|}zxvuttssttuwy{}~~zwsrpmkigfdca`^^]\\\\\\\]^__``aaaaccdeffeeffffffggdddeeeefghjlmnoqstuvyyz{~~~~~~}}}}}}|}||{{{{{z{{{{||||||||}|{|{zyxvtsromkigfedba`_]\[ZXWUUSRQPONLKJIGGFFFFGGGGHHIIJJKKKKLLLLLKLLLLKMNOPQSUWXZ\]^abcdddeeffedccba````____a`aabbbbbcccddeeffgghhghikmoqsvx|ɽ|qf^UPJJILQX`hr||yywy{|vpkd`[XSQOLJIHHJKMPSVZ_cfkoruxz|}~|zxvutssrrrstuwy{}~zwtqonkjhfdb`_\\\\\[[\\\[\]^`abcddffffffeddcbcbbbb``aaaabcdeghjkmnprstuwyz{|}}~~}}||{{yyxwutssrrsstsuuvvxyzzzz{{zyxwvurpmlkigfdcba_^]\ZZXWUTSQPOLKJHFEDDCCBBCCEEFFGHIIIIIIIIHGFFFFFFGGHILNPRTVXY\]^_aaaabbbbaaaaaa``aaaa``aababbccccddddeeddeeffghijlnqswz|k4 "&),.1:RWA9QZD1U{?Q6Nj8Ͽvrmh_[^_]XSKB91( $$        !"&'*+-./010*(18:8776778687877779?QZZSNLKSdnle`_btyȷzoqyrfgnh[X_c^[\\YXUSSPKEA>=978>>?=<=>=;:9641.,**)+*++,,,++*&"  ##"#&$"%%$!$"" !" $&  &*,-00*%(+,./12355668889::::;<<<<======>=>>>>>CScfc\ZXWVVUUTTUUTUV[gnokheiqxy{}}wvxvomnrvtlfglng^^b`ZWZ\WRSVUOLNOLKIFDDDEFCA>>>@@?@?><==<<@@@?><;88899:::967576789::::;;:::=??<<=?>=>??>=?ACEFDA?ACEFGIJJKKHEEGHJKLLNMNOOLHGIJNSVWWUSQPPPUZYYXYXWXXXXXXXYYZZZ[[[[\\\\\^`ehhfffffeeeffgmpqoonmmmouvuussrrrv{{{zyxz}}|||{zzz||~~~~}{|}}}}~~||{|~~~~~}{z{|}}~~~~~~~~}~~~~~~~~~~~~~}~}}}}}|||||||}|}}}|||}}}}}}|||}}||||}~~~}~~~}}}}}}}}}}}}}}}}}}}}~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}mSLQ_kˏQhˎ1?p Hou#oЅ31C"dmfȌz͡keڹsJܠDYΕ;mfb{*HٸlDܫmG)9]ϜtK>3!={ߩZN^afwa;6IL0yٹ|TTllA (WU]ؗryW7aĘodTwnMLlPO|εr_UriR_w:XvP]ӜHMη~B.RmNFJ&-`껩ּwB%#7)*TxSs;1fޚxSKGA,9jѥxeƵd0#WymmygbZ[ALyoJLxʬx75Zab[Y˰v6 4apñxbe_Z̲oQV^R$3Uca[~iZ|XSp{̞}zi9(@=Ixoly\b}VS6,EXmw}}tFARlxqcekv~]QNkn_laY|zhtgegwtoiaZf~pywdyqtznmy}jZZWbsxou~yly}io}vrx{luy{zwznjjmx{qocjv|}|xen}y{twtmryyqrxjtyu|yzz{}~jd~~wwzxs{|~tt~zxs|y~u{~yvz|v|}z{tuw~}~sxvy|zy|szxvt{u~|zxz||~{z~~}}vy~}xu~~}z~}|||}y{~~|}~}zx|}z|~y~~|~~}~|z}~{|~~}{||}|~~|~}}~}||~}}}||}|{}~~~}|~~~~}|||~~~vsflqoUɸwwE+ihu^$O~{Z I0JqLpKǡelńQTg|\l\oHCis3z0CҸY;ewkjq?0X]Uq{ļlZӞjf\UiHMɷhqaCໍlB}lC/]ZzqӲQFۄLWWA*1|_l68bew{pimZz.g*BYeev;PhYQhǖ? 7TvJsaswɞZ^–jCp"sjGZvYrqyMyOF1Na-^vsgv7`ϣYg~umL#BFlzNţtdJ[lFz~s\yNvuqx~{Sqc?ƅcةB8C< ȱ<ȱ<ɿ  ac? a a >? , a`l<ȥ<<ȥ<RP9pxP<XPiGIGpP>PPjlcPCP?x8dPDP?fPFPgPGP??hPHPjNJN>~?kPx<KPH}9?HYI@HUSAHBH))CH99DH99EH)))9FHGH9) HHIH9999JH??KHǃ9LH????MHNHOH99PHQHyYCRHɉmo#SH!)) THUH??VH??WH߁XH99YHZH9 !19[H\Hǃ;]HUU^H_H`HUUUUaHWWbHwwcHww'dHwweHWWGfHgHχhHiH jH??kHߏ'wlH}mHnHoHwwpHqHχrHsHGWWtHw7uHvHLJ??wHxHw''wyHLJzHw7Ggw{HWSE|H}HUSG~H-I H!Hoo"H#H$H&o{2%HF&db&H0~IV PH'H(H>wc)Hcw>*H**+H|,hp-H.H``/H@ 0H~AA?1H2Hbq_F@3H"AI64H5H/K{{{36H>II27Hay8H6II69H&II>:H;hvwc=Hlllll>H~<?HQ__@H8|E>|xAH~~BHII6CH>AA"DHAA>EH>IIAFH~ GH>AQ2HHIHJH @?KHwLH@@@MH~~~NH~~OH>AA>PH QH>AARH vprSH&O]]y2THUH?@@?VH?x8WH?`?`?XHwwYHxxZHaqyOGC[H\h""]HJUUU(^H_h`HaH8DD<|xbH?DD8cH8||DD(dH8DD?eH8||TTHfH~ gh|hHpiH}}}jH@}kHvlHmHx| x xnHx||xoH8||DD8ph""qh""rHx||sH(LTTd(tH?D$uH<||@@<vH <|@0 wH<`<`|<xHl||lyh~zHdt|\LD{H8|~UTH|H<|yB@<}H8|}VTH~H XiiL` H hɻs ߅<= l lݠ@Ȅ>?Ѩ9A\c`{}e|u8  g RPQ  L*Y ߅ jݠ<@LAȱ<^ȱ<_@A^\c`{}e|u8 =A'(>?P>Q?? LcLҠҍ Ԯ ōР̠àč̠Šƍ̠͠ԠԠԠ±Ԡ·  ԍҠ֠ƵĠð ðԲ͠Ķ͠ĶҠĶÍ͠ōҠùԠųƠŲƲҠŷ̠tvwxyz{|}~ùÍԠĸōԠč֠Ÿ͠ŸΠƵ ǠҠ΍؍ҭ؍Íàíǭ֫Ҭ؍àíǭ֫àЧ֍ӍàҠԍҠԍРŠ챍 ٮ ִζб ؤ ͍ ؤ ͍ 卪 ؤ 卪 卪 󍪍 ή 썪 󮍪 ʍ 󧍪̠̠⠽̠蠽̫̫ŠƍİˠϢ򠽠ȍҠԠ報٠ҠҍҠ͍ҠԠ獠Ҡҍ ٠àԩٍٍٍ̠Í٠ٽ٠占٠٠ 퍠٠ 占Ѡ٠卺±ٍ詬ٍРܧ à꠻ Š꿠 㧠 卺꿠Рৠ àꍺРѠ占РŠ姍РŠꍠÍàʍꍠ٠ Š±Ҡ͍Ҡ͠占ҠҠͯͫ͠à͍ŠԱàͫŠԱ٠Ҡԍؠijij ij ǧij؍ҠԠǍ؍Š獠РĴ堧 챠Š철󍪭ԱҠ͍ҠԠ ԍԍ٠ԫҠ͠ б٠ٍР⍠àԠٍٍٍٍвؠ⍠٠гٍٍРܧàꍠŠ꿍㧍꿠Р্àꍺРѠ占РŠ姍РŠꍠÍàʍꍠР򭱬ؠ Ѡ荠򭱬؍Р Ѡ荠à퍠ŠвѠԠ􍍪철Š쳠 󍪭؍ѠŠ占 ŠгԠàŠԱàԱ͍РŠԲͫРѠԠԲÍààб占àбŠб󍍪ԠŠԠ쳠ŠԠԠѠ󍪭Š٠٠ ؍ŠٍҠԍٍ؍Šō ҠԍҠ֍ˍҠԍҠԍ΢ҠԍҠ͍Ԡč̠  占ؠ卺ҠԠ占؍Š덠Ҡ̍Ҡԍ 占Р ѠčР  ŠĠѠԠ 퍠ؠ؍؍؍̠Šб󍍪Ġ ʍРˍѠ􍍠ؠ؍؍؍̠占ŠԠ󍍪٠ҠƠ ÍЫ ԍРԲ 卍ԠРҍǠԠƍ**************)* FACTARIF *>************** n:(21):D$(4):G$(7):R$(13):K%16368(175)256(176)416 :AZ%48:CE100:ZE.01:SE$"--------":E%27:E$(E%):W0$(E%)"O":FI$"TARIF":A9%57:AP%46:AV%44:A(R)(R.5)CE SLOT1:"Port Imprimante D$"OPEN"FI$:D$"READ"FI$:Z1,AA,N$,DV$:ABCEAA(AACE):D$:Z2Z1:Z5Z5:"TARIF en vigueur au "DV$::7:Z" articles r{pertori{s":P(Z5,1),NO$(Z5),T(Z5,1),Q%(Z5)e NO$(0)(N$,6)","(N$,8):D$"READ"FI$:N1Z:NO$(N),T0,P(N,1),T(N,0),T(N,1):P(N,0)T0CE::D$:T00:CL$"CLIENTS":D$"OPEN"CL$:D$"READ"CL$:CN:D$ JJ%CN10:R%(CN),AD$(CN,3):D$"READ"CL$:I1CN:AD$(I,0),AD$(I,1),AD$(I,2),AD$(I,3),R%(I)::D$"CLOSE" 5:958:770:S1ė: S11İ130:DF$RE$:MF%M%:440 (:830:PR$"N"20:1200:3000:S1350,700:3230::22::"ENCORE UNE ":830::PR$"O"40:900:I1Z5:Q%(I)0::20 ; FORMATTAGES <(" "(W),3);: F(W)ZEW0:W$" 000":80 HW$(" "((.1CEW)),7)$ PS2(W$,2)"00"W$(W$,5)" ":A ZW$(W$,5)","(W$,2):U dWW$".. ":y nW(W)W$(" "(W),2)" ": xW$(" "(W10),3):W$(W$,2)","(W$,3): " MASQUE DE SAISIE H%7:V%4:T%2:L%8:V%:"Date :JJ MM AN" P%0 CH$":":RE$"":V%:H%:":";Y K%,0:X$:X%(X$):X%13Č868:X$:CH$":"210:200p X%E%CH$":"ĺ: X%8180:CH$":"170:T%6150::570 (CH$,1)"."P%0 CH$(CH$,(CH$)1):X$"."X$;:150*T%230,260,220,1000,225,220:Q%150:CH$CH$X$:X$;:(CH$)L%1150:R$;RE$(CH$,2)AV" NB ARTICLES vQ%X%45(X%AZ%X%A9%):} Q%X%63X%44(X%AZ%X%A9%): SOMME Q%1:PQ%X%AP%X%AV%:(P%PQ%)X%A9%PQ%1X%AZ%ıPQ%X$".":P%1 Q%0: DATE 4Q%1:X%AZ%X%A9%ıb(CH$)2J%((CH$X$,2)):J%1J%31ı(CH$)5M%((CH$X$,5)):M%1M%12ı"(CH$)8A%((CH$X$,8)):A%1900A%CE(A%50):330:J%F%ġ:140,(CH$)5(CH$)2X$X$" "6Q%0:#?" DERNIER JOUR DU MOIS E@M%MF%(CR5)(1(MF%12)12)JF%31(M%4M%6M%9M%11):M%2F%28:T1A%4:T1T1(T1):T2A%CE:T2T2(T2):T3A%400:T3T3(T3):T1T2T30T10T2F%29T]" IMPRESSION FACTURE >^LT5:N1Z5:LTLTQ%(N)::LTLT3R2(EAV)EAV2S2AK2ASH_MG11rb91)"VALLAURIS le "DF$;:LT40ĺW0$;d:::MG)CL$:I15:::T00:MG)"Code Quantit{ D{signation"36)"Prix"B$13)"Prix Total":eN1Z5:Q%(N)370 hMG):NZĺ3):365jWN:60ym6):WQ%(N):60:6)NO$(N)48(NO$(N))):WP(N,S2):70:W$14):WQ%(N)P(N,S2):70:W$:T0T0Wr:Rĺ88MG)SE$:WT0:70:43MG)AV$42)W$:WA(T0R):70:48MG)"Remise "R" %"31((R)))W$:T0T0WW|EAV410:88MG)SE$:WT0:70:43MG)"Marchandises "AV$29)W$:EWE:70:43MG)"Port "AV$37)W$:T0T0EAVWAV:72:43MG)"Avoir "AV$" du "DA$24)W$:T0T0AV&88MG)SE$:WT0:70:43MG)"Total "AV$36)W$:S2WA(AAT0):T0T0W:70:48MG)NO$(0)30)W$:88MG)SE$:WT0:70:43MG)"Net TTC"38)W$YS2WA(ABT0):70:48MG)"dont "NO$(0)3)W$AK434:17MG)"Acompte de";:WAK:W(W)İ70:428W$" "((W))W$" frs. Reste @ payer";:WT0AK:W(W)İ70:432W$" "((W))W$" frs."c:ASĺMG)"T{l{phoner en cas d'avarie pour communication du num{ro de la police d'assurance.":MG)"Adh{rent d'un C.G.A. nous acceptons les r}glements par ch}que. ";:S12ĺDW$" SAISIE FACTURE ):14:"FACTURE"B$" du "DF$:23:"si termin{ tapez ";::"RETURN"::35,20V%14:H%14:L%2:T%5:V%:"Code article :.. ( ? pour consulter)":135:N(RE$):RE$"?"RE$","İ2000N490:NZ5450:NZQ%(N)660/P%1:V%18:H%10:L%4:T%3:V%2:868:NO$(N):V%:"Quantit{ :....":140:X%E%450:Q%(RE$):Q%(N)Q%(N)Q%5:868:"ajout ";::"ARTICLE "N" ";::KQQ%P(N,S2):" "Q%" x "P(N,S2)" = "KQ:T0T0KQ:7:868:"cumul:"Q%(N)" "NO$(N)9:868:15:"total partiel = "T0:958:450" EXPEDITION Etc.. :2:958PT%1:V%3:H%16:L%6:V%:"Exp{dition "AV$" :......":135:E(RE$)V%5:H%16:L%2:V%:" Remise en % :..":135:X%E%500:R(RE$)T%1:V%7:L%7:H%11:V%:"Avoir "AV$" :.......":135:X%E%510:AV(RE$):AV5306 T%2:H%27:L%8:V%:22:"Date :.. .. ..":135:X%E%520:DA$RE$T%1:V%9:H%16:L%7:V%:6)"Acompte :.......":135:X%E%ĴAV520:525EĢ11:5:"Assurance";:840:ASPR$"O" CONDITIONS qAK(RE$):16:"1 : sans condition":"2 : r{gl{ ce jour":"3 : @ r{ception":"4 : r}glement fin de mois":"5 : 30 jours fin de mois":::"VOTRE CHOIX";::" < >";:15&K%,0:PR$:CR(PR$):CR1CR5550:CR:CR620,630,640,650,650:16:958:(41(DW$))2:DW$/" SELECTION CLIENT k0V%21:V%:10:"nouveau client";:835:PR$"O"C%0:T%4:H%15:L%80:V%:958:"Nom & adresse :...";:140:CL$RE$:615::P%1:T%6:V%23:H%33:L%2:J0JJ%::I110:IJ10CNI10:JJJ%:590D("0"(IJ10)" ",4)AD$(IJ10,0):NOXV%:G$"num{ro client ou RETURN ou <= :..":140:C%(RE$):C%CN600:C%J10C%11J10JJJ%Y:CL$AD$(C%,0)". "AD$(C%,1)".":AD$(C%,2)""CL$CL$AD$(C%,2)ZR%(C%)RKR%(C%)cRKRRKdCL$CL$"."AD$(C%,3):f" D{composition adresse [gLA(CL$):PT0:I03:AD$(0,I)""::I1LA:X$(CL$,I,1):X$"."PTPT(PT3):LALA1(PT1):617vhAD$(0,PT)AD$(0,PT)X$~i:k" CONDITIONS DE REGLEMENT lDW$"":vDW$"R{gl{ ce jour":DW$"R}glement @ r{ception":<320:DW$"R}glement avant le "(F%)" "("0"(M%)" ",3)(((M%1)A%),2):\" ARTICLE NON REPERTORIE T%4:V%16:H%13:L%24:V%:"D{signation :........":140:NO$(N)RE$:T%1:V%18:H%6:L%7:V%:"Prix :.......":140:X%E%660P(N,S2)(RE$): " IMPRESSION TARIF MG7:435:TA$DV$::S42S2:MG)"Code D{signation"13)"haut diam"3S4)"Tarif"7S4)"Code D{signation"12)"haut diam"3S4)"Tarif":W0$ N1Z1:MG):WN:60:2)NO$(N)25(NO$(N))):WT(N,0):100:W$2):WT(N,1):100:W$;:WP(N,S2):70:W$7) W%NZ1:WW%:60:2):W%83S2ĺNO$(W%)24(NO$(W%))):WT(W%,0):100:W$2):WT(W%,1):100:W$;:WP(W%,S2):70:W$; ::  MENUS 6:"0 : Termin{"::"1 : Facture"::"2 : Tarif"::"votre choix < >";:15,! K%,0:PR$:PR$"0"PR$"2"780:PR$:S1(PR$):S1ıi!:"1 : H.T."::"2 : T.T.C."::"votre choix < >";:15! K%,0:PR$:S2(PR$)1:S20S21800:PR$:B$" H.T.":AV$"HT ":S2B$" TTC ":AV$"TTC"!*TA$"Tarif"" "AV$" au "::!4 IMPRESSION? !">T00:22:12::" IMPRESSION ";*"CG$;L"H:" "(8)(8)(8)(8);v"MK%,0:PR$:PR$"N"PR$"O"ĺG$;:845"RPR$"> ":"" IMPRESSION ENVELOPPE "22:12::G$"ENVELOPPE";:835:PR$"N"ı#1200:3250:3220:I18:W0$::I03:AD$(C%,I)""ĺ70)AD$(C%,I)*#:3230::E#" ENTREE DES TEXTES `#Q%X%32:Q%X$(X%)f##" Imprimante pr}te? #22:958::"RETURN";::" si l'imprimante est pr}te ";#G$;:K%,0:PR$:PR$R$1210::$" Recherche par nom article $34,V%1:35,21,$V%2:958k$V%2:"Cl{ article :";AR$:958:N(AR$):(N)N102020$NO$(0),AR$,Z5,N:NZ52020$V%2:958::V%:H%1:N:$ " Impression en-t}te $ 3250:3230$ FO$"CARAC.INC":32404% E$"M"20)E$"!"E$"X"E$"'";10)"GUY HACHETTE";10)E$"$"E$"Y">% 3230[% FO$"CARAC.DOUBLE":3240s% E$">"E$"T16"E$"M";}% MG15% E$"!"E$"n"E$"'";MG)"tremplin micro";E$"$";5)E$"N";"La Petite Motte"& E$"!"E$"n"E$"'";MG)"TREMPLIN MICRO";E$"$";5)E$"N";" Senill{"& 32307& FO$"CARAC.INC":3240=&& &0 20)E$"!"E$"X"E$"'";9)"EDITIONS JIBENA";9);E$"$"E$"Y";11)"CHATELLERAULT";&: :&D 3230&N FO$"COUNT":3240&X E$"!"E$"Q"E$"<"E$"A"E$"'";'b 6)"1 Av. du ABCDE"96)"Fghi JKLMNO"6'l 6)"23456 PQRSTUVWX"85)"R.M. YZ## 12345 67 89"n'v 6)"Tel. 78 90-12-34"82)"SIRET 123 456 789 01234"' E$"$"E$"M"E$(34)' " Commandes Imprimante ' (E%)"q"::"15 car/pouce' E$"c":D$"PR#0": ( D$"FLOAD /RAM/"FO$",A"SLOT:"Charge                  𙛙       𫩚                         𚛹  𙹛            𹻻    𪛛      𹛙      𹪹              P      UUUP     UU𻙹DODDDD@      PU𹛹D@DDDD@      UPU𻹩@DDD@    UUU D@DO  Л𙫻@@    𛹫@     @    𹙪O@   @@ ʹ  D  DD𛚻 𹙛  DO  𻹛  DO 𛛻 D  𩹹   DDDD@     DOODDDD@  DODDDD 𹫙   DOD DDDD 𙻹DOD DDDD@  𹻙  DD@ DDDD 𙙹 DD@ DDD@  𹙩  DDD DD@  𩚹 DD@ DD@ 𙙩DDDD 𹹙𫛚 @DDD  𛙛  DD@ 𻙛 DDD 𫹻𩩻 DD@  𹻻  DDD 𩹛  DDD 𛛙 DDD@@ 𙙙DDDDD 3330𙙙  DDD@DD 333330𙙻  DDDD 33333330𙛫  DDDDD@ 333333333𼹙 DDDDD@ 3333333330𼩛 DD@DDDDD3333333330𬻹 DD@DD @333333333  DDOOD303333003   DODDDD@303333333 ˺ 𩛙DD333333333   D@3333333303 DDO0003300   ODD3330  O DD@ 330𺻹ɛ 𹚙D 3?𛙻̛    0330𻺛 O @330𹻜ɩ DD30𺹜̻  OO D@ 30əɻ DDDO 30 ODDDDOD 30̻˻ODDDDDO ʻɩ̻  DD@  ʛɛ̹ɻ DDDD" ̚  " ˻̹ ̩   ʚ˼˛ 𙛹̻ ɹ̫  𛛺̻𻚰𹙻  ̻𺩛 ̻  ɻ𻻻𻹹̙ 𻺹 𩻛 ə 𛺺𛚙𙙐𺛻˹ UU 𹙛𺻪 ̚ UUPUUPP 𛛪̻   UUUUUPUUUUUU  𻙛  UUPPUUUUUP  𹻫  UUUU UUPP 30 𻪹 𺻛UP UPP330 𹻫  UUPUP  330 𻻻  "  PUPUPPP 3330D𙹛 ɛ"UP UP 333DDDDD  𹬜̻"PUUP  UP 3DDDD@3 ˰̻ UUPU P 333DDDD3 ʙ ̫ U P 3330DDD@00 ɛ ɻ"UUP  3330DDD@33 ə " PUP P 3330D@D@3333  ̛" PUUUPU  333@D3330   ˹" UUUUUUUUP 330D@3330  𙩹̹"UUUUUU  D3330  𙹹" UUUUUUUP3D333 𹩙" UUPUUUUU 330DD@0330  " PPUUUPUUUUU 3330DDD330  "PUPUUPPP  333DDD333 UUUUUUUUUU 333DD@330 UPUUUUUUUUUU 330DD@3330 𹹻UPUUPUUU 3330DDD@333  𹹚PUPUUUUUUP 333DDD330  𚩻UUUUUUUUUUUUUU 333DDD330  𺚫UUPPUUUUUP   30DD@3330   UUP  3330@333   UUUPP  33330D@333   UPPP  33333DD@30    PPPP П  333333DD0  PPP 3333330DD33  PUP  33333333DD@33  UP   033333330DD@333  UPU  03333330D330 UPU 330333330D330 𻚻UPUP  3333333330 𫙛PUP  3333330330 𙻹PU 3333D3330 ๚UP   33333333330 뙚P  333330D@33330 "칙PP  333330DDDDD30й/ PU 3333DDDDDD0 й  PUP 333DDDDDD@3330 Ы  UP@ 333DDDDDD@3333 к@  UU DD 3DDDDDD@3330 D@  UU UPDD 𙐙 DDDDDD3330DD@  UUUUPDD 𙐙DDDDD@3330 DDDDDD@PUUUUUPDD  DD@3333 ЙDDDDDD@  UUPUUUUPD@ лD@DDDDDDD 𻹛PUPUUUUUP@UUP DDDDDDDDD@PUPPUUPUUPP@@UUUP  @DDDD@PUUPUUUUUUUUUUUUUU@UUU   DDD@ PPUUUUUUPUUUUUUUUUPUUUUP   Л@DDDUUUPUPUUPUUUPUUUUP  Л@DDDD UUPUUPUUUUUUUUUPDUP   𻻰Л@LDL@DUPUPPUUPPUUUUD@@UU @  LDDD@UUPPUUUUUUPD@@UP 𻻰 @ D@PUU UUUUUPD@@UU DDO@ D@ @PUPPUUP@PUU  𙙙DDD@  @DUUP  DDD UUUPUU ٙ@D   UPUP  O  UUU 𙙙 O@  UPUP O@   PUP  OD D  UUUP@D @  PUU  @ @ UUP @   UUU  @@ @  UPUUU @@ @  UUUUU DD D D UUUUPDD@D D   @D@ UPUUUUU @ D D @DDDUUUUUUU D DD @DDDUPUUUUP D@ DDDDDDUUUUUUUU D@DDDD@UUPUUUUUUUU P D@ DDDD@@DUUUUUUUUUUUUUUP UUUD@@DDD@DDD@UUPUUUUUUUUUUUUUUUUPUPйD@@@DDDDDDD@UUUPUPUUUUUUUUUUUUUUPP D@@ODDDDDDDUUUUUUUPUUUUUUUUUUUPPл@DDDDDDUUUUUUUPPP  DDDDDUUUPUPUUPPDDDDDDD@ UUUUUPUUPUUUP鹛DDD@DD@UUUUUUUUUUUUU UP  DDDDDDUUUUUUUUUUUUU UUP  DDDD UUUUUUUUUUUUUUUUUUUU PDDD@UUUUUUUUUUUUUUUUUU 電@DDDUUUUUUUUUUUUUUUUP  DD@UUUUUUUUUUUUUP 뺰@DD@UUUUUUUUUUP @DDDUP  @DDD  @DD DDD@ @D D@@DDD@DDDD@DDDDDDm @P` p  fm @P` p  fm @P` p  fm @P` p  fm @P` p  fm @P` p  fm @P` p  f8L2C)pJJJJ IH(ȱH:=IH[H`@HcH  $ +   I/H`JLNGȄBȄF aK  haaFF  mJm# KKJ UJ )J ۈ) ;J3ȱJFȱJGJKaȄM  aaNNJFLGJL L? &PRODOS `DaElH$?EGvѶK+`L HHLy XP LM ŠϠĠӠS)*+,+`F)) (*=GJFjJJA QE'+ '== `@ STSP8QSS8 m P o R(8R Fonte FO$,( D$"PR#"SLOT:(9)"250N";:Y('" Le 22/05/85 puis modif multiples... ('"module CONT2 accroch{ au BASIC ('"Dans cette implantation CONT2 ne supporte pas 80 cols XiiL` H hɻs ߅<= l lݠ@Ȅ>?Ѩ9A\c`{}e|u8  g RPQ  L*Y ߅ jݠ<@LAȱ<^ȱ<_@A^\c`{}e|u8 =A'(>?P>Q?? LcL*********************7* Installe FACTARIF *S********************* v D$(4):D$"PREFIX/T21/FACTUR"D$"-PRO.FP"D$"-FLOAD"(D$"BLOAD COUNT,A$4000":D$"BSAVE /RAM/COUNT,A$4000,L955" 2D$"BLOAD CARAC.INC,A$4000":D$"BSAVE /RAM/CARAC.INC,A$4000,L955"g <D$"BLOAD CARAC.DOUBLE,A$4000":D$"BSAVE /RAM/CARAC.DOUBLE,A$4000,L919"z FD$"-FACTARIF"45,18.6,TVA 18.60%,01/01/87 Assiette plate,18971,225,2,23 Assiette creuse (indisp.),20658,245,3,23 Bonbonni}re 1[,13491,160,8.5,14 Bonbonni}re 2[,11804,140,7,12 Bonbonni}re 3[,9612,114,5,10 Boule GM,9612,114,13,11 Boule PM,6408,76,9,8 Pique fleurs GM,9612,114,11,11 Pique fleurs PM,6408,76,8,8 Bol @ riz GM,9612,114,7.5,11 Bol @ riz PM,6408,76,6,9 Boule @ col GM,15599,185,15,11 Boule @ col PM,9612,114,12,8 Cachepot GM S PO,54806,650,23,27 Cachepot GM S GO,54806,650,20,27 Cachepot GM D PO,62395,740,23,27 Cachepot GM D GO,62395,740,20,27 Cachepot PM S PO,28246,335,17,21 Cachepot PM S GO,28246,335,15,21 Cachepot PM D PO,35413,420,17,21 Cachepot PM D GO,35413,420,15,21 Capeline GM.S.,54806,650,8,36 Capeline GM.D.,70826,840,8,36 Capeline PM.S.,38786,460,8,31 Capeline PM.D.,54806,650,8,31 Vide poches GM,7083,84,4,14 Vide poches PM,5649,67,3.5,12.5 Coupelle GM,4132,49,3,11 Coupelle PM,3288,39,2.5,9.5 Cendrier creux MM,8094,96,5,12 Cendrier creux PM,7083,84,5,10 Cloche,18550,220,21,15 Cloche @ pied GM.S,56492,670,34,20 Cloche @ pied GM 1/2 D{c,74199,880,34,20 Cloche @ pied GM D{cor{e,92749,1100,34,20 Cloche @ pied PM.S.,24874,295,24,16 Coupe de Paris GM.S.,24874,295,6,26 Coupe de Paris MM.S.,18550,220,6,22 Coupe de Paris MM.D.,23609,280,6,22 Coupe de Paris PM.S.,12648,150,5,17 Coupe de Paris PM.D.,15599,185,5,17 Coupe 75 1[,24874,295,12,23 Coupe 75 2[,14755,175,10,16 Coupe 75 4[,12648,150,8,14 Coupe @ glace GM,21922,260,8,22 Coupe @ glace PM,15599,185,6,17 Cruche ronde,21922,260,23,14 D{jeuner carrel{,12648,150,8,17 D{jeuner d{cor{,18550,220,8,17 Egyptien GM.S,70826,840,42,20 Egyptien GM.D,92749,1100,42,20 Egyptien PM.S,40472,480,32,15 Egyptien PM.D,53963,640,32,15 Jardini}re grecque,24874,295,15,21 Jarre 1[,27825,330,22,16 Jarre 2[,18550,220,19,14 Jarre 3[,10961,130,15,12 Jarre 4[,8094,96,13,9 Supprim{,0,0,0,0 Lacrymatoire,27825,330,32,9 Ligne droite,31197,370,21,19 Ligne droite D{c,38786,460,21,19 Pichet carr{,20658,245,19,12 Pot @ tabac,12648,150,11,10 Pot @ tabac D{c,16442,195,11,10 Pot @ cigarettes,9612,114,11,8 Pot @ cigarettes D{c,14334,170,11,8 Potiche 1[,31197,370,27,16 Potiche 1[ D{c,38786,460,27,16 Potiche 2[,18550,220,21,12 Urne 1[,48061,570,28,20 Urne 1[ D{c,62395,740,28,20 Urne 2[,31197,370,23,17 Urne 2[ D{c,38786,460,23,17 Urne 3[,18550,220,19,13 Vase 3 anses,51433,610,26,21 Vase 3 anses D{c,62395,740,26,21 Corps de 3 anses,47218,560,26,21 Coupe de Paris GM.D,31197,370,6,26 Coupe @ glace PM.S,12648,150,6,17 Pique fleurs 84 GM,10624,126,11,11 *,0,0,0,0 Cachepot GM TREMPLIN,50590,600,23,27 Cachepot PM TREMPLIN,25717,305,17,21 Galet PM TREMPLIN,8685,103,0,0 Galet GM TREMPLIN,9781,116,0,0 Pot bas TREMPLIN,11804,140,0,0 Massue TREMPLIN,19393,230,0,0 Vapo bas d{cor{ TREMPLIN,8094,96,0,0 Poudrier d{cor{ TREMPLIN,8094,96,0,0 *,0,0,0,0 *,0,0,0,0 Structure 1}re ligne: Nb articles/2,Taux TVA format APPLE, 'TVA XX,XX%', date du tarif JJ/MM/AA Structure fiche article: D{signation,HT en centimes,TTC en francs, hauteur,diam}treFINDER.DATA0BTHCRACKELPLOISARYDEBUGATHASYSARY5DEFISELPLOISARYHINT.MATHASYSARYINTROATHASYSARY5HMEM.BASHASYSARYMEM.MANHASYSARY5 MODE.EMPLOISARYPACUGATHASYSARY5PRO.SELPLOISARYT SMACK.SHITISARY5TASKSELPLOISARY}RL ,@ main L "{""z!">#") ;8[iR"፞ H"፞ h"፞ HH H "፞ hHH"፞ iH@H"፞ "{Z_:"፞ "፞ "፞ aa"፞ "፞ modqsduwdy{d}dddddd;d{imH"፞ H"፞ HiH"፞ iHH"#$% " ?+;ikprinter: console: keyboard: a5^5 *     Y!}dO<:8w { I  iM9DJPVx[/O"!;!X!    Y       `  ~ | u Vc Q < 8!w!O!o!!t"!m"!f"!_"!X"!Q"" )#<#}#<##<#t/26K9wKFG GEGGeJHqJwJKwKLELH2-\$z~Lԁ GMSY2R 8[\ cY5Lw߂y, E 0hNg:VtG[lz*@h~"4;6Gs2Kaw{37>Gbx|%)07>ENi48?F_uy &Hd  $/7F FKV[glz%Y hPW/lp!%SWk:^qI];x 4 2?FMY{f*}3@GNZNǚ3~5@DNYmrux{ qy"IT  $.t '7es #6CVfv .AYf~ I\t>T :N[hxD~._-AEXfu.15HVe~!%8FUnqu ,vⅹ2s$TP{n3! G!0"KTmF>ӻ1Y"+2e?.ζ#iÞD"KTuE|'R'Մ MO?P?mfȒi. 4}c3E@ 厐HֹO# OƜ՚/ds\zTn>ΐB1ܳy CTD"KTVul5cE!`N4lu*0bQ^A&k2?-'I5bQD"KTTukd>+rå MpN ѤǗ䎐H֟Uu մ-7ꊴ_h嶅?/PUq9P3cb;C3!0"KTZ{dz kTKPZ/pP;`QD"KT{u vJv{=5`V^2tM+;Ф(D;X1"&%\ 厐Lw7𴠙* P,m<9GDD"KTuZ^_Kư!rݠ|UXD"KTuS=8x8PpB5p+E2&Y3@ 厐L?r{xݴ JRsx}^=ۖD"KTuSQ #hYѬJd=.y]ڒҸx B;SJ׌ڌ˴6ͣk^վ7"xxrc n?^шuKIymL(^ȩrrhbدyNΕmʕ~Y[[r\هyxd瞑"DȘ^l>ha]уqhriyDsr1R'j]pv   y`wyҲTVD l  EsҮxBrzuH0[TKv seuy҄E7ڞtAB´j scrhtLRb*jZ2 F_OӤLa2^DsirbB[^ G5m< ^ޮEsخcQқn""?/Tt?xyҴ~XB^p>Et⩨3ȥɴ_=YKSasM ® D"KTB߁Jm䵿[EO]6. ђaw䎐Jas?f{e=ē8q5/eG~P`2Ǘ䎐L։?bs,7,x$'L=ik}nQD"KTuIg,>$0'+ $M~b35`7a"4 U>psɥ7Y[8N?X0a{|(Fl3{Dѕx8"ϞSwsN+i(mD7" _.Y Phr Al=oDh>O^}byxҾȾhȮxDsr445 MS, !5 {}ցD6񮧴xiyVhpr;Ȯ;H~ɾɥyɤiicycc]7ƚG).=50̌05==(m3q´=Np>Xt:"ԀXDnȿrؾbäcxhy®rΥLo*5005. [ush&rDriycicyɤiɥy-Vn B0xS"pfîصBvZцP tЂBhC:(7brҮxrirLuh%$\#랐5V9*:k˺ 35P!P!@ 厐L?|/"$.;1D_0N ~ 2]<hK~XD"KTuQV4b yl-B-7HEH>g-5^}H&+\ 厐NFG fm3:Z3M͎Z5q; Zsiy!cIS@.{&bV ']9R ~ *5˜٦7΋;8EysLqj8t:rDhD>sis!љђfydV $ln0P}q7XxUycbhHn;rX[Ԯ>sisۙ䏒3Cu(^e$b2=1 t :L; C|  |PQIخcchHn;Ȯh:X>sis1s~c,02~OJLp54$6&yrG0UW^w Vyz ^ MjCцxq;CSS]F [*~fx'<8#RH8L"ϟzyey䘥b_v1>QXs@ 厐L֣&Q5 屸R:(&|dHju mƗdBS O="R 厐N1`|>3h: h&9 f?h,f}R PJzĻ ѽKD$̜cZtDnQD"KTv)O6`Y3-HeЪG*ٚӍjEʑ{sI]+жe.ZD"KT7uk<3նWNbcUqBL <xQq1pԇjW {P8)ps@ 厐Lַdwyˆ^.=+A]IT4zba #uZ%ˤ .Za'ݰ?ZD"KTua),դU9~ïigNb7&hA'P!WǯR,{cPkɦ8AZD"KT uAܥ7c7q.zi@~5MMu:MO(оrЄg5ͫ@A^6P)l:3!0"KTIuBQighz(d =$NK0 ~pǤR=7ͫ~ȸl<:ݳ!0"KTMuHU{Ea;ZPMص,MQM0= ,hcq4 ~Ys(aiy %P 厐NֶV<2A+wl9$dz 2_wo)^mΗ99+Ei-"91D"KTBc'p)Y  oWML2 i2G+{o:Yz7S UAݾD"KT(uZk[Uأ*{9ugIԴ4.{@0oQ9F)$G9Wxe9li3!0"KTXu] K^gs,_yJ$V4m_d5B1 s䎐@֝s2ƒ(=xmB$3l&L dFw6=?8?M7&]c3%3D"Oۈ[uaZEEhUk+ J{ :N*[m0^B1zl`D.BZgfkjX67Jk{yz2xhDmytHtry?@3 Qu,# $\Sl=_]s?*>ZP({iń4"s]Ym՞p*cɯsخch&j@-Ԓsoxäi:@3#uW>RzƸYAvZv?A]+:֚FB [f]"]yES5rAp&cɾsҮx\t @)|$soxäi:Wg8ųg]W \[I^;V 9 B[C>CwҽYz"$P $ccrxib2BԄ"vبicyPis\KVT(ŪCeG]U`Gޱ7uwhQD"KTu[۰")7'EMտCt[¤Oi%eDC)[pwCt#Tj^3'< 06uhQD"KTugW5-'&s^lOHOIL8(m~ev=F|F5_P w~?Ǘ䎐B  ".DLw2U1(^}NkBOՀl0xQ8Q?x D R$'d,|}[PWXǗ䎐B =k1P"[9g?^rBw*U81Ʃ JI'bdm\ žrIrFǓ[чOD =4p(ѧr yu?"3zL{8RhRl;8Zz,l<vK@Y5!Ox|ߘʞITuu 4,PP]ԑJtׂ вũN:)XWEFZnl+.bBdb;[ۡAy3{Jsٴhy в %hT-"W8e~Zry߽'!yeO[ B y379prFj~ڍ?jĮ쨻 'Eu9dz k7ôxɥhySozֆ @̨'Ȯhky72e\+˃ŭ [ɧ =' J(ݘ%ԭ7g|RLxx"[60\51)*U Y'i;m95Q2cɵbr^Ш B1Ȇo^²hUs?[gZjV8wڽ"a#(g&@c4 wa`E^#=DiM e{OycɿtsTm^; D̨'Ȯszϋ3*+Ƹu2Vgh[\;67d$V<}KsT]j`Q# =T22a߮[k]rcӮɾr^̨B1Ȇoh&risLpVQ5 'tlF˪S~@`ìR[#'lt0%1 )G A9`jIpؔ&Ž^lr"Dm 3yҮҵ>j߸;ĿUx | /ϒ!fȬu, \𠆶wXs LE/fYG*֌u%V 刚^9JoߺD'9lV?q9v*ل]mx(R}tAܫEu0t̻|m*(/o3?p.x%V 劐|\s4q;qM<4,?akی3cd1pSbGX|rE2-8[Y @Ӕ0xbYÐD"KT@umyQݶwT}S n23do謭Ϫ?lmGCp'UǪSh-tDJk--SwuK fV 7eV 厐@ց?_2`3$2 N ,tbCGWyଡ଼y&_ ϛbwy|~2uݯf-_ĿLD"KTru.TOxŸX uT(?Isr~ %C K&Z ͝ c~ɵɴMB|Tcth>E^l^ "olFHuH!tT)N ܏1WP_zY ˂iZ՜ (%jh Q2Urȥcsή$sDh;ȮB>ha]^wFʀұhzt^s1wl&(Ryʠ}9p-=Ti=bJʋV "g `%$n7:(EK2xo={sG>Ѻшy8Bt̞"B >hEӗzc3T>Z}ei'SY{/e`+ R)}2;Bޮ.E܏ <ʯ!B$L}}1Y&R2hf\v;\ n99Ja2{ŧ{\`jIpF7q%BȖBFVy%z.L\ 5.(a>?c 'Va'0_Y yp5 ݵ-0Ȃh &Q@֏73a%5e^e,[6pJRH;GyY26jd,ў)e:/.^`]D>۴U>^ߔ^NN?u/ L{VE>T(UCڹVң.SsЕNDɈDL 厐J־1Rbv#QX?>Ӊ'ޭ]2g(DLtpʍnŁcGtHua-Rc f[} lД0ӌvÐ> o, X&B0r瀲L9RVy [KC#F-s!}Oĥ] ÅLxb/3 |Y=?';[@+\ 7krٴ  oEB ȘLܚ"B~32%^W&R=F0ҙq?55QIcs̮JpN$>wF;@s$ê p0Ȥiɯٿٮɨrͨ'Ȯh:Y^l"jr/zqE?N(u' 9 ,jR['>50ooF&Qq_Pݵ'w5D 4n p0Ȥiɾٵõbxт 8tE^l"^ڒiAsz#3EG ӑC ki 9'-#aZl{ PiݜsM3:⢖ pvȤiTr [Y:[m(uV*~t3$9P3ko;py 5 55'>gǫgi9"Lm4]IZE)+?ocB p0Ȥiɯٿٮɾɯsخcɥyih^";2!x9*Ʋ ` )H6)>ՠ Ig1cQCOos|[D-TiԾSLE brsH,"R4߃oEk.,iɊ)_5''`Ϗ0c!ZbG8MUEEWcݺǕxɷR9JucBHA7Զ>)h)+52 99 ??J/ 8coY1e7c"e "\ccBm mkx )Z0Ξͻ̸1i4 9yB˄P<7=r[oRIau3*g "ccBmMSȾ$2&R"\gM~~B \)0ZOb/. 9R륲NΠqx6} .E ?2R,u\ILD"4uixiyɤiicycɯyhE 6֍2EҐ Y(L|3 $y@.JvV։C~\XRpϞK 7u kH}ÐbAFU| B GpϞK2o((y@+XLo; bЌkNef=c(dHؑeOO 5Xl(:Yx q1,J%UΥFk@xk)cb@ّeOO 0X(x8$,j: {~ЂLs#kOOȟIi1HZփbGTwPDr#kOOȟ[|.I4o'UE FDiBٓWN?Y)nBY2,{/nDo:Ɛxe%XB5'bɓ/q6&HєKQ7x%Pw)& pOKKZF-9h+[^8>dO DN:vj Ю҉>_aX!^ŒT14miH;eظH$8P! pO,=|YˏZ/FZYY-mnICDJٺȯQQp$M;XP>Qp$H6khJQ~ؘ $8P! pO ,|Cј8{B.z+x&(&Yh>`! U 7@b(b\ѓP7`'BK ?P%7%_ímiHk =LB PFD8P! pO' U޿q7rb(6{b<6l0 j * ^3hpR!cN]bEG@QZ ʟL{ n DJٖȉ/p l0.p"jF =D%F6QlƬQƚʶvJDXP! pAfu~y0]F$D#X[)+\_k ,DN&-ltB5 %ihl4-{欂ZR!G¯ɽNk|6jH%ε> QZ-̝HX*C˿|'6(?CDJ7]3ҳa3KV+2ۇ{QhBKhXHEc0Jε> Y(@e\N&D"Z^ʟ= M:{4ZbTcDT*DWYʞC &)BJ@`C7 K]l/[[:)*Y] yGbTԋњ ,Pa߬=< Y(ҟ<z xhF*z,},LUdB  NL ĵ> Y(2k#Urx~<'D ,̎a̬J%GH~]@pʞAfA ~R`NKh`5L]f.K@e-\LBBَeɉCCHX~M=:\JKPZPDʀDTjϋ(ɰ4,Nb s_*?< Y(J6 ̝ L#X]TRbZ JFb Zr:5خIObʯUQ?"pʞA>s~IXKKA9RXymaeRKKYH(5#bu{冴@> 1C>z}H8bbLLMG[HJ5JNBcm,/ʞO!$DDn 3Yymae-AI IRԕbh)i/B>Y)QA YY=gEJ- BUBUQ JDAWT?Y)ܿj#⒏91{yşbH& T: g)T B>Y{2Y{f<Ԃ:jt+E VIN^bNFkY@?:T @;EUܡx S{Mb<Vzf(EVYGzBג:b<Y(䕆ʨrVk&>~;b<YhLZ|+jmwx*!5{2{3{GN2,fYܙ;ʲi+BxkyUIEK>DV뻄q(uL{6jʓlKEKˬq7.[?BZLhC@ ^{\U71A{%+B k{C /YngHH oIX"-bdMRVw>=I|A‰˨ɈTr&Еlm\D7DЧWkes"ulǺԵ>Jgx\g.,{, .l\7XЧW`$2DBeȶԵ?_B~g ,y-JxQ+{{1+,/^teL<TB"ԠR>Df}\U7ɉ$-{7ynGP'UBJ2TB"{2p",=qrqNվˉզJPXeW+i,Xŕd.\teB1eT4TRR ޚ3Ȟ ,y-XoȢnK.XҧWCVeBve4RRO7^/ZN] D [nGCRȠ/k62ЕYܧW,VRB$stTpOZ/ XN]-[lIqzBjO"F߄/^b4 ~{u"\?Y)iվE˃H#5$XP!Vj$UܥŞI ;#ZN]-[DXҕ 8}jJr$UܥŞG4iڜϼ364ɫsh$UܥŞO솦[v^m*5XLX :Tk -b<Y(&lyo~x6ڞϜQ4ү$UܥB]*{iŜm@w4҉$Uܥ@X,v*L*[r@*lM︤jӊsXJP'UܥFWjURǏ``7 PWܥKK%wM&UReR-+k@>N@4'f7ԾĜ}S44"NbLYs顬/g+^pKFQ raA:GKKBc6."@b Ɗ -W ^pK/J{D!4/ZQh^XFWNYLˢG!L4d], P?< 6!Dz^GF ɝ>_tID$_VifWWh|B-W#YWdBW[8,ٙWH? Y(s.ٌQ=]Ʋ$Buh0C9ѝ ˩(b g/@B fl75eʞM28۲[ϑhOXQ**!Mb|9iT( |8B 77 76W8̛kFS vHG^@%G]P xMP'UifY8LBB͢-,iW[Ͳ}r9חWH?Y)r W}1 A0_38D Mbi,-iW g7g'xY8̕kJM쌲@78D CbppLF*I@ H >\18D Cb ~pL*o@ (6JMP'U-RpL(o۞Uմb`6mYb<]BO֘)ق VWLYb<]r,IXqZd7rMP'UܥLNH[XI\qfz27MP'UܥLNH?shʔtMP'U9JHWΧVFLB?Y(t/8S\fzcMP'UqDpOeP[p]IbO=p|Ɔ{hTbOePpDBD&p`Bpۿ8BBŞKhղR,_DG|$ 5bP$OkbbOhPPOo]e}vBoiPPD]fbHOp}VO)*V_?Ytq4S؉rՋۂU?"c8MP'UfuO}Vb]BovPiP[O>PzcOe}vBObPO {@?Ytq4Yc}LD0mY[qu\맓J'U۹x]}Vb]BO\ybZb>P1cOwv͊tpHBpTPPŞMH YVJ4A_[&U۹]Wb]BovPiB[p?jhL}doV}DPIp?jϫbhBbb>Y)4sp\Y̒8[DL[kЍ&U۹]wbw!bovPiB[bjHLi}DoVoD]H2kJbZbu]wb%KP6{2D;E@bSGXb$YbPHoPDBbj˘~o]w]wphoBD}]HYBGp}VOOoD]?Y)hrNFJKD2:Sc*%ާWdP[P8z_V}bFB]zb1by}ro}VbpzP0]ŭP?}ڭ8BBŞI r4U*ԃQ-M²׈ PW<@ NĪʵ>Y(~p[NȃQ--7rh R PW<@W NWWʵ>]տ&8O|IX<² KP'Uʵz˕v"Fpp,pOp^k:UT^ɞa+LP?b< Yt X_ ܘrZ;ɗhKP'Uf\7eʞA~WuJ]l~t7$Uf\7eʞO 5t̒8ID[m?ju>M&UfL7e"gz6xeĵ> Yt%S8OhĂ沜odEhXwӖK%KbB{9kJk/pʞKuB~7ׂ%Xo70,'HlYFBQL~4xeĵ> YtB)LЛ9DZ$htқ#%YX&UKP-YX?Y)hHO=BWQgBՋ t<8ݨ&U7gWILRBs̬-L-W-W-G)LB#gseƵ>Y)hHObEBk.ŁTEi!)MP'U<|&#Y)hHObBk.lU!8IhMP'U<|&# "6fȄ @ WhiדeƵ>Y)hHObmҖ g>I"^0%V7|עIY NJm0 .BrWiseƵ> YtB)Ҡw!v0%X+^nBHMlYܢ6mԉ-7gg8s VpʞIAr ztDԡPocGn⊢!Ob%AB 鏨&Bݢ6דeƵ> Y(BOb;$ܽ$&CfZPP+VI)̢JLYL\pKƅHr6т:Hcl#tƞ"OPƁKD/kpʞA춦Mpr}˧@iTbPD>>&RLqʞI hPWS27LRm2YߗܥʞIҫ3VL#;_Jcb< Y(vgӼҴtWd$'3{gb< Y(y5EӚ42z S9RVb<L(~:ɞP ]Ӎ b<L(F.F;t XhdΥKƉLtٞJ XidXWܥKzSD]I9`5e5t:b<]BOʍ$W$@t:b<]@O΍$W ЗuKzFS̍9`.gՒ#t:b<]HV]H`e7J'UKz҄ĮYR58R:b<]NjYiBd@1FGbȨ@>] ĪןM`eT7#t#(pOpPHWBz̕«LW@>]֫ S1 {:UpoPNPopABbOPo`PpY8KDHN9ӑt ի~fBۿZPhX}du]ZbK}IgBۿZPhJP[JPIg]ZbfBѿgBCɶ85[FJȇ1Tp}oWpWP}}p]EpoP@ǩ@P娅µ>] rpLÓP1Tp}Oz UKpebbptpepYP͒p ]bgPIpZFX}IOepHG8.HuP[go[g}рgPMpg1kU+eЗ.Ҏ\~b&UƸmdp"WmJPp _X3#W1TP1h}IG0id}VU>̹ƸJWאdBb]p_X}1΄Sp}]EۋHVB PVoԩ ̹Ƹvpob*/Wص>Y)qkW@7JBFob8btp}]Ezϔb }}Fppopb]pPڅB)wG7,S)Ro;wp%}]polBOϔƸJWBmJPpϞO F)wQ EFoxòt{OPPOHFP1hOzoDv h x>;U{]}{Bopz]Ozp"BtwH? Yhm`N`VXTOEP{Pd]bZOzf;b< Yhǘ ށF.DKYktgvOO쪦@eRʟuKJUįF]hBI}}dpZoIf;be'>7*@Fxj֋xEwZ`M[r7"k]iof]%Ob8bR:b< Y(Bcڥi54d&}=E\7-uʞI솦hZ`mԿT֢vo$"O8tP%EBiTZZTpzodbuboEB oz[?f>HJP(ٍPCb2< Yh`gYoMYwbeo7-t!ʪ痰p5OYOEPdBPDO#poEB oҪʊD ̋D ̋D ̋DHWJM젦]EFrgKp]e)V>=W;ӌRpO popÀ OPDP滛{{{]hbVboB o#PTƦ !mpCb2Iicy6I hB؀ J.hԅ cLkeh#w}RӬL L LU jBBuRij-,L L LH 8B҅ B\R` 'L )L L1(J+-LL  h)!ЬrnB, ILH ILH BF LL CL L BRzEм- ?iB LS BF BF CL LD L 4 ?̆Ŀ- ? gm6h&inH@ehFن&mFوVضe""4R=h-,ոYi4h&mh&oke L Li4h&ep^٤eܑ pJ$ zjͼi4h&cqei/ 5(fgL6,{IeC" W$~.h#L  O5!eNtPMRKi4h&_e " -B>i-LL :L"G$N~.i9L Դ@ut~F/·,y ΈzsztI $zH1$p.BzmbvetOu<>$ HBҼin'ԴՌ̦- ,.z=By:)Wޑ֌̶?ӀLTulPTP'Uޑ -܁86׃,uRPWޑփֈLLǔPf.ѕd[d”$z\yPtgBB1j/D .ئcD ]Ep]w}VPdbbzp%npԎ߇X"uYc#"$.zR\P'T pb`@ ʜQ[ CEBRJ ob3$NQBZ ̏ЇҀJ/Ibs$cNNYBN̏ÇPN, %jiLD͖͞HBNAVPNh+jiʀQI„@BK$$cLQI„@BCZVEO"_QI CX$`'kiʀQBZ DB_R#XǬL YBZ ΏQZچҒK-Ng|`hF KT$FȖϞHJJǖGBCX$$E(.LBQKYBOIB/B!jhQKŒIBҔJ/LSǨJLSŒIJҎK-Hbq`CʬH܇ҒK-Jbb]j iHX[ J҆҆K,袵f…kAК JI_@e50b*F CFAК L܆ҚK,„ا.kHiJYJZBԆҒK-@C```Ǭ†BWT"$SlB55$oUR†BWX<$&BC55`%-D BԆҒK-QBc5#{&’mFbD BWV'$ՕX$l ؗ ֆҒK-BA5#nÊ,ʏړ FއҒK-‘!"F-Dڟ FއҔK-DQ`c5#ڧ YʊNBQY$N`rJBQY!$Օ0@B[ΪFUBA5#ʎds5 5 H "፞ 8"፞ "፞ "፞ "፞ 8H8H:"፞   "፞ 8"ɥi˥8ͥ::,"፞ ͢:"፞ ͢<"፞ Ϣ<"፞ Ϣ<"፞ ͢<"፞ "፞       {iH"%{iH{iH"#8 HiH:"፞ {iH"፞ "፞ ѥiH:"፞ "፞ ,"፞ ѥiH:"፞ iHiH<"፞ "፞ iHi(H:"፞ "፞ iHi2H:"፞ "፞ "፞ ѥi<H:"፞ }}"፞ ѥi=H:"፞ iHi=H<"፞ "፞ iHiFH:"፞ dd"፞ "፞ ѥiPH:"፞ OO"፞ ѥiQH:"፞ iHiQH<"፞ "፞ <<::88{iH"%{iH{iH"#iHiZH:"፞ {iH"፞ iHidH:"፞ "፞ "፞ 8 HiuH:"፞ "፞ "፞ H"፞ hߥ "፞ {i+k- (C) 88 ARTISTES ASSOCIES - Zahg, Sam Tools et Speculums Artistes Associles Tapeurs de Docs: Gronk, Qtips et D.Busavec le soutien Technique de: Feanor, Valmorgul & Mestema B. Capslock & Pik Pok Bandles Programmeurs fous:Oeuvre' ce Chef d  Ont Particip> GS on the Rocks no 4 < Halte aux Bugs... ;8[i{iHHH"#ߩ)8pI0i)ݥ݂H݂݂݂x݂p݂h݂`݂X݂P݂H#@[\]{|}~ :"፞ ݢ"፞ iߥ"{i+;ik ;8[i ̩ͩ22 {iH{i6H "፞ 6H"፞ h "፞  "፞ 2թשK٩,HH{iH "፞ h߆ߢ"፞ "፞ "፞ :"፞ "፞ HHH "፞ h{iL 8  0 )440 "DD } 5 P߀ީww٩,Cdy,ZSThihiT,0 LiS' ,CiqɠgC8C R "h+8 X{ % "^ ,08&`1,,,,1,,, ݉2 ݉+ ݉$ ^0R "8A)4L ` ^Z YZZ,,,,1,,,`DNDNDDDfnwwwwwwwww~wwwDnnDDnffnnnfnfnnnnfn~f~fwwwwwwwNfffnfffDDnfnfnnfnfffnfnffffnfffnfnnffnnfngnffnwwww~fwnfnnfnDDnnffnnnnfnfnnnnfnnnffnnnfgnnwwwnfnwnDFfnFDDnofnnnnfffnfonfnnnfnnnff~fnwww~ffnwnfnDNfDDDnofnnfffnffnfnnnfnnfnwwfnwwwnffnwnFfnDfnDDDnofnnnfnffffnfffnfnnnfnnffww~fww~ffnwnFfnFNfDDnofnnfnfnfnnfffnnfnnfnww~nfnww~nfnngnffnFfnDDnofnnfffnfnnnfnnnfnnffw~nfwwffffnfnfnnDDnnnnfffnfnnnffnnfnnnfnwfnfwwwffnNnFffnDDnnnnffffnnfnfnfnnnfnnffnffnfwwwffnwDfnnNffnDDnnnnfnfnffffnfnfnfffn~gffnwwww~ffDDNDNDDDw~wwwwwww~w̮ӮĠ宮 I GENERALITES: Le Debugger CPW sert @ d{couvrir les bugs dans un programme en en suivant pas @ pas le d{roulement. Le Debugger permet: - l'ex{cution des instructions pas @ pas - l'ex{cution du programme en continu (mode TRACE) sous controle du Debugger - l'ex{cution totale ou partielle en vitesse rapide si n{cessaire - l'insertion de points d'arr}ts qui ne deviendront effectifs que lorsque le programme aura ex{cut{ l'instruc8:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~tion un certain nombre de fois - de passer en mode MONITEUR, d'ex{cuter des commandes moniteur, puis de revenir au Debugger - d'afficher le contenu des registres, les points d'arr}ts, les zones m{moires prot{g{es, des parties de la pile et de la m{moire, de d{sassembler votre programme - d'afficher 368 octets cons{cutifs de la RAM - d'afficher la page {cran d{finie par votre programme - d'afficher des menus d'aide int{gr{s Les commandes du Debugger sont r{sum{es en fin de documentation, dans l'Appendix A. II COMMENT COMMENCER: Nous allons voir comment charger le Debugger, puis comment charger le programme @ tester et les restrictions d'usage. Le Debugger est sur la disquette CPW et, une fois charg{, il n'y a plus d'acc}s disque. Vous pouvez donc l'utiliser avec seulement un drive. DEBUGGER page 1 1- Restrictions: Le Debugger n{cessite 16400 ($4000) octets en m{moire o| il pourra stocker des donn{es. Le Debugger {tant charg{ en m{moire par le System Loader et le Memory Manager, vous ne pouvez d{terminer sa zone d'implantation en m{moire. Si votre programme est relogeable, il sera charg{ par le System Loader et le Memory Manager de mani}re @ {viter tout conflit entre le Debugger et votre application. Cependant si vous utilisez des adressages absolus, vous ne pourrez pas utiliser le Debugger dans les cas suivants: - votre application stocke des donn{es dans la zone d'implantation du Debugger - la zone o| se situe le Debugger est prot{g{e en {criture par des instructions de votre programme. Par exemple, si le Debugger est dans la carte langage, votre programme ne doit pas d{connecter le mode {criture de la carte langage. - il y a occulattion de la zone o| est situ{ le Debugger. Par exemple, si le debugger est dans la zone $D000 de la carte langage, votre application ne peut changer les bancs de la carte langage. - il y a d{connection des switches pour les pages textes et graphiques dans les bancs $00 ou $01 si le debugger fonctionne dans les bancs $E0 ou $E1. - votre application d{finit sa page directe ou sa pile dans la zone d'implantation du debugger - votre application utilise la m}me zone que le debugger pour g{rer sa pile IMPORTANT: en mode STEP ou TRACE, si votre application {crit (ou passe) sur une zone situ{e entre les 20 octets avant et et les 8 octets apr}s le d{but de la pile du debugger, l'ex{cution du programme est interrompue et le message S= est affich{ sur la ligne de commande. Pour continuer, il faut changer la valeur du registre S de mani}re @ ce qu'elle soit hors de la zone utilis{e par la pile du debugger. En mode vitesse rapide, un conflit dans la pile va bloquer le debugger. 2- Charger le Debugger: Lancer la disquette CPW puis taper DEBUG et . 3- Charger votre programme: Lorsque le Debugger est charg{, le Copyright et le n[ de version sont affich{s sur les lignes de commande. Tapez ESC pour effacer cette ligne, puis tapez la commande de chargement LOAD NOM. NOM est le nom du programme, pr{c{d{ {ventuellement du pr{fixe de la disquette sur laquelle il se trouve. exemple: LOAD /Pr{fixe/Programme En cas d'erreur lors du chargement, le code d'erreur est retourn{ sur la ligne de commande (voir la liste des codes d'erreur de PRODOS 16 en Appendix B). DEBUGGER page 2 Une fois le programme charg{, les registres suivants sont affich{s: K/PC le registre de banc (K) et le compteur de programme (PC) contiennent la valeur de l'adresse de d{part du programme. A l'accumulateur contient l'Identificateur du programme charg{. Voir le manuel TOOLBOX MANAGER pour de plus amples pr{cisions. X,Y les registres X et Y sont mis @ z{ro. P le registre d'{tat du processeur est mis @ z{ro. D le registre de page directe contient la valeur du bas de la page directe servant de pile (voir chapitre 9). S la pile contient la valeur de d{but de la page directe servant de pile D'autre part, le pr{fixe 1 de PRODOS 16 contient le pr{fixe du fichier charg{. III L'AFFICHAGE ECRAN: Lorsque vous lancez le Debugger, l'affichage principal que vous voyez est constitu{ d'une ligne de commande et de diff{rentes fen}tres affichant les informations suivantes: * le contenu des registres du 65816 * le contenu de la pile * le d{sassemblage de votre programme * le contenu d'une zone de la RAM * les points d'arr}ts que vous avez d{termin{s * les zones m{moires que vous avez prot{g{es De plus, vous pouvez afficher le contenu de la page directe, le contenu de toute r{gion de la RAM, des menus d'aide et toute page {cran utilis{e par votre programme. 1- Choix des affichages: Au lancement du Debugger, l'{cran d'affichage principal est visible. Cependant vous pouvez modifier cet affichage pour obtenir: - un {cran d'aide -> tapez ? suivi de RETURN @ partir de n'importe quel {cran - une zone m{moire -> @ partir de l'affichage principal, tapez l'adresse de d{but de la zone @ visualiser suivi de : et RETURN - la page directe -> @ partir de l'affichage principal, tapez D et RETURN DEBUGGER page 3 - une page {cran -> tapez OFF puis RETURN @ partir de l'{cran principal et lancez votre application (voir le chapitre LANCER VOTRE APPLICATION). Vous pouvez modifier le type d'{cran gr@ce aux commandes suivantes (uniquement en mode STEP et TRACE): 1 ........... page TEXT 1 2 ........... page TEXT 2 4 ........... {cran 40 colonnes 8 ........... {cran 80 colonnes T ........... mode TEXT F ........... page graphique enti}re M ........... page graphique mixte (4 lignes de texte) L ........... graphique basse r{solution H ........... page graphique haute r{solution D ........... page graphique double-haute r{solution B ........... noir et blanc (en DHGR) C ........... couleur (en DHGR) S ........... page super-haute r{solution - le mode moniteur -> pour passer en mode moniteur, tapez MON puis RETURN sur la ligne de commande - l'{cran principal -> tapez ESC @ partir de la page directe ou de l'affichage d'une zone m{moire pour revenir @ l'affichage principal. Si c'est un {cran de votre application, tapez ON et RETURN. Pour partir du moniteur, tapez CTRL-Y et RETURN. Note: avec le filtre de commande actif, n'oubliez pas de maintenir enfonc{e la touche du filtre (voir le chapitre COMMANDES FILTREES). DEBUGGER page 4 2- l'{cran principal: Nous allons {tudier en d{tail les diff{rentes informations disponibles sur l'{cran principal: ------------------------------------------------------- ! --------------------------------------------------- ! ! ! Z O N E D E S R E G I S T R E S ! ! ! --------------------------------------------------- ! ! ------ ------- --------------- ----------------- ! ! ! ! ! ! ! ! ! ! ! ! ! P ! ! R ! !INTERRUPTIONS! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! I ! ! A ! --------------- ! ! ! ! ! ! ! ! ! DESASSEMBLEUR ! ! ! ! L ! ! M ! --------------- ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! E ! ! ! ! ZONES ! ! ! ! ! ! ! ! ! ! PROTEGEES ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ------ ------- --------------- ----------------- ! ! --------------------------------------------------- ! ! ! L I G N E D E C O M M A N D E S ! ! ! --------------------------------------------------- ! ------------------------------------------------------- 21- la zone des registres: Vous y trouvez le contenu des registres du 65816 et du debugger. Les registres du debugger sont situ{s @ l'extr}me gauche et sont: KEY touche de filtre. Valeur HEXA de la (ou les) touche(s) devant }tre press{es lorsque le debugger est en mode STEP ou TRACE pour interrompre le programme (voir le chapitre IV,2). Voici les diff{rents valeurs possibles: --------------------------------- bit ! 7 ! 6 ! 5 ! 4 ! 3 ! 2 ! 1 ! 0 ! S......Shift --------------------------------- C......CTRL touche ! A ! O ! ! K ! R ! CL! C ! S ! CL.....CapsLock --------------------------------- R......REPEAT hexa ! 80! 40! 20! 10! 08! 04! 02! 01! K......clavier --------------------------------- externe O......Option A......Pomme BRK indicateur d'interruption. Il y a i (pour IN) si vous avez mis des interruptions dans votre programme avec le debugger. Si les interruptions sont transparentes (ou s'il n'y en a pas), il y a inscrit o (pour OUT). DEBUGGER page 5 Debud D page directe du Debugger. Cette valeur correspond @ l'adresse de d{part des 1K de la page directe/pile dans le banc $00. Par exemple, si la page directe du debugger commence @ 00/1000, vous lirez 1000 @ cot{ de DebugD. Les registres du 65816 sont affich{ comme suit: K/PC banc (K) et compteur de programme (PC). Ceci correspond @ l'adresse de la prochaine instruction @ ex{cuter. Il n'y a pas de retenue du bit de poids fort de PC dans le poids faible de K lorsque PC est incr{ment{. Si vous indiquez une adresse en omettant de sp{cifier le banc, la valeur de K en cours sera utilis{e. B registre du Data-Bank. Cette valeur correspond aux 8 premiers bits de l'adresse lorsqu'on est en mode d'adressage g{n{rant seulement les 16 derniers bits. D registre de page directe. Cette valeur correspond @ l'adresse de la page directe dans le banc $00. Par ex, si la page directe commence @ 00/1234, il y aura 1234 @ cot{ de D. S pointeur de pile. Indique la prochaine adresse disponible dans la pile. Si e=1, S doit }tre entre $0100 et $01FF A l'accumulateur. Ce registre contient d'abord un op{rande et aussi le r{sultat da la plupart des op{rations logiques et arithm{tiques. Ce registre contient deux octets si e=0 et m=0, sinon il contient 1 octet (pensez que l'octet de poid fort peut toujours }tre trouv{ avec une instructuion XBA). X registre X. Ce registre est utilis{ pour les valeurs servant au calcul des adresses index{es et pour stocker les op{randes de certaines op{rations logiques ou math{matiques. Ce registre contient deux octets si e=0 et x=0, sinon il contient un seul octet (l'octet de poids fort est forc{ @ 0). Y registre Y. (m}me chose que pour X) DEBUGGER page 6 M {tat de la machine. Ce pseudo-registre, situ{ en $C068 (dans chacun des bancs $00, $01, $E0 ou $E1) peut }tre utilis{ comme switch pour le MEGA II. Le registre M est d{taill{ dans le manuel HARDWARE REFERENCE. Les bits d{finissant ce nombre hexa caract{risent les {tats suivants: bit nom signification ----------------------------------------------------------------- 0 Slot Cx ROM mis @ 1, ROM interne @ $Cx00 est active, mis @ 0, ROM externe est active (c'est @ dire la ROM sur la carte m}re en $Cx00) ----------------------------------------------------------------- 1 ROM BANK r{serv{, il doit }tre mis @ 0 (si vous le mettez @ 1, c'est le plantage assur{) ----------------------------------------------------------------- 2 BANK2 mis @ 0, banc 1 de la carte langage ($D000-$DFFF) s{lectionn{. Mis @ 1, banc 2 s{lectionn{. En modifiant ce bit pour chaque banc, on ne d{selectionne pas le mode {criture de la carte langage RAM. Utilisez l'indicateur L pour d{sactiver le mode {criture de la RAM et commuter les bancs. ----------------------------------------------------------------- 3 RDROM mis @ 1, la carte langage ROM est prot{g{e en lecture, mis @ 0 c'est la carte langage RAM qui est prot{g{e en lecture. ----------------------------------------------------------------- 4 RAMWRT mis @ 0, la RAM de la m{moire principale est prot{g{e en {criture, mis @ 1 c'est la RAM de la m{moire auxiliaire qui est prot{g{e en {criture. ----------------------------------------------------------------- 5 RAMRD mis @ 0, la RAM de la m{moire principale est prot{g{e en lecture; mis @ 1 c'est la RAM auxiliaire qui est prot{g{e en lecture. ----------------------------------------------------------------- 6 PAGE2 mis @ 0, page TEXT1 s{lectionn{e; mis @ 1 c'est TEXT2 qui est s{lectionn{e. ----------------------------------------------------------------- 7 ALTZP mis @ 0, bancs m{moire commutables, pile et page 0 en m{moire principale; mis @ 1 c'est en m{moire auxiliaire. ----------------------------------------------------------------- DEBUGGER page 7 Q Ce pseudo-registre est compos{ des 7 derniers bits du registre Shadow C035 et du bit de poids fort du registre de Configuration C036. Voici @ quoi correspondent les bits de cette valeur hexa: 0 page TEXT1 1= shadowing off 1 HGR1 " " " 2 HGR2 " " " 3 SHGR " " " 4 HGR en m{moire auxiliaire " " " 5 r{serv{ doit }tre @ 0 6 IOLC (I/O et carte lang) 1= shadowing off 7 vitesse rapide 1= vitesse rapide Le shadowing est d{crit dans le manuel "TECHNICAL INTRODUCTION" et dans le manuel "HARDWARE REFERENCE" L banc de la carte langage. Cet indicateur {mule la commande Moniteur "Valeur=L"; mettre L @ 0 pour d{sactiver l'{criture de la catre langage RAM et s{lectionnez le banc 1; mettre @ 1 pour d{sactiver l'{criture de la catre langage RAM et s{lectionner le banc 2. En modifiant L, vous changez automatiquement le 2}me bit du registre M. P {tat du processeur. Ce registre contient l'{tat des indicateurs et les bits de s{lection de mode. Les bits sont affich{s @ l'extr{mit{ droite de la fen}tre, et sont: n: indicateur de r{sultat n{gatif:si n=1 le r{sultat {tait n{gatif v: indicateur de d{passement: si v=1 un d{passement a eu lieu m: en mode natif (e=0) ce bit s{lectionne le mode m{moire/accumulateur. Si m=0 la m{moire et l'accumulateur sont en 16 bits; si m=1 ils sont en 8 bits. En {mulation 6502 (e=1), ce bit n'a aucune signification et au lieu de m il est affich{ l. l: voir m x: s{lecteur du mode registre index (mode natif 65816; e=0). Si x=0 alors les registres X et Y sont en 16 bits; si x=1 alors les registres X et Y sont en 8 bits. En mode {mulation 6502 (e=1) ce bit s'appelle b. b: indicateur de break (mode {mulation 6502, e=1). Si b=1 l'interruption {tait un break. En mode natif (e=0), ce bit s'appelle x. d: s{lection du mode d{cimal. Si d=0 on est en mode binaire; si b=1 on est en mode d{cimal. i: indicateur de suppression de IRQ. Si i=1 l'interruption IRQ est d{connect{e. z: indicateur de r{sulat nul. Si z=1 alors le r{sultat {tait nul. c: indicateur de retenue. Si c=1 une retenue a eu lieu. e: indicateur de mode {mulation. Si e=1 on est en mode {mulation. DEBUGGER page 8 Pour modifier le contenu d'un des registres affich{ dans le menu principal, tapez une des commandes suivantes et appuyez sur "RETURN": e bascule la valeur de e entre 0 et 1 x bascule la valeur de x entre 0 et 1 (que si e=0) m bascule la valeur de m entre 0 et 1 (que si e=0) registre=valeur indiquez le registre par son nom et tapez la valeur qu'il devra contenir. Ces valeurs sont en hexa sauf pour les bits d'{tat du processeur qui sont {gaux @ 0 ou 1. Exemple, pour mettre la valeur $12E0 dans le registre X, tapez X=12E0. Note: la longueur des registres X,Y et A d{pend de l'{tat de e,x et m (voir paragraphe pr{c{dent). 22- la pile (stack): La colonne @ gauche de l'{cran est l'affichage d'une partie de la pile du 65816. Vous voyez les adresses et leurs contenus juste avant et apr}s l'adresse indiqu{e dans le ointeur de pile. Cette adresse est affich{e dans la zone des registres (voir III,21) et est en surbrillance dans l'affichage de la pile. On peut modifier l'adresse de la pile avec la commande SET (voir III,273). Voir aussi III,24 pour modifier des contenus m{moire. 23- le d{sassemblage: La zone @ droite affiche le d{sassemblage de votre programme en utilisant les mn{moniques et la syntaxe du CPW 65816. Chaque ligne effac{e est compos{e de 3 parties: l'adresse, le contenu (octets), le d{sassemblage de ces octets. Exemple 12/1000: AD 15 18 LDA 1815 La premi}re partie (l'adresse) contient l'octet de poid fort ($12) sp{cifiant le banc m{moire, puis il y a 2 octets ($1000) indiquant l'adresse et ensuite de 1 @ 4 octets (ici AD 15 18) correspondants au contenu de la m{moire. La fin de ligne (LDA 1815) est le d{sassemblage (du contenu de l'adresse) en notation standard. Toutes les valeurs sont hexad{cimales. DEBUGGER page 9 Exemples de d{sassemblages: mode d'adressage exemple d'op{rande Absolu 1234 Absolu index{ en X 1234,X Absolu index{ en Y 1234,Y Absolu index{ indirect (1234,X) Absolu index{ long 081234,X Absolu indirect (1234) Absolu long 081234 Accumulateur: D{placement 5678 Page directe 12 Page directe index{e en X 12,X Page directe index{e en Y 12,Y Page directe index{e indirectement en X (12,X) Page directe index{e indirectement en Y (12,Y) Page directe index{e indirectement (12) Page directe index{e indirectement long (12),Y Imm{diat #12 ou #1234 PC relatif 1000 (+12) PC relatif long 1000 (-1234) Pile: Pile relative 10,S Pile relative indirecte index{e avec Y (10,S),Y On peut modifier l'instruction avec la commande SET (voir chapitre II,273) Note: le Debugger interpr}te tous les octets comme des instructions. Il ne diff{rencie pas les codes et les donn{es. Donc les donn{es vont apparaitre sous forme d'instructions bizarres (sans sens). DEBUGGER page 10 Au lancement, la zone de d{sassemblage est vierge. Le Debugger ne va afficher dans cette zone qu'@ la suite d'une commande. Vous pouvez mettre ou non un / apr}s le banc lorsque vous entrez une adresse. Si le num{ro de banc n'est pas sp{cifi{, la valeur indiqu{e dans le registre K est celle utilis{e par d{faut. adresse L d{sassemble @ partir de l'adresse indiqu{e. 19 lignes sont affich{es. L d{sassemblage @ partir de l'adresse stock{e dans K/PC et affichage de 19 lignes. Si aucune commande de d{sassemblage n'a {t{ effectu{e pr{c{demment, le d{sassemblage commence @ la premi}re adresse de votre programme. adresse T passage en mode Trace @ l'adresse indiqu{e. Si aucune adresse n'est sp{cifi{e, c'est le contenu de K/PC qui est utilis{. Lorsque CPW ex{cute le programme en mode TRACE, celui-ci est d{sassembl{ et l'instruction en cours d'ex{cution apparait en mode inverse. Voir {galement le chapitre IV. adresse S Passage en mode PAS A PAS @ l'adresse sp{cifi{e. Si aucune adresse n'est sp{cifi{e, c'est le contenu de K/PC qui est utilis{. Lorsque CPW ex{cute le programme en mode STEP, celui-ci est d{sassembl{ et l'instruction en cours d'ex{cution apparait en mode inverse. Voir {galement le chapitre IV. adresse:instruction cette commande va assembler l'instruction @ l'adresse indiqu{e. L'instruction apparait en bas de l'{cran. voir le chapitre III,27. L'{cran de d{sassemblage montre l'instruction suivant l'instruction en m{moire. Si l'instruction en m{moire effectue un saut @ une autre adresse, le contenu de l'adresse sp{cifi{e dans l'instruction est ex{cut{. Exemple, si l'affichage est le suivant: 12/102E: C1 06 CMP (06),Y 12/1030: 0A ASL 12/1031: DC 89 23 JML (2389) <------------ 12/1034: 7C BE F2 JSL (F2BE,X) 12/1037: AD 15 18 LDA (1815) Lorsque le JML est ex{cut{, l'affichage va }tre: 12/1030: 0A ASL 12/1031: DC 89 23 JML (2389) 12/1003: 9D 5C 1C STA 1050,X <------------ 12/1006: 9F 20 30 05 STA 053020 12/100A: A9 77 66 LDA #6677 Utilisez l'instruction ASM pour effacer l'{cran de d{sassemblage. DEBUGGER page 11 24- l'affichage RAM: L'affichage @ droite de la pile correspond au contenu de 19 adresses que vous sp{cifiez. Chaque adresse peut afficher une valeur HEXA et son {quivalent ASCII ou une valeur hexa sur 2 ou 3 octets. Les valeurs @ 2 ou 3 octets correspondent @ des adresses (octet de poids faible affich{ @ droite). Par exemple, si vous mettez la valeur 1A @ l'adresse 01/0100 1B 01/0101 1C 01/0102 et que vous affichiez le contenu de 01/0100 sous la forme de 3 octets, vous obtiendrez 01/0100: 1C 1B 1A. Pour modifier le contenu de l'affichage RAM, tapez MEM sur la ligne de commande. La premi}re ligne de l'{cran apparait en inverse et les commandes suivantes sont alors disponibles: passe @ l'adresse suivante fl}che bas passe @ l'adresse suivante fl}che haut passe @ l'adresse pr{c{dente adresse: affiche le contenu de la m{moire @ l'adresse indiqu{e. Vous pouvez mettre ou ne pas mettre le / apr}s le n[ de banc. Si le n[ de banc n'est pas indiqu{, la valeur par d{faut est celle du registre K. H affiche le contenu de la m{moire en valeurs hexa et ASCII P affiche le contenu de la m{moire avec 2 octets L affiche le contenu de la m{moire avec 3 octets ? affiche un menu d'aide (tapez une touche pour revenir @ l'affichage RAM, except{ ESC) ESC revenir @ la ligne de commande 25- affichage des interruptions (break points): Le debugger vous permet d'inclure jusqu'@ 17 interruptions dans votre programme. Lorsque vous placez une interruption, il suffit d'afficher l'adresse @ laquelle le programme doit s'arr}ter ainsi que le nombre de fois que ce point d'arr}t doit }tre "pass{" avant d'arr}ter effectivement l'ex{cution du programme. Chaque ligne affiche l'adresse o| un point d'arr}t a {t{ pos{, le nombrte de fois que ce point doit }tre "pass{" avant d'}tre op{rationnel et le nombre de fois que ce point a {t{ "pass{". exemple: E0/100D - 03 - 01 signifie que le debugger doit interrompre l'ex{cution du programme au troisi}me passage @ l'adresse EO/100D et qu'il est d{ja pass{ 1 fois @ cette adresse. DEBUGGER page 12 Au d{part, il y a 9 lignes pr{vues pour les indications d'interruption. Mias on peut modifier ce nombre en faisant varier la quantit{ d'interruptions ou de zones prot{g{es. Pour modifier l'affichage des interruptions, tapez BP ; les commandes suivantes sont alors disponibles: passe @ l'adresse suivante fl}che bas passe @ l'adresse suivante fl}che haut passe @ l'adresse pr{c{dente fl}che gauche passer sur la zone "adresse". Indiquez l'adresse o| l'interruption doit avoir lieu en mettant ou non un / apr}s le n[ de banc. Si vous n'indiquez pas de n[ de banc, celui de K est utilis{ par d{faut. fl}che droite passer sur la zone "compteur". Indiquez le nombre de passages par une valeur hexa. Si cette valeur est 0, l'interruption est ignor{e. ? affiche un menu d'aide (tapez une touche pour revenir @ l'affichage RAM, except{ ESC) ESC revenir @ la ligne de commande Les commandes suivantes peuvent }tre entr{es sur la ligne de commande et affecteront le contenu des registres d'interruption: CLR toutes les interruptions sont annul{es. IN insertion d'une interruption r{elle. Le registre BRK passe de o @ i et un BRK est positionn{ @ chaque adresse indiqu{e dans l'{cran des interruptions. Pour que les interruptions aient lieu lors d'une ex{cution en temps r{el, il faut utiliser cette commande. Voir le chapitre IV. NOTE: on ne peut {diter les points d'interruption lorsque la commande IN est active. Utilisez d'abord la commande OUT. IMPORTANT: si vous quittez le debugger alors que IN est actif, les zones m{moires o| devaient se produire les interruptions vont contenir un vrai BRK. Utilisez la commande OUT avant de quitter le debugger. OUT ote les interruptions r{elles. Le registre BRK passe de i @ o et le contenu des m{moires o| devaient se produire les interruptions est restaur{. DEBUGGER page 13 26- affichage des zones prot{g{es: Le d{bugger permet d'indiquer des adresses qui seront prot{g{es lors de l'ex{cution du programme en mode TRACE ou PAS A PAS. Chaque zone prot{g{e est affich{e dans cet {cran avec le type de protection: T mode TRACE. Toute instruction en dehors de cette zone est ex{cut{e en mode TRACE ou PAS A PAS. Si on saute par un JSL dans une adresse situ{e dans la zone prot{g{e, les instructions (dans la zone prot{g{e) sont ex{cut{es en vitesse r{elle. Lorsqu'un RTL est rencontr{, on repasse alors en mode TRACE ou PAS A PAS. Lorsqu'une instruction situ{e @ une adresse de la zone prot{g{e est ex{cut{e, cette zone apparait en inverse. W mode fen}tre. Une instruction n'est ex{cut{e que si elle se trouve @ une adresse situ{e dans une de ces fen}tres. Chaque fois que K/PC contient une adresse non situ{e dans une telle zone, le programme s'interrompt. Il est possible d'indiquer des zones en mode TRACE @ l'int{rieur de la fen}tre: dans ce cas, la vitesse d'ex{cution sera modifi{e (voir le mode TRACE). Lorsqu'une instruction situ{e @ une adresse contenue dans une fen}tre est ex{cut{e, cette zone apparait en inverse. Au d{part, le debugger propose 9 lignes de zones prot{g{es et la premi}re ligne indique E1/0000-000F T pour que les outils soient ex{cut{s en vitesse r{elle. En otant une ligne d'interruption, on ajoute une ligne de zone prot{g{e (et r{ciproquement). voir le chapitre III,273. Pour modifier l'{cran de zone prot{g{e, tapez MP et les commandes suivantes sont disponibles: passe @ l'adresse suivante fl}che bas passe @ l'adresse suivante fl}che haut passe @ l'adresse pr{c{dente fl}che gauche passer sur la zone "adresse de d{but". Indiquez l'adresse de d{part de protection en mettant ou non un / apr}s le n[ de banc. Si vous n'indiquez pas de n[ de banc, celui de K est pris par d{faut. fl}che droite passer sur la zone "adresse de fin". Indiquez l'adresse de fin de protection sans mettre de n[ de banc: il est en effet le m}me que celui indiqu{ @ l'adresse de d{part. T la zone indiqu{e sur cette ligne sera en mode "protection TRACE" W la zone indiqu{e sur cette ligne sera en mode "protection fen}tre" ote une ligne de zone prot{g{e et augmente d'une ligne la zone des interruptions ? affiche un {cran d'aide. Tapez une touche (sauf ESC) pour revenir @ l'affichage des zones prot{g{es pour revenir @ la ligne de commande DEBUGGER page 14 exemple: pour sp{cifier une protection "fen}tre" sur la zone 01/1220 @ 01/12E5 sur la deuxi}me ligne, il faut taper: MP fl}che bas 11220 fl}che droite 12E5 W MP passer en mode {dition des zones prot{g{es fl}che bas passer @ la deuxi}me ligne 11220 indiquer l'adresse de d{part fl}che droite passer @ l'adresse de fin 12E5 indiquer l'adresse de fin W protection de type "fen}tre" revenir @ la ligne de commande 27- la ligne de commandes: Les commandes du debugger sont tap{es sur cette ligne et sont valid{es avec . Cependant, on dispose de plusieurs fonctions d'{dition: CTRL E bascule insertion/recouvrement du curseur fl}che gauche le curseur avance d'un cran @ gauche fl}che droite le curseur avance d'un cran @ droite CTRL D efface les caract}res @ gauche du curseur CTRL Y efface la fin de ligne CTRL X efface toute la ligne ESC efface toute la ligne CTRL Z r{affiche la derni}re commande tap{e RETURN ex{cute la commande. Toute la ligne est consid{r{e et non ce qui se trouve avant le curseur. Voici la liste des commandes disponibles pouvant }tre ex{cut{es @ partir de la ligne de commande. 271- modifier la valeur des registres: Pour modifier la valeur des registres, tapez une des commandes suivantes suivie de RETURN adresse:"chaine place les valeurs de la chaine avec le bit de poids fort @ partir de l'adresse indiqu{e. Exemple: 104ED:"aA met $E1 en 01/04ED et $C1 en 01/04EE adresse:'chaine place les valeurs de la chaine avec le bit de poids fort masqu{ @ partir de l'adresse indiqu{e. Exemple: 104ED:"aA met $61 en 01/04ED et $41 en 01/04EE adresse:!caract}re place la valeur correspondant au caract}re aves le bit de poids fort masqu{ dans l'adresse indiqu{e. exemple: 104ED:!" va mettre $22 en 01/04ED adresse:instruction assemble l'instruction et place le code @ l'adresse indiqu{e. L'instruction est plac{e dans la zone de d{sassemblage. Par exemple, la commande 104ED: LDY #A1 va mettre $A0 (LDY imm{diat) en 01/04ED et $A1 (la valeur) en 01/04EE. DEBUGGER page 15 Vous pouvez m{langer les valeurs et les chaines dans une m}me commande. Exemple: 01/04ED: A1 A0 "A 'A !" va mettre successivement les valeurs $A0, $A1, $C1, $41 et $22 @ partir de l'adresse 01/04ED. Exemple: 0104ED:"Try! "This!! va placer les valeurs $54, $72, $79, $20, $54, $68, $69, $73 et $21 @ partir de 01/04ED 272- les calculs: Le debugger peut effectuer des conversions hexa <-> d{cimal. Pour cela, utilisez les commandes suivantes: valeur= conversion hexa -> d{cimal $valeur= conversion hexa -> d{cimal +valeur= conversion d{cimal -> hexa -valeur= conversion d{cimal -> hexa. Une valeur n{gative est convertie en sa valeur hexa compl{mentaire en 2 octets (ex: -10=$FFF6. Notez que $FFF6=65526 et non -10 !) 273- modifier l'affichage: Vous pouvez modifier la position du pointeur de la pile, du pointeur d'instruction en cours de d{sassemblage, du nombre de lignes affect{es aux zones @ prot{ger ou aux interruptions. Pour pr{ciser la position du pointeur de la pile, utilisez la commande SET puis les commandes suivantes: fl}che gauche remonte le pointeur de pile d'une ligne. Toutes les lignes affich{es sont d{cal{es d'un cran vers le haut. Il apparait ainsi une nouvelle adresse dans la pile. Quittez avec ESC. fl}che droite descend le pointeur de pile d'une ligne. toutes les lignes affich{es sont d{cal{es d'un cran vers le bas. Il apparait une nouvelle adresse dans la pile. Quittez avec ESC. fl}che haut le curseur de l'{cran de d{sassemblage est remont{ d'une ligne et la zone apparait en mode inverse. On quitte avec ESC. fl}che bas le curseur de l'{cran de d{sassemblage descend d'une ligne et la zone apparait en mode inverse. On quitte avec ESC. La zone de protection et les interruptions occupent 18 lignes @ l'{cran: ceci veut dire que ces deux options doivent se partager les 18 lignes d'affichage. donc pour ajouter 1 ligne de protection il faut oter 1 ligne d'interruption (et r{ciproquement). Pour passer sur la zone de protection, tapez MP et voyez le chapitre III,26 pour les commandes de modification. Pour passer sur la zone des interruptions, tapez BP et voyez le chapitre III,25 pour les commandes de modification. DEBUGGER page 16 274- sauver une configuration d'affichage: Lorsque votre {cran est configur{ selon vos d{sirs, il est possible de le sauver pour ne pas avoir @ r{{crire les options @ chaque chargement. La sauvegarde va conserver: - la position du pointeur de pile et l'affichage de la pile (commande SET) - l'instruction en cours de d{sassemblage (commande SET) - les zones m{moires prot{g{es (commande MP) - les interruptions (commande BP) - l'affichage des zones m{moires et des types d'affichage (commande MEM) La sauvegarde et le chargement de la configuration peut se faire @ tout moment. Tapez les commandes suivantes: CSAVE pr{fixe sauvegarde de la configuration sur la disquette PREFIXE. Ex: CSAVE /PROGRAMS/DEBUG/CONFIG.STORE CLOAD pr{fixe charge la configuration @ partir de la disquette PREFIXE 275- impression: Il est possible d'imprimer l'{cran tetxe avcec la commande P num{ro impression sur l'imprimante connect{e au slot N[. Si vous utilisez le port du GS ou une carte conect{e en slot 1, vous n'avez pas besoin d'indiquer le n[1. L'impression se fera pour l'{cran texte 80 colonnes uniquement. 276- les autres commandes: Voici les autres commandes diponibles @ partir de l'{cran principal. Vous pouvez mettre ou pas un / apr}s le n[ de banc lorsque vous sp{cifiez l'adresse adresse G JSL @ "adresse". Si vous ne sp{cifiez pas l'adresse, c'est celle de la pile qui est prise par d{faut. adresse J JML @ "adresse". Si vous ne sp{cifiez pas l'adresse, c'est celle de la pile qui est prise par d{faut. Prefix n nom change de nom le pr{fixe n du Prodos 16. Si n n'est pas sp{cifi{, la valeur 0 est prise par d{faut. Cette commande fonctionne comme la commande PREFIX du CPW SHELL. V affiche la version du CPW utilis{ Q pour quitter le debugger DEBUGGER page 17 28- affichage du contenu de la m{moire: On peut afficher 368 octets successifs de la RAM. Pour ce faire, indiquez l'adresse de d{but suivie de : Par exemple, pour obtenir l'affichage des 368 octets @ partir de l'adresse $1000 du banc 12 (le / est optionnel) 12/1000: L'affichage se fait en hexa et ASCII. Les codes ASCII sont les suivants: $00-$1F pomme ouverte $20-$7F vid{o normale $80-$BF pomme pleine $C0-$FF vid{o inverse Pour revenir @ l'affichage principal, tapez ESC. 29- afficher la page directe: L'affichage de la page directe se fait avec D . Vous avez alors les 256 octets @ partir de l'adresse situ{e dans le registre D. 30- menu d'aide: A partir d'un {cran d'affichage quelconque, tapez ? pour avoir le menu d'aide correspondant. Vous revenez @ votre page de travail en tapant une touche (sauf ESC qui ram}ne obligatoirement @ l'affichage principal). 31- affichage de l'{cran utilis{ par le programme: Pour afficher la page {cran utilis{e par le programme, tapez OFF. Vous vous retrouvez en mode 80 colonnes; mais pour en changer il suffit de passer en mode TRACE ou PAS A PAS et d'utiliser les commandes d'affichage appropri{es (voir chapitre IV,1). IV EXECUTION DE VOTRE PROGRAMME: Votre programme pourra }tre ex{cut{ pas @ pas, avec contole du contenu des registres et ex{cution de certaines routines en temps r{el. Nous allons voir comment proc{der. IMPORTANT: en mode TRACE et STEP, si votre programme acc}de aux 20 octets pr{c{dant la pile du d{bugger ou aux 8 octets suivant cette pile, le debugger s'interrompt et affiche S= sur la ligne de commande. En ex{cution en temps r{el, c'est le plantage complet. DEBUGGER page 18 1- modes TRACE et STEP: S passe en mode PAS A PAS @ partir de l'adresse suivant celle du registre K/PC. L'instruction en cours est ex{cut{e en tapant sur ESPACE. Si vous tapez RETURN, vous passez en mode TRACE. adresse S m}me chose, mais l'adresse en cours est celle sp{cifi{e. T passe en mode TRACE @ partir de l'adresse suivant celle du registre K/PC. L'ex{cution se poursuit tant que vous ne pressez pas ESC ou qu'un BRK n'est pas rencontr{. adresseT m}me chose, mais @ partir de l'adresse sp{cifi{e. Lorsque vous }tes en mode TRACE ou STEP, les commandes suivantes sont disponibles: ESC arr}te l'ex{cution et repasse la main @ l'utilisateur ESPACE ex{cute une instruction en mode STEP RETURN passe du mode STREP au mode TRACE R le TRACE s'interrompt d}s qu'un RTS, RTI ou RTL est rencontr{. Cette commande permet de n'ex{cuter qu'une routine @ la fois. J si l'instruction suivante est un JSL, elle sera ex{cut{e en temps r{el (jusqu'au prochain RTL ou RTI). Si ce n'est pas un JSL, cette commande est sans effet. fl}che B saute la prochaine instruction. Utile pour "passer" par dessus un BRK. fl}che G mode lent fl}che D mode rapide Q connecte/d{connecte le son pomme pause tant que la touche est enfonc{e Les commandes suivantes sont disponibles lors de l'ex{cution du programme: 1 affichage de la page 1 (texte ou graphique) 2 affichage de la page 2 (texte ou graphique) 4 affichage en 40 colonnes 8 affichage en 80 colonnes T affichage page TEXTE F affichage page graphique compl}te M affichage page graphique mixte L affichage page graphique basse r{solution H affichage page graphique haute r{solution D affichage page graphique double haute r{solution S affichage page graphique super haute r{solution B affichage page graphique double haute r{solution N&B C affichage page graphique double haute r{solution couleur note: si le filtre est activ{, il faut maintenir appuy{ la touche de commande de filtrage DEBUGGER page 19 2- les filtres: Si votre programme fait appel @ une entr{e clavier identique @ une commande du CPW, il risque d'y avoir quelques probl}mes. On a donc pr{vu l'emploi des commandes filtr{es: il s'agit d'une touche qui doit }tre maintenue enfonc{e pendant qu'on appuie sur la commande d{sir{e du CPW. KEY=nombre chaque bit du nombre binaire repr{sent{ par le nombre hexa sp{cifi{ va caract{riser la touche de filtrage utilis{e --------------------------------- bit ! 7 ! 6 ! 5 ! 4 ! 3 ! 2 ! 1 ! 0 ! S......Shift --------------------------------- C......CTRL touche ! A ! O ! ! K ! R ! CL! C ! S ! CL.....CapsLock --------------------------------- R......REPEAT hexa ! 80! 40! 20! 10! 08! 04! 02! 01! K......clavier --------------------------------- externe O......Option A......Pomme Ex: pour utiliser les touches SHIFT et CAPSLOCK comme filtre, tapez KEY=05 3- protection des zones m{moires: Le debugger permet de sp{cifier des zones o| l'ex{cution se fera en vitesse rapide (mode TRACE) et des zones o| l'ex{cution sera interrompue (mode WINDOW). les instructions situ{es en dehors d'une zone T sont ex{cutables en mode TRACE ou STEP. Si un JSL intervient @ une adresse situ{e dans la zone T, l'ex{cution se fait en mode rapide jusqu'au premier RTL: l'ex{cution repasse alors en mode TRACE ou STEP. Utilisez cette possibilit{ pour l'ex{cution des routines d'entr{es/sorties; par exemple. Notez que les routines d'arr}ts ne fonctionnent pas si elles sont positionn{es dans une zone prot{g{e. Il faut utiliser des BRK. Lorsque le mode WINDOW est actif, seules les instructions situ{es dans de telles zones sont ex{cutables. Si par exemple un bug de votre programme fait qu'il y a un saut innopin{ dans une zone m{moire, il suffit d'exclure cette adresse de la zone ex{cutable pour obliger le programme @ s'interrompre au moment du bug. 4- les points d'arr}ts: Les points d'arr}ts peuvent }tre r{els ou interpr{t{s. une interruption r{elle est un BRK, et une interruption interpr{t{e n'est effective que lorsque la commande IN est activ{e. Pour toute interruption, un compteur doit }tre indiqu{: ce compteur indique le nombre de fois que l'on doit passer @ cette adresse avant de provoquer une interruption. Pour annuler l'effet d'un BP, mettez son indicateur @ 0. Si l'indicateur est @ 2, le programme passera une premi}re fois @ l'adresse indiqu{e et s'arr}tera lorsqu'il repassera la deuxi}me fois. Pour effacer les BP, tapez CLR. DEBUGGER page 20 V LES COMMANDES DU MONITEUR: Vous passez en mode moniteur en tapant MON. Pour revenir au debugger, tapez simplement CTRL-Y . Voir le manuel CORTLAND FIRMWARE pour les commandes moniteur. Voici un apper\u de ce que permettent ces fonctions: - lister le contenu d'une zone y compris en ROM - modifier une zone en RAM - copier une zone m{moire @ une autre adresse et v{rifier que les zones sont identiques - effacer une zone m{moire - rechercher des octets dans une zone m{moire - lister et modifier les registres - conversion hexa <-> d{cimal - op{rations en hexa (+ et -) - ex{cuter un programme en m{moire - utiliser le mini-assembleur - d{sassembler une zone m{moire - lancer le BASIC - changer d'{cran d'affichage - changer le symbole du curseur - changer les p{riph{riques d'entr{e/sortie - appeler les outils du GS - afficher et modifier les param}tres DATE et HEURE DEBUGGER page 21 Ӥ chef-d'oeuvre absolu. Gloire au FUCK, @ ses graphistes et @ ses programmeurs fous. Bon, pour en revenir au pi}ge @ con, le principe d'{jection du disque a {t{ utilis{ par le FUCK. Comme celui de ce beau GS ON THE ROCKS {tait {crit depuis Novembre, on le garde. Non mais, c'est pas parceque les mecs de l'Est ont eux aussi {crit leur routine grille-pain, qu'on va pas utiliser la notre ? Et puis, ceux qui ont 4 drives en ligne, ont surement du appr{cier la mise en route simultan{e du toutim. Et je parle pas du broutage d{moniaque si on tente de r{-ins{rer la disquette ! Pour the next GS THE ROCKS, on tachera de faire encore plus fort: par exemple dans le style 'pour copier la disquette, d{plombez-la d'abord'. On verrait ceux qui ont bien suivi la rubrique GS CRACKING depuis sa cr{ation. Et puis les petits crapauds qui vendent ces disques @ de pauvres innocents seraient oblig{ de travailler un peu. D'ailleurs pas sur qu'ils y arrivent, car d'apr}s ce que je sais, y'en a qui @ part faire du bizeness ne connaissent gu}re leur b{cane: ils savent tout juste {crire leur nom @ la place des auteurs originaux. Comme de toute fa\on ces rats sont maintenant connus de tous, il y a fort @ parier que leur volume de vente @ du chuter notablement. Parceque franchement, y doit pas y avoir grand monde au jour d'aujourd'hui pour acheter des softs dont il est de notori{t{ publique qu'ils sont distribu{s gratuitement. Au prochain GS ON THE ROCKS les amis les Artistes Associ{s Savez-vous ce que donne la rencontre des Anciens du LSD, de Mestema et des Artistes Associ{s ? Et bien cela donne un affichage graphique en mode 640 EN MEME TEMPS que le mode 320. Ces images, on les a mis en slide-show pendant la visualisation des docs. Ca va en {pater quelques uns dans les chaumi}res ! Et puis, du temps qu'on y {tait, on a rajout{ une petite fantaisie. La fantaisie, c'est la v{rif sur l'image. On pense qu'elle est pas mal r{ussie, alors pour le fun on propose le super-d{fi suivant: essayez de mettre votre nom sur une de ces images, et les Artistes Associ{s vous offrent une caisse de champagne. Pour pas qu'il y ait d'erreur ni de malentendu, cette caisse on l'offre {videmment au premier qui se manifestera. Avant de se quitter et de se donner rendez-vous pour le prochain GS ON THE ROCKS, on r{sume le super d{fi: $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$ $$ $$ Super-D{fi des Artistes Associ{s: le premier qui met son nom a $$ $$ cot{ de la photo de l'inestimable et c{l}bre GRONK (le beau $$ $$ barbu du slide-show), a gagn{ une caisse de champagne ! $$ $$ $$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Les Artistes Associ{s Depuis 3 num{ros, on vous cause de d{plombe en large et en travers. Il parait que certains suivent \a avec int{r}t. Il parait m}me qu'il y en a qui s'en servent pour d{plomber @ leur compte. Et on s'est m}me laiss{ dire que d'aucuns attendaient avec impatience les num{ros prochains pour parfaire leurs connaissances en la mati}re. Ben on peut pas dire que tout le monde partage vraiment cette opinion. Il y a dans notre doux pays, o| il fait si bon vivre, des grincheux qui voient \a d'un mauvais oeil. Chaque GS ON THE ROCKS se traduit pour eux par une crise d'urticaire g{ant. Et dans certains couloirs, il se chuchotte que \a les d{mange particuli}rement au portefeuille ! Ouaip, les gentil z{diteurs sont contrari{s par les m{chants d{plombeurs. Parceque qui dit d{plombe, dit soft pas vendu, et qui dit soft pas vendu dit bye bye bizeness ! Gaaaaarrrrgl ! Qu'entends-je ? On spolierait donc d'honn}tes citoyens ? Serions nous assez infames pour laisser perdurer cette ignominie ? Que nenni, mes braves. Les Artistes Associ{s sont de preux chevaliers. Et pour les rustauds qui ne le savent pas encore, on va le prouver. Pour faire plaisir @ tout ces braves gens, injustement d{pouill{s, on ne d{plombera donc plus. Oh, oh, oh, doucement, pas de panique, j'ai pas fini. On ne d{plombe plus, on ne d{plombe plus, c'est vite dit.... D'abord, reprendre le probl}me @ sa base: ceux qui ralent, c'est ceux qui vendent pas leurs softs. Pourquoi y ralent, ceusses-l@ ? Tout bonnement parcequ'ils ont des fins de mois difficiles quand leurs softs se vendent pas. Et ki-k's'est-y-kon accuse dans ce cas ? LES DEPLOMBEURS. Parait qu'on ruine les efforts de ces personnes. Parait qu'on leur sape le march{. Et tutti quanti. Y'en a pas un qui se serait demand{ si le probl}me viendrait pas des fois de la ch}ret{ des logiciels. Et y'en a pas mieux qui se seraient interrog{s pour savoir s'il y a des clients pour des softs bugg{s jusqu'@ la moelle. Personne ne cherche @ savoir pourquoi \a d{plombe @ tire-larigot sur le Mac, sur IBM, sur Atari, sur Amiga.... et que pourtant les softs se vendent. Non, \a c'est pas le vrai probl}me qu'ils disent. Le seul et unique responsable, c'est le d{plombeur. Pourtant, @ ma connaissance, c'est pas le d{plombeur qui {crit des jeux d'aventures aux sc{nari inconsistants. C'est pas lui qui {crit des jeux d'arcades nullissimes (bon, ok, y'a eu des pr{c{dents, mais faudrait pas g{n{raliser). C'est toujours pas lui qui {crit des Gestions de Fichiers acceptant tout juste 1000 fiches (et encore, pas trop pleines, et avec pas beaucoup de rubriques) avec 1 m{ga de m{moire. C'est encore pas lui qui {crit un Driver Imprimante pour Traitement de Texte dont la vitesse d'ex{cution est comparable @ celle d'un scribe frappant au burin sur les ob{lisques. Et c'est enfin pas lui qui innonde le commerce de pr{-versions/b{ta/0.00001 inachev{es. Etc, etc, etc..... et sans oublier que toutes ces belles productions franchouillardes sont vendues presque aussi cher que si c'{tait de l'or. Non, c'est pas le d{plombeur, qui est la cause de tout \a. Viendrait-il @ l'id{e d'un m{lomane d'incriminer les magn{tos-cassettes de la m{vente des disques de Chantal Goya ? Bon, y'en a qui sont pas convaincus. Et bien mes gaillards, on va voir ce qu'on va voir: puisque c'est comme \a, voici ce que nous proclamons: Nous, d{plombeurs sans peur et sans reproche, nous engageons A NE PLUS DEPLOMBER LES SOFTS FRANCAIS pendant 1 an. Ben voila, c'est dit; c'est m}me promis-jur{. On vous laisse tranquille, on vous laisse cr{er-d{velopper-{diter-vendre-investir tout ce que vous voulez. On n'y touche plus. Il nous reste assez @ faire avec les softs Amerloques. Et puis dans un an, on se fait un petit bilan. On pourra plus nous accuser de sabotage, d'intelligence avec l'ennemi ou de concurrence d{loyale. Alors p't}t ben qu'il y en a quelques uns qui verront que si leurs softs se vendent pas, c'est pas la faute aux d{plombeurs. les Artistes Associ{s PS: si par hasard des petits malins se pr{cipitaient pour d{plomber ces fameux softs fran\ais que d{sormais nous ne toucherons plus, ils ne feraient que conforter les Editeurs dans leur opinion. Donc, on demande vivement @ tout le monde de souscrire @ notre engagement. C'est la seule m{thode pour leur prouver une bonne fois pour toutes que d{plombe et march{ prosp}re du soft peuvent cohabiter tranquillos. Ce mois-ci, le BIG SMACK a {t{ d{cern{ @ l'{quipe du F.U.C.K pour leur merveilleux Only for your Eyes. En effet, qui ne connait pas CANAL FUCK + avec ses mots de passe et autres astuces du m}me accabit. Si ce n'est d{ja fait, il faut toute affaire cessante vous pr{cipiter chez votre dealer habituel et lui extorquer ce chef-d'oeuvre absolu. Gloire au FUCK, @ ses graphistes et @ ses programmeurs fous. On ne dira jamais assez de bien de cette magnifique r{alisation. Si certains ont m{rit{ le BIG SMACK AWARD, il y en a d'autres pour qui le seul troph{e envisageable est le BIG SHITS. Voici donc le moment tant attendu: LE BIG SHIT AWARD gros Big Shit gluant et puant @ SHOP GS qui vend les softs d{plomb{s (et m}me les d{mos). Que les foudres de l'APP s'abattent sur lui. gros Big Shit gluant et puant aux masos qui ach}tent @ SHOP GS: s'ils ont des thunes @ craquer, ils ont qu'@ aller chez un revendeur agr{{ o| ils se feront encore plus arnaquer, ce qui avivera leur plaisir. gros Big Shit glaireux au gros porc @ lunettes qui a eu le premier MONTE CARLO et n'a pas voulu le filer aux copains Parisiens gros Big Shit {pais et fumant @ ceux qui prennent les pseudos des autres: par exemple sur RTEL, y'a un SAM TOOLS qui n'a rien @ voir avec le d{plombeur sympa des Artistes Associ{s. voila, c'est tout pour aujourd'hui non, c'est pas tout: On oubliait quelqu'un. Vous ne voyez pas ? Mais si, le seul, l'unique, celui qui est r{guli}rement cit{ dans GS ON THE ROCKS: le BADABEU de l'Is}re: le d{sormais c{l}bre SERGE On lui rappelle qu'on pense toujours @ lui. D'ailleurs s'il lit ces lignes, c'est qu'il a r{ussi @ d{jouer le Pi}ge @ Con: donc c'est qu'il devient un peu moins badabeu. Enfin, \a, c'est une autre histoire. "${iH"%6 ,"፞  {iH"*6{i "${iH"/6 F&: {iH "፞ H "#h{iH"/6 H"፞ h{iH"96"፞ ߢ "፞ {i+kCliquer pour arreter d'imprimerChoisissez votre Documentation: ;8[iCH"፞ h:H")h{ifH,,eH"#H:H")h,,eH{iDH"%{ifH{iDH"#HHH "፞ hӆ{ifӅՅ{iH"%6 ,"፞  {iH"*6gN :H")hett t tttttttttt t"t$t&t(t*t,t.t0t2t4t6t8t:t<>@B?DFHtJtLHH{igH "፞ hφѢ"፞ Ϣ"፞ "፞ H"፞ hd{iDH "፞ {iDH"፞ 㩾8pI0"፞ ZZH"፞ 2  ~ZZH"፞ "፞ HHg"፞ h׆d۩ݩߩ~{i{iH"/6f f5 : {iH"I {iHע~"፞ H "#hH "#hIH"`-hH"-h f t {iH"/6 H {iHע~"፞ :"፞ "፞ H "#hH"`-h{iHU"፞ "፞ 㩾8pI0dH"፞ Ϣ"፞ ZZH"፞ "፞ H"፞ h{iH"96Ӣ"፞ עh"፞ Ϣ "፞ {i+;ik--- Cliquez pour sortir ---3/ ;8[iiiMM99{iH"%{iH"#{iH"%{iH"#xx[[{iH"%{iH"#"፞ HHH-"፞ hH "፞ HHH-"፞ hH "፞ HHH-"፞ hH "፞ H"፞ h*"፞ {i+k==Morceau Suivant \N412*Ss. ==Reprendre la musique \N411*Rr==Arreter la musique \N410*Aa>> Musique \N3#== Impression d'une Doc \N407*Ii. ==-\N999D== Afficher une Doc \N403*Dd>> GS On The Rocks IV \N1==Quitter\N402*Qq.==Les auteurs... \N400V*??>>@\N0X ;8[iY Y 9;=?AIKMOQ#;HH{iH{iH "፞ h  HH"፞ g HH{iH H99H "፞  HH8"፞ {iHdK"፞ HH{iH 44H99H "፞ {iHdK"፞ HH{iH IIHIIH "፞ {iHK"፞ HH{iH ^^HIIH "፞ {iHK"፞ HH{iH ssHIIH "፞ {iHK"፞ HH{iH HIIH "፞ {iHK"፞ HH{iH H99H "፞ {iHdK"፞ HH{iH H99H "፞ {iHdK"፞ HH {iH HIIH "፞ {iHK"፞ HH {iH HIIH "፞ {iHK"፞ HH {iH HIIH "፞ {iHK"፞ HH {iH HIIH "፞ "፞ "፞ "፞ :"፞ "፞ :"፞ "፞ ,"፞ v:"፞ 8v<"፞ {i+k+images et vous gagnez une caisse de champ !+SUPER DEFI: mettez votre nom sur une desChoix de la doc ;8[iߥ߂u"8 "r"  ; "፞ p ; "፞ X;"፞ ; "፞ 38* 0" H` '29@Xp ,"፞ {i+;ik ;8[i  H{iH"፞ hͥ"H{iH"#hH{iH{iH{iH"#hh˂0HH"፞ hÆâ "፞ Y " 18( 0 H` "R  {i+k ;8[i5ͩ!!φ{iH"6dͩ!!φ{iH"6{iH!! "#{iH"#!, !. !0 !2!4!6{iH "#44{iH"# A C E {iH"%{iH{iH"#II{iH"# V X Z {iH "#^^{iH"# k m o {iH"%{iH{iH"#ss{iH"# {iH "#{iH"#       {iH "#{iH"#    {iH "#{iH"#    ~ ~ | | u u {iH"%{iH{iH"#{iH"#o q s {iHc c "#{iH"#^ `  b  {iHQ Q "#{iH"#H J L N  P  {iH< < "#{iH"#4 6 8 : {i+kMEM.MAN Mem.ManagerINT.MATH Integer MathTASK Task MasterDEBUGbuggerDMEM.BAS Basic MEM DOSPRO.SELPro.Sel SMACK.SHIT Big Sh..mackPAC Conge PiCRACK GS CracksDEFIfiSuper DINTRO Introduction MODE.EMPLOITutorial3/0/DOCS ;8[idͩw!w!φ{iH"6o!o!͆ϩ{iH"z6{i+k0/START1/ ;8[i"!`t"t"; "፞ m"m"; "፞ f"f"; "፞ _"_"; "፞ X"X"; "፞ Q"Q"; "፞ "] ; "፞ ""፞ ""8 Y "","u"&!{i+kM6.MCSM5.MCSM4.MCSM3.MCSM2.MCSM1.MCSH  ;i6#{8#HH ;[ H "H"h:#HH:#H "h.#h0#H "HHH:#H "h2#h4#e: "k ;[6#8#[Z0#H.#H"4#H2#H""<#" k"Ꮮ k ;[ # # :T+  ;i k ;[ $ $ e:e::D+  ;i k ;[   :0 )   h)+H   ;i(k HH;[H"h H "  hh+;ik ;[HH""+;ik ;[0  +  ;i k ;[0  +  ;i k ;[0   +  ;ik ;[  Ȁ +  ;ik ;[  Ȁ +  ;ik ;8 [  d) e )e     ;e i ;[907301 )80'e     +  ;ikHH ;[ d0b) W  gF @ e )e)8 0  ):  +;ik HH;[ F0D @0>)8 04  8 8  e :e   hh+  ;ik H;[d 8 2 )    8 ) h+  ;ik {cH;[hh+hk {cH;[ JJJ -)0 0 0 0 0 0 0  hh+hhk {cH;[  :JJJ 1)0 0 0 0 0 0 0  hh+;ik{cH ;[ +;ik{cH ;[ I7+;ik{cH ;[ 7+;ik ;[   (+;i (k ;[I7   (+;i (k ;[ I7  (+;i (k ;[ jjjjjjjj +;ik ;[JJJ+)0 0 0 0 0 0 0 7    (+;i(k H;[IIʩ FeI+k H;[ I Iʀ f  8 F F I+kcck8k H;[IIIIʀFf ee&IIhhhh+k H;[ I I IIʀ&&ff !  8  FfFfͥ  IIzzzzzz+kIIkIIk##kkCCkIIk8 # zz(k *kJjkjjjk***k;8 ;[  {iH "{iH{i H " +;ik;8 ;[  {iH "{iH{i H " +;ik;8 ;[H({iH "#h+;ik;8 ;[H({iH "h)+;ik ;[:")hH ")h::H:"+;ik;8 ;[{iH "{iHU""-+;ik;8  ;[{i H)" 8   {iHU"+;i k;8 ;[{i H)" 8d  "B*zH"-HHg"h{iH ~"h"+;ik;8 ;[{i H)" 8d  "B*zH"-HHg"h{iH~"h"+;ik ;[) 2eH0"+;ikHHH ;[ HHHHH &"  Ȁ8: ))e:  +  ;ikHHH ;[H HHH HH '"  Ȁ 8: ))e:  +  ;i k;8% ;[$ &{i$H-H+H{iH "{i$H{iH1H/H "+'+&*;i)k ;[HHH)H ("h +;ik ;[HHHH)H )"h h +;ik;8& ;[.H,H{iH{iH{iH "{iH2H0H "+(,'+;i*kHHH ;[ )f A [8Ai a {8ai 80))  J ) J) +  ;i k""""""""""""""""""""""""""""""""33333333333333333333333333333333DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUffffffffffffffffffffffffffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww ;[HH "h h +k ;[HH "h h +k ;[;8 ")) )))));i+k ;[ H HHHHH "+k ;[;8")) ;i+k ;[;8" ;i+k ;[;8+" ;i+k;8 ;[.0*, & ( "$ ;iH"+;ik ;[;8 " ;i+k ;[;8 " ;i+k ;[;8 " ;i+k}xsn i d _ZUPKFA<72-(# "#'( )*666";i (k;8  ;[ddK\:")hiK ) A[i     + ;ik;8 ;[$&{iH"%6Z P$&") d d dd{iH"5$&{iH"%6?(+$#;i"k;8$ ;[HH,*"6hH,*.">7h?222202 2 2 22 2.)aHHH" "h!#%#2%2# {iH"*6 22+&2%1;i0k;8 ;[$$D$dd{iH"C6?$$$$$ $$ + $#;i"k;8( ;[HH0."6hwK! " "666646 6 6 66 62)AHHH" "h!#!%!'%6'6 66H0.2">7h)?6)66646 6 6 66 62)\HHH" "h!#!%!'%6'6) {iH"*6 666dd{iH"M6+*6)5;i4k;8 ;[  $ dd{iH"M6?   + ;ik;8 ;[$$>${iH"96?$$HH""+ $#;i"k;8 ;[$& " {iH"6?+$#;i"k;8 ;[ "{iH"5?+ ;ik?k;8 ;[  9 $& d {iH"/6L  ?+$#;i"k;8 ;[  9 $& d {iH"46L  ?+$#;i"k;8 ;[?$$?$$H ""*h{iH"C6M $?+$#;i"k;8 ;[  / {iH"H6? H"9+zz$&+ ;ik ;[) +;ik;8 ;[$$$$$) d {iH"46L $?+ $#;i"k;8  ;[&&& d {iH"/6!&&  &!L &?+"&!%;i$k ;[) +;ik ;[ HH"N?+;ik ;[ HH"N?+;ikHH ;[   ȥ  "A+ ;i kHH ;[  )   "A+;ikHH ;[  1@3@ȯ5@,@.@ȯ0@  "A+ ;i ktruefalseHHHHH ;[HHHHH &"  Ȁ 8 : ) )e:   "A+  ;ikHHHHH ;[HHHH HH '"  Ȁ 8 : ) )e:   "A+  ;ik;8) ;[//3 (3*(5 *{i(H9H7H{iH "{i(H{iHHH "5/1"A++7*6;i)kHZHH ;[ 80,* )e)     HH" >% YBȷZBȷ[B HH"7B+kHH ;[   " E) "aE+  ;ikHH ;[   " E  ) "aE+ ;i kHHHH ;[" E:e   Ȁ :    +  ;ikHH ;[   "D%HHeHژ8 ("h "aE+ ;i kHH ;[   "D ,HHHeHژ8 )"hh "aE+ ;i k;8* ;[0002"DLHH{iH{i H{i H "{i H6H4H "02"aE+,4+3;i*kZHH ;[ " EN)   Ș " EȀػȷ)  Ȁ阠+hhhhkZ ;[ )? HH"p>% ZEȷ[Eȷ\E HH"8E+kZ ;[ ) )   +k;8 ;[d)  : H"h{i H)"{i H "H{i H{i HO"h)HH:" HH")j{i H)"H i H:" @HHg"{i HHH H H~"h"H 8 H:"HH "h)5HH "h)!HH ") PG "?+;ikg;86 ;[<<H"h{i H)"{i1H "H{i H{i1HO"h)HH:"d{i H)"  i{iHV"᩼ {iHV"᩼ H({iH "hͥ) {iHU" H i H:"႑v8pI=) {i H)"H H"8hH H:" 8 i{iHU"H"  <5 hHHg"{i1HHH H H~"h"H 8 H:"&HH $"h  <?+8<7;;i:k;8 ;[d)  : HH "ဍ HHH "፞ h߆H"፞ {i+k1/PIC31/PIC21/PIC1 ;8[i8pI686pI6HH"፞ hۆݩH"፞ HHg"፞ hHH "፞ h߆$"፞ "ۢ"፞ h"፞   {i+k ;8[iH"፞ 8pI0$: HH"፞ {i+k9mKyD=kjv /!26`{ 6d%5DKS\p 8T(COf ps|2CH]q&1oy$3_q  9Hhlw%@Lc9l'<ehd)4)88pI)4)88pIe)4)88pIe ߂H4848pIsߩ8pI0\ ):)8)8 ߂4  "Ꮮ {i+k ;8[inGG"?U:"፞ "፞ "፞ 99"፞ i:"፞ "፞ {i+k'et degustez le Piege a Con du L.S.D !!!# Please, Bootez GS on the Rocks IV ;8[iKKDD==2۩8pI0 ۂ۩8pI0: dd{iH"%65{iH"R6ѥHH }H "፞ h͆ϥ: ͝ϝͪͅHHѭH "፞ hɆˠɪɅ߆߅ᅯхӅ{iH"/6{iH"96 Ѧ"*hцөdץעHߦ"*hņǧEم٥هť ٥I!Cץעͫ٥хץעHߦ"*hņǧEم٥هť ٥I!Cץ}H{iH{iH'"፞ hݥݢHߦ"*h߆: hheHHH "#ɢ"፞ : H"፞ h8: ͪͅ:<: >: @e@@ۂl"፞ ۩8pI0"፞ ۂ6H"፞ Z0\  k4  JM­.u5^,җ~P+K\y̾KY _ʷ~D嶭vOsrîxïyɤcشsiɴLF5 QHzھ2.x~#ǜX̾7F9QA-4kN&Vv W9X|kLكzӊ$6iyiyɤiicyiҾyRN4 QB)9'UP o)N<, .#C|:Z)6u=dk`pؾN uReѠnߖ$1Tzixiyɤiicycchyh4RR[[5KTwv/.=Jz3-der>2cќw#c4F{ Lr3pcҾ¾SE6Cmy]8},հ)_$**5 LSD.SYS16 5PIC3 5PIC2 PIC1BPRODOSSYSTEMSTART DOCSR5BJAZZCOMBO.WBNK 5FACTT FINDER.ROOTu FINDER.DATAUBM1.MCSUM2.MCSUM3.MCSUM4.MCSUM5.MCSuBM6.MCS.&jh$>* SYSTEM.SETUP HP8 P16TOOLS&jhRHTARIFUPFCBLEARY3STARTUPFCBLEARY3FACTARIFCBLEARY3CONT2.SNCBLEARY3CONT2.INCBLEARY3HCOUNT.INCBLEARY CARAC.INCBLEARY CARAC.DOUBLEARYCLIENTSS.SYSARYPRO.FP.S.SYSARYHFLOADRKS.SYSARY'gf$*B TOOL.SETUP sI~wxK w$C4E'+jӂ{22'heyɋwK[u 5?bG`kpcyy5um0EiˆhoFT9= %ӽ8zmfB6Ncz -`QB]Q'!m #ſ'[=0t[t~F`ES89s37mwRPFuBU<4 " D^cB[sPTP ^)72:Gk8w gyrYڻo alB;PxKL y}b{%=^D"ƶ DIu۾w 'Zꎫ' T(?Y\vQre%*:Xq2٬I'K=K'*]EDכB"uʘ<^^gd4- 2Ӏ_ @ܖ sX1<(;U`隹rUΰX9Һ)ݿU2Q8ѶōfT$⃖ǣ0To Paw~'.Ԣ=x!l!L6'C.\xX,*[RyKuP%s?`-@ u0"I"2P4If^K2vY&?) $Pj^Y{'zlFEp8#->N:ƧDR*;®->Lg$@bSR+*7*bB=<BA@+g׬Ѕz?j/jI@)G`0:7"b' z?j/jIR)jr0:7$`2bR *!BzMIr):pe:`j`P8 b R2‹H '0/%@|* @G8vj/"r= @̡ дü <ܿj< 8 ={`t@*eS >%͘2?BN zøͽ <%%A*bFˆ -*u u-ޠ|2P$*Z+bb%P*G؅C%r, B`'R*؉%894rVrnjg(؉%)Rjjg(A\8RRBWȰ$b@W,f77?4'EEDbrr*^Z7^Z7%ǥ@1H0F =G>ÒN1 R.Fܘ:X!`p@e%96xF50$b0@eSKz ~ƠJ ~`4J̒ cgF%H:z`2@ e%E:'0`e%F nbeR75`GƧYbBBBBBBBBBKBͫwA,p   X2?=u[F׍@Ǘ0P4ƕO TY&~ggBGy?d/|'tdiz><\[ro=&zw ] iIb=kැ<=zn֋cR^,Eu.7 %0uL=of,i~%;. DjG[*s2E^T4Ic}EDTJr[m?!ku2~]UhULndm ^(MMR,A@+͵;ҫ<^w&$$>u4󌤺ǁXF`3<^w( ir\/Lp Y-1ļK,RpM *71j1r+%LWu‚@  *rbڥ[:iJ 33M3P>2EBXóFS9@%}GLY B >%*9S5r=xKUR"4cnc6նM{bBzƋFByBB;FШ3x=KؔcalS?·q Gk7 g'e~?7#g ݵ(&b(u 4PBKBI@ǶrTBSoxB*3xK<deͰu~{ue3555?~U^3%:U^]ĺR"4OcrjIH{BKB1B{IL{BIp5@B LmwfqfWcӖw bJ9qc#$Lm?B3E1&P3Pb^5dǕro{rbotPiBIp1b,oPўlPܫҫ>Pgߠoc?g+ҡWW% Vεό8A7^KZKҫH\G"4ccGpHBKB1B{{zBu6ߍe%7vL-7PAi&/G!;K^K5-{=Uߕt?iDT@cYc,&oVbr^boLbbzPVFֆĕ~?D`24}=γ<&UY=CcPG>XPpJ!Fh(m=E6cIczGzJrKJrIp0pJKu=6m=(mc?F@X_.P'{E?"@~wJRޕ_FovIJN V֨ ҕsEZEuH2D KwvLi'0v()#FX:i< $N ̷ ?xlL`;3<22 y<^ PK? *npQ;DS" €ݡZe42"4BcEb:w^(NJ3PwK)R[ d)V13%x* D"4c3DBRR4s^Bc!kxKK^K;~׾+9#EE.f3bv\u3/Zo?[9ʮKװ`?Su$=a2$ȥ"4E4yU hcɚɒk[ +S WBKrUzUJyOIRIUes>)4Bx߰edruǢ37DZ 'e&1]'])K]P+JAH7xgrgYR] ģɉE pUDRԴBUS`I lUڥRUUWQ3 ,/򁉝;SRUZ]Ν:#Wx{JdgIAKNAZI|8C#t0mQ4A4w|5Oa㝋Abk[%¼yrqܢAEW4k#UG}=;==/=E9D8E9G;C==9=G=C=@=;==/=C7B6C7E9B==6=B=G=?=;==/=4==(=C>@>>;>/==;=C=@==;=(=+ =/ =( ==@=@/=7=+ =( =* =/ =BC>(>+ >/ >>( >C/=7=+ =/ =( =B@(=/ =+ =( =BC/=7=/ =+ =( =E(>G>/ >+ >>( >G/=7=/ =+ =( =CE=3=/ =3 =9 ==6 =9;B !"#$%&'()*+=3 =9 =6 =/ =;9/=3 =9 =6 ==/ =SG9>;>- >0 >4 >& >CO/ =3 =9 =6 =2=E==Q=9;3 =/ =9 =6 =B=N=9;3 =/ =9 =6 ==/=B& >- >0 >4 >9>;>@/ =3 =9 =6 =6==?=?3 =/ =9 =6 =9=;=@3 =/ =9 =6 =/==B=B3 =/ =9 =6 =9=;=@?& >- >0 >4 >6>@B& =- =0 =4 =9=;=C3 =/ =9 =6 =/==E=C3 =/ =9 =6 =9=;=B( >/ >+ >(>>C>47+ =/ =( =@=74( =+ =/ ==-=EQ& =- =0 =4 =4=6=<=BN( =+ =/ =(=O==C=47/ >+ >( >L>@>74( =+ =/ ==/=/ =+ =( =6=9==;=( =+ =/ =(==@=@/ >+ >( >/>7>B( =+ =/ =(==C=C/ =+ =( =7=/=B@( =+ =/ =(=BC/ =+ =( =/=7=E( >+ >/ >(>>G>G/ =+ =( =7=/=C/ =3 =9 =6 =3==E=9;/ =3 =9 =6 =B=;9/ >3 >9 >6 >>/>GS- =0 =4 =7 =9=;=OC/ =3 =9 =6 =Q=E==2=9;/ =3 =9 =6 =B=N=;9/ =3 =9 =6 ==/=B- >0 >4 >7 >9>;>@/ =3 =9 =6 =?==6=?/ =3 =9 =6 =9=;=@/ =3 =9 =6 =B==/=B/ >3 >9 >6 >9>;>@?- =0 =4 =7 =6=@B- =0 =4 =7 =9=;=C/ =3 =9 =6 =E==/=C/ =3 =9 =6 =9=;=B( >+ >/ >C>>(>/7/ =+ =( =@=7/- =0 =4 =0==<=B4 =0 =/ =- =;=/=?@( =+ =/ =4=7=BC/ >+ >( >>E/ =+ =( =G===/ =3 =9 =6 =;=?=/=9==6=@( =+ =/ =4=7=BC/ =+ =( ==E/ =+ =( =G===/ =3 =9 =6 =;=?=/=9==6=@74( =+ =/ =C7B6/ =+ =( =@4>2& =- =* =B6@4* >- >& >>>2<00 =4 =7 =@4>27 >4 >0 ><0;=/ =6 =3 ==/=/ =3 =6 =F=B=N=6==*=/ =3 =6 =S=G=K==/=B6@4>2?3@4B6/ =2 =+ =C=+==7=+ =/ =2 =G=J=S=;==>=2 >/ >+ >G>C>O>>2>+ =/ =2 =S=G=J=;==>=/ =2 =+ =O=G=C==7=B6+ =/ =2 =@4>22 =/ =+ =?3@4+ >/ >2 >A5- =& =* =0 =B=6==-=* =- =& =0 =E=H=Q=9==<=0 =- =* =& =B=H=N==2=& >* >- >0 >Q>H>E>9>><>- =& =* =0 =N=H=B==-=B6* =- =& =0 =@4>20 =- =* =& =?3@4& =* =- =0 =A5- >& >* >0 >B>6>>->* =- =& =0 =H=<=9==6=0 =- =* =& =E=9==&=& =* =- =0 =B=6==2=0 >- >4 >->@{>4{<94 =0 =- ==<9& =* =. =2=&=B{=6{. >* >& >>>:>>>/ =+ =- =2 =/=2==>85) =/ =2 =8 =2=58& =* =- =0 =0=6==9=) =/ =2 =8 =,=4==;=& >* >- >0 >>>6><>>->B60 =- =* =& =@4>20 =- =* =& =?3@40 =- =* =& =B6+ =/ =2 =C=+==7=2 >/ >+ >G>J>S>;>>>>2 =/ =+ =O=G=C==2=2 =/ =+ =S=J=G=>==;=+ =/ =2 =O=G=C=+==7=G2 >/ >+ >;>>>EC2 =/ =+ =5 =2=AzEG2 =/ =+ =5 =;=>=C0 =4 =7 =@=E==0=7 =4 =0 =G==7=7 >4 >0 >E>@><>>+>7 =4 =0 =C==7=- =+ =7 =4 =1 =@===7==-=@- =+ =7 =4 =1 =B<E7 >4 >1 >+ >. >->CB7 =4 =1 =+ =. =9=7=@+ =/ =2 =>=2=7==;=;/2 =/ =+ =>22 =/ =+ =@==4=2 >/ >+ >C>>7>- =4 =7 =1 =-=;z=Gz=C- =4 =7 =1 ==C0 =- =* =& =2=&=E{=9{0 >- >* >& >B>><>+ =/ =2 =C=;=+==7=B62 =/ =+ =@4>20 =- =* =& =?3@40 =- =* =& =B6+ >/ >2 >C>7>>+>BN6L@4J>2?K3L@4NB6/ >2 >+ >C>+>>7>+ =/ =2 =G=J=S=;==>=2 =/ =+ =G=C=O==2=+ =/ =2 =S=G=J=;==>=/ =2 =+ =O=G=C==7=B6+ >/ >2 >@4>22 =/ =+ =?3@4+ =/ =2 =A5- =& =* =0 =B=6==-=* >- >& >0 >E>H>Q>9>><>0 =- =* =& =B=H=N==2=& =* =- =0 =Q=H=E=9==<=- =& =* =0 =N=H=B==-=B6* =- =& =0 =@4>20 >- >* >& >?3@4& =* =- =0 =A5- =& =* =0 =B=6==-=* =- =& =0 =H=<=9==6=0 >- >* >& >E>9>>&>& =* =- =0 =B=6==2=0 =- =4 =-=@z=4z<94 =0 =- ==<9& =* =. =2=&=B{=6{. >* >& >>>:>>>/ =+ =- =2 =/=2==>85) =/ =2 =8 =2=58& =* =- =0 =0=6==9=) =/ =2 =8 =,=4==;=& >* >- >0 >>>6><>>->B60 =- =* =& =@4>20 =- =* =& =?3@40 =- =* =& =B6+ =/ =2 =C=+==7=2 >/ >+ >G>J>S>;>>>>2 =/ =+ =O=G=C==2=2 =/ =+ =S=J=G=>==;=+ =/ =2 =O=G=C=+==7=G2 >/ >+ >;>>>EC2 =/ =+ =5 =2=AzEG2 =/ =+ =5 =;=>=C0 =4 =7 =@=E==0=7 =4 =0 =G==7=7 >4 >0 >E>@><>>+>7 =4 =0 =C==7=- =+ =7 =4 =1 =@===7==-=@- =+ =7 =4 =1 =B<E7 >4 >1 >+ >. >->CB7 =4 =1 =+ =. =9=7=@+ =/ =2 =>=2=7==;=;/2 =/ =+ =>22 =/ =+ =@==4=2 >/ >+ >C>>7>- =4 =7 =1 =-=;z=Gz=C- =4 =7 =1 ==C0 =- =* =& =2=&=E{=9{0 >- >* >& >B>><>+ =/ =2 =C=;=+==7=B62 =/ =+ =@4>20 =- =* =& =?3@40 =- =* =& =B6C>7>>+>2=&=J=B==>=7=+=O=G==C===dp0 ; - G`$S@- p$;? GoS_ xdP-6<0< 2-~< --   0 0<H6pQ<< ; - G`$S@- p$;? GoS_ v((< 2-e!z\lG --   }#k < <HT6dd~4n+h<< A# -$/`$;@-$gp$#?$/o;_$g+ {Phd=<0< (s- s wn< s- s +VhMd=<0< (s- s p<V< ; - G`$S@- p$;? GoS_ !@e"u0[J<<< -d<<<0< -MCS1jazzcombo.wbnk?}%c 7{N(*`GC@H>N(0S0ML/T2120S0(GC@0KB(0S0(BTGI-*aC@I<G-0S0FTE(2120S0-<@0DB-0S0+BTH1**a=1GI*0I00S0*IT2120S0CHJH=H0**S0=HCHHH2BT*BS /I*a?B G S S /0 S S / B0 S S B0 /< 0 ? 3 @ 4 ,./01234567 B 6 E 9 H < J0(*`GC@HN1G1(0S00N/T20N21S1(@CHL16 L6(0S0GBT; C/BB*aIC@@0S020`00@I21JGC1@-*aLHEHC@-0S0CX20L-20S0S02JEHJ0NBXJ121L&B+*aCGJNHG+11S1+V2020S0EI@I=I:I0*GV:H=HCHBFS0GBG/*aGLB1LL/0S0MJL/20S0MV21GILIDI41LG40S0LHLBG(BC-*a=0@G-0S0@IET21C(S1ET20=H@HBHGH-BG0S09@HCHGHGH<I@ICIGI-I*aaG-0S0<H@HCHGHETC-20S0QG020BIEIJI&GJ G&> S1BIEIJI@&BN C(BQ >ICIGI(a+IC>0C0G0020[20*ICIGILIN1/IBIGI1KI(*`GC@HN1G1(0S00N/T20N21S1(@CHL16 L6(0S0GBT; C/BB*aIC@@1S120`00@H21JGC1@-*`LHEHC@-0S0CX20L-20S0S02JEHJ0NBXJ121L&B+*aCGJNHG+11S1+V2020S0EI@I=I:I0*GV:H=HCHBFS0GBG/*aGLB1LL/0S0MJL/20S0MV21GILIDI41LG40S0LHLBG(BC-*a=0@G-0S0@IET21C(S1ET20=H@HBHGH-BG0S09@HCHGHGH<I@ICIGI-I*aaG-0S0<H@HCHGHETC-20S0QG020BIEIJI&GJ G&> S1BIEIJI@&BN C(BQ CI>I;I+(aIC+020CH>H0;H+Z21CI>I;I+IN1@I=I:IHIEI1*I>HBHGH*aH/GG20>HBHGHIJ20S0>IBIGI/0JIB/1N1>IBIGIDF*@ICIGI(GII*aI(020@HCHGHG(J21S1:I=IEI@III1*N0:H=HEH0@HG>IBIGI/JI*aJ/020>IBIGIL/N20>HBHEHL0/L0N0>HBH0EHJCI@I=I1I*aIL20=I@ICI04I21:I=IEI@I1*O0:H=H0CH>IBIGI*aI/I20>HBHGH0J0B21>IBIGI/DF/0O0>IBIGI0GI*CH@H;H(H*`II(121;I@ICIJ(20:H=HEH@HIO0:H=HEH@H0*BI;I?I/I*aII/020BI;I?IG*II20BH;H?H/GIO1BI;I1?IHGH+aE=:Ba*0I0G2aIGI2aBG?/GIGII[a(*aGC@IN0G0(0S00N/T21N20S0(@CHL06 L6(1S1GBT; C/BB*aIC@@0S021`11@I20JGC0@-*aLHEIC@-0S0CX20L-20S0S02JEHJ0NBXJ121L&B+*aCGJNHG+11S1+V2020S0EI@I=I:I0*GV:H=HCHBFS0GBG/*aGLB1LL/0S0MJL/20S0MV21GILIDI41LG40S0LHLBG(BC-*a=0@G-0S0@IET21C(S1ET20=H@HBHGH-BG0S09@HCHGHGH<I@ICIGI-I*aaG-0S0<H@HCHGHETC-20S0QG020BIEIJI&GJ G&> S1BIEIJI@&BN C(BQ CI>I;I+(aIC+020CH>H0;H+Z21CI>I;I+IN1@I=I:IHIEI1*I<H@HCHGH-H*aaG-0S0<H@HCHGHETC-20S0QG020BIEIJI&GJ G&> S1BIEIJI@&BN C(BQ CI>I;I+(aIC+020CH>H0;H+Z21CI>I;I+Idp0 ; - G`$S@- p$;? GoS_ xdP-6<0< 2-yynQ< 7-   0 0<H6pQ<< ; - G`$S@- p$;? GoS_ v((< 2-e!z\lG --   }#k < <HT6dd~4n+h<< A/ -;`$ G@-sp$ /?;o G_s + {Phd=<0< (-wn< s- s +VhMd=<0< (s- s p<V< ; - G`$S@- p$;? GoS_ !@e"u0[J<<< -d<<<0< -MCS1jazzcombo.wbnk/eKwK=?'8:BBQAQ=?3,D<68?@ABkFk=kIIKKHkDk?k6*MMDHk?kDBDHk?kDk56)5HkDk?kKK56)6II5Ak=k:k5.6Ak=k5:kKMNBk=k:k3'N5K5Bl=l6:lFII36'6Bk=k:kII.FFBk=k:k.kBFD?k<k8k,kD?l<ll8l?k<k8k5,6?k<k58k,666F?kAk8k:k.FFFFAk=k8k:kDDFHCk?k:k<k0$HCk?k<k:kFH06$6KM5?kAk8k%51KKK?kAk8kI16%66K6BkDk=k35'6FkBk5=kK'636MNDkFk=k6*MMKKDkFk=kIIKKHkDk?k6*MMDHk?kDBDHk?kDk56)5HkDk?kKK56)6II5Ak=k:k5.6Ak=k5:kKMNBk=k:k3'N5K5Bl=l6:lFII36'6Bk=k:kII.FFBk=k:k.kBFD=k?k6kDk6,56k=k5?k'666,5?k<k8kDM'6PM,5?k<k8kKI'6IIAk=k8k,MPPPAk=k8kkkkAk=k8kk,,DF,Ak=k8kI,I,FMCl=l?l:l,KKKKCk:k=k?kF666Ck?k=k:k,DFCk?k=k:kIIIRAl=l:l.PPPPFkAk=kMMNMBk=k:k6*KIIBk=k:kKMNBk=k:k?k3'NMKKBk?k=k:kIM.6KKDk=k?k,KMPMDk=k?kKI,5IIPAk=k8k,MPPPAk=k8kkkk,PAk=k8kkk,D,FAk=k8kI,PIFMCl=l?l:l,KKKKCk=k?k:kFQQQCk=k?k:k,DFCk=k?k:kIIPRAl=l:l.MPPFkAk=kMMNNBk=k:k6*MKIIBk=k:kKMNMBk=k:k?k3'MMKKBk=k:k?kIM.5MK=6?666,kPP=5?565PR?6<686,kPM?5<585PIPAl=l8l,MQQQAk=k8kkkk,PAk=k8kkk,D,FAk=k8kI,PIFMCl=l?l:l,KKKKCk=k?k:kFQQQCk=k?k:k,DFCk=k?k:kIIPRAl=l:l.MPPFkAk=kMMNNBk=k:k6*MKIIBk=k:kKMNNBk=k?k:k3'MMKKBk=k?k:kIM.5M?kDkIk,kK?kDkkIk?lDllIl?kDkkIk=?'8:BBAQQQ=?,3D<8&2 FC?'3 5 2)2HA2E2-2202HEA-JFA.02KH2C2+22$2JC?'3 HEA)5 7 2+2JF2C2222.22+2.2: 2>JF2A&222 2)225 2<HA>&2 :FA>'3 <HEA)25 2<HEA-2HdEd2Ad202<HEA->JFA)$20 2?KC2H'CEFGHIJKLMNOPQRSTUVW223 2+227 2>JC?'3 >HE)5 >%J%F%+2%7 2< H E :2&22 2Fd2Cd.22: 2<HE>+:FC>2'23 2COK2F.22: 2+227 2AMFC'3 ?KFC$0 .2: 2AdMF2J&222 2)225 2?KHA.2: 2AMJ? K H ,2 8 2> J F <HD'23 2>&22 2AF)25 2A<HA>&2 :FC?'3 E2H2A2)25 22<dA-2EH02E<HEA->JFA)K2H2C20 2$22??3 2'2CH7 2+2C>JFC3 '>JFC5 )> J F 7 2 +2< H E :FC:2F2C22 22&2.22: 2<HE>+ :FC>2 O2K2F23 2'22CF: 2.2KO7 2+2KAMFC3 '?KFC0 $M2J2F2: 2.22AdA2 2&2FJ5 2)2F?KH.2AMJ? K H ,2> J F <HDH2D2'222HD?,FC?'FC?'2HD?HD?<2,2HD?,2HD2?,'2,22)KFC2?2)FFC?)2FC?FC?)FC?FC?)KHEAHE2A2)H)2F:2C2?2F)2<HEA.K>JFKA)>JFA..<2H2A2>2.:FA>.<2H2E2A22))52A2)202<HE)2>JF$K?KHKC'2+2>JF$2<HE>JF+<HE:FC+:2F2C2+222<H+2:F'KCOKKF'COKF..F2R2O2'COK'.2AdMJ2F).252?KH.2>JF? K H ,2> J F <HD,H2D22'FC,HD,,H2D2,FC?<2)2HHEA)2HEAHEA)2AEA<)2FC>F2C2>22++F2C2>2+FC>+2EEA<)2EA<EA<'C'C2?2:2'A2<2922)2EA)2HEHE+KFCFCA+F>C2)2EEA<)2EA<EA<'C?:'C2?2:2'A<9))E2A2<2)FA>)FA>..F2A2>2.HC?.HC?$2FEA?)2FA>FA>&&F2A2>2&HC?&HC?'2AA?:'2A?:?2:2)2A)F2?2)E)?K)E25C?:5C?2:2)C)E2?2<2)A55E2A2<2)FC>)FC2>2+F+C2>2:2+FC>)2EA<EA<)2EA<EA<'KC?:C?:'CH2E2A22)2F)2FC>FC2>2+F+C2>2:2+FC>)2EEA<)2EA<EA<'C?:'C2?2:2'A<9))E2A2<2$FA>$FA>..F2A2>2.HC?$HC?$2FEA?)2FA>FA>&&F2A2>2&HC?&HC?'2AA?:'2A?:?2:2)2)F2?2)E?55EK?K2)2A2<2922)2C)2A>A2<2922$2C22)2.KJFKA)2.2KHC)2HEA)KKK)HEA02HJFA.2KHC0KKHKC02+2MHC$2JFC+KJdFdKCd.JFC22HFC+2OKF'KKK'OKF.2MKH'2MJF.KKK.MJF)2KJF.2HD?,KKK,HD?32KJF,2HC?)KHdCdK?d)52COKCOK)2AMJ?KH.K>JFKA)>JFA..<2H2A2>2.:FA>.<2H2E2A22))52A2)202<HE)2>JF$K?KHKC'2+2>JF$2<HE>JF+<HE:FC+:2F2C2+222<H+2:F'KCOKKF'COKF..F2R2O2'COK'.2AdMJ2F).252?KH.2>JF? K H ,2> J F <HD,H2D22'FC,HD,,H2D2,FC?<2)2HHEA)2HEAHEA)2AEA<)2FC>F2C2>22++F2C2>2+FC>+2EEA<)2EA<EA<'C'C2?2:2'A2<2922)2EA)2HEHE+KFCFCA+F>C2)2EEA<)2EA<EA<'C?:'C2?2:2'A<9))E2A2<2)FA>)FA>..F2A2>2.HC?.HC?$2FEA?)2FA>FA>&&F2A2>2&HC?&HC?'2AA?:'2A?:?2:2)2A)F2?2)E)?K)E25C?:5C?2:2)C)E2?2<2)A55E2A2<2)FC>)FC2>2+F+C2>2:2+FC>)2EA<EA<)2EA<EA<'KC?:C?:'CH2E2A22)2F)2FC>FC2>2+F+C2>2:2+FC>)2EEA<)2EA<EA<'C?:'C2?2:2'A<9))E2A2<2$FA>$FA>..F2A2>2.HC?$HC?$2FEA?)2FA>FA>&&F2A2>2&HC?&HC?'2AA?:'2A?:?2:2)2A)F2?2)E?55EK?KA)2CC?:))CK?K:K5)EA<)2AE)2HH2D2?22,,FD?< ,2'22,2B = : *2 FD ? <  D2?2<22,2B = : *2D ? <  D2?2<22,2)A?9 <)A2?2<29 2)A?9 '<'A2?2<29 2)A?9 )<? : 7 '2A < 9  A2<2922)2? : 7 '2A < 9  A2<2922)2,D?<,D2?2<2,D?<''D2?2<2,D?<,B = : *2D ? <  D2?2<22,2B = : *2D ? <  D2?2<22,2)A?<9 )A2?2<29 2)A?<9 ''A2?2<29 2)A?<9 )? : 7 '2A < 9  A9<)A9<)AE<AF>CF2C2>22+2F>+2AC2HEA)H2A2E22)2FC?'2FC?F2C2?22'2A292<2)E<A)2HAEHEA++F2C2>2+HEA+HEAF)C2>22)2FC?'2FC?F2C2?22'2A<9)E2A2<2)FA>)FA.>.F2A2>2.HC?.HC?$KFEFA&FA&F2A2&HC&HC'2FF'2H?CC2?2)222C2?22))C2?2)C2)22?2HEA)2 J H F C )2H E  A<9$$E2A2<2)FC>)F2C2>22+F+>A+C2>22+2HEA)2HEAHEA'FC?'F2C2?2'A<9))E2A2<2)FC>)F2C2>22+F>+dp0 ; - G`$S@- p$;? GoS_ xdP-6<0< 2-yynQ< 7-   0 0<H6pQ<< ; - G`$S@- p$;? GoS_ v((< 2-e!z\lG --   }#k < <HT6dd~4n+h<< A/ -;`$ G@-sp$ /?;o G_s + {Phd=<0< (-wn< s- s +VhMd=<0< (s- s p<V< ; - G`$S@- p$;? GoS_ !@e"u0[J<<< -d<<<0< -MCS1jazzcombo.wbnkH.~d8dA>E5&A>A>A>A>A88>8@<C5&@<@<@<@<@88<8>:A5&>:>:>:>:>88:8@<C5&@<@<@<@<@88<8&U2UUAEJV2&EAJVAEJV2q&qEAJVC@JVC@JV&U2UHTC@HT2&EQC9@9HXZ[\]^_`abcdefgh9T92q9&qJVCOA9M9&U92U>:2&>:>8:82q&qqEQ@<COCO&U2U@U:2&>:>8:82q&qqEQ@<COCO&U2U@U:COCO>:&U2UAM>J2&>:5>8:8582q&qqqqEQC@<OCO&U2U@U<UEQ2&<@2q&qC@C&U2UEQEAJV2&EAJVEAJV2r&rEAJVEAJVEAJVJVC8@8&U2UHT2&EQC8@8H8T82q8&qJVCO>:A9M9>9:9&U92UU>:2&>:>8:82q&qqEQ@<COCO&U2U@U:2&>:>8:82q&qqEQ@<COCO&U2U@U:2&>:>8:82q&qqEQ@<COCO&U2U@U:2&>:>8:82q&qqEQ@<COCO&U2U@U9OC>9&U2UMAJ95>95952&2q&q599595>952U&U>95>952&2q&q>95>95>95>952U&U>95>952&2q&q>95>95>95>952U&U>95>952&2r&rAEQHTJAEV5U&UJ9E9A99V9JEA5&VJ8E8A8V85q8&qJVHTAEJV5U&UJEAV5&>A5q&qEA8EQ<@9O5U&UO@9<999O5&@<9O@<9O5r&rAMC9@9<9E99Q9<5T&T>@5&@<9CC@<95q&q<@>J>:ACO5U&UOO5&CA>:OCA>:O5q&qAMEQCA>:OCA>:O5U&UCA>:O5&5q&qAMA>MAMAQ5U&UEHATHEAT5&HEATHEAT5q&qHTHEATHEATE9H9A9T95U9&UA5&EA5q&q@>EQAEJV5U&UJ9E9A99V95&JEAVAEJV5q&qJVHQJEAVJVE9A95U&UHTEQ5&HEATAE5r&rEAEACOCO5U&U<@CEQEC@<Q5&EC@<QE9C9@9<9O95q9&qAMCE@<QC@<E9Q95U&U<@5&A@C5q&q<H>JAMEQ5U&U>U:UCOAM5&E>:Q>:5q&qA>:J>EQ5U&U>U:UCOAMCO5&>:AM>9J95r9&r:9599<HEQ5U&UAEHTHT5&HEATQEA95q&qVFECA5U&U><5&>>5r&r<>A&U2UUUUAEJV2&EAJVAEJV2q&qJEAVJEAVJVJVJV&U2UCr@rT8HTH2&HT@CHT2q&qC8@8J88V8>:COCO>:&U2UAM>J2&>:5>8:8582q&qqqqEQC@<OCO&U2U@U<UEQ2&<@2q&qC@C&U2UEQEAJV2&EAJVEAJV2r&rEAJVEAJVEAJVJVC8@8&U2UHT2&EQC8@8H8T82q8&qJVCO>:A9M9>9:9&U92UU>:2&>:>8:82q&qqEQ@<COCO&U2U@U:2&>:>8:82q&qqEQ@<COCO&U2U@U:2&>:>8:82q&qqEQ@<COCO&U2U@U<$$<CP>P<<$$CP>P<$CP>P<$CP>P<$CP>P<$CP>P<$CP>P<$CP>P;<9$$<9;7$(>;<9$(;9$<$;$(975$P9<54$<7<@95&@&95&>&&&>P&&&5)P9<54(<7<@95&&@95&>&&&>P&&&5)P9<54(<7<E>;$E$$C$$$$$$$C>;$$$$$$$$$$JGC$$$LHC$$$HEA$$$HEA$$JGC$$JGC$J(G(C($$LHC$$$HEA$$EA<EA<$$C(@(<($$C><$CP>P<$CP>P<$CP>P<$CP>P<$CP>P.<IF*B+<GD,-<?D%=&PB@>.<=:*6+<;8,-<38%1&P642.<IF*B+<GD,-<?D%=&PB@>$ J G C J G C L H C L H C J G C $ J G C J G C H E A H E A H E A $ H G C J G C L H G L H C J G C $ J G C J G C H E A H E A H E A )$ G C > G C > H E A J G C H E A ) $ J G C H E A H E A G C > G C > +$ E A < E A < G C > E A < G C > + $ H E A J G C H E A J G C H E A .# C J O C H J O J C HJ O J C HJO / $ J C HJ O J C HJ O J C HJ O J C HJO $ - J C HJ O J C HJ O J C HJ O J C HMO - $ J C HJ O J C HJ O J C HJ O J C HJO , # J C HJ O J C HJ O J C HJ O J H J O - $ J H C H J O J H C H J O J H +k$<>@<>@+$C<@<>><70<$@@<<<70$(JGCLHC(HEAHEAJGCJGCJ(G(C(((LHCHEAEA<$EA<C(@(<(($(C><$$<CP>P<<$$CP>P<$CP>P<P$$$dp0 ; - G`$S@- p$;? GoS_ xdP-6<0< 2-yynQ< 7-   0 0<H6pQ<< ; - G`$S@- p$;? GoS_ v((< 2-e!z\lG --   }#k < <HT6dd~4n+h<< A/ -;`$ G@-sp$ /?;o G_s + {Phd=<0< (-wn< s- s +VhMd=<0< (s- s p<V< ; -& G`$&S@-& p$&;?! Go!S_! !!@e"u0[J<<< -d<<<0< -҆y ! ! : Steven Glass ! ! : Kenton Hanson ! ! Version : 07/08/86 ! !_______________________________! ! ! ! TRADUCTION : Sam Tools ! ! Date : 26/11/87 ! !_______________________________! Historique 04/03/86 : V00:00 R{alisation initiale 22/04/86 : V00:10 Int2Dec, Long2Dec, Dec2Int et Dec2Long modifi{ 09/05/86 : V00:20 Erreurs dans les E/S pour les routines fix{es 07/08/86 : V00:30 Ajouts des fonctions de $10 @ $21 Rappels Word : 16 bits ; ex : INPUT Word = PEA 0000 LongWord : 32 bits ; ex : INPUT LongWord = PEA 0000 PEA 0000 APPEL STANDARD DES OUTILS Fonction num{ro = $01 : IMBootInit Cet appel ne fait rien Fonction num{ro = $02 : IMStartUp Cet appel ne fait rien Fonction num{ro = $03 : IMShutDown Cet appel ne fait rien Integer Maths Tools Page 1 Fonction num{ro = $04 : IMVersion Input Word : Espace pour le r{sultat Output Word : R{sultat Cet appel donne le num{ro de version de l'outil Integer Tools Ex : $00/0300: CLC mise en mode natif : XCE : REP #30 : PEA 0000 : LDX #040B Fonction : JSL $E10000 Outil : PLA R{sultat : STA $0360 : RTS R{sultat: $00/0360: 00 01 Fonction num{ro = $05 : IMReset Est appel{ quand un Reset system est rencontr{. Cet appel ne fait rien. Fonction num{ro = $06 : IMActive Input Word : Espace pour le r{sultat Output Word : R{sultat Cet appel retourne une valeur indiquant si l'outil est actif ou non. Actif si diff{rente de z{ro, inactif si = $0000. Ex : $00/0300: CLC mise en mode natif : XCE : REP #30 : PEA 0000 : LDX #060B Fonction : JSL $E10000 Outil : PLA R{sultat : STA $0360 : RTS R{sultat: $00/0360: FF FF Integer Maths Tools Page 2 ROUTINES MATHEMATIQUES Ces routines viennent du Macintosh et sont utilis{ par presque toute la boite a outils. Plusieurs types de nombre sont accept{s. Integer : Entier sur 2 octets ou INT2 Long Integer : Entier long sur 4 octets ou INT4 Fixed : Fixe sur 4 octets, avec signe et 16 bits de fraction Frac : 2 octets avec signe et 30 bits de fraction Fonction num{ro = $09 : Multiply Input LongWord : Espace pour le r{sultat Input Word : Entier 1 Input Word : Entier 2 Output LongWord : R{sultat Multiplie 2 entiers de 16 bits et produit un r{sultat sur 32 bits. Si les 2 entiers n'ont pas de signe, le r{sultat n'en aura pas. Si les 2 entiers ont un signe, l'octet bas du r{sultat sera le r{sultat du signe. Ex : $1122 * $3344 = ? (r{ponse : $036E5308) $00/0300: CLC mise en mode natif : XCE : REP #30 : PEA 0000 Espace pour le r{sultat : PEA 0000 : PEA 1122 Produit 1 : PEA 3344 2 : LDX #090B Fonction : JSL $E10000 Outil : PLA R{sultat : STA $0360 : PLA R{sultat : STA $0362 : RTS R{sultat: $00/0360: 08 53 6E 03 Integer Maths Tools Page 3 Fonction num{ro = $0A : SDivide Input Word : Espace pour le Input Word : Espace pour le Input Word : Num{rateur Input Word : D{nominateur Output Word : Reste Output Word : Quotient Calcule le quotient et le reste de la division de 2 entiers. Prend les 2 entiers de 16 bits (avec le signe), les divise et donne pour r{sultat 2 entiers de 16 bits sign{s. Ex : $6666 / $2222 = ? $00/0300: CLC mise en mode natif : XCE : REP #30 : PEA 0000 Espace pour le r{sultat : PEA 0000 : PEA 6666 Produit 1 ! PEA 6666 : PEA 2222 2 ! PEA 2223 ! : LDX #0A0B Fonction ! : JSL $E10000 Outil ! ! : PLA Quotient ! : STA $0360 ! : PLA Reste ! : STA $0362 ! : RTS ! ! R{sultat: $00/0360: 03 00 00 00 ! 00/360: 02 00 22 20 Fonction num{ro = $0B : UDivide Input Word : Espace pour le Input Word : Espace pour le Input Word : Num{rateur Input Word : D{nominateur Output Word : Reste Output Word : Quotient Calcule le quotient sans signe et le reste de la division. Prend les 2 entiers de 16 bits non sign{s, les divise et donne pour r{sultat 2 entiers de 16 bits non sign{s. Integer Maths Tools Page 4 Fonction num{ro = $0C : LongMul Input LongWord : Espace pour le r{sultat Input LongWord : Espace pour le r{sultat Input LongWord : Entier Input LongWord : Entier Output LongWord : R{sultat (bit + significatif) Output LongWord : R{sultat (bit - significatif) Multiplie 2 entiers longs. Prend les 2 entiers longs de 32 bits, les multiplie et donne pour r{sultat 1 nombre de 64 bits. Si les 2 entiers n'ont pas de signe, le r{sultat n'en aura pas. Si les 2 entiers ont un signe, l'octet bas du r{sultat sera le r{sultat du signe. Ex : $12345678 * $98765432 = ? (r{ponse = $0AD77D73D5E84370) $00/0300: CLC mise en mode natif : XCE : REP #30 : PEA 0000 : PEA 0000 : PEA 0000 : PEA 0000 : PEA 1234 : PEA 5678 : PEA 9876 : PEA 5432 : LDX #0C0B Fonction : JSL $E10000 Outil : PLA : STA $0360 : PLA : STA $0362 : PLA : STA $0364 : PLA : STA $0366 : RTS R{sultat: $00/0360: 70 43 E8 D5 73 7D D7 0A Integer Maths Tools Page 5 Fonction num{ro = $0D : LongDivide Input LongWord : Espace pour le Input LongWord : Espace pour le Input LongWord : Num{rateur Input LongWord : D{nominateur Output LongWord : Reste Output LongWord : Quotient Divise 2 entiers longs. Prend les 2 entiers longs de 32 bits non sign{s, les divise et donne pour r{sultat 1 entier long de 32 bits non sign{. Ex : $98765432 * $12345678 = ? $00/0300: CLC mise en mode natif : XCE : REP #30 : PEA 0000 : PEA 0000 : PEA 0000 : PEA 0000 : PEA 9876 : PEA 5432 : PEA 1234 : PEA 5678 : LDX #0D0B Fonction : JSL $E10000 Outil : PLA : STA $0360 : PLA : STA $0362 : PLA : STA $0364 : PLA : STA $0366 : RTS R{sultat: $00/0360: 08 00 00 00 72 A0 D3 06 V{rification : 12345678 * 8 = 91A2B3C0 + 06D3A072 ---------- 98765432 Integer Maths Tools Page 6 Fonction num{ro = $0E : FixRatio Input LongWord : Espace pour le r{sultat Input Word : Num{rateur Input Word : D{nominateur Output LongWord : R{sultat Fait le rapport de 2 entiers relatifs en 32 bits, virgule fixe. Prend les 2 entiers longs de 16 bits sign{s, et donne pour r{sultat 1 nombre de 32 bits fix{ qui est la proportion entre le num{rateur et le d{nominateur. Ex : $00/0300: CLC mise en mode natif : XCE : REP #30 : PEA 0000 : PEA 0000 : PEA 9876 : PEA 1234 : LDX #0E0B Fonction : JSL $E10000 Outil : PLA : STA $0360 : PLA : STA $0362 : RTS R{sultat: $00/0360: E2 4F FA FF Fonction num{ro = $0F : FixMul Input LongWord : Espace pour le r{sultat Input LongWord : Entier Input LongWord : Entier Output LongWord : R{sultat Fait le produit de 2 entiers longs en 32 bits, virgule fixe. Fonction num{ro = $10 : FracMul Input LongWord : Espace pour le r{sultat Input LongWord : Entier Input LongWord : Entier Output LongWord : R{sultat Multiplie 2 fractions. Integer Maths Tools Page 7 Fonction num{ro = $11 : FixDiv Input LongWord : Espace pour le r{sultat Input LongWord : Quotient Input LongWord : Diviseur Output LongWord : R{sultat Divise 2 nombre fix{ et donne un r{sultat arrondi fix{ (sans reste) Fonction num{ro = $12 : FracDiv Input LongWord : Espace pour le r{sultat Input LongWord : Quotient Input LongWord : Diviseur Output LongWord : R{sultat Fonction num{ro = $13 : FixRound Input Word : Espace pour le r{sultat Input LongWord : Valeur originale fix{e Output Word : R{sultat entier Prend un nombre fix{ et retourne un r{sultat arrondi. Fonction num{ro = $14 : FracSqrt Input LongWord : Espace pour le r{sultat Input LongWord : Valeur originale fix{e Output LongWord : R{sultat Prend 2 fractions et retourne un r{sultat arrondi. Fonction num{ro = $15 : FracCos Input LongWord : Espace pour le r{sultat Input LongWord : Angle (fix{) Output LongWord : R{sultat Prend un nombre en radian et retourne son Cosinus Fonction num{ro = $16 : FracSin Input LongWord : Espace pour le r{sultat Input LongWord : Angle (fix{) Output LongWord : R{sultat Prend un nombre en radian et retourne son Sinus Integer Maths Tools Page 8 Fonction num{ro = $17 : FixATan2 Input LongWord : Espace pour le r{sultat Input LongWord : Entr{e 1 Input LongWord : Entr{e 2 Output LongWord : R{sultat Prend 2 entr{es et donne l'Arc et la Tangente de leur coordonn{e. Les entr{es peuvent }tre des entiers longs, fixes ou des fractions mais doivent obligatoirement }tre du m}me type. Fonction num{ro = $18 : HiWord Input Word : Espace pour le r{sultat Input LongWord : Entr{e Output Word : R{sultat Fonction num{ro = $19 : LoWord Input Word : Espace pour le r{sultat Input LongWord : Entr{e Output Word : R{sultat Fonction num{ro = $1A : Long2Fix Input LongWord : Espace pour le r{sultat Input LongWord : Entr{e Output LongWord : R{sultat (fix{) Convertit un entier long en fix{. Fonction num{ro = $1B : Fix2Long Input LongWord : Espace pour le r{sultat Input LongWord : Entr{e Output LongWord : R{sultat (entier long) Convertit un fix{ en un entier long. Fonction num{ro = $1C : Fix2Frac Input LongWord : Espace pour le r{sultat Input LongWord : Entr{e Output LongWord : R{sultat (fraction) Convertit un fix{ en fraction. Integer Maths Tools Page 9 Fonction num{ro = $1D : Frac2Fix Input LongWord : Espace pour le r{sultat Input LongWord : Entier Output LongWord : R{sultat (fix{) Convertit une fraction en fix{ arrondi. Fonction num{ro = $1E : Fix2X Input LongWord : Valeur fix{e Input LongWord : Pointeur Convertit un fix{ en entier {tendu Fonction num{ro = $1F : Frac2X Input LongWord : Fraction Input LongWord : Pointeur Convertit une fraction en entier {tendu Fonction num{ro = $20 : X2Fix Input LongWord : Espace pour le Input LongWord : Pointeur Output LongWord : R{sultat Convertit un entier {tendu en fix{ arrondi. Fonction num{ro = $21 : X2Frac Input LongWord : Espace pour le Input LongWord : Pointeur Output LongWord : R{sultat Convertit un entier {tendu en fraction arrondi. Integer Maths Tools Page 10 ROUTINES DE CONVERSION Fonction num{ro = $22 : Int2Hex Input Word : 2 Octets entiers non sign{s Input LongWord : Pointeur sur la chaine de sortie Input Word : Longueur de la chaine de sortie Convertit un entier en chaine de chiffres hexad{cimaux. La chaine doit }tre justifi{e a droite et }tre remplie de z{ro sur la gauche. Si la chaine est trop courte pour repr{sent{e la valeur, une erreur sera retourn{e. Les caract}res Ascii a la sortie de la chaine auront leur bit le + significatif a z{ro. Ex : Convertir le nombre $1234 en une chaine de caract}re repr{sentant les valeurs $31 32 33 34 $00/0300: CLC mise en mode natif : XCE : REP #30 : PEA 1234 Valeur a changer ! : PEA 0000 Adresse ! : PEA 0360 ! : PEA 0004 Longueur ! PEA 0002 ! : LDX #220B Fonction ! : JSL $E10000 Outil ! ! : RTS ! ! R{sultat: $00/0360: 31 32 33 34 ! $360: 33 34 Integer Maths Tools Page 11 Fonction num{ro = $23 : Long2Hex Input LongWord : 4 Octets entiers non sign{s Input LongWord : Pointeur sur la chaine de sortie Input Word : Longueur de la chaine de sortie Convertit un entier long en chaine de chiffres hexad{cimaux. La chaine doit }tre justifi{e a droite et }tre remplie de z{ro sur la gauche. Si la chaine est trop courte pour repr{sent{e la valeur, une erreur sera retourn{e. Les caract}res Ascii a la sortie de la chaine auront leur bit le + significatif a z{ro. Ex : Convertir le nombre $12345678 en une chaine de caract}re repr{sentant les valeurs $31 32 33 34 35 36 37 38 $00/0300: CLC mise en mode natif : XCE : REP #30 : PEA 1234 Valeur a changer ! : PEA 5678 : PEA 0000 Adresse ! : PEA 0360 ! : PEA 0008 Longueur ! PEA 0004 ! : LDX #230B Fonction ! : JSL $E10000 Outil ! ! : RTS ! ! R{sultat: $00/0360: 31 32 33 34 35 36 37 38 !$360:35 36 37 38 Integer Maths Tools Page 12 Fonction num{ro = $24 : Hex2Int Input Word : Espace pour le r{sultat Input LongWord : Pointeur sur la chaine a entrer Input Word : Longueur de la chaine Output Word : 2 Octets entiers non sign{s Renvoie un entier non sign{ {gal @ la chaine de chiffres hexad{cimaux. La chaine doit }tre justifi{e a droite et peut-}tre remplie sur la gauche de z{ro ou de blanc. Les caract}res Ascii dans la chaine peuvent avoir leur bit le + significatif a 0 ou a 1. Les caract}res ill{gaux dans la chaine provoqueront une erreur. Une valeur hexad{cimale plus grande que $FFFF, retournera une erreur. Ex : Convertir la chaine de caract}res se trouvant a l'adresse $350 et repr{sentant les chiffres 1234 en un nombre entier de 16 bits. $00/0300: CLC mise en mode natif : XCE : REP #30 : PEA 0000 Espace ! : PEA 0000 Adresse ! : PEA 0350 ! : PEA 0004 Longueur (de 1 a 4 max) ! PEA 0002 ! : LDX #240B Fonction ! : JSL $E10000 Outil ! ! : PLA R{sultat ! : STA $0360 ! : RTS ! ! $00/0350: 31 32 33 34 (1 2 3 4) ! ou B1 32 B3 B4 ! ! R{sultat: $00/0360: 34 12 !360:12 00 Si en longueur on met PEA 0002 on aura en $360:12 00 Integer Maths Tools Page 13 Fonction num{ro = $25 : Hex2Long Input LongWord : Espace pour le r{sultat Input LongWord : Pointeur sur la chaine a entrer Input Word : Longueur de la chaine Output LongWord : 4 Octets entiers non sign{s Renvoie un entier long a partir de ses chiffres hexad{cimaux. La chaine doit }tre justifi{e a droite et peut-}tre remplie sur la gauche de z{ro ou de blanc. Les caract}res Ascii dans la chaine peuvent avoir leur bit le + significatif a 0 ou a 1. Les caract}res ill{gaux dans la chaine provoqueront une erreur. Une valeur hexad{cimale plus grande que $FFFFFFFF, retournera une erreur. Ex : $00/0300: CLC mise en mode natif : XCE : REP #30 : PEA 0000 : PEA 0000 : PEA 0000 Adresse : PEA 0360 : PEA 0008 ! PEA 0004 ! : LDX #250B Fonction ! : JSL $E10000 Outil ! ! : PLA R{sultat ! : STA $0330 ! : PLA ! : STA $0332 ! : RTS ! ! $00/0360: 31 32 33 34 35 36 37 38 ! ou B1 B2 B3 B4 B5 B6 B7 38 ! ! R{sultat: $00/0330: 78 56 34 12 ! 330: 34 12 Integer Maths Tools Page 14 Fonction num{ro = $26 : Int2Dec Input Word : 2 Octets entiers Input LongWord : Pointeur sur la chaine de sortie Input Word : Longueur de la chaine de sortie Input Word : Drapeau du signe Convertit un entier en chaine de chiffres d{cimaux. La chaine doit }tre justifi{e a droite et peut-}tre remplie sur la gauche de z{ro ou de blanc. Les caract}res Ascii dans la chaine doivent avoir leur bit le + significatif a 0. Si le drapeau du signe est a 0 la valeur sera consid{r{e comme sans signe. Si cette valeur est diff{rente de 0 elle sera consid{r{e comme avec un signe. Si la valeur sign{e est n{gative, la chaine contiendra le caract}re Ascii - devant le bit le moins significatif. Si la chaine est trop courte pour repr{sent{e la valeur, une erreur sera retourn{e. Ex : Convertir un nombre hexad{cimal ($1234) en son {quivalent d{cimal (4660) $00/0300: CLC mise en mode natif : XCE : REP #30 : PEA 1234 : PEA 0000 Adresse : PEA 0360 : PEA 0004 Longueur ! PEA 0003 ! : PEA 0000 Drapeau ! ! : LDX #260B Fonction ! : JSL $E10000 Outil ! ! : RTS ! ! R{sultat: $00/0360: 34 36 36 30 ! 360: 36 36 30 00 Si longueur = 4 et Drapeau = 0 -> 360: 36 36 37 34 = 4 <> 0 -> 360: 38 39 36 32 Integer Maths Tools Page 15 Fonction num{ro = $27 : Long2Dec Input LongWord : 2 Octets entiers Input LongWord : Pointeur sur la chaine de sortie Input Word : Longueur de la chaine de sortie Input Word : Drapeau du signe Convertit un entier long en chaine de chiffres d{cimaux. La chaine doit }tre justifi{e a droite et peut-}tre remplie sur la gauche de z{ro ou de blanc. Les caract}res Ascii dans la chaine doivent avoir leur bit le + significatif a 0. Si le drapeau du signe est a 0 la valeur sera consid{r{e comme sans signe. Si cette valeur est diff{rente de 0 elle sera consid{r{e comme avec un signe. Si la valeur sign{e est n{gative, la chaine contiendra le caract}re Ascii - devant le bit le moins significatif. Si la chaine est trop courte pour repr{sent{e la valeur, une erreur sera retourn{e. Ex : Convertir un nombre hexad{cimal ($12345678) en son {quivalent d{cimal (305419896) $00/0300: CLC mise en mode natif : XCE : REP #30 : PEA 1234 : PEA 5678 : PEA 0000 Adresse : PEA 0360 : PEA 0009 Longueur : PEA 0000 Drapeau : LDX #270B Fonction : JSL $E10000 Outil : RTS R{sultat: $00/0360: 33 30 35 34 31 39 38 39 36 Si longueur = 000A -> 360: 20 33 30 35 34 31 39 38 39 36 Integer Maths Tools Page 16 Fonction num{ro = $28 : Dec2Int Input Word : Espace pour le r{sultat Input LongWord : Pointeur sur la chaine a entrer Input Word : Longueur de la chaine Input Word : Drapeau du signe Output Word : 2 octets entiers Convertit une chaine de chiffres d{cimaux en entier. La chaine doit }tre justifi{e a droite et peut-}tre remplie sur la gauche de z{ro ou de blanc. Les caract}res Ascii dans la chaine peuvent avoir leur bit le + significatif a 0 ou a 1. Si le drapeau du signe est a 0 la valeur sera consid{r{e comme sans signe. Si cette valeur est diff{rente de 0 elle sera consid{r{e comme avec un signe. Si la valeur est sign{e la chaine pourra contenir le caract}re Ascii + ou - devant le bit le moins significatif. Les caract}res ill{gaux dans la chaine pourront }tre cause d'une erreur. Si une valeur sign{e est plus grande que 32 767 ou plus petite que - 32 768 entrainera une erreur. Si la valeur n'a pas de signe, elle doit }tre inf{rieure a 65 535. Ex : Convertir un nombre d{cimal (1234) en son {quivalent hexd{cimal ($4D2) $00/0300: CLC mise en mode natif : XCE : REP #30 : PEA 0000 : PEA 0000 Adresse : PEA 0360 : PEA 0004 Longueur : PEA 0000 Drapeau : LDX #280B Fonction : JSL $E10000 Outil : PLA : STA $0330 : RTS $00/0360: 31 32 33 34 R{sultat: 00/0330: D2 04 Integer Maths Tools Page 17 Fonction num{ro = $29 : Dec2Long Input LongWord : Espace pour le r{sultat Input LongWord : Pointeur sur la chaine a entrer Input Word : Longueur de la chaine Input Word : Drapeau du signe Output LongWord : 4 octets entiers Convertit une chaine de chiffres d{cimaux en entier long. La chaine doit }tre justifi{e a droite et peut-}tre remplie sur la gauche de z{ro ou de blanc. Les caract}res Ascii dans la chaine peuvent avoir leur bit le + significatif a 0 ou a 1. Si le drapeau du signe est a 0 la valeur sera consid{r{e comme sans signe. Si cette valeur est diff{rente de 0 elle sera consid{r{e comme avec un signe. Si la valeur est sign{e la chaine pourra contenir le caract}re Ascii + ou - devant le bit le moins significatif. Les caract}res ill{gaux dans la chaine pourront }tre cause d'une erreur. Si une valeur sign{e est plus grande que 2 147 483 647 ou plus petite que - 2 147 483 648 entrainera une erreur. Si la valeur n'a pas de signe, elle doit }tre inf{rieure a 4 294 967 295. Ex : Convertir un nombre d{cimal (12345678) en son {quivalent hexad{cimal ($00BC614E) $00/0300: CLC mise en mode natif : XCE : REP #30 : PEA 0000 : PEA 0000 : PEA 0000 Adresse : PEA 0360 : PEA 0008 Longueur : PEA 0000 Drapeau : LDX #260B Fonction : JSL $E10000 Outil : PLA : STA $0330 : PLA : STA $0332 : RTS $00/0360: 31 32 33 34 35 36 37 38 R{sultat: $00/0330: 4E 61 BC 00 Integer Maths Tools Page 18 Fonction num{ro = $2A : HexIt Input LongWord : Espace pour le r{sultat Input Word : 2 octets entiers non sign{s Output LongWord : Chaine hexad{cimale de 4 octets Renvoie les 4 chiffres hexad{cimaux d'un entier sans signe en une chaine repr{sentant la valeur en format hexad{cimal. Ex : Convertir la valeur hexad{cimale $1234 en une chaine de caract}res repr{sentant 1 2 3 4 $00/0300: CLC mise en mode natif : XCE : REP #30 : PEA 0000 Adresse : PEA 0350 : PEA 1234 Longueur ou PHA Si au d{but on met LDA #1234 : LDX #2A0B Fonction : JSL $E10000 Outil : PLA R{sultat : STA $0362 : PLA : STA $0360 : RTS $00/0360: B1 B2 B3 B4 Integer Maths Tools Page 19 CODE D'ERREURS $ 0B01 : Mauvais param}tres d'entr{e $ 0B02 : Caract}re ill{gal dans la chaine $ 0B03 : Integer ou LongInteger trop grand $ 0B04 : Chaine trop grande LISTE ALPHABETIQUE DES FONCTIONS DE L'INTEGER TOOLS Dec2Int : Num{ro = $28 Dec2Long : Num{ro = $29 Fix2Long : Num{ro = $1B Fix2Frac : Num{ro = $1C Fix2X : Num{ro = $1E FixATan2 : Num{ro = $17 FixDiv : Num{ro = $11 FixMul : Num{ro = $0F FixRatio : Num{ro = $0E FixRound : Num{ro = $13 Frac2Fix : Num{ro = $1D Frac2X : Num{ro = $1F FracDiv : Num{ro = $12 FracMul : Num{ro = $10 FracSqr : Num{ro = $14 FracCos : Num{ro = $15 FracSin : Num{ro = $16 Hex2Int : Num{ro = $24 Hex2Long : Num{ro = $25 HexIt : Num{ro = $2A HiWord : Num{ro = $18 IMActive : Num{ro = $06 IMBootInit : Num{ro = $01 IMShutDown : Num{ro = $03 IMStartUp : Num{ro = $02 IMReset : Num{ro = $05 IMVersion : Num{ro = $04 Int2Dec : Num{ro = $26 Int2Hex : Num{ro = $22 Long2Dec : Num{ro = $27 Long2Fix : Num{ro = $1A Long2Hex : Num{ro = $23 LongDivide : Num{ro = $0D LongMul : Num{ro = $0C LoWord : Num{ro = $19 Multiply : Num{ro = $09 SDivide : Num{ro = $0A UDivide : Num{ro = $0B X2Fix : Num{ro = $20 X2Frac : Num{ro = $21 Integer Maths Tools Page 20 Les macros INTMATH sous APW La derni}re version contenant des macros est la version 1.0B3. Elles ont disparues de la version 1.0B4 ainsi que de la toute derni}re version 1.0 livr{e sur 2 disquettes (APW et APWU). Ces macros se trouvent sous /APW/MACROS/M16.INTMATH Pour appeler ces macros, il suffit simplement de donner leur nom comme {crit ci-dessous. Exemple de source ********************** * * * Ceci est un essai * * * ********************** ORG $2000 MLOAD /APW/MACROS/M16.INTMATH Essai START CLC mise en mode natif XCE REP #30 PEA 0000 Adresse PEA 0350 PEA 1234 Longueur _HexIt Nom de la macro ($2A) PLA R{sultat STA $0362 PLA STA $0360 RTS END Integer Maths Tools Page 21 Le fichier /APW/MACROS/M16.INTMATH ; ; File: M16.INTMATH ; ; Version: 1.0 ; ; Copyright Apple Computer, Inc. 1986 ; All Rights Reserved MACRO &lab _IMBootInit &lab ldx #$010B jsl $E10000 MEND MACRO &lab _IMStartUp &lab ldx #$020B jsl $E10000 MEND MACRO &lab _IMShutDown &lab ldx #$030B jsl $E10000 MEND MACRO &lab _IMVersion &lab ldx #$040B jsl $E10000 MEND MACRO &lab _IMReset &lab ldx #$050B jsl $E10000 MEND MACRO &lab _IMStatus &lab ldx #$060B jsl $E10000 MEND MACRO &lab _Multiply &lab ldx #$090B jsl $E10000 MEND MACRO &lab _SDivide &lab ldx #$0A0B jsl $E10000 MEND Integer Maths Tools Page 22 MACRO &lab _UDivide &lab ldx #$0B0B jsl $E10000 MEND MACRO &lab _LongMul &lab ldx #$0C0B jsl $E10000 MEND MACRO &lab _LongDivide &lab ldx #$0D0B jsl $E10000 MEND MACRO &lab _FixRatio &lab ldx #$0E0B jsl $E10000 MEND MACRO &lab _FixMul &lab ldx #$0F0B jsl $E10000 MEND MACRO &lab _FracMul &lab ldx #$100B jsl $E10000 MEND MACRO &lab _FixDiv &lab ldx #$110B jsl $E10000 MEND MACRO &lab _FracDiv &lab ldx #$120B jsl $E10000 MEND MACRO &lab _FixRound &lab ldx #$130B jsl $E10000 MEND Integer Maths Tools Page 23 MACRO &lab _FracSqrt &lab ldx #$140B jsl $E10000 MEND MACRO &lab _FracCos &lab ldx #$150B jsl $E10000 MEND MACRO &lab _FracSin &lab ldx #$160B jsl $E10000 MEND MACRO &lab _FixATan2 &lab ldx #$170B jsl $E10000 MEND MACRO &lab _HiWord &lab ldx #$180B jsl $E10000 MEND MACRO &lab _LoWord &lab ldx #$190B jsl $E10000 MEND MACRO &lab _Long2Fix &lab ldx #$1A0B jsl $E10000 MEND MACRO &lab _Fix2Long &lab ldx #$1B0B jsl $E10000 MEND MACRO &lab _Fix2Frac &lab ldx #$1C0B jsl $E10000 MEND Integer Maths Tools Page 24 MACRO &lab _Frac2Fix &lab ldx #$1D0B jsl $E10000 MEND MACRO &lab _Fix2X &lab ldx #$1E0B jsl $E10000 MEND MACRO &lab _Frac2X &lab ldx #$1F0B jsl $E10000 MEND MACRO &lab _X2Fix &lab ldx #$200B jsl $E10000 MEND MACRO &lab _X2Frac &lab ldx #$210B jsl $E10000 MEND MACRO &lab _Int2Hex &lab ldx #$220B jsl $E10000 MEND MACRO &lab _Long2Hex &lab ldx #$230B jsl $E10000 MEND MACRO &lab _Hex2Int &lab ldx #$240B jsl $E10000 MEND MACRO &lab _Hex2Long &lab ldx #$250B jsl $E10000 MEND Integer Maths Tools Page 25 MACRO &lab _Int2Dec &lab ldx #$260B jsl $E10000 MEND MACRO &lab _Long2Dec &lab ldx #$270B jsl $E10000 MEND MACRO &lab _Dec2Int &lab ldx #$280B jsl $E10000 MEND MACRO &lab _Dec2Long &lab ldx #$290B jsl $E10000 MEND MACRO &lab _HexIt &lab ldx #$2A0B jsl $E10000 MEND Integer Maths Tools Page 26 ______________________________________________________________________ Pour : Groupe des d{velloppeurs, Apple IIGS Team et tout ceux qui veulent bien le lire... De : Rich Wiliams Traduit par: ZAHG Objet : ROM Tools - Volume 4. Memory Manager - Revision 6. " Indiana Jones and the Memory Manager of Doom " ______________________________________________________________________ Sommaire 1.0 Introduction ====================================================================== + + + + + GS ON THE ROCKS N[ 4 + + + + INTRODUCTION + +  + + + ====================================================================== Burp! hips! Pardon! faut dire qu'y en a des mecs sympa! Figurez vous qui y en a un Crack Band, sur une autre B{cane presque aussi connue qu'Apple, qui nous zont envoy{ leur {lixir maison! Une petite eau de vie pas d{geu distill{e maison, aromatis{e aux plantes du jardin; oui celui la bas derri}re le micro! Super les gars si vous d{plombez aussi bien que vous distillez vous }tes balaises. Et super merci encore ! Tiens, un autre arrivage: du Forez, cette fois. C'est le G}ne qui {tait @ l'alambic. Pas d{gueu, m}me franchement bon sa gnole. Ya pas, les mecs vous }tes sympas de nous pourvoir en carburant. Ah si tous les Crackeurs du monde voulaient se donner la main et lever le coude ensemble! Ouaip enfin bref on ze road again comme y disent dans l'ouest @ m{ricain (il en poss}de des masses de chose ce m{ricain quand on voit tout ce qu'est @ lui!!) for a brand new facinating Gs on Ze Rocks 4 houaiiiiiiip! On est a {galit{ avec Rocky sauf qu'on a quand m}me moins pris de gnons en travers du pif et qu'on a pas {t{ oblig{ de se taper Brigite Nielsen. Moi je m'en r{joui car je pref{re la tendresse et les rousses! GS on the Rocks n'est point une {quipe de pommes qui jouent au foot comme de stupides zapparences le feraient croire (j'aime pas celles qui ont les appats rances beurk!) Mais c'est une compilation de Documentations zin{galables sur les programmes dont vous nourissez votre Gs favori (doucement Joly Jumper! (le mien de GS il s'appelle Joly Jumper mais je rassure les dames moi je ne tire pas plus vite que mon ombre)) JAMAIS ZONT NE LE REPETERA ASSEZ LES GS ON THE ROCKS SONT GRATUITS!!! FRACASSEZ IMPITOYABLEMENT LA TRONCHE DES CAFARDS GLUANTS QUI PROPOSERAIENT DE VOUS LES VENDRE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Pour les mazos: SHOP GS (sur 36-15 tapez SM1) vend tous les programmes GS pirat{s et m}me les gratuits comme les "Tiger Slide Show" ou "Folies one" ou les d{mo Apple pour 60F!!! Si vous le rencontrez, bavez lui sur la tronbine de notre part et broyez lui les parties (s'il en poss}de, ce qui semble peu probable) Revenons za nos moutons Gs on the Rocks vivra par del@ ses cr{ateurs les nobles chevaliers du L-S-D (Lyon Software Diffusion) qui nous zont l{gu{ le noble honneur de perp{tuer leur tache! Bonne Ann{e 88 et Longue vie au GS Gs-land le 20 F{vrier 88 Les Artistes Associ{s  . 2.0 Concepts fondamentaux. 2.1 Handles et Master Pointeurs. 2.2 Blocs fixes et relogeables. 2.3 Fragmentation m{moire. 2.4 Compaction m{moire. 2.5 Nettoyage m{moire. 2.5.1 Nettoyage automatique. 2.6 M{moire sp{ciale. 3.0 Diff{rences avec le M{mory Manager du Mac. 4.0 Propri}t{s des blocs memoire. 4.1 Attributs d'allocation. 4.2 Attributs modifiables. Memory Manager page 1 5.0 Appel des routines du Memory Manager. 5.1 Data types. 5.2 Appels Standards. 5.2.1 MMBootInit. 5.2.2 MMAppInit. 5.2.3 MMAppQuit. 5.2.4 MMGetVersion. 5.2.5 MMReset. 5.2.6 MMStatus. 5.3 Allocation m{moire. 5.3.1 NewHandle. 5.3.2 RealloocHandle. 5.3.3 RestoreHandle. 5.4 Lib{ration m{moire. 5.4.1 DiposeHandle. 5.4.2 DisposAll. 5.4.3 PurgeHandle. 5.4.4 PurgeAll. 5.5 Informations sur les blocs et sur la m{moire. 5.5.1 GetHandleSize. 5.5.2 SetHandleSize. 5.5.3 FindHandle. 5.5.4 FreeMem. 5.5.5 Maxbloc. 5.5.6 TotalMem. 5.5.7 CheckHandle. 5.5.8 CompactMem. 5.6 Autres propri}t{s des blocs. 5.6.1 HLock. 5.6.2 HLockAll. 5.6.3 HUnlock. 5.6.4 HUnlockAll. 5.6.5 SetPurge. 5.6.6 SetPurgeAll. 5.7 D{placements, conversions. 5.7.1 PtrtoHand. 5.7.2 HandtoPtr. 5.7.3 HandtoHand. 5.7.4 BlockMove. 6.0 Codes d'erreurs. 7.0 Parties en ROM et en RAM du Memory Manager. ______________________________________________________________________ Memory Manager page 2 1.0 INTRODUCTION Le Memory Manager est le directeur de la m{moire dans l'Apple //. En se servant du Memory Manager, les programmes peuvent dynamiquement attribuer, lib{rer et redimentionner des blocs m{moire en fonction de leurs besoins. Le Memory Manager prend le controle de chaque bloc de m{moire ce qui permet @ plusieurs programmes de se partager la m{moire disponible. Par exemple, un accessoire de bureau peut demander une place m{moire m}me ci celui-ci est activ{ @ l'int{rieur d'une application. Dans sa conception, le Memory Manager du //GS est tr{s proche de celui du Macintosh. L'utilisateur ne doit pas pour autant s'imaginer que celui-ci est compatible avec le Mac. Du fait de l'architecture de l'Apple // et du 65816, les appels sont tr{s differents et la structure interne des donn{es est totalement diff{rente que celle du Macintosh. 2.0 CONCEPTS FONDAMENTAUX Pour bien comprendre comment le Memory Manager travaille, il y a quelques concepts qui doivent etres bien compris. Ce sont les Handles, les Master pointers, la fragmentation, la compaction et le nettoyage. L'utilisation de ces termes est identique pour le Macintosh. 2.1 HANDLES ET MASTER POINTERS Lorsqu'un nouveau bloc est cr{e pour un programme, celui-ci ne connais pas l'adresse effective de ce bloc, mais connait l'adresse du pointeur du bloc. Cette adresse est appel{e le Handle et le pointeur du bloc, le Master Pointer. De ce fait, m}me si le bloc est d{plac{, le programme peut retrouver ce bloc en se r{f{rent au master pointer qui est invariable. Dans le but d'acc{der aux informations dans le bloc, le programme doit copier l'adresse de d{part du master pointer dans la page z{ro. L'acces aux informations est alors possible grace @ l'adressage indirect. Cette proc{dure est appel{e der{f{rencer le Handle. Une fois ceci fait, le programme doit s'assurer que le bloc ne bouge plus. (au moins pendant l'acces @ ce bloc). Un bloc peut etre d{plac{ si le Memory Manager est sollicit{ ou si une routine appelant le Memory Manager est activ{e. Si le bloc a {t{ d{plac{, le Handle doit etre @ nouveau d{r{f{renc{. Memory Manager page 3 2.2 BLOCS FIXES ET BLOCS RELOGEABLES Certains blocs ne doivent jamais etre d{plac{s. Par exemple, un code 6502 est rarement relogeable et s'il est d{plac{, il ne fonctionnera pas longtemp. Les blocs contenant des informations (Data bloc) sont en g{n{ral relogeables et peuvent etre d{plac{s sans probl}me. Le Memory Manager alloue des blocs fixes pour des donn{es qui sont d{pendantes de la position (en g{n{ral les programmes) et des blocs relogeables pour des donn{es qui peuvent etres d{plac{es quand cela est neccessaire. Le Memory Manager essaie, mais ne garantie pas, de placer les blocs fixes en bas de la m{moire, et les blocs relogeables en haut. 2.3 FRAGMENTATION MEMOIRE Du fait que les blocs peuvent etres attribu{s et lib{r{s dans n'importe quel ordre, la memoire tend @ se fragmenter dans un m{lange entre les blocs libres et les blocs occup{s. Quand cela arrive, le Memory Managern'est plus capable d'allouer un bloc m{moire bien qu'il reste assez de m{moire libre car l'espace est divis{ en plusieurs petits morceaux. 2.4 COMPACTION MEMOIRE Quand le Memory Manager ne peut plus allouer un bloc, il essaie de compacter la m{moire. Compacter la m{moire c'est d{placer tout les blocs relogeables pour que tout les espaces libres ne forment plus qu'un seul morceau. Les blocs fixes et les blocs relogeables verouill{s interf}rent avec la compaction en formant des zones inamovibles en m{moire. Ceci emp}che de rassembler tout les blocs libres et laisse la m{moire fragment{e comme illustrer dans le sch{ma suivant. Le Memory Manager ne d{place jamais un bloc libre au dela d'un bloc fixe. Pour minimiser cet effet, le Memory Manager essaie d'allouer les blocs fixes @ partir du bas de la m{moire vers le haut, et les blocs relogeables, du haut vers le bas de la m{moire. Aussi pour pr{venir ce ph{nom}ne, les programmes doivent utiliser les blocs relogeables le plus possible et les laisser d{v{rouiller autant que possible. NdT : La compaction m{moire peut prendre un temps non n{gligeable et etre la cause d'une certaine lenteur d'{x{cution de certains programmes. En effet, et sans que le programmeur ne s'en appercoive, si le d{roulement d'une routine demande de la place en m{moire et que le Memory Manager ne peut directement lui en donner, il effectuera un compactage. Si de plus il existe un boucle dans la routine, il se peut que le compactage soit r{p{t{ autant de fois que la boucle... Memory Manager page 4 2.5 NETTOYAGE MEMOIRE Si, apr}s compaction, le Memory Manager est toujours incapable d'allouer un bloc, il va essayer de purger des blocs. Seul les blocs marqu{s effacables et d{v{rouill{s peuvent etres purg{s. Purger, efface le contenu du bloc et le lib}re. Le master pointer du bloc reste valable, mais sa valeur est @ NIL. Un Handle qui pointe sur un master pointer @ NIL est appel{ un EmptyHandle : un handle vide. Si votre programme d{sire acc{der au bloc purg{, il n'aceptera pas un Handle vide et demandera au Memory Manager de lui r{-allouer le bloc. Les donn{es de ce bloc sont alors perdues et doivent alors etres recr{er par le programme. 2.5.1 NETTOYAGE AUTOMATIQUE Quand le Memory Manager n'a plus de place (Out of Memory), il commance par nettoyer les blocs purgeables pour essayer de faire de la place. L'ordre dans lequel le Memory Manager purge les bloc d{pend du Purgelevel du bloc. Le PurgeLevel est un nombre de 2 bits qui sp{cifie le niveau de priorit{ d'effacement d'un bloc. Les valeurs sont : 3 : Premier niveau. Purgeable en priorit{. Utilis{ pour mettre une application en sommeil. 2 : Second niveau. 1 : Troisi}me niveau. 0 : Non purgeable. Le niveau 3 est utilis{ par le SystemLoader. Quand certaines applications sont termin{es, la m{moire n'est pas lib{r{e mais le niveau d'effacement est mis @ 3. De cette facon, une ancienne application peut redevenir active sans avoir @ la recharger du disque si elle n'a pas besoin de place m{moire. Une anciene application dans cet {tat est dite en sommeil. Si le Memory Manager doit purger les blocs d'une telle application, il purgera tout les blocs. En g{n{ral, une application doit seulement utilier les niveau 0,1 et 2. 2.6 MEMOIRE SPECIALE La m{moire dans l'Apple // est divis{e en trois cat{gories : -1) M{moire normale. C'est un espace m{moire sans fonction sp{ciale ni restriction @ l'int{rieur. Bancs $02-$DF et une partie des bancs $E0 et $E1. -2) M{moire sp{ciale. C'est un espace m{moire avec des restrictions @ l'interieur du au fait que cette zone m{moire fait partie de l'Apple//. La m{moire sp{ciale ne peut etre utilis{ par les accessoires de bureau, les Tools et les routines qui peuvent etre appel{es par des anciennes applications. Bancs $00-$01 et une partie des bancs $E0 et $E1. Memory Manager page 5 -3) M{moire r{serv{e. C'est une zone m{moire qui n'est pas g{r{e par le Memory Manager. La m{moire r{serv{ inclu la carte langage, la zone de $0000-$ 0800 dans les banc 00 et 01, $0000-$2000 dans les bancs $E0 et $E1. Ces emplacements sont marqu{s occup{s dans le Memory Manager lors de la mise en route. 3.0 DIFFERENCES AVEC LE MACINTOSH Il y a plusieurs diff{rences entre ce Memory Manager et celui du Mac. Les principales sont : - Moins de proc{dures. (si vous en voulez d'autres, demandez les...) - Les blocs ont maintenant leurs propres ID. - Il y a maintenant une niveau de priorit{ pour le nettoyage. - Il n'a que des Handles et plus de Pointeur. 4.0 PROPRIETES DES BLOCS MEMOIRE Les blocs m{moires ont des attributs qui d{terminent de quelle mani}re ils sont allou{s et conserv{s. Certains attributs sont fix{s au d{part et ne peuvent etres modifi{s. D'autres peuvent etres modifi{s apr{s allocation. 4.1 ATTRIBUTS D'ALLOCATION La m{moire de l'Apple// et l'architecture du 65816 oblige @ avoir des restrictions sur l'allocation de blocs. Par exemple, les blocs doivent etres align{s sur une page, ou doivent etres dans un certain banc. Quand un bloc est allou{, ses attributs d{terminent comment il est allou{. Ces attributs peuvent etres sp{cifi{s uniquement au moment de l'attribution. - D14 : Bloc Fixe. Si le bloc est fixe, il ne pourra pas etre d{plac{ lors d'un compactage memoire. Les blocs contenant du code ex{cutable sont en g{n{ral fixes, mais les blocs contenant des donn{es ne doivent pas l'etre. - D04 : Ne doit pas traverser deux bancs. Cet attribut sp{cifie que le bloc de doit pas etre @ cheval sur deux bancs memoires. Les blocs de code ne doivent jamais etre dans ce cas. - D03 : Ne doit pas utiliser la m{moire sp{ciale. Le bloc ne peut etre allou{ dans les bancs de m{moire sp{ciale. M{moire Apple //e, Bancs 00 et 01, Ecran Vid{o. - D02 : Doit etre align{ sur une page. Les donn{es (code ou data) doivent etre align{s sur une page. En g{n{ral pour les raisons de temps. - D01 : Doit avoir une adresse fixe. Le bloc allou{ a une adresse particuli{re. Par exemple, l'{cran vid{o. - D00 : Doit etre dans un banc fixe. Le bloc doit d{buter dans un banc particulier. Par exemple, l'allocation d'un bloc qui utilise la page z{ro ou la pile. Dn : Bit dans le Mot de l'attribut. D15 : MSB D00 : LSB Memory Manager page 6 4.2 ATTRIBUTS MODIFIABLES Le Memory Manager peut d{placer ou effacer des blocs quand il fait de la place pour un nouveau bloc. Il y a des attributs qui d{terminent si le bloc peut etre d{plac{ et/ou effac{. Ces attributs peuvent etres chang{s par l'utilisateur apr{s que le bloc soit cr{er. - D15 : Bloc v{rouill{. Quand un bloc est v{rouill{, il ne peut etre ni d{plac{, ni effac{, sans tenir compte du niveau d'effacement et du degr{s de libert{ du bloc. - D08.09 PurgeLevel. Cet deux bits d{finissent le niveau de priorit{ d'{ffacement du bloc. (voir 2.5.1 pour d{finition des niveaux). 5.0 APPEL DES ROUTINES DU MEMORY MANAGER NdT : Les "CALL" sont ici traduit par "PROCEDURE" sans pour cela faire sp{cialement r{f{rence au PASCAL. Les proc{dures du M{mory Manager sont class{es suivant les cat{gories suivantes : Proc{dures standard : $01 MMBootInit Initialisation lors de la mise en route. $02 MMAppInit Initialisation au travers de l'application. $03 MMAppQuit Fin de l'application. $04 MMGetVersion Num{ro de la version de l'outil. $05 MMReset Appel{ lors d'un Reset. $06 MMStatus Etat du Memory Manager. Allocation m{moire : $09 NewHandle Cr{ation d'un bloc avec sont Handle. $0A ReallocHandle Utilisation d'un Handle existant. $0B RestoreHandle Restore un Handle purg{. Lib{ration m{moire : $10 DisposHandle Lib}re un Handle $11 DispoAll Lib}re tout les Handles. $12 PurgeHandle Efface le contenu d'un bloc. $13 PurgeAll Efface le contenu de tout les blocs. (purgeables) Information sur les blocs et la m{moire : $18 GetHandleSize Informe sur la taille du bloc. $19 SetHandleSize Retaille un bloc. $1A FindHandle Recherche le Handle du bloc contennant l'adresse. $1B FreeMem Informe sur la taille m{moire libre. $1C MaxBlock Informe sur la taille du plus grand bloc libre. $1D TotalMem Informe sur la taille m{moire totale. $1E CheckHandle Regarde si le Handle est valide. $1F CompactMem Force le compactage m{moire. Memory Manager page 7 Autres propri{t{s des blocs $20 HLock V{rouillage d'un bloc. $21 HLockAll V{rouillage de tout les blocs attribu{s. $22 HUnlock D{v{rouillage d'un bloc. $23 HUnlockAll D{v{rouillage de tout les blocs attribu{s. $24 SetPurge Fixe le PrugeLevel d'un bloc. $26 SetPurgeAll Fixe le PurgeLevel de tout les blocs attribu{s. D{placements $28 PtrtoHand Copie une Adresse dans un Handle. $29 HandtoPrt Copie un Handle dans une Adresse. $2A HandToHand Copie un Handle vers un autre. $2B BlockMove Copie d'une Adresse vers une autre. 5.1 DATA TYPES Les types de data servant pour les proc{dures sont : Pointer = Byte : Octet. Handle = Pointer UserID = Word : identificateur du prori{taire du segment. Address = LongInt : 4 octets d'adresse. Size = LongInt : 4 octets pour la taille du bloc. PrugeLevel = 0..3 : Niveau de priorit{ d'{ffacement. Bien que le 65816 n'ai que 24 bits d'adresse, les Adresses sont toujours donn{es sur 32 bits ( 4 Octets ) avec le plus haut octet a z{ro. Les programmes ne doivent jamais mettre des information dans cet octet car le Memory Manager et les autres outils ne fonctionneront alors plus correctement. 5.2 PROCEDURES STANDARDS Ce sont les proc{dures standards d{finies pour chaque outils @ l'exception de AppInit qui diff{re des autres outils. 5.2.1 MMBootInit Cette proc{dure initialise le Memory Manager lors de la mise en route de l'appareil. Une application ne doit jamais appeler cette proc{dure car elle d{truit tout les blocs y compris celui qui l'appele. Ne jamais appeler cette proc{dure. N'essayer m}me pas de l'utiliser dans une protection... Erreur Possible : Code Type d'erreur $0000 Pas d'erreur. Memory Manager page 8 5.2.2 MMAppInit Cette proc{dure est appel{e au d{but de l'application. Si l'appel est fait @ partir d'un segment invalide, un signal d'erreur IDErr est retourn{. Si cela arrive, le programme doit appeler le ID Manager pour obtenir un ID_Number et rappele le Memory Manager pour qu'il alloue de la m{moire au programme. Ceci peut seulemnet arriver lors d'une ex{cution sous le syst}me d'exploitation. Param}tres d'entr{ : - de sortie : User_ID Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur $0207 IDErr 5.2.3 MMAppQuit Cet appel est fait par l'application lorsqu'elle est sur le point de se terminer. Param}tres d'entr{ : User_ID de sortie : - Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur 5.2.4 MMGetVersion Cet proc{dure retourne le num{ro de la version du Memory Manager. Param}tres d'entr{ : - de sortie : Version : Word Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur 5.2.5 MMReset Le Memory Manager verifira la validit{ de toute la m{moire, et retournera une erreur MemErr si il y des d{fauts. ( La liste des blocs m{moire allou{s est abim{e ou manquante). C'est une proc{dure interne appel{e lors de la mise en route du systeme. Une application de doit jamais appeler cette proc{dure sous peine de d{truire toute la m{moire car les futures versions tenteront de r{parer la m{moire et pourront d{truire l'application. Param}tres d'entr{ : - de sortie : - Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur $0201 MemErr. Memory Manager page 9 5.2.6 MMStatus Cette proc{dure est utilis{e pour connaitre l'{tat du Memory Manager bien que celui ci soit toujours actif... Param}tres d'entr{ : - de sortie : Status : Boolean (toujours Vrai) Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur 5.3 ALLOCATION MEMOIRE Ces commandes sont utilis{e pour cr{er des blocs m{moire. 5.3.1 NewHandle NewHandle est utilis{ pour cr{er un bloc m{moire. BlockSize est la taille du bloc @ cr{er. Les attributs sont d{crit dans le chapitre 4. Si un bloc est cr{{ avec une taille nulle, le Handle contiendra NIL. Ce bloc doit }tre relogeable et d{v{rouill{. Param}tres d'entr{ : BlockSize : Taille Owner : User_Id Attributes : Word Location : Address de sortie : Handle Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur $0201 MemErr Allocation d'un bloc impossible $0204 LockErr Op{ration ill{gale pour un bloc fixe ou non relogeable. $0207 IDErr User_Id ill{gal Memory Manager page 10 5.3.2 ReallocHandle Cette proc{dure est utilis{e pour r{allouer un bloc qui a {t{ purg{. BlockSise est la taille du bloc @ cr{er. L'Attribut du bloc est d{crit au chapitre 4. Toute les informations pr{c{dements contenues dans le bloc sont perdues. Param}tres d'entr{ : BlockSize : Taille Owner : User_Id Attributes : Word Location : Address TheHandle : Handle de sortie : - Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur $0201 MemErr Allocation d'un bloc impossible $0203 NotEmptyErr Un Handle vide est neccessaire $0204 LockErr Op{ration ill{gale pour un bloc fixe ou non relogeable. $0206 HandleErr Handle invalide. $0207 IDErr User_Id invalide. 5.3.3 RestoreHandle RestoreHandle est utilis{ pour reallou{ un bloc qui a {t{ effac{. Cette proc{dure se sert des m}mes param}tres Attribut, User_Id et Size que dans PurgeHandle. Le bloc memoire ne doit pas avoirun banc ou une adresse fixe. Dans ce cas, AttErr est retourn{. Toute les informations du bloc sont perdues. Param}tres d'entr{ : TheHandle : Handle de sortie : - Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur $0201 MemErr Allocation d'un bloc impossible $0203 NoEmptyHand Un Handle vide est n{cessaire. $0206 HandErr Handle invalide. $0208 AttErr Op{ration ill{gale pour le bloc ayant ces attributs. Memory Manager page 11 5.4 LIBERATION MEMOIRE Ces proc{dures permettent de lib{rer les blocs et les pointeurs. Les informations contenues dans un bloc ou point{s par un pointeur(!) sont perdues lors d'une lib{ration. 5.4.1 DispoHandle DispoHandle lib}re le bloc sp{cifi{ par TheHandle et le Handle. Le PurgeLevel du bloc et l'attribut de v{rouillage sont ignor{s. Param}tres d'entr{ : TheHandle : Handle de sortie : - Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur $0206 HandleErr Handle invalide. 5.4.2 DiposeAll DiposeAll lib{re tout les Handles en fonction du User_Id. Param}tres d'entr{ : Ower User_Id de sortie : - Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur $0207 IDErr User_Id non valide. 5.4.3 PurgeHandle PurgeHandle purge le bloc point{ par TheHandle. Le bloc doit etre effacable et d{v{rouill{. Le Handle reste allou{ mais contient alors la valeur vide : NIL. Param}tres d'entr{ : TheHandle Handle de sortie : - Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur $0204 LockErr Op{ration ill{gale,bloc fixe. $0205 PurgeErr Op{ration ill{gale, bloc non effacable. $0206 HandleErr Handle non valide. Memory Manager page 12 5.4.4 PurgeAll PurgeAll efface tout les blocs m{moire allou{ @ User_Id. Seul les blocs purgeables et non v{rouill{s sont effac{s. Si un bloc n'est pas effacable, LockErr ou PurgeErr est retourn{ alors que les blocs effacables sont purg{s. Param}tres d'entr{ : Owner User_Id de sortie : - Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur $0204 LockErr Op{ration ill{gale pour un bloc fixe ou non relogeable. $0205 PurgeErr Bloc on purgeable. $0207 IDErr User_Id non valide. 5.5 INFORMATIONS SUR LES BLOCS Ces proc{dures permettent de modifier et de connaitre la taille des blocs. 5.5.1 GetHandleSize GetHandleSize retourne la taille du bloc point{ par TheHandle. Param}tres d'entr{ : TheHandle Handle de sortie : Size Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur $0206 HandleErr Handle invalide. Memory Manager page 13 5.5.2 SetHandleSize SetHandleSize change la taille du bloc point{ par TheHandle. Le bloc peut }tre plus grand ou plus petit. S'il faut allonger un bloc, la m{moire peut }tre compact{e et certains bloc purg{s. Le Handle ne doit pas }tre fixe car si sa taille change, il doit etre d{plac{. Si taille est 0, le Handle est @ NIL. Si vous essayez de changer la taille d'un bloc point{ par un Handle vide, EmptyErr sera retourn{ comme code d'erreur. Param}tres d'entr{ : NewSize Size TheHandle Handle de sortie : - Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur $0201 MemErr Allocation d'un bloc impossible. $0202 EmptyErr Handle vide. $0204 LockErr Op{ration ill{gale pour un bloc fixe ou non relogeable. $0206 HandleErr Handle non valide. 5.5.3 FindHandle FindHandle retourne un Handle du bloc sp{cifi{ par son adresse dans Location. Notez que si le bloc n'est pas fixe, il peut bouger. C'est @ dire que si le bloc bouge l'adresse que vous donnez par Location peut ne pas etre dans le bloc esp{r{. Si l'adresse n'est pas valide, (aucun Handle pour cette adresse) Handle contiendra NIL (0). Param}tres d'entr{ : Location : Address de sortie : TheHandle : Handle Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur. 5.5.4 FreeMem FreeMem retourne le nombre total de d'octets libres en m{moire. Il ne tient pas compte des blocs pouvant etres lib{r{s. A cause de la fragmentation de la m{moire, il est impossible d'allouer un bloc de cette taille. FreeMen effectue un compactage de la m{moire. Param}tres d'entr{ : - de sortie : Size Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur Memory Manager page 14 5.5.5 MaxBlock MaxBlock retourne la taille du plus grand bloc libre en m{moire sans tenir compte des blocs pouvant etres effac{s. Param}tres d'entr{ : - de sortie : Size Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur. 5.5.6 TotalMem TotalMem retourne la taille de la m{moire de la machine incluant les 256K de m{moire principale. Param}tres d'entr{ : - de sortie : Size Erreurs possibles Codes Type d'erreur $0000 Pas d'erreur 5.5.7 CheckHandle CheckHandle verifi si un Handle est valide. Cette proc{dure est @ l'origine pour venir en aide lors de la mise au point d'une application. Si le Memory Manager ne reconnait pas le Handle comme cr{e, HandleErr est retourn{. Param}tres d'entr{ : TheHandle Handle de sortie : - Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur $0206 Handle non valide. 5.5.8 CompactMem CompactMem est utilis{ pour forcer la compaction m{moire. La compaction m{moire n'est jamais faite pendant les interruptions et ,of course, si CompactMem est appel{ par une interruption, la compaction ne sera pas effectu{e. Param}tres d'entr{ : - de sortie : - Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur Memory Manager page 15 5.6 AUTRES PROPRIETES DES BLOCS Les proc{dures suivantes permettent de modifier les autres propri{t{s des blocs. 5.6.1 HLock HLock v{rouille le bloc sp{cifi{ par TheHandle. Un bloc v{rouill{ ne peut }tre purg{ ou d{plac{ pendant une compaction. Param}tres d'entr{ : TheHandle Handle de sortie : - Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur $0206 HandleErr Handle non valide. 5.6.2 HLockAll HLockAll v{rouille tout les blocs d{finis par l'application. Param}tres d'entr{ : User_Id de sortie : - Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur $0207 IdErr User_Id non valide. 5.6.3 HUnlock HUnlock d{v{rouille le bloc sp{cifi{ par TheHandle. Le bloc peu alors }tre d{plac{ durant une compaction. Param}tres d'entr{ : TheHandle Handle de sortie : - Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur $0206 HandleErr Handle non valide. 5.6.4 HUnlockAll D{v{rouillage de tout les blocs definis dans l'application. Param}tres d'entr{ : User_Id de sortie : - Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur $0206 HandleErr Handle non valide. Memory Manager page 16 5.6.5 SetPurge SetPurge change le PurgeLevel du bloc sp{cifi{ par TheHandle. Param}tres d'entr{ : NewPurgeLevel Word TheHandle Handle de sortie : - Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur $0206 HandleErr Handle non valide. 5.6.6 SetPurgeAll SetPurgeAll donne la valeur NewPurgeLevel @ tout les blocs d{finis par l'application. Param}tres d'entr{ : NewPurgeLevel Word User_ID de sortie : - Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur $0207 IDErr User_Id non valide. 5.7 DEPLACEMENT DE DONNEES Ces proc{dures permettent de d{placer des donn{es dans la m{moire de la machine. Les d{placements fonctionnent correctement m}me si les blocs sources et destinations sont @ cheval sur des bancs. Toutes ces fonctions sont en fait des BlockMove. PtrToHand, HandToPtr, et HandToHand sont des proc{dures pour d{r{f{rencer les Handles, faites pour faciliter la tache du programmeur. Les proc{dures ne v{rifient pas si la taille du bloc destination est suffisament large pour pouvoir contennir le bloc source. Il n'y a pas de v{rification d'adresses pour les pointeurs, et les proc{dures {craseront les donn{es d{ja pr{sentes m}me si cela fera exploser la machine !!! L'octet de poid fort des quatres octets d'adresse doit toujours etre @ z{ro. 5.7.1 PtrToHand D{placement d'un block. La source est rer{r{e par un Pointeur, la destination par un Handle. Param}tres d'entr{ : Source Pointer Dest Handle Count Size de sortie : - Erreurs possibles Codes Type d'erreur $0000 Pas d'erreur $0202 EmptyErr Op{ration ill{gale sur un Handle vide $0206 HandleErr Handle non valide. Memory Manager page 17 5.7.2 HandToPtr D{placement d'un block. La source esr pep{r{e par un Handle, la destination par un Pointeur. Param}tres d'entr{ : Source Handle Dest Pointer Count Size de sortie : - Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur $0202 EmptyErr Op{ration ill{gale sur un Handle vide $0206 HandleErr Handle non valide. 5.7.3 HandToHand D{placement d'un block. La source et destination sont rep{r{es par des Handles. Param}tres d'entr{ : Source Handle Dest Handle Count Size de sortie : - Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur $0202 EmptyErr Op{ration ill{gale sur un Handle vide $0206 HandleErr Handle non valide. 5.7.4 BlockMove D{placement d'un block m{moire. La source et la destination sont rep{r{es par des Pointeurs. Param}tres d'entr{ : Source Pointer Dest Pointer Count Size de sortie : - Erreurs possibles : Codes Type d'erreur $0000 Pas d'erreur Memory Manager page 18 6.0 CODES D'ERREURS Codes des erreurs retourn{es par le Memory Manager. Codes Type d'erreur ----- ------------- $0000 Pas d'erreur $0201 MemErr Allocation d'un bloc impossible. $0202 EmptyErr Le Handle est vide ! $0203 NotEmptyErr Il faut un Handle vide ! $0204 LockErr Le bloc est verouill{ ! $0205 PurgeERR Le bloc ne peut etre lib{r{ ! $0206 HandleErr Handle non valide ! $0207 IDErr User_Id non valide ! $0208 AttrErr Attribut incompatible avec la fonction! 7.0 PARTIES EN ROM ET EN RAM DU MEMORY MANAGER A l'exception des routines de purge automatique, le Memory Manager reside en ROM. La premi}re version du Memory Manager a ces routines en RAM pour permettre au systeme d'exploitation et au chargeur de determiner leurs propres niveaux de purges. La future version du Memory Manager aura ces routines en ROM. NdT : c'est pour quand le GS+ ? ______________________________________________________________________ Memory Manager page 19 ______________________________________________________________________ ______________________________________________________________________ MEMSOFT pour APPLE IIGS ______________________________________________________________________ - Ce r{sum{ de la documentation est gracieusement offerte par ZAHG - ______________________________________________________________________ - Thanks to THORTUE - - Thanks to L.S.D. qui a deja beaucoup fait - - Th!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~anks to Apple pour le II GS - ______________________________________________________________________ (k) Zahg, 1987, FRANCE ______________________________________________________________________ ______________________________________________________________________ ______________________________________________________________________ CHAPITRE 1 : MEMBASIC ______________________________________________________________________ 1.1 INTRODUCTION ---------------- Ce chapitre expose les caract{ristiques g{n{rales de l'interpr{teur MEMBASIC. Les commandes, fonctions et instructions sont pr{sent{es individuellement par ordre alphab{tique. MEMSOFT BASIC page 1 1.2 NOTATIONS UTILISEES ----------------------- Pour la description de la syntaxe, les r}gles suivantes sont utilis{es : - Les mots cl{s du langage sont {crits en majuscule. - Tout les signes de ponctuation contenus dans les syntaxes : virgule point-virgule, guillemets, deux-points, parenth}ses sont obligatoires @ l'exception des caract}res "superieur @" (>) , "inferieur @" (<), "crochet ouvrant" ([) et "crochet fermant" (]). - Les instructions en minuscules encadr{es par < et > doivent }tre remplac{es par les termes idoines choisis par l'utilisateur. - Les termes plac{s entre crochets [ et ] sont facultatifs. - La notation suivante signifie que l' utilisateur doit choisir entre plusieurs options. GOTO - Les termes entre crochets suivis de points de suspensions peuvent }tre r{p{t{s plusieurs fois dans la limite de la longueur de la ligne. 1.3 COMMANDES, FONCTIONS et INSTRUCTIONS ---------------------------------------- ABS : Valeur absolue du parametre. Syntaxe : ABS () ACOS : Calcul de l'angle dont le cosinus est passe comme param}tre. L'angle est exprim{ en radian ou en degr{s suivant l'option d{finie par OPTION ANGLE. Syntaxe : ACOS () ANGLE : Calcul de l'angle entre l'axe des abscisses positives et le vecteur joignant l'origine au point de coordonn{es indiqu{es. Syntaxe : ANGLE (,) ASIN : Calcul de l'angle dont le sinus est passe comme param}tre. L'angle est exprim{ en radian ou en degr{s suivant l'option d{finie par OPTION ANGLE. Syntaxe : ASIN () ASK : Permet de connaitre les param}tres d'{dition en cours, utilis{s pour les impressions non formatt{es. Syntaxe : ASK <{l{ment ASK> ATN : Calcul de l'angle dont la tangente est pass{e comme param}tre. L'angle est exprim{ en radian ou en degr{s suivant l'option d{finie par OPTION ANGLE. Syntaxe : ATN () AUTO : Cette commande demande @ l'interpr{teur de num{roter et indenter automatiquement les lignes au fur et @ mesure de la saisie. Syntaxe : AUTO ON, AUTO OFF MEMSOFT BASIC page 2 BREAK : Premet de placer des points d'arr}t dans le programmme. Syntaxe : BREAK CASE : Cette instruction est utilis{e pour construire des s{quences structur{es de programme. Exemple : 200 SELECT CASE a$ 210 CASE "A" TO "Z" 220 PRINT "c'est une majuscule" 230 CASE "a" TO "z" 240 PRINT "c'est une minuscule" 250 CASE IS ="{", IS ="}", IS = "@" 260 PRINT "c'est un caractere accentu{" 270 CASE ELSE 280 PRINT "c'est pas une lettre" 290 END CASE CAUSE EXCEPTION : Simulation d'erreur. Syntaxe : CAUSE EXCEPTION Exemple : CAUSE EXCEPTION 3001 simule une division par z{ro. CEIL : Arrondi sup{rieur @ la ni}me d{cimale du param}tre. La forme CEIL a un seul param}tre donne le plus petit entier sup{rieur ou {gal @ la valeur num{rique du param}tre. La forme CEIL a deux param}tres: CEIL (x,n) arrondi la valeur x @ la ni}me d{cimale. Syntaxe : CEIL () CEIL (,) CHAIN : Lance l'ex{cution d'un programme pr{alablement charg{ depuis la m{moire auxiliaire en lui passant {ventuellement des param}tres. CHAIN provoque la fermeture des fichiers ouverts, l'effacement de la table des variables apr}s extraction des {ventuels param}tres, le chargement puis l'execution du programme indiqu{, l'affectation {ventuelle @ de nouvelles variables des valeurs pass{es en param}tre. Syntaxe : CHAIN [WITH ( [, Exemple : CHDIR "A:/MEMSOFT/MEMTOOL" CHDIR$ : Donne de r{pertoire courant. Exemple : PRINT CHDIR$ C:/MEMSOFT/TEST/... CHR$ : Cette fonction donne une chaine de UN caract}re. Ce caract}re correspond au code du jeu de caract}res utilis{. Syntaxe : CHR$ () CLEAR KEYBOARD : Vide les caract}res d'avance dans la m{moire tampon du clavier. MEMSOFT BASIC page 3 CLOSE : Fermeture d'un fichier ProDos ou d'un fichier de communication. Deux formes pour l'instruction CLOSE existent : CLOSE ou CLOSE Num{ro de fichier est une expression num{rique indiquant le num{ro attribu{ au fichier lors de son ouverture. Syntaxe : CLOSE CLOSE CLS : Effacement du contenu de la fen}tre de travail. COMSTAT : Donne l'{tat actuel du port s{rie associ{ @ un fichier de communication. La signification des bits de la r{ponse est : bit 1 = 1 si un caract}re a {t{ re\u. bit 0 = 1 si le port RS232 est pr}t @ {mettre. Exemple : 1000 OPEN "COM2",1 1010 PRINT "L'etat de la ligne est : "; COMSTAT(1) COPY : Copie d'un fichier d'un r{pertoire vers un autre r{pertoire ou sous un autre nom. La copie peut, si on le d{sire, }tre invisible dans le catalogue. Syntaxe : COPY TO . La deuxi}me expression commencera par "!" pour l'invisibilit{ dans le catalogue. Invisibilit{ seulement sous MEMSOFT; commencera par "@" si l'on d{sire que le fichier d'arriv{e {crase le fichier d{ja existant de m}me nom. Exemple : COPY "original.msk" TO "nouveau.hlp" COPY "orig*.*" TO "nouv*.*" COPY "a:*.*" TO "monrep" COS : Calcul du cosinus de l'angle pass{ en param}tre. Syntaxe : COS () COT : Calcul de la cotangente de l'angle pass{ en param}tre. Syntaxe : COT () CSC : Calcul de la cos{cante de l'angle pass{ en param}tre. Syntaxe : CSC () CURDRIVE : Fixe le disque courant. Exemple : CURDRIVE "A:" le disque courant devient A. CURDRIVE$ : La fonction CURDRIVE$ donne une chaine de deux caract}res indiquant le disque en cours. CURLINE : Cette fonction sans param}tre est un compteur de lignes d'{dition pour les instructions MEMSCREEN : LET "?..." et LET "HARDCOPY..." DATA : Cette instruction permet d'incorporer dans un programme des donn{es qui seront lues au moyen de l'instruction READ. MEMSOFT BASIC page 4 DATE : DATE donne la date du jour exprim{e sous la forme num{rique AAJJJ,JJ repr{sentant le nombre de jour depuis le d{but de l'ann{e. DATE$ : donne la date du jour exprim{e sous la forme chaine "AAAAMMJJ". DEBUG : Rend actif ou inactif le mode DEBUG. Avec DEBUG ON, on rend le mode DEBUG actif et permet l'utilisation des instruction BREAK et TRACE. DECLARE STRING : Cette instruction permet de d{clarer la longueur maximum que peuvent prendre une ou plusieurs variables chaines simples. Exemple : 110 DECLARE STRING *10 a$,b$,c$, *15 a$ et b$ ont une longueur maximum de 10 et c$ de 15 100 INPUT PROMPT "Donner la longueur maxi : ":n 110 DECLARE STRING a$*(n) DEG : Cette fonction convertit un nombre exprim{ en radians en degr{s. Syntaxe : DEG () DELETE : destruction de lignes d'un programme. Syntaxe : DELETE ,,... DELETE TO DELETE TO DELETE TO DIM : D{claration des tableaux et de la plage de variation des indices. Exemple : 1000 DIM TABLEAU (10,10), CA (1980 TO 1985) DIR : Permet d'obtenir le contenu d'un r{pertoire. Syntaxe : DIR [] Exemple : DIR "B:*.MEM" Affiche tous les fichiers du r{pertoire en cours de l'unit{ B dont le suffixe est MEM. DIR "AB*.M*" Affiche tous les fichiers du r{pertoire en cours dont le nom commence par AB et dont le suffixe commence par M. DISKSIZE : Rend la place totale disponible, en octets, sur le disque specifi{ Syntaxe : DISKSIZE () DO...LOOP : Ces intructions sont destin{es @ construire des boucles de traitement. Syntaxe : Debut de la boucle Fin de la boucle DO LOOP DO UNTIL LOOP UNTIL DO WHILE LOOP WHILE ELSE : Utilise dans les instructions IF...THEN...ELSE, ON GOTO, ON GOSUB, et CASE. Se reporter aux instructions IF, ON GOTO, ON GOSUB, CASE. MEMSOFT BASIC page 5 END : Indique la fin du programme. Cette instruction provoque la fermeture des fichiers qui {taient encore ouverts. END IF : Indique la fin du dernier bloc d'une instruction IF. Exemple : IF THEN ... ... ... ELSEIF THEN ... ... ... ELSE ... ... END IF END SELECT : Marque la fin du dernier bloc CASE associ{ @ une instruction SELECT. EPS : Evaluer l'erreur maximale sur un nombre. Syntaxe : EPS () ERASE ALL : Efface toute les variables d'un programme, les boucles, les sous programmes et ferme tous les masques et fichiers en cours. EVALUATE : Cette fonction convertit en une valeur num{rique l'expression arithm{tique simple contenue dans une expression chaine. L'op{rateur pourra }tre "+", "-", "*" ou "/". Syntaxe : EVALUATE () Exemple : 1000 a$="123.34" 1010 b$="10.12" 1020 c$=a$ & "+" & b$ 1030 EVALUATE c$ EXECUTE : Permet d'ex{cuter une chaine de caract}res contenant une instruction. EXIT : Permet de sortir d'une boucle et de passer @ l'instruction qui suit imm{diatement la fin de la boucle. Exemple : 1000 FOR i=1 TO N .... .... 1050 IF ABS(x)<0.000001 THEN EXIT FOR --+ .... ! .... ! 1100 NEXT i ! 1110 'suite' <----------------------------+ EXKEY : rend le code de la touche clavier, enfonc{ par l'utilisateur pour sortir d'un masque MEMSCREEN durant la saisie. Si l'utilisateur abandonne et enfonce la touche "Esc" EXKEY rend 1, s'il enfonce la touche "RETURN", EXKEY rend 0, s'il enfonce les touches F1 a F9, EXKEY rend 1 a 9. MEMSOFT BASIC page 6 EXLINE : Donne le num{ro de la ligne ou s'est produit une erreur. EXP : Calcul de la fonction exponantielle. Syntaxe : EXP () EXTEXT$ : Donne le contenu du message d'erreur. Exemple : 500 PRINT EXTEXT$(EXTYPE) EXTYPE : Donne le num{ro de l'erreur. EXWAY : Cette fonction permet, en cas de sortie de la saisie d'un masque par une touche de d{placement, de connaitre cette touche. EXWAY rend les valeurs suivante : 0 pour RETURN 1 pour Fleche Bas -1 pour Fleche Haut 2 pour Pomme-Fleche-Haut ou Clic en bas a droite de la zone de saisie. -2 Pour Pomme-Fleche-Bas ou Clic en haut a gauche de la zone de saisie. EXZONE : A l'issue d'une saisie de donn{es par masque MEMSCREEN, EXZONE rend le numero de la zone de saisie o| la sortie s'est effectu{e. FILESIZE : Rend le cumul des tailles des fichiers correspondants au crit}re. Le crit}re de s{lection est une expression chaine pouvant contenir les caract}res sp{ciaux "?" et "*". Syntaxe : FILESIZE () FIND : Cette commande permet de retrouver une suite de caract}res dans un programme. Syntaxe : FIND [] "" peut }tre "&","<", ">" ou "vide" repr{sente la partie du programme dans laquelle la ont effectue la recherche. La syntaxe est : TO . lmini et lmaxi sont des num{ros de ligne ou des {tiquettes, ou bien "+" pour la ligne maxi,"-" pour la ligne mini, "*" pour la derni}re ligne valid{e par RETURN. est une suite de caract}res @ rechercher @ l'exception du caract}re " (guillemet). Le caract}re ? peut remplacer n'importe quel caract}re y compris le guillemet. FKEY : Cette instruction permet de modifier la signification des touches de fonction F1 a F9. Syntaxe : FKEY MEMSOFT BASIC page 7 FOR : Construction d'une boucle dont l'ex{cution est control{e par la valeur d'une variable. Syntaxe : FOR = TO [STEP ] FP : Donne la partie d{cimale d'une valeur num{rique. Syntaxe : FP () FREE : Donne des informations sur la place disponible en m{moire centrale ou sur disque. Syntaxe : FREE FREE () GET KEYBOARD : Attente d'une touche au clavier. GOSUB : Branchement vers un sous programme interne. Syntaxe : GOSUB GOSUB <{tiquette> GOTO : Branchement a un endroit du programme. Syntaxe : GOTO GOTO <{tiquette> HELP : Cette instruction permet de d{finir le fichier d'aide qui sera pris en compte au prochain enfoncement de la touche F0. Syntaxe : HELP () Exemple : HELP "/REP/SOUSREP/AIDE.HLP" HELP$ : Cette fonction sans param}tre rend le nom du fichier d'aide explicite en cours. Exemple : PRINT HELP$ /REP/TOTO.HLP HTAB : (fonction) Renvoi la position du curseur, compt{e @ partir du bord gauche de la fen}tre. HTAB : (instruction) Permet de positionner le curseur sur une colonne donn{e. Syntaxe : HATB MEMSOFT BASIC page 8 IF : Cette instruction permet d'effectuer soit des branchements conditionnels soit d'ex{cuter des instructions selon qu'une condition est satisfaite ou non Syntaxe : IF THEN ELSE peut prendre l'une des formes suivantes : - [:]... - - <{tiquette> IF THEN ELSE END IF IMAGE : L'instruction IMAGE permet de d{finir un format que pourra utiliser une instruction PRINT USING. La ligne MEMBASIC qui contient l'instruction IMAGE ne doit contenir aucune autre instruction. Elle peut par contre commencer par une {tiquette. Syntaxe : IMAGE : INPUT : Permet de lire des donn{es introduites au clavier. Syntaxe : INPUT INPUT PROMT : INPUT# : Permet de lire des donn{es depuis un fichier ProDos ou un port de communication s{rie. Syntaxe : INPUT#, INPUT$ : Permet de lire un nombre exact d'octets depuis un fichier Prodos ou port de communication serie. Syntaxe : INPUT$ (,) nombre d'octet : de 1 a 255 INT : Calcul de la plus grande valeur enti}re inf{rieure ou {gale @ celle de l'expression num{rique donn{e comme param}tre. Syntaxe : INT () IP : Donne la partie enti}re du param}tre. IP(x) est {quivalent @ : SGN(x) * INT (ABS(x)). Syntaxe : IP() KILL : Permet de d{truire un fichier sur disque. Syntaxe : KILL LBOUND : La fonction LBOUND donne la valeur minimale que peut prendre l'indice d'un tableau. Syntaxe : LBOUND ( [,]) LCASE$ : LCASE$ restitue une chaine ne comportant que des minuscules. Syntaxe : LCASE$ () MEMSOFT BASIC page 9 LEFT$ : Extractiond'une sous-chaine @ partir des premiers caract}res de la chaine donn{e comme param}tre. Syntaxe : LEFT$ (,) LEN : Donne la longueur de l'expression chaine donn{e comme param}tre. Syntaxe : LEN () LET : L'instruction LET permet d'affecter une valeur @ une variable simple. LET est {galement utilis{ pour toute les instructions MEMSCREEN et MEMFILE. Syntaxe : LET = LET ", LIST : Permet d'obtenir la liste partielle ou totale d'un programme. Syntaxe : LIST [] [ [,]...] ["@] peut }tre "<" ou ">" peut une ligne ou un ensemble TO le param}tre ligne peut }tre : un num{ro de ligne "+" : ligne maximum "-" : ligne minimum "*" : derniere ligne represente une specification de fichier. Cette option permet de sauver le listing dans un fichier sur disque. LOAD : La commande LOAD permet de charger un programme stock{ sur m{moire auxiliaire. Syntaxe : LOAD "" LOCNUMBER : La commande LOCNUMBER permet de renum{roter un programme avec les adresses de d{but d'instruction comme num{ro de ligne. Syntaxe : LOCNUMBER LOG : Calcul du logarithme n{p{rien d'un nombre. Syntaxe : LOG () LOG10 : Calcul du logarithme decimal d'un nombre. Syntaxe : LOG10 () LOG2 : Calcul du logarithme en base 2 d'un nombre. Syntaxe : LOG2 () LOOP : Instruction qui termine une boucle DO. LTRIM$ : La fonction LTRIM$ supprime les espaces de d{but de chaine. Syntaxe : LTRIM$ () MEMSOFT BASIC page 10 MAT : Permet d'initialiser un tableau ou de copier un tableau dans un autre. Syntaxe : MAT = MAt = MAX : Donne le plus grand des deux param}tres. Syntaxe : MAX (,) MAXLEN : Donne la longueur maximum allou{e @ une variable chaine. Syntaxe : MAXLEN () MAXLINE : Cette fonction rend le nombre de ligne par page de l'imprimante fixe par SET MAXLINE. (66 par defaut). MAXNUM : Donne la valeur du plus grand nombre repr{sentable en MEMBASIC qui est : 9.9999999999999 E+63 MEMBACKUP : Sauvegarde de fichiers d'un r{pertoire d'un disque dur vers une ou plusieurs disquettes. Syntaxe : MEMBACKUP TO La premi}re chaine repr{sente le r{pertoire @ sauvegarder suivi d'un {ventuel crit}re de s{lection. La deuxi}me chaine indique le lecteur de disquette concern{ par la sauvegarde, sous la forme suivi de ":". Exemple : MEMBACKUP "*.MSK" TO "A:" MEMCOMPARE : V{rification des disquettes de sauvegarde d'un r{pertoire de disque dur. Syntaxe : MEMCOMPARE TO . chaine_1 : Lecteur de disquettes o| seront plac{es successivement les disquettes @ verifier sous la forme "X:". chaine_2 : D{finit le disque dur et le r{pertoire sur lequel s'effectuera la comparaison. Exemple : MEMCOMPARE "A:" TO "C:/DISQUE.DUR/COMPTA" MEMRESTORE : Restaure sur disque dur les fichiers ayant {t{ sauvegard{s par MEMBACKUP. Syntaxe : MEMRESTORE TO MID$ : MID$ permet d'extraire une sous-chaine d'une chaine. Syntaxe : MID$ (,,) MIN : Donne la plus petite valeur des deux param}tres. Syntaxe : MIN (,) MKDIR : Creation d'un sous-r{pertoire. Syntaxe : MKDIR "" MOD : Donne la valeur d'une expression modulo une autre expression selon la formule : MOD (x,y) = x -y * INT (x/y), soit le reste de la division enti}re de x par y. Syntaxe : MOD (,) MEMSOFT BASIC page 11 NEW : Cette instruction efface compl}tement le programme qui {tait r{sident en m{moire centrale. Elle remet @ z{ro l'ensemble des tables utilis{es par l'interpr{teur MEMBASIC. La table des variables est {galement effac{e. Les fichiers qui {taient encore ouverts avant l'ex{cution de cette instruction sont ferm{s. NEXT : Est utilis{e conjointement avec l'instruction FOR pour marquer la fin de la port{e de la boucle. ON...GOSUB : Branchements vers des sous-programmes. Syntaxe : ON GOSUB ELSE <{tiquette> @ la forme : ,,.... <{tiquette>,<{tiquette>,... ,<{tiquette>,.... ON...GOTO : Branchements vers des endroits du programme. Syntaxe : ON GOTO ELSE <{tiquette> OPEN : Ouverture d'un fichier Prodos. Syntaxe : OPEN