jb_jb_fr a écrit :Cette instruction TFM est vraiment génial pour gagner des cycles.
Oui mais attention, elle est interruptible. La doc dit qu'en cas d'interruption l'instruction refait un cycle de lecture, et je me suis demandé si du coup les (l'un des?) regs sont eux-aussi ré-incrémentés. Il semblerait que oui puisque la doc 6309 que j'ai trouvée (
6309 technical reference) indique qu'il peut y avoir des trous dans la recopie en cas d'interruption. Il faudrait avoir le code sourcce VHDL ou la machine a état exacte du 6309 pour trancher correctement.
Sur OS9, $0000 contient quelle valeur ? Si c'est 0, dans le TFM x,y+ final on peut remplacer x par z, le registre qui vaut toujours 0 (en voilà un registre rigolo)
Tu pouvais aussi faire "CLR ,Y ; LEAX ,Y; TFM X,Y+" sans avoir besoin de la référence à NullByte. Sur 6309 il y a vraiment 36 façon de faire la même chose.
Le 6309 est vraiment sympa aussi avec ses instructions registres à registes complètement orthogonaux. Par exemple on peut faire un EORR D,PC ce qui fait un XOR entre PC et D avec le résultat dans PC (allez savoir à quoi ca peut servir, contrairement à ADDR D,PC). Du coup "LEAX D,X" qui prend 4+2=6 cycles en 6309 (8 en 6809) peut avantageusement être remplacé par un ADDR D,X en 4 cycles seulement.
Je crois qu'on peut aussi utiliser D en registre d'addresse sur les modes indexés. Il y a pleins de trucs et astuces à explorer avec le 6309.