website logo
Auteur
avatar
alex

Forum » » OS4 toutes plateformes confondues » » Appel système en assembleur PPC sous OS4


Posté : 07-01-2008 18:19 icone du post

Je ne connais rien à l'asm. Par contre je peux t'aider sur la "nouvelle manière qu'a OS4 de passer les appels système". En C après avoir obtenu l'adresse de base de la bibliothèque ouverte (le retour d'OpenLibrary), il est *obligatoire* d'appeler la fonction Exec/GetInterface() en lui (dans l'ordre) l'adresse sus-citée, le nom de l'interface demandée (en général il s'agit de l'interface principale "main", mais par exemple Exec fournit aussi une interface "Debug", et Expansion une interface "PCI"), la version de l'interface voulue et une taglist (pour le moment NULL). Normalement cela te renvoie une structure contenant des pointeurs sur fonction qu'il te suffit d'appeler (j'imagine qu'en ASM cela doit correspondre à des adresses auxquelles il faut sauter pour réaliser l'appel). Ensuite quand tu n'as plus besoin de l'interface tu appel Exec/DropInterface() et ensuite tu closes ta lib.
Voilà il y a ensuite juste le cas de la librairie Exec pour lequel tu ne peux pas faire appel ni à OpenLibrary() ni à GetInterface() puisque ces fonctions sont justement contenues dans Exec, pour avoir ExecBase normalement c'est le startup code de ton compilo qui le passe à ta fonction, je ne sais pas comment ça se passe en ASM mais sinon tu peux toujours aller voir à 0X4 mais c'est pas conseillé car plus lent (exception de page je crois me souvenir), ensuite pour obtenir l'interface IExec il suffit d'aller regarder dans le champ MainInterface de la structure ExecBase...
Voilà c'est tout ce que je peux faire pour toi...

Ah si dernière chose, les paramètres se passent sur la pile dans l'ordre et il *faut* ajouter le pointeur de l'interface comme premier paramètre de chaque fonction, par exemple pour GetInterface en fait les paramètres sont :
IExec, libbase, "main", 1, 0L

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