CODINGAMSLIVE ★ AMSLIVE n°02 - LE BALAYAGE VIDEO ★

AMSLIVE n°02 - Balayage VideoCoding 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,#F5
FRAME IN A,(C)
RRA
JR NC,FRAME

Remarque 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.


Doublement de résolution


Lêmes remarque que pour Reg8=1

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 :

10 INPUT Y:MODE 2
20 FOR X%=1 TO 79
30 CALL &BD19:LOCATE X%,Y:?"A";
40 NEXT

CALL &BD19 (FRAME du 6128) attend que le canon soit au début de la VBL : on a ainsi la même situation à chaque pas de la boucle. Si Y vaut 4 : le canon passe après que l'espace ait ete affiche (donc le A précédant effacé) mais avant que le nouveau A soit affiché. On ne voit rien. Si Y vaut 5 : le canon passe avant que le A ne soit entièrement affiche : on ne voit que le haut. Il existe un vocabulaire assez technique, peu accessible des néophytes, pour décrire ces 2 cas : "Je me mange ce putain de balayage". Si Y vaut 1, 7 ou plus, pas de prob. Pour certaines valeurs : ca clignote. Je vous ai menti en disant que la situation était la même à chaque fois. Ce n'est pas le cas à cause de la variation du temps machine requeri par le System (Speed ink,...).

TRAVAIL PRATIQUE

Tapez sous BASIC :

OUT &BC00,9:OUT &BD00,3:WHILE 1 :CALL &BB06:OUT &BC00,8:OUT &BD00,1:CALL &BB06:OUT &BC00,8:OUT &BD00,0:WEND

Les 2 premiers OUT permettent d'avoir 2 signaux VBL On remarque que le deuxième n'est pas pris en compte par le moniteur car il est déjà calé sur le premier. Vous pouvez tourner donc V-Hold pour pouvoir observer les 2 VBL - là le moniteur n'est calé sur aucune ! Appuyez plusieurs fois sur une touche pour remarquer le décalage d'une demi ligne de la VBL (générée par le CRTC).

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 :

  • Si MA10 ou MAI 1 est nul, le changement portant sur eux n'a pas de répercussion : la même page écran est de nouveau balayée.
  • Si MA10 = MA11 = 1, alors ils passent à 0, et le bit MA 12 est atteint : on change de page écran. Comme MA12 est placé sur A14, cette page se situe &4000 après la précédente (à la retenue près).

Comme illustration, essayez sous BASIC :

OUT &BC00,7:OUT&BD00,0:OUT &BC00,4:OUT &BD00,77:OUT &BC00,6:OUT &BD00,255:OUT &BC00,9:OUT &BD00,1:FOR X=1 TO 3:CALL &BB06:OUT &BC00,12:OUT &BD00,&30+X*4:NEXT

Les OUT avant la boucle permettent de visualiser 4 pages écran.

AMSLIVE n°2

★ ANNÉE: ???
★ AUTEUR: MADRAM

Page précédente : AMSLIVE n°02 - Asm

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » AMSLIVE n°17 - Comment Reagit Tout Crtc
» Coding » AMSLIVE n°04 - Asic - Scrollhard
» Coding » AMSLIVE n°04 - Initiation Au Soundtracker
» Coding » AMSLIVE n°02 - Rasters
» Coding » AMSLIVE n°08 - Z80 : MACHINS, BIDULES, ASTUCES & TRUCS
» Coding » AMSLIVE n°01 - Init
Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 381 millisecondes et consultée 2930 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.