Logicielsmoto.com

Nous sommes le 24 Juil 2019, 07:49

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 7 messages ] 
Auteur Message
 Sujet du message: Jeu: Le mot le plus lent
MessagePosté: 09 Avr 2014, 23:32 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1110
Localisation: Brest
Je me suis posé la question de trouver l'instruction la plus lente à timing constant sur 6809 dans le but de faire une pause.

Le CWAI avec ses >=20 cycles semble être un bon candidat mais il n'a pas un timing constant. MUL avec ses 11 cycles est pas mal dans son genre. Mais peut on faire mieux? J'ai trouvé
Code:
CMPD [$1234,PCR]
qui fait 7+8=15 cycles à lui tout seul avec très peu d'effets de bords (seul CC est trashé).

Si on s'autorise les opcodes non légaux on peut le préfixer par autant de $10 que l'on veut pour rendre l'instruction arbitrairement lente et longue. Mais sans avoir recours à ce subterfuge, existe-t-il une instruction qui dépasse les 15 cycles ? C'est le mot le plus lent!

A noter que CMPD [$nnnn,PCR] est aussi l'une des instructions les plus longues car il faut 3+2=5 octets en mémoire pour la définir. Du coup je me demande s'il existe une instruction standard qui dépasse les 5 octets ? Bref, le mot (machine) le plus long en quelque sorte.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Jeu: Le mot le plus lent
MessagePosté: 10 Avr 2014, 07:00 
Hors ligne

Inscription: 24 Juil 2010, 16:08
Messages: 415
Localisation: France
En deux mots, je connait:
Code:
delay:
    LBSR return
return:
    RTS


En appelant ce code avec un LBSR delay on a:
[list=]
[*]Premier appel: 9 cycles
[*]Saut interne: 9 cycles
[*]RTS: 5 cycles
[*]RTS: 5 cycles
[/list]

Soit un total de 28 cycles pour 7 octets. On peut ajouter des LBSR qui comptent chacun 14 cycles, ce qui permet d'avoir un délai ajustable:
Code:
d42:
    LBSR return
d28:
    LBSR return
return:
    RTS


Plus lent?
Code:
delay:
    JMP delay


2 octets, et un délai... infini :W


Sur MO on peut également utiliser SWI2 et SWI3 (20 cycles), qui pointent tous les deux sur un RTS (5 cycles de plus). Soit 25 cycles en 2 octets. Je ne sais pas ce qu'il en est sur TO.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Jeu: Le mot le plus lent
MessagePosté: 10 Avr 2014, 08:32 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1054
Localisation: France (24)
SWI, c'est un bon rapport qualité prix (19 cycles pour 1 octet avec un RTI de 15 cycles pour un octet, ce qui fait un total de 34 cycles pour 2 octets). Bon, il faut définir un pointeur pour SWI, ce qui ajoute un peu, mais la perte est vite amortie si l'usage est intense.

EDIT: Et non, aucune instruction ne dépasse les 5 octets.

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Jeu: Le mot le plus lent
MessagePosté: 10 Avr 2014, 21:35 
Hors ligne

Inscription: 21 Avr 2010, 10:59
Messages: 230
et en faisant un push/pull de tous les registres? ça fait un paquet de cycle pour pas grand chose (4 octets me semble-t-il) et c'est neutre (dans un contexte ou on a effectivement une pile).

_________________
http://www.alternative-system.com


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Jeu: Le mot le plus lent
MessagePosté: 10 Avr 2014, 21:47 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1054
Localisation: France (24)
Dans ce cas, un :

Code:
        LDA    #$XX
NEXT    DECA
        BNE     NEXT

... c'est pas trop mal aussi. 5 octets (ou moins selon les possibilités d'optimisations) et de 7 à 1282 cycles par tranche de 5...

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Jeu: Le mot le plus lent
MessagePosté: 10 Avr 2014, 21:56 
Hors ligne

Inscription: 21 Avr 2010, 10:59
Messages: 230
dans la pratique le MUL est à mon avis le bon choix pour la plupart des cas. le CMPD [PC,$1234] occupe 3 octets... autant aligner 3 MUL... perso c'est ma façon de faire dans les rares bouts de programme ou j'ai besoin de ça. quelques MUL pour le plus gros et des NOP pour compléter pour être précis au cycle.

_________________
http://www.alternative-system.com


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Jeu: Le mot le plus lent
MessagePosté: 10 Avr 2014, 22:28 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1110
Localisation: Brest
Le mul a le pb de trasher deux des registres les plus utilisés.

Quand j'y réflechis, le me dis que le MUL est une instruction hors norme sur 6809. Un simple "TFR A,B" prends déjà 6 cycles pour ne rien faire de très compliqué (les flags ne sont pas mis à jour ce qui signifie que cette opération est réalisée hors ALU), alors que le MUL et toute la tripaille de barrel-shifters qu'il doit remuer dans l'ALU ne prends que 5 cycles de plus. MUL est étonnamment efficace.

A l'inverse, EXG et TFR sont vraiment trop lents sur 6809. S'ils se réalisaient en 2 cycles on pourrait swapper X avec D et virtuellement faire des operations arithmético-logiques sur les registres d'adresse pour seulement 4 cycles de plus (2 EXG). Avec le cout du EXG actuel, faire de la logique sur X coute minimum 16 cycles. On a plus vite fait d'écrire X en ram et travailler sur D directement.

Sinon il y a le 6309 :good:

EDIT: Apparement la substitution par un Hitachi est possible: voir ici.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 7 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
cron
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com