CODINGAMSLIVE ★ AMSLIVE n°17 - COMMENT RÉAGIT TOUT CRTC ★

AMSLIVE n°17 - Comment Reagit Tout CrtcCoding Amslive

Nous voilà réengagés sur la rectiligne route bordée de tulipes naines menant aux arcanes du composant le plus mésestimé du CPC après d'autres.
Je sais de source douteuse que d'aucuns préféreraient disposer d'une bible complète sur le sujet, mais qu'y a-t-il de si gênant à consulter sa collection de fanzines ou à confier à son cerveau le recensement des informations ?
Cet article reprenant les choses à zéro, nul ne s'étonnera d'y trouver des redites. De toute façon, répétitions et répétitions sont les deux mamelles de la pédagogie, tout comme sein gauche et sein droit sont les mamelles de la femelle à deux mamelles. Je vous ai déjà sorti ce genre de propos ? Normal : répétitions et répétitions sont les deux mamelles de la pédagogie.

DE BUT EN BUT (EXISTE AUSSI EN VERSION "LE BUT EN OR")

Les écrits sacrés qui vont suivre vous permettront de :

— réapprendre à compter.
— ne plus maltraiter votre moniteur.
— mettre en place des ruptures du premier coup sans filet.
— assurer la compatibilité CRTC en aveugle.
— progresser dans la joie.

Ces sacrés écrits ne vous permettront pas de :

— briller en société.
— séduire l'élue de votre coeu.
— réduire la misère humaine à peau de chagrin.

SELECTION PRESIDENTIELLE

Le CRTC laisse en pâture aux habiles programmeurs dotés d'au moins trois doigts un ensemble de 18 paramètres appelés registres, énumérés plus loin. D'un point de vue lexical, la confusion éventuelle avec les registres du Z80 se verra évitée par l'exceptionnelle vivacité d'esprit de notre lectorat, trié sur le volet.

Histoire bien connue, la sélection du registre requiert A14, A9 et A8 à 0. En forçant tous les autres bits à 1, on obtient l'adresse BCFF. D'autres valeurs conviennent tout aussi bien, il faut simplement veiller à ne pas adresser des périphériques en sus. Par exemple, changer le poids faible de l'adresse ne craint rien (sauf si A10 = 0, cf AMSLIVE &10), ce qui autorise son chargement avec la donnée à envoyer (LD BC,#BC0C : OUT (C),C équivaut donc à LD BC,#BCFF : LD A,#0C : OUT (C),A - en plus économique). Voici une petite anecdote qui je l'espère illustrera mon propos (mais j'ai un gros doute) : assise à une table (de cuisine), Hortense coupa un morceau de ficelle (de cheval). Conclusion : bien qu'assise, elle créa deux bouts.

Le CRTC décode le numéro de registre sur 5 bits, ce qui implique que la valeur &20 désignera le registre 0, &21 = 1, etc.

DETENTE OPTIMISATION

Forts de ces informations et dans l'optique consciente et avouée d'une dispensabilité naturellement contre-balancée par l'aspect distrayant de l'étude subséquente, voyons dans quelle mesure exploiter le OUT (n),A pour la SÉLECTION d'un registre.
Cette instruction, souvenez-vous, envoie A sur le port An.

. La contrainte A8 et A9 à 0, traduite ici par la mise à 0 des bits 0 et 1 de A, exclut les registres 1,2,3,5,6,7,9...

. A10 importe peu, car il suffit de prendre n=&FF.

. Le fait d'adresser le PPI (port A) ne gêne pas forcément : le port A se trouve éventuellement en entrée, et dans ce cas vos mesquines tentatives d'écriture restent sans effet. Ou alors, le AY est en mode inactif, et il se balance (logique pour un processeur sonore) de vos ridicules affectations.

. Par contre, ne pas impliquer le port imprimante dans votre magouille écoeurante restreint le choix du registre au numéro 16, bien inutile.

En conclusion, sélectionner un registre par ce biais implique un accès au port imprimante. Cette bidouille ne sera par conséquent tolérée qu'en extrême recours, et encore pour la sélection d'un seul et même registre déterminé (sinon l'alternance de valeurs produira un son désagréable sur la soundplayer, ce qui aboutirait fatalement au lynchage du programmeur incriminé).
Mieux vaut s'en passer. Sympa, comme résultat, non ?

REGISTRES

Le paragraphe précédent était destiné aux amateurs de caresses (ceux qui touchent), science humaine que personne ne s'ennuie, même s'il est vrai qu'on ne puisse classer ces informations dans la catégorie des connaissances essentielles à l'exploitation du CRTC.

Retournons donc vers une dissertation plus abordable en capitulant le rôle de chaque registre (il ne saurait s'agir d'une récapitulation puisque le sujet n'a pas encore été abordé dans ce texte) avec en bonus leurs valeurs à l'initialisation du système :
CRTC

R0 = 63 (Total horizontal - 8 bits) représente le nombre total de caractères (affichés ou non, càd border Inclus) moins 1 Ainsi cette valeur détermine la durée d'une ligne élémentaire et par suite la fréquence de rafraîchissement.

R1 = 40 (Affichage horizontai - 8 bits) : nombre de caractères affichés horizontalement, avant d'envoyer le "BORDER'

R2 = 46 (Position de la synchro Horizontale (HS en anglais) - 8 bits» ; tout est dans se nom !
Précisons que le moniteur se calant sur la HS, ce registre contrôle la position horizontale de l'écran.

R3 = &8e (Durées synchro - 4/8 bits) les 4 bits de poids faible déterminent la largeur (toujours en caractères) de la HS (si 0 pas de synchro générée, sauf sur CRTC2, de longueur 16), Sur CRTC 0, 3 et 4 les 4 bits de poids fort déterminent ia hauteur de la VS (synchro verticale), en nombre de lignes (si 0, la synchro dure 16 lignes, longueur par défaut sur les autres CRTC),

R4 = 38 (Total vertical - 7 bits) : représente le nombre total de lignes de caractères moins 1 Avec R5 et R9, influe donc sur la fréquence de rafraîchissement de l'écran (50 ou 60 hz....),

R5 - 0 (Ajustement vertical - 5 bits) nombre de lignes élémentaires supplémentaires, une fois les (R4+1) lignes de caractères balayées.

R6 a 25 (Affichage vertical - 7 bits) : nombre de lignes de caractères affichées verticalement, avant d'envoyer le "BORDER'

R7 = 32 (Position de la VS - 7 bits) homologue vertical du registre 2.

R8 = 0 (Mode vidéo - 2/6 bits) les bits 1 & 0 commutent le mode entrelacé (00 = inactif. 01 = activé pour le balayage physique, 11 = activé pour le balayage physique et le balayage mémoire).
Sur CRTC 0 3 & 4, les bits 5 & 4 jouent eux sur la gestion du Dïsplay Enable (le signale qui active ou non le BORDER), horizontalement décalé d'1 caractère ou 2 ( pour 01 ou 10 respectivement), voire annihilé (11 = uniquement du border). Sur ces mêmes CRTC les bits 7 & 6 font un travail analogue, mais pour le curseur.

R9 = 7 (Numéro maximum de scan-line - 5 bits) nombre de lignes élémentaires (d'une ligne de caractères) moins 1.

R10 = 0 (Début de curseur - 7 bits) les bits 0 à 4 déterminent le numéro de scan-line à laquelle commence le curseur. Les bits 6 & 5 fixent le type d'affichage du curseur (01 = fixe, 01 = inactif 10 = clignotant de période 16 frames, 11 - clignotant sur 32 frames)

R11 = 0 (Fin de curseur - 5 bits? * numéro de ia dernière ligne de curseur.

R12 & R13 = &3000 (Adresse de départ - 6 & 8 bits) les bits 0 à 5 de R12 (poids fort) et R13 forment l'adresse 14 Dits au départ de l'écran (l'offset).

R14 & R15 = &C000 (Adresse du curseur - 6 & 8 bits) sur le même modèle que R12 & R13 les 14 bits représentent l'adresse à laquelle le curseur doit être activé.

R16 & R17 (Adresse crayon optique - 6 & 8 bits) : toujours sur ce modèle, les 14 bits contiennent l'adresse enregistrée lors d'une impulsion sur la broche LPSTB (light pen strobe) du CRTC.

Un schéma bien proportionné resitue les registres les plus importants :

TERMINOLOGUE 2, LE RETOUR

Le CRTC étant prévu pour gérer un mode texte, on se retrouve souvent à raisonner en terme de caractères. Sur CPC, la largeur d'un « caractère CRTC » correspond à une micro-seconde, indépendamment du mode graphique, simplement parce que le composant est cadencé à 1 Mhz.

Pendant cette micro-seconde, le VGA récupère les octets de deux adresses consécutives (paire puis impaire !). Ainsi s'explique l'obligation de travailler par
mots. Si vous souhaitez dès à présent plus de détails, je vous invite à consulter le croustillant AMSTRAD LIVE 2 (et que le cul pèle à toutes les personnes qui déclineront mon invitation, à cheval donné on ne regarde pas la bride).

Quant à la hauteur du caractère, elle est paramétrée par le fameux registre 9. Ainsi une « ligne de caractères » se décompose en R9+1 lignes - qu'on retrouve sous les appellations « ligne élémentaire », raster-line, scan-line, suivant les auteurs, leurs humeurs et leurs états d'ébriété. Il y en a même pour parler de « bloc », en parfaite contradiction avec un des sens de ce mot.

CONTE SUR COMPTEURS

(le genre d'histoire que maman me lisait pour me réveiller)

Vous vous êtes peut-être demandé pourquoi on doit retrancher 1 à certaines valeurs (pour R0, R4, R9). Une telle interrogation dénoterait une saine curiosité ne pouvant que rassurer vos proches.

Chez les ingénieurs, ce problème est connu sous le nom de "Paradoxe du mouton", s'énonçant ainsi : Pourquoi est-ce que le berger travaille, alors que le mouton ?

Plus précisément, cela dépend du rôle de la borne en question. Sans vouloir égratigner le suspens de l'initiation, observons deux cas :

R0 : si un compteur d'âge et de sexe quelconques va de 0 à 63, cela donne bien 64 itérations.

R1 : si le border est enclenché à partir de 40, il y avait affichage de 0 à 39, donc sur 40 caractères !

Pour conclure, j'espère que le développement de certains sujets n'aura pas gommé leur extrême simplicité. Je ne détaille et ne rallonge que pour vous offrir autant de facettes possible d'un même fonctionnement. La prochaine fois, nous détaillerons les registres d'un tout autre point de vue.

J'entends discuter ! Olivier Marchin, vous me ferez 312 lignes !

Yves Saladand , AMSLIVE n°17

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

Page précédente : AMSLIVE n°17 - 3D

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

Lien(s):
» Coding » AMSLIVE n°16 - CRTC Detection
» Coding » AMSLIVE n°18 - Crtc Detection
» Coding » AMSLIVE n°14 - Multiplication Saignee a Mort
» Coding » AMSLIVE n°12 - Sons et Samples
» Coding » AMSLIVE n°01 - Balayage Video
» Coding » AMSLIVE n°06 - Sinus
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 419 millisecondes et consultée 1626 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.