CODINGAMSLIVE ★ AMSLIVE n°20 - CRTC BIEN DIGÉRÉ ★

AMSLIVE n°20 - CRTC bien DigérerCoding Amslive
Amis lecteurs, vous ne me voyez pas, mais nous allons apprendre aujourd'hui ou demain comment passer d'une position d'écran à une autre de façon propre.

Par propre, j'entends « sans décrochage de synchro et rétablissement laborieux de l'image que cela implique ». Par la fenêtre J'entends la complainte des canards.

Pour avoir une idée précise du problème incriminé, remémorez-vous Not Dead Démo d'Arkos, ou encore GPÀ 2K2 : chaque nouvel écran apparaît en défilant (ou « tournoyant », selon une terminologie obsolète) à une vitesse dépendant du réglage V-Hold du moniteur (*).

HISSEZ HAUT

Supposons que nous voulions élever l'écran de 6 lignes de caractères. C'est un bon chiffre. Le premier réflexe est de charger le registre 7 à 36, puisqu'il vaut 30 par défaut. « Retarder la synchro de 6 lignes revient à hisser l'écran d'autant », se dit in petto le fougueux bidouilleur (quand bien même les manuels de bienséance le déconseillent).

Cela est vrai, dans la mesure où le moniteur se cale sur ladite synchro.

Mais, il faut bien comprendre qu'au moment du changement, le signal de synchro est envoyé 6 lignes plus bas que d'habitude, c'est-à-dire en plein balayage écran. Ceci explique qu'on entrevoit alors la bande noire (VBL) caractéristique.
Une parade fut élaborée par les esprits les plus vils : placer toutes les encres à 0 afin de rendre la VBL indiscernable ; en termes imagés, cacher la merde au chat.

Outre la contrainte que cette solution impose, cela ne résout aucun des points suivants :

(*) Vous pardonnerez au passage cet anglicisme, mais parler d'écran ici aussi aurait semé la confusion, y compris chez les esprits les plus vaillants.

- le repositionnement de l'écran peut s'avérer fort lent (je le répète, cela dépend du réglage V-Hold).
— les enfants continueront de vous jeter des pierres dans la rue.

Bref, il ne sert à rien de faire l'autruche pendant un lancer de grenade, surtout si on sort la tête avant qu'elle explose.
Mieux vaut s'en remettre à une méthode raisonnable, qui va se dessiner naturellement en posant de façon claire le but à atteindre.

BASE EN HAUSSE

Remonter l'écran de 6 lignes, cela signifie le faire débuter 6 lignes plus tôt. Un nouvel écran ne commence que quand le précédent est terminé. Il faut donc qu'un écran fasse, le temps de la transition, 6 lignes de moins. CQFD.

Au cas où vous ne l'auriez pas remarqué, je parle d'écrans du point de vue CRTC : la première ligne est celle à laquelle l'affichage commence. Le border supérieur représente la fin de l'écran précédent. NB : au cas où vous l'auriez remarqué, aussi.

Variante :

Dans un magasin de fringues, un vendeur s'approche de deux chouettes nénettes (ce détail ne revêtant aucune importance dans l'histoire) :
— Si vous avez besoin de renseignements, je suis Laurent.
Ce à quoi une des filles répond ;
— Et si on n'en a pas besoin, qui êtes-vous ?
En pratique, voili comment cela peut se dérouler (voir schémas) :

— Attendre V-Sync.
-> on a alors C4 = R7 = 30.

— Charger R4 — Attendre nouvel écran (tempo de 3 lignes -24 * 64 NOPs).
— Replacer R4 à sa valeur normale.
— Charger R7
Une bande verticale suffit pour représenter l'évolution de C4


On dessine en premier lieu les configurations « avant » et « après » pour en déduire l'étape de transition.

On se rend compte que le changement de R7 intervient ici comme compensation : le nouvel écran démarrant 6 lignés plus tôt, on retarde la synchro de 6 lignes, de façon à ce qu'elle se produise au bon moment.

Remarque : on suppose R7=30 par défaut. Évidemment, si un grand malin modifie la configuration du CRTC avant de lancer votre programme, ça ne marchera plus.

Attention ! Beware ! Nota hem et tutti quanti ! De manière générale, quand on entre dans une simple boucle d'attente V-Syne* il §0 possible que la V-Sync ait déjà commencé. Celle-ci pouvant durer jusqu'à 16 lignes, il y a une grande marge d'incertitude. Dans l'exemple présenté, ce n'est pas gênant, mais certains cas demanderont de précéder la boucle par une attente de non-Vsync.

RETOUR A LA NORMALE

À titre d'exercice, établissez la transition inverse (R7 = 36 à R7 = 30). Voici une solution :

— Attendre V-Sync. . R4 — Attendre nouvel écran.
— R4 — R7 Vous noterez une certaine symétrie entre les deux transitions.

À propos, pourquoi nous autres humains, à l'instar de la plupart des animaux, possédons-nous un et un seul plan de symétrie ?

HORIZONTALEMENT

Pour recentrer un écran horizontalement, il faudrait faire le même travail, en jouant avec les registres 0 et 2 cette fois, le temps d'une ligne.
Mais un simple changement du registre 2 en début de VBL sera toléré !

En effet, la re-synchronisation horizontale (base des fameux screen-waggles) se trouvera complètement masquée par la VBL.
Tout cela était finalement fort simple, atteignant à peine 1,5 tasse sur l'échelle cafetière-overlanders.

DE QUOI QUE ÇA CAUSE

Il s'agit de passer sans soubresaut d'un format d'écran à un autre. Typiquement, de l'écran standard à un écran overscan. Ce qui ne semble de prime abord qu'un détail de présentation esquisse un excellent exercice d'exploitation esquises un excellent exercice d'exploitation du CRTC.

NOTATION

R4, R7 = Registre 4 et 7
C4 = Compteur de ligne de caractères. Va de 0 (début de l'écran) à R4 (fin de l'écran).

AMSLIVE n°20

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

Page précédente : AMSLIVE n°19 - Crtc Detection - Retour Au Source

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

Lien(s):
» Coding » AMSLIVE n°04 - Z80
» Coding » AMSLIVE n°20 - les Maître du Temps
» Coding » AMSLIVE n°01 - Init
» Coding » AMSLIVE n°12 - Sons et Samples
» Coding » AMSLIVE n°01 - Z80
» Coding » AMSLIVE n°04 - Asic - Scrollhard
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 293 millisecondes et consultée 2645 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.