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 » Afficher une colone a hauteur variable. (29 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
Jfg Ecrit le: Dimanche 6 juin 2004 à 03:01 Déconnecté(e)    Voir le profil de Jfg Envoyer un email à Jfg Visiter le site WEB de Jfg Envoyer un message privé à Jfg  


Alors voila, je cherche à afficher une colone. Cette colone peut ètre dessiner avec le code suivant:


unsigned char wall_dark[1]= {
0b11001000,
};
unsigned char wall_light[1]= {
0b10101000,
};
unsigned char wall_mask[1]= {
0b00000111,
};


void draw_column() {
 char i;
 for (i=0;i < column_height;i++) {
  GraySprite8_MASK_R(x,i,1,wall_light,wall_dark,wall_mask,wall_mask,
  virtual[3],virtual[2]);
 }
}


Donc ça c'est moche et surtout lent. Est ce qu'il y a moyen de mettre qqchose comme:
GraySprite8_MASK_R(x,0,column_height,... ?
J'aimerais éviter d'allouer de la mémoire pour faire des sprites du genre:
sprite[column_max_height]= {
0b00000111,
0b00000111,
0b00000111,
[...]
0b00000111,
0b00000111,
0b00000111,
0b00000111
};
Kill Mario
    
./Post n°1   Marquer comme non lu.
Kevin Kofler Ecrit le: Dimanche 6 juin 2004 à 03:08 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  


Il n'y a pas de fonction comme ça dans ExtGraph, il te faudra adapter les fonctions existantes pour faire ce que tu veux.
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°2   Marquer comme non lu.
Jfg Ecrit le: Dimanche 6 juin 2004 à 05:36 Déconnecté(e)    Voir le profil de Jfg Envoyer un email à Jfg Visiter le site WEB de Jfg Envoyer un message privé à Jfg  


adapter = changer des trucs en ASM ?
Et est-ce que le gain de vitesse sera important ?
Kill Mario
    
./Post n°3   Marquer comme non lu.
Sasume Ecrit le: Dimanche 6 juin 2004 à 10:50 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

Je te conseille de décomposer ta colonne en sprites 8x8 (voire 8x16 ou plus), et d'afficher ça avec ta boucle for.
Ça sera plus rapide que d'afficher ligne par ligne.
    
./Post n°4   Marquer comme non lu.
Sasume Ecrit le: Dimanche 6 juin 2004 à 10:52 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

Mais si vraiment tu ne veux pas faire ça, je peux t'écrire une fonction qui le fait et qui sera assez rapide.
    
./Post n°5   Marquer comme non lu.
Lionel Debroux Ecrit le: Dimanche 6 juin 2004 à 13:38 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  

L'approche postée plus haut est en effet très inefficace.

> Je te conseille de décomposer ta colonne en sprites 8x8 (voire 8x16 ou plus), et d'afficher ça avec ta boucle for.
En effet.

> Mais si vraiment tu ne veux pas faire ça, je peux t'écrire une fonction qui le fait et qui sera assez rapide.
Ca serait encore mieux, et on pourrait même l'ajouter à ExtGraph.
Lionel Debroux - membre de TICT.
    
./Post n°6   Marquer comme non lu.
Jfg Ecrit le: Dimanche 6 juin 2004 à 15:43 Déconnecté(e)    Voir le profil de Jfg Envoyer un email à Jfg Visiter le site WEB de Jfg Envoyer un message privé à Jfg  


Je te conseille de décomposer ta colonne en sprites 8x8 (voire 8x16 ou plus), et d'afficher ça avec ta boucle for.

Je peut toujours faire ça... mais une fonction intégrée a ExtGraph me simplifirait un peu la vie.
Kill Mario
    
./Post n°7   Marquer comme non lu.
Sasume Ecrit le: Dimanche 6 juin 2004 à 21:37 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

En attendant, tu peux toujours la coder en C.
La version ASM viendra quand j'aurai le temps.

Lionel> Mouais par contre, je ne sais pas si ça vaut la peine d'être intégré... Il va falloir l'écrire dans tous les modes possibles, alors que je doute qu'elle devienne vraiment utilisée...
    
./Post n°8   Marquer comme non lu.
Sasume Ecrit le: Dimanche 6 juin 2004 à 22:40 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

Bon, voilà ce que j'ai fait :
drawpattern.h :
void DrawPattern(short x asm("%d0"),short y asm("%d1"),short repet asm("%d2"),short offset asm("%d3"),char motif asm("%d4"),void *dest asm("%a0"));

drawpattern.asm :
; Prototype C : void DrawPattern(short asm("%d0"),short asm("%d1"),short asm("d2"),short asm("%d3"),char asm("%d4"),void * asm("%a0"));

  section ".text"
  xdef DrawPattern

DrawPattern:
  move.l  d4,-(a7)
  move.l  d5,-(a7)

; Calcul de l'adresse de destination
  add.w   d1,d1
  move.w  d1,d5
  lsl.w   #4,d1
  sub.w   d5,d1

  move.w  d0,d5
  lsr.w   #4,d5
  add.w   d5,d1
  add.w   d1,d1

  adda.w  d1,a0

  subq.w  #1,d2
  moveq.l #0,d5
  move.b  d4,d5
  moveq.l #-1,d4
  clr.b  d4

; Détermination de la boucle d'affichage
  andi.w  #15,d0
  moveq.l #8,d1
  sub.w   d0,d1
  bpl.s   PreLoop1_DrawPattern

  neg.w   d0
  swap.w  d4
  ror.l   d0,d4
  swap.w  d5
  lsr.l   d0,d5
Loop2_DrawPattern:
  and.l   d4,(a0)
  or.l    d5,(a0)
  adda.w  d3,a0
  dbf     d2,Loop2_DrawPattern

  move.l  (a7)+,d5
  move.l  (a7)+,d4
  rts


PreLoop1_DrawPattern:
  rol.w   d1,d4
  lsl.w   d1,d5
Loop1_DrawPattern:
  and.w   d4,(a0)
  or.w    d5,(a0)
  adda.w  d3,a0
  dbf     d2,Loop1_DrawPattern

  move.l  (a7)+,d5
  move.l  (a7)+,d4
  rts

La fonction s'appelle avec les coordonnées x et y à partir desquelles tu veux afficher ton motif, ensuite la fonction affichera le moif en mode REPLACE repet fois, et entre chaque affichage, elle incrémentera la destination de offset octets (donc pour passer une ligne, tu mets 30).

[edit] : Je n'ai pas testé la fonction, donc elle est peut-être buggée :)
-Edité le Dimanche 6 juin 2004 à 22:47 par Sasume-
    
./Post n°9   Marquer comme non lu.
Lionel Debroux Ecrit le: Lundi 7 juin 2004 à 11:37 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  

On peut se limiter dans les modes... Une chose est sûre, elle ne serait pas intégrée sous cette forme (présence d'un argument dans d4).
Lionel Debroux - membre de TICT.
    
./Post n°10   Marquer comme non lu.
Sasume Ecrit le: Lundi 7 juin 2004 à 14:10 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

Je peux facilement virer l'utilisation de d4 pour les paramètres.
Sinon, j'ai légèrement modifié l'énoncé de façon à ce que ma fonction soit plus générale (grâce au paramètre offset), et j'avoue que sous cette forme, je pense qu'on pourrait l'intégrer à ExtGraph, puisqu'elle n'est pas limitée à afficher des colonnes seulement.
    
./Post n°11   Marquer comme non lu.
Jfg Ecrit le: Lundi 7 juin 2004 à 17:39 Déconnecté(e)    Voir le profil de Jfg Envoyer un email à Jfg Visiter le site WEB de Jfg Envoyer un message privé à Jfg  


Sasume, ta fonction se compile sans erreur, mais impossible d'envoyer le programme obtenu !
C'est probablement de ma faute vu que j'y connais pas grand chose en ASM. (Il a d'abord fallu que cherche en quelle type d'ASM (gnu ou A68k) ton code c'était!)

-Edité le Lundi 7 juin 2004 à 17:45 par jfg-
-Edité le Lundi 7 juin 2004 à 17:45 par jfg-
Kill Mario
    
./Post n°12   Marquer comme non lu.
Lionel Debroux Ecrit le: Lundi 7 juin 2004 à 18: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  

Vérifie que le nom de ton programme n'est pas un nom réservé. C'est une cause fréquente de "mais impossible d'envoyer le programme obtenu !" (je suppose vers la calculette).
Lionel Debroux - membre de TICT.
    
./Post n°13   Marquer comme non lu.
Jfg Ecrit le: Lundi 7 juin 2004 à 20:07 Déconnecté(e)    Voir le profil de Jfg Envoyer un email à Jfg Visiter le site WEB de Jfg Envoyer un message privé à Jfg  


Lionel Debroux> C'est ça. C'est marrant ça ne mettais jamais arrivé, alors j'aurais put chercher longtemps le problème.

Pendant que j'y suis, comment on fait pour changer le nom de "l'executable" obtenu? Jusqu'a maintenant je créais un nouveau projet avec un nouveau nom (c'est barbare, mais ça marche).

Sasume> A priori, ta fonction marche parfaitement.
-Edité le Lundi 7 juin 2004 à 20:10 par jfg-
Kill Mario
    
./Post n°14   Marquer comme non lu.
Kevin Kofler Ecrit le: Lundi 7 juin 2004 à 20:17 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  


Tu renommes l'entrée racine dans l'arborescence du projet dans l'IDE.
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.
Jfg Ecrit le: Mardi 8 juin 2004 à 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  


Sasume, ta fonction m'oblige à faire des colomnes de largeur 8 (à cause de mode d'affichage REPLACE). Je doit pouvoir masquer la colomne (mode AND et OR).
Lol je suis sur qu'il ne faut changer que 3-4 lignes dans le code ASM, mais j'y comprend rien.
-Edité le Mardi 8 juin 2004 à 23:53 par jfg-
Kill Mario
    
./Post n°16   Marquer comme non lu.
Sasume Ecrit le: Mercredi 9 juin 2004 à 00:09 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

OK, je ferai une version MASK demain.
    
./Post n°17   Marquer comme non lu.
Jfg Ecrit le: Mercredi 9 juin 2004 à 00:11 Déconnecté(e)    Voir le profil de Jfg Envoyer un email à Jfg Visiter le site WEB de Jfg Envoyer un message privé à Jfg  


J'ai aussi trouver des erreurs;
Le programme ci dessous

void _main(void) {
 int i=0;
 while (1) {
  clrscr();
  printf("%d",i);
  DrawPattern(i,20,10,30,0b10101000,LCD_MEM);
  i++;
  ngetchx();
 }
}

ne marche pas pour i appartient à: [9;15] U [25;31] U [41;47] U [57;63] U .....


Mais pas besoin que tu cherches à la corriger, je vais la faire en C (l'utilisation de ExtGraph 2 m'a déja fait gagner assez de rapidité).
Kill Mario
    
./Post n°18   Marquer comme non lu.
Sasume Ecrit le: Mercredi 9 juin 2004 à 15:05 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

J'ai corrigé ce bug (enfin, je pense), et j'ai modifié un truc pour qu'au cas où on passe un offset impair la fonction ne provoque pas d'adress error.
Et j'ai écrit le mode MASK, mais j'ai besoin qu'il soit testé : http://perso.wanadoo.fr/jackiechan68k/sources/DrawPattern.zip
    
./Post n°19   Marquer comme non lu.
Lionel Debroux Ecrit le: Mercredi 9 juin 2004 à 19:05 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  

[Off-Topic: Julien, combien de routines penses-tu pouvoir faire pour demain (au plus tard vendredi après-midi) ?]
Lionel Debroux - membre de TICT.
    
  :: Index » Forum Ti68K » Programmation C » Afficher une colone a hauteur variable. (29 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 64.95ms avec 18 requetes