Obligement - L'Amiga au maximum

Vendredi 19 avril 2024 - 21:53  

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