1

J'ai crée dans une librairie une variable qui prend une adresse d'une fonction et je voudrais savoir comment faire pour crée une fonction qui renvoie une adresse comme le fait GetPlane(?) en C?

J'ai essayé ça:
lea.l interrupt_handler,a0 dans ma librairie

Dans mon protoype en C:
#define int5 polysnd2__0014
extern unsigned char *int5 (void);

Si ça c'est bo alors comment faire pour modifier son contenu?
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 bon.
Pour modifier son contenu, ben:
*(int5())=toto;
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é

3

A oui en effet mais ça ne serait pas mieux de faire une fonction qui demande en paramètre une adresse pour être plus précis une fonction du genre:

void fonction (void);

int5 (fonction);

Mais dans ce cas ma librairie devient:
move.l 4(a7),interrupt_handler

Et le prototype:
#define int5 polysnd2__0014
extern void int5 (void *function);

Mais lorsque j'essaye ça, ça ne marche pas je fait:
void test (void)
{
...
}

int5 (test);

Comment dois-je faire?
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

Ça ne marche pas parce qu'il faut utiliser DEFINE_INT_HANDLER. Une interruption n'est pas une fonction normale.
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

Tiens, une suggestion (probablement assez stupide car ça n'est pas très utile et risque de poser de gros problèmes...): faire aussi une version de DEFINE_INT_HANDLER qui ne sauve/restaure aucun registre (responsabilité à l'utilisateur de le faire).
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

6

[nosmile]C'est une très mauvaise idée. Il n'y a pas de manière propre (c'est-à-dire sure à 100cheeky de sauvegarder/restaurer les registres à l'intérieur d'une fonction C.
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

En effet ma librairie gére l'interruption 5 et je veux permettre au programmeur utilisant cette librairie d'avoir accèss à l'interruption 5 c'est pour quoi dans ma librairie à la fin de l'interruption 5 je fait un saut sur la fonction de l'utilisateur ici test. Dans cette fonction le programmeur doit restaurer a0.
Donc la fonction int5 demande un paramètre ici une fonction qui sera enregistrer dans une variable contenu dans la librairie et donc à la fin de l'interruption sautera à la fonction entrée dans int5.

Donc je n'ai pas besoin de DEFINE_INT_HANDLER.

Voilà en gros ce qui est dans ma libairie

interrupt_handler5:
....
....
....
move.l a0,-(a7)
move.l addr_interrupt,a0
jmp (a0)
rte

addr_interrupt contient l'adresse de la fonction du programmeur

int5:
move.l 4(a7),addr_interrupt
rts

Dans int5 je passe un argument sur la pile

En ASM cela donne:
MaFonction:
move.l (a7)+,a0
....
rte

Donc pour la fonction

move.l MaFonction,-(a7)
jsr int5
lea 4(a7),a7

En quelque sorte je voudrais faire ça en C.

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

> C'est une très mauvaise idée.
Je m'en doutais vraiment... Mais j'ai posté quand même.

> Il n'y a pas de manière propre (c'est-à-dire sûre à 100% ) de sauvegarder/restaurer les registres à l'intérieur d'une fonction C.
Même avec un bout d'ASM inline déclaré comme volatile si nécessaire ?
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

9

geogeo
a écrit : Dans cette fonction le programmeur doit restaurer a0.

Ce n'est pas possible.
En ASM cela donne:
MaFonction:
move.l (a7)+,a0
....
rte

Donc pour la fonction

move.l MaFonction,-(a7)
jsr int5
lea 4(a7),a7
En quelque sorte je voudrais faire ça en C.

Impossible.

Mets dans ta librairie:
interrupt_handler5: 
.... 
.... 
.... 
move.l addr_interrupt,-(a7)
rts

Et maintenant, on peut utiliser DEFINE_INT_HANDLER.
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

[nosmile]
XDanger a écrit :
> Il n'y a pas de manière propre (c'est-à-dire sure à 100cheeky de sauvegarder/restaurer les registres à l'intérieur d'une fonction C. Même avec un bout d'ASM inline déclaré comme volatile si nécessaire ?

Pas très propre ça, parce que les registres ont peut-être déjà été traffiqués quand on les sauvegarde, ou le seront peut-être après la restauration.
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é

11

Dois-je revoir carrément mon algorithme pour l'interruption 5? Et dans ce cas quelle seraot la meilleur façon (la plus propre) de permettre au programmeur d'avoir acces a cette interruption avec ma librairie?
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.

12

C'est quoi le smiley qui s'est ajouté ? C'est parce que j'ai mis "pourcent" ? Ah non, c'est le % ) qui fait ça... Evidemment...

>Pas très propre ça, parce que les registres ont peut-être déjà été traffiqués quand on les sauvegarde, ou le seront peut-être après la restauration.
OK.
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

13

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.

14

geogeo
a écrit : Dois-je revoir carrément mon algorithme pour l'interruption 5?

Oui, mais légèrement seulement.
Et dans ce cas quelle seraot la meilleur façon (la plus propre) de permettre au programmeur d'avoir acces a cette interruption avec ma librairie?

Celle du message #8, qui a aussi le mérite d'être plus courte que ce que tu avais avant.
XDanger
a écrit : C'est quoi le smiley qui s'est ajouté ? C'est parce que j'ai mis "pourcent" ? Ah non, c'est le % ) qui fait ça... Evidemment...

Oui.
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é