Logicielsmoto.com

Nous sommes le 28 Mar 2024, 17:50

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 111 messages ]  Aller à la page Précédente  1, 2, 3, 4, 5 ... 8  Suivante
Auteur Message
 Sujet du message:
MessagePosté: 13 Aoû 2006, 18:05 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
jasz a écrit:
Un ch'tit indice siouplex.


Le mnémonique de l'instruction commence par un A.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 13 Aoû 2006, 18:25 
Hors ligne

Inscription: 13 Juin 2005, 21:50
Messages: 290
Localisation: Planete Zorg (31)
:eek:

Reste ADD et AND Je passe la main pour l'instant :(

Mais... Je vais revenir ;)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 13 Aoû 2006, 18:30 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
jasz a écrit:
:eek:

C'est vrai que c'est pas très connu.

jasz a écrit:
Reste ADD et AND

Non plus.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 13 Aoû 2006, 18:37 
Hors ligne

Inscription: 13 Juin 2005, 21:50
Messages: 290
Localisation: Planete Zorg (31)
Prehisto a écrit:
Non plus.

Oui, je sais...



Code:
      LDD #$1000
xx  SUBD #$0010
      BNE xx

Pour revenir à ceci tu peux aussi utiliser

Code:
        NEGA
xx    ADDD #$0010
        BLT xx

c'est trés pratique dans certains cas :)

Foi d'Atariste ;)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 13 Aoû 2006, 19:46 
Hors ligne

Inscription: 13 Juin 2005, 21:50
Messages: 290
Localisation: Planete Zorg (31)
Désolé :(

Je sèche...


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 13 Aoû 2006, 19:56 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
Code:
            ASRB


L'instruction ASRB effectue un décalage vers la droite de l'accumulateur B et "maintient" l'état du bit 7 avant décalage. Par exemple, pour B=$85 (valeur négative b7=1) :

0. B = %10000101
1. ASRB -> B = %11000010
2. ASRB -> B = %11100001
3. ASRB -> B = %11110000
etc..

... et pour une valeur positive (b7=0), par exemple B=$18 :

0. B = %00011000
1. ASRB -> B = %00001100
2. ASRB -> B = %00000110
3. ASRB -> B = %00000011
etc..


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 13 Aoû 2006, 20:07 
Hors ligne

Inscription: 13 Juin 2005, 21:50
Messages: 290
Localisation: Planete Zorg (31)
J'y avait pensé...

mais lors du test la bécane s'est plantée :( J'ai du encore faire une boulette :D


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 24 Aoû 2006, 17:25 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
Pour en revenir au fameux LEAY ,Y qui remplace avantageusement le CMPY #$0000, dont j'ai fait mention sur le topic de Silicium, je tiens à faire remarquer (ou à rappeler) que LEAY ,Y (comme LEAX ,X) positionne non seulement le bit Z mais aussi le bit N de CC, ce que les tables des instructions 6809 ne stipulent pas. Ce qui permet d'écrire, par exemple:

Code:
         LEAY     ,Y
         BPL         BOUCLE


.... et le test réagit correctement.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 25 Aoû 2006, 09:54 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Prehisto a écrit:
Pour en revenir au fameux LEAY ,Y qui remplace avantageusement le CMPY #$0000, dont j'ai fait mention sur le topic de Silicium, je tiens à faire remarquer (ou à rappeler) que LEAY ,Y (comme LEAX ,X) positionne non seulement le bit Z mais aussi le bit N de CC, ce que les tables des instructions 6809 ne stipulent pas. Ce qui permet d'écrire, par exemple:

Code:
         LEAY     ,Y
         BPL         BOUCLE


.... et le test réagit correctement.


Tres interressant.. ca m'accelererai le bresenham que je bricole en ce moment pour me remettre dans l'asm 6809.

sam.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 28 Aoû 2006, 08:46 
Hors ligne
M. DCMOTO

Inscription: 06 Juin 2004, 08:23
Messages: 681
Localisation: Provence (France)
Prehisto a écrit:
LEAY ,Y (comme LEAX ,X) positionne non seulement le bit Z mais aussi le bit N de CC, ce que les tables des instructions 6809 ne stipulent pas.

Merci pour cette précieuse information. Il en sera tenu compte dans la prochaine version de l'émulateur dcmoto ;)

Daniel


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 28 Aoû 2006, 15:07 
Hors ligne

Inscription: 27 Avr 2006, 09:04
Messages: 101
Si vous aimez les challenges, amusez-vous a faire une routine de racine carree 8 bits, puis 16 bits. Elle doit etre la plus rapide, sans utiliser de table.

C'est juste un challenge.

a+
Seg.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 28 Aoû 2006, 15:22 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 492
Tomix3 a écrit:
Si vous aimez les challenges, amusez-vous a faire une routine de racine carree 8 bits, puis 16 bits. Elle doit etre la plus rapide, sans utiliser de table.

C'est juste un challenge.

a+
Seg.


Quelle precision pour la 8 bits ? :D

Sinon, j'imagine bien un programme qui increment un compteur, multiplie par lui meme. Une fois le resultat final depassee, la racine est trouve (increment precedent). Par contre, ca risque de ne pas etre rapide.

Pour la precision (float), une fois le resultat depasse, on peut prendre le compteur entier precedent, le nouveau compteur entier, couper la poire en deux, et recaculer le nouveau compteur par lui meme ... et ainsi de suite jusqu'a la precision voulue.

Pour le 16 bits, ca serait plus chaud, a cause justement de la multiplication qui n'est que 8 bits (avec resultat 16). Donc la methode ne fonctionne pas vraiment bien.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 28 Aoû 2006, 16:17 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Tomix3 a écrit:
Si vous aimez les challenges, amusez-vous a faire une routine de racine carree 8 bits


Allez je me lance pour le 8 bits a partir du code C suivant de Jim Ulery:
Code:
      static unsigned mborg_isqrt3(unsigned long val)
      {
        unsigned long temp, g=0, b = 0x8000, bshft = 15;
        do {
          if (val >= (temp = (((g<<1)+b)<<bshft--))) 
            g += b;
            val -= temp;
          }
        } while (b >>= 1);
        return g;
      }


Pour 4 bits en deroulant la boucle il vient le pseudo code C suivant (on assume un typedef unsigned char byte, entree dans v, sortie dans g, temporaire t):
Code:
 byte t, g=0;
 //if(v >= (t = 16*g + 64)) {g+=8; v-=t;}
 if(v >= 64) {g+=8; v-=64;}
 if(v >= (t =  8*g + 16)) {g+=4; v-=t;}
 if(v >= (t =  4*g +  4)) {g+=2; v-=t;}
 if(v >= (t =  2*g +  1)) {g+=1; v-=t;}


Ce qui peut s'optimiser bcp.. ca donnerait a peu pres:
Code:
v       fcb  123   * input
tmp     rmb  2     

sqrt4:  ldx  #0    * x = g

        lda  v
        suba #64
        bcc  l1
        leax 8,x
l1:     sta  v
        tfr  x,d
        leay d,x    * voir s'il ne faut pas preferer u ici (absence de pre-opcode pour le stu vs le sty ou les lea?)
        tfr  y,d
        leay d,y
        tfr  y,d
        leay d,y
        leay 16,y
        sty  tmp

        lda  v
        suba tmp+1
        bcc  l2
        leax 4,x
l2:     sta  v
        tfr  x,d
        leay d,x
        tfr  y,d
        leay d,y
        leay 4,y
        sty  tmp

        lda  v
        suba tmp+1
        bcc  l3
        leax 2,x
l3:     sta  v
        tfr  x,d
        leax x,d
        leax 1,x
        stx  tmp

        lda  v
        suba tmp+1
        bcc   l4
        leax 1,x
l4:     tfr  x,d    * fini a = sqrt(v)


Ca peut etre ammeliore en utilisant u pour stocker v (tfr d,u) ou en utilisant le register DP pour gagner des cycles. Ca me semble etre facilement sur 16 bits sans trop de pbs. La partie bouffant du cpu sont les shift a droite (<<bshft) du code C. Il n'existe pas de code asm pour ca.. donc il faut derouler a la main et pour 16 bits ca va pas etre de la tarte. A moins de faire une boucle en utilisant le registre B comme compteur et voir a partir de combien de decalage on peut inliner.

sam.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 28 Aoû 2006, 17:04 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Samuel Devulder a écrit:
Ca me semble etre facilement sur 8 bits sans trop de pbs. La partie bouffant du cpu sont les shift a droite (<<bshft) du code C. Il n'existe pas de code asm pour ca.. donc il faut derouler a la main et pour 16 bits ca va pas etre de la tarte. A moins de faire une boucle en utilisant le registre B comme compteur


Allez, zou uen version 8 bits:
Code:
val      fdb 123*123

sqrt8:   
         ldx #0       * x = 0 (==g)
         lda #8       * bshift + 1
         ldb #$80     * b !
         
l4       tfr  d,y     * copie sauvegarde

         leau b,x
         tfr  x,d
         leau d,u     * u contient x*2+b
         
         sty  ,--s    * on fait en sorte que s pointe
         bra  l1      * sur la valeur de "a"
l2       tfr  u,d
         leau d,u
l1       dec  ,s
         bne  l2      * a la sortie de la boucle
         leas 2,s     * on a u=(x*2+b)<<(a-1)

         deca         * bshift--

         stu  ,--s
         ldd  val
         subd ,s++
         bcs  l3
         std  val
         
         tfr  y,d
         abx
l3       lsrb          * while(b>>=1)
         bne  l4

         tfr  x,d      * resultat dans d
         rts


Bon j'utilise la pile pour stocker les resultats intermediaires... je ne suis pas certain que le code est optimum, mais il ne doit pas en etre tres loin.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 28 Aoû 2006, 19:15 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
Tomix3 a écrit:
Si vous aimez les challenges, amusez-vous a faire une routine de racine carree 8 bits, puis 16 bits. Elle doit etre la plus rapide, sans utiliser de table.

C'est juste un challenge.

a+
Seg.


Samuel Devulder a écrit:
Allez je me lance pour le 8 bits a partir du code C suivant de Jim Ulery:


:eek:

... et un défi difficilement relevable par la plupart d'entre nous. Vous rencontrerez plus souvent ici des gens qui s'appliquent plutôt à connaître la machine. Je ne doute pas que ne pas savoir calculer une racine carrée en assembleur 6809 soit très handicapant dans certaines situations, et que si certains (et il y en aura) butent sur un problème de nature exclusivement mathématique, ils pourront compter sur vos impressionnantes compétences en la matière. J'avoue moi-même rester interdit devant tant de rapidité à répondre à une question qui aurait mis beaucoup d'entre nous à l'étude pendant une semaine.

Je suis certain que vous nous feriez des volets de démo suffocants d'efficacité ;)


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 111 messages ]  Aller à la page Précédente  1, 2, 3, 4, 5 ... 8  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 31 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 à:  
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com