cours_asm_68000_microproceseur

Embed Size (px)

DESCRIPTION

basique pour débutant , explique language,donne des exemple, explique l'architecture du motorola 68000

Citation preview

COURS D'ASM 68000(par le Froce Lapin) retour au VOLUME 1

****************************************************************** ** *COURSD'ASSEMBLEUR68000SURATARIST* ** *parLeFroceLapin(from44E)* ** *Coursnumro1* ** ****************************************************************** Cecoursd'assembleurpourrasemblerrduitdeparsataille.Il nel'estcependantpasparsoncontenu!L'assembleurestlelan gageleplussimpleq uisoit,pour vuq u'ilsoitexpliq usim ple mentceq uin'estmalheureusementpassouventlecas.C'estunpeu leparidecescours:vousapprendreceq u'estl'assembleurenune q uinzaine,pasplus.Detoutesfaons,par tgrossirlasauce avecdublablainutile,jenevoispastrsbiencommentfaire pourq uelescoursdurentplusde15jours.Evidement,vouscom prenezbienq uelescourspayantsonteux,toutfaitintrt fairedurerleplaisiretvousfairecroireq uec'esttrstrs durcomprendreetq u'ilvafalloiraumoins2568478leonssi vousvoulezvousensortir!!! Cecoursestdestinaudbutant,ilestcomposdeplusieurspar tiesrelativementcourtesmaisdanslesq uelles TOUTESTIMPORTANT. PRESENTATIONETAVERTISSEMENT PourprogrammerenASM,plusieurshabitudessontncessaires.Au tantlesprendredsledbutcar,trsvite,ceq uiapparaissait commedepetitsproblmespeuttournerlacatastrophe. Toutd'abordavoirdel'ordreauniveaudisq uette:Lessauvegardes sonttrsnombreusesetc'estvitelapagaille.Travailleravec soins:commentairesclairsetprcissurleslistings,viterles soitdisant'trucs'q u'onnecomprendraplusauboutde3jours, mettezq uelq ueslignesexplicativesaudbutdulisting... Auniveauoutil,jeconseilleDEVPACpoursafacilitd'emploi,et sadocq ui,bienq u'enAnglaisetsuffisammentclairepourq ue l'onyretrouvefacilementlesinfor mations. Sivousavezun1040(ouplus),n'hsitezpasdemanderauniveau des'prfrences'deGENST,unchargementautomatiq uedeMONST,le dbugger. Pourceq uiestdeslivresdechevet(etdetravail),ilfautbien surfaireladiffrenceentre2typesd'ouvrages:ceuxrelatifsau 68000Motorolaetceuxrelatifsl'ATARI.IlfautABSOLUMENTun ouvragedechaq ue.Attention,pourceluirelatifau68000,ilne doitpass'agird'unouvragedevulgarisation,maisd'unouvrage techniq ue,q uivoussembleracertainementincom prhensibleau

dbut. Parexem pledocumentationdufabricantdemicroprocesseur(MOTO ROLAouTHOMSONpourlaFrance).Cherchezductdesvendeursde composantslectroniq uespluttq uedanslesmagasinsdemicro ordinateurs.Endsespoirorientezvousvers"Miseenoeuvredu 68000"auxditionsSYBEX. Uneremarq ueq uidevraIMPERATIVEMENTguidervotrechoix: Levocabulaireinfor matiq ueestcomposentrsgrandepartie d'abrviations.Orcesontdesabrviationsdeter mesanglais. Ilestdoncim pratifq uel'ouvragesurle68000donnelasignifi cationdechacunedesabrviations,significationenAnglaiset traductionenFranais.Attentiondetrsnombreuxouvragesne donnentq uelatraductionorautantilestdifficiledesesouve nirdelasignificationdeter mestelsq ueDATCK,BG,BGACK,MMU ouMFP,autantleursfonctionsetclairsetsurtoutfacilementm morisablesionconnatlasignificationdecesabrviationsdans lalangueoriginal,latraductioncoulantdesource! Pourl'ouvragerelatifauST,lemustconsisteseprocurerchez ATARIlaDOCumentationofficiellepourlesDveloppeurs.Sinon, "laBible"ou"leLivredudveloppeur"chezMicroApplication, mmes'ilysubsisteq uelq ueserreurs,estunexcellentpalliatif. Apar tcela,n'achetezaucunautreouvrage:"lelivreduGEM", "GraphismesenASM","coursd'ASM"etc,neserontq uedesgouffres pourvotreportemonnaieetnevousapporterontrien. Si,aprscesachatsilvousresteq uelq ueargent,jenepeuxq ue vousconseillertrsfortementl'achatd'unecalculatriceposs dantlesoprationslogiq ues(AND,OR,XOR...)etlesconversions entrebasesutiliseseninfor matiq ue(binaire,hexadcimal...). JevousconseillelaTexasInstrumentTI34.C'estunecalculatrice 'solaire'(maisq uimarcheavecn'importeq uellesourcelumi neuse),q uil'avantaged'tresimplemanipuler.Vouslatrou verezunprixvariantde199Frs(magasinNASA)240Frs(Camif oulaFnac).C'estunedpenseq uin'estpastropleveetq ui s'avreratrsviterentable! METHODEDEPENSED'UNORDINATEUR EnFrancenousroulonsdroite.C'estsimple,entrdansles moeurs,ettoutlemondes'ensortbien.Imaginonslaconduiteen Angleterre...PourunFranaisilexisteenfait3solutions: 1)Onneluiditriensurcetypedeconduite: C'estavantageuxdanslesensounotreconducteurparttout desuitesurlaroute,maisbiensrlepremiercarrefourrisq ue deluitrefatal. 2)OnluirapprendconduiredeAZ: C'estlong,onal'impressiondeperdresontemps,maisonli mitepresq uetotalementlesrisq uesd'accidents. 3)Onditsimplementauconducteur:Attention,icionroule gauche. Celuici,saitconduiredroite,enleprvenantilferaat tentionets'ensortira.Avantage:c'estrapide,inconvnient:un simplerelchementetc'estl'accident.

Programmer,c'estcommevouloirconduiregauche.Ilsuffitde penser,maispasdepensercommenous,maiscommelamachine. Conscientdevotrevolontd'allervite,c'estlamthode3q ue nousallonsutiliser,maisattentionaurelchement. Undernierconseilavantdevouslaisseraborderlepremiercours proprementparler:l'assembleurplusq uetoutautrelangage,et assimilableuneconstr uctionenLego.Unenor meconstructionen Legon'estpourtantq u'unassemblagedepetitesbriq ues.Assembler 2briq uesetpasser1ou2heurespourtudiercetassemblagepeut paratreinutile.Pourtantc'estceq uenousallonsfaire:ilya peudechosesapprendremaisellessonttrsim portantes.Onne lerpterajamaisassez:ceneserapasq uandnotrechteaude Legod'unmtrecinq uantecommenceras'croulerq u'ilfaudrase dire"merde,mes2petitesbriq uesdudbuttaientpeuttremal fixes",carcemomentl,alorsq u'unemachineaccepteraitde toutreprendredsledbut,ilya99%dechancespourq uevotre exprienceenASMs'arrtel,ceq uiseraitdommage! Demme,jevousdconseillefortementlachasseauxlistings! Cettepratiq ueesttrscouranteentreautresurRTELetn'amne gnralementq uedesennuis!IlestdeTRESLOINprfrablede passerpourunconparceq u'onnesaitpasfaireunscrollingplu ttq uedefrimeralorsq u'onajusterecopiunsourceq uenousa donnuncopain!Acepetitjeul,ilyadesgagnantsenbasic, enCouenPascalmaisjamaisenassembleur,carlorsq uevouscom mencerezvouloircollerdessourcesentreeuxetq ueanemar cherapas,vousserezTOTALEMENTincapabledecomprendrepourq uoi, etilseratroptardpourapprendreetvousabandonnerez.Etne ditespasnon,regarderplutt6moisenarriresurRTELetsou venezvousdeceuxq uifaisaientalorsdel'ASM,ilsontpresq ue tousabandonns!N'oubliezpasnonplusunediffrencefondamen taleentreunlangageq uelq u'ilsoitetl'assembleur:Ilfauten viron6moispourapprendreleCoulePascal.Ensuiteletemps serapassproduiredebonsalgorithmes,ettaperlespro grammes. Enassembleurilenesttoutautrement.Enunmoismaximumle 68000nedevraitplusavoirdesecretpourvous,parcontretout letempsq uisuivradevratreconsacrfairedesrecherches plusoumoinsvidentessurdes'trucs'raliserplusvite,avec plusdecouleursetc...UnprogrammeurenBASICouenCrecherche dessourcespourtravailler.Pasunprogrammeurenassembleur!Le programmeurenassembleurVAFAIRElesroutines!Typiq uementonva demanderunprogrammeurenCdefaireunprogrammeetlepro grammeurenCvademanderauprogrammeurenassembleurderaliser laoulesroutinessoidisantinfaisables!Etbiensurpources routines,pasdesourcesdedistribues!!!!Ceq uenousappren dronsdoncici,c'estprogrammercommedesvrais!Achercher, comprendreafindepouvoirparlasuitecherchertoutseul. Sivousvousattendeztrouverdanscecoursdessourcesentiers descrolling,delecturesdedigitsoudegestiondesourissans leGEM,vousfaitesfausseroute!Retourneraubasicq uevous n'auriezjamaisdq uitter;Vousresterezatoutjamaisceq ue l'onappelleunlamerdanslesdmos,celuiq uirecopiemaisne comprendrien. Siparcontrevousvoulezsavoir,alorsaccrochezvouscarlesin fossontraresmais...q uelplaisirlorsq u'aprsplusieursnuits blanchesvousverrezapparatrevotrepremierscrollingdontvous pourrezdire:"c'estmoaq uil'aifait!!!",etlceseravrai!!

Danscecoursnoustudieronsle68000maisgalementlesparticu laritsduST:lesinterruptionsparleMFP68901,leson(digitou non),lesmanipulationsgraphiq ues,l'interfacegraphiq ueLigneA, etenfinungrosmorceau,souventcritiq umaistoujoursutilis, leGEM. Boncourage!

COURS D'ASM 68000(par le Froce Lapin) retour au VOLUME 1

****************************************************************** ** *COURSD'ASSEMBLEUR68000SURATARIST* ** *parLeFroceLapin(from44E)* ** *Coursnumro2* ** ****************************************************************** LESCHIFFRES'MAGIQUES' Voyonsd'abordd'unefaonsim plecommentmarcheunordinateur,en nousplaantdanslasituationsuivante:nousdevonsfournirdes messagesunepersonnedontnoussommesspars(parexem ple, messagedenuitentredesgensloigns). Nousavonsunelampedepoche,q uenouspouvonsdoncallumer,ou teindre,c'esttout.Nouspouvonsdoncdonner2messages1)la lampeestteinte(parex.toutvabien)2)lalampeestallume (parex.vlalesflics!) Approfondissonsles2tatsdelalam pe: AllumeEteinte q uirevient:ducourantpasdecourant ou:Ducourant?OUINON Valeurducourant?10 Lestestsserontdoncnotspar0ou1suivantl'allumageounon delalampe. Commenoussommesriches,nousachetonsune2melampe. Nousavonsdonc4possibilitsdemessage LAMPE1LAMPE2 teinteteinte allumeteinte teinteallume allumeallume Encomptantavec3,4,5,6...lam pes,nousnousrendonscompte q u'ilestpossibledetrouverunerelationsim pleentrelenombre delampesetlenombredepossibilits.

Nombredepossibilits=2lapuissancenombredelam pes. Nousobtenonsdoncletableausuivant Lesremarq uessontjusteslpourmettrelapucel'oreille! LampesPossibilitsRemarq ues 12 24 38Ilyadesordinateurs8bits... 416etdes16bits... 532LeSTestun16/32bits 664AmstradCPC...64!! 7128ouCommodore128? 8256Eninfor matiq uelecodagedescaractres (lettreschiffres..grceaucodeASCII) per metd'avoir256caractres! 9512Un520a512Kodemmoireet AmstradvendunPC1512 101024Lataillemmoiredemon1040! 112048Celledumga2demonfrre 124096Celled'unmga4.Aussilenbrde couleursaffichablesavecunAmiga. etc... 1665536DansleGFA,untableau nepeutavoirplusde65536lments. Simes4lampessontteintes(0000)jesuisdonclapossibilit 0.Siellessontallumes(1111)jesuisdoncla15(carde0 15afaitbien16)donc0000>0et1111>15 J'aidoncunbouq uinde16pagesdonnantlespossibilitsdes16 allumagespossibles,etmoncorrespondantalemme.Commentfaire pourluienvoyerlemessagedelapage13? Lechiffrelepluspetittantdroite(onnoteleschiffredans l'ordrecentaines,dizaines,units),plaonsleslam pes. Lampenumro:4321 a)jen'aiq u'unelam pe(la1)elleestallumedoncj'obtiensla valeur1.(jenepeutobtenirq ue0ou1) b)j'ai2lam pes(1et2),allumestouteslesdeux,j'obtiensla 4mepossibilit.J'aidonclavaleur3(puisq uejecompteles valeurs0,1,2et3,ceq uienfaitbien4)Puisq uelalampe1vaut aumaximumlavaleur1,j'endduisq uelalam pe2vautelle seuleaumaximumlavaleur2. Eneffetlampe1allume>valeur1 Lam pe2allume>valeur2 Doncles2allumesensemble>valeur3=4possibilits. Lalampe2peutdoncdonnerune'augmentation'de0oude2. Lampenumro4321 'augmentation'8421 Pourenvoyerlemessage13,ilfautdoncallumerlalam pe4 (valeurde8),lalam pe3(valeurde4)etla1(valeurde1) Lampe4321 Etatdelalampe1101 Valeur8+4+0+1=13

Noussommesdoncentraindecompterenbinaire. Endcimal:dcsignifie10,carunchiffrepeutprendre10va leurs(de09). Enbinaire:bi=deuxcarchaq uechiffrenepeutprendreq ue2va leurs(0ou1). L'infor matiq ueestundomaineAnglosaxon.Un'chiffrebinaire', enAnglais,asedit'binarydigit'.Ongardelapremirelettre etles2dernires,etonditq u'unchiffebinairec'estunBIT !!!Unbitpeutdonctre0ou1.C'estlapluspetiteunitin for matiq ue, car,lecorrespondantq uinousenvoyonsdesmessages,c'esten faitunordinateur.Aulieud'allumerdeslampes,nousmettonsdu courantsurunfilounon.Unordinateur8bitsdonc8filsur lesq uelsonmetounonducourant! Pourenvoyerdesmessagesnousallonsdoncprparerdeslam pes avecdespetitsinterrupteurspuis,q uandnoslampesserontpr tes,onactionneral'interrupteurprincipalpourenvoyerlecou rantetdoncallumerd'uncoupleslampesprvues. Nousallonsdonc,parl'inter mdiairedenos'lampes',envoyerdes messagesaucoeurdelamachine(danslecasduSTc'estunmicro processeur68000dechezMOTOROL A)q uiatfabriq upourrpon dred'unecertainemanireauxdiffrentsmessages. Onprparedoncnoslampespuisonallume.Nous,nousavons16 lampes.Eneffetle68000Motorola estunmicroprocesseur16bits. Voicidoncun'programme'(c'estdireunesuccessiond'ordres) telq u'ilestauniveaumiseounondecourantsurles16fils Toutgauchec'estlavaleurdufil16etdroitecelledu1.0 =pasdecourantsurlefil,1ducourant.Lemicroprocesseurest entourdemultiplestiroirs(lescasesmmoire)etpar milesor dresq u'ilsaitexcuterilya'vachercherceq u'ilyadanstel tiroir'oubien'vamettreadansteltiroir'.Chaq uetiroirest reprparuneadresse(commechaq uemaison),c'estdireparun numro. Nousallonsdireaumicroprocesseur:vachercherceq u'ilyaau numro24576,ajoutesyceq u'ilyaaunumro24578etmetsle rsultataunumro24580.Onpourraitremplacer'aunumro'par' l'adresse'. Allumonsdoncles16lampesenconsq uences,celadonne: 0011000000111000 0110000000000000 1101000001111000 0110000000000010 0011000111000000 0110000000000100 Uneseulebiarq ues'im pose,c'estlamerdetotale!Commentfaire pours'yretrouveravecunprogrammecommea,sionoublied'al lumeruneseulelam pe,anemarcheplus,etpourreprerl'erreur dansunlistingpareil,bonjour! lamerde!!!! Onadonclapossibilitdemarq ueranonpasenbinaire,maisen

dcimal.Malheureusementlaconversionn'estpascommodeetde toutefaon,onobtientq uandmmedesgrandschiffres(visuelle mentcarleurtailleentantq uenombrenechangepas,biensr!) Ainsila3melignedonne53368.Onvadoncconvertirautrement, ensparantnotrechiffresbinaireengroupede4bits. REMARQUEDEVOCABULAIRE: Nousneparleronsq u'Anglais.Touteslesabrviationseninfor ma tiq uesontdesabrviationsdemotsoud'expressionsanglaises. LeslirelaFranaiseimposed'apprendreparcoeurleursignifi cation.Enleslisanttellesq u'ellesDOIVENTtrelues(en Anglais),cesexpressionsdonnentd'ellesmmesleurdfinition. UndesexemplesestT$q uiestlusystmatiq uementTdollar!Or, $n'estpas,danslecasprsent,l'abrviationdedollarmais celledestring.T$doitdoncselireETSEDIRETstring.String signifiant'chane'enAnglais,Testdoncunechanedecarac tre.Evident,alorsq uelireTdollarnesignifieabsolumentrien !Leseulintrtc'estq ueafaitmarrerDouglas,lejoyeuxbri tanniq ueq uiprogrammeavecmoi! UneunitbinaireseditdoncBIT(binarydigit) 4unitsfor mentunNIBBLE 8unitsfor mentunoctet(q uenousappelleronsparsonnoman glaisc'estdireBYTE) 16unitsfor mentunmot(WORD) 32unitsfor mentunmotlong(LONGWORD) Revenonsdoncnotreconversionengroupantnos16lampes(donc notreWORD)engroupesde4(doncenNIBBLE) 0011000000111000 Ces4nibblesfor mentnotrepremierword. Comptonsdonslesvaleurpossiblespourunseulnibble. tatdunibble0000valeur0 0001valeur1 0010valeur2 0011valeur3 0100valeur4 0101valeur5 etc.. 1010valeur10 STOPavaplus!10c'est1et0oronlesadjuti liss! Benouimaispart0,1,2,3,4,5,6,7,8,9onn'apasgrandchose notredisposition...Bensi,y'al'alphabet! Onvadonccrire10avecA,11avecB,12avecC,13/D,14/Eet 15avecF.Ilyadonc16chiffresdansnotrenouveausystme(de 0F).'Dc'signifiant10et'Hex'signifiant6(unhexagone) doncHex+Dc=16.Dcimal=q uia10chiffres(09)hexadci mal=q uien16!!! Notreprogrammedevientdoncenhexadcimal: $3038 $6000 $D078

$6002 $31C0 $6004 Plusclairmaisc'estpasencorea. NOTE:pourdiffrencierunnombrebinaired'unnombredcimalou d'unhexadcimal,parconventionunnombrebinaireseraprcdde %,unnombrehexadcimalde$etiln'yaurariendevantunnombre dcimal.$11nevautdoncpas11endcimal,mais17. Rflchissonsunpeu.Nousavonsenfaitcrit: 'Vachercherceq u'ilya' 'l'adresse$6000' 'ajouteyceq u'ilya''l'adresse$6002' 'metlersultat' 'l'adresse$6004' Lemicroprocesseurpeutbiensrpiocherdanslesmilliersdeca sesmmoireq u'ilyadanslamachine,maisenplusilenasur lui(despetitespochesenq uelq uesorte,danslesq uellesil stocketemporairementdes'trucs'dontilaurabesoinrapidement). Ila17poches:8danslesq uellesilpeutmettredesdonnes,et9 danslesq uellesilpeutmettredesadresses.Donne=DATAet adresse=ADRESS,cespochesserontdoncrepresparD0,D1,D2, ...D7etparA0,A1...A7etA7'(nousverronsplustardpourq uoi c'estpasA8,etlesdiffrencesentrecestypesdepoches). NOTE:lephnomnedecourant/pascourantetlemmepourTOUSles ordinateursactuels.Lenombrede'poche'estpropreau68000 MOTOROLA. Ilyadonclemmenombrede'poches'surunAmigaouunMac Intoshpuisq u'ilsonteuxaussiun68000Motorala.SurunPCouun CPC,lescaractristiq ues(nombredelampesallumablessimultan ment,nombrede'poches'...)sontdiffrents,maisleprincipeest lemme.C'estallumOUc'estteint. Modifionsnotre'texte',q uidevientdonc. 'dplacedanstapocheD0' 'ceq uetutrouverasl'adresse$6000' 'ajouteceq uetuasdanstapocheD0' 'ceq uetutrouverasl'adresse$6002' 'metslersultatdel'opration' 'l'adresse$6004' Lamachineesttrslimite,puisq ueparconception,lersultat del'oprationdela3meligneiraluimmedansD0,crasant doncceq uis'ytrouve.Pourgarderlavaleurq uis'ytrouvaitil faudraitaupralablelarecopierparexempledanslapocheD1!!! DplacerseditenAnglaisMOVE AjouteseditenAnglaisADD Notreprogrammedevientdonc MOVEceq u'ilyaen$6000dansD0 ADDceq u'ilyaen$6002D0 MOVEceq u'ilyamaintenantdansD0$6004 C'estdire: MOVE$6000,D0

ADD$6002,D0 MOVED0,$6004 Nousvenonsd'crireenclairunprogrammeenlangagemachine. Ladiffrencefondamentaleavecunprogrammedansn'importeq uel autrelangage,c'estq uel,chaq uelignenecorrespondq u'UNE SEULEoprationdumicroprocesseur,alorsq uePRINT"BONJOUR"va luienfairefairebeaucoup.Ilestvidentq uenotreBASIC n'tantq u'untraducteur'mcaniq ue'satraductionatoutesles chancesd'treapproximative,et,bienq u'ellesoitefficace,elle utilisebeaucoupplusd'instructions(pourlemicroprocesseur) q u'iln'enfautrellement. Ilfautbienaussiavoirunepensemuepourlespremierspro grammeursdu68000q uiontd'abordfaitunprogrammeavecdes1et des0,programmeq uinefaisaitq uetraduiredeschiffreshexad cimauxenbinairesavantdelestransmettrelamachine.Ilont ensuiteralis,enhexadcimaldesprogrammestraduisantdesins tructionsdugenreMOVE,ADDetc...enbinaire... Ilsuffisaitensuitederegrouperplusieursinstructionsdece typesousuneautreappellation(incomprisedirectementparlama chine)etdefairelestraducteurscorrespondants,etcrerainsi leslangages'volus'(PASCAL,C,BASIC...) Nousallonsdoncnousintresserlaprogrammationoupluttla transmissiond'ordreau68000Motorola.Combiend'ordrespeutil excuter.Uniq uement56!!!!(avecdesvariantesq uandmmemais afaitpasbeaucoup).Desrecherches(unniveaubientrophaut pournous!)oneneffetmontresq u'iltaitplusrapided'avoir peud'instr uctionsfaisantpeudechosechacuneetdoncexcuta blesrapidementlesunesaprslesautres,pluttq ued'avoir beaucoupd'instructions(lemicroprocesseurperdantsansdoutedu tem pscherchercelleq u'onluiademanddefaire)oubiendes instructionscomplexes. Travailfaire:reliretoutaaumoins2foispuissereposer l'espritavantdelirelasuite. CONSEIL:necommencezpaslasuitetoutdesuite. AvalezparfaitementTOUTceq uiestmarq u,carlacomprhension dumoindredtailvousservira. Unelampe,cen'estpasgrandchose,maisunedegrilleetvous comprendrezlamerdeq ueaamne. L,c'estpareil.Lapluspetitechoseincompriseetvousn'allez riencom prendrelasuite.Parcontresitoutestcompris,la suiteseraaussifacile,etsurtoutaussilogiq ue.

COURS D'ASM 68000(par le Froce Lapin) retour au VOLUME 1

****************************************************************** ** *COURSD'ASSEMBLEUR68000SURATARIST*

** *parLeFroceLapin(from44E)* ** *Coursnumro3* ** ****************************************************************** Sivousavezcorrectementtudilesdeuxpremiresleons,vous deveznor malementavoirunpeuplusd'ordreq u'audpart,etle binaireetl'hexadcimalnedoiventplusavoirdesecretpour vous. Avantdecommencerjedoisvousrappelerq uelq uechosed'essen tiel:Ilesttentantderflchirenchiffrealorsq uebiensou ventilseraitprfrabledesesouvenirq u'unchiffren'est q u'unesuitedebits.Ainsiimaginonsunjeudansleq uelvousde vezcoderdesdonnesrelativesdespersonnages.Enlisantces donnesvoussaurezdeq uelpersonnageils'agit,etcombienil luirestedepointdevie.Admettonsq u'ilyait4personnages. Combienfautildebitspourcompterde03(c'estdirepour avoir4possibilits)seulement2bits.Mespersonnagespeuvent avoir,aumaximum,63pointsdevie(de063car0ilssont mor ts),ilmefautdonc6bitspourcodercettevitalit.Jepeux doncavoirsurunseulbyte(octet)2chosestotalementdiffrent es:aveclesbits0et1(lebitdedroitec'estlebit0,lebit leplusgauchepourunbyteestdoncle7)jecodeletypede monpersonnage,etaveclesbits27savitalit. Ainsilechiffre210enluimmeneveutriendire.C'estlefait delemettreenbinaire:11010010etdepenserenregroupementde bitsq uivalerendreplusclair.Sparonsles2bitsdedroite: 10ceq uifait3endcimal,jesuisdoncenprsenced'unperson nagedetype3. Prlevonsmaintenantles6bitsdegauche:110100etconver tissons. Nousobtenons52.Noussommesdoncenprsenced'unpersonnagede type3,avec52pointsdevitalit. Cecidevantmaintenanttreclair,passonsuneexplication succinteconcernantlammoire,avantd'abordernotrepremierpro gramme. STRUCTUREDELAMEMOIRE Lammoire,c'estuntube,trsfinettrslong.Ilnousfaut distinguer2choses: 1)Ceq u'ilyadansletube. 2)Ladistanceparrapportaudbutdutube. ATTENTION,cettenotiondoittreparfaitementcom prisecarelle estper ptuellementsourced'erreur. Grceladistance,nouspourronsretrouverfacilementceq ue nousavonsmisdansletube.Cettedistanceestappel'adresse'. Letubeaundiamtrede1byte(octet).Lorsq uejevaisparlerde l'adresse$6F00(28416endcimal),c'estunemplacement.Acet emplacementjepeuxmettreunbyte.Siladonneq uejeveuxmet tretienssurunword(donc2bytescar1wordc'estbien2bytes accols),cettedonneoccuperal'adresse$6F00etl'adresse $6F01.

Imaginonsq uejechargeuneimage(32000octets)par tirde l'adresse$12C52.Jevaisdoncboucler32000foispourdposermon image,enaugmentantchaq uefoismonadresse. Imaginonsmaintenantq uejeveuillenotercetteadresse.Jevais parexemplelanoterl'adresse$6F00. Doncsijemepromnelelongdutubejusq u'l'adresse$6F00et q uejeregardeceniveauldansletube,j'yvoislechiffre $12C52codsurunlongmot(lesadressessontcodssurdeslongs mots).Cechiffreoccupedonc4emplacementsdetubecorrespondant $6F00,$6F01,$6F02,$6F03.Or,q uereprsentecechiffre:Une adresse,celledemonimage!!!!J'espreq uec'estbienclair... Unprogramme,c'estdoncpourle68000unesuitedelecturesdu contenudutube.Ilvaytrouverdeschiffresq u'ilvainter prter commedesordres(revoirlecours2).Grcecesordres,nousal lonsluidireparexem pledecontinuerlalectureunautreen droitdecetube,derevenirenarrire,deprleverlecontenudu tubeetd'allerledposerautrepart(toujoursdanscemmetube biensr)etc...Poursavoirq uelendroitle68000estentrain delirelesordresq u'ilexcute,ilyauncompteur.Commece compteursertpourleprogramme,ilestappelProgramCounter,en abrgPC. Le68000aunPCsur24bits,c'estdireq u'ilpeutprendredes valeurscomprisesentre0et16777215.Commechaq uevaleurduPC corresponduneadresseetq u'enfacedecetteadresse(doncdans letube)onnepeutmettreq u'unoctet,unemachineq uiped'un 68000peutdonctravailleravec16777215octets,ceq uifait16 Mga.Atitreindicatif,le80286dechezIntelq uiq uipeles 'gros'com patiblesPC,necomporteq u'unPCsur20bitsceq ui restreintsonespace1mga... Anoterq uelammoireestdestinerecevoirdesoctetsmaisq ue ceq uereprsentecesoctets(texte,programme,image...)n'a strictementaucuneim portance. PREMIERPROGRAMME Nousallonstoutdesuiteillustrernotrepropos.Nouslanons doncGENST.Ceuxq uiontuncrancouleurdevrontlelanceren moyennersolution,c'estprfrablepourunmeilleurconfortde travail. Mmesivousavezun520,choisissezdansles'prfrences'de GENST(danslemenu'Options')unchargementautomatiq uedeMONST (LoadMONST'YES')mettezunTabSettingde11etautoindentsur YES. SiMONSTestdjchargsonoptiondanslemenu'program'doit tredisponible,sinonelleestengris.Sic'estlecas,aprs avoirsauvlesprfrences,q uitterGENSTetrelancezle. Maintenant,nousallonsraliserleprogrammesuivant: Metlechiffre$12345678dansleregistreD0 Metlechiffre$00001012dansleregistreD1 AdditionneleregistreD0avecleregistreD1 Toutd'abordilfautsavoirq uecesordresserontmisdansle tube,etq u'ilnousfaudraparfoisreprercesendroits.Pourcela nousutiliseronsdestiq uettes,q uenousposeronsctdutube.

Cestiq uettes(ouLabelenAnglais)sontinscriretoutgauche dansnotrelistingalorsq uelesinstr uctions(ceq uiestmettre DANSletube)serontinscritesaprsunespaceoumieuxpourla lisibilit,aprsunetabulation. Ainsinotreprogrammedevient: MOVE.L#$12345678,D0 MOVE.L#$00001012,D1 ADD.LD0,D1 Remarq uerlesigne#avantleschiffres.Lesigne$indiq ueq ue ceschiffressontinscritsenhexadcimal.Lesigne#indiq ueq ue c'estlavaleur$12345678q uenousvoulonsmettredansD0. SinousavionsfaitMOVE.L$12345678,D0,c'estlavaleurse trouvantl'adresse$12345678q uenousaurionsmisenD0. Pourq uoiyatil.LaprslesMOVEetleADD?Nousverronscela dansq uelq uesminutes. Pourlemomentassemblonsenmaintenantappuy[ALTERNATE]puisen appuyantsurA. Nor malement,touts'estbienpassoualorsc'estq uevousn'avez passcrupuleusementrecopice'programme'. Maintenant,dbuggonsnotreprogramme,enmaintenantappuy [ALTERNATE]etenappuyantsurD. Hop,nousnousretrouvonsdansMONSTq ui,tantappelpartirde GENST,aautomatiq uementchargnotreprogramme. Jetonstoutd'aborduncoupd'oeilceramassisdechiffre... EnhautnousretrouvonsnosregistresdedonnesD0D7ainsiq ue nosregistresd'adressesA0A7avecenprimeA7'.Souslesre gistresdedonnes,nousvoyonsSRetendessousPC.Nouspouvons remarq uerq uePCnousmontreuneadresseetlapremirelignede notreprogramme.LePCindiq uedoncceq uivatreexcut. Lafentredudessous(numro2)montrenotreprogramme.Surla gauchedecettefentrenousvoyonslesadresses.Symboliq uement nouspouvonsdireq uelapartiedroitedecettefentremontrenos instructionsdansletubeetq ueleschiffresdegauchenousindi q uel'endroit,l'adresseparrappor taudbutdutube. Lafentrededroite(la3)donneenfaitlammechoseq uela2, maisaveclavisiondu68000.Nousavionsvudanslecours2q ue pourlamachinenotresuited'ordresn'taitq u'unesuitede chiffres. Lorsq uenousavonsassembl,l'assembleurasimplementconverti ligneparlignenotreprogrammeenchiffres. Nor malementdanslafentre2vousdevezvoirnotreprogrammeavec enfacedelapremireinstruction,unepetiteflche.Regardez l'adressedecetteinstruction(c'estdirelechiffredegauche, q uiindiq ueaq uelendroitdansletubesetrouvecetordre).Avec un1040sousTOS1.4,celatourneautourde$61BF0. NOTE:Le68000per metunprogrammedeseplacern'importeo. Surcertainsmicroprocesseurslesprogrammesdoiventim prati vementtousseplaceraummeendroit.Pournouscen'estpasle

cas,ceq uiexpliq ueq uesimonprogrammeesten$61BF0iln'en estpasforcementdemmepourvous:c'estnor mal. Regardezmaintenantlafentre3etcherchezylammeadresseq ue celleq uevousavezluedanslafentre2enfacedenotrepre mirelignedeprogramme.Nor malementsivousn'aveztouchrien cetteadressedoitnor malementtrelapremire. Vousdevezyvoir203C12345678.C'estainsiq uelemicroproces seurreoitMOVE.L#$12345678,D0!!! Retournonssurlafentre2.Notonsl'adressedelasecondeligne denotreprogrammeetsoustrayonscechiffrel'adressedela premireligne.Nousobtenons6.Nousendduisonsdoncq ue: MOVE.L#$12345678,D0occupe6octetsenmmoire. Faisonsmaintenantavancernotreprogramme.Pourcelamaintenez enfonc[CONTROL]etappuyezunefoissurZ.Lapetiteflchea sautsurlasecondeligne,cettemmeligneestmaintenantindi q ueparlePCetnotreregistreD0contientmaintenantlavaleur $12345678.MONSTindiq uetousleschiffresenhexadcimal,vous commencezcomprendrel'intrtdelacalculatrice... ContinuonsenrefaisantControl+Z.C'estmaintenantlaligne3de notreprogrammeq uiestindiq ueparlePCtandisq ueD1s'est trouvrem plipar$00001012. ContinuonsavecControl+Z.L'additionentreD0etD1s'esteffec tue.Commenousl'avionsvudanslecours2,lespossibilits sontminimescarlersultatacrasl'anciennevaleurdeD1. PourraliserD0+D1=D2ilauraitd'abordfallutransfrerD1dans D2puisfaireADD.LD0,D2. Dansnotrecas,D1contientmaintenantlavaleur$1234668A. Notreprogrammen'ayantpasvritablementdefin,q uittonsle artificiellemententapantControl+C. SECONDPROGRAMME Effacerlepremierprogramme(alternateC)ettapezlesuivant: MOVE.L#$12345678,D0 MOVE.WD0,D1 MOVE.BD1,D2 NousavonsvudansMonstq ueD0D7taientdesregistresassez grands.Nousavonsrussimettre$12345678dansD0,ceq uidonne q uandmme305419896endcimal!Eneffetle68000estunmicro processeur16/32bitsceq uifaitq uecesregistresnesontpas codssur16bitsmaissur32. 32bits,celafaitunlongmot(LongWord).Dansnotrepremier programme,nousvoulionsq uel'instructionMOVEagissesurtoutle registredoncsurunlongmot,c'estpourcelaq uenousavions prcis.Laprslemove. NOTE:Levocabulaireesttrsimportantetdemandeunpetiteffort audbut.AinsiMOVE.Lneveutriendire.Ilconvientdelirece mnmoniq ue(c'estainsiq uesontappellesinstructionsassem bleurs)MOVELONG.D'ailleursl'appellationmnmoniq ue(q uia

rapportaveclammoire,q uisertaiderlammoire)estrap procherdemnmotechniq ue(capabled'aiderlammoirepardes moyensd'associationmentaleq uifacilitentl'acq uisitionetla restitutiondessouvenirs/CFdictionnaireLeRobert).Autantdonc lirelesinstructionsenAnglaisceq uifaciliteragrandementla comprhension. Puisq uenotreregistreD0(commelesautresd'ailleurs)etcod surunlongmot,ilcontientdonc2wordsctecte.Pourles distinguernousappelleronsceluidegaucheworddepoidsfortet celuidedroiteworddepoidsfaible.Chacundeceswordsestlui mmecomposde2bytes,celuidegauchetantdepoidsfortet celuidedroitedepoidsfaible.Depoidsfaiblecarleschange mentq u'ilpeutapporterlatotalitdunombresontfaiblealors q uelesdonnesdegauche(doncdepoidsfort)yapportentdesva riationsimportantes. Assemblonsnotreprogrammeetdbuggons. Excutonslapremireligne.Lersultatestlemmeq uepourle premierprogramme:lePCindiq uelasecondeligne,tandisq ueD0 reulavaleur$12345678. Maintenantexcutonslasecondeligne.Queditelle? MOVE.WD0,D1 C'estdiredplacerlecontenudeD0pourlemettredansD1. Maisattention,ledplacementdoitsefairesurunword(prcis par.Waprslemove.CelaselitMOVEWORD).Orlesoprationsse fonttoujourssurlepoidsfaible.LeMOVEvadoncprleverle worddepoidsfaibledeD0pourlemettredansleworddepoids faibledeD1.Celuicivadoncrecevoir$5678. Continuonsenexcutantlatroisimeligne.Cellecidemande: MOVE.BD1,D2(movebyted1d2) Donctransfer tdubytedepoidsfaibledeD1verslebytedepoids faibledeD2.Regarderbienlesregistresetlesvaleursq u'ils reoivent! QuittezmaintenantleprogrammeavecCONTROL+C TROISIEMEPROGRAMME MOVE.L#$12345678,D0 MOVE.L#$AAAAAAAA,D1 MOVE.WD0,D1 SWAPD0 MOVE.WD0,D2 Oneffaceleprogrammeprcdent,ontapeceluici,onassemble puisondbugue.L'excutiondelapremireetdelasecondeligne nedoiventplusposerdeproblme. Nousdevonsobtenir D0=12345678 D1=AAAAAAAA Excutonsmaintenantlatroisimeligne.Ilyabientransfertdu worddepoidsfaibledeD0versleworddepoidsfaibledeD1. Nousconstatonsq ueleworddepoidsfortdeD1N'ESTPASAFFECTE

parcetransfert,etq u'ilrestetoutfaitindpendantduword depoidsfaible. 4meligne.Cemnmoniq ue'SWAP'(Toswap=changer)vachanger les16bitsdepoidsfaibleavecles16bitsdepoidsfort.D0va doncdevenir56781234. Dernireligne.TransfertduworddepoidsfaibledeD0(q ui maintenantest1234etplus5678)versleworddepoidsfaiblede D2. Nousavonsvuq ueD0contenaitenfait2donnesetq uecesdon nestaienttotalementindpendantes.Ceciper metunegrandesou plessedetravailmaisdemandeaussiunegranderigueurcarsiau lieudefaireMOVE.WD0,D1j'avaisjustecommisunefautede frappeentapantMOVE.LD0,D1j'crasaisleworddepoidsfortde D1etaprsjemeseraistonndetrouver1234dansD1l'en droitojedevraisencoretrouverAAAA. Nousvoyonstoutdesuitelesnor mesavantagesdecesystme. Nousn'avonsnotredispositionq ue8'poches'dedonnes(D0 D7)maissinousnevoulonsgarderq uedeswords,nouspouvonsen mettre2parpoche,c'estdire16entout.Demmesinotre codagenesefaitq uesurdesbytes,c'est32bytesq uenouspou vonsgarder(4parpoche).Celapeutparatreassezvidentmais parexem plesurl'Archimde,cen'estpaspossible.Surcettema chine,unregistrecontientunlongwordourien! RESUMDEVOCABUL AIRE MOVE.L=movelong MOVE.W=moveword MOVE.B=movebyte CONSEILS Prenezvotretemps,reliseztranq uillementcecoursetles prcdents.Vousvoyezcen'estpasbiendurl'assembleur!

COURS D'ASM 68000(par le Froce Lapin) retour au VOLUME 1

****************************************************************** ** *COURSD'ASSEMBLEUR68000SURATARIST* ** *parLeFroceLapin(from44E)* ** *Coursnumro4* ** ****************************************************************** Nousallonsabordermaintenantlesregistresd'adresse.Toutcomme lesregistresdedonnes,cesregistressontcodssur32bits(un longmot).Doncprioriaucunediffrence,puisq uelemicropro cesseurneconnatq uedeschiffres,q ueceuxcireprsententdes donnesoudesadresses,peuluiimporte.C'estvraiengrande

par tieetd'ailleurssurcertainsmicroprocesseurs,iln'ya q u'unoudeuxregistres,q uipeuventcontenirindiffremment adresseoudonnes. Voyons,grceunexemple,lesdiffrencesenceq uiconcernele 68000MOTOROLA. Taponsdoncleprogrammesuivant,aprsavoir,biensr,effac l'ancien,etassemblons. MOVE.L#$12345678,D0 MOVE.B#$AA,D0 MOVE.L#$12345678,A0 MOVE.B#$AA,A0 MOVE.L#$12345678,A1 MOVE.BA1,D1 L'assembleurnote2erreursetnouslesannoncepar'invalidsize atline4'etlammechosepour'line6'.Puisq uec'estlataille etnonl'oprationellemmeq uisembleposerproblme,nousen dduisonsq ueleMOVEversoupartird'unregistred'adresse, n'estpaspossiblesurunbyte.Rectifionsdonclaligne4etla ligne6enremplaantlesMOVE.BpardesMOVE.Wetrassemblons. Note:Lorsq uel'assembleurnoteuneerreur,ildonnelaligneo sesituecelleci.Danscettenumrotationleslignesvidessont comptes. AinsisivousaviezpassuneligneaprsMOVE.L#$12345678,D0les erreursauraienttannoncesligne5et7. Celafaitdjunediffrencepuisq uesivousregardezbienle programme,nousvoulionsraliseruneoprationavecD0:Le rempliraumaximumdesataille,puisvrifierq ueleMOVEdela ligne2,n'affecteraitq uelebytedepoidsfaible,puisraliser lammeoprationsurA0. Impossiblepriori.Tantpis,suitenotremodification, l'oprationsedrouleradoncsurunwordaulieud'unbyte. Dbuggonsnotreprogramme.Premireconstatation:l'assembleur, voyantq uelesoprationsontlieuavecdesregistresd'adresseet nonpasdesregistresdedonnes,aautomatiq uementmodifiles MOVEversA0etA1,pourlestransfor merenMOVEA,ceq uiselit MOVEADDRESS Excutonsleprogrammepaspas.D0prendlavaleur$12345678, puisseulsonbytedepoidsfaibleestmodifi,D0prenantalors lavaleur$123456AA.EnsuiteA0prendlavaleur$12345678.Aprs lalignesuivante,l'oprationaffectantleword,nousdevrions avoir$123400AA.Etbienpasdutout!Nousobtenons$000000AA. Nousvenonsdoncdevoirq u'unregistred'adresseesttotalement influenc(doncsurunlongmot)lorsq u'ilestladestinationde l'opration.Qu'enestildonclorsq u'ilenestlasource? Continuonsdoncnotreprogramme,aveclerem plissagedeA1etde D1.Nousconstatonsparlasuiteq ueseulleworddepoidsfaible deA1vientcraserceluideD1. NOTE:$AAestbienenchiffreenhexadcimal.Sivouspensiez q u'ils'agissaitdesim pleslettresdel'alphabet,dor mez1ou2 jours,etreprenezlecourslapremireleon!

Detoutcecinousdduisons2dfinitions: REGISTRESDEDONNES:Chaq ueregistrededonnesaunelongueurde 32bits.Lesoprandessousfor med'octetoccupentles8bitsde poidsfaible,lesoprandessousfor medemot,les16bitsde poidsfaibleetlesoprandeslongs,latotalitdes32bits. Lebitdepoidsleplusfaibleestadresscommebit0,lebitde poidsleplusfortestadresscommebit31. Lorsq u'unregistrededonnesestutilissoitcommeoprande source,soitcommeoprandedestination,seulelapartieappro priedepoidsfaibleestchange.Lapar tierestantedepoids fortn'estniutilise,nimodifie. REGISTRESD'ADRESSE:Chaq ueregistreaunelongueurde32bits,et contientuneadressesur32bits.Lesregistresd'adresse n'acceptentpasuneoprandedontlatailleestl'octet.Par consq uentlorsq u'unregistred'adresseestutiliscommeoprande source,soitlemotdepoidsfaible,soitl'oprandelongdanssa totalitestutilis,enfonctiondelatailledel'opration. Lorsq u'unregistred'adresseestutiliscommedestination d'oprandeleregistreentierestconcern,indpendammentdela tailledel'opration.Sil'oprationportesurunmot,tousles autresoprandessubissentuneextensiondesignesur32bits, avantq uel'oprationnesoiteffectue. DfinitionsextraitesdudocumentrfEF68000(circuitintgrs MOSTHOMSONEFCIS),45avenuedel'Europe78140Velizy. Danscesdfinitions,nousremarq uonsunnouveauter me:oprande. C'estleter meq uidsignelavaleurutilisedansl'opration. AinsidansMOVE.WD0,D1l'oprandesource,c'estleworddepoids faibledeD0alorsq uel'oprandedestination,c'estlewordde poidsfaibledeD1. Noussavonsmaintenantceq u'estlePC,unregistrededonnes,un registred'adresse,nousavonsunpeuidedeceq uenousmontre lesfentredeMONST,continuonsdoncdcortiq uercefabuleux outil! PourobserverlafentredeMONST,sivousn'avezpasassemblde programme,impossibled'utiliserAlternate+D.Ilvousserarpondu q u'iln'yapasdeprogrammeenmmoire.TapezdoncAlternate+M, vousvoyezMONSTapparatre,maisvousdemandantq uelfichier charger.TapezESCetnousvoicitranq uillepouruneobservation. Nousvoyonsbiendanslafentreduhautnosregistresdedonnes etdroitenosregistresd'adresse.Souslesregistresdedonnes SRpuisPC.LePC(programcounter),noussavonsceq uec'est, maisleSR? LESTATUSREGISTER LeSR(prononcerStatusRegister,ceq uiveutdireenFranais registred'tat),estunregistrecodsurunword(16bits)et q ui,commesonnoml'indiq ue,nousrenseignesurl'tatdu microprocesseur. Ilestl'exemplefrappantdeceq uenousavonsvudansl'introduc

tionducours3,savoirq u'ilestbiendangereuxdetraiterun ensembledebitscommeunsimplechiffre,plusoumoinsgrand. Voyonsladcom positionduStatusRegister. numrodesbits150 appellationT.S...I2I1I0...XNZVC Toutd'abordilfautsavoirq uecertainsbitsduSRnesontpas utiliss.Ilssonticisymbolissparunpointchacun. Commenonsparladescriptiondesbitsdedroite,encommenant parle0. LebitC(CsignifieCarrydoncretenueenFranais). Cebitestmis1lorsq u'ilyauneretenuedanslebitleplus lev(doncdepoidsleplusfort)del'oprandeobjet,dansune oprationarithmtiq ue. LebitV(VsignifieoVerflowdoncdpassementenFranais). Imaginonsuneadditionde2nombrespositifs,lorsq uelersultat vadborderleslimitesduregistres,onobtiendraenfaitun nombrengatifcomplmente2.Eneffetlefaitdemettrele bitdepoidsleplusfort1indiq ueq uelenombreestngatif. Commecen'estpas,danslecasprsent,lersultatrecherch,on estprvenududpassementparlefaitq uelebitVestmis1. Ilindiq uegalement,lorsdedivisions,q ueleq uotientestplus grandq u'unwordoubienq uenousavonsundividendetropgrand. LebitZ(ZsignifieZro).Iln'indiq uepasq uelersultatest gal0,maispluttq uelersultatestpassdel'autrecot de0.Eneffet,cebitest1lorsq u'aprsuneoprationlebit depoidsleplusfortdursultatestmis1,ceq uisignifieq ue noussommesenprsenced'unnombrengatifencomplment2.Le bitN(NsignifieNegate)signifieq uenoussommesenprsence d'unnombrengatif. LebitX(XsignifieeXtenddoncextension).C'estunbitbien spcialq uisecomporteunpeucommeuneretenue.Lesinstructions q uiutilisentcebitleprcisentdansleurnom.ParexempleADDX q uiselitaddwithextendestuneoprationd'additionprenanten comptecebitX.CebitXestgnralementlerefletdubitC, mais,contrairement,celuici,certainesinstr uctionsnelemo difientpas. Lorsq uenoustudieronsdeplusprslesinstructionsdu68000,le faitq uel'instr uctionaffecteounonteloutelbitseraparfois trsim portant. LebitT(TsignifieTracedoncsuivreenFranais). Lorsq uecebitest1,le68000setrouveenmodeTrace. Alorsl,soyezbienattentif,ceq uivasuivreestprimordial pourlasuitedescours!!! LemodeTraceestunmodedemiseaupointpourlesprogrammes.Et oui,c'estcarrmentDANSlemicroprocesseurq u'unetellecommande estinsre.Achaq uefoisq uele68000excuteuneinstruction, ilvavoirdansq ueltatsetrouvelebitT.S'iltrouvecebit 0,ilpasselaprochaineinstruction.Parcontre,sicebitest 1,le68000laissedect(tem porairement)leprogramme principalpoursedtournerversuneroutine(un'bout'depro gramme)q uiafficheraparexem plelavaleurdetouslesregistres (D0D7etA0A7).Imaginonsq u'ilfailleappuyersurune

touchepoursor tirdecetteroutine:Nousavonsdonctoutletemps deconsultercesvaleurs.Nousappuyonssurunetouche:finde notreroutine,le68000retournedoncauprogrammeprincipal, excutel'instructionsuivante,testelebitT,letrouvenou veau1,sebranchedoncsurnotreroutine,etc...Nousavons doncunmodepaspas.Or,vousavezdjutiliscettepar ti cularitenvisualisantledroulementdesinstructionsavec MONST! Tapezleprogrammesuivant: MOVE.W#$23,D0 MOVE.W#$15,D1 AssemblezetfaitesAlternate+DpourpassersousMONST.Appuyez unefoissurControl+ZetobservezleStatusRegister.MONSTa affichT,indiq uantainsiq uecebitest1.Noussommesdonc bienenmodeTrace.QuittezleprogrammeparControl+C. Nousarrivonsmaintenantnousposeruneq uestion:Le68000a trouvlebitT1.D'accord,ilsaitoestsonStatusregister etilsaitq uelebitTc'estle15me.Maisaprs?Le68000 s'estdtournversuneroutineq uidanslecasprsentsetrouve treunepar tiedeMONST. Maiscommentatiltrouvcetteroutine?MONSTesteneffetun programmetoutfaitordinaire,q uiatchargenmmoire par tirdeladisq uette,etq uipeuttreplacn'im porteodans cettemmoire. Unepremiresolutionconsisteraittoujoursplacerceprogramme aummeendroit.MOTOROLAauraitainsipuconcevoirle68000en prcisant:Lesprogrammesdemiseaupointq uiserontappels grcelamise1dubitT,devrontcommencerl'adresse$5000. Simple,maistrsgnantcarildevientpratiq uementimpossiblede fairersiderplusieursprogrammesenmmoiresimultanment,sans courirlerisq ueq u'ilssemarchentsurlespieds!!! Ilyapourtantuneautresolution,unpeuplustorduemaisenre vanchebeaucoupplussouple,q uiconsistechargerleprogramme demiseaupointn'importeoenmmoire,denoterl'adressela q uelleilsetrouve,etdenotercetteadresseunendroitpr cis.Lorsq uele68000trouveralebitT1,ilfonceraceten droitprvul'avanceparMOTOROLA,ilytrouveranonpasla routinemaisunlongmot,adressedecetteroutine,laq uelleil n'auraplusq u'serendre. Cetendroitprcis,oserastockl'adressedelaroutine excuterlorsq uelebitTseratrouv1,c'estunendroitq uise situedanslepremierkilodemmoire(doncdansles1024premiers bytes).Enl'occurrencepourlemodetraceils'agitdel'adresse $24. Rsumons:MONSTsechargeenmmoire.C'estunprogrammecomplet dontcertainesroutinesper mettentl'affichagedesregistres. MONSTregardel'adresselaq uellecommencentcesroutines,note cetteadressepuisvalamettrel'adresse$24.Celongmotest doncplacl'adresse$24,$25,$26et$27puisq uenoussavons q uele'diamtre'du'tube'mmoiren'estq ued'unoctet(byte). Lorsq uelemicroprocesseurtrouvelebitT1,ilval'adresse $24,ilyprlveunlongmotq uisetrouvetrel'adressedes routinesdeMONST,etilfoncecetteadresse.ok? Nousallonsmaintenantraliserunpetitprogrammeetnousallons

'planter'votreATARI! Tapezceq uisuit: MOVE.W#$1234,D1 MOVE.W#$6789,D2 MOVE.W#$1122,D3 AssemblezpuistaperAlternate+DpourpassersousMONST.Faites unefoisControl+Z.LebitTduStatusregisterestmis1,indi q uantq uenoussommesenmodeTrace.Commenousavonsexcutune instruction,D1setrouverempliavec$1234.Appuyonsmaintenant surAlternate+3. Nousvenonsd'activerlafentrededroite(lanumro3). AppuyonssurAlternate+A.Unedemandes'affiche:nousdevons indiq uerq uelleadresseseralapremirevisibledanslafentre. Ilfauttapercetteadresseenhexadcimal.Noustaponsdonc...24. (pasde$avant,MONSTsaitdeluimmeq uenousparlonsenhexa) Nousvoyonss'afficherl'adresse24enhautdelafentreeten faceunchiffreq uiestl'adressedenotreroutinedeMONST! Pourmoic'est00027086maiscommejel'aiditprcdemmentcela dpenddesmachines.Dansmoncaslorsq uele68000trouvelebitT 1,ilfoncedoncexcuterlaroutineq uisetrouveen$00027086. Jevaisdoncmodifiercetteadresse!AppuyonssurAlternate+Epour passerenmodedition.Lecurseurestplacsurlepremiernibble del'adresse.Tapezparexem ple11112222oun'im porteq uelautre chiffre. Repassezmaintenantdanslafentre1entapantAlternate+1. Maintenantrflchissons:NousallonsrefaireControl+Z.Le68000 vafonceren$24,vamaintenantytrouver$11112222,etvafoncer cetteadressepouryexcuterceq u'ilvaytrouverc'estdire n'im porteq uoi!Ilyatrspeudechancepourq u'ilrussissey liredeschosescohrentesetvousindiq uerauneerreur. Allezy,n'ayezpaspeur,vousnerisq uezpasdecasservotre machine! HopControl+Zet,suivantlescas,vousobtenezdiversmessages (Illegalexception,BusErroretc...). QuittezenfaisantControl+Coubienendernierressortfaitesun RESET. J'espreq ueceprincipeestTRESTRESBIENCOMPRIS.Sicelavous semblepeuprsclair,reliseztoutcarlasuitevatrssouvent fairerfrenceceprinciped'adressedanslepremierkilo, contenantl'adressed'uneroutine. Laprochainefois,nousfinironsd'tudierleStatusRegister,en attendantjevaismeprendreunepetitevodkabienfrache.Ala vtre!

COURS D'ASM 68000(par le Froce Lapin) retour au VOLUME 1

****************************************************************** ** *COURSD'ASSEMBLEUR68000SURATARIST* ** *parLeFroceLapin(from44E)* ** *Coursnumro5* ** ****************************************************************** Suitedel'tudeduStatusregister,lesinterruptions. Etantdonnq uenousavonsparfaitementcomprisceq uisepassait danslecasole68000trouvaitlebitTduStatusRegister1, c'estdiretoutlesystmed'adressefixelaq uelleontrouve l'adressedelaroutine,nousallonspouvoircontinueretenfait finirladescriptiondesautresbitsdeceStatusRegister. LebitS/Super viseur Le68000peutvoluerdans2modes:lemodeSuperviseuretle modeUtilisateur.Danslemodesuper viseur,nousavonsaccs TOUTESlesinstructionsdu68000etTOUTElammoire,alors q u'enmodeutilisateurcertainesinstructionsnepeuventtreem ployes,etl'accscertainespar tiesdelammoireestin terdit. Effectivementcelapeutsembleraupremierabordsur prenant: Vousavezachetunemachine,c'estq uandmmepourpouvoirl'uti liserdanssatotalit!Lencore,noustombonsdanslepigeq ui consistemlangerATARISTet68000MOTOROLA.Grcel'nor me puissancedecemicroprocesseur,ilesttoutfaitpossible d'envisageruntravailmultiutilisateur. GonflonsnotreST8Megaoctets,q uiponsled'unnor medisq ue dur,etconnectonsleplusieurster minaux.Nousavonsdoncplu sieursclaviers,plusieurscrans,maisenrevancheunseulmi croprocesseur,celuidel'unitcentrale(dontlenomprendici toutesavaleur)etuneseulemmoire,danslaq uelletoutlemonde piochetoursdebras.L,ladiffrenciationSuper viseur/Utili sateurprendsonsens.LeSuperviseur,c'estle'propritaire'de l'unitcentrale,lespersonnesutilisantlester minauxn'tant q uedes'utilisateurs'.Lefaitdeneleurautoriserq u'unepartie desinstr uctionsetdelammoire,apourbutd'viterlesplanta gescarsidanslecasd'unemonoutilisation,unplantagetotal delamachineesttoujoursgnant,danslecasd'unemultiutili sation,celarelvedelacatastrophe,caronneplanteplusle travaild'uneseulepersonnesmaisdeplusieurs! LebitSduStatusRegister,s'ilest0,indiq ueq uenoussommes enmodeUtilisateur.A1,ilindiq ueq uenoussommesenSuper viseur. ToutcommeMONSTindiq uaitl'tatTraceenindiq uantTctdu SR,ilindiq ueUouSsuivantlemodedansleq uelnousnous trouvons. Jetonsuncoupd'oeilenarriresurlechapitredcrivantlebro chagedu68000(courssupplmentaireA).Nousretrouvonscette distinctionauniveaudesbrochesFC0,FC1,FC2.

Avantd'tudierles3bitsrestantduSR(I2,I1,I0),ilfautsa voirq ueleStatusRegisterestenfaitsparen2octets.L'oc tetdepoidsfort(bit815)estappeloctetsuperviseur,alors q uel'octetdepoidsfaibleestl'octetutilisateur. Enmodeutilisateuronnepeutcrireq uedansl'octetutilisateur alorsq u'enmodesuper viseurnousavonsaccsauworddanssato talit. L'octetutilisateurcontenantlesbitsdeconditions(bitsXNZV C),onl'appellegalementregistredescodesconditions(Condi tionCodeRegister),ouCCR. LesbitsI2,I1etI0(InterruptMask) Ces3bitsserventreprsenterlesmasq uesd'interruption.Mais voyonstoutd'abordceq u'estuneinterruption.Nousavonstudi prcdemmentlefonctionnementliaubitT(trace).Lorsq uece bitestpositionn,leprogrammeprincipalestinterrompu,aupro fitd'uneroutinespciale.C'estenq uelq uesorteleprincipede l'interruption. Uneroutineeninterruption,c'estunboutdeprogrammediffrent duprogrammeprincipal.Aintervallesrguliersoucaused'un lmentextrieur,le68000vainterrom pre(c'estbienlemot!)le programmeprincipal,pourallerexcutercetteroutine.Lorsq ue celleciserater mine,ilyauraretourauprogrammeprincipal. L'exem pleleplussimpleestceluidutlphone:Jetravaille monbureau(c'estleprogrammeprincipal)lorsq ueletlphone sonne.Jedtectel'interruption,j'arrtemontravailetjed croche(excutiondel'interruption).Laconversationter mine,je raccrocheetjeretournemonoccupationpremire. Maintenant,pluscompliq u:Interruptiondemontravailprincipal. Jedcroche,maisencoursdeconversation,onsonnelaporte. Linter vientleprincipedelaprioritd'interruption.Sila ported'entreuneprioritsuprieurecelledutlphone, j'interromptlaconversationtlphoniq uepourallerouvrir:Ily ainterruptiondel'interruption.Unefoisclaq ulaporteau 124memarchanddebalayettesdelajournejereprendsletl phone,jefinislaconversation,jeraccrochepuisjemeremets matcheprincipale. Parcontre,sil'interruption'ported'entre'aunepriorit infrieurecelledutlphone,j'attendraid'avoirfiniavecce luiciavantd'allerouvrir. Les3bitsI2,I1etI0(Interruptmask)per mettentdedfinirle niveauminid'interruptionq uiseraprisencours.Commeonne possdeq ue3bits,onnepeutdfinirq ue7niveau,de17(on neparlepasiciduniveau0,carc'estleniveaudetravail'nor mal'delamachine.Sileniveauest0,c'estq u'iln'yapas d'interruption.).Ainsi,sinousavons011pources3bits,nous obtenons3commeniveaumini.Lesinterruptionsdeniveaux1et2 neserontdoncpasprisesencompte.Puisq ueleniveauindiq upar les3bitsseraacceptcommeniveaud'interruption,nousend duisonsq uesilesbitssont111,seulslesinterruptionsdeni veau7serontprisesencompte.Ornousvoyonsbiengalement q u'iln'estpaspossiblededfinirunniveauminimumde8par exemple,etdoncq u'ilseraimpossibled'empcheruneinterruption deniveau7.Ceniveauestdoncdit'nonmasq uable'.

Lesinterruptionsdeniveau7sontdoncappelesNMIc'estdire nonmaskableinterrupt. Anoterq u'iln'estpaspossibled'opreruneslectionprciseet parexem pled'autoriserlesinterruptionsdeniveaux4,5et7et pascellesdeniveau6.Silesbitssont100,lesinterruptions deniveau4,5,6et7serontautorises.Vouspouvezjeternou veauuncoupd'oeilsurlecoursannexeA.Vousretrouverezbien surle68000lesbrochesI2,I1etI0.Uneremarq uecependant,ces brochessontactivesl'tatbas,c'estdireq u'elleindiq ue q uelq uechoselorsq u'iln'yapasdecourant,l'inversedesau tresbroches. ParcontreleurreprsentationauseinduStatusRegistersefait danslebon'sens'. Noussommesmaintenantamensnousposeruneq uestionsimilaire celleq uenousnoussommesposelorsdel'tudedumodeTrace. Le68000reoitunedemanded'interruption.Ilcompareleniveau decellecilalimitefixeparlesbitsIduStatusRegister. Sil'interruptionestacceptable,ilsauveleStatusRegisteret metenplacedanslesbitsIleniveaudel'interruptionq u'ilva excuterafindenepastregnparuneautredemandeplusfai ble.Ilstoppealorsl'excutiondesonprogrammeprincipalpour sedtournerverslaroutine.Unefoiscelleciter mine,ilre vientauprogrammeprincipal.C'estbienjoli,maisoatil trouvlaroutineeninterruption?Etbiensimplementenutili santlemmeprincipeq uepourlemodeTrace.Nousavonsvuq ue lorsq uelebitTtaitenplace,le68000allaitvoirl'adresse $24etq u'ilytrouvaitunlongmot,celongmottantl'adresse delaroutine.Pourlesinterruptions,leprincipeestlemme:si c'estuneinterruptiondeniveau4,c'estl'adresse$70q uele 68000trouveraunlongmot,celongmot,commedanslecasdumode Tracetantl'adressedelaroutineexcuter.Sil'interruption estdeniveau1,c'estlelongmotsitul'adresse$64etc...Il estbienvidentq uec'estauprogrammeurdeplacerceslongmots cesadresses:Onprpareuneroutine,oncherchesonadressede dpart,puisonnotecellecil'endroitprcisol'onsaitq ue le68000viendralachercher. Toutescesadressestantsituesdanslepremierkilodemmoire denotremachine,tudionsdeplusprsces1024octets.(Vous trouverezuntableaureprsentantcekiloenannexe)Pourlemo mentnousn'allonsfaireq u'yreprerlesq uelq ueslmentsq ue nousavonsdjtudis.Toutescesadressesontdesnumrosd'or dres,etcausedeleurfonctionpropre(nefaireq uecommuniq uer l'adressed'uneroutine),onlesappelle'vecteurs'. Nousretrouvonsbienen$24levecteur9,correspondantaumode Trace,de$64$7Clesvecteurscorrespondantsauxinterruptions deniveau17.Leniveau0,tantleniveau'nor mal'detravail, n'apasdevecteur. Nouspouvonsdjexpliq uerd'autresvecteurs:Ainsilenumro5 (adresse$14)c'estlevecteurdedivisionpar0.Le68000nepeut pasfairededivisionpar0.Lorsq ueleprogrammeessaye,ilse produitlammechoseq uepourlemodeTrace:Ayantdtectune divisionpar0,le68000foncel'adresse$14,ytrouveune adressederoutineetvaexcutercelleci.Danslaplupartdes cascetteroutinevaafficherq uelq uesbombesl'cranettout bloq uer.Riennevousem pchecependantdeprparervotrepropre routineetdemettresonadresseen$14.Ainsidansunprogramme demath(beurkk!)cetteroutinepeutafficher"divisionpar0im

possible".Sil'utilisateurtenteunetelledivision,inutilede fairedestestspourleprvenirdecetteimpossibilit,le68000 s'enchargeratoutseul. Lesautresvecteurs Erreurbus.Nousavonsvuprcdemmentq uele68000utilisece q uenousappelonsunbuspourrecevoiroutransmettredesdonnes. Siuneerreursur vientsurceluici,ilyasautal'adresse$8 pourtrouverl'adressedelaroutineq uiseraalorsexcute. Erreurd'adresse.Le68000nepeutaccderq u'desadresses paires.S'iltented'accderuneadresseimpaire,ilseproduit uneerreurd'adresse(mmeprincipedetraitementq uel'erreur bus,oulemodeTrace,vecteur,adresseetc...).Nousverronsplus tardq u'ilnousserapossibled'accderdesadresseimpaires, maisavecdesprcautions. Instr uctionsillgales.Nousavonsvuq ueletravaildel'as sembleurconsistaitsimplementtransfor merenchiffres,ligne parligne,notreprogramme.Cependant,sinousmettonsenmmoire uneimage,celleciseragalementplacedansle'tubemmoire' sousfor medechiffres.Ladiffrencec'estq ueceschiffresl neveulentriendirepourle68000entantq u'instruction.Si nousordonnonsau68000d'allercetteadresse(cellede l'image)ilessayeradedcrypterceschiffrescommedesinstruc tions,ceq uidclencherauneerreur'instr uctionillgale'. Violationdeprivilge.Nousavonsvuq uele68000pouvaitvo luerenmodeutilisateurouenmodesuper viseur.Onditq uel'tat superviseurestl'tatprivilgi(outatdeplushaut privilge).Tenterd'accderenmodeutilisateurunezonem moirerserveaumodesuper viseuroubiententerd'excuterune instructionprivilgie(doncutilisableuniq uementensupervi seur)provoq uerauneerreur'violationdeprivilge'. Connatrecesdiffrentstypesd'erreursesttrsimportant.En effetlaphasedemiseaupointestgnralementlongueenassem bleur,surtoutaudbut.Detrsnombreuseserreurspeuventsurve nir,dontlacauseestparfoisjustesousnotrenez.Letypemme del'erreur,sicelleciestbiencomprise,peutsouventsuffire orienterlesrecherchesplusprcismentetainsiraccourcirle tem ps(pnible)derecherchedugraindesableq uibloq uetout! Touslesvecteursconstituantlepremierkilodemmoireayant pourbutdedrouterleprogrammeprincipalversuneroutineex ceptionnelle,sontappels'vecteursd'exceptions'. Lesvecteursrestantsseronttudisdanslessriessuivantes,au furetmesuredesbesoins.Chaq uechoseensontemps! Pouraujourd'huinousnousarrteronsl.Cefutcourtmaisle prochainchapitreseraconsacrlapileetserabiengros! Lapileestunproblmeaussisimpleq uelesautres,q uidemande simplementdel'attention.Aprsavoirtudiceq u'estlapile, ilnenousresteraplusq u'undemicoursavantd'abordernospre miers'gros'programmes! Courage!maissurtoutprenezvotretem ps!Relisezlescoursprc dentmmesitoutvousparatcompris.Plusnousavanceronsplus lenombredepetiteschosesaugmenteraetmoinsilyauradeplace

pourlapluspetiteincomprhension.

COURS D'ASM 68000(par le Froce Lapin) retour au VOLUME 1

****************************************************************** ** *COURSD'ASSEMBLEUR68000SURATARIST* ** *parLeFroceLapin(from44E)* ** *Coursnumro6* ** ****************************************************************** LAPILENousavonsdjutilislanotionde'tube'enceq ui concernelammoire.Nouspouvonsystockerdiffrenteschoses,et sinousnousrappelonsl'adresse,nouspouvonsrevenirplustard cetendroitpouryrcuprerceq uenousyavionsdpos. Essayezaveccepetitprogramme: MOVE.L#$12345678,D0 MOVE.LD0,$493E0 MOVE.L#0,D0 MOVE.L$493E0,D0 AssemblezpuispassezsousMONST.Avancezenpaspas.D0est d'abordrem pliavec$12345678,puislecontenudeD0esttransfr l'adresse$493E0.Notezbienq u'iln'yapasde#devant$493E0, afind'indiq uerq u'ils'agitbiend'uneadresse.Cettelignetant excute,activezlafentre3([Alternate+3])etplacezledbut decellecisurl'adresse$493E0([Alternate+A]puistapez493E0) Vousvoyezbien12345678cetendroitdansle'tube'.Sij'ai choisitcetteadressec'estparceq u'ellesesitue300Kilodu dbutdelammoire.Elleestdoncaccessiblemmesurun520,et elleestsuffisammentloignepournepassetrouverdansGENST ouMONST.Eneffetiln'yaq u'un'tube'mmoire!Noussommesdonc entraind'criredanslammoirealorsq u'unepar tiedecelleci estoccupeparGENSTetMONST!Ecrirel'intrieurdeszonesoc cupesparcesprogrammesestpossible,ceq uientraneratrs certainementq uelq uesplantagesdeceuxci! Continuonsenpaspas,nousmettonsD00puislecontenude l'adresse$493E0(sans#)estremisdansD0. Lapile,c'estunepar tiedecetube,maisq uenousallonsgrer d'unemanireunpeudiffrente.Eneffet,aulieudeplacerles donnesdansletubeetdenoterleursadresses,nousallonscette foiscilesempileretpourlesrcuprer,lesdpiler.L'avantage c'estlegaindetem ps(paslapeinedesedemanderq uelle adresseonastocklesdonnes)etungaindeplace(sic'est pourstockertem porairementdesdonnes,inutiledeconserverune por tionde'tube'justepoura). Parcontrel'inconvnientc'estq uelagestiondoittrerigou reuse.Imaginonsq uej'empileunpremierchiffrepuis10autres

pardessus.Ensuitejedpile,maiserreurdemapart,jene dpileq ue9chiffres!Quandjedpileraiunefoisdeplus, croyantretrouverlepremierchiffreem pil,jercupreraien faitlepremierdelasriede10. Nousenconcluons2choses:d'abordq uelapileestunmoyensim plepoursauvegarderdesdonnes,maisensuiteq uec'estune sourcededsagrmentpotentiel,telq uecertainsprogrammeursh sites'enservir.C'estgnralementcaused'unmanq uederi gueurceq ui,jel'esprenevousarriverapas. Uneautreremarq ue:ledernierlmentplacsurlapileseratou jourslepremierensortir.C'estbienlemmeprincipeq uece luid'unepiled'assiettes:Regardezchezvous,ilyasrement unenor mepiled'assiettes,maisparlesimplefaitq uelerange mentaprslelavagesefaitparempilageetq uemettrelatable sefaitpardpilage,vousmangezenfaittoujoursdanslesmmes assiettes...(d'ol'intrtdebienfairelavaisselle!) CettestructuredepileestappelestructureLIFO,c'estdire LastInFirstOut,enFranais:'dernierentrpremiersor ti'. Cettestructureestdiffrented'uneautrestructurefrq uemment rencontreeninfor matiq ue,celledelafile,appeleaussistruc tureFIFO(FirstInFirstOut),lafiletantsimilaireune filed'attentedevantunguichet:lepremierdanslafileserale premierparti. Maisconcrtement,q uoiser tlapile?Nousallonslevoiravec unexemple.Tapezleprogrammesuivant:

MOVE.L#$12345678,D0 MOVE.L#$BD88,D1 MOVE.L#$BD88,A0 BSRAJOUTE MOVE.L#0,D0 MOVE.LD2,D0 AJOUTEMOVE.L#$11112222,D2 ADD.LD1,D2 RTS Premireremarq ue:ceprogrammediffredesprcdentsparlefait q uenousutilisonsunetiq uette,unlabelq uisenommeAJOUTE. Cemot,'AJOUTE',doitsetrouvertoutgauche,contrelebordde lafentredel'diteur.Cen'estpasq uelq uechoseplacerDANS letubemaisbienunemarq ueACOTEdutube. Autreremarq ue,leslistingsenassembleur,contrairementauxlis tingsdanslesautreslangagessontassezlibresauniveauprsen tation.Ilesttoutafaitpossibledepasserdeslignes,ceq ui estfaiticipoursparerles2parties.Lessourcesassembleur sontbiensouventtrslongs,etmmesicelafaitperdreq uelq ues lignes,espacerlesmodulesper metdes'yretrouverplusfaci lement. Assemblonspuisdbuggons.AvanonspaspasavecControl+Z.Les 3premireslignesnoussontfamiliresmaispaslaq uatrime. CelleciselitBRANCHSUBROUTINEAJOUTE,c'estdirebranche mentunesubroutinenommeAJOUTE.Pourprciserversq uellesu

broutineondsiresediriger,sontiq uetteestprcise.Icien l'occurrencec'estAJOUTEmaislenomim portepeu.Ilesttouta faitpossibledemettredesnomsassezlongsetjenepeuxq ue vousconseillerd'viterdansvoslistingslesnomsdugenreXY, ZouencoreAX1etc...q uisontq uandmmemoinsexplicitesq ue DEBUT_IMAGE,NEW_PALETTEoubienEND_GAME. Maintenantsoyeztrsattentifs:lalecturedecetteinstr uction denombreuseschosesvontsepasser.L'ordredemandedoncau68000 depoursuivrelalecturedesesinstructionsdansunsous programmedontledbutsesituedansletube,enfacedel'ti q uetteAJOUTE.Cependantils'agitbienicid'unsousprogramme. Cecisupposeq u'unefoister min,le68000remonterapourexcuter laligneq uisuitBSRAJOUTE,enl'occurrenceMOVE.L#0,D0.Ques tion:commentle68000sauratiloremonter?Eneffetlepropre d'unesubroutineestdepouvoirtreappeleplusieursfoisetde plusieursendroitsdiffrentsetdepouvoirchaq uefoisrevenir l'endroitmmeq uil'aappel. Ehbienle68000vajustementutiliserlapilepournotercelieu deretour.Cettepileabiensuruneadresse,osetrouvetelle note?EnA7.Etoui,ceregistreunpeuspcialcorrespondla pile. MaisA7'alors?Etbienc'estaussiunepile,maisrser veau modeSuperviseur.Ainsisinousfaisionstournerconjointement2 programmes,l'unenmodeutilisateuretl'autreensuper viseur, chacunauraitsapile. Avantd'excuterlaligneBSRAJOUTE,observonsattentivementles registresd'adressesetlesregistresdedonnes. Nousavonsvuq uelesregistres,q u'ilssoientdedonnesou d'adresse,peuventcontenirdesnombrescodssur32bits.Nous avonsvuaussiq u'ilexistait2sortesdenombrespourlamachine: ceuxsetrouvantl'intrieurdu'tube'etceuxcetrouvant l'extrieur,CONTREcetube,etindiq uantunesortededistance parrapportaudbutdeceluici. Cesecondtypedenombreestappeladresse.Orilesttoutfait possibledestockerunnombrereprsentantuneadressedansun registrededonnes(D0D7).Imaginonsmaintenantq uenousdevions stockerlescored'unjoueurdanslejeuq uenousprogrammons.Ce scorevaparexempletreplacdanslammoire(dansle'tube') l'adresse$80792. Maisq uesepasseratilsinoustransfronscetteadressepour l'utilisergrceA1parexem ple?etbienA1vaprendrelavaleur $80792.C'estbienjoli,maisceq uinousintresse,cen'estpas a!Ceq uenousvoulonsmodifier,vrifieretc..c'estceq u'ily aDANSletubecetteadresse. Etbiennotredbuggeranticipeunpeucettedemande.Eneffet, partantduprincipeq uelesnombresstocksenD0D7ouA0A6peu ventreprsenterdesvaleursd'adresses,ilindiq uectdesre gistres,ceq u'ilyadansletube,l'adresseindiq uedansle registre. Enceq uiconcernelesregistresdedonnes,MONSTafficheleur droitelavaleurde8octetssetrouvantdansletubel'adresse indiq uedansleregistre.Pourlesregistresd'adresse,cesont 10octetsq uisontindiq us.Vousremarq uezcertainementq u'en faceduregistreD0(q uidoitcontenir$12345678sivousavezfait

correctementavancerleprogramme),MONSTn'aaffichq uedes toiles.C'estnor malcarlenombre$12345678correspondunem placementmmoireq uiseseraitaccessibleq u'avec305mgade mmoire!!!MONSTindiq uedoncq u'ilnepeutpasatteindrecette zonemmoireenaffichantdestoiles. RegardonsmaintenantD1etA0.Lesnombressitusleurdroite montrentlammechose,ceq uiestnor malpuisq ueles2registres D1etA0sontremplisaveclemmenombre.Onditq u'ilspointent surl'adresse$BD88.Allonsvoirenmmoirehistoiredevrifier l'affichage.Activezlafentre3avecAlternate+3.Cellecinous affichelecontenudelammoire,maisnoussommesloinde$BD88! Demandonsdoncq uecetteadressesoitcelleduhautdelafentre 3,avecAlternate+A.Taponscetteadresse(BD88).Lafentre3se rafficheavecenhautl'adresse$BD88.Danslacolonnededroite nousvoyonslecontenudelammoire,dontnousavionsdjun aperuavecl'affichagedroitedeD1etdeA0.C'estclair? Ractivonslafentre1(alternate+1).Nor malementlapetitefl chedoittoujourssetrouvezenfaceduBSRAJOUTE.Noterle chiffresetrouvantdansleregistreA7(doncl'adressedela pile)etobserverbienleschiffresdroitedeceregistre,tout enfaisantControl+Z. Leschiffresontchang!D'abordleregistreA7necontientplus lemmenombre.Celuiq uis'ytrouveactuellementesteneffet pluspetitq ueleprcdent.Notonsq uecettediffrenceestde4. L'adressedelapileadonctdcrmentede4.Deplusdes chiffresonttplacsdanslapile(onlesvoitdroitedu registreA7).Or,regardezbienlenombreq uiestgauchede l'instructionMOVE.L#0,D0denotreprogramme,c'estdire l'adresselaq uelledevrarevenirle68000unefoislasubroutine ter mine:c'estbiencenombreq uiatplacdanslapile.Ily adoncem pilagedel'adressederetour,ceq uiexpliq uegalement lechangementd'adressedelapilede4.Eneffetuneadresseest codesur4octets! Note:tantdonnq uenousparlonsdepile,onditplussouvent q uelesdonnessontmisessurlapileetmoinssouventdansla pile. ContinuonsnotreprogrammeavecControl+Z.Noussommesmaintenant danslasousroutine.ArrtezjusteavantRTS.C'estcetteins tructionq uivanousfaire"remonter".ElleselitRETURNFROMSUB ROUTINE. ObservonsA7(savaleurmaisaussilecontenudu'tube'cette adresse)etfaisonsunpas(Control+Z).L'adressederetourat dpile,A7areprissonancienneadresseetnouspointonsmainte nantsurMOVE.L#0,D0. QuittezceprogrammeavecControl+C,effacezleettapezceluici. MOVE.L#$12345678,D0 MOVE.L#$AAAAAAAA,D1 BSRAJOUTE MOVE.WD2,D3 AJOUTEMOVE.W#$EEEE,D1 MOVE.W#$1111,D2 ADD.WD1,D2 RTS

Assemblezpuisdbuggez.Avancezpaspas:D0prendlavaleur $12345678D1lavaleurAAAAAAAA,puisnouspartonsverslasubrou tineAJOUTE. MalheureusementcelleciutiliseD1etauretournousconstatons q ueceluicinecontientplusAAAAAAAA.Eneffetlebranchement unesubroutinenesauveriend'autreq uel'adressederetour,et enassembleurlesvariableslocalesetautresbidouillesdelanga gesvolusn'existentpas!C'estdoncnousdesauverlesregis tres,etc'estceq uenousallonsfairemaintenant. Note:leregistreA7contenantl'adressedusommetdelapile (cetteadressevariantbiensravecl'empilageetledpilage), onpeutconsidrercetteadressecommeundoigtindiq uantper p tuellementlesommetdelapile.PourcetteraisonleregistreA7 estaussiappelpointeurdepile.Commetoujoursnousutiliserons levocabulaireanglosaxon,etnousdironsStackPointer,enabr gSP.Pourcetteraisonetparceq uel'usageenestainsi,nous remplaceronsdsor maisA7parSP(q uineselitpas"ssp"mais bienSTACKPOINTER!!!). Imaginonsq uenousvoulionssauvegarderD0l'entredelasu broutine: Ilnefaudrapasoublierdelercuprerla sor tie!DplaonsdonclecontenudeD0verslapile.Essayons MOVE.LD0,SPetrflchissons:CecivamettrelecontenudeD0 dansA7,malheureusementcen'estpasceq uenousvoulonsfaire. EneffetnousdsironsmettrelecontenudeD0DANSletube, l'endroitindiq uparA7(doncSP). CecivasefaireavecMOVE.LD0,(SP),lesparenthsesindiq uant q uelasourcedel'oprationc'estl'intrieurdutube. Effacezleprogrammeactuelettapezlesuivant. MOVE.L#$12345678,D0 MOVE.LD0,(A0) MOVE.WD0,(A1) Assemblezpuiscommed'habitudedbuggez.D0prendlavaleur $12345678,puisD0esttransfrdanssatotalit(causedu.L q uiindiq ueq uel'oprationsepassesurunmotlong)l'adresse q uiestnotedansA0,ensuitelepoidsfaibledeD0esttransfr dansletubel'adressenoteenA1.Pourlevrifier,vous pouvezactiverlafentre3etdemanderplacerl'adressenote dansA0enhautdecettefentre,etvousconstaterezq u'effecti vementlavaleurdeD0setrouvebiendansle'tube'. Nousallonsdoncutilisercetypedetransfer tpoursauvegarderD0 Maisrflchissonsencoreunpeu.MOVE.LD0,(SP)vabienplacer lecontenudulongmotD0dansletube,maissinousvoulonspla ceruneautrevaleursurlapile,cellecivacrasernotrepre mirevaleurcaravecMOVE.LD0,(SP)l'adresseindiq uparSP (doncA7)nevapastremodifie,ceq uidevraittrelecas. Nousallonsdoncraliserletransfertdiffremment(enfaitnous allonsencoreamliorernotrevocabulaire,puisq uenousallons parlermaintenantdetypeoudemoded'adressage). Nousallonsfaire

MOVE.LD0,(SP) C'estlemoded'adressageavecprdcrmentation.Derrirecevo cabulairepompeuxsecachetouteunesuited'vnements.Enune seulinstruction,nousdiminuonsl'adressedupointeurdepilede 4(puisq uedansnotreexemplenousvoulionstransfrerunlongmot donc4octets),etnousplaonsenmmoirecetteadresselelong motD0. PourrcuprerD0,c'estdiredpiler,ilfaudrafaire: MOVE.LD0,(SP)+ Commenousavionsdcrmentlepointeurdepilepourensuited poserD0cetteadresse,nousrcupronsdoncD0sansoublieren suitedemodifierlepointeurdepiledansl'autresens,pour q u'ilretrouvesonancienneposition.Notonsq uedanslecaspr sent,etsinousnouscontentonsderflchirtrssommairement, ilauraittpossibledesauverD0parMOVE.LD0,(SP)etdele rcuprerparMOVE.L(SP),D0.C'estcomptersanslefaitq uela pileestunrservoircommunbeaucoupdechoses.Ilfautdoncde prfrencejouerchaq uefoislejeud'unempilagecorrectetr flchimaisaussid'undpilage'collant'parfaitementavecl'em pilageprcdent. Vrifionstoutcelaavecl'exemplesuivant: MOVE.L#$12345678,D0valeurdansD0 MOVE.W#$AAAA,D1valeurdansD1 MOVE.LD0,(SP)sauveD0.Lsurlapile MOVE.WD1,(SP)idemD1maisenword MOVE.L#0,D0remetD00 MOVE.W#0,D1etD1aussi MOVE.WD1,(SP)+rcupreD1(word) MOVE.LD0,(SP)puisD0 AssemblezpuisfaitesdfilerceprogrammepaspassousMONST. Notezplusieurschoses:toutd'aborddescommentairesontt ajoutsausource.Ilsuffitq ueceuxcisoientsparsdesop randespourq uel'assembleursacheq u'ils'agitdecommentaires. Sivousdsireztaperunelignedecommentaires(c'estdireq ue surcelleciiln'yaurariend'autreq uececommentaire),vous devezlefaireprcderducaractretoileoud'unpointvirgule. Secondechose,nousavionsem pilD0puisD1,ensuitenousavons dpilD1puisD0.Ilfauteneffetbienfaireattentionl'ordre etauxtaillesdeceq uenousempilons,afindepouvoirdpiler lesmmestailles,dansl'ordreinversedel'empilage. Voiciundernierexemple. MOVE.L#$12345678,D0 BSRAJOUTEsautverssubroutine MOVE.LD0,D1transfer t AJOUTEMOVE.LD0,(SP)sauved0.lsurlapile MOVE.W#8,D0 MOVE.W#4,D1 ADD.WD0,D1 MOVE.L(SP)+,D0 RTS AssemblezpuissuivezledroulementsousMONSTentudiantbien ledroulement.Vousvoyezbienq ueleBSRsauvel'adressedere toursurlapile,puisq ueD0etmispardessuspourtreensuite

rcupr.Ensuitec'estl'adressederetourq uiestrepriseetle programmeremonte. Maintenant,provoq uonsuneerreur,unetoutepetiteerreurmais q uiserafatalenotreprogramme.AulieudercuprerD0parun MOVE.L(SP)+,D0,commettonsunefautedefrappeettaponsla placeMOVE.W(SP)+,D0. Assemblezetsuivezpaspas.AumomentdelasauvegardedeD0, cesontbien4octetsq uivonttreplacssurlapile,modifiant cellecid'autant.Malheureusementlarcuprationnevaremo difiercettepileq uede2octets.Aumomentol'instr uctionRTS vaessayerdercuprerl'adressederetour,lepointeurdepile serafauxde2octetsparrapportl'endroitosetrouverelle mentcetteadressederetour,etceluicivasefaireune adressefausse.Enconclusion:prudenceetrigueur!!!!!! Nousvenonsdoncdevoirq uelapiletaitutiliseparle68000 pourcertainesinstr uctions,etq u'elletaitbiencommodecomme sauvegarde. Ilestaussipossibledel'utiliserpourtransmettredesdonnes, c'estceq uenousallonsvoirpourconclurecechapitre. Problme:NotreprogrammeprincipalutiliselesregistresA0A6 etD0D6.Ilvaappelerunesubroutinedestineadditionner2 nombresetretournerlersultatdansD7.Ilfaudradoncutili ser2registresparexempleD0etD1pourtravaillerdansnotre routine,etdonclessauvegarderl'entredecelleci. Voiciledbutduprogramme. MOVE.L#$11111111,D0 MOVE.L#$22222222,D1 MOVE.L#$33333333,D2 MOVE.L#$44444444,D3 MOVE.L#$55555555,D4 MOVE.L#$66666666,D5 MOVE.L#$77777777,D6 Les7premiersregistressontrem plisavecdesvaleursbidons, justepournousper mettredevrifierleursventuellesmodifica tions. Maintenantilfautplacerles2nombresq uenousdsirionsaddi tionner,dansunendroittelq u'ilspourronttrercuprsparla routined'addition.Plaonsdoncces2nombressurlapile. MOVE.L#$12345678,(SP) MOVE.L#$00023456,(SP) BSRAJOUTEetenroute! Rdigeonsmaintenantnotresubroutine,afindesuivrel'ordrede travaildu68000. Deq uoiauronsnousbesoindanscetteroutine? DeD0etdeD1q uivontrecevoirlesnombresempilsetq ui vontnousser viraucalcul.Ilvanousfalloirgalementunregis tred'adresse.Eneffet,lorsq uenousallonsdpilernousallons modifierlepointeurdepile,ornousvenonsd'effectuerunBSRle 68000adoncempill'adressederetoursurlapile,etmodifier cellecivacompromettreleretour!Nousallonsdonccopier

l'adressedelapiledansA0,etutilisercettecopie. Note:j'aidcidd'utiliserD0,D1etA0maisn'importeq uelau treregistreauraittoutaussibienconvenu. Commenonsdoncparsauvernos3registres. Celapourraitsefairepar: MOVE.LD0,(SP) MOVE.LD1,(SP) MOVE.LA0,(SP) Note:jerappelleq uecelaselitmovelong! Maisle68000possdeuneinstructiontrsutiledansunpareil cas,q uiper metdetransfrerplusieursregistresd'uncoup. Nousallonsdoncfaire: MOVEM.LD0D1/A0,(SP) Ceq uiselit:movemultipleregisters. SinousdevionstransfrerdeD0D5nousaurionsfait: MOVEM.LD0D5,(SP) et,pourtransfrertouslesregistresd'unseulcoup: MOVEM.LD0D7/a0A6,(SP)Compris? Sauvonsmaintenantl'adressedelapiledansA0.Commec'est l'adresseq u'ilfautsauveretnonpaslecontenu,celasefait par: MOVE.LA7,A0transfertduregistreA7versA0 Maintenantnousallonsrcuprerles2nombresq uenousavionsem pilavantl'instructionBSR. Imaginonsceq uis'estpass.(AceproposjevousconseilleTRES fortementdevousaiderd'unpapieretd'uncrayon.N'hsitezpas criresurcescours.Cesontlesvtresetjenelesrclamerai pas! Faireunpetitdessinoudeplacerdespicessurvotrebureau pourvousaidercomprendreestuneexcellentechose.Biensou ventlesmanipulationsdemmoireonttendancedevenirabstrai tesetunpetitdessinarrangebiendeschoses!) Nousavonsdcalde4octetsleSTACKPOINTER,puisnousyavons dpos$12345678.Maisdansq uelsensavonsnousdcalceSP? Versledbutdelammoire,versl'adresse0denotretubepuis q uenousavonsfait(SP).Lepointeurdepileremontedoncle longdutube.Nousavonsensuiterecommenclammechosepoury dposer$23456.EnsuiteBSR,doncmmechosemaisralisautoma tiq uementparle68000afind'ydposerl'adressederetour(4oc tets). Estcetout?Noncarunefoisrendudanslasubroutinenousavons dpossurlapilelesregistresD0,D1etA0.Letransfertayant teffectusurlefor matlongmot(MOVEM.L)nousavonstransfr

3fois4octetssoit12octets(bytes). NotrecopiedeA7q uiestenA0nepointedoncpassurnos2nom bresmaisbeaucoupplusloin.Lenombreq uenousavonsplacen secondsurlapileestdonc16versledbutdutube(faitesle calcul:1BSR,+12bytesdesauvegardecelafaitbien16bytes)et lenombreplacenpremiersurlapilesuitsoncopainetse trouvedonc20bytesd'ici,envertutoujoursduprincipedela pile:ledernierentr,c'estlepremiersor ti. Nouspouvonsdoncdireq ue$23456estA0dcalde16etq ue $12345678estA0dcalde20. Pourrcuprerces2nombresplusieursactionssontpossibles: 1)ajouter16l'adressedeA0puisrcuprer. Uneadditiond'adressesefaitparADDA(addadress). Nousfaisonsdonc ADDA.L#16,A0 A0pointedoncmaintenantsur$23456,rcupronsdonccenombreet profitonsdumoded'adressagepouravancerl'adresseindiq uedans A0etainsitoutdesuitetreprtpourrcuprerl'autrenombre. MOVE.LA0)+,D0 L'adresseayanttaugmentenouspouvonsdoncrcuprerla suite: MOVE.L(A0)+,D1 2)Autremthode,utilisantunautremoded'adressage: Lamthodeprcdenteprsenteuninconvnient:aprsleADDA,A0 estmodifietsinousvoulionsgardercetteadresse,ilaurait fallulesauvegarder. OubiennousaurionspuajouterledcalageA0,rcuprerles donnesetensuiteretirerledcalageA0pourq u'ilretrouve sonttatdedpart. Autremthodedonc,indiq uerdansl'adressageledcalageappli q uer.Celasefaitpar: MOVE.L16(A0),D0 MOVE.L20(A0),D1 Celaper metdepointersurle16meoctetpartirdel'adresse donneparA0etensuitedepointersurle20meparrappor tA0. Dansles2cas,A0n'estpasmodifi. Voillelistingcompletdecetexem ple. MOVE.L#$11111111,D0initialisationdeD0 MOVE.L#$22222222,D1idem MOVE.L#$33333333,D2idem MOVE.L#$44444444,D3idem MOVE.L#$55555555,D4idem MOVE.L#$66666666,D5idem MOVE.L#$77777777,D6idem MOVE.L#$12345678,(SP)passagenombre1danslapile MOVE.L#$00023456,(SP)passagenombre2danslapile BSRAJOUTEetenroute! MOVE.LD7,D0transfer tdursultatpour

voir.. *notresubroutine UTEMOVEM.LD0D1/A0,(SP)sauvegarde MOVE.LA7,A0copiedeSPenA0 MOVE.L16(A0),D0rcupre23456etlemetenD0 MOVE.L20(A0),D1rcupre12345678enD1 ADD.LD0,D1addition MOVE.LD1,D7transfertdursultat MOVEM.L(SP)+,D0D1/A0rcupration RTSetretour *Note:ceprogrammen'ayantpasdefin'nor male', lorsq uevous*serezrenduauretourdelasubroutine c'estdireaprslaligne"MOVE.LD7,D0",q uittez leavecControl+C,AssemblezetsuivezbienTOUTle droulement. Biensr,ilauraittpossibledefairecelatoutdiffremment. ParexemplenousaurionspuviterdetravailleravecA0.Eneffet 16(A0)et20(A0)nemodifiantpasA0,ilauraittplussimplede faire16(A7)et20(A7)aulieuderecopierd'abordA7enA0.De mmeilauraittpossibledetransfrer$23456directementenD7 et$12345678enD1puisdefaireADD.LD1,D7afind'viterla sauvegardedeD0(q uiauraittinutilise),etletransfertD1 versD7q uin'auraitalorspaseulieud'tre.Demmenousau rionspuretournerlersultatparlapileaulieudelefairepar D7. Beaucoupdevariantespossiblesn'estcepas? Pourter miner,unpetitexercice.Relancercepetitprogrammeet analysezPARFAITEMENTTOUTceq uis'ypasse.Quelq uechoseneva pas!Jevousaideendisantq u'ils'agitbiensrdelapile. Cherchezetessayezdetrouvercommentfairepourarrangera. Larponseseraaudbutduprochaincoursmaisessayezd'imaginer q uec'estvotreprogrammeetq u'ilnemarchepasetcherchez!!! Bon,lecourssurlapileseter mineici.Cefutunpeulongmais jepense,pastropcom pliq u.Relisezle,carlapileestuntruc dlicatdontnousallonsnousservirTRESabondammentdanslepro chaincours.Sivousavezpeuprstoutcomprisjusq u'iciilest encoretempsderattraperletem psperduetdetoutreprendreau dbut,carilfautavoirPARFAITEMENTtoutcom prisetpaspeu prs! Afindevousremonterlemoral,jevoussignaleq uevoustespres q uelamoitiducours...

COURS D'ASM 68000(par le Froce Lapin) retour au VOLUME 1

****************************************************************** ** *COURSD'ASSEMBLEUR68000SURATARIST*

** *parLeFroceLapin(from44E)* ** *Coursnumro7* ** ****************************************************************** Nousabordonsmaintenantleseptimecoursdelasrie.Latotali tducourstanten2sries(enfinl'heureojetapecesli gnesc'estceq uiestprvu!),celuiciestledernierdelapre mire! Alafindeceluicietsivousaveztrsattentivementettrs scr upuleusementsuiviles6coursprcdents,vousdevrieztre capabled'afficherdesimages,sauverdesfichiersetc... Maistoutd'abordrevenonsnotrepileetlaq uestionducours prcdent.Avezvoustrouvl'erreur? EhbienregardezlavaleurdeA7avantd'yempiler$12345678et $23456,etcomparezlavaleurlasor tieduprogramme.Malheur! cen'estpaslamme!Nor mal,sinouscomptonslesempilageset lesdpilages,nousnousrendonscompteq uenousavonsempil8 octetsdeplusq uenousn'avonsdpil.Eneffet,commenousavons rcuprnos2nombresensauvegardantaupralableA7dansA0, nousn'avonspastouchA7aumomentdelarcupration. Heureusementd'ailleurscarleretourdelaroutineauraittmo difi! Partantduprincipededpilagedansl'ordreinverse,ilnousfaut donccorrigerlapileunefoisrevenudelasubroutine.Commenous avonsempilenfaisant(SP)ilfautajouterpourq uelapilere deviennecommeavant.Ayantem pil2nombresde4octetschacuns, nousdevonsajouter8octetsl'adressedelapilepourlacorri gercommeilfaut.Nousavonsdjvucommentaugmenterune adresse,avecADDA. IlconvientdoncderajouterjusteaprslaligneBSRAJOUTEune additionsurSP,enfaisantADDA.L#8,SP(q uiselitADDADRESS LONG8STACKPOINTER) Unappelunesubroutineenluipassantdesparamtressurla pileseradonctypiq uementdugenre: MOVE.W#$1452,(SP) MOVE.L#$54854,(SP) MOVE.L#TRUC,(SP) BSRBIDOUILLE ADDA.L#10,SP Nouspassonsleworddevaleur$1452danslapile(modifiedonc de2octets),lelongmotdevaleur$54854danslapile(modifie de4octets),l'adresserepreparlelabelTRUCdanslapile (modifiede4octets)puisnouspartonsversnotresubroutine.Au retourcorrectionde2+4+4=10octetsdustackpointerpourrevenir l'tatd'origine. Lapilepossdeunepetiteparticularit.Nousavonsvudansles coursprcdentsq uele68000taitunmicroprocesseur16/32 bits.Illuiesttrsdifficiled'accderdesadressesimpaires. Orsinouscommenonsempilerdesoctetsetnonplusuniq uement deswordsoudeslongwords,leStackPointerpeuttrsfacilement

pointersuruneadresseimpaire,ceq uirisq uedeplanternotre machine. Taperleprogrammesuivante: MOVE.L#$12345678,D0 MOVE.LD0,(SP) MOVE.BD0,(SP) MOVE.L#$AAAAAAAA,D1 AssemblezpuispassezsousMOnstetavancezpaspasenobservant bienl'adresseduSP(donccellevisibleenA7). Nousconstatonsq uelepointeurdepilesemodifiebiende4lors q uenousfaisonsMOVE.LD0,(SP)maisq u'ilsemodifiede2 lorsq uenousfaisonsMOVE.BD0,(SP)alorsq uenouspouvions nousattendreunemodificationde1!Leserreursprovoq uspar desadressesimpairessontdonccartesaveclapile.Merci MonsieurMOTOROLA! (Note:ceciestunepar ticularitdesregistresA7etA7'.Sinous avionstravaillavecA3parexem pleaulieudeSP,celuiciau raiteuuneadresseim paire.C'estletyped'usageq uiestfaitde lapileq uiaconduitlesgensdeMOTOROLAcrercettediff rence.) A bordonsmaintenantl'ultimechapitredecettepremiresrie: LES'TRAP' UneinstructionTRAPestcomparableuneinstructionBSR.Elle agitcommeunbranchementversuneroutine.Cependant,contraire mentl'instructionBSRq uidemandetrecompltepar l'adresse,c'estdirelelabelper mettantdetrouverlaroutine, l'instructionTRAPsecontented'unnumro.Cenumropeutvarier de015.Lorsq uele68000rencontreuneinstr uctionTRAPilre gardesonnumroetagitenconsq uence.Vousvousrappelerdes toutpremierscours,danslesq uelsnousavionsparlduprincipe utilisparle68000lorsq u'iltrouvaitlabitT(modetrace)du SR(statusregister)1?Sautdanslepremierkilodemmoire (tabledesvecteursd'exceptions),recherchedel'adresse$24,on regardedansletubecetteadresse,onytrouveunlongmot,ce longmotc'estl'adressedelaroutineetonfoncecetteadresse excutercetteroutine. Etbienregardezlafeuilleq uidonnelalistedesvecteursd'ex ceptions,etjetezuncoupd'oeilauxvecteurs3247.Lesvoil nosvecteursTRAP!!!Lorsq uele68000rencontreparexemple l'instructionTRAP#8,ilfoncel'adresse$0A0pourytrouver l'adressedelaroutineq u'ildoitexcuter. Aprioricelasemblebiencompliq upourpasgrandchose!Eneffet ilfautprvoirsaroutine,lamettreenmmoire,puisplacerson adressedanslevecteur.Pluscompliq uq u'unBSR,surtoutq ueBSR REGLAGE_CLAVIERetplusparlantq u'unTRAP#5ouunTRAP#12!!! L,nousretournonsencoreenarrire(jevousavaisbienditq ue TOUTtaitimportantdanscescours!!!!!)pournoussouvenirdela notiondemodeUtilisateuretdemodeSuper viseur.LeSuper viseur accdetoutelammoireettouteslesinstructions,pasl'Uti lisateur. S'ils'agitd'interdirel'Utilisateurdesinstructionsassem

bleurtellesq ueRESET,notreUtilisateurneserapastropgn parcontrec'estenceq uiconcernelammoireq uetoutvatrs srieusementsecom pliq uer.Voulezvousconnatrelarsolution danslaq uellesetrouvevotremachine?C'estfacile,c'estnot l'adresse$FF8260. Vousvoulezchangerlapalettedecouleur?Riendeplussimple, elleestnoteen$FF8240.Im primerunpetittexte?Al'aise,il suffitd'employerlesregistresdecommunicationsversl'extrieur duchipson(tonnantn'estcepas!).C'estsituen$FF8800et $FF8802. Pardon???Quoi???VoustesUtilisateur???Ahbon....Parceq ue c'estgnant...Toutescesadressessontsituesdanslazonem moireuniq uementaccessibleauSuper viseur..... L'Utilisateursetrouvebiencoincetlespossibilitss'entrou ventdrlementrduites.Heureusement,lesTRAPsontl!!!Grce cesystmel'utilisateurvaavoiraccsdeszonesq uiluisont nor malementinterdites.Pasdirectement,biensr,maisgrceau superviseur.Lesuper viseura,eneffet,fabriq udesroutines q u'ilaplacenmmoireetdontlesadressessontdanslesvec teursTRAP.Cesroutinessontexcutsenmodesuperviseuretta penttourdebrasdansleszonesmmoiresprotges.Lorsq ue l'UtilisateurveutlesutiliserillesappelleparlesTRAP.La protectionestdoncbienassurecarl'Utilisateurnefaitq ued clencheruneroutinedontgnralementilneconnatq uelespara mtresluipasseretletypedemessageq u'ilauraenrponse. C'estdecettemanireq uenouspouvonsaccderausystmed'ex ploitationdenotreAtari!!! Petitrappel:q u'estceq u'unsystmed'exploitation? Lepremierq uirpondc'estGEMseprendunepairedeclaq ues.GEM c'estl'interfaceutilisateuretpaslesystmed'exploitation. Lesystmed'exploitation(ouOperatingSystem)dansnotrecas c'estTOS.LaconfusionentreinterfaceUtilisateuretsystme d'exploitationvientdufaitq uecertainssystmesd'exploitation intgrentgalementuninterfaceutilisateur:c'estparexemplele cassurPCavecMSDOS. Lesystmed'exploitationc'estunensemblederoutineper mettant d'exploiterlamachine.Cesmultiplesroutinesper mettentpar exempled'afficheruncaractrel'crand'ouvrirunfichier,de for materunepistededisq uette,d'envoyerunoctetsurlaprise MIDIetc...Enfaittousles'trucs'debase,maisjamaisdecho sescompliq ues.Uneroutinedusystmed'exploitationneper met trapas,parexemple,delirelecontenud'unfichiersetrouvant surladisq uette.Eneffetcecidemandeplusieursoprationsavec chaq uefoisdestests: Ouverturedufichier:existetil, ladisq uetten'estellepasabmeetc... positionnementdupointeurdanslefichier:lepositionnement s'estilbienpass? Lecture:N'astonpasessaydeliretropd'octetsetc,etc.... Ilfaudradoncbiensouventplusieursappelsdesroutinesdiff rentespourraliserceq uel'onveut. Ilesttoujourspossibledesepasserdusystmed'exploitation,

spcialementlorsq uel'onprogrammeenassembleur.Eneffetl'en sembledesroutinesdel'OS(abrviationdeOperatingSystem)est destinunusagecommun,toutcommed'ailleurslesroutinesde l'interfaceUtilisateur. Ceciexpliq uebiensouventlarcrituredetoutespetitespar tiesdusystmeafinden'utiliserq uelestrictncessaire.La routinedegestionsourisduGEMparexem pledoits'occuperdela sourismaisaussiduclavier,duMIDIetdujoystick.Pourunjeu ilpeuttreintressantdercrirecetteroutineafindegrer uniq uementlejoysticketdoncd'avoiruneroutineq ui'colle' plusaubesoin. Nousverronsbeaucoupplustardcommentregarderdanslesystme d'exploitationafindepouvoirparlasuiteralisersoimmeses routines.Avantcela,utilisonssimplementcesystme! Nousallonsdoncl'appelergrceauxTRAPs. 4trapssontaccessibles'nor malement'dansleST: TRAP#1routinesduGEMDOS TRAP#2routinesduGEM TRAP#13routinesduBIOS TRAP#14routinesduBIOStendu(eXtendedBiosdoncXBIOS) GEMDOS=Graphicenvironmentmanagerdiskoperatingsystem GEM=Graphicenvironmentmanager(sedcoupeparlasuiteen AES,VDIetc..Unchapitredelasecondesrieyseraconsacre) BIOS=BasicInputOutputSystem XBIOS=ExtendedBasicInputOutputSystem LesautresvecteursTRAP(0,312et15)sont,bienentendu,ac tifsmaisaucuneroutinen'yestaffecte.Nouspouvonslesutili serpourpeuq uenousymettionsavantnosroutines,ceq uisera l'objetdupremiercoursdelasecondesrie. Nousconstatonsq ueleTRAP#1per metd'appelerleGEMDOS.Oril n'yapasq u'uneroutineGEMDOSmaisunebonneq uantit.Deplus cesroutinesdemandentparfoisdesparamtres.Commentfairepour lestransmettre?Etbientoutsimplementparlapile!!! Taperleprogrammesuivant: MOVE.W#65,(SP) MOVE.W#2,(SP) TRAP#1 ADDQ.L#4,SP MOVE.W#7,(SP) TRAP#1 ADDQ.L#2,SP MOVE.W#0,(SP) TRAP#1 ADDQ.L#2,SP Assemblezceprogrammemaisneledbuggezpas,lancezlepar Alternate+X.VousvoyezapparatreunAsurl'crandevotreST. AppuyersurunetoucheethopvousrevenezdansGENST!Analysons ceq uenousavonsfaitcarldetrstrsnombreuseschosesse sontpasses,etavouonsle,nousn'avonsrienvu!!!!! Toutd'abordnousavonsappellafonctionCconout()duGemdos. NousavonsappelleGemdosavecleTRAP#1,maiscetteinstruc

tionnousaenvoyversunensemblederoutine,toutesappartenant auGemdos.Pourindiq uercetteroutineprincipaleversq uelle subroutineduGemdosnousdsironsaller,nousavonspasslenu mrodecettesubroutinedanslapile.Partanttoujoursduprin cipedudernierentrpremiersorti,ilestbienvidentq uece numrodoitsetrouverempilendernierafindepouvoirtred pilenpremierparlaroutineprincipaledeGemdos,afinq u'elle puisses'orienterverslasousroutineq uinousintresse.La fonctionCconoutayantlenumro2,nousavonsdoncfaitMOVE.W #2,(SP).(voirplushautpourserappelerq ue2peuttrsbien trecodsurunoctetmais,commenoustravaillonsverslapile, ilserapriscommeunworddetoutesfaons). MaintenantleGemdosayanttrouv2commeparamtre,s'oriente verscetteroutineaunombarbare,q uiapourfonctiond'afficher uncaractresurl'cran.Unefoisrenduverscetteroutine,le Gemdosvacherchersavoirq uelcaractreafficher.C'estpour celaq uenousavonsplaclecodeASCIIdececaractresurla pileavecMOVE.W#65,(SP). Note:Pourl'assembleur,lecodeASCIIpeuttreremplacparla lettreellemme.NousaurionsdoncpucrireMOVE.W#"A",(SP) sansoubliertoutefoislesguillemets! DeretourduTRAPnousdevonscorrigerlapile,afind'viterle problmeq uiafaitl'objetdudbutdececours.Nousavionsem pilunworddonc2octetsetensuiteunautrewordsoitautotal 4octets.Nousallonsdoncajouter4auSP.Nousprofitonsici d'uneoprationd'additionplusrapideq ueADDA,ADDQq uiselit addq uick.Cetteadditionestautorisejusq u'8inclus.Iln'est paspossibleparexem pledefaireADDQ.L#12,D1 Ensuitenousrecommenonslemmegenredechose,aveclafonction 7duGEMDOS(nommeCrawcin)q uiellen'attendaucunparamtre, c'estpourq uoinouspassonsjustesonnumrosurlapile.Cette fonctionattendunappuisurunetouche.Ayantpassunparamtre surunword,nouscorrigeonsauretourduTRAPlapilede2. Leprogrammeseter mineaveclafonction0duGEMDOS(Pter mo)q ui librelammoireoccupeparnotreprogrammeetleter minepour debon.Cetteroutinen'attendpasdeparamtre,nousnepassons danslapileq uesonnumrodonccorrectionde2.Note:lacorrec tiondepilepourlafonctionPter mon'estlq ueparsoucipda gogiq ue.Cettefonctionter minantleprogramme,notredernire instructionADDQ.L#2,SPneserajamaisatteinte! Plusieurschosesmaintenant.D'abordnesoyezpastonnsdesnoms bizarresdesfonctionsduGEMDOS,duBiosouduXbios.Cesontles vritablesnomsdecesfonctions.Enassembleurnousnelesutili seronspasdirectementpuisq uel'appelsefaitpasunnumro,mais enCparexemplec'estainsiq uesontappelescesfonctions.Dans lescoursd'assembleurdeSTMAG(dontlesvertuspdagogiq ues sontplusq uedouteuses),nouspouvonslireq uelesnomsdeces fonctionsonttchoisisauhasardetq uelafonctionMalloc() parexem pleauraitpus'appelerMstroum ph().C'estridicule! Chacundesnomsest,commetoujourseninfor matiq ue,l'abrviation d'unexpressionanglosaxonneq uiindiq ueconcrtementlebutou lafonction.AinsiMallocsignifieMemoryAllocation,cettefonc tionduGEMDOSper metdoncderserverunepar tiedemmoire!!! Malheureusementdenombreuxouvragespassesurce'dtail'etne fournissentq uel'abrviation. Cecin'em pcheq u'ilvousfautimprativementunelistedetoutes

lesfonctionsduGEMDOS,duBIOSetduXBIOS.Cesfonctionssont dcritesdansleLivreduDveloppeur,danslaBiblemaisgale mentdanslesdernirespagesdeladocduGFA3. Note:dansladocduGFA,ilmanq uelafonctionGEMDOS32q uiper metdepasserenSuper viseur.Cemoden'tantpourlemomentq ue d'unintrtlimitpourvous,pasdepaniq ue,nousdcrironstout celadanslasecondesrie. Continuonspourlemomentavecdespetitsexemples. Affichonsunephrasesurl'cranlaplaced'unlettre. Cecivasefaireaveclaprogrammesuivant: MOVE.L#MESSAGE,(SP)adressedutexte MOVE.W#9,(SP)numrodelafonction TRAP#1appelgemdos ADDQ.L#6,SPcorrectionpile *attented'unappuisurunetouche MOVE.W#7,(SP)numrodelafonction TRAP#1appelGEMDOS ADDQ.L#2,SPcorrectionpile *finduprogramme MOVE.W#0,(SP) TRAP#1 SECTIONDATA MESSAGEDC.B"SALUT",0 Unenouveaut,lepassaged'uneadresse.Eneffetlafonction9du gemdosdemandecommeparamtrel'adressedelachanedecaractre afficher.NousavonsdoncdonnMESSAGE,q uiestlelabel, l'tiq uetteservantreprerl'emplacementdansletubeose trouvenotrephrase,toutcommenousavionsmisunetiq uette AJOUTEpourreprernotresubroutine,danslecoursprcdent. Cemessageestunesuitedelettres,toutescodessurunoctets. Pourcetteraisonnousdisonsq uecettechaneestuneconstante constitued'octet.Nousdfinissonsdoncuneconstanteenoctets: DefineConstantByte,enabrgDC.BAttentioncecin'estpasune instruction68000!C'estsim plementunenotationpourl'assem bleurafindeluidire: n'essayepasd'assembleracommeducodenor mal,cen'estq u'une constante.Demmenousdfinissonsunezone. Lafonction9duGEMDOSdemandeceq uelaphraseseter minepar 0,ceq uiexpliq uesaprsencelafin. Ralisonsmaintenantunprogrammesuivantleschmasuivant: affichaged'untextedeprsentationeninversevido; cetextedemandesionveutq uitterouvoirunmessage sionchoisitq uitter,byebye sinononaffiche'coucou'etonredemandeetc...

Dtaillonsunpeuplus,entraduisantceprogrammeenpseudocode. C'estainsiq uel'onnommelafaondeprsenterundroulement d'oprationenlangageclairmaisdontl'organisationserapproche djdelaprogrammation. AFFICHE"QUITTER(Q)OUVOIRLEMESSAGE(V)?" SIREPONSE=Q VAAQUITTER SIREPONSE=V AFFICHE"COUCOU" RETOURNEAAFFICHE"QUITTER...." SIREPONSEDIFFERENTERETOURNEAAFFICHE"QUITTER..." Parcommodit,celistingsetrouvesurunefeuillespare (listingnumro1/Coursnumro7). Toutd'abordaffichagedelaphraseq uiser virademenu,avecla fonctionGemdos9.Cettephrasesetrouvel'tiq uetteMENU,al lonslavoirpourladtailler.Nousremarq uonstoutd'abordq u' ellecommencepar27.Aprsavoirregarddansunetabledecode ASCII,nousnotonsq u'ils'agitducodeASCIIdelatoucheEscape. Nouscherchonsdoncd'abordafficherEscape.Mais,commevousle savezsrement,cecaractren'estpasim primable! Impossibledel'afficherl'cran! C'esttoutfaitnor mal!enfaitiln'estpasq uestionicid'af ficherrellementuncaractre,maispluttdefaireappelun ensemblederoutines,rpondantaunomdeVT52.Pourappelerces routines,ilfautafficherEscape.Voyantcelalesystmesedit: "Tiens,onchercheafficherEscape,c'estdoncenfaitq uel'on chercheappelerleVT52". L'mulateurVT52ragitdonc,maisq uedoitilfaire?etbien pourlesavoirilvaregarderlalettreq uisuitEscape.Enl'oc currenceils'agiticideEmajuscule.Regardezdanslesfeuilles annexescettesriedecours,ilyenauneconsacreauVT52. Nousvoyonsq ueEscapesuivideEeffacel'cran,c'estdoncce q uivasepasserici. Ensuiteiltaitditdansle'cahierdescharges'denotrepro gramme,q ueleMENUdevaittreafficheninversevido. ConsultonsdonclafeuillesurleVT52.Nousytrouvons:Escapeet 'p'minuscule=passeencritureinversevido.Justeceq u'il nousfaut!Nousremettonsdonc27,"p"dansnotrephrase. Troisremarq ues: toutd'abordilfautremettrechaq uefoisEscape.Faire 27,"E","p"auraiteffacl'cranpuisauraitaffichp. Seconderemarq ue,ilfautbienfaireladiffrenceentreleslet tresmajusculesetleslettresminuscules.Escape+Eeffacel'cran maisEscape+eactivelecurseur!!! Troisimeremarq ue,onpeutreprsenterdanslelistingunelettre parson'caractre'oubienparsoncodeASCII. AinsisionveutafficherSalut,onpeutcrirelelistingcomme ceci: TXTDC.BSalut",0 oubiencommecela:

TXTDC.B83,97,108,117,116,0 Ilestdemmepossibledemlangerlesdonnesendcimal,en binaire,enhexadcimaletlescodesASCII.Parexemplececi: