1

Je voudrais savoir comment faire en C pour programmer en ASM en passant plusieurs variables dans des registres spécifiques:
Par exemples j'ai 3 variables:

unsigned short var1,var2;
unsigned char var3;

asm ("move.w var1,-(a7)
move.w var2,-(a7)
....
bchg var3,0x60000F
....");

Quelque chose de ce type la mais avec
var1=d0
var2=d1
var3=a5
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

2

C'est dans la doc, dans la section GNU extensions smile

3

J'ai appliqué la doc en faisant:

register unsigned short var1 asm("d1")

ou encore:

asm ("move.w %0,%d7": "g" (var1));

Et le problème et c'est que GNU change les registre en cours de route et les valeurs intérieur sont changé. Je ne voit pas quels sont les autres solution! smile
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

4

"chagne les reg en cours de route"
pas trop saisi, mais l'extended asm te permet de spécifier quelques registres tu modifie, si c ça le pb.
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

5

Il n'y aurait pas une méthode pour spécifier tout les registre en cours et dire à TIGCC de ne pas les modifier juste qu'un certain temps?
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

6

register unsigned short var1 asm("d0"),var2 asm("d1"); 
register unsigned char var3 asm("a5"); 

asm ("move.w %0,-(%%a7) 
move.w %1,-(%%a7) 
.... 
bchg %2,0x60000F 
...."::"d"(var1),"d"(var2),"a"(var3));


Mais je pense que ton exemple est mal choisi parce que var3 devrait être dans un registre de données également.
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é

7

D'accord je vias porcéder de cette façon merci kevin. smile
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

8

Juste une dernière question en GNU assembleur l'instruction dbra de l'assembleur ne change pas? Ou puis-je avoir la liste des instructions en assembleur GNU?
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

9

dbra n'existe pas en fait, il faut la remplacer par dbf. (merci XDanger)

10

Merci mais j'ai un réel problème d'instruction car je pense que la plupart des instruction de l'ASM pure sont inexistante en ASm GNu et je voudrais savoir ou trouver une liste de ces instructions. Merci pour dbf, c'est pour ça que mon programme ne fonctionné pas! smile
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

11

GNU as est censé comprendre dbra. Il faudra que je corrige ça.
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é

12

J'ai remarqué quelque chose, lorsque je crée une variable interne dans la fonction (privée) le programme réagit mal mais pas contre lorsque mes variables sont public, à l'extérieur de la fonction alors mon programme réagit autrement, là j'avoue que je suis perdu et je n'arrive pas à remédier à ce problème.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

13

Au fait, GNU as comprend parfaitement dbra! C'est dans sa liste de synonymes. dbra %d0,label ou dbra.w %d0,label.
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é

14

Donc je peut utiliser sans problème dbra mais au faite pourquoi mon programmme se comporte différament lorsque les variables ont privé ou public?

avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

15

Parce que les variables locales ("privées") sont stoquées autre part que les variables globales ("publiques").
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é

16

Voilà la source et je ne comprend toujours pas pourquoi ça ne fonctionne pas. void PlaySound(void *Channel1, void *Channel2, short Tempo) {      unsigned short tps1=0;      unsigned short tps2=0;            //unsigned short sav_tps1,sav_tps2;      unsigned short unittps;      unsigned char data_note,data_duree;      unsigned short offset1=0,offset2=0;      unsigned char duree1=1,duree2=1;      //unsigned short sav_unittps;      //register unsigned short tps1 asm ("d1")=0,tps2 asm ("d2")=0;       //register unsigned short unittps asm ("d4");                   unittps=Tempo;            //Adaptation du HW1      if (AMS_1xx==TRUE) unittps=unittps/1.2;            //Initialize port                      asm ("bset     #6,0x60000C                     bclr     #0,0x60000E                     bclr     #1,0x60000E");                      boucle1:      if (_keytest(RR_ESC)==TRUE) goto fin;            //-----------------------      //Extraction voie n°1      //-----------------------      duree1=duree1-1;            if (duree1==0)      {           data_note=*(BYTE*)(Channel1+offset1);           data_duree=*(BYTE*)(Channel1+offset1+1);           offset1+=2;                      if (data_note==255) goto fin;                      if (data_note==0) tps1=unittps+1;           else tps1=decode(data_note);                      duree1=data_duree;                      if ((peekIO_bit (0x60000E,1))==0)     pokeIO_bclr (0x60000E,0);           else pokeIO_bset (0x60000E,0);      }                  //------------------------      //Extraction voie n°2      //------------------------      duree2=duree2-1;            if (duree2==0)      {           data_note=*(BYTE*)(Channel2+offset2);           data_duree=*(BYTE*)(Channel2+offset2+1);           offset2+=2;                      if (data_note==255) goto fin;                      if (data_note==0) tps1=unittps+1;           else tps2=decode(data_note);                      duree2=data_duree;                      if ((peekIO_bit (0x60000E,0))==0)     pokeIO_bclr (0x60000E,1);           else pokeIO_bset (0x60000E,1);      }            //------------------      /*printf_xy (0,0,"%d",tps1);      printf_xy (0,10,"%d",tps2);            printf_xy (0,30,"%d",duree1);      printf_xy (0,40,"%d",duree2);*/            //for (i=0;i<sav_unittps;i++)      //{                     //     if ((sav_tps2--)<=0) {sav_tps1=tps1; asm ("bchg #0,0x60000E");}      //     if ((sav_tps1--)<=0) {sav_tps2=tps2; asm ("bchg #1,0x60000E");}      //     //if ((sav_tps2--)<=0) {sav_tps2=tps2; asm ("bchg #1,0x60000E");}      //     //if ((sav_tps1--)<=0) {sav_tps1=tps1; asm ("bchg     #0,0x60000E");}      //}            asm ("cmp.w          %1,%0                     jbhi               paspause1                     move.w     %1,%%d7                           paspause1:                     cmp.w          %2,%0                     jbhi               paspause2                     move.w     %2,%%d6            paspause2:      bcle_son1:           dbf               %%d7,son_11           move.w     %1,%%d7           bchg          #0,(0x60000E)            son_11:           dbf               %%d6,son_21           move.w     %2,%%d6           bchg          #1,(0x60000E)            son_21:           dbf               %0,bcle_son1"::"g"(unittps),"g"(tps1),"g"(tps2));            goto boucle1; fin:      asm ("bclr     #0,(0x60000E)                     bclr     #1,(0x60000E)                     move.b     0x8D,(0x60000C)"); }

Dans le code le seul problème c'est la partie en assembleur qui ne fonctionne pas correctement.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

17

Parce que tu détruis des registres dans ton code assembleur sans déclarer ce fait.
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é

18

Je ne sais pas comment procéder autrement, que dois-je faire alors? Car la partie assembleur demande une sauvegarde de tps1 et tps2 tout en décrémentant celles-ci avec des registres (de sauvegardes).

Dois-je déclarer autrement ces variables...?
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

19

90:      asm ("cmp.w          %1,%0
91:                     jbhi               paspause1
92:                     move.w     %1,%%d7
93:                     
94:      paspause1:
95:                     cmp.w          %2,%0
96:                     jbhi               paspause2
97:                     move.w     %2,%%d6
98:      
99:      paspause2:
100: 
101:      bcle_son1:
102:           dbf               %%d7,son_11
103:           move.w     %1,%%d7
104:           bchg          #0,(0x60000E)
105:      
106:      son_11:
107:           dbf               %%d6,son_21
108:           move.w     %2,%%d6
109:           bchg          #1,(0x60000E)
110:      
111:      son_21:
112:           dbf               %0,bcle_son1"::"g"(unittps),"g"(tps1),"g"(tps2)[b]:"d6","d7"[/b]);
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é

20

A d'accord, je ne savais pas qu'il était possible de définir d6 et d7 pour ne pas les effacer. Merci beaucoup, maintenant je serais vraiment comment implanter de l'ASM en C. Merci Kevin. smile
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

21

dbra est compris par la plupart des assembleurs (tous ?), mais autant qu'il me semble, cette instruction n'existe pas (l'instruction correcte est dbf).

Bon, j'arrête là, sinon on va me dire que je pinaille...
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

22

C'est vrai, dans mon livre sur le 6800 elle n'est pas mentionnée. Tu ne pinailles pas.

23

Il correspond à quoi le 'f' de dbf ?

24

DB**
avec ** =
CC : Carry Clear
CS : Carry set
EQ : Equal
NE : Not Equal
GE : Greater or equal (>happy
GT : Greater than (>) ( (bitZ or ( bitN xor bitV ))= 0 )
HI : High (supérieur) ( bitZ or bitZ = 0)
LE : Less or Equal ( (bitZ or ( bitN xor bitV ))= 1 )
LS : Less or same ( bitC or bitZ = 1)
LT : Less Than
ME : Minus (Negatif)
PL : Plus (Positif)
VC : overflow Clear
VS : overflow Set
T : True
F : False


Vala ! smile
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

25

Ok, False.
dbt ça existe ?

26

Ben ouais, mais je ne vois pas trop l'intérêt...
Peut-être pour aider à débugger.

27

ExtendeD : ces codes sont communs à toutes les familles d'instructions conditionnelles du 68000 : Bxx, DBxx, Sxx il me semble smile

Je crois même que BT et BF existent. Question, BT est-elle vraiment une instruction (code machine propre) ou un autre nom à BRA (même code) ?
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.

28

DBF = DBRA, mais DBRA est est pas l'appélation officielle

Et je croit pas que BT existe ss un autre nom..
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

29

C'est le compilateur qui doit différiencier cela avec des mnémoniques comme DBF=DBRA. Je pense que le processeur n'a qu'une instruction DBF=DBRA. Le compilateur fait corresponde les synonymes. J'ai lu beaucoup de livre sur le 68K et je n'ai jamais vu l'instruction DBF mais DBRA. Mais bon du temps que ce soit la même. smile
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

30

pourtant je peut affirmer que suivant le assembleur officiel de motorola, le bon nom de cette instruction est DBF et par DBRA

Je sais pas d'ailleur pourquoi DBRA existe.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.