« Premiers pas sur le coldfire | Main | GCC 3.3.6 et coldfire »

lundi, octobre 16, 2006

Gcc et le coldfire 1ere prise en main

Voilà j'ai commencé à tester MyAeS sur la carte coldfire en monotos, première mauvaise nouvelle plantage sur les windframes! Je m'en doutait ce sont des libs dynamiques, l'un est compilé en PureC l'autre utilise jpeg.ldg avec fpu, bref comme cela pas moyen de le faire tourner et recompiler celui en PureC pose soucis il y a pas mal d'assembleur dedans et malgré pas mal de modifications le GCC n'en veut pas, mais bon faut dire que je n'y connais rien en assembleur donc ce qui prendrait 30 minutes a Didier me prend un mois, trop long. J'ai donc réalisé un windframe affreux interne qui lui ne devrait pas planter.

Et il ne plante pas!

Bref je peux lancer MyAeS en monotos sans que cela plante, Didier m'a envoyé sa version de Mint pour coldfire mais la c'est très étrange il ne semble pas que je puisse lancer d'applications avec le Pexec(100) va falloir que je regarde.

MyAeS n'a pas de bureau alors il en faut un et ça se corse, j'ai essayé Teradesk, Direct et Thing, seul ce dernier fonctionne actuellement sans les OVL a partir du bureau du TOS, j'ai donc essayé de lancer Thing comme bureau, ça se lance mais dès que j'arrive au niveau des menus c'est plantage (il n'y a aucun soucis sur l'AES 4 c'est bien un problème du coté de MyAeS). J'ai aussi lancé Kronos et la cela fonctionne normalement, mais comme bureau on fait mieux!

Alors que faire, je me dit chouette j'ai GCC 2.95.3, MyAeS est compilable avec allons y ça fera déjà cela de moins à l'émulateur à émuler des fois que, après quelques explications de Didier et l'option -m5200 -Wa,-m5200 ça se compile, bien sur pas les quelques malheureux morceaux d'assembleur qui traîne dans ce logiciel, 3 fois rien, pas grave je le compile en 68000 pour qu'il soit content et on link le tout, l'éxécutable est là. Avant de le lancer sur la carte je me dit que je ferais bien de tester cette version avec Aranym, pas de soucis il se lance (je me posait la question!), je vais pour dérouler un menu, horreur les objets sont en vrac, cela fait n'importe quoi. Bougre de "%,$m%M" et sur le coldfire c'est pareil!

Alors je réfléchi un peu, si si cela m'arrive, il ne peut y avoir qu'une fonction a faire de telles choses, les ressources sont bien chargées, les icônes bien dessinées, le fautif probable rsrc_obfix(), je regarde le code franchement pas de quoi faire peur à un compilo, voici le code original:

int __myaes_rsrc_obfix_direct(OBJECT *ob)

{

unsigned char *dumchar = (unsigned char *)&ob->ob_x;

if((WORD)dumchar[0]>=128) ob->ob_x = (WORD)dumchar[0] - 256 + ((WORD)dumchar[1]) * my_aes_inside.wcell;

else ob->ob_x = (WORD)dumchar[0] + ((WORD)dumchar[1]) * my_aes_inside.wcell;

etc....

....

return 1;

}

my_aes_inside.wcell est de type int

Et vous ne me croirez pas pour que cela marche il faut que je cast my_aes_inside.wcell en short et tout rentre dans l'ordre!

if((WORD)dumchar[0]>=128) ob->ob_x = (WORD)dumchar[0] - 256 + ((WORD)dumchar[1]) * (short) my_aes_inside.wcell;

else ob->ob_x = (WORD)dumchar[0] + ((WORD)dumchar[1]) * (short) my_aes_inside.wcell;

Bon là c'est fort, rien ne me dit qu'il n'y a pas d'autres soucis ailleurs, conclusion provisoire, il faut que je passe à un compilo plus récent si vous voulez compiler pour le coldfire oubliez le 2.95.3, Didier utilise la 3.3.6 je vais faire le test dès que je me serais fait une config correcte pour ce compilo, cela va me prendre encore quelques heures!

Ecrit par OL at 4:21 PM
Edité le: lundi, octobre 16, 2006 4:24 PM
Categories: Coldfire