1

Sur cc:

J'obtiens un "csrc(1):fatal error not enough memory" avec le programme suivant, et je ne comprend pas pourquoi

char ecran[3840],msg[50];
short tab[3];
unsigned long casedim;

memcpy(ecran,0x4c00,3840L);

tab[0]=125; //pourri CC!
tab[1]=35;
tab[2]=85;
casedim=sizeof(tab[0]);
{
char copie[sizeof(short)];
memcpy(copie,tab+1,casedim);
memcpy(tab+1,tab+2,casedim);
memcpy(tab+2,copie,casedim);
}
clrscr();
sprintf(msg,"tab[1]=%d",tab[1]);
DrawStr(0,0,msg,1);
sprintf(msg,"tab[2]=%d",tab[2]);
DrawStr(0,6,msg,1);

memcpy(0x4c00,ecran,3840L);
}



Pour le deuxieme programme suivant, j'obtiens un "Line 1111 emulator"

void main(void){
char ecran[3840],partie[300];
memcpy(ecran,(char *) 0x4c00,3840L);
memcpy(partie,(char *) 0x4c00+2*30,(unsigned long) 30*10);
clrscr();
memcpy((char *) 0x4c00+2*30,partie,(unsigned long) 30*10);
ngetchx();
memcpy((char *) 0x4c00,ecran,3840L);
}


(si j'enlève la dernière ligne, ca fonctionne)

Voici le code as produit:

include "ams_c"
bra main
even
_main:
link a6,#-4140
move.l a2,-(a7)
lea _memcpy,a2
pea 3840
pea $4c00
pea -3840(a6)
jsr (a2)
lea 12(a7),a7
pea 300
pea $4c3c
pea -4140(a6)
jsr (a2)
lea 12(a7),a7
jsr _clrscr
pea 300
pea -4140(a6)
pea $4c3c
jsr (a2)
lea 12(a7),a7
jsr _ngetchx
pea 3840
pea $4c00
jsr (a2)
lea 12(a7),a7
move.l -4144(a6),a2
unlk a6
rts



Quelqu'un peut m'aider?
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

2

Je n'ai jamais utilisé cc ni as, mais je vais tenter de faire quelque chose...

Pour le premier, c'est quoi le
{
char copie[sizeof(short)];
memcpy(copie,tab+1,casedim);
memcpy(tab+1,tab+2,casedim);
memcpy(tab+2,copie,casedim);
}
au milieu du code ? Je ne suis pas sûr que ça soit valide dans le "dialecte" C que "parle" cc. Essaie en déclarant copie au même endroit que tab.


Pour le deuxième, il manque une ligne, celle qui correspond à pea -3840(a6), dans le dernier appel (celui qui fait planter).
Le plantage n'est pas dû à un problème de débordement de pile (4140 octets, c'est parfaitement allouable sur la pile).


Ah, et une petite suggestion: si tu n'utilises pas printf, utilise ClrScr au lieu de clrscr.
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

3

XDanger a écrit :
Pour le premier, c'est quoi le
{
char copie[sizeof(short)];
memcpy(copie,tab+1,casedim);
memcpy(tab+1,tab+2,casedim);
memcpy(tab+2,copie,casedim);
} au milieu du code ?


C'est pour permuter les deux elemnts tab[1] et tab[2] du tableau, en fait je TENTE de faire une routine gerant ainsi tout : structures, short,char,...
XDanger
a écrit : Essaie en déclarant copie au même endrout que tab


J'ai retiré et les accolades internes au main, et donc j'ai déclaré copie au début de main. Mais cette fois, j'obtiens un "line 1111 emulator"
XDanger a écrit :
Pour le deuxième, il manque une ligne, celle qui correspond à pea -3840(a6), dans le dernier appel (celui qui fait planter).
Le plantage n'est pas dû à un problème de débordement de pile (4140 octets, c'est parfaitement allouable sur la pile).


En fait moi je n'ai fait que la source C, c'est la version nostub de cc qui a fait cet asmsrc
XDanger
a écrit : Ah, et une petite suggestion: si tu n'utilises pas printf, utilise ClrScr au lieu de clrscr.


En fait, on a juste pour fonctions une table des romcalls : je ne peut en faire qu'un seul,je ne sais pas à laquelle la ROMCALL correspond


Et les differents memcpy du 2e programme (à part le premier et le dernier qui gerent la restauration de l'ecran d'origine") c'est pour tenter d'extraire une portion de ligne à partir dans une adresse donnéé (qui peut donc être plus grande que la zone LCD_MEM!) et de copier une partie d'une adresse ecran ,vers le LCD_MEM. Je n'ai pas encore compris toutes les fonctions graphiques de la tigcclib, la seule fonction de scrolling que j'ai vue est tres limitée
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

4

>> Pour le premier, c'est quoi le
{
char copie[sizeof(short)];
memcpy(copie,tab+1,casedim);
memcpy(tab+1,tab+2,casedim);
memcpy(tab+2,copie,casedim);
}
au milieu du code ?
> C'est pour permuter les deux elemnts tab[1] et tab[2] du tableau, en fait je TENTE de faire une routine gerant ainsi tout : structures, short,char,...
Ca, j'avais compris. Je me suis mal exprimé. C'était les accolades au milieu du code et la déclaration d'une variable locale à cet endroit-là qui me posaient problème. Je n'étais pas sûr que cc le fasse bien.


> J'ai retiré et les accolades internes au main, et donc j'ai déclaré copie au début de main. Mais cette fois, j'obtiens un "line 1111 emulator"
Poste le code assembleur généré complet. Je parie que c'est encore du code invalide, comme celui que tu as posté l'autre fois.

> En fait moi je n'ai fait que la source C, c'est la version nostub de cc qui a fait cet asmsrc
Oui, je sais. Mais le fait d'avoir le code ASM permet de voir l'erreur. L'autre fois, c'était une erreur ASM (le compilateur semble oublier de pousser un argument). Là, c'est probablement pareil.

> En fait, on a juste pour fonctions une table des romcalls : je ne peut en faire qu'un seul,je ne sais pas à laquelle la ROMCALL correspond
clrscr n'est pas un ROM_CALL. clrscr est une macro qui appelle les ROM_CALLs ClrScr() et MoveTo(0,0). Elle n'est utile que pour des fonctions comme printf (les fonctions qui écrivent en mode TTY).
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

5

remplace short tab[3]; par bermudas tab[3];
c plus la saison

ça devrait marcher

6

roll
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

7

pardon j'ai pas fais expres

8

Moi je dis que ton post est très bien, il détend l'atmoshère trop tendue du foum smile

Très drôle en tout cas triroll
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

9

Mais oui, c'est mieux que de se taper dessus.
Moi j'aime bien cet humour.

10

fo faire comme ça pour appater les filles wink

11

grin
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

12

tu rigoles mais je fais tt le temps comme ça (mais c involontaire), apre sun gd sourire, elle se met a sourire et hop

13

Exuse moi XDanger, mais c'est le premier code que je poste
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

14

XDanger a écrit :
Poste le code assembleur généré complet. Je parie que c'est encore du code invalide, comme celui que tu as posté l'autre fois.


Exuse moi XDanger, mais c'est le premier code que je poste

(Ca y est, des bêtises avec les posts roll)

Par contre, je peux pas mettre le code as pour l'instant, parce que je n'ai plus le compilo ppg de Kevin qui optimisait les codes as obtenus( j'avais foutu cc et as à la poubelle), mais je me suis pas embeté, et j'ai repris les premieres versions de as et cc (enfin, cherche pas trop à comprendre sinon)

les accolades servaient à préparer un bloc de fonction tout prêt à couper pour exporter...génila,non!
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser