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 30 Nov 2025, 00:26

Index du forum » Z80 Coding

Le fuseau horaire est UTC+1 heure


timing sur LDI

Modérateur: poulette73



Publier un nouveau sujet Répondre au sujet  Page 1 sur 2
 [ 19 message(s) ]  Aller vers la page 1, 2  Suivant
  Aperçu avant impression Sujet précédent | Sujet suivant 
Auteur Message
neocps1
 Sujet du message : timing sur LDI
Message Publié : 25 Juin 2010, 10:28 
Hors-ligne
Rulezz
Rulezz

Inscription : 28 Mai 2010, 11:34
Message(s) : 100
Localisation : Eteauville, France
Bonjour,

Qu'est ce qui est le plus rapide entre :

LDI

et

ld a,(hl)
ld (de),a
inc hl
inc de

En sachant que (comme le code l'indique), je n'ai pas besoin de décrémenter BC.

merci !


Haut
 Profil  
 
fano
 Sujet du message : Re: timing sur LDI
Message Publié : 25 Juin 2010, 11:13 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 15 Août 2008, 13:00
Message(s) : 968
Localisation : Troyes, France
Salut , c'est LDI car elle fait 5 nops , chaque LD (reg),reg fait 2 nops et l'incrémentation de HL/DE fait 2 par instructions (1 sur un registre 8 bits) , donc ça te fait 8 nops.Tu peux trouver des tableaux (incomplets) sur le Grimware (ou ici je crois aussi) ou utiliser Winape et son compteur de nops pour mesurer la vitesse de ton code (je rêve d'un profiler :D )

_________________
"NOP" tel est le programme parfait ! court, rapide, lisible et sans bugs (connus)


Haut
 Profil  
 
neocps1
 Sujet du message : Re: timing sur LDI
Message Publié : 25 Juin 2010, 11:21 
Hors-ligne
Rulezz
Rulezz

Inscription : 28 Mai 2010, 11:34
Message(s) : 100
Localisation : Eteauville, France
merci :)


Haut
 Profil  
 
AsT
 Sujet du message : Re: timing sur LDI
Message Publié : 25 Juin 2010, 11:25 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 29 Août 2007, 08:04
Message(s) : 751
Localisation : Impact Hq
Tout ce que tu veux savoir sur les timings est la : http://quasar.cpcscene.com/doku.php?id=iassem:timings

En effet, Ldi sera plus rapide, mais il y a plus rapide encore, l'instruction Push... Un Ldi récupère les données une à une alors qu'une instruction Push les récupère deux à deux...

Un Ldi -> 5 Nops (une valeur 8 bits)
Un Push (hl, de ou bc) -> 4 Nops (une valeurs 16 bits)

Là est toute la différence :)

_________________
AsT / iMP4CT

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


Haut
 Profil  
 
neocps1
 Sujet du message : Re: timing sur LDI
Message Publié : 25 Juin 2010, 11:31 
Hors-ligne
Rulezz
Rulezz

Inscription : 28 Mai 2010, 11:34
Message(s) : 100
Localisation : Eteauville, France
comment optimiserais tu ce bout de code ?

ld a,(de)
ld (hl),a
inc hl
inc de
ld a,(de)
ld (hl),a
inc de
add hl,bc


Haut
 Profil  
 
BDCIron
 Sujet du message : Re: timing sur LDI
Message Publié : 25 Juin 2010, 12:04 
Déjà es tu certain d'avoir besoin de faire un inc hl ou un inc de ???

Par exemple s'il s'agit de courbes a lire, places les avec un poids faible a 0. si ta courbe boucle sur 256 valeurs alors un inc l suffit...


Haut
  
 
neocps1
 Sujet du message : Re: timing sur LDI
Message Publié : 25 Juin 2010, 12:12 
Hors-ligne
Rulezz
Rulezz

Inscription : 28 Mai 2010, 11:34
Message(s) : 100
Localisation : Eteauville, France
j'y ai pensé, mais oui, HL est une adresse video et DE pointe vers un endroit en mémoire (n'importe où)


Haut
 Profil  
 
hERMOL
 Sujet du message : Re: timing sur LDI
Message Publié : 25 Juin 2010, 12:44 
Hors-ligne
Site Admin
Avatar de l’utilisateur

Inscription : 20 Août 2007, 18:21
Message(s) : 5103
des routines d'affichage de sprites y'en a des tas ..

par exemple sur un sprite 8x8 :

Code :
; de=mem ecran
; hl=sprites source (8x8 pixels ou 8x2 octets)

ldi
ldi
dec de
dec e
add #08
ld d,a
ldi
ldi
dec de
dec e
add #08
ld d,a
ldi
ldi
dec de
dec e
add #08
ld d,a
ldi
ldi
dec de
dec e
add #08
ld d,a
ldi
ldi
dec de
dec e
add #08
ld d,a
ldi
ldi
dec de
dec e
add #08
ld d,a
ldi
ldi
dec de
dec e
add #08
ld d,a
ldi
ldi


PS: je te conseil également d'aller lire les articles A100% de Poom --> https://cpcrulez.fr/coding_menu-arcade.htm ou l'article de PICT/LOGON SYSTEM ----> https://cpcrulez.fr/coding_logon47.htm


Haut
 Profil  
 
neocps1
 Sujet du message : Re: timing sur LDI
Message Publié : 25 Juin 2010, 12:45 
Hors-ligne
Rulezz
Rulezz

Inscription : 28 Mai 2010, 11:34
Message(s) : 100
Localisation : Eteauville, France
hERMOL a écrit :
des routines d'affichage de sprites y'en a des tas ..


désolé, j'apprends sur le tas... :oops:


Haut
 Profil  
 
hERMOL
 Sujet du message : Re: timing sur LDI
Message Publié : 25 Juin 2010, 12:57 
Hors-ligne
Site Admin
Avatar de l’utilisateur

Inscription : 20 Août 2007, 18:21
Message(s) : 5103
y'a pas de soucis, on est la pour en discuter justement :eng:

voilà une 2eme routine qui illustre la technique d'AST

Code :
; affiche sur &40 octets (ou &20 words) par la pile

; sp=spr source (&????)
; hl=mem ecran (&???0)

pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
pop de
ld (hl),e
inc l
ld (hl),d
inc l
; boucle sur la prochaine ligne


Haut
 Profil  
 
AsT
 Sujet du message : Re: timing sur LDI
Message Publié : 25 Juin 2010, 18:52 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 29 Août 2007, 08:04
Message(s) : 751
Localisation : Impact Hq
C'est exactement ça sauf que tu as oublié de preciser qu'il faut sauvegarder la Pile au depart de la routine et la restaurer à la fin :)

De plus, si tu veux que ton gfx s'affiche en #c000 et que ton gfx fait 8 octets de large, tu commences à l'adresse #c000+8.

Il ne faut pas oublier que 1 Push= 2 Dec SP... :pir8:

_________________
AsT / iMP4CT

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


Haut
 Profil  
 
neocps1
 Sujet du message : Re: timing sur LDI
Message Publié : 25 Juin 2010, 22:25 
Hors-ligne
Rulezz
Rulezz

Inscription : 28 Mai 2010, 11:34
Message(s) : 100
Localisation : Eteauville, France
j'ai testé une routine qui utilise la pile pour faire des chargements sur 16 bit (pop de), mais elle semble perturbée par les interruptions, même en les désactivant :twisted:


Haut
 Profil  
 
hERMOL
 Sujet du message : Re: timing sur LDI
Message Publié : 25 Juin 2010, 22:34 
Hors-ligne
Site Admin
Avatar de l’utilisateur

Inscription : 20 Août 2007, 18:21
Message(s) : 5103
un petit

ei
ret

en #38

doit faire l'affaire ...


Haut
 Profil  
 
norecess
 Sujet du message : Re: timing sur LDI
Message Publié : 26 Juin 2010, 01:43 
Perso, je base la plupart de mes effets sur l'utilisation de la pile. Rapide... ultra rapide !
La Phat 2 concernant l'affichage fullscreen, tout est avec la pile, je vois pas comment j'aurais pu gérer l'affichage de si grosses images autrement ! :)


Haut
  
 
AsT
 Sujet du message : Re: timing sur LDI
Message Publié : 26 Juin 2010, 07:56 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 29 Août 2007, 08:04
Message(s) : 751
Localisation : Impact Hq
Le EI:RET en #38 ne sert à rien dans l'exemple cité ci dessus...

Je verrais plutôt un truc du style :
Code :
            DI
            ld (savepile+1),sp
            ld sp,data+2
            ld hl,#c000
            pop de
            ld (hl),e
            inc l
            ld (hl),d
            ..................etc....
savepile ld sp,#caca
           ei
           ret
data     defb #ff,#aa



Tu vois, pas besoin de ei ret !

Tu pourrais faire aussi un truc du style :

Code :
 
         di
         ld (savepile+1),sp
         ld sp,#c000+8
         ld hl,#ffaa
         push hl
         ld hl,#eebb
         push hl
         .... etc...
savepile ld sp,#bebe
            ei
            ret



Allez zou... Je pars au Taf !

_________________
AsT / iMP4CT

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


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

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 52 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.