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: 766
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.732-desktop/c
Page créée en 529 millisecondes et consultée 3215 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.