Folco (./236) :
Kevin Kofler (./234) :
Écritures dans ta structure globale.
Tu veux dire quoi précisément ? Il est infoutu d'utiliser offset(an) pour ça ?? Pourquoi c'est pas fait par défaut, toi qui est toujours pour l'optimisation taille ?
1. Ça consomme un registre d'adresses.
2. Si la destination est trop loin pour un addressage PC-relatif (par exemple: BSS, fichier de données externe, programme de plus de 32 KO),
lea x.l,%a0; move.l ...,(%a0) est plus long que
move.l ...,x.l. (Depuis que les BSS sont gérés même sans kernel, c'est un cas assez courant.) Et sans
-mpcrel, le compilateur ne peut pas présupposer un adressage relatif.
3. L'optimisation linker ne peut pas résoudre le problème nº2 à cause du problème nº1 (on ne peut pas optimiser un
move.l ...,x.l en un
lea x(%pc),%a0; move.l ...,(%a0) parce qu'on ne sait pas si
%a0 (ou n'importe quel autre registre d'adresses) est libre à cet endroit).
Folco (./238) :
Je compile avec -mpcrel :"Symbol 'DrawingData' too far for size 2 reloc at 0x694".
Ce n'est pas sans raison que
-mpcrel n'est pas par défaut. Tu dois avoir un BSS qui te reste.
Sally (./243) :
un langage où tu fais l'allocation mémoire à la main, c'est un langage de bas niveau 
Bas niveau = langage machine et assembleur.
Moyen niveau = C, à la limite le C++ selon l'utilisation qu'on en fait (et quelques langages exotiques du même type, mais il n'y a que le C/C++ à être couramment utilisé).
Haut niveau = tout le reste.
Folco (./244) :
ben quand tu fais un malloc parce que t'as un lib derrière, je vois pas la différence profonde avec le fait d'écrire 10->a en basic. ton malloc réservera une zone de mémoire sans rien mettre dedans, en basic yaura 10, c'est la seule différence majeure. d'ailleurs, tu feras ton malloc sans savoir comment est foutue la ram, comment l'os s'en occupe, si les adresses utilisées sont virtuelles ou non, comment est foutu le FS etc... je vois pas où est le côté bas niveau. t'es pas obligé de connaitre la moindre structure de quoi que ce soit au niveau machine/os pour faire marcher ton programme. comme en basic, quoi. t'ouvres de fichiers, les modifie et les crée sans rien en savoir. appeler ça du bas niveau.... l'assembleur doit être du niveau négatif alors, sous-terre, underground ou que sais-je encore tiens 
Tu peux aussi appeler les ROM_CALLs et les autres fonctions de TIGCCLIB en assembleur.

Folco (./246) :
t'as pas la notion de registre (aller, on te fait bander très très fort avec un register, mais tu sais même pas ce qu'il en advient au final)
Rien.

Tout ce que ça fait de déclarer une variable
register avec un GCC récent, c'est que tu n'as pas le droit de prendre l'adresse. À part ça, GCC s'en fout éperdument, il alloue les registres automatiquement.
La seule manière de forcer une variable dans un registre est de spécifier exactement lequel (cf. local register variables et global register variables).
t'as pas la notion de pile
Effectivement, tu ne peux pas faire n'importe quoi avec la pile CPU, ça t'évite de te retrouver avec un
return qui plante parce que tu n'as pas restauré la pile correctement.

Ximoon (./247) :
(juste pour dire que ton erreur avec mpcrel n'est pas dû à un langage pourri mais à un outil moisi
)
Non, c'est dû à une combination non valide des flags de compilation (un PEBKAC, quoi).
Sally (./250) :
¹Autrement dit : si « langage de bas niveau » == « assembleur », autant dire systématiquement « assembleur », c'est plus court et plus clair 
Si tu programmes en éditant le code machine à l'éditeur hexa, tu ne fais pas de l'assembleur, mais tu programmes aussi à bas niveau.

Folco (./252) :
J'arrive pas à déclarer le type de la structure et le fait qu'elle soit "extern" simultanément...
C'est normal, il faut déclarer ça séparément.
Dans le projet, j'ai spécifié que les BSS soivent être mergées avec les sections de données.
Désactive carrément le BSS au niveau du compilateur (
-mno-bss).
J'ai les options par défaut pour tous les programmes (compilateur et assembleur) de GCC4TI.

Pourquoi pas utiliser le vrai TIGCC?
Sally (./257) :
Si ce que tu veux faire est juste initialiser ta variable globale, il ne faut pas la redéclarer. Il faut simplement lui affecter sa valeur initiale. Concrètement, il faut enlever le "struct Misc", ainsi DrawingData sera reconnu comme une référence à quelque chose qui a été déclaré avant, et non comme une nouvelle variable.
Attention, il faut écrire:
DrawingData = (struct Misc) //default value.
{
...
};
si tu veux affecter une structure comme ça, si tu mets juste le '{', le compilateur parse ça comme un tableau et ça ne va pas marcher. (Et cette syntaxe est du C99 et du GNU C, en C90, tu ne peux pas écrire ça du tout.)