Obligement - L'Amiga au maximum

Mercredi 19 décembre 2018 - 06:58  

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 : AMOS - Brancher des routines sur les interruptions et améliorer le rafraîchissement des écrans
(Article écrit par François Lionet et extrait d'Amiga News Tech - avril 1991)


Bienvenue dans la rubrique AMOS de l'ANT, AMOS Technique (AMT pour les intimes). Après avoir vu comment créer une extension à l'AMOS, nous allons brancher des routines sur les interruptions et améliorer le processus de rafraîchissement d'écran...

Et pour commencer, nous allons voir comment brancher une routine sur les interruptions VBL. AMOS utilise intensivement les interruptions de retour de balayage. Beaucoup de choses y sont effectuées :
  • Changement de listes de sprites.
  • Gestion des écrans entrelacés (fait en interruption sous AMOS !).
  • Modification des couleurs dans la liste Copper (FLASH, SHIFT, FADE).
  • Appel d'AMAL.
  • Appel des routines musicales.
  • Gestion de la souris.
Elles sont pour le moins chargées !

Une extension peut bien sûr modifier le vecteur en S6C pour se brancher sur le serveur d'interruption. Je ne vous le conseille pas : certaines tâches effectuées par AMOS ont absolument besoin de se produire immédiatement après le signal de retour de balayage. Ce sont toutes les opérations modifiant la liste Copper (changement des couleurs, écran entrelacé, sprites). Le fait de retarder l'entrée de la routine VBL de l'AMOS provoquerait un accès simultané du Copper et du 68000 aux mêmes adresses. La réponse du DMA serait sans appel : plantage !

C'est pourquoi j'ai ménagé un moyen très simple pour programmer une interruption VBL.

Dans la zone de données (pointée par A5), se trouve une petite liste de huit adresses. Les routines pointées par ces adresses sont appelées par AMOS lors de l'interruption VBL.

Voici la partie de programme qui effectue l'appel :

AMOS

Le programme explore la liste et appelle toute adresse différente de zéro. La boucle d'exploration se termine à la première adresse nulle. Il ne faut pas modifier les registres A4, A5 et A6.

Insérer sa propre routine

Il faut explorer la liste depuis le début à la recherche de la première adresse nulle :

AMOS

Attention : vous ne devez pas "poker" une adresse à une position fixe dans la liste : votre extension peut-être chargée après une autre, qui utilisera la même position !

La liste peut contenir sept adresses, et doit se terminer par un zéro. La première est en général utilisée par l'extension musicale.

Avoir sa propre routine Update

Quelques explications : le principal avantage d'AMAL est l'animation automatique des BOB, sprites, écrans et autres "rainbows" : ils bougent en interruption pendant que le programme BASIC continue à fonctionner... Il n'était pas possible de programmer tout le système en interruption, pour une raison très simple : les interruptions VBL doivent absolument durer moins de 1/50e de seconde, sous peine de planter la machine. Or, afficher plusieurs BOB, recalculer la liste Copper, dessiner un rainbow peut prendre largement plus de ce temps : il a fallu ruser !

AMAL fonctionne véritablement sous interruptions. Son rôle est de calculer et de modifier les coordonnées, et seulement les coordonnées de chacun des canaux animés. Chaque fois qu'AMAL change un canal, il positionne un drapeau du canal et un drapeau dans la zone de données de l'AMOS. Pour éviter de planter le système, le nombre de canaux animés durant les interruptions est limité à 16 (SYNCHRO ON).

Avant chaque instruction de branchement, ou lors d'une boucle d'attente (par exemple WAIT), AMOS teste le drapeau général. Si ce drapeau est à 1, AMOS appelle la routine de dessin de BOB, sprite, écran, etc. On peut ainsi garder l'avantage des interruptions (stabilité des déplacements, indépendance par rapport au BASIC), tout en autorisant le déplacement de très gros objets...

Au fait, au fait !

Quel rapport avec les extensions ? Il est possible de réaliser une extension se greffant automatiquement sur le processus d'Update. Vous pouvez donc créer votre propre version d'AMAL en utilisant une routine VBL positionnant les drapeaux UPDATES.

J'ai réalisé ceci en pensant à AMOS 3D (qui doit sortir très prochainement, sans blague !). Les programmeurs de cette extension voulaient réaliser un pseudo AMAL traitant trois coordonnées : X, Y et Z, pour gérer des objets en trois dimensions.

Comment faire

Le principe se rapproche de celui utilisé pour les interruptions : une liste de routines à appeler, plus des drapeaux à positionner. La liste des routines d'Update se trouve à l'adresse ExtTests+4(a5), et peut contenir sept adresses.

Quant aux drapeaux, les voilà :

Actual+1(a5) : les bits 1 à 7 signalent un routine à appeler. Au bit 1 correspond l'adresse contenue en ExtTests+4(a5), au bit 2, l'adresse contenue dans ExtTests-F8(a5), etc.

ActuMask+1(a5) : il s'agit d'un masque appliqué au contenu de Actual, pour inhiber certaines routines Update.

Voici un extrait de la routine d'appel des extensions :

AMOS

Vous pouvez voir en inspectant cette routine que la première adresse de la ligne et le bit 0 du drapeau Actual ne sont pas accessibles. La routine doit en plus préserver les registres D6/D7, A1 et A5.

Un exemple

Voici le listing d'une extension complètement... nulle. Elle propose une merveilleuse instruction, dont le seul objet est de "poker" dans la mémoire d'un écran tous les 1/50e de seconde, en interruption :

MOUVEMENT NUL adresse,taille

L'installation des routines est réalisée dans la partie initialisation de l'extension. Pour les deux routines, on recherche une place libre dans la liste, puis on "Loke" l'adresse.

Pour la partie Update, il faut en plus garder le numéro du bit à positionner pour l'appel... Pas besoin de se soucier de l'effacement des routines : tout est effectué par AMOS.

Pour avoir une démonstration de l'instruction, passer en mode direct, effacez l'écran (CLS 0) puis tapez :

MOUVEMENT NUL Logbase(0),8000

Un octet progresse sur l'écran. C'est idiot, mais c'est une bonne démonstration du processus :
  • L'incrémentation de l'adresse de l'octet est réalisée pendant l'interruption VBL.
  • L'affichage dudit octet est réalisé lors de la mise à jour (Update). Si vous bougez l'écran de mode direct (avec les flèches haut et bas), certaines positions ne sont pas affichées, le calcul de la liste Copper fait "sauter" un balayage écran.
AMOS

Ciel, le compteur de mon traitement de texte indique déjà 9000 caractères, il se fait tard, je dois vous laisser ! Le mois prochain nous nous attaquerons à la structure des banques de mémoire : sprites, musique, etc.


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