|
|||||||||||||||||||||||||||||||||||||||||||||
|
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... ![]() ![]() ![]() ![]() ![]() ![]()
Programme BASIC de création de la table sinus et cosinus. ![]() ![]() 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. ![]() ![]() ![]() ![]() 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) :
Adresse du registre : $ffff8240+numéro couleur*2. Sur Atari, "numéro couleur" est compris entre 0 et 15. Format (bits et composante) :
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 :
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 :
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.
|