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 :

1 : OUT &BC00 , registre
2 : OUT &BD00 , valeur


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 :

10 OUT &BC00,13:OUT &BD00,4
20 CALL &BB06
30 OUT &BC00,13:OUT &BD00,0

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 .
R1: Nombre de caractères affichables sur une ligne .
R2: Synchronisation de l'affichage horizontal .
R3: Durée du signal de synchronisation .

R4: Durée du balayage vertical y compris le retour de rayon .
R5: Fréquence de renouvellement de l'image .
R6: Nombre de lignes caractères affichables .
R7: Synchronisation de l'affichage vertical .

R8: Mode de fonctionnement du CRTC .
R9: Scanning .

R10: Aspect du curseur (Sans grand intérêt) .
R11: Numéro de ligne ou finit le curseur (Sans intérêt).

R12: Octet fort de l'adresse départ de la RAM écran .
R13: Octet faible de l'adresse départ de la RAM écran .

R14 & R15 : Position du curseur sans intérêt .
R16 & R17 : Crayon optique débilum babus .

---------------------------

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
effets pernicieux qu'il faudra corriger avec R0 .

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
(sauf en cas de scrolling) et il restera :

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 .
Les bits 5 & 4 déterminent l'adresse de départ de la RAM écran comme ceci

7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 = 0 : RAM écran 16K de #0000 à #3FFF
0 0 0 1 0 0 0 0 = 16 : RAM écran 16K de #4000 à #7FFF
0 0 1 0 0 0 0 0 = 32 : RAM écran 16K de #8000 à #BFFF
0 0 1 1 0 0 0 0 = 48 : RAM écran 16K de #C000 à #FFFF

Les bits 3 & 2 mis simultanément adressent 32K de RAM écran .

7 6 5 4 3 2 1 0
0 0 0 0 1 1 0 0 = 12 : RAM écran 32K de #0000 à #7FFF
0 0 0 1 1 1 0 0 = 28 : RAM écran 32K de #4000 à #BFFF
0 0 1 0 1 1 0 0 = 44 : RAM écran 32K de #8000 à #FFFF
0 0 1 1 1 1 0 0 = 60 : RAM écran 32K de #C000 à #3FFF

NOTE : Ces 2 bits doivent être mis simultanément ! Un seul d'entre eux (3 ou 2) mis n'à aucun effet .

Les bits 1 & 0 : Que la peste et la vérole s'abattent sur tous les auteurs ayant traité du CRTC et ayant passé sous silence l'usage de ces 2 bits pourtant fort utiles ! Ils permettent en effet d'avancer le début de la RAM écran de 512 à 1536 octets !

C'est a dire que pour un écran prévu en &C000 les bits 0 & 1 décaleront la 1ère adresse en :

Bits : 1 0

0 1 : Départ en &C0 + &200 (32ème octet de la 6ème ligne caractère)
1 0 : Départ en &C0 + &400 (66ème octet de la 13éme ligne caractère)
1 1 : Départ en &C0 + &600 (16ème octet de la 20éme ligne caractère)


Ces 3 décalages (#200,#400,#600) seront les mêmes quelque soit l'adresse
de départ envisagée (#0000,#4000,#8000,#C000) et le mode d'adressage 16K ou
32K .


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 .

SOS PROGRAMMEURS

★ ANNÉE: ???
★ AUTEUR: MICHEL MAIGROT

Page précédente : Graphic - 22 - Amelirer le Programme
★ AMSTRAD CPC ★ DOWNLOAD ★

Other platform tool:
» SOS7OVERSCANDATE: 2011-06-03
DL: 547
TYPE: ZIP
SiZE: 14Ko
NOTE: 40 Cyls
.HFE: Χ

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

Lien(s):
» Coding » Graphic - 40 - Overscan (SOS Programmeurs)
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» 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 346 millisecondes et consultée 2633 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.