?_,L l!OI;DevMicSoFtBrowseButtons()Zmain  Devmic.cnt /&;)z4|CONTEXTP|CTXOMAPWB|FONTY@|KWBTREEXD|KWDATAC|KWMAPGD|SYSTEM|TOPIC|TTLBTREEH|bm0X|bm1\|bm10I|bm11SR|bm12|bm13t|bm14|bm15: |bm16 |bm17 |bm2$|bm3ah|bm4ʽ|bm5f|bm6V|bm7|bm8(|bm9S;J; 9E1AEMSommaireP _ bHfG<ـJumpContents(`Simmic11')L4!ߒQJ"Sommaire de l'aide DevMicGnralits Prsentation de l'outil de dveloppement pour microcontrleur MC68HC11 de Motorola. Organisation d'une session de travailSimulateur intgr MoniteurFonctions de base Editeur multifichiers. Particularits Assembleur, Editeur de liens :ME H5z+rlNXd%d d fJumpContents(`LangageC')JumpContents(`Pascal.Hlp') Dbogueur source Manipulation de la mmoire du microcontrleur Outils disposition du programmeurFonction annexesConseils d'optimisationAssocier des images ( schmas, organigrammes ... ) aux programmes.Bulles d'informationLangages utilisables Langage C Pascal. d_MP pH}}d$Matriels utilisablesCritres gnraux Liste des matriels tests avec DevMic.G1CPrsentation de DevMic7M'  ȀPrsentationP< F)DevMic est un environnement de dveloppement intgr pour microcontrleur MC68HC11.Toutes les commandes sont accessibles depuis l'diteur de textes par l'intermdiaire de un menu droulant un menu contextuel une barre d'outilsDeux versions sont proposes :}A R  "  DevMic11as pour dvelopper en assembleur DevMic11acps pour dvelopper en assembleur, en langage C et en PascalC : D " " 'C$  E1نaHEditeur multi-textes;C$ . Editeur multi-textesxw < F ㉂ TextesL'diteur permet de travailler simultanment sur plusieurs applications.Ceci permet d'changer des morceaux de texte d'une application l'autre par "Copier/Coller" ou par "glisser/dplacer".Si l'option de mise en vidence de la syntaxe est active, dans les textes source et les listings, les mots sont colors en liaison avec leur fonction dans le texte.z 2 2 Seules les fontes de caractres largeur fixe sont supportes par l'diteur. Les styles GRAS et ITALIQUE ne sont pas tolrs. On peut changer de fonte depuis le menu "Options/Editeur".La ligne en cours de saisie est rvalue chaque frappe du clavier.Dans le texte source, on peut cliquer sur un symbole pour voir la valeur numrique associe.Cliquer sur une valeur numrique affiche la correspondance de cette valeur en Dcimal, Hexagonal et binaire.(w $ 5z ' Sauvegarde & ULes listings, les trames S1S9 ne sont pas automatiquement sauvs sur le disque. Il faut, si ncessaire utiliser la rubrique "Crer Fichier Objet" du menu "Fichiers".C @< FIndentation automatiqueEn frappant la touche , le curseur vient se positionner la ligne suivante au niveau du premier caractre de la ligne en cours. L'indentation peut tre supprime dans le menu "Options/Editeur". TabulationLa touche "TAB" provoque une tabulation, c'est dire le passage la colonne pn+1 (n et p:entiers positifs ) immdiatement suprieure. La largeur de tabulation p est rglable dans les options de l'diteur.Mise en page automatique du texte (en assembleur seulement) @C @/ ,oCette fonction du menu "Edition / Formater" permet d'amliorer la prsentation. On peut donc saisir le texte sans trop se soucier de la mise en page.Visualisation des erreurs @A( HLes erreurs d'assemblage , de compilation et de translation sont montres dans le texte: la ligne de l'erreur apparait sur fond rouge.\7@B% nHElle est reformate ds que l'on rectifie l'erreur. )A)B& HF BoB& @HMarquage de la ligne couranteX)BEJ bHDepuis le dbogueur ou l'outil de recherche et remplacement, la ligne courante est visualise sur fond de couleur.Pour une recherche, la couleur de fond est obtenue par inversion de la couleur courante.Dans le dbogueur, deux couleurs sont utilises :- Vert-jaune si la ligne a t trouve directement.- Violet si la ligne a t trouve par approximation.Placer des repres dans la marge Lorsque le texte est long, pour faciliter le dplacement (navigation) d'une ligne une autre, on peut placer des index dans la marge pour passer ensuite facilement d'un index l'autre.joBF6 :H- Pour placer/Enlever un index : bouton central de la souris ou menu contextuel (bouton droit) / Index ou encore Ctrl-I.- Pour passer d'un index l'autre : molette de la souris ou menu contextuel / Index / Suivant ou encore Ctrl-S.Commandes particulires Outre les commandes classiques de Microsoft-Windows, certains raccourcis ont t ajouts :|EaH4 6H- Pour effacer une ligne : Ctrl-Y- Pour recopier une ligne : Ctrl-R- Pour changer d'application : Ctrl-F6 (si plusieurs applications charges).- Pour commuter en mode Insertion/Recouvrement : INSERUn menu contextuel ( bouton droit de la souris) permet d'aller au dbut ou la fin du texte (Ctrl-D et Ctrl-F).Une barre d'outils reprend et complte ces commandes.CFH1yHMAssembleur intgr8aHH# * Assembleur intgr&HI# HI3 4 H E8L'assembleur est un programme dont la fonction est de produire l'image du code objet ( langage machine ) partir d'un texte. (II% HIJP nCH +KnHkTUD4g7L'assembleur est aussi un langage dont les lments sont les symboles, les expressions, les instructions, les directives et les signes rservs.(IJ% H\!JXM; DEH"Pe Une fentre est ouverte au cours de l'assemblage. Elle permet de visualiser la liste des textes-source utiliss, la liste des symboles et la liste des variables. La progression de l'assemblage en deux passes est montre. L'assemblage est stopp ds qu'une erreur est rencontre. Si une erreur intervient, elle est montre la fois dans une fentre d'tat et dans les textes. En cliquant dans la liste des sources, on peut les diter. En cliquant dans la liste des symboles ou des variables, on peut les rechercher dans le texte-source.(JM% Hg6XMM1 2lHP-G'L'assembleur cre un listing et une trame S1S9.< M#N1ن #NFonctionASM:M]N# .Rle de l'assembleur(#NO< F"Excution dun instruction lmentaire. On rappelle ici, partir dun exemple simple, le mcanisme de transfert dune donne. L'objectif est de montrer que 4 octets de programme entranent un processus assez complexe. ]NI' #HA linstant initial, le compteur de programme contient la valeur AD. Les diffrentOIMes squences composant cette manipulation de donnes sont :(Oq% H`I% H La valeur AD est sortie sur le bus dadresse alors que la ligne R/W est ltat logique 1.q& #H Cette adresse tant en ROM, celle-ci prsente sur ses sorties de donnes la valeur $96. Lunit centrale la lit et la place dans un tampon. (Ձ% H^93% rH Le compteur de programme est incrment dune unit.(Ձ[% H3B& H Ladresse (AD+1) tant prsente sur le bus dadresse, la valeur $10 est acquise par le bus de donnes. Cette valeur, largie 16 bits ($0010) est transfre dans le compteur de programme.([j% HBF& mH La valeur $0010 est prsente sur le bus dadresse. La ligne RW est toujours 1. Ladresse tant en RAM, celle-ci place sur ses sorties de donnes le contenu de ladresse $0010.(jn% HV1FĄ% bH La donne est charge dans laccumulateur A.(n% HZĄk% H Le compteur de programmes est incrment dune unit : il contient maintenant (AD+2).(% Hwk/% H La ROM renvoie maintenant la valeur $97. Cette donne est stocke dans un tampon et utilise par lunit centrale.(W% HkF/†% H PC est nouveau incrment : son contenu vaut maintenant (AD+3).(W% Hg†v% H La ROM renvoie la valeur $12. Cette valeur, largie 16 bits, est prsente sur le bus dadresse.(% HvX& )H Loctet contenu dans laccu A est sorti sur le bus de donnes. La ligne R/W passe 0. Le contenu de laccu A est donc crit ladresse $0012.(% HzOX+ &H  Mais comment ces 4 octets (ceux du programme en ROM) ont-ils t gnrs ?Y{( HLe programmeur aurait pu les dterminer en consultant la documentation du constructeur. Il y aurait vu que $96 est le code machine qui demande au P de charger le contenu de ladresse dfinie par loctet suivant ($10) ; cette adresse tant fournie avec seulement 8 bits (adressage direct). Il aurait fait de mme pour les octets $97 et $12.5%  HTexte associU0{% `HIl aurait galement pu crire dans un texte :(-% Hc>% |H Charger loctet dadresse $0010 dans laccumulateur A Y4-% hH Stocker laccumulateur A ladresse $0012. (% HoJ% Hmais cette expression est trop longue, en regard de la tche accomplie.(% Ha< % xHLe constructeur propose donc un rsum de ces 2 phrases :(1% HG x+ &8H ADlda $0010sta $0012 (1% H+xˎ2 2H  Le programmeur sest donc content dcrire ce texte et la confi un programme qui la converti en code machine (les 4 octets). Le programme sappelle un assembleur et, par extension, on dira que ce type de texte est en langage assembleur.(% H9ˎ,1F y,ESymboles. Z# Symboles&,# UZ , (H Un symbole est une chane de caractres qui satisfait aux exigences suivantes : (5% Ha % H Les caractres sont des minuscules, des majuscules, des chiffres ou le soulign ( ' _ ' ) .L'5% NH Les espaces ne sont pas autoriss.[6b% lH Le premier caractre ne peut pas tre un chiffre.(% Hb7& HUn symbole est toujours associ une valeur numrique. Toute rfrence au symbole est une rfrence la valeur numrique associe.. *?H Pour contribuer la lisibilit du programme, le symbole doit tre reprsentatif de la fonction assure par la partie du programme auquel il appartient.:7>( %HLe choix des symboles du programme incombe au programmeur. Il vitera les symboles passe-partout tels que "machin, truc, boucle, toto etc.." . Un symbole peut thoriquement contenir un nombre illimit de caractres, ce qui permet d'accoler plusieurs mots, par exemple :t: DH  LectureCapteursEteindreVoyantSiNecessaire Remarquer le rle des majuscules (lisibilit).drapeau_TDRF(>% Hj=~- *zH Une tiquette est un symbole plac en dbut de ligne. (% He-~ 8 >[HLtiquette marque une position dans le programme, cest dire une adresse mmoire. Ds que l'tiquette est trouve dans le texte-source, l'assembleur lui associe un nombre entier de 16 bits correspondant l'adresse courante, c'est dire l'adresse de l'instruction qui suit l'tiquette. (3% HM( % PHPar exemple, les tiquettes suivantes(3% HP') "NH Sont autorisesSont interdites: ( % H P'p) "NH Initialisation11ereInit G ) "<H DebutInterDebut Inter M$p) "HH Debut_InterDebutd'Inter AE, (*H _123abc123abc< 1  NExpressionsgE2 4H6_Une expression est une combinaison de valeurs entires et de symboles lis par des oprateurs. & )HElle est toujours value de la gauche vers la droite. Aucun niveau de parenthses nest autoris et l'expression ne doit pas contenir d'espaces.(% HqDm- *H Exemples lda 1+3 ; quivaut lda 4X1' bH lda machin+truc m8 >;H  lda 20*3-1/5 ; ((20x3)-1)/5 soit 11 ldd #2** ; charger le double de ;ladresse courante (% HhU+ &HPour mnager la lisibilit, on pourra utiliser des symboles intermdiaires tels que (par exemple) :(}% H<U( (H Produitequ20*3?}( .H SommeequProduit-1V(N. ,PH QuotientequSomme/5lda#Quotient11 5N& Oprateur :\' HSigne dsignant une opration entre deux lments, entre deux valeurs numriques ou entre un symbole et une valeur numrique. & %HLes 4 oprateurs utilisables sont : + - * / correspondant respectivement l'addition, la soustraction, la multiplicatio\ Nn et la division. 1\Q1Q>@ ' 2Elments du langage :LQD VH%EÉ Si une ligne du texte source n'est pas vide et nest pas un commentaire, elle se compose de quatre champs dont certains peuvent tre vides. Le champ Oprande peut contenir plusieurs lments.Exemples : EtiquetteMnmonique Oprande(s)Commentaire)% H Y+_. ,VH Debutlds#$ff ;Pile en RAM)% H :_) ""H Tempoequ*(% H T*>* $TH brclr,x Tempo Masque; 3 oprandes1o1 o- >J+ $a L'Instruction est une chane de 3,4 ou 5 caractres dsignant une action demande au microprocesseur. Ces mnmoniques sont dcrites par le constructeur du microcontrleur.oA5 8H Si la mnmonique contient des majuscules, celles-ci sont converties en minuscules :Les mnmoniques reconnues par lassembleur intgr sont :abaabxabyadcaadcbaddaaddbadddandaaslb]/J. ,^H asldasrasraasrbbccbclrbcsbeqbhsbita\.A. ,\H bitbblebloblsbltbmibnebrnbrsetbsetZ,T. ,XH bsrbvcbvscbaclccliclvcmpacmpbcom\.. ,\H comacombcpdcpxcpydecbdesdexdeyeora\.T . ,\H eorbfdividivincinxinyjmpjsrldaldaa^0j. ,`H ldabldblddlsllslalslblsldlsrlsralsrb^0 . ,`H lsrdmulnoporaoraaorborabpshapshbpshx_1j'. ,bH pshypulapulbrolarolbrorrorarorbrtirts\.. ,\H sbasbcasevstastaastbstabstdstopsts[-'. ,ZH stxsubdswitabtaptbatesttpatsttstaO- 1 2<H txstyswaixgdxxgdyKx 1O x Directives de l'assembleurF-  ' >Directives de l'assembleurAx  F ZH Une directive est un ordre donn lassembleur pour lui faire effectuer une tache ou pour modifier son comportement. La directive n'a donc d'existence que pendant l'assemblage : elle ne dbouche pas sur un code machine.Voici les directives de l'assembleur intgr :Directive "drc" (abrviation de "Direct")Lassembleur utilise ladressage direct. Il est utilis dans la mesure du possible, cest dire si ladresse est infrieure $100. Dans le cas contraire, une erreur est signale. w H  Syntaxe : [] drcExemple ( ces 2 squences sont quivalentes )ldd $102Eldd $102Edrcstb 0stb <0 sta 1sta <1 Le caractre ">" force l'adressage tendu alors que le caractre "<" force l'adressage immdiat. Directive "equ" (abrviation de 'quivalent ')permet dassocier un symbole une valeur numrique.Syntaxe : equ  @} Ȁ#H      exempleregistres equ $1000 ddrcequ registres+7Debutequ *Directive "end"Est tolre mais inactive : cest la fin de fichier qui dlimite la fin du texte. Assure la compatibilit avec d'autres assembleurs.Syntaxe : [Symbole] end Dans cet exemple, la directive "end" ne sert rien car la fin du texte intervient aprs la ligne "end":@- lda #10end7B{ Ā;H   rtsDirective "etd" (abrviation de "Etendu")Lassembleur utilise l'adressage tendu. Ce mode d'adressage est utilis par dfaut. Utiliser la directive "etd" n'a un sens que si l'on a dj utilis la directive "drc".Syntaxe : [Symbole] etdExemple :drcDebut lda 0; gnre 86 00etdlda0;gnre b6 00 00Directive "fcb" (abrviation de 'Fill Constant Byte')%@D^ KH  Dclare une srie de constantes de taille 8 bits.Syntaxe : [Symbole] fcb [,]...exemple : Table fcb 10,valeur,$3f,%11101 []Directive "fcc" (abrviation de 'Fill Constant Character')Dclare une srie de constantes de type caractre ASCII. La chane de caractres ne peut contenir dapostrophe car elle est dlimite par des apostrophes.Contrairement aux assembleurs d'origine amricaine, l'assembleur intgr accepte les minuscules accentues dans les chanes de caractres.:7BFy H     Syntaxe : [Symbole] fcc CaractreAscii[,CaractreAscii]...[,]exemple :Message fcc caractres accentus autoriss [Commentaire]ChaineAZT fcc 'A zro terminal',13,10,0Directive "fdb" (abrviation de 'Fill Double Byte')Dclare une srie de constantes de taille 16 bits.Syntaxe : [Symbole] fdb Expression1[,Expression2]exemple : table16 fdb 0,adresse,$fffe,%1111000011110000 1D%Ic H    Directive "fill"Rempli une zone avec une constante.Syntaxe : [Symbole] fill , [commentaire] dsigne la constante alors que dsigne la taille de la zone en octets.exemples :fill valeur,taillefill $ff,fin-*+1;remplit la zone dlimite par l'adresse courante et l'tiquette 'fin' avec la valeur $ff.Les adresses associes FCB, FCC, FDB, FILL sont toujours en mmoire ROM.!FFKr _H   Directive "include" Insre un texte-source se trouvant sur le disque.Syntaxe [] include [] []Si l'extension du fichier n'est pas indique, l'extension par dfaut ".ASM" est ajoute.Si le chemin de recherche n'est pas indiqu, le fichier est cherch- dans le rpertoire courant.- dans le rpertoire "lib"Exemples include OutSCIinclude OutSCI.asm%IKMz €H    include lib.asmDirective "org" (abrviation de origine )Fixe une (nouvelle) adresse dimplantation du code gnrSyntaxe : [] org [commentaire]exemple : RESETequ -2;soit $fffeVecteur orgRESETfdbDebutProgrammeDirective "page" Conserve pour la compatibilit avec d'autres assembleurs, cette directive n'a aucune action.FKiO~ ʀAH   Directive "rmb" (abrviation de Reserve Memory Byte )Rserve un espace pour y loger des variables.Syntaxe : [] rmb []exemple :Tablermb 10;10 octets pour le tableauxrmb 2 ;2 octets pour la variable xDirective "title" Conserve pour la compatibilit avec d'autres assembleurs, cette directive n'a aucune action.Directive "uses"q%KML fKH  Recense des rfrences externes pour forcer le lieur les incorporer au iO- code objet.Cette directive est ncessaire pour confectionner des librairies d'xcution.Syntaxe : [] uses []exemple :uses OutSCI,InSCI; E/S de caractresQ iO716 7Signes utiliss par l'assembleurL%' JSignes utiliss par l'assembleurl;71 2vHLe signe "#" demande ladressage immdiat Exemple N"=, (DH lda #10; charger 10 dans ac9* $rH  Texteldx #message;adresse de dbut du texte dans X(=Ȃ% HW,+ &XHLe signe "> " force ladressage tendu (ȂG% HT%/ .JH Exemple :lda PortA sta >$10(GÃ% HmX( H Si aucune directive n'est donne l'assembleur Xa11, c'est toujours l'adressage tendu qui est utilis.(Ã% HZ,Xڄ. ,XHLe signe "<" force ladressage direct (% HDڄF- *.H Exemple :lda <10(n% HaF( HEcrire "lda $ff est incorrect et provoque une erreur dassemblage.(n% HY.x+ &\HL'toile * possde trois fonctions(% Hsx>+ &H Elle reprsente ladresse courante, c'est dire l'image du compteur de programme au moment de l'assemblage.vK+ &H Elle dlimite le dbut dun commentaire si elle est place colonne 1[3>( fH Elle reprsente l'oprateur de multiplication(7% HQ%, (JH Exemple :bra*;boucle sans finV07ވ& `H brset data,x masque * ;boucler tant que...a7?* $nH * ceci est une ligne de commentaire ldd 10*valeur(ވg% HI?. ,6HLe Point-Virgule ";" (g؉% H\Y% Hest tolr entre la partie utile de la ligne et le commentaire. Il nest pas obligatoire.(؉% H(Y% HC. ,*HLa virgule "," (% HvK+ &H est un sparateur dans fcb et fdb (Voir les exemples de fcb et fdb.)k@+ &H force ladressage index si elle est suivie de x ou y(% HyE4 8H Exemplelda -1,xlda ,y; quivaut lda 0,ylda 1+4*5,x(% HK 0 06HL'apostrophe " ' " mHv% H dlimite une chane de caractres dans fcc (Voir lexemple de fcc.)M( Í% PH fait rfrence un caractre ASCII)v% H Q#Í=. ,FH Exemple :lda #'0'lda #$30(e% HxP=ݎ( H Ces deux lignes sont identiques car $30 est le code ASCII du caractre '0'.(e% HS"ݎX1 2DH Le caractre 'Dollar' "$" (% Hd9X + &rHM=annonce une valeur numrique exprime en hexadcimal (4% Hv ( HLes lettres ( de A F.) utilises dans la notation hexadcimale sont indiffremment minuscules ou majuscules.(4% H("% HJ7 >HM=Le caractre '%' annonce une valeur numrique exprime en binaire("% Hd3/1 2fH Exemples :lda #%00000001lda #$01lda #1(W% HJ%/% JH* Ces trois lignes sont identiques(W% Hm[% HSi un caractre non autoris est rencontr dans l'criture d'un nombre, le nombre est considr comme nul.a<% xHAinsi, les nombres suivants sont nuls pour l'assembleur :J[1 22H%012$100X123_5(.% HkC( HLa notation octale nest pas permise avec lassembleur intgr.(.% H(% He1 2H㆞N.Le point d'interrogation '?' plac devant un symbole transforme celui-ci en rfrence externe.(% He:. ,HSeuls les oprandes des branchements et sauts absolus sont autoriss comme rfrences externes.(b% H]:3 6H Exemple:jsr?OutSCI;sortir le contenu de A sur SCIjmp?StartMon;retour au moniteur(b% H(B% H(j% Hg9B. ,rHL'espace et le caractre <TAB> sont des dlimiteurs(j% HyTr% HIls permettent de sparer les diffrents champs ainsi que les lments d'un champ)% H 1r1 /a:-' t Une Variable est une portion de la mmoire RAM qui est/8 > - Rserve en utilisant la directive RMB- Nomme en utilisant une tiquette.Elle est caractrise par son nom, sa taille et son adresse.ExemplesResultat RMB 2Tableau RMB LongueurTable1-`1 `\/* $Un oprande est un symbole ou une valeur numrique plac la suite de la mnmonique. `- (Le nombre et la taille des oprandes est dfini pour chaque mnmonique et pour le mode dadressage requis."ldx #$0001" est plus lisible que "ldx #1" (Le programmeur rappelle que X contient deux octets).712Erreur:X# .Erreurs d'assemblage9W |   Message 1 :"Ce symbole est inconnu : "Lassembleur scrute la table des symboles et ne trouve pas celui auquel vous faites rfrence. Il n'a pas t dclar sous forme d'une tiquette ou l'aide de la directive "equ".Message 2: "Branchement relatif trop long "La diffrence entre ladresse de destination et ladresse courante sort de lintervalle [-128..+127] ( un octet sign)Message 3 :"Adresse trop grande () en adressage direct" #Xe }   Linstruction dcrite par la mnmonique attend un octet mais loprande est suprieur $ff.Message 4 : "Caractre " " absent dans fcc... La chane de caractres dcrite avec la directive fcc nest pas dlimite par des apostrophes.Message 5 : "Mnmonique inconnue : " Le mot utilis ne correspond pas une mnmonique reconnue par l'assembleur.Message 6: " Ce symbole est dj dfini : "X ~K  Le symbole dclar figure dj dans la table des symboles.Message 7: " Une ligne ne peut commencer par " Le caractre de la premire colonne ne peut tre que : un espace ou une tabulation une lettre minuscule ou majuscule un soulign " _ " une toileMessage 8: "Fichier non trouv dans la directive "include".Le nom ou le chemin d'accs au fichier n'est pas correct.11tH$6$ HValeurs numriques en assembleurP-# ZLes nombres sont des entiers compris entre^61 2H  0 et 65535 pour les quantits non signes-32768 et +32767 pour les quantits signes.(=% HJ%% JH3 reprsentations sont acceptes :=t; DeReprsentation dcimale: [] <1 5 chiffres>Reprsentation Hexadcimale : '$' <1 4 chiffres ou lettres>Reprsentation binaire : '%' <1 16 chiffres>11^7t' n Une Application se compose de 5 textes au maximum :&)# D VP-G'- Texte source Assembleur , C ou Pascal: c'est le texte saisi au clavier.- Texte source prpar (langage C uniquement) : Les commentaires sont supprims, les dfinitions sont rsolues..- Texte assembleur issu du compilateur (langage C uniquement)- Listing : les adresses et les codes objet sont insrs dans le texte-source.- Trame S1S9 : Elle contient les codes tlcharger.1)*1* M&w' LLe Listing est compos de 8 champs&*# we - (7H1. Le numro de la ligne du texte-source2. Les adresses3. Les codes objet gnrs par l'assembleur4. La dure de l'instruction (nombre de cycles)Q* ' TH5 8 : les 4 champs du texte-source.(e  % H3  . , H" > O 1d6O sLa trame S1S9:  * $ Trame S1S9 }O 5 / ,HC'est le texte de sortie utilis pour tlcharger le code objet dans le microcontrleur. C'est toujours un texte imprimable et standard pouvant tre utilis par de nombreux outils. Outre les donnes du code objet, il contient les adresses d'implantation du code et des octets de vrification (Signature).Chaque ligne contient 5 champs :ChampNombre deRemarquescaractres  F ZH Type2Toujours S1 ou S9 :S1 si la ligne contient des donnes ou du code et S9 si la ligne contient une adresse d'excution.p5  : DH Longueur2Nombre de paires de caractres dans la ligne en excluant les champs "type" et "longueur" k; 0 0vH Adresse4Adresse de la premire donne sur 2 octets.\, {0 0XH Donnes1..30soit 2 60 caractres. s(: DH Signature2C'est l'octet de poids faible du complment 1 de la somme : longueur + adresse +donnes.({P% Hd(( HEn gnral, toutes les lignes commencent par "S1" sauf la dernire qui, elle, commence par "S9".(P@% H@ ?O@% 4HExemple de trame S1S9 :(@w@% Hd?O@@% ~H S11CE000CEE0728D337C1004F610044F8D3ACEE0878D257F1007F61003EDd?w@?A% ~H S11CE0194F8D2CCEE09C8D177A10077C1003F610034F8D1B093D26FCCE9Ed?@A% ~H S11CE032E0B48D0220C8E600270B7D102E2AFBF7102F0820F1398F4F3632d??AB% ~H S11CE04B8FCE000202CB30C1392302CB27378C000026ED335D270A7D1027d?AkB% ~H S11CE0642E2AFBF7102F20F2CEE0B18DC739536F72746965207375722008d?BB% ~H S11CE07D706F72742042203A0900456E747282652073757220706F72741Dd?kB3C% ~H S11CE0962043203A0900536F727469652073757220706F72742043203A15@BsC% 6H S10AE0AF09000A0D000C003A63CC( H S903E000FC(sCC% HM(CD% PHEn lisant la premire ligne on voit :O*CmD% TH Que c'est une ligne de donnes ("S1")M(DD% PH Qu'elle contient $1c octets utiles W2mDE% dH Que l'adresse de la premire donne est $e000BDSE% :H Que sa signature est $ed(E{E% HM(SEE% PHEn lisant la dernire ligne on voit :Y4{E!F% hH Qu'elle contient une adresse d'excution ("S9")kDEF' H Que cette adresse est celle du premier octet de code : $e000(!FF% H(FF% HuFwH& HPour pouvoir accepter des rfrences externes, l'assembleur Xa11, lorsqu'il en rencontre une, insre son symbole dans la trame S1S9 et entre deux parenthses. La trame n'est alors plus normalise mais ceci est provisoire car le lieur (diteur de liens) calculera la valeur des octets manquants (adresse associe au symbole et signature) et produira une trame normalise.(FH% HsHwHI+ &HPar exemple, voici la trame "essai.s19" en sortie de l'assembleur :(H:I% Hg6II1 2lH S113001086AAB71004731004CE2710BD(delay+3)20F5??<:II* $$H S9030010EC(IJ% H oGItJ( H Remarquer que la signature de la 1re ligne n'a pu tre calcule.(JJ% H V+tJJ+ &VH Voici la mme trame en sortie du lieur(JK% H R-JlK% ZH S113001086AAB71004731004CE2710BD002320F560R-KK% ZH S113002030EE02270A86CC4A4C4A26FB0926F639CA2 lKK% H S9030010EC(KL% H\KL% HLa deuxime ligne correspond au sous-programme "Delay" insr dans la trame par le lieur.uMLM( HLe lieur a recalcul les signatures et la trame de sortie est normalise.(L6M% H(M^M% H@6MM% 6HLe programme Essai.asm :(^MM% H?MN% 4H * clignotant sur port B(M-N% H FNsN' >H PORTB equ $1004 K"-NN) "DH DUREEequ 10000 ;priode 7sNN) "H org $10(NO% H GNdO( >H lda #$AAH OO( @H sta PORTB(dOO% H EO%' <H BOUCO% LE com PORTBM"Or+ &DH ldx #DUREEh?%ڀ) "~H jsr ?delay+3;appel de la fonction DELAYM"r'+ &DH bra BOUCLE5 ڀ\+ &H End('% HE \Ɂ% @HEt le listing correspondant :(% HX,ɁI, (XH 9 1004PORTB equ $1004 V,* $XH 10 2710DUREEequ 10000 ;priode ,I˂% H 11,% H 12D˂;+ &2H 13 0010org $102 m% H 14 [3;ȃ( fH 15 0010 86 AA[ 2 ] lda #$AA_7m'( nH 16 0012 B7 10 04[ 4 ] sta PORTB2 ȃY% H 17 _7'( nH 18 0015 73 10 04[ 6 ] BOUCLE com PORTB`8Y( pH 19 0018 CE 27 10[ 3 ] ldx #DUREEj<. ,xH 20 001B BD ?? ??[ 6 ] jsr ?delay+3]5߅( jH 21 001E 20 F5[ 3 ] bra BOUCLE2 % H 22 b:߅s( tH 23 endA1'nDbogueur-source7s$ &Dbogueur-source].H/ .\LCe processus s'appuie sur le moniteur.c@# Il permet de suivre l'xcution d'un programme en visualisant&HшN jH L݉œ݉Prl- La position de l'instruction en cours dans les texte-sources qui composent l'application.- Les registres CPU- Les registres du microcontrleur- Les variables du programme- Toute zone mmoire.2 & HCommandes(ш+% H;Q pH Pas pas approfondi : (Menu "Mise au point" Raccourci: F7 ou bouton de la barre d'outils) pour excuter l'instruction suivante.Cette commande lance simultanment :- L'instruction suivante dans le programme- Le Timer TOC5 qui envoie une demande d'interruption XIRQ ( broche PA3 relie XIRQ ).Le C termine l'instruction en cours avant de servir l'interruption.Cette technique prsente deux avantages importants :+SZ }H - Le code n'tant pas modifi, on peut, en assembleur, avancer pas pas dans une zone ROM - L'inter XIRQ tant prioritaire, on peut avancer pas pas dans un sous-programme d'interruption.Les rfrences externes ( symboles prcds d'un "?" ) ne sont pas explores pas pas, leur source n'tant pas forcment connue. Pas pas "rapide" : (Menu "Mise au point" Raccourci: F8 pour excuter les instructions ;fD VHsuivantes sans s'arrter dans les sous-programmes.Cette commande est similaire la prcdente mais lorsqu'une instruction d'appel de sous-programme est rencontre (jsr, bsr), le dbogueur place un point d'arret logiciel ( SWI ) l'adresse de retour. On ne peut donc pas utiliser cette commande en ROM.La commande "F8" est donc une "combinaison" des commandes "F7" et "F4" avec une analyse fine du code. Elle est donc plus lente que "F7". S~T vqH Dans une zone sans appel de sous-programme, "F7" est donc prfrablf~se "F8". Cela se ressent surtout en C et en Pascal car une ligne source reprsentequelquefois quelques dizaines de lignes en assembleur.Aller jusqu'au curseur : (Menu "Mise au point" Raccourci: F4 pour xcuter les instructions suivantes jusqu' la ligne du curseur.Le dbugueur dtermine l'adresse lie la ligne courante (celle du curseur) fuR rKH dans le texte source assembleur, C ou Pascal. Il place alors un pointd'arret logiciel ( SWI ) cette adresse. On ne peut donc pas utiliser cette commande en ROM.Continuer librement : (Menu contextuel du dbogueur "Continuer librement" Raccourci: F9 pour poursuivre l'xcution jusqu' la fin du programme. Il n'y a plus d'arrt. L'xcution est libre.La session de mise au point est ferme.>~& 0HPanneau des variables(u% H4. ,H" g+ &HPLes variables globales dclares dans le programme sont automatiquement insres dans la fentre. e+% HEn C ou en Pascal, les variables locales visibles dans un sous-programme sont galement montres. |W% HOn peut ajouter des registres du microcontroleur et des "variables" supplmentaires.U0+% `HLe panneau est redimensionnable en largeur : d% Hfaire glisser le bord en cliquant dessus et en maintenant le bouton gauche de la souris enfonc. (% HlA( HPour faire apparaitre un menu, placer le curseur dans le texte source et cliquer avec le bouton droit. y( HPour ajouter un registre, ouvrir la liste des registres (en bas et droite) et cliquer sur le registre ajouter.. bAl( HPour ajouter une variable, cliquer sur son nom et entrer son nom, son adresse et sa taille. Q,% XHCliquer sur le format d'affichage dsir.lM hoHPour modifier son format d'affichage, cliquer sur le petit icne qui prcde son nom : Ascii Binaire Hexadcimal Sign Unsigned (non sign) et Rel (IEEE 32 bits) .[D( HPour enlever un objet de la liste, cliquer sur son nom et utiliser le bouton "Enlever".(l% H<D% .HLes registres du CPU|lO+ &HSont affichs dans la barre d'tat. Les bits du CCR qui sont un apparaissent , les autres sont remplacs par des "-".(w% H7O1 2H" (w% HI ) "@HConditions de fonctionnement(G% Hb% HLe dbogueur utilise l''interruption Xirq ( NMI ) demande par le timer Toc5 sur la broche PA3.b:G0( tHLa broche PA3 doit donc tre relie la broche XIRQ.  & gHLes variables de ce dbogueur sont aux adresses $0000 et $0001. Le programme ne doit donc utiliser ni le timer Toc5, ni les broches PA3 et XIRQ, ni les deux octets $0000-$0001.}X0% HUn filtre permet d'utiliser le dbogueur avec un programme pilotant la liaison srie.|W % HOn peut donc ouvrir une fentre de communication srie au cours de la mise au point.(*% HoJ% HOn peut aussi ouvrir la fentre "mmoire" au cours de la mise au point.a<* % xHEn mode "Simulation", on peut modifier les registres CPU. s)5% H }X % HEn mode Bootstrap, la pile ne doit pas craser la zne des pseudo-vecteurs ($C4-$FF).(5% Ha<;% xHLes texte-sources doivent tre disponibles sur le disque.(c% HD;% >HEnregistrement d'une session(c% HtOC% HDans le menu contextuel (bouton droit), cliquer sur "Groupe d'instructions".& HOn peut alors xcuter plusieurs instructions en crant un fichier-texte qui dcrit l'volution des registres et des variables.aCn" On peut entrer le nombre d'instructions xcuter ou cliquer sur la dernire ligne xcuter.11=I"n' DRegistres de l'unit centrale &# /=+ & " 1n1dn C=$ >Registres du microcontroleurO(n' PLes seuls registres reconnus sont :DD* $4HPORTA$1000PIOC$1002E* $6HPORTC$1003PORTB$1004;D) "$HPORTCTL$1005D* $4HDDRC$1007PORTD$1008DL* $4HDDRD$1009PORTE$100aD* $4H CFORC$100bOC1M$100cCL* $2H OC1D$100dTCNT$100eC* $2H TIC1$1010TIC2$1012CY* $2H TIC3$1014TOC1$1016C* $2H TOC2$1018TOC3$101aCY* $2H TOC4$101cTOC5$101eE$* $6H TCTL1$1020TCTL2$1021Ei* $6H TMSK1$1022TFLG1$1023E$* $6H TMSK2$1024TFLG2$1025Ei* $6H PACTL$1026PACNT$1027C6 * $2HSPCR$1028SPSR$1029Cy * $2HSPDR$102aBAUD$102bE6  * $6HSCCR1$102cSCCR2$102dCy  * $2HSCSR$102eSCDR$102fD E * $4H ADCTL$1030ADR1$1031C  * $2H ADR2$1032ADR3$10334 E  ' H ADR4$1034G  * $:HOPTION$1039COPRST$103aE H * $6HPPROG$103bHPRIO$103cD  * $4HINIT$103dTEST1$103e6H  ' HCONFIG$103fF  * $8HCSSTRH$105CCSCTL$105DG O * $:HCSGADR$105ECSGSIZ$105F) x & H)O  & HKx  1h  zDManipulation de la mmoireC / % <Manipulation de la mmoireo+ D VY "  Pour accder la mmoire, cliquer sur le bouton correspondant de la barre d'outils ou dans le menu "mise au point". Pour crire une nouvelle valeur en Hexadcimal, cliquer sur la case correspondante. Pour crire une chaine de caractres, cliquer sur la zone ASCII. On peut lire et crire des valeurs en mmoire durant une session de mise au point.Pour changer l'adresse de base entrer sa valeur dans le champ "Adresse"Pour modifier la donne associe, entrer sa valeur en Hexadcimal, en dcimal ou en binaire dans le champ correspondant .3/ AR rUn timer perA met de relire la mmoire priodiquement.Les octets utiliss par la pile peuvent tre surveills pendant une session de mise au point.Dans la zone programme, cliquer sur un octet montre la ligne correspondante dans le texte source.En mode simulation, modifier une entre provoque la mise jour de la fentre mmoire.Depuis le menu contextuel, on peut Sauvegarder la page dans un fichier Cette possibilit est utile pour faire des comparaisons.. D9 @ Remplir la page (256 octets) avec $00 ou $FF Attention de ne pas craser registres ou vecteurs d'interruption. Cette fonction est inaccessible durant une session de mise au point ( debug ) .Aprs une criture, toute la zone montre l'cran est relue. Dans certains cas, un message d'erreur peut tre renvoy si la valeur lue est diffrente de la valeur crite. Il faut cependant noter qu'une criture sur un registre possdant des bits non 'lisibles' (exemple: le port A) n'est pasHASD) ">une 'fausse manoeuvre'. ' DzD$ DSDD1'fD`LRfrences externes>zDD' . Rfrences externes&D"E# DG9 @YH'Les rfrences externes sont des symboles qui ne sont dclars dans aucun des textes-source.L'assembleur ne peut donc pas leur associer une valeur.Il place donc ces symboles dans la trame S1S9 entre parenthses.C'est l'diteur de liens qui leur affectera la valeur correspondante.Voici quelques routines fournies en assembleur (pour les fonctions C, se reporter l'aide du langage C): TEMPO10Temporisation 10 msJ""EQG( DHTEMPO100Temporisation 100 msCGG& :HTEMPO1K Temporisation 1 sDQGG& <HTEMPO10KTemporisation 10 sU/G-H& ^HTEMPOXTemporisation variable (dure dans X)(GUH% HN(-HH& PHOUTSCI Sortie d'un caractre sur SCIO)UHH& RHALALIGNEEnvoi du caractre NL sur SCIc=HUI& zHTABULESortie d'un entier sur SCI. Sortie d'une tabulationY3HI& fHOUTSTRSortie d'une chaine de caractres sur SCIa;UIJ& vHOUTDECSortie d'un entier sur SCI. Affichage en dcimal c=IrJ& zHOUTBIN Sortie d'un entier sur SCI. Affichage en binaire ]7JJ& nHOUTHEXSortie d'un entier sur SCI. Affichage en Hexa(rJJ% HS-JJK& ZHINSCI Entre d'un caractre sur SCI (JrK% HJ$JKK& HHLEN Longueur d'une chaineT.rKL& \HTERMINETerminaison standard d'un programme(K8L% H(L`L% H18LL1LNI"`LL' D Liaison srielle avec la carte&LM# LN6 :" Elle se fait au moyen d'un cordon non crois quip de 2 fiches DB9 (Mle et femelle).Un cordon non crois standard du commerce peut tre utilis si les 2 connexions (1-6 et 4-8) sont ralises sur la carte. GMVN1VN-Dans le menu OUTILS...ANN' 4 Dans le menu OUTILS...VNO2 2se trouvent diffrentes ressources :Assistant d'critureIl permet de retrouver rapidement des instructions ou des squences correspondant une action donne, avec un mode d'adressage donn.hNNH ^H" - Choisir l'action- Choisir le modONNe d'adressage- Cliquer sur un objet ( Registre, symbole...) : si l'action ne reqiert pas d'autre information, l'instruction produite apparait dans l'diteur de texte. Dans le cas contraire,- Cliquer sur un deuxme objet "combiner" au premier. L'instruction est alors produite.- La faire glisser dans le texte-source l'endroit dsir.Crer une table Cette fonction permet de gnrer un tableau de valeurs partir d'une quation. Choisir le nombre N de points. Entrer la loi de variation de la variable x en fonction de l'index n. Entrer la fonction Y(x). O? LH" Evaluer une expression Aide pour la conversion numrique des nombres entiers et l'valuation de la partie entire d'un expression.H"Nc& DHProgrammer l'Eprom ou l'EEprom (% HcT; DH"  Permet d'implanter en RAM, EEPROM ou EPROM un programme dont le code objet (.S19) est disponible sur le disque. La source n'est pas utilise pour cette opration. On peut vrifier que toutes les adresses rfrences dans la trame S1-S9 sont bien en Eprom ou en EEprom. La programmation de l'Eprom n'est possible que sur un 68HC711. On peut aussi examiner la mmoire et lancer le programme.(|% HFT…) ":HDsassembler un programme(|% H>…(, &%H On peut retrouver la source d'un programme partir de son code objet en mmoire dans le microcontrleur ou sous forme d'une trame S1S9. Les tiquettes sont constitues du caractre "_" suivi de l'adresse associe exprime en hexadcimal. Il faut les renommer en utilisant la fonction "Remplacer" du menu "Edition". Le contenu de la mmoire (code objet) est conserv en commentaire. La dtection des zones occupes par des constantes n'est pas entirement automatique. Il faut donc dclencher manuellement leur implantation.(P% H=(( *HMarche suivre :(P% He=( zHLancer le dsassembleur par le menu "Outils/dsassembler"zF4 6HConstruire le texte source par le menu "Texte/construire"Choisir entre "Mmoire C" et "trame S1S9". Le texte est alors construit sans tenir compte des zones de constantes (nombres, texte).Reprer les zones de constantes: Elles ne se terminent pas par RTS, BRA, JMP...Quand une zone est repre, cliquer sur son dbut (tiquette) . L'tiquette est recopie dans le champ "Symbole". Choisir ensuite depuis le menu "texte" entre "constante" , s'il n'y a pas de caractres imprimables ou "Texte" dans le cas contraire. Le bloc est alors modifi jusqu' l'tiquette suivante.+B RHSauver le travail accompli : Deux fichiers peuvent tre crs (Menu "Fichier"):- Le texte-source ASM- Les donnes internes au dsassembleur : DESASS.DATSi le travail n'est pas termin, on pourra ainsi le reprendre plus tard.Manipuler les symboles :- Pour trouver la rfrence une tiquette, cliquer sur cette tiquette puis dans le menu "symboles/Trouver".- Pour renommer un symbole, - Cliquer sur celui-ci dans le texte source : il apparait dans le champ "symboles". < FH - Entrer le nouveau nom dans le champ "symboles"- Cliquer dans le menu "Symboles/renommer" pour changer toutes les occurences du symbole.- Enlever un symbole : Il arrive que le dsassembleur gnre des symboles parasites (1) (donc inutiles) . Pour mnager la lisibilit du texte, il vaut mieux les enlever. Pour l'enlever, cliquer sur le symbole puis dans le menu "Symboles/Enlever". Protection : On ne peut enlever un symbole que s'il n'intervient qu'une seule fois dans le texte. N!-4 6H (1) Une tiquette parasite est gnre quand, dans une zone de constantes, un groupe de constantes ressemble une rfrence une adresse du programme. ( Par dfaut, le dsassembleur voit l'ensemble comme du code xcutable.)6 c1 fc Lieur. -%  Lieur~Dc: B'㆞N.1mL'diteur de liens est un maillon important de la chaine de dveloppement.Il scrute la trame S1S9 . S'il trouve une rfrence externe (dont la valeur n'est pas encore connue), il cherche sa valeur dans une liste de symboles prdfinis. S'il la trouve, il remplace le symbole par sa valeur.S'il ne la trouve pas,IX+ $=H- il recherche le code correspondant dans la bibliothque (dossiers "librairie\assembleur" et "librairie\fonctions C"). - Il place ensuite la trame correspondante la suite de celle issue du texte source. - Il dtermine son adresse et l'implante dans la trame du texte source. q( H Cette procdure est rcursive : un sous-programme externe peut, lui aussi, contenir des rfrences externes. (X% He% H Une rfrence externe est toujours sur 16 bits car l'assembleur ne connat pas la valeur associe.{C% H Ecrire, par exemple : " lda iHL'oprande est l'adresse ( sur deux octets ) de la donne.Exlda$0010;charge le contenu de l'adresse $0010 dans Aldx0;charge le contenu des adresses 0 et 1 dans X )  & H@ 5 ) ".H3. Adressage direct N; DHL'oprande est l'adresse ( sur un octet ) de la donne.Le signe " < " force l'adressage direct. Exlda<$0010;charge le contenu de l'adresse $0010 dans Aldx<0;charge le contenu des adresses 0 et 1 dans X )5 w& HO&N) "LH4. Adressage implicite ou inhrentd1w*3 6bHPas d'oprande.Ex.ABA,NOP,CLI etc...)S& H@*) ".H5. Adressage index1S@6 :HL'adresse effective est la somme algbrique du cont@` enu d'un registre d'index et d'un octet sign de dcalage.Exlda 0,x;charger dans A le contenu de l'adresse se trouvant dans Xlda-3,y;charger dans A le contenu de l'adresse ( [Y] - 3 ).@) " H A@?A) "0H6. Adressage relatif@RB= HHL'oprande est un octet sign de dcalage par rapport l'adresse courante.ExAd1braAd2 ; La diffrence Ad2-Ad1 est calcule par l'assembleur.BrclrPorta,x Ad3 1 ;Ad3 est un octet de dcalage.1?AB1rBEBRBB' 6 Conseils d'optimisationBmC& Si le programme ne comporte pas d'erreur, l'assembleur peut produire une liste de conseils pour optimiser le programme, cd :uJBC+ &H - Rduire la taille du code objet.- Rendre l'xcution plus rapide.(mC D% H.C8E& HLe panneau de conseils se trouve dans la partie basse de la fentre d'dition. Il est redimensionnable en cliquant sur son bord suprieur et en faisant glisser le curseur de la souris. En cliquant sur un conseil, on surligne la ligne du texte source modifier.^ DE. ,Ce processus peut tre inhib depuis le menu Options / Programme, rubrique Optimisation.18EE1EGE!E:F$ B Rfrence externes prdfinies^EG- (" Cette liste vous permet d'adapter les programmes qui utilisent ces rfrences un autre matriel. Elle est modifiable depuis le menu "Options / Programmes ". Elle conditionne le comportement du lieur. Une bonne habitude consiste adopter, comme premier caractre du symbole, le soulign " _ ". Ceci vite d'utiliser le mme symbole en interne.D:F H1c HUJMatriel utilisable<GEH% . Matriel utilisableN# HH+ &F En Assembleur (DevMic11as) :~EHUJD VHY+ m'- Cartes minimales HC11[F]min de l'association SoFt - Systme Micro11 de l'association SoFt- Toute carte fonctionnant en mode bootstrap ou en mode tendu et quipe d'une interface srie ( sur SCI ).En Assembleur, C et Pascal (Devmic11acps ) :- Cartes HC1124 , HC1124p et HC11F32 de l'association SoFt- Emulateur dcrit dans la revue "Elektor" de fvrier 19971HJ1!J+K7UJJ$ & Association SoFtnGJ+K' Quartier Bancel26400 Allexhttp://members.aol.com/assoft/home.htm1J\K1"\K!L+K!L7 <Revue ELEKTOR21/23 rue des ARDENNESBP 1156875920 PARIS cedex 19Matriel disponible chezPUBLITRONICBP 1156475920 PARIS cedex 199\KZL1eÄ#ZLLLderoulemY2!LL' d Droulement simplifi d'une session de travail4ZLL/ . "CL*M1kc$*MCriteres matriels;LeM% ,Critres matriels~Z*MM$ Pour tre utilisable avec DevMic, une carte doit avoir les caractristiques suivantes :&eM N# P(MYN( P!1. Fonctionnement en mode BootstrapD Nk H!Le microcontrleur utilis doit tre : MC68HC11A1 ou E1 ou E9 ou F1 ou 711E9 ou 811E2 L'EEProm doit tre disponible $B600 (A1, E1, E9, 711E9 ) ou $FE00 ( F1 ) ou $F800 ( 811E2 )La liaison srie utilise les broches RXD et TXDLes broches PA3 et XIRQ sont relies2. Fonctionnement en moYNLde MonochipLe microcontrleur utilis doit tre : MC68HC11F1 ou ou HC811E2 L'EEProm doit tre disponible $FE00 ( F1 ) ou $F800 ( 811E2 ) ?YNb H!La liaison srie utilise les broches RXD et TXDLes broches PA3 et XIRQ sont reliesLa carte peut dmarrer en mode bootstrap ( passage en mode monochip par logiciel ).3. Fonctionnement en mode tenduLe microcontrleur utilis doit tre : MC68HC11A1 ou E1 ou E9 ou F1 ou 711E9 ou 811E2 L'EEProm doit tre disponible.La RAM ( au moins 8 ko ) ou l'EEProm externe doit pouvoir accueillir les vecteurs d'interruption (ou une table de redirection) ! J bHLet ventuellement le moniteur.La liaison srie utilise les broches RXD et TXDLes broches PA3 et XIRQ sont reliesLa carte peut dmarrer en mode bootstrap ( passage en mode tendu par logiciel ).m% HConsulter les schmas fournis dans la documentation. Le cordon de liaison srie doit tre cbl comme suit( Ä% H.+ &" 9Ä*1%*dMoniteur:d# .Moniteur de DevMic11k*( C'est un petit programme rsidant en EEProm ou tlcharg en RAM qui assure les fonctions suivantes :d< F H- Tlchargement des programmes- Lancement des programmes- Visualisation et modification de la mmoire- Programmation de l'EEProm externe ( HC11F1 )- Avance pas pas avec lecture des registres et des variables, placement de points d'arret etc...Selon les fonctions, il peut consommer jusqu' 40 octets de pile.Sa taille varie selon le type et le mode de fonctionnement du microcontroleur utilis :Moniteur en EEpromIl est implant B600 (A1,E1,E9,711E9) , F800 (F1) ou FE00 (811E2) . Lors du RESET, l'ordinateur envoie un BREAK pour forcer le dmarrage au dbut de l'EEProm : le moniteur prend le fonctionnement en charge."|ۊ H"#"$"#""#"En mode EtenduMicrocontroleurA1E1,E9811E2F1711E9Adresse dbutb600b600f800fe00b600Taille380 380 378 512 380En Mode BootstrapMicrocontroleurA1E1,E9811E2F1711E9Adresse dbutb600b600f800fe00b600Taille355355 444 355 355 En mode Mono ChipMicrocontroleur811E2F1Adresse dbutf80001006= HH"Taille418 388Placer un programme en EEpromLa prsence de L'EEprom en fin d'espace adressable sur HC811E2 et HC11F1 permet de rendre les vecteurs d'interruption non volatiles. Ceci permet de rendre la carte autonome.Il y a cependant une difficult :Lorsque l'EEprom est en cours de programmation, la lecture n'est pas possible : on ne peut donc pas crire en EEprom depuis le moniteur rsidant lui-mme en EEProm.Si l'on tente de placer un programme en EEprom ( cot du moniteur ) :ۊK dsH%& - En mode Bootstrap, - Avec HC811E2, DevMic11 cre une structure de programmation dans la pile ( 20 octets ) . Cette structure est ensuite xcute ( en RAM ) pour pouvoir programmer l'EEProm. Le moniteur est galement capable de dmarrer la carte en autonome . ( 6 )- Avec HC11A1, E1, E9, le moniteur occupe presque toute l'EEProm; DevMic11as lance un message d'erreur si l'on tente d'crire en EEProm depuis le moniteur."CR rH% % - En mode Etendu,Si la carte peut le supporter, ( cartes HC1124M et HC11F32 ) il est possible de remplacer la RAM par une EEPROM de 32 ko ( 28256 )C. Le moniteur gre automatiquement l'criture en EEProm. - En mode Monochip, - Avec HC811E2, DevMic11, comme en mode Bootstrap, utilise la pile pour programmer l'EEprom. Il peut dmarrer la carte en autonome (Single Ship). Les vecteurs d'interruption sont donc les mmes qu'en mode tendu. ( 6 )^: BH- Avec HC11F1, le moniteur est dport en RAM pour librer les 512 octets de l'EEProm interne. Pour pouvoir dmarrer en autonome, le vecteur du RESET doit contenir l'adresse de dbut du programme et la broche MODB doit tre 1.Moniteur dport en RAMPlacer le moniteur en RAM comporte deux avantages :- Le moniteur peut crire directement dans l'EEProm interne.- L'EEProm interne est entirement disponible pour le programme.Placer le moniteur en RAM est possible :Cla [H   - En mode Bootstrap avec un HC11F1 ( 1 ). Le moniteur occupe l'espace $100-$278 en RAM interne. ses pseudo-vecteurs d'inter ( SCI, XIRQ, SWI ) sont galement en RAM interne.- En mode Monochip avec un HC11F1 ( 1 ). Le moniteur occupe l'espace $100-$282 en RAM interne. ses vecteurs d'interruption sont en EEProm interne.- En mode tendu - avec un HC811E2 ( 2 ) : moniteur en RAM externe $F600-$F77F^L fH   - avec un HC11F1 ( 3 ) : moniteur en RAM interne $0100-$02A7 Les vecteurs d'inter sont en EEProm. ( 4 )( 5 )Le moniteur est tlcharg lors de chaque RESET de la carte.Ses variables ne sont plus en dbut de RAM interne, ce qui libre les adresses $0000 et $0001.Un programme peut occuper la fois l'EEProm et une partie de la RAM.( 5 )Pour placer le moniteur en RAM, cocher la case correspondante du menu "Options / Matriel ".j!lI `CH (1) Les autres types de 68HC11 n'ont pas assez de RAM interne pour acceuillir le moniteur.(2) 2 ko en EEprom pour le programme, les constantes et les vecteurs d'inter.(3) 0.5 ko en EEprom pour le programme, les constantes et les vecteurs d'inter.(4) La carte devient autonome et doit pouvoir dmarrer en mode single-chip.(5) Avec la carte 11F32, il est possible de remplacer la RAM externe (62256) par une EEProm de 32 ko (28256). Le moniteur gre automatiquement l'criture en EEProm. L'utilisateur voit une EEProm de 32,5 ko.0( H (6) Si l'ordinateur n'est pas dtect, le moniteur fait ventuellement passer le C en mode "Single Chip" et lance le programme l'adresse contenue dans le vecteur "Reset" (FFFE, FFFF) . Consulter les exemples ..\Mode monochip\"ClignotB8..." et "ClignotAF..."11&'HArialCourier New $   ;2&${( gf"C!%Ն  ن '#Äy; 6 &c .ن;;Äc'Ä6 ;'Äfcfy /&;)F24+I+____________Sommaire_____________Aspect fonctionnelAssembleurassocier Audit de codeBullesCalculCartesCritres pour raliser, utiliser une carte Dbogueur intgr$Droulement d'une session de travail(Directives de l'assembleur,Ecriture Mmoire0Editeur4Editeur de liens8Edition<Edition des liens@EmulateurDErreurs d'assemblageHEtiquettesLExpressionsPImagesTInformationXLecture Mmoire\Lieur`MatrieldMenu OUTILShMise au point des programmeslModes d'adressagepOprationstOrganigramme de travailxorganigrammes|OutilsPrsentationRfrences externesRle de l'assembleurSaisie du texte-sourceschmasSignes de l'assembleurSuivi d'xcutionSymbolesTrame S1S9Valeurs numriques/&;)Lz''SommairePrsentation de DevMicEditeur multi-textesنAssembleur intgryFonctionASM SymbolesExpressionsDirectives de l'assembleurSignes utiliss par l'assembleur6Erreur.La trame S1S9Dbogueur-source'Manipulation de la mmoireRfrences externesgfDans le menu OUTILS...LieurImages associes aux programmes;Bulles d'informationModes d'adressageCÄMatriel utilisable{ՆcderoulemCriteres matriels( Moniteur~ /&;)L4&&4!$ÄE8yf;UD[,e6%EcLœ4d ᑈ.+KJ"Y+{L( ='gNXfP-G1mCd%m'Ն5z+N.g7fG<M=PߒQنT6_}}dnHk rl'wnlpʦ``@""R"RRNLLLLLLLLLLLLLLJjHj&eUGn#ePGh kKKhcIGlcFGnkEIooBKqsALqu?Mry>Mr{>Mr}=Mr~<M <B ;B $;B $:  :  :   :    1  r,     ,,(  -D  %   r "  G Cr    9  CrMrMrM'M'M  'M M  M!L#K%I1"&G"(G2,~+.r},,r{/*ryIDquICqsJCooJCnkJClcKDhcK@hkK>n!eL:j$eL 8 j$L 5 $L 4 #M 4 #L6  "M;  "Q<  "Q;  !R: !t>9 !t<8  x<7  r;6 r:5 v94x93y81{80{8/|8.|8-|8,|8+ |8)!|8("|8'#|8&$|9%%|9$&X(|9#'X%9"(^$9!)X"9 *X! 9+\  9,`   9-b 9.c9/eC"90e291g|)2g| )3h|)4h|*5h| *6h|*7h|+8h|9:h|7; & | , *v(|* (v({* '|{ * 'vy + &vx,&zv='~r>'r?'Z@(XB(  WD)    6*Nh6*Nh5+Nh 4,h 4-h 2- h 1 -  * - * -  !) -!( ,!' ,!& ,"),+,3 + , 3" * ,h# * ,h#    ,h!! ,h$ ,h(, h(, h!.,h2,h4,h7+g9+< %g   :+< %e ;+e=+c=+b>+H:` ?+G*\ ?+L*X @+X @+^! @+X!@+X$@+ @+ @+'@*'@* ?'@* ?'@* _'@*'@*Y0@*Y-@+_,@+Y* 0+Y) 1,]( 1-~a( 1*zc' 1(vd& # vf& |f&$ vh%#v60%  "80% !80%    %  %   %    %     %A%!  % A%(  %  A%(  %  9 %($#%. : %)$#%@)i%@*i%@*i%@*i%@+i%@+i @+@,@,@,  @,  @-'@- "@-@-08 @- 8@*lL@)li @'pi @&li%@%li%?%ni%?$p%>$q&=$r &=$r &;$r':$r'9$r(7$r)4$rC*2$r@(.$i'($i%($h%&$ h#$$f! #"$f! *%$d!*%$c +%$ -a&+$$ )]',$$rY'-$$rY'-#$r_(.#$rY)/"$rY+0"$r8"$r8$r:#q;#p<$n:$l:%l:&96<'74= )63?]KA\KB[KDYKEXKGV LHU LJTLr0o.SLr/o,RLv-*VLr,)ULr+)ULv)(TLx)(TMz''RN{''RT}%&QU}%&PU~$&OV~$&OV~$&NW~$&MW$+,$&LX&*,$&KX&*,$&JY$)*&IY$))&GZ!!$))'BE!!$))'CF$)*'EG )-'  ))' )*' 67< E'64 < ='~ '~'~*'d&f0'c e/'h j/''('   '''   (,(     (,(   $)'(       $)'(     $*'(  $*(#   ;%$*%?  5%$+&?    b$' 5- ~$   "- ~$!~$6 ~$6 ~$D~$D}%E}%E{'Fz'Fx)Gv*I r,J r.L v0Nr4Q r8U LLLLLLLLLLLLLLLLMRR"R""yKpKlpt\ʦ``@""=";;7555555555Y@Y<a:Y8Y7_6c5 g3 i3 l2 n1 p0 q0 r/ t/t.v.vO?wO=S<M;M:  Q9 S9 T8V8V8W8$W8$W8 #W8vW8vW8tW8tW8r@8 q@8 p@8 n   8 m  8 i     8 g    8 c 6_    2Y!  .Y"  )a$ G > %Y& 9  ? "Y*W (W (W 'W&W&W%W$W $W #W "W "V !V!T S QM M!ig"fe$gd                         Y Y _Y Y _  a    e    f    h   i   j  k l l m m m m m   3W  0X}   .r|   ,lz  *ly )rx  (vw  'xv(-&zu    %|t57%~um$tm$tm#sm#sm"s r r r  r r ss s -  s %smsm smsm sm sm!s!s!s!s!s!s !s!s!s$!s !sm!sm!     sm!  sm! sm! sl"  sl"   sk"   sj     ri   nh   if   g e d a a _  ^ Y  \ Y   c_bYaY`__^~^} ]| ]{ [{ [zZyZyZx Yw!Xw!Xv"Wv"Wu#Vu#Ut$Ut$Us%Us%Ts%Sr&Sr'Rr'Rq(Rq)Qq)Pq*~Pp+|Pp,zOp-xOl.vOl*r Nm,l!Mm-l"Lm0r$Lm2l&Ln6l*KnMKnNJnOJnOInPInPH oQH pQG!#MFu%#!!dBv$ "h?x'"b=#b;#f9 $h9"%i7#%k7%&k6%'l6&(l6&(l6&)l6&*l6&+l6&,l6&-l6&.L) D` /L( D` 0L'D` 1  ') (2  ' ( '4   ' '&5   (' -7  :' - 9  8' -;  , ' -? ' '&A \'(! 'A  R') (AQ' &Al' &Al6&Al6&Al6&Al6&Al6&Al6&Al6&Al6&Al6&Ak6%Ak7%Bi7#Bh9"Cf: Db<Eb>Fh@"GdBH!dFJ55555555555555556;;";""CClp` ~ʦ``@""1"11-++++++++++++++_df]dd[hcZbbYbaXf`Xh`Wi_Wk_Vk_Vl_Vl_Vl_Vl_VC B_VCB_VC  B_VC   B_VCB_VC B_VCB_VCB_VC= B_VC=!B_Vl_Vl_Vl_Vpz_Vpz_Vpz_V;<_V;;_V; ;_V; ;_V;<OV; ? PV;;QV;< RV;G R TV;9  R NVlJVlFVlCVlAVk ?Vk  <Vi  :Wh  9Wf  7Xb5Yb#4Z25&2[/2(1]01,0 ^. _- `, a+ a* c( c' d& d% e% f$ g# i" k! n  o  pqrsrso p q r s svw uvtu|tvvrwvrxzqy~ryqzq{q|(JL1%KL0#.!- -,- !, ",$,$,%,%-#(9%-   +%-BC%-%.%.%.%.%/ .. %/ .-%/ .-    / .-   / .. 0 .1   0 .-  0 -.   0 . I   0 / A    0    0    1   1   1 01  01   01    01  %1  %1 %1  %1 %1 %1 %) %( %# %  % # % # $ " $ "  "!  !! ~ ! z    v    v  | vv+D+D+E+E*F*F*G*G*G*G)H)H)H)H)G)G)G)F)MO))JO%)HU#)GO!)DO)CS)CW)AY*@Z*?\&e=\#e=^ k<^  c:_  c9_ !k8_"o7_$s6_&u5_ (y4_ -{2_2}1_1~/_1- 0+/ ).!' ."l$-"l  ,#l! +$"*%%  )&( !('  +  _'( ._&) 3_%*8 _$+@_",B_!-0@   .0@   / 0N  0N  2N  3O   5O  6P   8P !   9Q     ;~R_ =}R_@{S_ByT_EuU_ IsV_ NoW_UkY_UcZ_Uc\_Uk]^V!e`^V$ed\Vn\WnZXoYXpWYpSZqO[rO\tU^uO_xOb++++++,11"1""iU`Ulp4"xʦ**,+.112/133+19366963939.99399999.3?..E/7A39?39E9?999?3??9??99E.?E5CA3EEB:8?9????9?EC@<9EE?E?NJ>8=J9EJ9JF?GJEGGEPEJJEVJE:GOELNJLNTNKCLTURPPPVGO_TVOOYWI]]R[^^[L^YVVYa]a[Maa[]aN[eR]mTfcaiaUdqWqwj\Re_eldYpm[dffadldnfrmfdilairfjpnhnhqolrrtmouxladwalwiwrssrhowrlwluwhqi}vsyuwwwwul|wyjsqgws}{{wznq}z{z~}}x~y}r}y|stzƲƸ®˿ļƹսǹÿͻҽͻ9* 9(                    (   )  @nnnn A A   *   (             9 9( 9) nnnnnnn Z  Y  V  V  V  V OJ V @ ! V @ $ V C # V C " V A! V ?! V E ! V F " k  p   p  p  o  n FJ M 0 !  - / $ ), 1 # V 1" V 0! V 0! V > ! V < " V  V  E   D   E   F OJ  D 9 ! E 8$  (K :#  K :" V 9! V 8! V  8 ! V  9 " V  V  V  V  I   H OJ I 6 !  J 5 $ H 7 #  I 7 "  O 6! O 5! V  5 ! V  6 " V  V  V  V  V  V8 V8 X8 Y8q,q+p /p+ ;+ :, :" 1 ;  1 f g m m 2 F 0 D &] S &^ S &^  R  &^  Q"  0 ^  Q  & ^  R   3  3  3  3 &w  3  &w  w:  &_  Q!  &_  O!  &_  Q!  &m Q/ &] P &] O! 2a O  2b Q  2  3  2  3 &v 2 &w w: &U a &V c! &U d  &V c! &U a &W `! 2j `  2k b  2  3  2  3 &v 2 &w w: &^ c &_ b" &^ d  &_ d  &] c &] b 2a b 2b c    2   3   2   2 &w  3 &w  w:  &\  _   &\  ^  &\  `  &\  `  &[  _  &Z  _  2b  u  2b  e     3    3    3    3    3    w:  &Y  V   &X  U  &X  W  &X  W  &Y  V  &\  U  4X  U  4Y  T   - A  2  3   3    3    w:  G  L!  D J   E L  C L  E K  C  J   "F  J   "E  L!    3    3   A / C 1 ERHSG 5$ 3#9$ 8% 4# 4$ ,P / -Q /u9& =%      "     3  3  3  d  u]]lpB޲ʦ``@""Y"XXTRRRRRRRRRRRvEuEtEtAt?t?t?t?t?t?t?t?t?t?t?t?tRtPtOtQtRtPCPCQCR?s=t= t=6Q7=5Q7=4Q7=4M7=4K7=4K7=4K7=4K7=4K7=4K7=4K7=4K7=4K7=4K7=4K7=4K75q4K74q4K73q4K73m' K'3k& (3k%)3k&*3k(, k    k#$k   kk k k k   -= K   +)K*(K))K3(*K3(+K3+*K3+*K3*)K3))K3()K3(*K3(+K3),K3+?K3kK3kL3k*&3k*&3k*$ 3kFD3kEC3kEC3kDC3kDB3kDB3kCA3kC A3lB&3qB&3qB%3qA%=A$=@$5q@$4qE#3qE#3mE"3kE#3kE$3kEE3kEE3kEE3kEE3kEE3kEE kEE  k+-k,.k,--=W+,U *,U )+U (+U  (+U +*U  +*U 3**U 3))U3()U 3()U3(*U3)+U3+?U$3kU#3kU"3kU #3k  U $3k  U23k "23k !23k 23k23k23k23k23k 23l 23q 23q 23q  24q  U23qU"3mU #3kU$3kU%3kU'3kU 3kU3kU3kU3kU 3kU 3kU 3kU  3kU  3kU3-=U3+*U *)U   ))V(([ (([+([+(*( )) ()  (*(+ ),3+?3k3k3k3k3k3k3k3k3k3k3k3k3kQ3lQ3qQ3qM3qK=K6pK5pK4pK4lK4jK jK jKjKjKjKjKjKjKj K j!j"j4j4j 4,=#$4** #4))$4(()74'((74'('74*)& 74**% K74)+4K74(,4K74'*4K74'(4K74')4K74( *4K74*?4K74j4K74j4K74j4K74j4K74j4K74j4K74j4K7j4K7j4L7j4Q7j4Q8j4Q9j?j?k?p?p?p??=?=?=?=?=?=?=?>@CECECERRRRRRRRRRRRRRRSXX"X""~;u;lp(nʦ3f3333f333ff3fffff3f3f̙3f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙333333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffffff3fffffff3fff̙ffff3fffff3f3333f333ff3fffff3f3f̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3fxdӃ2?}#xD`_$,91>wذ!V0ȈypiQt|HHHHv0v0   v|*   u  }+   t } ,   t } ,  t} +  t }+   t  }/ +   u  |/,HHHHHHv0v0   u |,   t }-   t } -   t } -   u }-  t}-   t}0 *   u |1*HHHHHHv_Lv.1K   ^   ]    \      \     \   \     ]    #3;  ^   $1;H{HHHHHv'v.e    ^$U  1    ]  'U  2   ] ' ] 1    ] ' ]  1    ^'V  1    ] 'U  1    ]  $ # o-1    ^   #$ n,0Hx{HHHHHH'D;+ 7: FL  DN DT DT DN E N  tW d vV dHHHHHHH"+s#%mr VLN   WLP   \LX ZLV   VLN   UM N   Sz}"!T{}!!IkHHHHHH"##%m SRK   SRL    \ SV    Z SU    VRN     US N    Se TeI}HHHHHH"##%m TLL   SLL   XLS   XLT    TLL   S ML  Sz`7.  U{`6. IyHHHHHHHHHHHHHHHHHlp0w      &5{\    /uV#5{\  # 3N5`\# 3N5l \                                                                   !       !  !     !  !         o 0' '   u'** 5#   5# ;   ;  o;# ly ? y <   <`rQE  < `lQ?  6  `lQ?  6  *    -     6  |-    0    6  v-  0    6  @0-    3       C*-    3   6  C$-    3   6  ?$-      6   6  ?$*   3  *t!a-KE6  р?$`lQ? *EEn![-EE6   Ȁ  ?$`lQ? *BBk!X-BE6  €?`lQ? *BBk!X-BE6  Ȁ? `oQB *BBk!9-9E6   Ȁ?  v*BBk!6-'E9  ŀ ? v*BBk!3- E9  €?$v*BB!2!0 - E9  €?$y*B'!'  $!0    -- E<   Ȁ  ?$y** !!$  $!3        --  E?  ?$y*$  !! $!6   --E<  ?$v*  $ $!9    --E9  ?'v*  '    !!H       *-E9  mv* $! *  !H    '-E9  sv*  -!`!B b-E9  y    *  0`!<e-  E9        *$  $3 !3   -  E9         ***6  !3  -  E9        *BBk!3- E9       *BBk!3 - E9    *BBk!X-BE9      *BBk!X-BE9  N*BBk!X-BE9 ^ Bo#*BBk!X-BE9 oe v*HEq!^-HE9 lb v 9   $ v 9     '  v 9      '  v 9           y <   !  $  y 0   '    '   *F  0   $     !   $F  0  $  $   $F  0 R  $F  0 U  F  0 X  F  0 ^   F  0    F  0 ^   F  0 X  F  0 U  F  0  t  $F  0  q  $F  0  $ q  'F  0  ! q 3L  0   q 6  ,1+ B   q 6  /1. *    q 6  &( $  !t 6  1. $ R 3   (( $ U 1% $ X lF R  ^ y    y    ^ y   oe y $ lb y $    ` y $    ] y $  -! ] y '  -!  ] 3   Q  -  $  ` 6       T     !  ] 6 $    `-   x  ! !   ] 6    +%*     ^  $!  ` 6       `'!  a R 6    "'   a U 6 W-` $   a X 3W& $   a ^ y!!   a   y!  $  ^  y    ''3a y  3'3a y6E y3 2>  2>  3 T        9 Q    9`   9".   9W     3"     9 Q s   < W s   y  y  y  y>m] y>g] y>d] y>] y>] y>] y>] y> ] y>   ] y>] yS{n] ySun] ySrn] ySr~N  ] ySr{Nŀ] y* Er!    K ŀ] y'  Hr    K] ?$ Kr K] ?$Z] K] ?$ Z]   K ] ?$  Z Z   K] ߀?$ E ] Kd] ߀?$  H ]      Nd] 耀?$  K ]    Nd] 倀?! o]  Q:]  ?r]  T4] ߀?u] TW   l] ߀?Srn       l]   ?Srn   l] ?Srn     l] ?Srn       l] ?Srn     l] ?Sxn  Z#] y> !90l] y> .] v{>.] yF7>1] 3 S #"4>4] 9V, +1>:] 9V, `>d] 9%!, `>d] 9V,+1>d] 3%! +1>,]B 9 V,>2~]* < YA`>  ]]$ y>      Z]$ y>    f]$ y>    Z]$ y>       Z]$ y>    ]]$ ySP Z2]$ ySJ --`]$ ySG-]]$ ySG.]$ ySG1]$ y!  G4]$ y     G:]$ y  5d]$ y!$ ]d]$ y $     Zd]$ y   $     ZkB]$ y!    Zq?]$ y!      Z    ]$ y$       Z        ]$ y$     Z       ']$ y$     Z        ]$ y'  ]          ]$ xG7SG      ]$ xD4SG  Z2]$ 3  "   SG  -]-!]$ 9  %  SG-\]$ 9  1*0SG.]$ 9 1*-SM1]$ 9  1** >4]$ 3 "$!>:]$ 9@1 * ' >d]$ < v - - >d]$ y>d]$ y>:]$ y>4]$ y>!  A]$ y>    >]$ y>     J]$ y>    >]$  k>     >]$  n>  A]$  n>  ]$  n> '\]$ q> .]$  n> .]$  n 1]$  n 4]$  k :]$ y d]$ y d]$ y$    d]$ y!   :]$ y   4]$ y'       i]$ i'         i]$ i'         i]$       |      i]$     |           i]$     |              i]$    | ]     EWi]$     | ` F (% E -i]$   |c I+u5]$ Z  .]$ <X1 1]$ y 4]$ y :]$ y d]$ yj]$ y $ y $ y $ y $ y $ y $ y $ y $ y $ y $ y $ y $ y $ y $ y $ y $ y $ y}$ y}$ y}$   "   - N$    "       *,K$    . $    6    g$   .    6 d$    .       6 p$  %    - d$  @. W-6 d$  mWx        g$ y E9$y$ y B9$y$ y $9$y$ y}$ y}$ y}$ y}$ y $ y $ y $ y$ $ $ $ $ $ $ $ ' d- ^ [    &    #3i      #3i      #6f     #6f     #!c       #!c  ! &$` X` [$] ^?] d  d ^O [*    {3 C?$       x#3 R<$     $ xK   % % %% "  "  % $    $ xN    .    "       1    .     ( $        xN  %.   "    1    . .   4      x!%    . %" " ""    "   4      K'$ x!%       +   "       "           4   Kc{$(    "" "  " "    % %   +  X" y@4.$ [$%els.$ ^<`$ d$ ' -  !`0!`0`b2?_`***_`'''o_`    '_`     _`'  `' `'`  ' `'  `'  `ڀˀ''`'''`---   lp*ʦ3f3333f333ff3fffff3f3f̙3f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙333333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffffff3fffffff3fff̙ffff3fffff3f3333f333ff3fffff3f3f̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3fJb)͋sbZR))bZJ{J9RA) b91Ŭ9)9b1j)|{ &&&& D  $$$$ B  $$$$ B  $$$$ B   %   '   '       '  '   %  $$$$ B  $$$$ B  $$$$ B  %%%% C xxy{a`lp0ʦ``@""" 8R@R8R429222c/b/a.KHJGIFHGGHGLGLGFGFGOFHPGI9PH2222 C2 A2A2 A3 ?8?U@8A]B]\]]]t]]]]#o]"p]!p 8 #@ !8 !4 #2 #2 #2 "2#w6 #v5 7$u5 8$ff _egdge gegefeeee-ed-e c,e d-d e .2 /2 /202.2 -2  -2"/38U8OB]NA]MA]]]]]]] 8@8   4   2 222v7-Nu6,Mt6+Mec dd cedf dg  dg  df  de dd d c> d d> c e@  2222222"3 8 U$8#]#]"]"]"]<]>] V]]] 8.02@-038,/44!2222-,+ hg gf4ff4!gf4#ggghgigfgfg  fg  g +f ' h+2*2*2 '2 &2 &2'2%3 %8 %U  '8]]]]]]]]]]:A:64444444ylmxklxjkkjkjljljlkmlm*m n*n n,!o 4 4 ;AA-77@.66?.56@/66@/66A/77A077A077B187B188C 299C!39:5QQo;S"""lp0~_ \ EEE ?!? ?!? $' 6 ! ' !            !     '    !    `      $  -  h ! !     ]         $    *    e   $  i       $  6    q   $     ]        $ *   e   '     ]         $     *   e x     '    `     '   -  h      '2 i Z Z< 4       *2E$ Z-<'u   O,0    0   ?!? ?!? ??? !8!,-{-BBB !2!&-u-HEE !,! -o- EEE !,! -o- 9  $??? !,! -o- 9     3??? !,! -o- 9  ??$ '  !,! -o- 9   3 0 !  !  ! -o- 9       3 *       !    T!  l-`-          `9    $      !    Q!  i- ]-         ]9  0 o *   !     Q!   i- ]-         ]90K     !     Q!   i- ]-        ];H *     !    Q!  i- ]-        ]        !     Q!   i- ]-         ] *   !    Q!  i- ]-         ]       !    T!  l-`-         ` *       !,! -o-       !,! -o-       !,! -o-  0    !,! -o- ?    !/!#-r-?   !5!)-x-??? ??? ??? BBB HEE \0Y0S*M$M$M$M$]lZl                      ''                                                                             $                                     $                                     $                                     $                      'Zl-ZlZlZlZl`l]lZl                      ''                                                                                                                                                                                                               ZlZlZlZlZl`l]lZl                    ''                                                                                                                                                                                                          ZlZlZlZlZl`l]lZl                      ''                                                                                                                                                                                                    " Z> Z> Z> Z> Z> `>BA ]> Z>E        7                 E          4                           E @                          E  4                          E          4                          E        7                           E !<R                 E !-R Z>E/-^ Z> Z> Z> Z> `> ]> Z>                                                                                                                                                                            Z>] Z>Z Z>H     a Z>E        a Z>E    a `>E   a ]>E     X Z>E   [                 E         a                           E ?i a                         E Bf U                          EEl X                                                                        Z> Z> Z>E- Z>B- Z>H      X `>E         U ]>E   U Z>E  U                  E   U                           E U                          E        U                           E ?iU                          E Bf X                           EEl  [                   Z> Z> Z> Z> Z> `>  ]> Z>                                                                                                                                                                                                     Z>  Z> Z> Z> Z> `> ]> Zl                      ''                                                                                                                                                                                                          ZlZlZlZlZl`l]lZl                      ''                                                                                                                                                                                                            ZlZlZlZlZl`l]lZl                     ''                                                                                                                                                                                                            ZlZlZlZlZl`l]lZl                      ''                                                                                                                                                                                                           ZlZlZlZlZl`l]lZl                      ''                                                                                                                                                                                                            ZlZlZlZlZl`l]lZA(                    ' '                                     6 !"                                   6 I                                  6 I         !                         9$"                                                      ZlZlZlZlZl`l]8Z26                     $ $'0                               w  *                           t  $                             w  $                             z$                                 $               $Z26$Z08$Z26$Z08$Z26$`8$]3333333333333333 g $Z0000000000000000 d 'Z0000000000000000 d -Z0000000000000000 d 0Z      ! ! !! -630< *Z  !'    !      $  0 0 6<B $Z  ! $    '    ?0B<B $Z  ! !     '    63B<B $Z  !  $'    '    3<B<B $Z  !    $ $    !     !60 6<B  Z  !       ! ! 9300<   Z0000000000000000 d  Z0000000000000000 d Z0000000000000000 d $Z0000000000000000 d $Z0000000000000000 d $A $P'V-              / / / / / / / / /// ////0/0/0/0/0/0/0/0/000/0000?0?0?0?0?0?0?0?0?0?0????@?@?@?@?@?@?@?@?@?@?@@@@O@@@O@O@O@O@O@O@O@O@OOOOPOOOPOPOPOPOPOPOPOPOPPPPPPPP_P_P_P_P_P_P_P_P___P____`_`_`_`_`_`_`_`_```_````o`o`o`o`o`o`o`o`o`o`oooopopopopopopopopopopopppppppppppppppπππππππππππππππππππππππππππππππππππππππππππ              / //////////////////////0/000/000000000000000000?0?0?0??????????????????@?@?@?@@@@@@@@@@@@@@@@@@O@@@O@OOOOOOOOOOOOOOOOOOPOOOPOPPPPPPPPPPPPPPPPPPPPPP_P______________________`_```_``````````````````o`o`o`oooooooooooooooooopopopoppppppppppppppppppppppππππππππππππππππππππππππππππππππππππππππππ             / / / / / / / / / / ////0///0/0/0/0/0/0/0/0/0000?000?0?0?0?0?0?0?0?0????????@?@?@?@?@?@?@?@?@@@?@@@@O@O@O@O@O@O@O@O@OOO@OOOOPOPOPOPOPOPOPOPOPOPOPPPP_P_P_P_P_P_P_P_P_P_P____`___`_`_`_`_`_`_`_`_````o```o`o`o`o`o`o`o`o`oooooooopopopopopopopopopppopppppppppppppπππϝππππ0ππ0ππO$?             / / / //////////////////0///0/000000000000000000?000?0??????????????????????@?@@@@@@@@@@@@@@@@@@@@@@O@OOO@OOOOOOOOOOOOOOOOOOPOPOPOPPPPPPPPPPPPPPPPPP_P_P_P__________________`___`_``````````````````````o`oooooooooooooooooooooopoppppppppppppppppppppppppππππππ*ππ*ππ$?              / / / / / / / / /// ////0/0/0/0/0/0/0/0/000/0000?0?0?0?0?0?0?0?0?0?0????@?@?@?@?@?@?@?@?@?@?@@@@O@@@O@O@O@O@O@O@O@O@OOOOPOOOPOPOPOPOPOPOPOPOPPPPPPPP_P_P_P_P_P_P_P_P___P____`_`_`_`_`_`_`_`_```_````o`o`o`o`o`o`o`o`o`o`oooopopopopopopopopopopopppppppppppppppππππππππ$ππ$ππ$?                     / //////////////////////0/000/000000000000000000?0?0?0??????????????????@?@?@?@@@@@@@@@@@@@@@@@@O@@@O@OOOOOOOOOOOOOOOOOOPOOOPOPPPPPPPPPPPPPPPPPPPPPP_P______________________`_```_``````````````````o`o`o`oooooooooooooooooopopopoppppppppppppppppppppppππππππππ$ππ$?              / / / / / / / / / / ////0///0/0/0/0/0/0/0/0/0000?000?0?0?0?0?0?0?0?0????????@?@?@?@?@?@?@?@?@@@?@@@@O@O@O@O@O@O@O@O@OOO@OOOOPOPOPOPOPOPOPOPOPOPOPPPP_P_P_P_P_P_P_P_P_P_P____`___`_`_`_`_`_`_`_`_````o```o`o`o`o`o`o`o`o`oooooooopopopopopopopopopppopppppppppppppππππππππππ ππ$?              / / / //////////////////0///0/000000000000000000?000?0??????????????????????@?@@@@@@@@@@@@@@@@@@@@@@O@OOO@OOOOOOOOOOOOOOOOOOPOPOPOPPPPPPPPPPPPPPPPPP_P_P_P__________________`___`_``````````````````````o`oooooooooooooooooooooopoppppppppppppppppppppppppππππππ$ππ  ππ$?               / / / / / / / / /// ////0/0/0/0/0/0/0/0/000/0000?0?0?0?0?0?0?0?0?0?0????@?@?@?@?@?@?@?@?@?@?@@@@O@@@O@O@O@O@O@O@O@O@OOOOPOOOPOPOPOPOPOPOPOPOPPPPPPPP_P_P_P_P_P_P_P_P___P____`_`_`_`_`_`_`_`_```_````o`o`o`o`o`o`o`o`o`o`oooopopopopopopopopopopopppppppppppppppππππππππππ ππ$?               / //////////////////////0/000/000000000000000000?0?0?0??????????????????@?@?@?@@@@@@@@@@@@@@@@@@O@@@O@OOOOOOOOOOOOOOOOOOPOOOPOPPPPPPPPPPPPPPPPPPPPPP_P______________________`_```_``````````````````o`o`o`oooooooooooooooooopopopoppppppppppppppppppppppππππππππππ?                     / / / / / / / / / / ////0///0/0/0/0/0/0/0/0/0000?000?0?0?0?0?0?0?0?0????????@?@?@?@?@?@?@?@?@@@?@@@@O@O@O@O@O@O@O@O@OOO@OOOOPOPOPOPOPOPOPOPOPOPOPPPP_P_P_P_P_P_P_P_P_P_P____`___`_`_`_`_`_`_`_`_````o```o`o`o`o`o`o`o`o`oooooooopopopopopopopopopppopppppppppppppππππππππ ππ ππ?               / / / //////////////////0///0/000000000000000000?000?0??????????????????????@?@@@@@@@@@@@@@@@@@@@@@@O@OOO@OOOOOOOOOOOOOOOOOOPOPOPOPPPPPPPPPPPPPPPPPP_P_P_P__________________`___`_``````````````````````o`oooooooooooooooooooooopoppppppppppppppppppppppppππππππ  ππ  ππߣ____?               / / / / / / / / /// ////0/0/0/0/0/0/0/0/000/0000?0?0?0?0?0?0?0?0?0?0????@?@?@?@?@?@?@?@?@?@?@@@@O@@@O@O@O@O@O@O@O@O@OOOOPOOOPOPOPOPOPOPOPOPOPPPPPPPP_P_P_P_P_P_P_P_P___P____`_`_`_`_`_`_`_`_```_````o`o`o`o`o`o`o`o`o`o`oooopopopopopopopopopopopppppppppppppppππππππππ  ππ ππߤϏ____________________Ϗ?                / //////////////////////0/000/000000000000000000?0?0?0??????????????????@?@?@?@@@@@@@@@@@@@@@@@@O@@@O@OOOOOOOOOOOOOOOOOOPOOOPOPPPPPPPPPPPPPPPPPPPPPP_P______________________`_```_``````````````````o`o`o`oooooooooooooooooopopopoppppppppppppppppppppppππππππ ππ$ππ$O             / / / / / / / / / / ////0///0/0/0/0/0/0/0/0/0000?000?0?0?0?0?0?0?0?0????????@?@?@?@?@?@?@?@?@@@?@@@@O@O@O@O@O@O@O@O@OOO@OOOOPOPOPOPOPOPOPOPOPOPOPPPP_P_P_P_P_P_P_P_P_P_P____`___`_`_`_`_`_`_`_`_````o```o`o`o`o`o`o`o`o`oooooooopopopopopopopopopppopppppppppppppππππππππ'ππ'ππ             / / / //////////////////0///0/000000000000000000?000?0??????????????????????@?@@@@@@@@@@@@@@@@@@@@@@O@OOO@OOOOOOOOOOOOOOOOOOPOPOPOPPPPPPPPPPPPPPPPPP_P_P_P__________________`___`_``````````````````````o`oooooooooooooooooooooopoppppppppppppppppppppppppϝππππππ-ππ-ππ              / / / / / / / / /// ////0/0/0/0/0/0/0/0/000/0000?0?0?0?0?0?0?0?0?0?0????@?@?@?@?@?@?@?@?@?@?@@@@O@@@O@O@O@O@O@O@O@O@OOOOPOOOPOPOPOPOPOPOPOPOPPPPPPPP_P_P_P_P_P_P_P_P___P____`_`_`_`_`_`_`_`_```_````o`o`o`o`o`o`o`o`o`o`oooopopopopopopopopopopopppppppppppppppπππππππππππππππππππππππππππππππππππππππππππ              / //////////////////////0/000/000000000000000000?0?0?0??????????????????@?@?@?@@@@@@@@@@@@@@@@@@O@@@O@OOOOOOOOOOOOOOOOOOPOOOPOPPPPPPPPPPPPPPPPPPPPPP_P______________________`_```_``````````````````o`o`o`oooooooooooooooooopopopoppppppppppppppppppppppππππππππππππππππππππππππππππππππππππππππππ lpr20$''''''''''''''''w~?۷}߿n۷۷۷~/͛}\t?xmܳ n߻wm7vwm۷~wm7߻wm߷vn߻6l۷v?Ymr>r>r>r> sDDDDH.  >>>>@abR 5 AP 3  AO 2  =O 2  <O 2 ? 2  ? 2   $       $      #    $+   $    $      $      $   $  O 2 O 2 8<O 2 8<O 2 8>S 48A3 a|!c!b !c!d!b!c !h !h "p !$%&$              #"K #"K / 1  2 A11 767 !66 )'?ux{xx y  !     !     <~                 >3    & $   & & & ' & %   &   &  :  &  ;   & 8   $   i i B  B  B   B  B     B  /   B  0   B  0   B   "F "F                                     c   c   c    c   c   c /, c +-   c $ - c      E  E  E   E  E   E / E +E $&E   b b b  b  b  b  ^  ] )  ] ) ]  ( ^     . 3 4 5 3 . > >  >                R6  ?6 d f  j f f g   K  !   K  !  4% P        / 1 5 1 1 2  7  7  7     n   n _ ^ b ^ ^ _ ,h h #!h   Q   P   N   P    P   P   P   P *    P *    P %  Q   0Bi  4Dh     h    h   h  h  h    h *!!1 h *!!1+h "2,i   qK  pK         /     /    /              !  3O 2N 2 O2P2N2O2b 2 b 3 b   !#%*&&q ` `    l   k  o  k  k  l  '  r     r    +r    `   q&&**+-PzzlpfPʦ!!9BBJNNRGL]cZc^r???????_????????_????????_??ߟ?߿?????_?????_??_?__?_?_?_?_?__?______________?________?________?________?____ߟ_߿___?_______???_?????_?_______?_?_?_?_ߟ߿?_???_?????_?_______?_?_?_?_ߟ߿?_???_?????_?_______?_?_?_?_ߟ߿@, * * ******* ** * * h5  h5  h1  h0  _  ]+  \0  \+  \0  %   $                              0    +  B  B0  \0  \2  ^5  * *   F F F F F E PT 7T   T * * * * * * & $                                                   !             1D<  1I ;  2H :  2G9  2H :  3C ;  3J<  4MB  4MB          2>p  2Cp  2Gp  2Cp  2Cp  2>p  2]p  2[p  2 Lp          2 k  2$k  2$k  2$j  2$j  2i  2$i  2$h  2%h      w  {  2}  2 }  2}  2 |  2 |  2{  2>{  2.z  2 z      b,  f+  2}  2 }  2$}  2!|  2!|  2{  2>{  2%z  2  z      V*  V*  9  ;   <  =  ;  9  ( )A    A   #C                                                          "                    v  x  |  x  x  y   !      !      <~      !              #R   , $ + & , ' + %   ,  +  :  ,  ; + 8   *   h i A  B  A   B  A     B  /   A  0   B  0   A   "F "E                                     b   c   b    c   b   c /, b +-   c$ - b    E   E   E   E  E   E / E  +E  $&E      ! # % * & & q  `  `     3    3  3   3   3   2   D   D    D     `    q && * * + -N9    UMLMlpPʦ3333f333ff3fffff3f3f̙3f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙333333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffffff3fffffff3fff̙ffff3fffff3f3333f333ff3fffff3f3f̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3f``@$Ul0zxvvvvvvqMMoMKnIJnHJW9  K1  ' L  " (                #   #      $ )  W3 6n6:n;; nJnHJnHJnJJpMLvvvvvvvvvvvkiWXX 7 ; O NRN NO  .d  . P @O X fWXWXWXWXWXX X X 6 :   X  b  c  d  b  c  - '4]  - '4]  7' 5] X X r5 v4   k  \  _  \  [  ]G tG uM tWXX < "  ! ! ! !!,! ! 1" X X fhjvvvvvvvO!N!NN1/.... )      $"- $ *D <. .  .X.X0 XN XN XN XNXNXN XN --**********  ZY  Y  Y  Y Y Y Y Z ****** *  *n*n*n*n*n*n n n * n )   - ) ) * %0 %0 W *********  <8:vvvvvvvvvvvttbbb b a aaaa &a& a=b b bttvw{$W$Wyylpʦ**,+.112/133+19366963939.99399999.3?..E/7A39?39E9?999?3??9??99E.?E5CA3EEB:8?9????9?EC@<9EE?E?NJ>8=J9EJ9JF?GJEGGEPEJJEVJE:GOELNJLNTNKCLTURPPPVGO_TVOOYWI]]R[^^[L^YVVYa]a[Maa[]aN[eR]mTfcaiaUdqWqwj\Re_eldYpm[dffadldnfrmfdilairfjpnhnhqolrrtmouxladwalwiwrssrhowrlwluwhqi}vsyuwwwwul|wyjsqgws}{{wznq}z{z~}}x~y}r}y|stzƲƸ®˿ļƹսǹÿͻҽͻOOOOOOOOOOOOOOpottttooOOOOOOOeh1   G2  F3   F    F3   F3  F4 7.7 F36 . GOhOOOOOOOa`___ _`aOOOOOOOO//  /..   ---OOOOOOOOml     l  l m     llmOOOOOOe.k$e/k&6 E        6     5  4      4  4 5OOOOOOu.z$J.u/z$J/.                     OOOOOOf.z<xf/z<x&4      &    %  $     $ $4%OOOOOO&.K.p&/K/p.=    . -,   ,,44-OOOOOO(.p(/pN\  N  M L   LL#MOOOOOO<x<xFT         F  E  D    DDEOOOOOOOOml   l   l   m    pplOOOO::::1     2    2            2     2     2 A& 1 (S;::::oolpxʦ**,+.112/133+19366963939.99399999.3?..E/7A39?39E9?999?3??9??99E.?E5CA3EEB:8?9????9?EC@<9EE?E?NJ>8=J9EJ9JF?GJEGGEPEJJEVJE:GOELNJLNTNKCLTURPPPVGO_TVOOYWI]]R[^^[L^YVVYa]a[Maa[]aN[eR]mTfcaiaUdqWqwj\Re_eldYpm[dffadldnfrmfdilairfjpnhnhqolrrtmouxladwalwiwrssrhowrlwluwhqi}vsyuwwwwul|wyjsqgws}{{wznq}z{z~}}x~y}r}y|stzƲƸ®˿ļƹսǹÿͻҽͻ=========^]bbbb]]=======eV1   52  43   4    43   43  44 7.7 436 . 5OV=======lk   k  k k   kkl====== / /$    M$    L$    L   M$    L$   L$   - X1  / u========?> =  = =   ==>========L K   J  J J   JJK========\ \       \    [  [    ZZZ========$    U$   T$   T   U$    T$    T$  /  `1 5 }========~ }   | | |   |}~========[ Z      Z     Z  Z     ZZ[======iPjQ$    E$   D$   D    E$     D$    D$  %   P1 .m========^_      _  ]  ]      ][[========\\   \   [   [     ZZZ========[ Z   Z  Z [  ZZ[========Z\ \ \ \   \\\========[[    ^  ]  \   [[\========$   5$   4$    4    5$     4$    4$  -   @1  ]========M M  Q O O   OMM========+*       *      *   +    **+========\ [     Z   Z   Z       ZZ[======iPjQ$    E$   D$   D   E$    uG$   uE$  %7 E1 ] An?n>n>n>n>n>n>n>>>=>       <>     <>   <>    <)P<)O=On) On  Pn) On On)On Pi>j!$    v>$   u!$   u>    v!$   u>$    u!$  %&  >1 ] [n)^n]n)  \n  \n)  [n  [n)[n  \_> ^!    ^>  ^!  _>    ^!^>_!n>n  Bn)EnDn) Cn  Ci) Bj B$    v)B$  u  C$ ! u>  ! v!$   u>$    u!$  %'  >1 4)!n>n!n>n Fn)EnDn) Dn  D=) D> D  >)E =  F>>  >!>>>!n>n!n>n2mnOmn2OnOOn%O OO % O   ON  % M  ]V    %V> %zn>n%zn>n!n>n n+nb$   n+b$   mb$    m+b    nb$     m+a$   m `$  '  yJi1 & in>nn>nn>n!n>n  C~B~B~ B ~ B C Fn)Bn Cn>n!n>n!n>n!N>N  N<MbM<b   LbL<bL bn<an `nJinin>nn>n > !      >             F E En  En En  En En)En Fn>n! > !      >     !   >        ! >  Cn)CnBn) Cn  Cn) Cn Cn)Cn C > !         >        !     >       !>!n>n Bn)An@n)@n @n)@n @ )A  B     >    !    >     !> >n>n 0n0n 'n &n &n &n& &  &    % &  %'  >     > >>n>n@nAn?n?n?n?n? ? ?  =  >       nnnnnn>n=n? ? ?       @ E A   A    {n {  n    n  n   n   n   n   n  "    "             {            A    AE EnFnH======1     2    2            2     2     2 A&1 (S>===d%60r 4"6 ^( ,lp%ʦ kc#VCG1?Q=Q~0J[PO@dcRjh|)vRi*:#3NӰyfYXIV{j!+,>R"1u'9Xiq1KqF33gStiqjcKAfp{jOi;R\\NtΙVvkF5RO<[H<=*>%_ScSɬ.?slmIuv>4s,>Pw@YaXv3EC^X*>F=2s12=ƼutK$7#5nosEXIls6<+F]/#*zkI@NUG-e_ا~dL 2\l^¿$uqF?s00Ǻ0E`tF5>לMF2Hl[ebgs@ROjvsZK&`%$_BNpbNH*FHJ > > > > > > > > > 2 0 / / / / / / / / / / / / / / / / / / / / / / / / / / '  y  \  [  [   [  [  [  %[ \ / / / / ' / 4y  \  [   [   [   [  [   [ \ / / / / ' $ %y  \  [  [   [  [   [  [ \ / / / / / / / 1 > > > qK qK       95. 4-#  b 2 > > > > > > > > > > > > > > > > > > > s r s q r  tlp ʦ``@""q"qqmkkkkkkkkkkkkkkgV-fV-eV-eR-eP-eP-eP-eP-eP-eP-eP-eP-eP-peP,peP+pePp$lePp$j058p$j/69l$j.68j$j.lj$j.jj$j.jj$j.jj$j.jj$j.jj$00.jj$/1.jj$.1.jj$.jj$.jj$ .jj$ .jj$.jj$.jj$ .jj$ .jj$.8/j$# .70$".60$#. $j.$j.$j.$j.$j.$j.$ . )$ . *$ .& ;$ .'j$ .(j$.jj$.jj$.jj$.jj$(.jj$).jj$:.jj$j.jj$j.jj$j.jj$j.jj$j.jj$j.jj$ .jj$ .jj$.jj$.jj$.jk$.j96$.k95%.9684&.95KY .84KYeNJX eNJXjdMIWjdMI WjcLH Xjc LHYjb MK[jbNK[jePK[jePK[jePK[jePK[jePK[jePK[kePK[96eP58$95eP69$8405868[D/69l[D.68jZC.ljZC.jjYB.jjY B.jjX C.jjXD.jj[F.jj[F.jj[F.jj[F.jj[F.jj[F.jj[F.jj[F.jj[F.jj[F.jj[F.jj[F.16j[F.07'$[F./7&%[F.%%[F.&%[F.&%[F.&$[F.&"[F.&#[F.%$[F.$ 0[F.# 1&58.F#@%69.Gj$68.Hj$l.jj$j.jj$j.jj$j.jj$j.jj$j.jj$j.jj$j.jj$& 9.jj$% 8.jj$$ 7.jj$.jj$.jj$.jj$.jj$.jj$.jj$.jk$.j96$.k95%.p84&.pKY.:5KYjgOJXjfOJXjeNIW)=eNI W(<dMH X'<dMHYcLK[c LK[b MK[bNK[ePK[ePK[ePK[ePK[eOK[QdM58$RbK69$S`I68$j^Gl$j\Ej$jZ Cj$jXAj$jV?j$jT=j$jR;j$jP 9j$jN$7j$jL(5j$kJ,3j$96H01j$95F4/j$84D8-j[DB<+j[D@@)jZC>D'jZC<H%HYB:L#GY B8P!FX C6TXD4X[F2\[F01,[F.2-[F,3.[F*41 [F'54 +0F'5:*4F&3:4)4G'125)1H)/0 6)x+-.j)x-,-j)x/+,j)x1Xj)x3T j)x5P"j)x7L$j)x9H&j)x;D(j)x=@*j)x?<,j)xA8.j)xC40j)xE02j)xG,4j)xI(6j)xK$8j)xM :j)xO<j)wQ>k(uS@R&sUBQ%qW DP$oYF/qm[H/o k]J.li_ L.jgaN-gecO- eceO, d aeN,c$_eN/c(]dM/a,[dM/_0YcL/]4Wc L/[8Ub M/Y<SbN/W@QeP/UDO`P/SHM_P/QLK^P/OPIVP/MTGaP/JXDaP/H\BVP/F`@TP/Dd>TP/Bh<TP/@l:[P/>p8[P/<t6[P/:x4[P/8|2[P/60&58/40 ,.%69/21 -,$68/020*$l/.43($j/,63&$j/*85$$j/(:8"$j/&<; $j/$==$j/"@ >$j/ B A$j/^ D$j/5$j/9$j/;$j/XV$j/UU$jORS$jQ++$jS(($jU%'$jW$&!$jY"$#$[ "%$]'$_)$a+$c 3-$e 4/$gN1$i|3$kx5$#mt7$$op9$1ql;$jsh=$jud?$jw`A$jy\C$j{XE$j}TG$jPI$jLK$jHM$jDO$j@Q$j <S$j 8U$j4W$j0Y$j,[$j(]$j$_$j a$kc$95e$:5g$83 i[N" kZM$mZM&oYL(qY L* sX M,uXN.w[P0w[P0v[P0v[P/u[N/uYL.tWJz3 4AUHy3<ASFx3 4AQ DxlAPCxjANAxjAL?xjAJ=xjAH;xjAF 9xjAD$7xjAC,6xjAA*4xjA?.2xjA=20xjA;6.xjA9:,xjA7B+xjA6@)xjA4D'xjA2H%xjA0L#xjA.V!x++A,Rx*,A*Vx),A)Zx*,A' x*,A%!x*+A#'x*)A!$ x**A&"x*+A ($x*5A!)&x*6A%''x)7A$%%xjA)##xjA+!"xjA-!xjA/exjA1\xjA2XxjA4T!xjA6P#xjA8S%xjA:J&xjA<F(xjA=B*xjA?>,xjAA:.xjAC=/xjAE41xjAF03xjAH,5xkAJ(7xpAL+8x96BN":x94CP<1wQ>0vS@0vUA/uWC/uY E.t[G. t\I- u^J-v` L0xbN0xdO0xfO0xeN0xeN0xdM0xdMz58AcLy69Ac Lx68Ab MxlAbNxjAePxjAePxjA058xjA/69xjA.68xjA.lxjA.jxjA.jxjA.jxjA.jxjA.jxjA.jxjA.jxjA.jxjA.jxjA.jxjA.jxjA.jxjA.jxA.jxA.jxA.jxA.jxA.jxA.jxA.xA.xA.x "A.x #A.x"$A.xjA.xjA.xjA.xjA.  xjA.  xjA. 6xjA.jxjA.jxjA.jxjA.jxjA.jxjA.jxjA.jxjA.jxjA.jxjA.jxjA.jxjA.jxjA.jxkA.jx96A.jx95B.jx84C.j0v.j0v.j/u.k/u.p.t.p. t.p- u:-v:0x:0x:0x:0x:0x:0x:0x:0x:1x:6x:6y:6zkkkkkkkkkkkklqq"q""