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, 21:33

Index du forum » Z80 Coding

Le fuseau horaire est UTC+1 heure


Optimisation de code

Modérateur: poulette73



Publier un nouveau sujet Répondre au sujet  Page 1 sur 1
 [ 8 message(s) ] 
  Aperçu avant impression Sujet précédent | Sujet suivant 
Auteur Message
Demoniak
 Sujet du message : Optimisation de code
Message Publié : 04 Juil 2010, 08:44 
Hors-ligne
VIP
VIP

Inscription : 15 Oct 2009, 18:07
Message(s) : 236
Localisation : Dunkerque
Hop je me lance :)

Voici un petit bout de code :
Code :
Debut:
        DB      #DD
        INC     H                  ; Rotation dans la map
        LD      BC,TabStruct
BclAffiche:
        LD      A,(BC)
        LD      L,A
        INC     BC
        LD      A,(BC)
        DEC     A                       ; (HL = #101 en fin de table)
        JR      Z,Debut
        LD      H,A                     ; Adresse
        INC     BC
        LD      A,(BC)
        LD      E,A
        INC     BC
        LD      A,(BC)
        INC     BC
        LD      D,A
        LD      A,E
        DB      #DD
        ADD     A,H                  ; maxp + rotation
        AND     #7F
        RLA
        RR      D                       ; mapy << 7 == ( DE ) >> 1
        RRA
        LD      E,A
        LD      A,(DE)                  ; Lecture couleur point
        LD      (HL),A                  ; Ecriture en mémoire écran
        SET     3,H
        LD      (HL),A
        SET     4,H
        LD      (HL),A
        RES     3,H
        LD      (HL),A
        JR      BclAffiche

Qui me permet d'afficher une planète en rotation.
Au début du programme, BC pointe sur un tableau de structures qui contient:
- une adresse vidéo
- une adresse vers le bitmap de la planète
donc 4 octets pour afficher un point à l'écran
Je ne peux pas utiliser la pile vu que j'ai besoin des interruptions
Si vous avez des idées d'optimisations, dites le moi :D

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


Haut
 Profil  
 
Fredouille
 Sujet du message : Re: Optimisation de code
Message Publié : 04 Juil 2010, 15:38 
Hors-ligne
Rulezz
Rulezz
Avatar de l’utilisateur

Inscription : 26 Nov 2008, 10:04
Message(s) : 174
Localisation : Saint Ouen l'Aumône
Heu... Tu cherches quoi comme optimisation ? Vitesse ou taille ?


Haut
 Profil  
 
Demoniak
 Sujet du message : Re: Optimisation de code
Message Publié : 04 Juil 2010, 15:55 
Hors-ligne
VIP
VIP

Inscription : 15 Oct 2009, 18:07
Message(s) : 236
Localisation : Dunkerque
vitesse :)

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


Haut
 Profil  
 
Fredouille
 Sujet du message : Re: Optimisation de code
Message Publié : 04 Juil 2010, 18:21 
Hors-ligne
Rulezz
Rulezz
Avatar de l’utilisateur

Inscription : 26 Nov 2008, 10:04
Message(s) : 174
Localisation : Saint Ouen l'Aumône
A vu de nez d'un néophyte en assembleur Z80 (en fait je commence à connaître quelques instructions en essayant d'optimiser leur émulation), une optimisation ne semble pas aisée car il semble que chacune de tes instructions prennent peu de cycles.
Aussi, j'ai l'impression qu'il faut vraiment être imprégné de l'algo et de sa finalité pour savoir s'il n'y a pas plus simple...


Haut
 Profil  
 
Demoniak
 Sujet du message : Re: Optimisation de code
Message Publié : 04 Juil 2010, 20:57 
Hors-ligne
VIP
VIP

Inscription : 15 Oct 2009, 18:07
Message(s) : 236
Localisation : Dunkerque
La version avec utilisation de la pile :
Code :
Debut:
        LD      SP,TabStruct
        INC     C                       ; Rotation
BclAffiche:
        POP     HL                      ; HL = adresse mémoire écran
        DEC     H                       ; (HL = #101 en fin de table)
        JR      Z,Debut
        POP     DE                      ; E = mapx, D = mapy
        LD      A,E
        ADD     A,C                     ; maxp + rotation
        AND     B                       ;B = #7F
        RLA
        RR      D                       ; mapy << 7 == ( DE ) >> 1
        RRA
        LD      E,A
        LD      A,(DE)                  ; Lecture couleur point
        LD      (HL),A                  ; Ecriture en mémoire écran
        SET     3,H
        LD      (HL),A
        SET     4,H
        LD      (HL),A
        RES     3,H
        LD      (HL),A
        JR      BclAffiche

Et la version "C" :
Code :
    int yc = 0; // Position dans le bitmap pour rotation
    do
        {
         for ( int i = 0; TabMap[ i ].adr != 0x101; i++)
            {
            d = ( ( TabMap[ i ].MapX + yc ) & 0x7F ) + ( TabMap[ i ].MapY << 7 );
            memCpc[ TabMap[ i ].adr ] = Bitmap[ d ];
            }
        yc++;
        }
    while( ! fin );

Pour info le bitmap fait 128x64 pixels

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


Haut
 Profil  
 
Fredouille
 Sujet du message : Re: Optimisation de code
Message Publié : 04 Juil 2010, 21:58 
Hors-ligne
Rulezz
Rulezz
Avatar de l’utilisateur

Inscription : 26 Nov 2008, 10:04
Message(s) : 174
Localisation : Saint Ouen l'Aumône
Ah oui, en C, c'est déjà plus lisible :D


Haut
 Profil  
 
BDCIron
 Sujet du message : Re: Optimisation de code
Message Publié : 05 Juil 2010, 10:51 
Moi je ne m'y preendrais pas comme cela du tout. Je genererai du code directement a partir de courbe et transformerai celle-ci directement en incrementations...

En mémoire j'aurai pour le bitmap: 1 pixel=1octet.

Une des courbes du globe (par exemple celle du milieuà ce résumerait en des incrémentations de pointeur sur le GFX... optimisable dans certains cas par des addition au lieu des INC... Ensuite suffit aussi de bien placer le gfx en RAM afin d'optimiser les inc etc... Donc juste du mapping. Plus rapide mais prend plus de place en RAM.


Haut
  
 
Fredouille
 Sujet du message : Re: Optimisation de code
Message Publié : 05 Juil 2010, 12:20 
Hors-ligne
Rulezz
Rulezz
Avatar de l’utilisateur

Inscription : 26 Nov 2008, 10:04
Message(s) : 174
Localisation : Saint Ouen l'Aumône
Iron, c'est quoi ton histoire de courbes ?


Haut
 Profil  
 
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  Page 1 sur 1
 [ 8 message(s) ] 

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