Obligement - L'Amiga au maximum

Samedi 20 avril 2024 - 06:39  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z,
ALL


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


Programmation : Utilisation d'Amiga.lib (définition et fonctions)
(Article écrit par Denis Jarril et extrait d'Amiga News Tech - avril 1991)


Avez-vous remarqué ? Tous les programmes écrits en C, que ce soit dans l'ANT ou ailleurs, sont reliés avec une obscure Amiga.lib, celle-là même qui fait défaut à DICE, le compilateur de Matt Dillon.

Présentation

Mais qu'est-elle donc, cette Amiga.lib ? Que contient-elle de si important pour que chaque programme C, et beaucoup de programmes assembleur, en aient à ce point besoin ? Eh bien pour simplifier, je dirai que c'est grâce à elle que l'éditeur de liens est capable de résoudre toutes les références externes implicites des programmes C (j'ai vraiment dit simplifier" ?).

L'Amiga.lib contient principalement les stubs, les décalages, exec_support et clib.

Les stubs

Soit en français, les moignons. Ce sont des routines qui permettent d'appeler les fonctions des bibliothèques de l'Amiga, en récupérant les paramètres de la pile (le C passe tous les paramètres des fonctions par la pile) dans les registres adéquats. Ainsi, lorsque vous écrivez :

...
DisplayBeep(NULL);
...

...le compilateur génère le code :

...
PEA $0.W
JSR DisplayBeep(PC)
ADDQ.L #4,A7
...

...et l'éditeur de liens ajoute la routine DisplayBeep suivante dans l'exécutable final :

DisplayBeep:
MOVEALL 4(A7),A0             ; Récupère le paramètre (NULL)
MOVEALL _IntuitionBase,A6    ; IntuitionBase dans A6
JMP_LVODisplayBeep(A6)       ; Saut à _LVODisplayBeep

Les décalages

Autrement dit, les valeurs des symboles _LVOxxx. Pour reprendre l'exemple ci-dessus, c'est l'Amiga.lib qui informe l'éditeur de liens que _LVODisplayBeep vaut -96.

exec_support

Ce sont des routines destinées à faciliter quelques procédures Exec, comme la création d'un MessagePort (CreatePort), de tâches (CreateTask), etc.

clib

C'est une bibliothèque de fonction C spécialement écrite pour l'Amiga, c'est-à-dire exploitant ses spécificités (ce que ne fait bien entendu pas la bibliothèque C standard telle que l'ont défini Kernighan et Ritchie). On trouve ici les routines comme printf(), etc.

Autres

Une bibliothèques de fonctions diverses, appelables depuis n'importe quel langage (mais surtout le C ou l'assembleur).

Les fonctions d'Amiga.lib

Elles sont au nombre de 12, si l'on excepte bien sûr les fonctions de type stdio et math, propres au C. Dans la liste qui suit, on donne le prototype de la fonction, suivi d'une explication de son utilité et d'une description de ses paramètres.

void AddTOF(struct Lsrvstr *i, APTR p, APTR a);

Cette fonction ajoute une tâche à la liste des serveurs d'interruption VBL.
  • i : pointeur sur une structure Isrvstr correctement initialisée.
  • p : pointeur sur le code C à appeler à chaque VBL.
  • a : pointeur sur un tableau de ULONGs servant de paramètres à la routine pointée par p.
void RemTOF(struct Isvrstr *i);

Enlève une tâche de la liste des serveurs d'interruption VBL.
  • i : pointeur sur la structure Isvrstr de la tâche à éliminer de la liste.
void BeginIO(struct IORequest *io);

Envoie une requêtre d'entrée/sortie asynchrone.
  • io : pointeur sur la structure IORequest associée au périphérique logique concerné.
struct IORequest *CreateExtIO(struct MsgPort ULONG s);

Alloue de la mémoire pour et initialise une structure IORequest.
  • mp : pointeur sur le MessagePort à utiliser avec le ReplyPort de l'IORequest.
  • s : taille de la structure à créeér (utile en cas de structure étendue, comme avec le trackdisk.device).
void DeleteExtIO(struct IORequest *io);

Libère la mémoire allouée par CreateExtIO() pour la structure IORequest passée en paramètre, qui n'est évidemment plus utilisable ensuite.
  • io : pointeur sur une structure IORequest initialisée par CreateatIO().
struct MsgPort *Create Port(char *name,LONG pri);

Alloue de la mémoire pour et initialise une structure MsgPort.
  • name : pointeur sur le nom du nouveau port s'il doit être public, NULL sinon.
  • pri : priorité du nouveau port.
void DeletePort(struct MsgPort *mp);

Libère la mémoire allouée par CreatePort() pour la structure MsgPort passée en paramètre, qui n'est évidemment plus utilisable ensuite.
  • mp : pointeur sur une structure MsgPort initialisée par CreatePort().
struct Task *CreateTask(char *name, LONG pri,funcEntry initPC, ULONG ssize);

Crée une nouvelle tâche avec le nom, la priorité et la pile donnés.
  • name : pointeur sur le nom de la nouvelle tâche.
  • pri : priorité de la tâche.
  • initPC : adresse de la première instruction exécutable.
  • ssize : taille de la pile pour cette tâche.
void DeleteTask(struct Task *t);

Supprime la tâche pointée en paramètre de la liste des tâches actives.
  • t : pointeur sur la tâche créée par CreateTask() et à supprimer.
void NewList(struct List *l);

Initialise une structure List, qui sera vide et prête à l'emploi.
  • l : pointeur sur une structure List à initialiser.
ULONG FastRand(ULONG seed);

Génère un nombre pseudo-aléatoire suivant la formule : return((seed<<1)^Ox1D872B41);
  • seed : un entier sur 32 bits, généralement le résultat d'un précédent appel à FastRand().
USHORT RangeRand(USHORT v);

Renvoie un nombre pseudo-aléatoire compris entre 0 et v.
  • v : valeur 16 bits définissant la limite supérieure du nombre aléatoire à générer.


[Retour en haut] / [Retour aux articles] [Article suivant]