1

Je viens d'acheter une ti 89 hw2 avant hier et je viens de commencer la programmation en C.
J'avais déjà une 83plus et je programmais uniquement en BASIC.


Je viens de fare un programme graphique en C avec TiGCC v0.93 (on déplace un mur 3D afficher avec des sprites et des lignes) et j'aimerais savoir comment faire pour calculer le nbre d'images par seconde. Je pense évidement qu'il faut utiliser les timers mais je ne sais pas comment faire.


Et puis je voulais savoir à quoi servent les instructions: "unsigned" et "register" dès que l'on créer un char, un long...
Et qu'est-ce qui faut mettre après le caractère % dès que l'on affiche une chaîne ?
Parce-que l'on peut mettre des s,d,i je crois mais je sais pas à quoi ça correspond.
Merci d'avance ! :-)
www.wikio.fr/user1921&info=comments

2

pour les s d i, ... regarde dans la doc de TIGCC, à l'entrée printf.
mais c pas super rapide comme solution..

un conseil, vu que tu as l'air de pas mal débutter, commence par des projets un peu moins gourmands...
vas sur www.ti-fr.org, rubrique programmation, tu trouvera aussi un peu d'aide sur le C sous TIGCC
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

3

Ok !
Merci bien de m'avoir répondu si vite !
Tout ce que je sais en C je l'ai apris ces deux derniers jours avec le Tuto de Ti.fr.
J'en ai déjà imprimer 40 pages en petites lettres. :-)
D'ailleurs il est vraiment bien parce-qu'avec la doc de TIGCC même traduite en Français on s'en sort pas.
T'inquiète pas je ne commence pas fort du tout ! ;-) En Basic 83 j'ai déjà fait des gros projets et je continue tjrs.
Par contre g pas appris le Basic 89 parce-que j'en voit pas trop l'utilité.
Là j'ai fait qu'un prog en C et je le complète au fur et à mesure n'importe comment juste pour apprendre. Au début mon projet n'était pas gros : une instruction ;-) et puis je l'ai agrandit.
D'ailleurs g déjà mis des sprites avec des niveaux de gris.

Et pour afficher le nbre d'images par secondes, il n'y a pas un truc tt simple ?
Sinon et bien pour le reste je vais me replonger dans mes feuilles.
Merci !
www.wikio.fr/user1921&info=comments

4

"unsigned TYPE" signifie que tu ne vas qu'attribuer des valeurs positives à ta variable de type TYPE.

les types "short", "int", "char", "long" sont de type "signed" par défaut, ce qui veud dire qu'on peut leur attribuer des valeurs de tous signes (+, -), mais en conséquent la borne supérieure positive de l'intervalle de valeurs que peut contenir cette variable va être réduite (étant donné que le bit de poids fort est utilisé pour donner le signe).

Donc voilà, ça sert à donner le signe de la variable, et puis à pouvoir stocker des valeurs plus grandes positives si on déclare avec "unsigned" devant.

"register" >> j'ai oublié grin, ça doit être uin truc avec les registres, mais je m'en sers presque jamais. wink
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

5

Oh ! merci bien ! :-)

Par contre g un pb avec ma calc :
Dans la boucle du prog avec le mur 3D j'ai mis un code tout bête pour voir la rapidité du prog :

time_frame=time_frame+1;
sprintf(framestr,"Frame rate:%d",time_frame);
DrawStr(10,10,framestr,A_NORMAL);

Ca marche sur l'émulateur VTI hw1 et ça fait planter une fois sur 3 la calc hw2 2.05.
En quittant la calc affiche Illégal Instruction.
C'est vraiment bizarre ! confus
En fait je sais tjrs pas ce qu'il faut mettre avec % ni si il faut mettre des espace mais sur VTI ça marche tt le temps ça.
J'ai déjà remarqué qu'il y a pleins de différence entre l'émulateur HW1 et la calc. Des fois il faut changer des instructions de place ou changer le code pour que ça marche.
Je ne sais pas quel calc vous avez mais qd on affiche les niveaux de gris sur HW2, on ne peux pas afficher des sprite sans niveau de gris une fois que l'on a activé les niveuax avec GrayOn();
C vraiment compliqué ! Il faudrait peut-être que je télécharge la rom 2.05 pour VTI si c possible alors.
www.wikio.fr/user1921&info=comments

6

Je ne sais pas quel calc vous avez mais qd on affiche les niveaux de gris sur HW2, on ne peux pas afficher des sprite sans niveau de gris une fois que l'on a activé les niveuax avec GrayOn();


si si ! wink on peut, il faut afficher EXACTEMENT la même définition de sprite en N & B sur le plan clair, et sur le plan foncé.

Enfin, si je me rappelle bien, ça marche de cette façon les nvg, donc le même affichage sur les 2 plans devrait afficher le sprite en N & B.
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

7

t'as tout bon pim smile
sinon pour le frame rate g bien une routine toute faite mais là g la flemme de chercher, je la mettrai demain grin
*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & sabrina

8

wouéé, je la veux bien aussi. oui
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

9

Tout ce que je sais en C je l'ai apris ces deux derniers jours avec le Tuto de Ti.fr.
J'en ai déjà imprimer 40 pages en petites lettres. :-) D'ailleurs il est vraiment bien

Je prend ça comme un compliment smile
merci smile

Pim> dnas la versio du tuto que j'ai sur mon dur, il y a plus d'explications concernant les mots clé... faut juste que je finisse de la relire avant de la diffuser...
(46 page à relire.. une demi-heure par page... en gros, faut que je m'y mette sérieusement)
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

10

voilà la routine :

***Début du programme***
INT_HANDLER save_int_5;

***Main***
short fps,fpsF;
save_int_5=GetIntVec(AUTO_INT_5);
FontSetSys(F_6x8);
fps=0;fpsF=0;

***Dans la boucle***
SetPlane(DARK_PLANE);
printf_xy(1,1, "%d FPS", fpsF);
if(fps==0)
{
OSFreeTimer(USER_TIMER);
OSRegisterTimer(USER_TIMER, 20);
}
fps++;
if(OSTimerExpired(USER_TIMER))
{
fpsF=fps;
fps=0;
}

***Fin du programme***
SetIntVec(AUTO_INT_5,save_int_5);
*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & sabrina

11

Merci bien ! Je vais voir si ça plante pas sur ma calc....
Et "INT_HANDLER save_int_5;" c'est juste parce-qu'après tu utilises _rowread ?
www.wikio.fr/user1921&info=comments

12

Ca marche ! (avec les debugger déjà).
Elle est pas mal ta routine ! smile
www.wikio.fr/user1921&info=comments

13

Le INT_HANDLER save_int_5; c la var de sauvegarde de l'int5 qui est modifié pour le calcul du fps ...
*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & sabrina

14

-

15

a ué pas con
mais ta méthode ne permet pas de voir si ça rame à un endroit précis ...
*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & sabrina

16

-

17

ben ça c parce-que normalement je le détourne mais là comme je l'utilise pour le fps ...
*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & sabrina

18

Et c quoi l'int5 ? Moi je viens d'effacer ce code pour voir si ça marchais et ça marche tjrs. Mais je vais le remettre alors ! smile
C'est l'int1 qui est pour les touches alors (par contre je sais que ce code est indispensable) ?
www.wikio.fr/user1921&info=comments

19

oué
le 5 qd je le désactivais pas j'avais des bugs byzarres dc maintenant je le désactive

mais bon, à la limite tu peux faire l'impasse sur l'int5 vu qu'il ne sert pas vraiment ds cette routine ...
*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & sabrina

20

Ok ! top
J'ai régler le timer sur 18 pour voir et ça tourne à 9 fps ! bang
Faut dire que j'ai mis une boucle for longue de 40 pour afficher les deux plus grandes face du mur avec deux DrawLine et ça fait des joli niveaux de gris qui oscillent qui qu'il vont à contre sens.
Mais en bougeant le mur qu'il y ait le moins de pixels à afficher j'arrive bien à 37-40 sur VTI (hw1).
Et au fait le timer c'est 18 ou 20 pour une seconde ? Sur les deux hardware c pareil ?
www.wikio.fr/user1921&info=comments

21

Houlà, n'utilise surtout pas DrawLine ! C'est très lent.
Utilise plutôt les fonctions d'extgraph qui sont nettement plus rapides !

22

Je suis au courant. D'ailleurs je l'ai téléchargé hier.
Il y a FastdrawLine (je crois). Il faudra que je réessaye parce-que je n'avait pas compris la syntaxe.
Ils disent que c 300% plus rapide ! Moi j'utilise aussi 15 autres lignes en plus et j'aurais pu essayer MultiLine.
Je vais donc essayer avec cette API.

Mais je vois pas pourquoi DrawFastLine est plus rapide que DrawLine vu qu'ensuite c compilé ? Ca vient de quoi en fait ? DrawFast line vient de l'asm mais pourquoi l'autre est plus lente ? En fait je compren pas encore la déférence entre de l'asm assembler et du C compilé.
www.wikio.fr/user1921&info=comments

23

En effet, c'est extrêmement rapide. Et si tu as besoin de clipping, tu peux utiliser ça. Ce n'est pas aussi rapide que la fonction d'extgraph, mais ça gère le clipping... Sinon, tu n'as qu'à modifier les sources d'extrgaph pour qu'elles gèrent le clipping...

24

Extgraph est plus rapide simplement parce qu'elle utilise un meilleur algo que DrawLine, tout simplement. Et puis DrawLine est un peu plus complexe : il peut gérer des écrans de n'importe quelle taille ! Tandis que FastDrawLine ne s'utilise qu'avec des écrans de 3840 octets (240*128).

25

register c pour forcer le compilo à utiliser un registre (une variable interne du µproc) au lieu d'un emplacement mémoire. l'avantage de ce type de variable, c'est que les temps d'accès sont plus rapides.

mais le nombre de registre est limité.
il y a a0, a1, ..., a7 pour les pointeurs. (registres d'adresses)
d0, d1, ..., d7 pour le reste. (registres de données)

au cas ou le nombre de variables register dépasse le nombre de registres, le compilo utilise des vars normales.


P.S.
je doute fortement que le compilo utilise a7 pour autre chose que pour la pile...

26

>En fait je comprend pas encore la diférence entre de l'asm assemblé et du C compilé
tous les langages (sauf ceux interprétés comme le ti-basic par ex) sont traduits en assembleur, ie le langage du µproc.
Et la traduction est plus efficace si elle est (bien) faite à la main (ie si tu codes directement en asm).

27

-

28

Mais ne l'utilise que si tu as besoin de clipping, car sinon, la routine d'Extrgaph est plus rapide !

29

D'accord. Merci !
Mais je comprend tjrs pas la syntaxe de FastDrawLine:

void FastDrawLine(unsigned char* plane,short x1,short y1,short x2,short y2,short mode);
Si on veut tracer une ligne il faut mettre par ex :
FastDrawLine(unsigned char* plane,0,0,160,10,A_NORMAL); C ça ?
... mais c koi unsigned char* plane ?
www.wikio.fr/user1921&info=comments

30

void *buffer = calloc(3840, sizeof(char)); // écran virtuel

FastDrawLine(buffer ,0 ,0 ,160 ,10, A_NORMAL); // exemple
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^