CPC Rulez
https://cpcrulez.fr/forum/

design patterns
https://cpcrulez.fr/forum/viewtopic.php?f=4&t=4252
Page 1 sur 4

Auteur :  neocps1 [ 01 Juil 2010, 12:26 ]
Sujet du message :  design patterns

désolé si je monopolise un peu le forum en ce moment :oops:

ca pourrait être bien d'avoir une partie "design patterns" où on pourrait retrouver des idées d'implémentation optimales pour des opérations classiques.

Exemple avec les décalages sur 16 bit:

- Décalage à droite d'un bit sur bc:

sra b
rr c

- Décalage à gauche d'un bit sur bc:
sla c
rl b


Ca reste une idée, mais je pense que ca pourrait aider pas mal les développeurs z80 débutants...

Auteur :  hERMOL [ 01 Juil 2010, 12:35 ]
Sujet du message :  Re: design patterns

neocps1 a écrit :
désolé si je monopolise un peu le forum en ce moment :oops:

t'as bien raison, bouge les ces CPCistes endormi ... :cow:

vi bonne idée, tu peu en trouver quelques un sur ces liens:
https://cpcrulez.fr/coding_src02.htm
https://cpcrulez.fr/coding_menu-src.htm

un pour l'heure de l'apéro ...

Code :
;hl=a*128
ld l,a               ;
ld h,0
rl l
rl h
rl l
rl h
rl l
rl h
rl l
rl h
rl l
rl h
rl l
rl h
rl l
rl h

Auteur :  neocps1 [ 01 Juil 2010, 13:13 ]
Sujet du message :  Re: design patterns

Merci :) Aucun interet dans mon code les sra et sla, des rr et rl sont identiques et prennent autant de temps, sans compter que ca homogénéise le code

Auteur :  Demoniak [ 01 Juil 2010, 17:25 ]
Sujet du message :  Re: design patterns

hERMOL a écrit :
un pour l'heure de l'apéro ...

Code :
;hl=a*128
ld l,a               ;
ld h,0
rl l
rl h
rl l
rl h
rl l
rl h
rl l
rl h
rl l
rl h
rl l
rl h
rl l
rl h


Heu y a plus simple pour faire hl=a*128 :
Code :
ld h,a
ld l,0
sra h
rr l

Auteur :  norecess [ 01 Juil 2010, 17:39 ]
Sujet du message :  Re: design patterns

Enfin un thread interressant !

Je viens de découvrir ta page web Hermol, j'adore. Y'a deja des choses dedans que je m'aurais bien vu ré-utiliser dans la Pheelone :)

Auteur :  neocps1 [ 02 Juil 2010, 08:50 ]
Sujet du message :  Re: design patterns

[quote="Demoniak"]
Heu y a plus simple pour faire hl=a*128 :
Code :
ld h,a
ld l,0
sra h
rr l


bien vu !

Auteur :  hERMOL [ 02 Juil 2010, 09:28 ]
Sujet du message :  Re: design patterns

ah oui ca c'est de l'optimisation ! 4 opcodes contre 16!

@DEMONIAK: si t'en a d'autres .. :kissed:

Auteur :  fano [ 02 Juil 2010, 11:13 ]
Sujet du message :  Re: design patterns

Ah oui elle pique la multiplication par 128 !

Après , pour en revenir au design patterns , je n'irai pas jusque là puisque sur CPC on brode du sur mesure mais par contre partager les tricks , c'est cool :D
Personnellement, je n'en ai pas beaucoup à vous offrir peut être à part certaines organisation de données.

Auteur :  Demoniak [ 02 Juil 2010, 21:15 ]
Sujet du message :  Re: design patterns

Un petit truc pour la route :
Code :
INC HL
DEC BC
LD A,B
OR C
JR NZ,xxxx

peut être remplacé par:
Code :
CPI
JP PE,xxxx

Auteur :  Fredouille [ 03 Juil 2010, 07:51 ]
Sujet du message :  Re: design patterns

Messieurs les codeurs expérimentés, pouvez-vous s'il vous plait, allumer la lumière de pauvres néophytes comme moi en indiquant ce qu'est censé faire votre bout de code et surtout pourquoi ?

Merci à vous :twisted:

Auteur :  Demoniak [ 03 Juil 2010, 08:15 ]
Sujet du message :  Re: design patterns

Je vais répondre pour mon petit exemple plus haut :)

Dans cet exemple, j'utilise BC comme compteur 16 bits pour une boucle, et HL comme pointeur sur une zone mémoire par exemple.
A la fin de ma boucle, j'incrémente le pointeur mémoire (HL), je décrémente mon compteur (BC) et si celui-ci n'est pas nul, je poursuis ma boucle (le label représenté par xxxx)
En gros, un code standard (non optimisé) fait comme la première version:
Code :
INC HL ; incrémente le pointeur mémoire
DEC BC ; décrémente le compteur
LD A,B ; test bits de poids fort compteur
OR C ; test bits de poids faible compteur
JR NZ,xxxx ; si BC différent de zéro, on continue

qui peut se traduire par la version optimisée :
Code :
CPI ; compare a avec (HL), incrémente HL, décrémente BC, positionne les flags
JP PE,xxxx

dans le deuxième code, j'utilise les spécificités de l'instruction z80 CPI, qui permet de faire une comparaison entre A et le contenu mémoire pointé par HL. Cette comparaison ne m'est d'aucune utilité, par contre, le fait que CPI incrémente HL, décrémente BC, et positionne le flag P (parité) si BC vaut zéro est très intéressant dans mon cas :D
Voilà, j'espère que ceci permet d'éclairer un peu sur la façon dont j'ai optimisé ma boucle.

Ah oui je profite que je suis en forme ce matin :D
Pour le premier exemple (HL=A*128), il suffit de faire HL=(A*256)/2, donc HL=A*256 se traduit par
Code :
LD H,A
LD L,0

et ensuite la division par 2 de HL :
Code :
SRA H ; rotation vers la droite avec retenue et signe de H
RR L ; rotation vers la droite avec récupération de la reteneue de L

Auteur :  Kris [ 03 Juil 2010, 11:13 ]
Sujet du message :  Re: design patterns

Excellent ce thread, j'encourage les pros du Z80 à l'alimenter en detaillant leur raisonnement, c'est trés instructif.
:o
Merci à vous

Auteur :  norecess [ 03 Juil 2010, 12:17 ]
Sujet du message :  Re: design patterns

Très bon tip, Demoniak ! Excellent même :)

Auteur :  Megachur [ 03 Juil 2010, 18:12 ]
Sujet du message :  Re: design patterns

En fait, le mieux est de proposer un code et que l'on voit ensemble pour l'optimiser...car donner des trucs pour des trucs... alors que s'il y a vraiment un besoin de gagner du temps machine pour une boucle ou une routine ça motive !!!! ;-) :winner: :biere: :winner:

Auteur :  Demoniak [ 04 Juil 2010, 08:09 ]
Sujet du message :  Re: design patterns

Megachur a écrit :
En fait, le mieux est de proposer un code et que l'on voit ensemble pour l'optimiser...car donner des trucs pour des trucs... alors que s'il y a vraiment un besoin de gagner du temps machine pour une boucle ou une routine ça motive !!!! ;-) :winner: :biere: :winner:

Oui bonne idée. On ouvre un nouveau sujet ?

Page 1 sur 4 Le fuseau horaire est UTC+1 heure
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/