Obligement - L'Amiga au maximum

Vendredi 29 mars 2024 - 08:54  

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 (exemple dans des programmes assembleur)
(Article écrit par Denis Jarril et extrait d'Amiga News Tech - mai 1991)


Après avoir vu à quoi servait la fameuse amiga.lib, si chère à tous les programmeurs en C, nous allons aujourd'hui nous intéresser à la manière de l'utiliser dans des programmes en assembleur.

Il est donc maintenant question d'utiliser amiga.lib pour une série de tâches dont il serait bien inutile de réécrire soi-même le code, des bonnes âmes charitables s'en étant déjà chargé pour nous. Comme disait mon grand-père : "y'en a qui aiment le boulot, autant le leur laisser".

Pour illustrer la manière dont il faut s'y prendre, je vous ai concocté un petit programme de démonstration. Il contient des appels à diverses fonctions d'amiga.lib, aussi bien du module "exec_support" que du module "clib" (reportez-vous à l'article du mois dernier pour plus de détails).

Paramètres

C'est maintenant bien connu, le langage C passe les paramètres des fonctions qu'il appelle par l'intermédiaire de la pile, en sens inverse de leur énumération. Par exemple, la ligne :

buffer = AllocMem(10000, MEMF_CHIP|MEMF_CLEAR);

...est compilée en :

MOVE.L    #$10002,-(A7)   ; MEMF_CHIP|MEMF_CLEAR
MOVE.L    #$2710,-(A7)    ; 10000
JSR       _AllocMam(PC)   ; Saut à AllocMem
ADDQ.L    #8,A7           ; Correction de la pile

Il faudra en tenir compte plus tard, toutes les fonctions d'amiga.lib ayant été écrites en C. Au passage et pendant que j'y pense, l'instruction PEA du 68000 est très pratique pour celui qui manipule souvent la pile : elle à le même effet (et la même syntaxe) qu'un LEA suivi d'un empilement dû registre, mais évite, justement, l'utilisation d'un registre.

CLIB

La partie baptisée "clib" d'amiga.lib contient quelques fonctions directement empruntées à la bibliothèque standard du C, stdio, à savoir :
  • printf : effectue une sortie formatée sur stdout.
  • puts : affiche une chaîne + CR sur stdout.
  • putchar : affiche un caractère sur stdout.
  • getchar : lit un caractère depuis stdin.
  • fprintf : effectue une sortie formatée dans un fichier.
  • fputs : envoie une chaîne + CR dans un fichier.
  • fputc : envoie un caractère dans un fichier.
  • fgetc : lit un caractère depuis un fichier.
  • sprintf : effectue une sortie formatée dans un tampon mémoire.
Toutes ces fonctions s'utilisent quasiment de la même manière que leurs homonymes de la bibliothèque C standard. Quelques petites différences subsistent toutefois :
  • Elles utilisent RawDoFmt() d'exec.library (spécifique Amiga).
  • Les nombres réels ne sont pas gérés (la honte sur moi).
Au fait, vous avez remarqué que certaines font appel à stdin ou à stdout ? Ce sont, en C, les canaux standard d'entrées-sorties, avec stderr (utilisé pour les messages d'erreur). Ces pointeurs doivent être valides lors de l'appel aux fonctions, d'où l'ouverture de la dos.library en début de programme, et l'appel aux fonctions Input() pour stdin et Output() pour stdout. Quant à stderr, il est initialisé avec Open("*"), ce qui l'empêche d'être redirigé avec les caractères ">" et "<" du CLI...

Assemblage

Le programme Clib.s (original, non ?) doit évidemment être assemblé en code reliable, sensible à la casse, avec ou sans symboles, ce n'est pas grave. Les possesseurs de Devpac 2 sauront comment faire, et les possesseurs de K-Seka peuvent toujours changer d'assembleur. L'édition de liens est obtenue (ave BLink du SAS C) par la ligne de commande :

BLink FROM Clib.o TO Clib LIBRARY LIB.amiga.lib [NODEBUG]

AmigaLib

Nous verrons le mois prochain comment intégrer des routines assembleur dans un programme en C et inversement (si, si, ça peut être utile !). D'ici là, je vous souhaite un bon mois en notre compagnie.


[Retour en haut] / [Retour aux articles] [Article précédent]