euh ...
alors voila en fait je suis un gros newbi qui pige rien, et voila mon probleme , je voudrais creer un ecran virtuel qui fasse : la hauteur de l'ecran de la calculatrice (ti89) et 3 fois sa largeur, cad a 99 pixels de hauteur et 477 pixel de longuer sachant que ds les tuto que j'ai lu, un malloc(3840) permet de creer un ecran de 239, 127 pixel
donc ma question est :comment je peux savoir la taille que je dois donner au malloc ?
j"ai lu que l'a fonction sizeof permettait de savoir cela mais elle a pour arguemnt un type (char,short...) et le type des ecran virtuel , c'est void alors comment je fais ??
et de plus cher Hi bou , je suis peut etre un newbi mais sache que l'on peut faire des niveaux de gris et moi j'utilise en ce moment 4 couleurs voila
j'espere que ce sera plus comprehensible merci a ceux qui me repondront
Bah... c toi qui créer ton écran virtuel, donc c toi ui donne les dimension. Sinon, Hibou n'as pas tord, c bien 1 bit par pixel. Les nvg s'obtiennent en superposant pendant un certain temps 2 écrans virtuel (en fin, je crois, j'ai jamais fait de nvg).

Membre fondateur de la Ligue Anti-MacIntoc
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Un expert est quelqu'un qui en sait de plus en plus sur de moins en moins
de choses, jusqu'à ce qu'il connaisse absolument tout à propos de rien.
donc avec un malloc(3840) je peux faire un screen avec les dimensions que je veux????
Zeph Le 08/05/2004 à 23:50 Les tailles de l'écran c'est pas 239*127 mais 240*128. Pour avoir un écran 3 fois plus large, bah il te faudra 3 fois plus de mémoire, c'est logique. Mais fais attention quand tu recopie cet écran virtuel sur le "vrai" écran, si tu es débutant je pense que tu vas avoir un peu de mal à t'en sortir.

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
matthieu> c pas avec un malloc que tu définis en écran virtuel...

Membre fondateur de la Ligue Anti-MacIntoc
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Un expert est quelqu'un qui en sait de plus en plus sur de moins en moins
de choses, jusqu'à ce qu'il connaisse absolument tout à propos de rien.
Zeph Le 09/05/2004 à 00:00 Peu importe que ce soit une Ti89 ou 92, la taille de l'écran est toujours 240*128, c'est uniquement la partie visible qui change. Et Hibou avait raison, il n'y a que 2 couleurs, donc on code un pixel sur un bit, ce qui fait 8 pixels sur un octet, donc la taille de l'écran est 240/8*128 = 3840 octets.

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
MacIntoc Le 09/05/2004 à 00:01Edité par MacIntoc le 09/05/2004 à 00:02 Je crois que g mal compris sa question.
matthieu>En fait, tu veux seulement savoir qu'elle taille en octet il faut réserver pour faire un écran virtuel de 99x477 ??
Si ce n'est que ça, il suffit simplement de multiplier la longueur par la largeur (donc 99*477/8). Si tu veux des nvg, il faut que tu prévoit 2 écran virtuel différent de 99*477/8.

Membre fondateur de la Ligue Anti-MacIntoc
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Un expert est quelqu'un qui en sait de plus en plus sur de moins en moins
de choses, jusqu'à ce qu'il connaisse absolument tout à propos de rien.
merci bcoup ôssi macintoc
tro sympa ce forum heureusement qu'il existe sinon des mecs kom moi s'en sortirait jamais
Tu devrais utiliser BitmapPut directement. Alloue 4 octets de plus pour ton écran virtuel, et mets hauteur et largeur dans les 4 premiers octets, comme ça tu as directement ton écran virtuel sous forme de structure BITMAP.
Zeph Le 09/05/2004 à 01:20Edité par Boo le 09/05/2004 à 01:20 Non non non... Là t'es parti dans une TRES mauvaise voie : celle du gars qui cherche plus rien par lui meme et qui pose ses questions sur le forum dès qu'il bloque plus de 5 minutes. Déjà a première vue ton buffer est trop petit pour contenir un écran de 500*100, cherche le reste toi même...
[edit] cross post.

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
oula c beaucoup tro rapide pour moi ca, comment on fait ca ?
bon ba voila le code final pour la premiere fois ca affiche qqchose mais c tou bizar ...je remercie tou le monde et jvé me coucher il est tôt la ...
#include <tigcclib.h>
short _ti89;
void _main(void)
{
SCR_RECT screen = {{0, 0, 159, 99}};
void *vscreen=malloc(6004);
*(short*)vscreen=100;
1[(short*)vscreen]=480;
PortSet(vscreen+4, 479, 99);
ClrScr();
DrawLine(0, 0, 159, 100, A_XOR);
PortRestore();
ClrScr();
BitmapPut (0, 0,vscreen, &screen, A_NORMAL);
ngetchx();
free(vscreen);
}
ah bon!!!! on est tant limité que cela ???
bon ba merci Mr kofler
matthieu Le 09/05/2004 à 11:38Edité par matthieu le 09/05/2004 à 13:15 voui mais c +fluide avec un ecran virtuel e
alors voila, j'ai testé ce bout de code mais ca marche pas pourtant j'ai verifié et reverifié et etc je ne pas trouvé d'erreur :
#include <tigcclib.h>
short _ti89;
void _main(void)
{
SCR_RECT screen = {{0, 0, 255, 99}}; // l'ecran visible
void *vscreen=malloc(6404); //l'cran virtuel principal
*(short*)vscreen=100; // l'idée de Mr kofler
1[(short*)vscreen]=512; //
PortSet(vscreen+4,511, 99);
ClrScr(); // on bidouille un peu ds l'ecran virtuel
short i;
char interm[10];
for(i=0;i<6;i++)
{
DrawLine(i,0,i,99,A_NORMAL);
DrawLine(0,99-i,511,99-i,A_NORMAL);
DrawLine(511-i,0,511-i,99,A_NORMAL);
}
for(i=0;i<510;i+=10)
{
sprintf(interm,"%d",i);
DrawStr(i,80,interm,A_NORMAL);
}
PortRestore(); // on s'arrette la
void *vscreen1=malloc(3204);// definition de l'ecran n°2
*(short*)vscreen1=100;
1[(short*)vscreen1]=256; // taille supporté par l'ams
memcpy(vscreen1+4,vscreen+4,3200); // on mets tous ce qu'il ya ds vscreen du 4e octet au 3200 e octet ds vscreen 1
void *vscreen2=malloc(3204); // ds la doc tigcc le memcpy se fait avec des byte, j'ai essayé et ca fait planté ma calc alors qu'avec les octets y'a un resultat sur l'ecran
*(short*)vscreen2=100;
1[(short*)vscreen2]=256; // taille suporté par l'ams
memcpy(vscreen2+4,vscreen+3204,3200); // de meme pour vsc2
free(vscreen); // fô pas prendre tro de place non plus
short quitter=0;
short x=0;
ClrScr();
BitmapPut (x, 0,vscreen1+4, &screen, A_REPLACE); // deja la c bizzare que ca affiche rien
ngetchx();
INT_HANDLER save_int_1;
save_int_1 = GetIntVec(AUTO_INT_1);
SetIntVec(AUTO_INT_1, DUMMY_HANDLER);
do{
if(_rowread(0x7E)&0x2)
{
ClrScr();
x-=10;
BitmapPut (x, 0,vscreen1+4, &screen, A_NORMAL);
if(x<-109){BitmapPut (255+x, 0,vscreen2+4, &screen, A_NORMAL);} // si on est arrivé a la fin de vscreen 1 on affiche vscreen2 un ecran + loin
for(i=0;i<1000;i++) {} // une boucle pour ralentir un peu
}
if(_rowread(0x3F)&0x1) quitter=1;
}while(quitter==0);
SetIntVec (AUTO_INT_1, save_int_1);
free(vscreen1);free(vscreen2);
}
voila ba je ne comprend pas ce qu'il ne marche pas
merci a ceux qui me liront
c bien bizar tou ca j'ai reussi a faire afficher qqchose mais j'ai l'impression que le memcpy a copier le bytes ds un autre ordre si qqun a des info la dessus ce serait sympa
matthieu > Non. Dès que tu dépasses 255 dans ton PortSet, ça devient faux. Si tu mets 480, il prendra un écran de 224 pixels. Alors forcément tu verras quelque chose, mais ce sera faux. Donc tu n'as aucune chance de pouvoir utiliser les routines AMS de cette manière.
a ouééé j'avais completement oublié le portset(...) ah d'accord ba tou va mieu maintenant ba dis donc c vraiment compliké les ecrans virtuels