jasz a écrit:
Daniel, non pas smague mais coulom, Comment tu t'y es pris pour dcmoto?
Dans DCMOTO, j'utilise des tables, comme indique precedemment par Yoann. Il y a 3 tables de 256 lignes : une pour les instructions normales, une pour les instructions avec preoctet 10 et une pour les instructions avec preoctet 11. Pour chaque instruction, la table donne le mnemonique, le type d'adressage (immediat 1 octet, immediat 2 octets, branchement court, branchement long, direct, indexe, operation sur les piles, etc.) et le nombre de cycles.
Le desassembleur retrouve le mnemonique et le nombre de cycles dans la table, et decode l'instruction en fonction du type d'adressage. Dans le cas du type 'indexe' il y a une autre table donnant les regles de decodage en fonction de l'octet suivant le code instruction.
J'ai ecrit egalement 'Desassembleur, Dump et Patch' pour MO5, en m'inspirant d'un programme publie dans Microtom. Le scan de Microtom doit etre sur le site Serveur87. Mon adaptation est en telechargement a la page Programmes du site dcmoto. Je dois avoir encore un autre programme en Basic MO5, mais je n'ai pas ose le publier a cause de sa lenteur
On peut aussi trouver l'inspiration dans des desassembleurs sur PC (voir
http://koti.mbnet.fi/~atjs/mc6809/). J'en ai ecrit aussi quelques-uns en C pour tester différentes techniques. En resume, on peut distinguer la methode des tables, expliquee ci-dessus, et la methode des branchements conditionnels : "switch()" en C, ou "CASE" en Basic. Il y a des avantages et des inconvenients pour chacune. Si on privilegie la vitesse d'execution, je crois que la methode des tables est meilleure.
Daniel