1

Bon, le titre du topic n'est pas clair du tout, j'ai essayé de faire un titre court et clair, mais c'est assez bof.
ve.w #$007E,-(a7) #else move.w #$03FE,-(a7) #endif
En fait, j'aimerais pouvoir faire l'équivalent de ça :#ifdef USE_TI89
 mo
Sauf que le #ifdef vient du langage C et est donc invalide en ASM.

J'ai pensé à faire un truc du genre (dans une source C) :
#ifdef USE_TI89
 asm(".equ calc,0");
#else
 asm(".equ calc,1");
#endif
Et après dans la source ASM tester la valeur de calc avec des directives d'assemblage. Ça serait correct, ça ?
Mais n'y a-t-il pas un moyen plus simple ou plus prévu pour faire ça ?
Merci smile

2

Bon, j'ai essayé ma technique mais ça ne marche pas. sad
Quand je regarde le .s généré, j'ai un calc qui a la bonne valeur, mais apparamment, mon fichier ASM 68k séparé est assemblé en-dehors de tout ça puis linké après (je suppose), donc ça ne sert à rien...

3

edit: j'ai répondu n'importe quoi (j'avais mal compris la question) donc je m'auto censure smile
Boogerman

Bouger, travailler, manger et se reposer, c'est la devise de la tortue!

4

jackiechan a écrit :
Bon, j'ai essayé ma technique mais ça ne marche pas. sad
Quand je regarde le .s généré, j'ai un calc qui a la bonne valeur, mais apparamment, mon fichier ASM 68k séparé est assemblé en-dehors de tout ça puis linké après (je suppose), donc ça ne sert à rien...

En effet. Il te faudra:
* si c'est pour un programme, mettre tes fonctions ASM en inline dans la source C.
* si c'est pour une librairie statique, faire plusieurs versions du fichier ASM et faire faire le choix de la bonne fonction à importer au header C. (Ne fais pas ça pour un programme, parce que sinon, tu vas linker les 2 versions de la fonction en même temps, même si elles ne servent pas! Du moins c'est ce qui se passera avec le système de linking actuel, le nouveau linker sera plus intelligent sur ce point.)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

5

Bon, bah tant pis, j'ai adopté une solution assez contraignante : si je veux changer le modèle pour lequel je veux compiler, je dois changer deux #define à chaque fois, un dans la source C et un dans la source ASM (enfin, un equ).
Parce que de développer en ASM inline me demanderait de tout réécrire en adoptant la syntaxe GNU (que je trouve plus lourde), et puis les parties d'asm inline dans une source C ne sont pas agréables à lire parce que la coloration syntaxique met tout en rouge vu que c'est une chaine (mais en fait peut-être qu'on peut faire autrement et que je l'ignore).
Merci quand même de m'avoir répondu

6

Tu peux aussi utiliser quelque chose comme ça :
tu fais un fichier "calc.h" contenant uniquement

/*
USE_TI89 macro
calc equ 0
endm

USE_TI92PLUS macro
calc equ 1
endm

USE_V200 macro
calc equ 1
endm
*/

#define USE_TI92PLUS


En remplacant le 'define' par la calc que tu veux. Et tu inclus ce .h au début de tous tes fichiers .c et un de tes .asm (il ne faut pas de définitions doubles pour les .asm).
/* , */ et #define seront reconnus comme des labels par a68k.

Ca me rappelle un bout de code pour l'International Obfuscated C Code Competition qui compilait à la fois pour le C et pour un autre langage smile

7

Pas mal comme astuce smile
Je l'ai adoptée, même si elle est un tout petit peu contraignante : il faut réécrire à chaque fois le modèle de calculatrice pour lequel je veux compiler si je veux changer de modèle.
J'aurais préféré avoir juste à mettre quelque chose en commentaire, mais je ne pense pas que ce soit possible :
#define USE_TI89
#define USE_TI92PLUS
#define USE_V200

Si je veux compiler pour TI-89, il faut que je mette // devant les deux lignes suivantes pour qu'elles deviennent des comentaires, mais j'aurai un duplicated symbol dans ce cas (parce qu'il y aura deux fois // en début de ligne). Et je ne peux pas non plus faire /* pour la première et */ pour la dernière ligne parce que j'ai déjà utilisé /* plus haut dans la déclaration des macros ASM.

8

ExtendeD a écrit :
Ca me rappelle un bout de code pour l'International Obfuscated C Code Competition qui compilait à la fois pour le C et pour un autre langage smile

Oui, c'est un header polyglotte, ça. smile
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

9

jackiechan a écrit :
J'aurais préféré avoir juste à mettre quelque chose en commentaire, mais je ne pense pas que ce soit possible :
#define USE_TI89
#define USE_TI92PLUS
#define USE_V200

Si je veux compiler pour TI-89, il faut que je mette // devant les deux lignes suivantes pour qu'elles deviennent des comentaires, mais j'aurai un duplicated symbol dans ce cas (parce qu'il y aura deux fois // en début de ligne). Et je ne peux pas non plus faire /* pour la première et */ pour la dernière ligne parce que j'ai déjà utilisé /* plus haut dans la déclaration des macros ASM.

/* 
USE_TI89 macro 
calc equ 0 
endm 

USE_TI92PLUS macro 
calc equ 1 
endm 

USE_V200 macro 
calc equ 1 
endm 

// macro
endm
*/ 

#define USE_TI89
 // ; #define USE_TI92PLUS
 // ; #define USE_V200
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

10

Tiens c'est marrant un header polyglotte. Pas bête... :]
avatar
;)

11

Pas bête smile.
Merci encore.

12

Il y a un truc qui est dommage, c'est que l'exécutable V200 ne se lancera pas sur une 92+ et vice versa.
Parce que je ne peux mettre qu'un seul #define à la fois, sinon j'ai encore un duplicated symbol.
Pour pouvoir mettre deux #define à la fois, il faudrait les remplacer par une macro vide.
Mais là je ne crois pas que je puisse remplacer le #define par une macro vide, parce que si je le fais, le USE_TI92PLUS ou le USE_V200 ne se retrouvera plus à la place du mnémonique, mais de l'opérande, donc la macro ne sera pas effective si j'ai bien compris.

13

On va finir par y arriver smile
/*
#define macro
  ifc \1,USE_TI89
calc equ 0
  endc
  ifc \1,USE_TI92PLUS
   ifnd calc
calc equ 1
   endc
  endc
  ifc \1,USE_V200
   ifnd calc
calc equ 1
   endc
  endc
 endm
// macro
 endm
*/

 // ; #define USE_TI89
 #define USE_TI92PLUS
 #define USE_V200

14

Merci beaucoup smile

15

Et après dans la source ASM tester la valeur de calc avec des directives d'assemblage. Ça serait correct, ça ? Mais n'y a-t-il pas un moyen plus simple ou plus prévu pour faire ça ?


Avec GTC, tu peux te contenter de faire :
move.w #LCD_WIDTH,-(a7)
ou encore :
move.w #(CALCULATOR?0x03FE:0x007E),-(a7)
ou encore :
#ifdef USE_TI89
#define MYVAL 0x007E
#else
#define MYVAL 0x03FE
#endif
  move.w #MYVAL,-(a7)



(j'attends le message d'insultes de Kevin..)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

16

OK, ben distribue GTC que je puisse faire ça !

17

T'as pas pigé wink il posté ça pour énerver Kevin, pas pour te faire baver. L'autre fanatique ne va pas manquer de nous étaler modestement son opinion 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.

18

Quels imbéciles ces types (là, je parle autant de Thibaut que de Pollux)...
Pollux pour faire des trucs complètement incompatibles avec tout le reste, et Thibaut pour les commentaires qui accompagnent ses messages...

Kevin a bien d'autres choses beaucoup plus utiles à faire, que de répondre à des cons pareils... Attention, là, je ne suis pas en train de dire qu'il ne fout rien sur TIGCC, ce que j'ai déjà pu lire dans ce que CERTAINS voulaient me faire dire et que je ne voulais pas dire...
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

19

T'es trop fort toi tongue
Critique ma tendance à défendre Pollux... tu es aussi niais à faire la même chose avec Kevin.
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.