Obligement - L'Amiga au maximum

Mercredi 23 janvier 2019 - 15:45  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

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

 · Articles in english
 · Articles en d'autres langues


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Logiciels
 · Jeux
 · Scène démo
 · Divers


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


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


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


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 standards 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]