1

Bon ya pas d'raisons que naPO ai son topic de questions d'noob en C et pas moi magic tongue
Alors voilà, c'est chose faite j'en ouvre un ^^

Bon on va démarrer cool avec une egnime sur laquelle je planche depuis un petit moment #magic_feignantiz_toussa# grin

Mon probleme est simple, j'travaille avec des "fenetres" dans mon programme et en niveaux de gris. Donc quand j'ouvre une fenetre,
je sauve tout skia dessous, j'ecrit, puis a un moment j'efface cette fenetre en remettant le sprite d'origine et je fini par libérer le bloc.
Et ce qui me pose probleme c'est la sauvegarde du sprite.
Dans la doc d'extgraph j'ai trouvé ca :
void SpriteX8Get(short x,short y,short h,void* src,unsigned char* dest,short bytewidth) __attribute__((__stkparm__));
J'arrive a l'utiliser +/- bien mais a chaque fois j'ai un crash de la calc :/

Ca m'etonne pas trop puisque j'arrive pas vraiment a savoir a quoi correspondent h et bytewidth. magic
h = la hauteur du sprite en pixels ? octets ? multiple de 8 ?
bytewidth = ??? multiple de 8 ?

Bref si kkun l'a deja utilisée j'apprecierai son aide happy
"De l'Art de faire des Posts qui ne servent a Rien." (c) Ximoon

15:13 @Ximoon - 29-11-2005
"C'est débile ce sondage, une fois de plus Dude, tu ne sers à rien #hehe#" #love# Il est collector celui là ^^

18:56 @Ximoon - 09-10-2010
"Mince Dude sert à quelque chose %) (pas taper :D )" Owii xD #trilove#

2

Oui cette fonction permet de sauver une image dont la hauteur est h et la largeur bytewidth*8

Donc si tu veux sauvergarder l'écran tu fera :

void SpriteX8Get(0, 0 , 128, LCD_MEM, buffer ,240/8) ;
Cyril Mottier [Etudiant à l'Institut National des Sciences Appliquées (INSA) de Rennes]
Mon site perso c'est ici
Tuto sur l'utilisation de Vertel3 : Cliquez ici

3

[cross sad]
y a aucune raison de penser que h devrait être multiple de qqch, par contre en principe bytewidth = largeur en octets = largeur en pixels / 8 ^^

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

4

Ah grin Oki merci happy
Donc c'est bien ce que je faisait au début mais ca buggais encore + cheeky
J'regarderai ca avant ce soir et si j'ai encore un probleme je m'en remettrai a vous happy
"De l'Art de faire des Posts qui ne servent a Rien." (c) Ximoon

15:13 @Ximoon - 29-11-2005
"C'est débile ce sondage, une fois de plus Dude, tu ne sers à rien #hehe#" #love# Il est collector celui là ^^

18:56 @Ximoon - 09-10-2010
"Mince Dude sert à quelque chose %) (pas taper :D )" Owii xD #trilove#

5

Une petite précision qui me viens là :
pour un seul plan, il me faut bien faire une alloc de sizeof(((h/8+1)*bytewidth)*(char )) non ?
"De l'Art de faire des Posts qui ne servent a Rien." (c) Ximoon

15:13 @Ximoon - 29-11-2005
"C'est débile ce sondage, une fois de plus Dude, tu ne sers à rien #hehe#" #love# Il est collector celui là ^^

18:56 @Ximoon - 09-10-2010
"Mince Dude sert à quelque chose %) (pas taper :D )" Owii xD #trilove#

6

NAN pourquoi tu divise h par 8 ! L'alloc est de h*bytewidth tout simplement !
Cyril Mottier [Etudiant à l'Institut National des Sciences Appliquées (INSA) de Rennes]
Mon site perso c'est ici
Tuto sur l'utilisation de Vertel3 : Cliquez ici

7

heu... grin
Si je multiplie des pixels avec des octets ya y avoir un probleme nan ? xD
[Apres réflexion ...]
Ptin chui une vraie quenelle magic
Merci Thor ^^ chinois
"De l'Art de faire des Posts qui ne servent a Rien." (c) Ximoon

15:13 @Ximoon - 29-11-2005
"C'est débile ce sondage, une fois de plus Dude, tu ne sers à rien #hehe#" #love# Il est collector celui là ^^

18:56 @Ximoon - 09-10-2010
"Mince Dude sert à quelque chose %) (pas taper :D )" Owii xD #trilove#

8

Oui tu as raison fais une analyse dimensionnelle wink

Mais le mieux c'est de te rapeller que 3840 = 128*240/8; Une ligne etant composée de 240 pixels elle utilise donc 240<<3 octets pour être codée or dans l'écran il y a 128 lignes donc ... tu connais la suite ... grin Bon courage pour ta fonction. A mon avis si ça foire c'est un problème de sortir d'écran car si je me rapelle bien cette fonction de sauvegarede de zone de l'écran n'est pas clippée.
Cyril Mottier [Etudiant à l'Institut National des Sciences Appliquées (INSA) de Rennes]
Mon site perso c'est ici
Tuto sur l'utilisation de Vertel3 : Cliquez ici

9

Nan mais effectivement j'ai percuté ca tàl : "[Apres réflexion ...] " grin
Ce qui est sûr c'est que je ferai plus l'erreur ^^
J'vois toutes ces fonctions d'un autre angle maintenant tongue Encore merci happy

Ajout> Et du coup le crash est dû à un dépassement de buffer dans la heap ^^
"De l'Art de faire des Posts qui ne servent a Rien." (c) Ximoon

15:13 @Ximoon - 29-11-2005
"C'est débile ce sondage, une fois de plus Dude, tu ne sers à rien #hehe#" #love# Il est collector celui là ^^

18:56 @Ximoon - 09-10-2010
"Mince Dude sert à quelque chose %) (pas taper :D )" Owii xD #trilove#

10

Je m'en doutais grin

De rien pour l'aide ...je suis passé par là également tongue
Cyril Mottier [Etudiant à l'Institut National des Sciences Appliquées (INSA) de Rennes]
Mon site perso c'est ici
Tuto sur l'utilisation de Vertel3 : Cliquez ici

11

^^

Bon j'viens de voir autre chose :

Alors, comme j'utilise les grays, j'ai pensé sauver mes deux plans avec 2 SpriteX8Get successifs, l'un pour DARK_PLANE et l'autre pour LIGHT_PLANE.
Ensuite pour les restaurer, j'efface l'emplacement du sprite et j'utilise 2 SpriteX8_OR successifs pour chacun des deux plans aussi.

Seulement j'ai un bug, et dans la doc d'extgraph je viens de voir qu'il y a une fonction :
void GraySpriteX8_OR(short x,short y,short h,unsigned char* sprite1,unsigned char* sprite2,short bytewidth,void* dest1,void* dest2);

Donc evidement j'ai cherché une fonction "GraySpriteX8Get" et j'ai pas trouvé.

Alors est-ce que mes bugs (graphiques) ne viendraient pas de là aussi ?
Mais j'ai comme un doute, puisque il serait logique que "la-dite" fonction fonctionne comme je procede.
Ou alors, est-il posible que lors des "Get", certaines parties des plans ne soient pas encore remplis et que du coup je copie n'importe quoi ?

Enfin bref je fait peut-etre fausse route alors merci de votre aide et de vos eclaircissements happy


------------------------------------------
Une autre question qui as rien avoir :

Admettons que j'ai un source en asm pur, je fait comment pour appeller une fonction en C sans passer par un appel asm ?
magic
"De l'Art de faire des Posts qui ne servent a Rien." (c) Ximoon

15:13 @Ximoon - 29-11-2005
"C'est débile ce sondage, une fois de plus Dude, tu ne sers à rien #hehe#" #love# Il est collector celui là ^^

18:56 @Ximoon - 09-10-2010
"Mince Dude sert à quelque chose %) (pas taper :D )" Owii xD #trilove#

12

- a priori étant donné que les sprites sont stockés sur deux plans indépendants j'aurais tendance à penser que GraySpriteX8 c'est la même chose que SpriteX8 appliqué à chacun des plans (en un peu plus rapide)

- ça peut être intéressant si tu n'as pas bcp de sprites qui bougent d'effacer et de redessiner (encore que, dans la mesure où tu n'as pas bcp de sprites, ça ne changera rien au framerate de prendre une solution presque optimale ou une solution moins optimale), mais dès que tu commences à avoir un peu bcp de sprites, c'est plus efficace de tout effacer et tout redessiner (en faisant du double buffering pour que ça ne clignote pas)

- il suffit que tu fasses un prototype en C :
asm {
MaFonction:
  mulu d0,d0
  rts
};
int MaFonction(int x);

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

13

• Dude se gratte la tete et parait perplexe magic


Bon je crois que sur un point on est d'accord grin
1/ A savoir que 2 SpriteX8_OR successifs peuvent etre "optimisés" en un seul GraySpriteX8_OR ^^

Par contre je sais pas si on s'est bien compris pour le reste starwars trifaq
[...]
Ah si!
1+2/ Apres rererelecture tu m'as répondu aussi pour les SpriteX8Get...alors j'ai rien dit magic

Bon par contre pour le troisieme point, je crois que ce que tu me dit c'est l'inverse de ce que je voudrai ^^
3/ En fait, j'ai 2 sources, l'une en C et l'autre en ASM. Et je voudrai appeler une fonction C de l'interieur de mon source ASM tongue
Est-ce possible ? si oui comment ? tripo
happy

Ah encore un truc, pour ca ? : "Ou alors, est-il posible que lors des "Get", certaines parties des plans ne soient pas encore remplis et que du coup je copie n'importe quoi ?"
A priori devrai y avoir aucun probleme puisque je fait pas de double buffering mais je voudrai en etre certain happy
"De l'Art de faire des Posts qui ne servent a Rien." (c) Ximoon

15:13 @Ximoon - 29-11-2005
"C'est débile ce sondage, une fois de plus Dude, tu ne sers à rien #hehe#" #love# Il est collector celui là ^^

18:56 @Ximoon - 09-10-2010
"Mince Dude sert à quelque chose %) (pas taper :D )" Owii xD #trilove#

14

Est-ce possible ? si oui comment ? tripo

Ah ben là y a encore moins à faire ^^ si par exemple tu utilises la convention regparm,
int square(int x) { return x*x; }

asm {
blabla:
  move.w param(pc),d0
  bsr square
  move.w d0,resultat
  rts
};

^^

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

15

mais LOL xD rotfl
C'est bien un truc pour moi ca ^^ #purtrucdefeignasse# magic
Moults merci's Pollux grin Ca va bien m'aider wink
"De l'Art de faire des Posts qui ne servent a Rien." (c) Ximoon

15:13 @Ximoon - 29-11-2005
"C'est débile ce sondage, une fois de plus Dude, tu ne sers à rien #hehe#" #love# Il est collector celui là ^^

18:56 @Ximoon - 09-10-2010
"Mince Dude sert à quelque chose %) (pas taper :D )" Owii xD #trilove#

16

Pollux :
- il suffit que tu fasses un prototype en C :
asm {
MaFonction:
  mulu d0,d0
  rts
};
int MaFonction(int x);
Il faut quand même préciser à TIGCC où sont les paramètres (ici, dans d0).
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

17

Bah non, pas si tu utilises la convention d'appel regparm...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

18

et c'est fiable, regparam ? je me souviens d'avoir eu qq plantages suivant le nbr de registres que je précisais, pas moyen de passer tous les arguments par registres dans certains cas ^^
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

19

Jamais eu de problèmes avec perso.
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

20

Moi non plus.

Pollux> Ce que je voulais dire c'est qu'il faut le préciser qqpart, parce que par défaut tigcc utilise stkparm comme convention.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

21

C'est quoi la différence de ces deux conventions ?
Parce que c'est pas la premiere fois que j'en entend parler ou meme que je les croise ^^
"De l'Art de faire des Posts qui ne servent a Rien." (c) Ximoon

15:13 @Ximoon - 29-11-2005
"C'est débile ce sondage, une fois de plus Dude, tu ne sers à rien #hehe#" #love# Il est collector celui là ^^

18:56 @Ximoon - 09-10-2010
"Mince Dude sert à quelque chose %) (pas taper :D )" Owii xD #trilove#

22

stkparm : les parametres sont empilé avant l'appel de la fonction
regparm : les parametres sont passés dans les registres
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/

23

ahhhhhhhhhhhhhhhhhh encore un truc de feignasse grin
"De l'Art de faire des Posts qui ne servent a Rien." (c) Ximoon

15:13 @Ximoon - 29-11-2005
"C'est débile ce sondage, une fois de plus Dude, tu ne sers à rien #hehe#" #love# Il est collector celui là ^^

18:56 @Ximoon - 09-10-2010
"Mince Dude sert à quelque chose %) (pas taper :D )" Owii xD #trilove#

24

C'est surtout que les appels sont plus rapides et prennent moins de place.

25

J'imagine que tu parle de regparm là ?
Tiens ben tant qu'a faire une autre question en rapport :
Me suis toujours demandé si "la pile" etait une puce à part ou si c'etait tout betement de la ram ? (j'ai mon avis mais je veux en etre sûr ^^ En ram non ?)

Edit> Hum grin question bete ca n'as aucun sens si c'est une puce a part ^^
"De l'Art de faire des Posts qui ne servent a Rien." (c) Ximoon

15:13 @Ximoon - 29-11-2005
"C'est débile ce sondage, une fois de plus Dude, tu ne sers à rien #hehe#" #love# Il est collector celui là ^^

18:56 @Ximoon - 09-10-2010
"Mince Dude sert à quelque chose %) (pas taper :D )" Owii xD #trilove#

26

Ca aurait très bien pu être une puce de ram séparée, ou de la mémoire interne du microcontrôleur sur hw1, ou... etc.
Bref c'est en ram happy
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

27

C'est le micro controleur qui "décide" où est la mémoire, et c'est transparent vis à vis de l'adressage mémoire, donc la mémoire peut être un peu partout. C'est bien ça ?
(j' essaye de me rappeler mes cours d'archi ^^)

28

Ah grin Le fameux mappage hehe
"De l'Art de faire des Posts qui ne servent a Rien." (c) Ximoon

15:13 @Ximoon - 29-11-2005
"C'est débile ce sondage, une fois de plus Dude, tu ne sers à rien #hehe#" #love# Il est collector celui là ^^

18:56 @Ximoon - 09-10-2010
"Mince Dude sert à quelque chose %) (pas taper :D )" Owii xD #trilove#