Obligement - L'Amiga au maximum

Samedi 15 décembre 2018 - 14:15  

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 : GFA Basic - Jouer une musique SoundTracker
(Article écrit par Max et extrait d'Amiga News Tech - juin 1990)


Nous allons encore une fois faire une légère digression au sein de notre cours assembleur, pour étudier de près un problème soulevé par Jean-Marc Fauchan, gentil lecteur de Sâone-et-Loire, à savoir : jouer une musique SoundTracker depuis le GFA Basic.

La PlayRoutine livrée avec SoundTracker est en effet destinée presque exclusivement à une inclusion au sein d'une démo, donc écrite en assembleur. Pour ce qui est de l'incorporer au GFA, c'est une toute autre paire de manches, que nous allons d'ailleurs relever dès maintenant et sans plus tarder. Bref, nous allons la disséquer joyeusement et l'adapter au format désiré, c'est-à-dire :
  • La rendre entièrement relogeable (c'est indispensable et le plus gros du travail (quoique...)).
  • Rendre son appel possible depuis le GFA, c'est-à-dire lui faire accepter certains paramètres, passés par l'intermédiaire de la pile.
  • Évidemment, l'appeler sous interruption, tous les 1/50e de seconde (à chaque VBL, quoi).
Du GFA au LM

Avant d'aller plus loin, je tiens à préciser que je ne dispose que de la version 2.1 de la PlayRoutine, c'est-à-dire autorisant un maximum de 15 instruments (alors que mon SoundTracker est le 2.4 avec 31 instruments), mais le principe reste le même.

Examinons tout d'abord comment le GFA Basic passe ses paramètres à une routine en langage machine. Ceux qui ont déjà tâté du C ne seront pas du tout dépaysés, puisque c'est exactement le même procédé qui est utilisé (d'où le nom de la fonction "C:", d'ailleurs), à savoir que les paramètres sont passés par la pile, dans l'ordre de leur énumération. Ainsi par exemple mais pas par hasard : VOID C:adresse%(L:parametre1%,W:parametre2&,W:parametre3&) sera empilé comme suit :
  • SP : adresse de retour (pour RTS).
  • SP + 4 : paramètre 1% (32 bits).
  • SP + 8 : paramètre 2& (16 bits).
  • SP + 10 paramètre 3& (16 bits).
(nous ne traiterons pas des variables alphanumériques, qui n'ont strictement aucun rapport avec notre article du mois).

Pour récupérer ces paramètres, il suffit donc de faire quelque chose dans le genre :

move.l4(sp),d0                ; d0 = paramètre 1% 
move.w           8(sp),d1     ; d1 = paramètre 2&
move.w           10(sp),d2    ; d2 = paramètre 3&

Mais pourquoi donc se masturber ainsi les neurones à passer des paramètres ? Tout simplement parce que la routine d'initialisation de la PlayRoutine nécessite de connaître l'adresse où est logé le module à jouer (ce sera notre "parametre 1%"). Pour la frime, "parametre 2&" permettra de définir la vitesse de la musique (commande F dans SoundTracker), ce qui peut s'avérer utile lorsqu'on veut jouer plusieurs morceaux les uns à la suite des autres et que les uns changent de vitesse sans prévenir personne. Et enfin, le troisième paramètre servira à définir la priorité du serveur d'interruption que nous allons créer spécialement pour l'occasion.

Cette priorité, comprise entre -128 et +127, est la cuisine interne d'Exec et n'a pas ici un rôle réellement capital, une valeur de 0 étant tout à fait convenable. De toute manière, le temps que vole la PlayRoutine pendant la VBL suffit à faire passer l'Amiga pour un ZX81 de compétition. Que voulez-vous, on a rien sans rien...

Un mot encore à propos de l'adresse du module : il doit se trouver en mémoire Chip pour que le processeur sonore puisse accéder aux instruments numérisés. Le listing 3, superbe exemple en GFA, évidemment, s'occupe de ce détail. Le listing 2, quant à lui, se charge de créer le fichier "REPLAY.INL" qui sera inséré dans l'INLINE. Et enfin, le listing 1 est le source assembleur de la PlayRoutine modifiée (écrit pour Devpac 2, il serait temps de jeter K-Seka aux orties) plus les diverses initialisations et l'installation du serveur d'interruption (car chez moi, on fait les choses proprement, ma bonne dame).

Voilà. Je n'en dirai pas plus sur le GFA et vous laisse ipso facto avec quelques jolies lignes de données bien fournies à taper (attention les crampes). On se retrouve le mois prochain avec une routine pour lire/décompacter un fichier IFF ILBM toutes résolutions, même en suraffichage.

Listing 1 : la PlayRoutine légèrement personnalisée

assembleur
assembleur
assembleur
assembleur
assembleur
assembleur

Listing 2 : créateur de REPLAY.INL

assembleur
assembleur

Listing 3 : exemple

assembleur


[Retour en haut] / [Retour aux articles]