0c – Comprendre le système d’affichage

Quoi ?

Ce petit article a pour but d’expliquer dans les grandes lignes la manière dont les moniteurs affichent les images envoyées par l’Amiga. Il concerne les Amiga et Moniteurs de type PAL. L’autre norme appelée NTSC ne sera pas étudiée bien que le principe reste le même.

Pour qui ?

Cet article est destiné aux débutants.

Pourquoi ?

A quoi sert cet article me direz-vous ? Et bien, je distingue deux raisons :

La première, est que connaître même de manière générale, la façon dont est affichée une image vous permettra de mieux comprendre comment l’Amiga répartit les temps d’exécution entre les différents composants (microprocesseur 68000, coprocesseurs divers tels affichage, blitter, copper, lutins etc…).

La seconde est que lorsque vous atteindrez un niveau de programmation plus avancé (quelque soit le langage), vous aurez besoin de ces notions pour pouvoir mieux appréhender les problèmes pour rendre un affichage fluide des différents objets à l’écran (dans un jeu, démo ou autre).

Bon, par quoi allons-nous débuter ? Et bien, par le commencement.

Les premiers cinéastes ont remarqué qu’une vitesse de défilement des images de la pellicule entre 10 et 20 images par seconde suffisait à rendre un film tout juste acceptable pour le spectateur.

La norme fut ramenée à peu près 25 images par seconde pour un confort augmenté (moins de scintillement).

Les téléviseurs ont repris ce principe mais en doublant la fréquence d’affichage (on passe de 25 à 50 Hz). Les images sont affichées 50 fois par secondes, une seule image affichée durant 1/50 de seconde est appelée trame.

Une image complète de téléviseur est constituée de 625 lignes horizontales.

Par contre à l’époque, il n’existait pas de solution technique bon marché pour afficher une image avec autant de lignes à une fréquence si élevée. La bande passante est explosée. Les techniciens ont proposé une solution simple : Couper la poire en deux.

Concrètement, cela consiste à diviser verticalement l’image en deux. On affiche une ligne sur deux de la même image à la suite. Le premier passage affiche les lignes impaires et le second les paires. Les deux demi-images sont affichées suffisamment rapidement pour que notre cerveau  »fusionne » ces deux demi-images pour n’en faire qu’une.

La fréquence d’affichage réelle d’une image complète est donc de 25Hz et pour celle des lignes verticales (tjrs pour une image complète) on a 25*625 ce qui fait approximativement 15Khz.

Un moniteur CRT ou une vieille télé affiche une image de la sorte. A l’arrière de la télé part un faisceau à électrons qui vient percuter un tube cathodique pour former un point lumineux sur la surface visible de ce tube cathodique.

Le faisceau a électrons balaye toute la surface de gauche à droite et de haut en bas, ligne par ligne jusqu’à arriver en bas. Plus précisément, le faisceau balaye de gauche à droite, une fois arrivé à l’extrémité droite de l’écran, il s’éteint puis revient rapidement à gauche (on appelle ce moment le temps mort horizontal ou horizontal blank) mais en même temps il descend d’une ligne et repart de plus belle, pour finalement arriver en bas à droite de l’écran. Le faisceau s’éteint et remonte dans le coin supérieur gauche (on appelle ce moment le tps mort vertical, ou la fameuse VBL) pour réafficher une nouvelle image. Ainsi de suite, 50 fois par seconde.

Il est à noter, qu’en réalité, il n’y a qu’un seul point qui est constamment affiché sur l’écran (hors temps mort), balayant tout l’écran pour donner l’illusion de l’affichage d’une image.

Vous voulez voir concrètement comment cela se passe ? Allez jeter un œil ou deux à cette vidéo très bien faite (l’auteur est The Slow Mo Guys) :

Revenons à nos moutons. La première image affiche les lignes impaires durant 1/50 de seconde, la seconde moitié affiche la même image mais cette fois-ci les lignes paires durant 1/50 de seconde, ce qui prend donc 1/25 de seconde pour afficher une image complète.

Nota Bene : Si les deux trames sont différentes, on obtient une image plus fine verticalement mais qui scintille fortement, c’est sur ce principe exact qu’est basé le mode graphique entrelacé (interlace).

Demi-image lignes impaires

Demi-image ligne paires

Image complète tel que l’oeil la perçoit

Vous me direz, ça me fait une belle jambe de savoir ça, en quoi cela va m’ aider à atteindre la sagesse qui mène vers la maîtrise de la programmation Amiga ?

Et bien, ce qui est intéressant c’est que l’Amiga se synchronise sur ce système d’affichage. Dans le cas contraire, ce serait un joyeux bordel.

Durant l’affichage d’une ligne, l’Amiga fait beaucoup de choses. Il rafraichit la mémoire chip, affiche une ligne d’un lutin (s’il y en a un qui traverse cette ligne), affiche la ligne de l’écran (ça prend du temps et même bcp), génère du son, le 68000 exécute ses instructions. Entre autre.

L’Amiga divise le temps que le faisceau à électrons met pour afficher une ligne en 225 parties égales. Appelés cycles.

Les cycles impairs sont réservés aux DMA (on expliquera plus en détails ce que sont les DMA dans un article prochain), le 68000 ne peut accéder au BUS que durant les cycles pairs. Pour faire simple, un BUS est une espèce de réseau d’autoroutes qui permet le transport des données entre les différents organes de la machine. Et encore, les cycles pairs peuvent parfois être pris par un DMA, laissant le 68000 attendre encore plus longtemps.

Cette architecture peut paraître restrictive et compliquée (elle divise quand même par deux la vitesse du processeur principal), mais elle est nécessaire car les coprocesseurs ont eux aussi besoin d’accéder au BUS.

Verticalement, c’est aussi intéressant de connaître comment est affichée l’image sur Amiga.

Admettons que vous programmiez un jeu avec des objets graphiques qui bougent à l’écran. Si vous modifiez ces images pendant que le faisceau à électrons passe sur cet objet, vous aurez un effet disgracieux qui se matérialise par une espèce de déchirement de ces dits objets.

Il existe plusieurs méthodes pour palier à ça. La première est de ne redessiner ces objets que durant le temps mort vertical. Faisable mais limité par le nbre d’objets. Car s’il y en a trop, l’Amiga n’aura pas le temps de tous les afficher durant le temps mort vertical.

Deuxième méthode (celle utilisée par le programmeur de Battle Squadron), on attend que le faisceau à électron soit juste en dessous de l’objet et on peut le redessiner à ce moment.

Troisième méthode, on effectue toutes les opérations graphiques dans une zone mémoire tampon en Chip Ram (une sorte de deuxième écran caché), puis on rend visible cette zone mémoire tampon lorsque toutes les opérations sont finies (pour être plus exact, on indique à l’Amiga que désormais cette zone tampon est l’écran visible). Cette troisième méthode est la plus utilisée par les programmeurs ASM.