Logicielsmoto.com http://www.logicielsmoto.com/phpBB/ |
|
gagner des cycles machines http://www.logicielsmoto.com/phpBB/viewtopic.php?f=3&t=189 |
Page 2 sur 8 |
Auteur: | Prehisto [ 13 Aoû 2006, 18:05 ] |
Sujet du message: | |
jasz a écrit: Un ch'tit indice siouplex.
Le mnémonique de l'instruction commence par un A. |
Auteur: | jasz [ 13 Aoû 2006, 18:25 ] |
Sujet du message: | |
Reste ADD et AND Je passe la main pour l'instant Mais... Je vais revenir |
Auteur: | Prehisto [ 13 Aoû 2006, 18:30 ] |
Sujet du message: | |
jasz a écrit: :eek: C'est vrai que c'est pas très connu. jasz a écrit: Reste ADD et AND
Non plus. |
Auteur: | jasz [ 13 Aoû 2006, 18:37 ] |
Sujet du message: | |
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 |
Auteur: | jasz [ 13 Aoû 2006, 19:46 ] |
Sujet du message: | |
Désolé Je sèche... |
Auteur: | Prehisto [ 13 Aoû 2006, 19:56 ] |
Sujet du message: | |
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.. |
Auteur: | jasz [ 13 Aoû 2006, 20:07 ] |
Sujet du message: | |
J'y avait pensé... mais lors du test la bécane s'est plantée J'ai du encore faire une boulette |
Auteur: | Prehisto [ 24 Aoû 2006, 17:25 ] |
Sujet du message: | |
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. |
Auteur: | Samuel Devulder [ 25 Aoû 2006, 09:54 ] |
Sujet du message: | |
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. |
Auteur: | Daniel Coulom [ 28 Aoû 2006, 08:46 ] |
Sujet du message: | |
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 |
Auteur: | Tomix3 [ 28 Aoû 2006, 15:07 ] |
Sujet du message: | |
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. |
Auteur: | Yoann Riou [ 28 Aoû 2006, 15:22 ] |
Sujet du message: | |
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 ? 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. |
Auteur: | Samuel Devulder [ 28 Aoû 2006, 16:17 ] |
Sujet du message: | |
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. |
Auteur: | Samuel Devulder [ 28 Aoû 2006, 17:04 ] |
Sujet du message: | |
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. |
Auteur: | Prehisto [ 28 Aoû 2006, 19:15 ] |
Sujet du message: | |
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:
... 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é |
Page 2 sur 8 | Heures au format UTC + 1 heure |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |