CODINGCHRONIQUE A100% DES LOGON SYSTEM ★ L'Overscan Facile ★

Logon System ACPC n°38 - Overscan facileCoding Chronique A100% Des Logon System

Ce terme étrange n'est pas une nouvelle marque de lessive mais plus simplement l'utilisation de la totalité de l'écran pour afficher une image. En effet, il ne vous était peut-être encore pas venu à l'idée d'utiliser les zones bordant votre écran graphique (border) pour y loger des données. Cet article va vous expliquer le plus simplement possible la méthode à employer pour formater vous-même un écran aux dimensions désirées.

Créer des pages graphiques en Overscan c'est donner une tout autre dimension à vos oeuvres, Et si les possesseurs de CPC+ se mettent à les utiliser conjointement avec les nouvelles commandes que nous avons créées pour vous, nous devrions bientôt recevoir de superbes réalisations à la rédaction. 
Mais voyons sans plus attendre la création d'un écran Overscan. Celle-ci se fait en plusieurs étapes.

PLACONS L'ECRAN

Il convient tout d'abord de placer votre écran en haut à gauche. Ceci est fait très simplement grâce aux registres CRTC de positionnement. Respectivement les resgistres 2 et 7 de la bébête. Registre 2 : Position X de l'écran. Registre 7 : Position Y de l'écran. Amusez-vous à modifier les valeurs de ces deux registres pour déplacer votre écran dans tous les sens (la valeur par défaut des ces 2 registres étant Registre 2 = 46 et Registre 7 = 30).

Je rappelle rapidement comment envoyer une valeur sur un registre CRTC (une fois n'est pas coutume, il y a du Basic dans cette rubrique) :

OUT &BC00,numéro de registre

Puis ...

OUT &BD00,valeur

Reprenons, nous voulons positionner notre écran en haut à gauche. Visualisons d'abord le Border en changeant sa couleur grâce à la subtile commande Basic permettant de modifier la couleur de bord d'écran: BORDER 0, et hop!

Modifions ensuite la valeur des registres 2 et 7 du CRT.

Tout d'abord en X:

OUT &BC00,2:0UT &BD00,49

Puis en Y :

OUT &BC00,7:0UT &BD00,36.

Ça y est, j'en étais sûr, le petit blond au fond se marre parce que sur sa télé Schneider Artron coins très carrés, l'écran n'est pas vraiment tout à fait à gauche. Qu'à cela ne tienne, il suffit de mettre la valeur 50 dans le Registre 2. Arrrgghgh !!! Ceci est le cri d'un CRTC... Effectivement, si cette valeur est correcte pour votre CPC, elle ne l'est pas pour tous les CRTC. Nous abordons alors le douloureux problème de la compatibilité vidéo entre les CPC. Sur certains CRTC, placer une valeur supérieure à 49 dans le registre 2 provoque une perte de synchronisation verticale, ce qui est traduit à l'écran par un défilement ininterrompu de l'image. Alors, devrons-nous être toujours limité à 49 pour rester 100 % compatible? 
Non! Et voici la solution au problème.

SOLUTIONNONS 
LE CRTC

Il est possible de mettre une valeur supérieure à 49 dans le registre 2 des CRTC qui ne le supportent pas. Il faudra alors vérifier que la somme des valeurs contenues dans le registre 2 et le registre 3 soit inférieure à celle du registre 0.

Par exemple, notre registre 0 est égal à 63 et nous voulons que notre registre 2 soit à 50. 
Nous allons donc placer le registre 3 à 8, ce qui sera largement suffisant pour remédier au problème de compatibilité. Donc, nous pouvons placer notre écran un peu plus à gauche:

En X :

OUT &BC00,3:0UT &BD00,8 OUT &BC00,2:0UT &BD00,50

Maintenant que notre écran est placé, passons à l'étape suivante.

AGRANDISSONS L'ECRAN

Donc, notre écran est maintenant positionné en haut à gauche. 
Et nous allons l'agrandir grâce aux registres CRTC de taille:

Reg 1 : Taille en X 
Reg 6 : Taille en Y

Commençons par le deuxième registre, qui concerne la taille verticale. Ce registre contient le nombre de lignes caractères affichées verticalement. Habituellement, sa valeur est 25 car vous disposez de 25 lignes de caractères. En changeant sa valeur, vous modifierez donc la taille de l'écran. Pour que l'écran arrive jusqu'en bas : OUT &BC00,6:0UT &BD00,34. Ce qui fait donc 34x8=272 lignes verticales... 
C'est mieux que 200, non ?!?

Ça y est, première réflexion... l'écran se répète !!! C'est-à-dire que ce qui est affiché en haut reprend en bas...

Et pourquoi donc ? Tout simplement parce que la mémoire vidéo du CPC ne fait que 16384 octets, et que nous avons affiché 272 lignes x 80 octets! lignes, ce qui fait 21760 octets. C'est pourquoi le CRTC, lorsqu'il a fini de compter jusqu'a 16384, repart de 0...et l'image recommence...

Fâcheux, non ??? Pas vraiment, parce qu'il existe heureusement une feinte... Les OverscanBits.

En effet, il existe un moyen de dire au CRT: Ne t'arrête pas, Fils, Continue!

Pour faire cela, étudions la structure du registre 12 et 13 du CRTC :

  .------- REG 12 --------.   .------- REG 13 --------. 
  |                       |   |                       | 
   15 14 13 12 11 10 09 08     07 06 05 04 03 02 01 00 
  .--.--.--.--.--.--.--.--.   .--.--.--.--.--.--.--.--. 
  |X |X |  |  |  |  |  |  |   |  |  |  |  |  |  |  |  | 
  '--'--'--'--'--'--'--'--'   '--'--'--'--'--'--'--'--' 
        '--.--'--.--'---------------.-----------------' 
           |     |                  '------> Offset de départ 
           |     |                           vidéoram en words 
           |     |                           (1024 positions) Bits 0..9 
           |     | 
           |     '-------------------------> Vidéo Buffer : taille (1) 
           | 
           '-------------------------------> Vidéo Page (2)

  (1)                      (2) 
  .--.--.--------------.  .--.--.---------------. 
  |11|10| Vidéo Buffer |  |13|12|   Vidéo Page  | 
  |--|--|--------------|  |--|--|---------------| 
  | 0| 0|     16Ko     |  | 0| 0|  0000 - 3FFF  | 
  |--|--|--------------|  |--|--|---------------| 
  | 0| 1|     16Ko     |  | 0| 1|  4000 - 7FFF  | 
  |--|--|--------------|  |--|--|---------------| 
  | 1| 0|     16Ko     |  | 1| 0|  8000 - BFFF  | 
  |--|--|--------------|  |--|--|---------------| 
  | 1| 1|     32Ko     |  | 1| 1|  C000 - FFFF  | 
  '--'--'--------------'  '--'--'---------------'

  .---------------------------------------------. 
  | Description registres 12 et 13 du CRTC 6845 | 
  |                Logon System                 | 
  '---------------------------------------------' 

 

Nous voyons sur le schéma que le registre 12 permet de placer l'écran dans la mémoire du CPC par tranches de 16 Ko et aussi de mettre le compteur vidéo sur 16 Ko ou 32 Ko (précisément ce qui nous intéresse).

En bref, et pour être encore plus clair, quelques exemples:

Ecran en &0000 : OUT &BC00,12:0UT &BD00,&X00000000

Ecran en &4000 : OUT &BC00,12:0UT &BD00,&X00010000

Ecran en &8000 : OUT &BC00,12:0UT &BD00,&X00100000

Ecran en &C000 : OUT &BC00,12:0UT &BD00,&X00110000 (standard du système)

Puis les exemples pour un compteur supérieur à 16 Ko.

Ecran en &0000 : OUT &BC00,12:0UT &BD00,&X00001100

Ecran en &4000 : OUT &BC00,12:0UT &BD00,&X00011100

Ecran en &8000 : OUT &BC00,12:0UT &BD00,&X00101100

Ecran en &C000 : OUT &BC00,12:0UT &BD00,&X00111100 (standard du système)

En bref, pour reprendre l'exemple de tout à l'heure et que l'écran continue, il suffit (l'écran étant en &C000) de placer le reg 12 :

OUT &BC00,12 : OUT &BD00,&X00111100

A partir de ce moment-là, la zone qui apparaissait en modulo disparaît pour faire apparaître une autre zone mémoire...

Notre page se trouvant en &C000, la page qui apparaît est donc en &0000. Du coup, les zones des restarts et du Basic sont visualisées à l'écran.

L'utilisation d'une page Overscan est critique pour la mémoire du CPC puisque deux pages servent à l'affichage, soit 32 Ko. Ce qui représente la moitié de la Ram centrale du CPC.

Il est donc impossible de conserver le système lors de l'affichage d'une page vidéo overscan, car celle-ci doit obligatoirement écraser une page en 8000 ou en 0000, qui sont toutes deux occupées par le système.

C'est pourquoi la manipulation d'une page overscan doit être faite sans le système et donc en Assembleur...

Le problème pouvant se poser en overscan étant le passage d'un écran à l'autre (certaines personnes peuvent avoir du mal à calculer les passages d'une page à l'autre), il est pratique de séparer nettement les deux pages vidéo en fixant une longueur horizontale de 128 octets (donc en plaçant le reg 1 à 64)... Attention toutefois à placer le reg 0 à une valeur supérieure ou égale au reg 1. (Eh oui! Encore une règle) et donc à 64 (sa valeur par défaut étant de 63).Un registre 0 a 64 n'est cependant pas "propre" dans la mesure ou cela représente une période de 65 microsecondes par ligne (ce qui peut ennuyer certains moniteurs, voire les faire siffler ou désynchroniser)

Chaque page vidéo fait alors 128 lignes de haut et il n'y a pas de reste, donc de zone gênante pour les passages d'une page à l'autre... 
Voilà, si l'Overscan vous tient encore tête... vendez votre CPC !

(Mais non Poum, c'était une blague...). Et rendez-vous dans un mois pour une rubrique technique toujours aussi intéressante et avec les Logon System.

NB : la rédaction du magazine tient à décliner toute responsabilité quant aux jeux de mots vaseux errant parfois dans les articles des Logon System.

Au fait ?! Pourquoi un chat complètement maboule pour illustrer les articles des Logon ? Simplement parce que nous essayons de trouver une mascotte aux Logon.

LES LOGON SUR MINITEL

A partir de ce mois de juin, vous pourrez laisser des messages à l'intention des Logon System sur le serveur du magazine :Le 3615 ACPC.Il sera même possible de télécharger très prochainement les meilleures démos du groupe.

Longshot, ACPC n°38, juin 1991, p46-48

★ ANNÉE: 1991
★ AUTEUR: LONGSHOT
★ UPDATED: 10/08/2019

Page précédente : Logon System ACPC n°37 - Histoire de rasters

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 131 millisecondes et consultée 1298 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.