Index du forum




Un petit coup de main... Vous pouvez nous aider à mettre ce site à jour: n'hésitez pas à me contacter !!!

* Connexion   * Inscription

* FAQ
Nous sommes actuellement le 29 Nov 2025, 18:07

Index du forum » Z80 Coding

Le fuseau horaire est UTC+1 heure


design patterns

Modérateur: poulette73



Publier un nouveau sujet Répondre au sujet  Page 4 sur 4
 [ 58 message(s) ]  Aller vers la page Précédent  1, 2, 3, 4
  Aperçu avant impression Sujet précédent | Sujet suivant 
Auteur Message
Demoniak
 Sujet du message : Re: design patterns
Message Publié : 24 Jan 2011, 09:03 
Hors-ligne
VIP
VIP

Inscription : 15 Oct 2009, 18:07
Message(s) : 236
Localisation : Dunkerque
Tiens ça faisait longtemps qu'on avait pas parlé de petites astuces d'optimisations...
J'en ai une dont je me sers de temps en temps.
Quand j'ai besoin de sauvegarder la valeur du registre A, déjà plutôt que le PUSH AF/POP AF,il y a
EX AF,AF' qui est pas mal, mais parfois on a aussi le registre A' d'utilisé.
Alors on peut stocker A dans IXH ou IXL, IYH ou IYL, et si vraiment on a plus de registre, ne pas oublier qu'il reste le registre I, qui ne sert pas tant que l'on est pas en IM2 (donc très peu probable sur CPC).

Donc un LD I,A/LD A,I permet de gagner 3 nops par rapport à un PUSH AF/POP AF, mais perd 2 octets.

_________________
http://demoniak-contrib.forumactif.com/


Haut
 Profil  
 
Demoniak
 Sujet du message : Re: design patterns
Message Publié : 14 Sep 2011, 14:22 
Hors-ligne
VIP
VIP

Inscription : 15 Oct 2009, 18:07
Message(s) : 236
Localisation : Dunkerque
Une petite astuce, il y avait longtemps :)

Diviser HL par 64 (division signée):
Code :
        LD      A,H
        RLCA
        ADD     HL,HL
        SBC     A,A
        ADD     HL,HL
        RLA
        LD      L,H
        LD      H,A

_________________
http://demoniak-contrib.forumactif.com/


Haut
 Profil  
 
Kris
 Sujet du message : Re: design patterns
Message Publié : 14 Sep 2011, 15:34 
Hors-ligne
Rulezzzz
Rulezzzz

Inscription : 28 Août 2007, 19:22
Message(s) : 634
Localisation : 35-33-66
euh..tu ^peux expliquer un peu ?


Haut
 Profil  
 
Demoniak
 Sujet du message : Re: design patterns
Message Publié : 14 Sep 2011, 16:10 
Hors-ligne
VIP
VIP

Inscription : 15 Oct 2009, 18:07
Message(s) : 236
Localisation : Dunkerque
Kris a écrit :
euh..tu ^peux expliquer un peu ?
Normalement, pour diviser HL par 64, on ferait 6 décalages à droite de HL (un décalage à droite=une division par deux), comme ça :
Code :
        SRA     H
        RR      L
        SRA     H
        RR      L
        SRA     H
        RR      L
        SRA     H
        RR      L
        SRA     H
        RR      L
        SRA     H
        RR      L

J'ai utilisé SRA pour garder le signe.
Si on remarque bien ce qui se passe, on perd les 6 bits de poids faibles de L. Quand aux bits de H, il ne nous en reste que 2 significatifs (les autres sont soit tous à zéro si HL était >=0, soit tous à un dans le cas d'un négatif).
On se retrouve au final avec, dans le registre L, les 6 bits de poids fort de H.
D'ou l'on peut en déduire que L = H * 4, ce que je fais avec les 2 ADD HL,HL dans mon code optimisé.
Ensuite, pour H, j'utilise l'astuce suivante :
je sauvegarde sa valeur dans le registre A, puis je fais un décalage à gauche.
Si HL était négatif, le flag C vaut 1, sinon il vaut zéro.
ensuite, après mon premier ADD HL,HL (qui va lui aussi me générer une retenue si HL était négatif),
je fais un SBC A,A, qui fait en gros A=0 si flag_C=0, A=255 si flag_C = 1.
Puis après le seconde ADD HL,HL (qui va générer une retenue si le bit 6 de H était à 1) je fais un RLA, qui fait une rotation à gauche de A en ajoutant la retenue.
J'ai donc ainsi récupéré les 2 bits de poids forts de H dans les 2 bits de poids faible de A.

J'espère avoir été assez clair...

_________________
http://demoniak-contrib.forumactif.com/


Haut
 Profil  
 
fkey
 Sujet du message : Re: design patterns
Message Publié : 15 Sep 2011, 07:27 
Hors-ligne
Rulezz
Rulezz

Inscription : 25 Mai 2009, 16:28
Message(s) : 95
Salut Demoniak,

Il faut préciser que tu passe de 24 à 12 micro-secondes si j'ai bien compté (donc 2 fois plus vite).
L'astuce du "sbc a" est géniale !

Pour info je l'avais repérée et expliquée dans un autre forum : http://cmussaperetto3.free.fr/IMPACT/FO ... =18&t=3365


Haut
 Profil  
 
Demoniak
 Sujet du message : Re: design patterns
Message Publié : 15 Sep 2011, 07:36 
Hors-ligne
VIP
VIP

Inscription : 15 Oct 2009, 18:07
Message(s) : 236
Localisation : Dunkerque
fkey a écrit :
Salut Demoniak,

Il faut préciser que tu passe de 24 à 12 micro-secondes si j'ai bien compté (donc 2 fois plus vite).
L'astuce du "sbc a" est géniale !

Pour info je l'avais repérée et expliquée dans un autre forum : http://cmussaperetto3.free.fr/IMPACT/FO ... =18&t=3365
Hello fkey!
Oui c'est bien ça, de 24 à 12 µs.
Et en effet, le SBC A est une instruction très intéressante ;-)

_________________
http://demoniak-contrib.forumactif.com/


Haut
 Profil  
 
TOUKO
 Sujet du message : Re: design patterns
Message Publié : 22 Sep 2011, 09:35 
Hors-ligne
Rulezz
Rulezz
Avatar de l’utilisateur

Inscription : 12 Juil 2010, 13:36
Message(s) : 169
Megachur a écrit :
Bah, bien sûr qu'on l'utilise aussi sur notre z80 limité...en mhz !!!

Généralement, j'écris le code comme cela :

1) algo général (en gros ce que le prog doit faire)


Tiens y'a encore de l'algo ??? :o

Megachur a écrit :
J'ai utilisé cette technique pour Maurice Aime Les Bobs par exemple
;linked: http://www.cpc-p0mer.com/cpcdemos/index.php?page=detail&num=405

si ça t'intéresse, le code est là !!! http://code.google.com/p/amstradz80code ... e_les_bobs

Tu verras qu'il n'y quasiment plus de boucle dans le code !

Bon ça y est !!! Ce thread commence à être très intéressant !!! ;-)

:biere: :biere: :biere: :biere: :biere:


Excellent merci, même si je fais pas de Z80, c'est très intéressant de voir la façon de coder ..


Haut
 Profil  
 
Longshot
 Sujet du message : Re: design patterns
Message Publié : 02 Oct 2011, 11:06 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 28 Août 2008, 23:41
Message(s) : 270
A quoi sert le RLCA ? :wink:


Haut
 Profil  
 
Demoniak
 Sujet du message : Re: design patterns
Message Publié : 03 Oct 2011, 07:50 
Hors-ligne
VIP
VIP

Inscription : 15 Oct 2009, 18:07
Message(s) : 236
Localisation : Dunkerque
Longshot a écrit :
A quoi sert le RLCA ? :wink:

A mettre le bit 7 de H dans le flag C :)

_________________
http://demoniak-contrib.forumactif.com/


Haut
 Profil  
 
AsT
 Sujet du message : Re: design patterns
Message Publié : 03 Oct 2011, 08:06 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 29 Août 2007, 08:04
Message(s) : 751
Localisation : Impact Hq
Il a des idées démoniaques, le bougre !

_________________
AsT / iMP4CT

Retrouvez nous sur le forum Amstrad Plus
"Call &bb06"


Haut
 Profil  
 
fkey
 Sujet du message : Re: design patterns
Message Publié : 03 Oct 2011, 10:00 
Hors-ligne
Rulezz
Rulezz

Inscription : 25 Mai 2009, 16:28
Message(s) : 95
Hum,

Je crois que ce que Longshot veut dire, c'est que le add hl,hl influe sur la carry, donc le rlca pour jouer sur la carry bof :twisted:
Surtout qu'en plus, le sbc a va changer la valeur en a.
Au final je pense que le rlca ne fait que perdre 1 nop :)

A moins qu'il ne manque des lignes ...


Haut
 Profil  
 
Demoniak
 Sujet du message : Re: design patterns
Message Publié : 03 Oct 2011, 10:41 
Hors-ligne
VIP
VIP

Inscription : 15 Oct 2009, 18:07
Message(s) : 236
Localisation : Dunkerque
Oui en effet, le RLCA ne sert à rien, il peut donc être supprimer et on gagne encore 1 nop

Merci Longshot pour cette remarque ;-)

_________________
http://demoniak-contrib.forumactif.com/


Haut
 Profil  
 
Longshot
 Sujet du message : Re: design patterns
Message Publié : 04 Oct 2011, 13:00 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 28 Août 2008, 23:41
Message(s) : 270
Pas de quoi. Merci de nous faire profiter de tes trouvailles.
Sympa le coup du sbc a,a :D


Haut
 Profil  
 
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  Page 4 sur 4
 [ 58 message(s) ]  Aller vers la page Précédent  1, 2, 3, 4

Index du forum » Z80 Coding

Le fuseau horaire est UTC+1 heure


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 22 invité(s)


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Aller vers :  
cron
Powered by phpBB® Forum Software © phpBB Group
Traduit en français par Maël Soucaze.