Obligement - L'Amiga au maximum

Vendredi 24 novembre 2017 - 21:16  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · 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 in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


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

 


Dossier : Fonctionnement de la circuiterie graphique Amiga (OCS/ECS)
(Article écrit par Fabrice Neyret et extrait d'Amiga News - janvier 1992)


L'Amiga a dominé techniquement le monde informatique à sa sortie grâce notamment à un jeu de composants ("chipset" en anglais) performants. Ce jeu de composants dispose notamment de fonctions graphiques intéressantes que nous allons décrire ici. Les Amiga 1000, 2000 et 500 disposent de l'OCS (Old Chip Set) alors que les Amiga 3000, 3000T, 500+ ainsi que les derniers modèles d'Amiga 2000 sont fournis avec l'ECS (Enhanced Chip Set).

Circuiterie graphique de l'Amiga

La mémoire

La mémoire est "semi-spécialisée", en ce sens que les circuits spécialisés n'accèdent qu'à une partie de la mémoire, appelée mémoire Chip (sorte de mémoire préférentiellement dédiée aux I/O : dessins, sons...), alors que le processeur voit toute la mémoire, la partie dont il a l'exclusivité (appelée mémoire Fast) étant plus indiquée pour le code des programmcs et les données non graphiques.

La mémoire Chip

La partie "Chip" est synchronisée sur le raster et utilise des ports temporels plus ou moins rigides. Un processeur général simplifié (Copper) contrôle l'usage des 25 canaux DMA par les circuits spécialisés, dont un Blitter capable d'effectuer toutes les opérations binaires entre trois entrées et une sortie rectangulaires, ainsi que de tracer des droites et remplir des formes fermées.

Le processeur

La partie processeur est plus classique. Elle peut elle-même gérer le DMA de la part d'extensions apportant de nouvelles I/O (comme un disque dur, par exemple). Il est à noter que lorsque le processeur n'accède pas à la partie "Chip", le bus processeur et le bus de la mémoire Chip sont déconnectés et fonctionnent indépendamment.

La vidéo

La vidéo de l'Amiga est basée, dans sa version européenne, sur les spécifications PAL, et dans sa version américaine, sur les spécifications NTSC :
  • PAL : 625 lignes entrelacées à 50 Hz, ce qui autorise les résolutions classiques 512 ou 256 en vertical, avec 640 ou 320 en horizontal.
  • NTSC : 525 lignes entrelacées à 60 Hz, ce qui autorise les résolutions classiques 400 ou 200 en vertical, avec 640 ou 320 en horizontal.
Cela correspond aux modes haute résolution et basse résolution en entrelacé ou non.

Avec le mode "overscan" (suraffichage), on peut exploiter toute la vidéo en utilisant les marges souvent laissées autour de l'écran en informatique. On atteint alors 724x566 en PAL haute résolution entrelacée ou 724x482 pour le NTSC (les "x" premières des 625/525 lignes correspondent à un temps mort et ne sont pas affichées par les moniteurs).

Rappelons que l'entrelacement consiste à afficher en alternance une trame constituée des lignes impaires puis celle des lignes paires. Quand on exploite cette caractéristique de la vidéo, cela provoque un scintillement ("flicker" en anglais) aux endroits à fort contraste, à moins d'utiliser un désentrelaceur et un moniteur adéquats.

Les couleurs

D'une manière générale, pour désigner une couleur on a le choix entre passer par une palette ou préciser directement une teinte. Dans le premier cas il faudra en chaque point de l'écran indiquer un numéro de couleur, dans le second on aura besoin de l'intensité de rouge, de vert et bleu avec une certaine précision.

En ce qui concerne l'Amiga, le générateur de signaux RVB Denise (dans sa version égale ou supérieure à 8263R6) dispose de 32 registres couleurs 12 bits, mais on dispose de 1 à 6 bitplanes pour décrire les images, ce qui autorise 64 couleurs. De plus, toutes les puces Denise peuvent afficher 4096 couleurs avec quelques contraintes :
  • Un mode "Extra Half Bright" (EHB) définit comme demi-teintes les couleurs 32 à 63.
  • Un mode "Hold And Modify" (HAM) permet de spécifier la variation de teinte par rapport au pixel précédent (on a en fait le choix à chaque pixel entre désigner un registre couleur parmi 16 ou changer la composante R, V ou B du pixel précédent).
Agnus
Agnus 8361R6 issu d'un A1000

Denise
Denise 83621R6 issu d'un A1000

Schéma de fonctionnement de circuits spécialisés de l'Amiga

circuiterie graphique

Cycles pairs, cycles impairs

Cycles impairs

Comme on peut le voir sur le schéma précédent, le circuit graphique principal Agnus tourne à 3,579545 MHz (NTSC) ou 3,546895 MHz (PAL) soit deux fois moins vite que le processeur 68000, mais un "Move" du processeur demande quatre cycles alors que les circuits spécialisés accèdent par DMA à chaque cycle du bus.

Autant que possible, on va donc laisser au processeur les cycles pairs et utiliser les cycles impairs, ce qui revient à encastrer les accès sans léser personne. Un cycle dure 280 ns, une ligne du raster (1/50 Hz)/312 lignes soit 63,5 s, il faut donc répartir environ 225 cycles à chaque ligne vidéo. Voir ce chronogramme :

circuiterie graphique

On utilise un canal DMA par bitplane, et on lit donc 16 bits à chaque accès. On trouve alors que l'on ne peut gérer que 4 bitplanes en basse résolution et 2 en haute résolution (225/2*16/640) si l'on se contente des cycles impairs, et qu'il faut investir des cycles pairs si l'on veut plus. Dans ce cas, on pénalise les accès du processeur à la mémoire Chip, alors que jusqu'à maintenant l'activité des circuits spécialisés, lui, était invisible.

On voit bien que l'on travaille aux limites de l'électronique. Pour aller plus loin (plus haute résolution, mode 12 voire 24 bits "vrais") il faudrait modifier les circuits pour les faire travailler plus vite, sur plus de bits.

D'autre part, le matériel de l'Amiga (en l'occurrence Denise) gère directement les sprites, petits objets qui sont incrustés sur l'image (le pointeur de la souris en est un). Il y en a huit, définis en 4 couleurs dont une transparente (on fait correspondre des registres couleur à chaque sprite), La largeur est de 16 pixels et la hauteur quelconque (on peut grouper les sprites par paires de façon à disposer de 16 couleurs).

En début de chaque ligne, il faut donc a priori faire 8x2 accès (sur les cycles impairs) pour décrire la ligne courante de chaque sprite, la position en "x" étant fournie par les DMA sprites lors de la ligne précédant l'objet, celui-ci finissant par un double zéro. Le système d'exploitation gère un nombre supérieur de Virtual Sprites (VSprites) mais il ne pourra y en avoir plus de 8 à un moment donné sur une ligne. D'autre part, le matériel sait gérer des priorités (profondeurs) ainsi que les collisions entre sprites ou avec certaines couleurs de l'image de fond.

Ceci est utilisé par le système d'exploitation pour implémenter les "Graphics ELements" (GEL, dont les Virtual Sprites font partie). Il gère également la vitesse et l'accélération.

En cas "d'overscan", le DMA bitplane peut venir empiéter sur les sprites qui disparaîtront alors, à l'éxeption du premier (le pointeur de la souris) qui est toujours présent.

Pour compléter la synchronisation des cycles impairs, rigides, citons 4 accès pour le rafraîchissement de la mémoire Chip, 2 pour les disquettes et 4 pour chacune des voies sonores. Les échantillons étant pris sur 8 bits, on a donc 2 échantillons par piste à chaque ligne vidéo, ce qui donne une fréquence d'échantillonnage de 31,5 kHz, soit une fréquence audio maximale de 15,7 kHz.

Les cycles pairs

Les cycles pairs sont moins stricts et disponibles pour le processeur, mais servent aussi au Blitter et au Copper (et aux bitplanes qui ne tenaient pas autrement).

On a fait allusion au Blitter plus loin dans cet article, qui utilisant quatre canaux DMA (trois sources et une cible) assure largement plus que les opérations de bit blit élémentaires (l'action à effectuer est décrite par une somme de minterms et permet donc toutes sortes de mixages et de masquages). Il va sans dire que l'interface graphique Intuition l'utilise largement pour l'affichage des polices, des fenêtres, des menus, etc.

NB : un minterm exprime le ET logique de deux variables ou de leur négation. Toute fonction binaire peut se décomposer en somme de minterms.

Le système d'exploitation gère également des Blitter OBjects, objets graphiques trop importants pour passer en sprites et qui sont pris en charge par le Blitter, ce qui assure des animations en temps réels d'objets importants. Comme ce sont aussi des GEL, le système peut prendre en charge vitesse, accélération et collisions.

Le Blitter peut éventuellement concéder un cycle tous les trois cycles au processeur en cas de besoin, mais le Copper a priorité absolue (ce qui a peu de gravité dans la mesure où il est en attente la plupart du temps).

Le Copper

Le Copper joue un rôle autrement plus important puisque c'est lui qui assure la cohérence de l'ensemble : c'est un processeur à trois instructions qui sait affecter les registres spécialisés et lancer les DMA, attendre une position du faisceau vidéo et contourner une instruction si une position est dépassée.

Affichage des modes graphiques

Pour mieux saisir l'intérêt de l'affichage des modes graphiques il faut savoir que l'Amiga sait afficher plusieurs modes graphiques simultanément. Au niveau système on se limite à une seule résolution dans une ligne, ce qui entraîne un partage de l'écran (View) en zones superposées (ViewPorts), de résolutions, de profondeurs et de palettes différentes.

Le rôle du Copper est alors d'attendre que le spot atteigne le début de chaque zone, de positionner les registres spécialisés et les registres couleur en conséquence, et de lancer les DMA bitplanes aux bons moments. Celles-ci vont alors "vider" le dessin de la zone dans un registre de Denise, qui à l'aide de la palette courante et après incrustations, va fabriquer au fur et à mesure un signal RVB envoyé au moniteur.

A une situation donnée du View correspond donc une liste Copper ("Copper List"), programme du Copper généré par le système d'exploitation à chaque modification de l'organisation du View (en fait il y en a deux pour pouvoir traiter correctement l'entrelacement. Elles sont stockées en mémoire Chip et sont accessibles par le 25e canal DMA).

Remarquons que le déplacement d'une zone à l'écran ou le défilement d'un large bitplane dans une petite fenêtre n'est que l'affaire d'une modification d'offset dans le déroulement du DMA, et se fait donc instantanément.

On peut à la rigueur programmer ses propres listes Copper, et ainsi changer la couleur d'un registre le long de l'image, ce qui permet de produire des dégradés même avec un bitplane, voire perturber le calage des fenêtres (effets de drap qu'on secoue), etc.

Ceci est utilisé par l'interface graphique Intuition pour implémenter des "méta-fenêtres" (appelées "écrans") qui regroupent dans une résolution donnée un ensemble de fenêtres, et que l'on peut abaisser ou relever avec la souris pour laisser apparaître d'autres écrans en dessous (ce qui permet de bien séparer certaines applications). Les portions d'écrans visibles correspondent aux ViewPorts.

Un mode d'affichage particulier

Pour être complet, il faudrait encore citer le "Dual PlayField", qui permet de considérer une partie des bitplanes comme plans de "popup", c'est-à-dire une première image comprenant une couleur transparente qui laisse apparaître une seconde image (ce qui autorise des masquages faciles comme par exemple un paysage par une cabine de pilotage au premier plan). Ces deux champs de bits peuvent avoir des défilements différents, et les sprites savent se positionner chacun sur ou entre les deux images.

Notons enfin que la couleur 0 peut être remplacée par une source externe à l'Amiga (incrustation vidéo), ce qui se fait d'autant plus facilement que le raster peut se synchroniser depuis l'extérieur.

Tout ceci fait que les opérations 2D courantes sont confortablement assurées en temps réel pratiquement sans charge du processeur (il existe une rubrique consacrée au format ANIM dans le standard de fichier IFF). J'ai même déjà vu une démo faire de l'animation avec décompression à la cadence vidéo sur un quart d'écran (ce n'est pas pour rien que Commodore a fait le CDTV à partir d'un A500 !).

La technique d'incrustation (affichage d'objets par-dessus l'image) permet d'économiser beaucoup d'opérations inutiles : pensez au coût de déplacement d'une souris sur un PC ou un Mac ! Il faut sauvegarder une portion d'écran, dessiner le curseur, puis rétablir l'affichage et incrémenter les coordonnées de la souris...

Le Blitter

Le Blitter est capable de sortir 16 millions de bits par seconde pour le remplissage ou l'affectation de blocs (ce qui donne environ 1000 rectangles 100x100 par seconde et par bitplane, et un million de bits par seconde pour le tracé de vecteurs.

Les lignes peuvent reproduire un motif et s'afficher via une opération binaire. Les opérations de bit blit peuvent être pipelinées (réalisées dans la foulée) avec le remplissage. Il est possible de choisir le sens de parcours des blocs.

De plus, on peut tester le résultat d'opérations binaires sur tout un bloc (par exemple pour tester les collisions entre un objet et l'image), et le Blitter s'occupe également d'opérations non graphiques comme le décodage de données venant des disquettes.

Là aussi, le Blitter fonctionne au maximum lors des déplacements de fenêtres très colorées, et gagnerait à voir la largeur de bande du bus de la mémoire Chip multipliée (surtout dans un contexte multitâche...).

Une programmation astucieuse permet de dépasser certaines limites : certains logiciels affichent 4096 couleurs en haute résolution. Des démonstrations de "hackers" remplissent l'écran de sprites en mouvement, animent des scènes 3D simples en faces pleines éventuellement à motifs 2D ou translucides (et en couleurs !), font évoluer en temps réel des courbes ou des surfaces à base de centaines de points, utilisent le Blitter pour certaines transformations géométriques, ou produisent des "sons" jusqu'à 1,74 MHz ! (le DMA audio ne gère que 15,7 kHz mais on peut à la rigueur alimenter Paula directement depuis le processeur, le Copper. le Blitter...).

L'utilisation directe du Copper est très prisée des bidouilleurs dans la mesure où la totalité des circuits spécialisés y compris le Blitter et l'audio peuvent être ainsi commandés, et que de nombreux effets vidéo peuvent être réalisés en perturbant l'affichage. On peut aussi à la limite dessiner sans bitplane en attaquant directement le registre couleur 0 (fond) de Denise, mais une instruction du Copper s'exécute en deux cycles (pairs) ce qui correspond à 8 points en basse résolution. On aura donc 40 "points" de large en 4096 couleurs avec une liste Copper à la place de bitplanes.

Interruption

Nombre de sources d'interruption internes permettent au processeur une exploitation optimale des circuits graphiques : une interruption est déclenchée à chaque fin de trame (Vertical Blank Line) et en fin d'opération Blitter ou audio (pour alimenter avec un nouvel échantillon), mais le système d'exploitation peut gérer l'attente pour un processus d'une position donnée du raster à l'écran. Il va alors modifier la liste Copper courante pour insérer à la position voulue un "Wait" suivi de l'affectation d'un registre de Paula. Cela générera une interruption sur le CIA B, qui déclenchera une routine appropriée. Ce qui permet de faire des animations d'objets ou de tracés sans scintillement et sans double tampon mémoire : puisque l'on sait alors se synchroniser avec le spot lumineux.

C'est utilisé dans quelques jeux et démos, mais il est plus commode de s'en tenir au double tampon mémoire (surtout pour les animations d'images), d'autant plus que c'est pris en charge par le système.

Pour aller plus loin

La complexité de l'architecture de l'Amiga ne doit pas donner l'impression que sa programmation est compliquée ou "bidouillesque" : la gestion du matériel est complètement assurée par une couche logicielle multitâche bas niveau, la graphics.library, elle-même, utilisée à plus haut niveau par l'interface utilisateur Intuition. Il existe même en domaine public des surcouches simplifiant la programmation des objets d'Intuition !

On trouvera toutes les informations complémentaires sur les circuits graphiques de l'Amiga et leur utilisation (directe ou à travers le système d'exploitation) dans "La Bible De l'Amiga" et "Le Livre Du Graphisme" chez Micro Application, qui constituent une sérieuse approche de la machine.


[Retour en haut] / [Retour aux articles]