Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum Ti68K » Programmation C » masker & merger un buffer (27 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
limmt Ecrit le: Samedi 2 juillet 2005 à 14:33 Déconnecté(e)    Voir le profil de limmt Envoyer un email à limmt Visiter le site WEB de limmt Envoyer un message privé à limmt  


voila j'ai un double-buffer (nvg) et j'aimerais le masquer de telle manière à ce qu'l ne reste qu'une partie du buffer affiché le reste à 0.
et j'aimerias aussi merger deux buffers avec un OR.
le tout le plus rapidement possible, mais le pb c'est que je ne connais pas l'asm :(
-Edité le Samedi 2 juillet 2005 à 14:33 par limmt-
http://www.falco-fr.com/ - http://www.jump67.com/ - http://www.msf-league.com/
    
./Post n°1   Marquer comme non lu.
Jfg Ecrit le: Samedi 2 juillet 2005 à 20:29 Déconnecté(e)    Voir le profil de Jfg Envoyer un email à Jfg Visiter le site WEB de Jfg Envoyer un message privé à Jfg  


le C n'est pas assez rapide ?

char* buffer1;
char* buffer2;
char* buffer3;
for (i=LCD_SIZE;i--;)
*(buffer1+i)|=((*(buffer2+i))&(*(buffer3+i)));
-Edité le Samedi 2 juillet 2005 à 20:31 par jfg-

EDIT:Smileys
-Edité le Samedi 2 juillet 2005 à 20:33 par limmt-
Kill Mario
    
./Post n°2   Marquer comme non lu.
limmt Ecrit le: Samedi 2 juillet 2005 à 20:34 Déconnecté(e)    Voir le profil de limmt Envoyer un email à limmt Visiter le site WEB de limmt Envoyer un message privé à limmt  


merci :)
y'a pas moyen d'optimiser ca en copiant plus que un octet par un octet?
http://www.falco-fr.com/ - http://www.jump67.com/ - http://www.msf-league.com/
    
./Post n°3   Marquer comme non lu.
Jfg Ecrit le: Samedi 2 juillet 2005 à 20:47 Déconnecté(e)    Voir le profil de Jfg Envoyer un email à Jfg Visiter le site WEB de Jfg Envoyer un message privé à Jfg  


si surement, mais je suis encore moins sur de moi là...
je suppose que transformer les "char*" en "*long" et LCD_SIZE en LCD_SIZE/4 marche
Kill Mario
    
./Post n°4   Marquer comme non lu.
limmt Ecrit le: Samedi 2 juillet 2005 à 22:03 Déconnecté(e)    Voir le profil de limmt Envoyer un email à limmt Visiter le site WEB de limmt Envoyer un message privé à limmt  


non je dirais plutot garder LCD_SIZE mais décrémenter i de 4 par 4 non? :)
http://www.falco-fr.com/ - http://www.jump67.com/ - http://www.msf-league.com/
    
./Post n°5   Marquer comme non lu.
Jfg Ecrit le: Samedi 2 juillet 2005 à 22:46 Déconnecté(e)    Voir le profil de Jfg Envoyer un email à Jfg Visiter le site WEB de Jfg Envoyer un message privé à Jfg  


non
(au passage, -"*long" +"long*"...)
Kill Mario
    
./Post n°6   Marquer comme non lu.
limmt Ecrit le: Samedi 2 juillet 2005 à 23:15 Déconnecté(e)    Voir le profil de limmt Envoyer un email à limmt Visiter le site WEB de limmt Envoyer un message privé à limmt  


est-ce les "long long *" sont possibles et est ce que ca fait bien 64bits mm sur ti?
http://www.falco-fr.com/ - http://www.jump67.com/ - http://www.msf-league.com/
    
./Post n°7   Marquer comme non lu.
limmt Ecrit le: Samedi 2 juillet 2005 à 23:34 Déconnecté(e)    Voir le profil de limmt Envoyer un email à limmt Visiter le site WEB de limmt Envoyer un message privé à limmt  


pou rle +4 ben si pasque sinon tu décalera de 1 à chaque fois au lieu de décaler de 4
http://www.falco-fr.com/ - http://www.jump67.com/ - http://www.msf-league.com/
    
./Post n°8   Marquer comme non lu.
limmt Ecrit le: Samedi 2 juillet 2005 à 23:51 Déconnecté(e)    Voir le profil de limmt Envoyer un email à limmt Visiter le site WEB de limmt Envoyer un message privé à limmt  


je viens de tester effectivement ca marche avec le code suivant:

void Display_start_menu()
{
  for (i=0;i<LCD_SIZE;i+=4)
  {
    *(long *)(lightplane+i)&=(*(long *)(buffer_sm_Mask+i));
    *(long *)(lightplane+i)|=(*(long *)(smplane+i));
    *(long *)(darkplane+i)&=(*(long *)(buffer_sm_Mask+i));
    *(long *)(darkplane+i)|=(*(long *)(smplane+3840+i));
  }
}
http://www.falco-fr.com/ - http://www.jump67.com/ - http://www.msf-league.com/
    
./Post n°9   Marquer comme non lu.
Jfg Ecrit le: Samedi 2 juillet 2005 à 23:51 Déconnecté(e)    Voir le profil de Jfg Envoyer un email à Jfg Visiter le site WEB de Jfg Envoyer un message privé à Jfg  


./6 les (long long) sont possibles, et ils font effectivement 64 bits
./7 ben va apprendre le C qu'est ce tu veux...
Kill Mario
    
./Post n°10   Marquer comme non lu.
Kevin Kofler Ecrit le: Dimanche 3 juillet 2005 à 00:41 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


limmt :
est-ce les "long long *" sont possibles et est ce que ca fait bien 64bits mm sur ti?

Ils sont possibles, mais ne servent à rien ici parce que le processeur ne les gère pas nativement.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°11   Marquer comme non lu.
limmt Ecrit le: Dimanche 3 juillet 2005 à 07:15 Déconnecté(e)    Voir le profil de limmt Envoyer un email à limmt Visiter le site WEB de limmt Envoyer un message privé à limmt  


ok merci :)
http://www.falco-fr.com/ - http://www.jump67.com/ - http://www.msf-league.com/
    
./Post n°12   Marquer comme non lu.
Lionel Debroux Ecrit le: Dimanche 3 juillet 2005 à 09:59 Déconnecté(e)    Voir le profil de Lionel Debroux Envoyer un email à Lionel Debroux Visiter le site WEB de Lionel Debroux Envoyer un message privé à Lionel Debroux  

#8: ouch, as-tu regardé le code produit ? Ce type de code était systématiquement très mal optimisé par les GCC 3.3.x (recalcul à chaque fois au lieu d'utiliser du postincrémenté). Vu la façon dont GCC 4.0.0 gère le postincrémenté, je ne pense pas qu'il le fasse non plus.
Le postincrémenté, il faut le faire à la main.
Lionel Debroux - membre de TICT.
    
./Post n°13   Marquer comme non lu.
LionelA Ecrit le: Dimanche 3 juillet 2005 à 15:25 Déconnecté(e)    Voir le profil de LionelA Envoyer un email à LionelA Visiter le site WEB de LionelA Envoyer un message privé à LionelA  


essaye avec ca :)


void Display_start_menu()
{
  long * smplane2 = (long*)smplane+LCD_SIZE;
  for (i=LCD_SIZE;i--)
  {
    *(long *)(lightplane)&=*(long *)(buffer_sm_Mask);
    *((long *)(lightplane)++)|=*((long *)(smplane++));
    *(long *)(darkplane)&=*((long *)(buffer_sm_Mask)++);
    *((long *)(darkplane)++)|=*(smplane2++);
  }
}

-Edité le Dimanche 3 juillet 2005 à 15:27 par LionelA-
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/
    
./Post n°14   Marquer comme non lu.
Kevin Kofler Ecrit le: Dimanche 3 juillet 2005 à 15:46 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Lionel Debroux :
#8: ouch, as-tu regardé le code produit ? Ce type de code était systématiquement très mal optimisé par les GCC 3.3.x (recalcul à chaque fois au lieu d'utiliser du postincrémenté). Vu la façon dont GCC 4.0.0 gère le postincrémenté, je ne pense pas qu'il le fasse non plus.
Le postincrémenté, il faut le faire à la main.

Normalement, GCC 4 est censé savoir transformer ça en arithmétique de pointeurs et par la suite en postincrémenté. Malheureusement, entre ce qu'il est censé faire et ce qu'il fait vraiment, il y a une grosse différence. En l'occurrence, il faut absolument que i soit local (c'est une règle générale, ne jamais utiliser une variable globale pour quelque chose qui peut être local), et même là, il y a deux postincrements, un addq.l #4,%a2 et un addq.l #4,%d1. (Il n'a pas réussi à éliminer i et faire un dbra à la place, malgré la conversion des calculs sur les adresses en arithmétique de pointeurs.)
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°15   Marquer comme non lu.
limmt Ecrit le: Dimanche 3 juillet 2005 à 15:54 Déconnecté(e)    Voir le profil de limmt Envoyer un email à limmt Visiter le site WEB de limmt Envoyer un message privé à limmt  


LionelA> ton code n e peut pas marcher puisque tu vas utiliser des long à des adresses impaires en passant 1 octet par un
http://www.falco-fr.com/ - http://www.jump67.com/ - http://www.msf-league.com/
    
./Post n°16   Marquer comme non lu.
LionelA Ecrit le: Dimanche 3 juillet 2005 à 16:34 Déconnecté(e)    Voir le profil de LionelA Envoyer un email à LionelA Visiter le site WEB de LionelA Envoyer un message privé à LionelA  


(quand tu fais ++ sur un pointeur en long ca incremente d'un long dans les adresses au fait)
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/
    
./Post n°17   Marquer comme non lu.
limmt Ecrit le: Dimanche 3 juillet 2005 à 16:36 Déconnecté(e)    Voir le profil de limmt Envoyer un email à limmt Visiter le site WEB de limmt Envoyer un message privé à limmt  


a oué
tiens je savais pas ca
-Edité le Dimanche 3 juillet 2005 à 16:36 par limmt-
http://www.falco-fr.com/ - http://www.jump67.com/ - http://www.msf-league.com/
    
./Post n°18   Marquer comme non lu.
Kevin Kofler Ecrit le: Dimanche 3 juillet 2005 à 16:42 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


LionelA :
(quand tu fais ++ sur un pointeur en long ca incremente d'un long dans les adresses au fait)

Mais pas si tu le fais sur un char *!
Le code correct (enfin, il y a des lvalue casts, donc c'est du code carrément TIGCC-only, même GCC n'accepte plus, mais pour TIGCC, c'est parfaitement correct) est:
void Display_start_menu()
{
  long * smplane2 = (long*)(smplane+LCD_SIZE);
  for (i=LCD_SIZE;i--)
  {
    *((long *)lightplane)&=*(long *)(buffer_sm_Mask);
    *(((long *)lightplane)++)|=*(((long *)smplane)++);
    *((long *)darkplane)&=*(((long *)buffer_sm_Mask)++);
    *(((long *)darkplane)++)|=*(smplane2++);
  }
}

(Attention aux parenthèses!)
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°19   Marquer comme non lu.
LionelA Ecrit le: Dimanche 3 juillet 2005 à 16:53 Déconnecté(e)    Voir le profil de LionelA Envoyer un email à LionelA Visiter le site WEB de LionelA Envoyer un message privé à LionelA  


ouais voila je m'etais ch*é au niveau des parentheses mais c'était ce que je voulais faire. Sinon il suffit de declarer des pointeurs en long et de copier les lightplane darkplane etc dedans pour que ca passe sans la feature de tigcc :)
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/
    
  :: Index » Forum Ti68K » Programmation C » masker & merger un buffer (27 réponse(s))
Pages : 1/2     « [1] 2 » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 47.64ms avec 18 requetes