1

J'ai un soucis technique, ayant réussi a aligné quelque lignes de code, je voudrais faire de l'animation sur deux écrans, le pb c'est pour la réservation de la ram, voulant faire cela proprement, je 'malloc', mais bien sur apparement je récup 0 donc pb de mémoire, donc deux questions :

- le pcstart.o : procède au mshrink pour restitué la ram inutilisé ? (Pure C utilisé dans mon cas)


Je crois bien avoir rien compris aux pointeurs, d'après des exemples de malloc en C, il faut utilisé un pointeur, un truc du genre :

char *screen1,*screen2;


pnt_malloc=malloc(taille);

C'est bien cela qu'il faut faire ? Et après pour le Setscreen, un truc comme cela :

Setscreen(screen1,screen2,-1)

Et pour affiché la valeur du pointeur, on fait comment, le printf d'accord mais utilisé quel type de formatage pour l'affiché ?


GT Turbo octopus

Merci a ceux qui pourront me répondre très rapidement, JC approchant !!

avatar< SCPCD > j'aurais du dire "les doigts dans le cul vu que le java c'est de la merde"
Je suis Goto !

2

Si tu veux être GEM qui passe partout, le SetScreen (XBIOS(5)) est interdit. Il faut passer par la VDI et vro_cpyfm et cie.

Pour les mallocs : évite de prendre celui du C, et utilises celui du GEMDOS = Malloc avec un grand M (GEMDOS(72)) et libère celà obligatoirement (sinon ça va être le bordel), avec Mfree (GEMDOS(73)). Tu peux faire par dessus des Mshrink (GEMDOS(74)).

3

Le pointeur, c'est une valeur qui te donne une adresse en mémoire.
Tu fais un malloc (ou Malloc) pour t'allouer une partie de la mémoire, en retour, tu reçois l'adresse de départ de cette partie de mémoire.

A la limite, si tu fais :
char poulpi[100];

et
char *poulpi;
poulpi =Malloc(100);

C'est la même chose, poulpi correspond à l'adresse du premier octet d'un bloc de 100.
Inutile de dire que la 2° méthode est la plus souple, la plus propre (penser à vider la mémoire ensuite, sinon, on frise la dépression nerveuse), blabla

Rem : il y a un peu la même chose en GFA (déclarer un tableau de 32000 pour un écran ou faire un MALLOC)
avatar

4

GT Turbo :
- le pcstart.o : procède au mshrink pour restitué la ram inutilisé ? (Pure C utilisé dans mon cas)

Je crois que oui.

Je crois bien avoir rien compris aux pointeurs, d'après des exemples de malloc en C, il faut utilisé un pointeur, un truc du genre :

char *screen1,*screen2;
pnt_malloc=malloc(taille);

Oui.
En C, il faut différencier les fonctions systèmes (Malloc, Mxalloc, Mshrink, Mfree avec M majuscule) de TOS/MiNT, des fonctions de la librairie C standard (malloc, realloc, free) qui permettent d'éviter trop souvent d'appeler les fonctions du système.

C'est bien cela qu'il faut faire ? Et après pour le Setscreen, un truc comme cela :

Setscreen(screen1,screen2,-1)

Si tu utilises le malloc() de la librarie C standard, elle va allouer par défaut ses buffers en FastRam (à moins que tu changes les flags adéquats dans l'entete du programme).
L'écran doit se trouver en ST Ram (tout comme les buffers utilisés pour le DMA audio par exemple). Il faut donc appeler Mxalloc() pour demander explicitement un buffer alloué en ST Ram (sur TT/Falcon). On teste la présence de cette fonction en lisant la version de Gemdos(), exemple ici:
http://www.libsdl.org/cgi/cvsweb.cgi/SDL12/src/video/ataricommon/SDL_atarimxalloc.c?rev=1.3&content-type=text/x-cvsweb-markup

Et pour affiché la valeur du pointeur, on fait comment, le printf d'accord mais utilisé quel type de formatage pour l'affiché ?

Moi, j'utilise prinf("0x%08x", pointeur); pour afficher en hexa, sur 8 chiffres, précédés par 0x.

5

Merci a tout le monde pour vos réponses.

Rajah je sais que le Setscreen n'est pas a utilisé dans des 'progs propres', mais c'est juste pour des besoins de dvp, c'est pour du code interne au groupe.

Fadest, merci pour le détail, mais je sais ce qu'est un pointeur, mon langage préféré étant l'asm, sans pointeur t'est pas bien !!

C'est surtout la manière et le style de le décrire. Pour moi un pointeur est une variable (Mot long) avec une valeur et j'ai pas l'habitude de devoir précisé ce que je veux en faire. Cela serait pas plus simple comme en Asm ?

Merci Patrice, sur le lot je penses que c'est toit qui a le mieux répondu (Je ne dénigres pas la réponse des autres bien loin de moi cette idée !).

Apparement mon code marche un peu mieux, il y a juste le second 'M'alloc qui a pas l'air de passé, mais je regarderais en détail tout a l'heure.

Par contre j'utilises le 'M'alloc, celui la au moins je le connais !!

GT octopus
avatar< SCPCD > j'aurais du dire "les doigts dans le cul vu que le java c'est de la merde"
Je suis Goto !

6

GT Turbo :
Je crois bien avoir rien compris aux pointeurs

Je répondais à cette phrase roll

Et maintenant, tu me dis ça :
GT Turbo :
Fadest, merci pour le détail, mais je sais ce qu'est un pointeur


C'est pas clair ton truc wink
avatar

7

Excuse moi j'ai des petits soucis d'expressions, je suis comme Kuk un pollak mais je n'arrives pas a m'intégré aussi bien que lui, je voulais dire que c'est la manière dont sont 'réprésentés' les pointeurs en C qui me bouleverse, en Gfa c'est comme un Asm, c'est une variable, c'est tout, pas de déclaration bizzare etc...


Mais merci quand meme a toi et meme aux autres.


Poulpi ! octopus

P.S. : Pour me faire pardonné tu auras droit a un (petit) sachet de dragibus a la JC, si Vince me torpille pas ma réserve.
avatar< SCPCD > j'aurais du dire "les doigts dans le cul vu que le java c'est de la merde"
Je suis Goto !

8

Ben en C, tu mets une * pour dire que ta variable est un pointeur (et donc une variable).
Derrière, tu t'en sers comme d'un pointeur asm ou GFA.
Si tu ne mets pas *, il ne t'alloues qu'un octet dans le cas d'un char par exemple.

Enfin, bon, l'essentiel, c'est que tu arrives à tes fins grin
avatar