★ CODING ★ AMSLIVE ★ AMSLIVE n°02 - LE BALAYAGE VIDEO ★ |
AMSLIVE n°02 - Balayage Video | Coding Amslive |
CANON LE BARBARE Pour repérer le canon à électron, il suffit d'attendre qu'il soit à une position connue : le début de la VBL. Un CALL &BD19 se charge de cette mission en testant le signal VS (Vertical Sync) du CRTC, relié au bit 0 du port B du PPI. Cela peut donner en assembleur : LD B,#F5Remarque la boucle durant 8 µs, on ne saura pas à sa sortie à laquelle des 8 premières us de la VBL on se trouve. On ne pourra donc pas s'en servir pour une synchronisation horizontale, mais ceci n'est pas gênant, on en à même carrément rien à faire. |
|
|
Reg 8 à 3 : Mode "entrelacé et vidéo
Remarque 2 : il faut lancer cette boucle avant le début de la VBL, sinon on ne saura pas à quel moment de la VBL on en est. Remarque 3 : on désigne aussi par VBL, à tort, la durée totale prise par l'affichage de la trame et le retour du canon : une routine dite tournant à 1 VBL dure donc moins de 1/50ème de seconde.
Comme le canon suit une course régulière, à une durée correspond une distance parcourue par ce canon. L'unité de mesure employée sera une simple ligne (aussi appelée ligne raster). Je vous rappelle qu'elle dure 64 us et qu'il y en a 312 durant un balayage complet. Ainsi si votre animation se situe verticalement entre la 100eme et la 150eme ligne à partir de la VBL, et que la routine associée dure 60 lignes, vous pourrez lancer celle-ci entre la 1ère et la 40eme ligne ou à partir de la 151eme.
Exemple :
TRAVAIL PRATIQUE
Tapez sous BASIC :
Mais si la routine dure elle même 312 lignes ou plus, on est obligé de se bouffer le balayage ? Non, grâce à la technique du flipping (appelée double buffering sur la scène PC). Elle consiste à travailler sur 2 espaces mémoire : on modifie l'un pendant que l'autre est affiché. La permutation des pages vidéo sera faite avant l'affichage.
L'écran 1 est fini, mais cela a duré plus de 0,02 s. Le canon a recommencé à balayer l'écran vide. On ne peut permuter les écrans maintenant faute de quoi seule la partie basse de l'écran 1 sérail affichée. Est-on obligé de prendre un 3ème écran pour construire l'écran 2 ? Oui répond OffseT. Non, pas forcément réponds-je à récurer. On peut travailler sur l'écran affiché : sur la partie qui a déjà été balayée. Il faut alors que la routine ne" rattrape" pas le balayage. |
A DRESSER
Le CRTC possède son bus d'adresse lui permettant de balayer la mémoire. On peut changer, sous certaines conditions, la valeur de l'adresse. C'est le rôle des registre 12 et 13, et leur unique rôle : IL N'Y A PAS DE SELECTION DE TAILLE DE PAGE ECRAN, 16 ou 32 ko (appelé sur CPC mode OVERSCAN).
Ah, ça fait du bien de casser des légendes. En fait, le CRTC peut adresser 512 ko, linéairement ou non, grâce à ses 19 bits d'adresse. Ce sont leurs connections (et non-connections !) sur CPC qui ont imposé les caractéristiques d'une page écran.
Ces bits sont divisés en 2 parties MA0 à MA13 (rafraîchissement mémoire) et RA0 à RA4 (Raw Adresses, ou adresses de lignes).
COMPTEURS
Saisissez bien l'idée de compteurs, car le CRTC, ce n'est que ça ! Voici comment évolue l'adresse : l'adresse mémoire (MA) est incrémentée autant de fois que le définit le registre 1. A la ligne suivante, c'est l'adresse de ligne (RA) qui est incrémentée, tant qu'elle ne dépasse pas la valeur fixée par le reg 9. Si c'est ok, MA repart à la même valeur qu'au début de la ligne précédente. Sinon, RA revient à 0, et MA à alors été augmenté de la valeur du reg 1.
Cette technique permet le mode texte : MA pointe sur une adresse de la mémoire vidéo, qui contient le code d'un caractère. Ce code détermine une partie d'adresse d'une ROM (ou RAM, pourquoi pas ?) de caractères ; RA établit l'autre partie de cette adr, celle qui concerne la ligne du chr. Soit n=reg 9+1, remarquez que MA balaye n fois les mêmes adr. En changeant 1 octet, on change à l'affichage les n octets qui composent un chr.
Sur CPC, c'est le mode graphique qui a été choisi. Puisque l'adr mémoire contient aussi des bits RA, à chaque adr CRTC correspond une adr mémoire vidéo différente. Par contre, le principe d'évolution de l'adr reste le même, ce qui perturbe plus d'un débutant.
CORRESPONDANCE
Normal s'il y a adresses, note mon facteur.
Le signal CCLK permet d'optimiser la récupération des octets. Le CRTC est cadencé à 1 MHz. A chaque période, soit toutes les JUS, il met à jour son adr. Mais pour atteindre les résolutions disponibles sur CPC, c'est 2 octets qu'il faut lire en 1 ys. Comme on ne change que le LSB en incrémentant un nombre pair, CCLK permet de gérer ce changement d'adr très rapidement.
Tout ce passe comme si le CRTC travaillait avec des mots : un écran ne peut débuter par une adresse impaire, sa largeur en octets est forcément paire, etc..
Seuls RA0 à RA2 sont connectés, ce qui ne permet que 8 adr de ligne (on parlera de blocs) différentes. Si reg 9 > 7, les mêmes lignes seront réaffichées. Ces bits sont placés à partir de A11, ce qui implique qu'on passe d'un bloc au suivant en ajoutant &800.
MA10 et MA11 ne sont pas reliés. Que se passera-t-il lors d'une incrémentation si MA0 à MA9 sont à 1 (c'est à dire, en considérant la programmation du CRTC par défaut sur CPC, après 1024 * 2 * 8 = 16 ko balayé) ? MA0 à MA9 reviennent à 0, et :
Comme illustration, essayez sous BASIC :
|
Page précédente : AMSLIVE n°02 - Asm |
|