Obligement - L'Amiga au maximum

Vendredi 23 mai 2025 - 16:32  

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 : Assembleur 68k - fond étoilé qui tourne
(Article écrit par François Fleuret et E. Brunet et extrait de Génération 4 - juin 1989)


Cet article est le premier comparant les méthodes de programmation sur Amiga et Atari ST, et si cela a du succès, il y en aura peut-être d'autres. Pour commencer, nous allons réaliser un "fond étoilé qui tourne" car ce programme ne demande pas d'appels aux coprocesseurs (ni défilements, ni BOB, ni sprites, ni ondulations...) et peut donc être réalisé sur Atari ST sans problèmes.

Pour pouvoir faire cet effet de rotation et de déplacement dans l'espace, nous n'allons pas utiliser un repère cartésien mais plutôt une méthode bien plus puissante dans ce cas précis : les coordonnées polaires. La seule difficulté est donc de réaliser un convertisseur polaire/cartésien qui permettra de calculer l'adresse et le décalage nécessaire à l'affichage à partir d'un module (distance entre l'étoile et le centre de l'écran) et d'un argument (angle correspondant à la position de l'étoile). Pour le faire, il faut créer une table de sinus/cosinus avec un programme BASIC (il est en AmigaBasic sur Amiga et en GfAbasic sur Atari ST) qui permettra de calculer X et Y avec les formules :

X=160+m*cos(alpha)
Y=100+m*sin(alpha) (127 à la place de 100 sur Amiga)

Chaque étoile sera donc définie par son module (m), son argument (alpha) ainsi que sa vitesse angulaire, sa vitesse linéaire et son accélération linéaire ; l'ensemble de ces données se trouve dans une table appelée "DATA_ETOILES" qui est également créée avec un programme BASIC. Comme le programme principal est très simple en théorie, nous allons nous arrêter sur les initialisations et l'interruption balayage utilisée sur les deux machines. Honneur aux dames, l'Amiga d'abord.

Sur Amiga

Comme tout le monde le sait, l'Amiga est très puissant(e) et la réalisation d'un petit programme se transforme vite en une longue succession d'initialisations pour l'écran, les interruptions et les coprocesseurs. Ici, nous avons tout d'abord les initialisations pour un écran de 1 plan de bits et de 320*256 points et une interruption VBL (sur Amiga, cela se limite à supprimer les autres IT).

Pour ceux qui ne connaissent pas l'Amiga, il faut préciser quelques points. Le rôle du Copper : ce coprocesseur se synchronise avec le balayage et peut reprogrammer les autres coprocesseurs. Son programme est appelé "copper-list" (liste Copper). Pour ce qui est de l'écran, l'Amiga n'a pas de format d'écran précis, on doit redéfinir la taille de la fenêtre, la définition graphique, le nombre de plans de bits...

Assembleur
Assembleur
Assembleur
Assembleur
Assembleur
Assembleur

Erratum : une erreur s'est glissée dans la routine SAVE_ALL. Les valeurs OR.W sur les mots SAVE_DMACON et SAVE_INTENA sont inversés, il faut écrire :

or.w #$c000,save_intena
or.w #$8100,save_dmacon

Programme BASIC de création de la table sinus et cosinus.

BASIC
BASIC

Sur Atari ST

Et maintenant sur Atari ST : alors là, c'est différent, plus d'initialisations monstrueuses et une gestion de la VBL très simple. Pas de coprocesseurs (à part le MFP qui gère des IT dont on ne se sert pas ici). Le seul truc un peu louche pour un programmeur Amiga est l'utilisation du mode superviseur du 68000. Sur Atari en effet, la plupart des zones intéressantes (mémoire vidéo, coprocesseurs, vecteurs d'exceptions...) sont "protégées", il faut donc appeler une routine système qui passe le 68000 en mode privilégié.

Pour ce qui est de l'écran, l'Atari ST est très rigide dans ce domaine puisqu'il a seulement trois modes graphiques dont deux accessibles en couleur : 320*200 16 couleurs et 640*200 4 couleurs (toujours 32 000 octets de mémoire vidéo et 160 octets par ligne) ; le troisième mode est monochrome et nécessite un moniteur 70 Hz (640*400 2 couleurs, 80 octets par ligne). Pour pouvoir délirer un peu avec l'affichage, les programmeurs en arrivent à utiliser les bogues du Shifter (processeur vidéo) en changeant la fréquence du balayage à des moments précis ; on peut ainsi faire croire au Shifter qu'il doit encore balayer des lignes alors qu'il a déjà fini (le pauvre...).

Enfin, il reste la structure de la mémoire vidéo, alors que sur Amiga les plans de bits sont séparés, sur Atari ST, la mémoire vidéo est construite avec un mot du plan de bits 1 puis un mot du plan de bits 2 puis un du plan de bits 3 puis un du plan de bits 4 puis le mot suivant du plan de bits 1, etc.

Assembleur
Assembleur

Programme de création de la table des sinus et cosinus.

BASIC

Programme de création de la table des étoiles.

BASIC

Quelques différences

Vous avez sans doute noté les petites différences entre les deux programmes, qui montrent bien les philosophies respectives des deux machines. Nous allons donc voir plus en détail la gestion vidéo pour en dégager les points communs.

Sur les deux machines, la mémoire vidéo est organisée en plans de bits comme nous vous l'avons dit plus haut, et l'unité de base est le mot (nous sommes sur des machines dotées de 68000 qui manie très facilement ce genre de données). Le processeur vidéo va chercher en mémoire les données des plans de bits puis rassemble pour chaque pixel les bits correspondants, ce qui permettra de calculer la couleur. Sur les deux machines, les palettes de couleurs sont stockées dans des registres modifiables dont le format est le suivant :

Amiga

Adresse du registre : $dff180+numéro couleur*2.
Ici, "numéro couleur" est compris entre 0 et 31.

Format (bits et composante) :
  • 8-11 : rouge.
  • 4-7 : vert.
  • 0-3 : bleu.
Atari

Adresse du registre : $ffff8240+numéro couleur*2.
Sur Atari, "numéro couleur" est compris entre 0 et 15.

Format (bits et composante) :
  • 8-10 : rouge.
  • 4-6 : vert.
  • 0-2 : bleu.
Pour ce qui est des registres vidéo, nous retrouvons quelques analogies comme le contrôle de la résolution. L'Amiga et l'Atari permettent de changer la taille des pixels qui composent l'écran. Horizontalement, les deux machines peuvent passer de 320 à 640 points par ligne. Verticalement par contre, les deux constructeurs ont choisi des systèmes différents bien que les différentes résolutions soient les mêmes (200 ou 400 lignes). Pour procurer un confort visuel à l'utilisateur, Atari a choisi de ne laisser le privilège d'avoir 400 lignes qu'aux heureux possesseurs de moniteurs haute résolution monochrome dont la fréquence de balayage est de 70 Hertz. C'est pourquoi l'image est parfaitement stable et permet de longues heures de travail. Commodore a choisi la compatibilité avec tous les téléviseurs. La seule solution était l'usage de l'entrelacé. Le téléviseur décompose l'image affichée en deux demi-images de 312 lignes : l'une contient les lignes paires, l'autre les lignes impaires. Mais en contre-partie, l'utilisateur devra subir un scintillement à moins qu'il ne possède une carte anti-scintillement ou un moniteur à haute rémanence.

Voici les registres de contrôle vidéo :

Atari

Registres en lecture et écriture

Adresse $ffff820a .b synchronisation et fréquence
bit 0 : synchro interne (0) ou autre (1)
bit 1 : 60 hertz (0) ou 50 hertz (1)

Adresse $ffff8260 .b résolution
bit 0 et 1 : basse 320*200 (00)
bit 0 et 1 : moyenne 640*200 (01)
bit 0 et 1 : haute 640*400 (10)
bit 0 et 1 : réservé (11)

Amiga

Adresse $dff100 .w bplcon0
bit 1 : synchro interne (0) ou autre (1)
bit 2 : mode non-entrelacé 200 lignes (0) ou mode entrelacé 400 lignes (1)
bit 9 : color (1=oui, 0=non)
bit 11 : ham (1=oui, 0=non)
bit 12-14 : nombre de plans de bits de 0 à 5 ou 6 si on est en demi-teinte ou mode HAM
bit 15 : basse résolution horizontale correspondant à la basse résolution de l'Atari (0), ou haute résolution horizontale correspondant à la moyenne ou haute résolution de l'Atari (1).

Concernant le contrôle de l'adresse des plans de bits, étant donné que sur Atari ST, les plans de bits sont regroupés, il n'y a qu'un seul pointeur vidéo. Celui-ci est situé aux adresses suivantes :
  • $ffff8201 : octet central fort.
  • $ffff8203 : octet central faible.
Ce registre ne se modifie pas de lui-même. De plus, il pointe sur une adresse multiple de 256 (impossible donc de faire simplement un défilement en déplaçant les pointeurs vidéos). Enfin, il est chargé par le Shifter en début de balayage vertical. Ceci est dommage puisque cela empêche de changer l'adresse de la mémoire vidéo en cours de balayage. La méthode la plus rapide pour changer le contenu de ce registre est l'instruction "MOVEP" illustrée par le programme suivant :

move.l #adr_video,d0
lea $ffff81ff,a0
movep.l d0,0(a0)

Sur Amiga, les plans de bits sont séparés, il faut donc des pointeurs séparés. Comme il y a six plans de bits au maximum, l'Amiga a six registres utilisés par les canaux DMA. Or, quand ils sont utilisés par le DMA, leurs contenus sont changés. Voici leurs adresses :
  • $dff0e0 BPL0PT .1
  • $dff0e4 BPL1PT .1
  • &dff0e8 BPL2PT .1
  • $dff0ec BPL3PT .1
  • $dff0f0 BPL4PT .1
  • $dff0f4 BPL5PT .1
Ces registres sont véritablement utilisés en temps réel par le processeur vidéo pour connaître le prochain mot à lire et à afficher ; on peut donc les modifier n'importe quand pour faire des effets spéciaux (défilements, suppression de lignes, répétitions de lignes, etc.).

En conclusion

L'Atari est bien plus rigide que l'Amiga et ne permet pas de fantastiques délires de créateurs de démos. Néanmoins, parvenir à faire quelque chose de valable sur Atari ST (comme la démo Union, par exemple) est nettement plus valorisant que n'importe quelle démo sur Amiga, aussi soignée soit-elle.

Et voilà, c'est fini pour ce premier article de comparaison Amiga/Atari ST. Il faut bien signaler que celui-ci ne fait pas du tout apparaître ce que l'Amiga a dans les tripes car il n'y avait pas d'utilisation des coprocesseurs, domaine où l'Amiga domine largement l'Atari ST. Mais nous ferons bientôt des défilements et des déformations, spécialités de l'Amiga.


[Retour en haut] / [Retour aux articles]