website logo
Auteur
avatar
thellier

Forum » » Création-Développement » » Y-a-t'il possibilité de faire une library système en C sur Os4


Posté : 18-11-2014 14:30 icone du post

@Sharynn
Laisse tomber le .xml fais le .sfd comme dans la SimpleDT.library


Il faut définir dans le .sfd l'usage registre/parametre cad les pointeurs seront dans des registres d'adresse (a0 a1 etc...) et les valeurs dans les registres de données (d0,d1,..) donc max 10 parametres environ


Après y a une option dans fdtrans qui créée un .xml (ou une option "all" qui fais tout)
Idem pour idltool y a une option "all" ou qque chose comme ça


Idem pour le tableau des jumps regarde dans SimpleDT_functions_glue_ppc.h = en OS4 y a rien de compliqué et en 68k j'utilise des macros comme A0() A1() ... D0() etc..


Alain


 


dans include/clib


#ifndef __CLIB_SIMPLEDT_PROTOS_H
#define __CLIB_SIMPLEDT_PROTOS_H


#include


ULONG SDT_Load(UBYTE* filename);
ULONG SDT_Play(ULONG id,ULONG replay,ULONG volume);
ULONG SDT_VolumeChange(ULONG id,LONG volumechange);
ULONG SDT_GetPicture(ULONG id,APTR picture);
ULONG SDT_Free(ULONG id);


#endif


dans le .sfd


==id $Id: SimpleDT_lib.sfd,v 1.0 2012/10/12 13:30:00 noname Exp $
==base _SimpleDTBase
==basetype struct Library *
==libname SimpleDT.library
==bias 30
==public
==include
ULONG SDT_Load(UBYTE* filename) (a0)
ULONG SDT_Play(ULONG id,ULONG replay,ULONG volume) (d0,d1,d2)
ULONG SDT_VolumeChange(ULONG id,LONG volumechange) (d0,d1) 
ULONG SDT_GetPicture(ULONG id,APTR picture) (d0,a0)
ULONG SDT_Free(ULONG id) (d0)
==end


dans le function_glue_ppc.h


#include <clib/simpledt_protos.h>


LONG    VARARGS68K LibSDT_Load(void *Self,UBYTE * filename)      {return(SDT_Load(filename)); }
LONG    VARARGS68K LibSDT_Play(void *Self,ULONG id,ULONG replay,ULONG volume)  {return(SDT_Play(id,replay,volume)); }
LONG    VARARGS68K LibSDT_VolumeChange(void *Self,ULONG id,LONG volumechange)  {return(SDT_VolumeChange(id,volumechange)); }
LONG    VARARGS68K LibSDT_GetPicture(void *Self,ULONG id, APTR picture)   {return(SDT_GetPicture(id,picture)); }
LONG    VARARGS68K LibSDT_Free(void *Self,ULONG id)       {return(SDT_Free(id)); }


 /*jump table */
STATIC CONST APTR main_vectors[] =
{
 LibObtain,
 LibRelease,
 NULL,
 NULL, P>

 LibSDT_Load,
 LibSDT_Play,
 LibSDT_VolumeChange,
 LibSDT_GetPicture,
 LibSDT_Free,


 (APTR)-1
};


dans le function_glue.h (library 68k)


#include <clib/simpledt_protos.h>


ASM(ULONG)    LibSDT_Load(A0(UBYTE * filename))      {return(SDT_Load(filename)); }
ASM(ULONG)    LibSDT_Play(D0(ULONG id),D1(ULONG replay),D2(ULONG volume)) {return(SDT_Play(id,replay,volume)); }
ASM(ULONG)    LibSDT_VolumeChange(D0(ULONG id),D1(LONG volumechange))  {return(SDT_VolumeChange(id,volumechange)); }
ASM(ULONG)    LibSDT_GetPicture(D0(ULONG id), A0(APTR picture))   {return(SDT_GetPicture(id,picture)); }
ASM(ULONG)    LibSDT_Free(D0(ULONG id))       {return(SDT_Free(id)); }


 /*jump table */

static const APTR LibVectors[] ={
    (APTR) LibOpen,
    (APTR) LibClose,
    (APTR) LibExpunge,
    (APTR) LibReserved,


    (APTR) LibSDT_Load,
    (APTR) LibSDT_Play,
    (APTR) LibSDT_VolumeChange,
    (APTR) LibSDT_GetPicture,
    (APTR) LibSDT_Free,


    (APTR) -1
};


 


Message édité par : thellier / 18-11-2014 14:34

Cet article provient de Le site des utilisateurs francophones actuels et futurs d'AmigaOS 4.x
https://amiga-ng.org/viewtopic.php?topic=1975&forum=14