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
@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
};
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