5Fermer7
PpHdLe 16/06/2008 à 21:29
calculator (./3) :
Pour le header les fonctions doivent bien etre déclarées ainsi: malib::ma_fonction equ malib@xxxx ?


Non. C'est pour l'utiliser en asm.

Exemple de lib asm:
genlib::init_screen		EQU	genlib@0049
genlib::init_dscreen		EQU	genlib@0002

Equivalent en C:
#undef gl_init_screen
#define gl_init_screen(scr,hd) \
  asm("jsr genlib__0049; move.l %%a0,(%0); move.w %%d0,(%1)" :: "a" (scr), "a" (hd) : "d0", "d1", "d2", "a0", "a1")
#undef gl_init_dscreen
#define gl_init_dscreen(dscr,hd) \
  asm(" jsr genlib__0002; move.l %%a0,(%0); move.w %%d0,(%1)" :: "a" (dscr), "a" (hd) : "d0", "d1", "d2", "a0", "a1")


Exemple plus facile:
ASM:
genlib::init_plane		EQU	genlib@0006


C
#define gl_init_plane               genlib__0006
PLANE *gl_init_plane(unsigned char map[] A3, SPRITE_16 tile[] A4, short sizeX D3);


avec
#define D0 asm("d0")
#define D1 asm("d1")
#define D2 asm("d2")
#define D3 asm("d3")
#define D4 asm("d4")
#define D5 asm("d5")
#define D6 asm("d6")
#define D7 asm("d7")

#define A0 asm("a0")
#define A1 asm("a1")
#define A2 asm("a2")
#define A3 asm("a3")
#define A4 asm("a4")


Comme tu peux voir il faut donner en plus l'information sur comment on utilise la fonction.
Le premier cas est plus dur car il y a plusieurs arguments de retour retournées par registre qu'il faut remontre dans des variables dont on passe l'adresse.
Le second est plus simple car il suffit de spécifier le type et dans quel registre l'entrée se situe pour la fonction, et de savoir que ce qu'elle retourne se trouve dans a0 (qui est le registre utilisé par la convention C pour retourner des pointeurs. d0 pour tout autre chose sauf des flottants qui sont encore à à part).