★ CODING ★ COURS DE GRAPHISME . LE CRTC ★ |
Graphic - 30 - Etude du Crtc (SOS Programmeurs) |
Sans entrer dans tous les détails de l'électronique , je précise quand même que le CRTC 6845 est le circuit intégré qui gère tous les signaux vidéo nécéssaire à l'écran . La manipulation des ports E/S de ce circuit permet d'obtenir des effets spéciaux assez spectaculaires dont l'overscan ! Pour modifier l'état de ce circuit il faut envoyer 2 commandes :Il y-à 18 registres (de 0 à 17) possibles . Chacun d'entre a un rôle déterminé . La valeur a envoyer ensuite en &BD00 déterminera l'importance de la modification . On peut parfaitement effectuer la plupart des essais sous basic comme en témoigne le programme CRTC.BAS sur l'autre face . Exemple : Voici d'abord un résumé du roêle des principaux registre . Quelques uns d'entre sont réservés au crayon optique , ce genre d'accessoire n'ayant jamais donné de résultat probant sur le CPC , je n'en parlerai pas . R0: Durée de balayage horizontal y compris le retour de rayon . Avant de détailler tous ces registres , je dois vous signaler une particularité essentielle du CRTC ! Contrairement à ce que l'on pourrait croire , il ne travaille pas en lignes écran et en cases écran mais en lignes caractères (8 lignes écran) et les modifications sur les colonnes portent toujours sur 2 cases mémoire à la fois soit la taille d'un caractère en mode 1 . A l'initialisation du CPC , vu du point de vue du CRTC l'écran mesure 25 lignes sur 40 colonnes ! Note : Certaines modifications de registres ont des effets biens connus (Overscan , scrolling hard , tremblement de l'écran , etc ...) . D'autres peuvent avoir des effets imprévus voire planter le CPC ! Des essais divers effectués au pifomètre peuvent parfois produire des effets spectaculaires . R0: Ce registre conditionne le temps attribué au rayon pour balayer l'écran dans le sens de la largeur . Il faudra parfois jouer sur celui-ci si l'on augmente trop la largeur de l'écran avec R1 pour que le rayon aie le temps de balayer le nombre de colonnes prévues par R1 . Modifier R0 de manière excessive aura des effets parfois surprenants . R1: Nombre de colonnes (40 normalement) d'affichage écran . Vous pouvez pousser jusqu'a 255 colonnes soit 500 cases écran par ligne ce qui fait beaucoup ... Si un changement de ce registre provoque des effets désagréables modifiez R0 dans le même sens (Au pif jusqu'a ce que l'image se stabilise) . R2: La taille de la bordure dépend de la longueur de ce signal de synchronisation horizontale . Si on le réduit , l'affichage RAM écran se produit plus tôt et tout l'écran se décale vers la gauche . Inversement , si on l'augmente on pousse l'écran à droite . Une unité correspond à un décalage de 2 cases écran . On peut donc pousser l'écran vers la gauche de 3 unités équivalent à 6 cases mémoire et augmenter R1 de 6 unités soit 12 cases mémoire . On aura ainsi un écran de 92 cases mémoire (46 caractères CRTC) de large entièrement visible . Toute modification exagérée de R2 entraîne des R3: La modification de ce signal de synchronisation ne semble pas produire d'effets très utilisables , essayez quand même pour voir ... Voilà pour les effets spéciaux dans le sens de la largeur maintenant , debout ! R4: Ce registre conditionne le temps attribué au rayon pour balayer l'écran sur toute la hauteur . Il faudra parfois jouer sur celui-ci si l'on augmente trop la hauteur de l'écran avec R7 pour que le rayon aie le temps de balayer le nombre de lignes prévues par R7 . Modifier R4 de manière excessive aura des effets parfois surprenants . R5: Modifier la fréquence de renouvellement de l'image peut provoquer des tressautements et scrollings verticaux . R6: Nombre de lignes (25 normalement) d'affichage écran . Vous pouvez pousser jusqu'a 255 lignes ...Si un changement de ce registre provoque des effets désagréables modifiez R4 dans le même sens (Au pif jusqu'a ce que l'image se stabilise) . R7: La taille de la bordure dépend de la longueur de ce signal de synchronisation vertical . Si on le réduit , l'affichage RAM écran se produit plus tôt et tout l'écran se décale vers le haut . Inversement , si on l'augmente on pousse l'écran en bas . Une unité correspond à un décalage d'une ligne caractère . On peut donc pousser l'écran vers le haut de 4 lignes et augmenter R6 de 8 unités .On aura ainsi un écran de 33 lignes (264 lignes écran) de haut entièrement visible . Toute modification exagérée de R2 entraîne des effets pernicieux qu'il faudra corriger avec R4 . Deux autres registres peu utilisables sauf pour faire trembler l'écran . R8: Mode de travail du CRTC . C'est lié à la manière donc les connections sont établies dans votre ordinateur et reste en principe à 0 . Toujours en principe , seuls les bits 0 & 1 sont utilisés ... Pourtant si on lui envoie 240 l'écran est totalement occupé par la bordure , comprenne qui pourra ... R9: Contient le nombre de lignes écran occupées par 1 caractère-1 donc 7. Le modifier fragmente l'écran ou le promène dans le sens vertical . Vous avez vu que l'on peut tranquillement modifier la taille de l'écran et sa position de départ . Ce qui est dommage c'est que cet écran ne peut toujours pas dépasser 16K soit 25 lignes de 40 colonnes CRTC (900 positions CRTC) . Si vous activez un écran de 46 colonnes par 33 lignes (1518 positions CTRC) que va t-il se passer ? Des possibilités du CTRC vont déborder : 1518-900 = 618 Positions . Comme en temps normal la dernière ligne écran n'est pas utilisée (16K font en réalité 26 lignes de 80 cases mémoire (26*8*80=16640) nous pourrons accéder à cette 26ème ligne de 40 colonnes CRTC que ne gère pas le basic 618-40=578 Positions inutilisables dans lesquelles le haut de la RAM écran va se répéter à partir de &C000 ! Vous disposez donc d'une surface équivalent à un overscan mais sans pouvoir gérer la totalité de l'écran ! Ne pleurez pas , quand je vous aurai expliqué à quoi servent R12 & R13 .R12: Ce seul registre permet non seulement de mettre la RAM écran dans n'importe lequel des 4 blocs de 16K mais en plus il permet d'adresser 32K pour l'écran au lieu des 16 prévus initialement . Ce sont les bits mis ou pas qui permettent le choix du bloc RAM et de la longueur d'adressage . Les bits 7 & 6 ne sont pas utilisés .R13: Ce registre permet d'affiner le point de départ de la RAM écran . Il décalera l'adresse d'origine des données de 2 cases mémoire (1 colonne CRTC) pour une unité ajoutée . On peut encore repousser le départ d'écran de 255*2=500 octets avec R13 . Par exemple , avec une RAM en #C000 , mettre 4 dans le registre R13 mettra le début d'écran en #C000+2*4 = #C008 . Et l'overscan dans tout ça ? Passez au chapitre suivant .
|