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 » Assembleur -> C (7 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
Invité Ecrit le: Samedi 26 mars 2005 à 18:15 Déconnecté(e)    
 
Je ne savais pas où poster ça alors je l'ai mis là.
Dans la démo 12 d'Extgraph il y a le code
asm("
.text
.globl Sprite16_BLIT_R_very_special
.even

Sprite16_BLIT_R_very_special:
moveq #5-1,%d2
moveq #0xF,%d1
lea 0x4C00.w,%a0

_loop_Sprite16_BLIT_R:
move.w (%a0),%d0
and.w %d1,%d0
or.w (%a1)+,%d0
move.w %d0,(%a0)
lea 30(%a0),%a0

move.w (%a0),%d0
and.w %d1,%d0
or.w (%a1)+,%d0
move.w %d0,(%a0)
lea 30(%a0),%a0
dbf %d2,_loop_Sprite16_BLIT_R

rts
");

Vu que je ne suis pas super bon en ASM j'aimerais savoir quel est l'équivalent de ce code en C ?
Merci.
    
./Post n°1   Marquer comme non lu.
Sasume Ecrit le: Samedi 26 mars 2005 à 18:56 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

void Sprite16_BLIT_R_very_special(short *sprt)
{
  long height = 10;
  short *dest = LCD_MEM;

  do
  {
    *dest = ((*dest & 0xF) | *sprt++);
    dest += 15;
  }while(--height);
}
    
./Post n°2   Marquer comme non lu.
Kevin Kofler Ecrit le: Samedi 26 mars 2005 à 18:59 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  


void Sprite16_BLIT_R_very_special(unsigned short *sprite asm("a1"))
{
unsigned short d0;
short d2 = 5-1;
unsigned short d1 = 0xF;
unsigned short *a0 = LCD_MEM;

_loop_Sprite16_BLIT_R:
d0 = *a0;
d0 &= d1;
d0 = *(sprite++);
*a0 = d0;
a0 += 30/sizeof(unsigned short);

d0 = *a0;
d0 &= d1;
d0 = *(sprite++);
*a0 = d0;
a0 += 30/sizeof(unsigned short);
d2--; if (d2 != -1) goto _loop_Sprite16_BLIT_R;
}
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°3   Marquer comme non lu.
Invité Ecrit le: Samedi 26 mars 2005 à 19:06 Déconnecté(e)    
 
Ok merci ! :)
    
./Post n°4   Marquer comme non lu.
Kevin Kofler Ecrit le: Samedi 26 mars 2005 à 19:06 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  


Le code de Sasume est bien le plus lisible, moi j'ai converti 1:1 le code ASM. ;)
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°5   Marquer comme non lu.
Invité Ecrit le: Samedi 26 mars 2005 à 19:08 Déconnecté(e)    
 
Plutot que de recopier betement, J'aimerais savoir savoir si quelqu'un peut m'expliquer ce code et ce qu'il fait, svp, merci.
    
./Post n°6   Marquer comme non lu.
Sasume Ecrit le: Samedi 26 mars 2005 à 20:23 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

Qu'est-ce que tu ne comprends pas ?
Bon, je rajoute des commentaires, mais je ne sais pas s'ils seront plus explicite que le code lui-même (au passage, j'améliore un peu la lisibilité du code) :
void Sprite16_BLIT_R_very_special(short *sprt)
{
  long height = 10; // Hauteur du sprite
  short *dest = LCD_MEM; // Adresse de destination : écran

  do
  {
    short tmp = *dest & 0xF; // Prendre l'octet de poids faible de la destination
    *dest = (tmp | *sprt++); // OU logique sur 2 octets entre tmp et la ligne du sprite
    dest += 30/sizeof(short); // Incrémenter dest pour pointer sur la ligne de l'écran suivante
  }while(--height); // Répéter pour chaque ligne du sprite
}

-Edité le Samedi 26 mars 2005 à 20:24 par sasume-
    
./Post n°7   Marquer comme non lu.
Invité Ecrit le: Dimanche 27 mars 2005 à 12:18 Déconnecté(e)    
 
Excuse, mais je suis un gros débutant et j'ai encore beaucoup de mal avec les pointeurs... Enfin, merci de ta réponse...
    
  :: Index » Forum Ti68K » Programmation C » Assembleur -> C (7 réponse(s))
Pages : 1/1     « [1] » »|

.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 60.78ms avec 22 requetes