Obligement - L'Amiga au maximum

Jeudi 25 avril 2024 - 10: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 : GFA Basic - écran et AMOS
(Article écrit par Pierre-Philippe Launay et extrait d'Amiga News - décembre 1991)


Pourquoi parler enfin d'AMOS ?

Je ne voulais pas citer AMOS en premier car l'objectif de mon cours en GFA Basic est d'amener le débutant à la véritable programmation. Avec AMOS, le néophyte était trop tenté par les énormes facilités du langage. En codant directement dans ce BASIC sans connaître les bases du développement, le débutant arrivait à coup sûr dans une impasse. Il aurait su coder de l'à peu près qui aurait fonctionné mais qui l'aurait empêché de passer ensuite au roi des langages, l'assembleur.

Maintenant, vous savez qu'on ne doit écrire qu'une instruction par ligne. Il faut bannir les GOTO, les GOSUB et les PRINT. Chaque NEXT doit être suivi du nom de la variable à laquelle il se rapporte, etc. En GFA c'est plus facile car l'éditeur est particulièrement convivial et accepte difficilement de vous laisser commettre toutes ses erreurs. Mieux, il réalise automatiquement l'indentation, c'est-à-dire la mise en évidence de chaque bloc logique, ainsi que la vérification syntaxique. Il permet enfin les raccourcis clavier (AMOS aussi) et les abréviations.

Je crois venu le moment de vous dire comment je procède maintenant pour faire les codages qui vous plaisent tant : je code d'abord en GFA ; j'optimise ; puis je refais les parties cruciales en AMOS car cela me permet de clarifier le plan. Je repasse ensuite en GFA en créant éventuellement les procédures manquantes. GFA est plus proche du système et permet donc de gagner énormément dans la rapidité d'exécution : il en est toujours ainsi avec ces deux philosophies du codage.

AMOS propose du prêt à l'emploi et il lui faut tout prévoir. GFA est du kit sur-mesure mais on doit alors se créer de nombreuses routines. La routine GFA de chargement IFF du chapitre 5 se traduirait par exemple en AMOS par Load IFF. Tout ce codage serait fastidieux si GFA était au moins aussi rapide que le C. Malheureusement, je dois avouer l'épouvantable vérité. Un codage GFA compilé est... beaucoup plus rapide qu'un codage C compilé. Ainsi, en reprenant, le même codage que celui de notre spécialiste C, Super BatchMan, publié dans cet article on trouve déjà 63 au lieu de 70 pour une boucle tournant à vide (gain de 10%). L'impression de la lettre A dure 10490 cycles au lieu de 10535 cycles (gain de 1%) mais GFA déteste le PRINT. Avec la bonne commande GFA, on trouve 1792 (gain de 5,879 fois sur la fonction C) et on peut encore aller plus vite. AMOS commence aussi à rattraper le C.

En résumé, AMOS est plus rapide à coder mais GFA donne des exécutables plus professionnels. Clinorhombique que cela ! Vais-je décevoir les nombreux passionnés du GFA dont je suis. Non, car je caricaturais à l'extrême. En effet, en GFA comme en AMOS, il faut savoir utiliser les fonctions adéquates et les raccourcis couper/coller/clavier. Le chargement d'une image IFF n'était donné que dans un but didactique. En GFA, on utiliserait plutôt les INLINE. Ils sont plus proches de la technique de l'assembleur et sont instantanés.

Le codage du mois

Ce codage fut publié en GFA au niveau débutant. Il semble complexe en GFA mais il n'en est rien. Tout devient limpide quand le programme tourne régulièrement. Voici tout d'abord la version allégée AMOS. C'est simple mais très spectaculaire.

GFA Basic

Les codages du mois utilisent une caractéristique unique à Amiga. L'Amiga peut communiquer avec plusieurs écrans terminaux. Chaque écran Amiga est une ouverture sur le monde. Mieux, il correspond à une sortie image particulière. L'Amiga peut ainsi communiquer avec plusieurs terminaux simultanément en leur envoyant à chacun des images totalement différentes et adaptées au contexte. En réalité, chaque image fait partie d'une structure écran avec de la couleur, des graphismes, des dimensions, etc. On résume en assimilant abusivement cette image à un écran.

Un seul moniteur égale plusieurs terminaux

Cela signifie que l'on peut afficher plusieurs structures d'écrans sur un seul moniteur vidéographique. C'est le multitâche. On ne peut cependant pas entrer en conflit avec l'électronique. Un point du moniteur ne peut pas être bleu pour un écran et rouge en même temps pour un autre écran visible simultanément. Ces écrans seront donc empilés d'avant en arrière et seule la partie visible de chacun d'eux sera affichée. Il sera alors très facile de passer de l'un à l'autre et c'est ce qu'on va faire. Le cahier des charges propose de créer deux structures d'écran, pour deux images différentes, et de les alterner très rapidement de l'une à l'autre grâce à la puissance de calcul du microprocesseur 68000.

Le programme charge la première image, par exemple une girafe, dessinée sous Deluxe Paint. Il la stocke dans une structure d'écran nommée ici "Écran n°0". Sous AMOS, ce numéro peut varier de 0 à 7. On aura droit à huit structures d'écrans. Sous GFA, le nombre varie de 1 à 15, 0 étant réservé au Workbench. On charge la deuxième image dans un deuxième écran et c'est là que Super OctetoPage commence à paniquer car ça va trop vite. L'écran 0 est mis en avant, rendant la girafe visible. On attend le retour du faisceau d'électron en haut du moniteur et ont met en avant l'écran n°1. Cela cache la girafe et montre l'autre image, pour moi un coffre-fort. On attend de nouveau le retour du faisceau lumineux : c'est l'attente du blanc vertical. Puis on recommence.

Cette pause est obligatoire en AMOS après chaque image car autrement seule la dernière image sélectionnée serait affichée. Ce "Vertical Blank Line" (VBL) se situe juste après le moment où le rayon lumineux arrive en bas du moniteur après avoir tout dessiné. La lumière s'éteint, donnant le signal aux trois canons d'électron du rouge, du vert et du bleu de se rediriger vers le haut comme pour n'importe quel récepteur télévisuel.

On continue avec un cyclage des couleurs à la manière de la touche TAB sous Deluxe Paint. Ce cyclage attend durant 0 fois 1/50e seconde et permute alternativement chaque couleur de la numéro 1 à la numéro 3. Le dernier chiffre de ShiftUp pourra être 0 ou 1. Avec 1, on dit à AMOS de faire cycler la dernière couleur sur la première c'est-à-dire qu'on tournera en rond, tandis qu'avec 0, toutes les couleurs seront éjectées progressivement au profit de la première.

Et on tourne encore et toujours de "Repeat" à "Until" jusqu'à ce qu'on cliquette la souris. Dernière image de la girafe. Attente du cliquetis. Retour à l'éditeur. Il y a 15 lignes. Le résultat est impressionnant.

Version GFA

Si vous aviez lancé AMOS auparavant, vous devrez relancer l'Amiga (Amiga+Amiga+Ctrl). Bien. Passons à la version GFA. Programmeurs AMOS, rassurez-vous, le flashouilli y est également visible. C'est inévitable même en assembleur car on atteint la limite physique de notre ordinateur. Il ne peut y avoir que 50 images par seconde soit 25 images pour chacun des deux graphismes. Cela amènera un très léger asynchronisme pour notre oeil humain.

Dans les deux langages, nous passons une éternité de notre temps à attendre car 1/50=0,02 seconde est vraiment très très long pour une machine vibrant toutes les 0,000000139664 seconde.

Voici le plan du codage GFA. C'est plus long à écrire sauf si vous utilisez les couper/coller, le mode "OverWrite" et les nombreux raccourcis claviers tels que "Ctrl-Y" et "Ctrl-U" qui recopient des lignes ou "Ctrl-P" et "Ctrl-O" adaptés aux parties de lignes :
  • Création de quatre listes de 32, 2 et 2 éléments.
  • Ouverture d'un écran pour la girafe.
  • Lecture des plans de bits contenus dans les INLINE bp%.
  • Lecture des couleurs contenues dans le INLINE col%.
  • Pareil pour le deuxième écran du coffre-fort.
  • Possible en GFA seulement, échange sinusoïdal rapide des deux images.
  • Cyclage rapide des couleurs sur le coffre-fort.
  • Affichage de l'image de la girafe.
  • Fin du codage.
GFA Basic
GFA Basic
GFA Basic
GFA Basic

Comment est construit un écran ?

Chaque image est constituée de plusieurs couches, les plans de bits. C'est la profondeur de l'écran. Chaque plan sera placé dans un INLINE. C'est l'instruction permettant d'insérer du codage binaire (des suites de bits 0 et 1) dans un programme GFA.

"bp1%" et "bp2%" contiendront les deux plans de bits de la première image tandis que "bp3%" et "bp4%" auront ceux de l'autre image.

Syntaxe : INLINE nom%,longueur&
Abréviation : in1 nom%,longueur

"nom%" est le nom d'une zone en mémoire qui contiendra longueur & octets. "nom%" est un farfadet LONG% qui contiendra l'adresse du début de la zone. On n'a pas à s'en soucier. C'est GFA qui fera tout le travail. On doit simplement trouver un nom original.

"longueur&" est un farfadet WORD& qui indiquera la longueur totale de la zone.

Exemple : on va insérer les plans de bits d'une image IFF de deux plans de bits. Utilisez pour cela le codage du chargement d'image IFF publié dans cet article. Ajoutez ce qui suit pour écrire sur disquette chacun des plans de bits dans des fichiers séparés. Il ne restera plus qu'a les charger dans les INLINE.

GFA Basic

On obtient les fichiers Plan0.GFA et Plan1.GFA.

Notez la longueur de deux fichiers grâce à "FILES DF1:" dans l'option directe du menu (DF1: car j'utilise le lecteur DF1: sinon adaptez à votre matériel). Au fait, au lieu d'utiliser la souris, utilisez la touche "Esc" pour passer en mode direct et de nouveau "Esc" pour revenir au mode "Éditeur".

Je trouve 10641 octets. Écrire :

INLINE bp1%,10641
INLINE bp2%,10641

Attention, on ne peut pas mettre de remarques après un INLINE. "bp1%" sera le nom de la première zone, "bp2%" celui de la deuxième.

Positionner le curseur au niveau du premier INLINE puis appuyer sur "Help". Choisir "Load" et sélectionner le fichier Plan0.GFA. Faire de même avec le deuxième plan de bits. Recommencer le tout avec la deuxième image en prenant garde à donner des noms différents. La première image sera affichée avec SPUTa$(): il ne reste plus qu'à copier bp1% et bp2% dans a$(0) et a$(1).

Au fait, cela devient une habitude, il y a encore et toujours trois erreurs dans chacun des deux codages qui résistent encore et toujours à l'envahisseur (une erreur de syntaxe et deux erreurs logiques).


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