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

Optimisation de code
https://cpcrulez.fr/forum/viewtopic.php?f=4&t=4255
Page 1 sur 1

Auteur :  Demoniak [ 04 Juil 2010, 08:44 ]
Sujet du message :  Optimisation de code

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

Auteur :  Fredouille [ 04 Juil 2010, 15:38 ]
Sujet du message :  Re: Optimisation de code

Heu... Tu cherches quoi comme optimisation ? Vitesse ou taille ?

Auteur :  Demoniak [ 04 Juil 2010, 15:55 ]
Sujet du message :  Re: Optimisation de code

vitesse :)

Auteur :  Fredouille [ 04 Juil 2010, 18:21 ]
Sujet du message :  Re: Optimisation de code

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

Auteur :  Demoniak [ 04 Juil 2010, 20:57 ]
Sujet du message :  Re: Optimisation de code

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

Auteur :  Fredouille [ 04 Juil 2010, 21:58 ]
Sujet du message :  Re: Optimisation de code

Ah oui, en C, c'est déjà plus lisible :D

Auteur :  BDCIron [ 05 Juil 2010, 10:51 ]
Sujet du message :  Re: Optimisation de code

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.

Auteur :  Fredouille [ 05 Juil 2010, 12:20 ]
Sujet du message :  Re: Optimisation de code

Iron, c'est quoi ton histoire de courbes ?

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