La mémoire vidéo du VG5000

Révision du 16/06/2019



Cet article ne contient pas d'informations inédites sur ce sujet, mais essaie de recenser tout ce qui peut vous être utile si vous voulez utiliser le buffer vidéo du VG5000 pour programmer. Si vous n'avez aucune idée des capacités graphiques du VG5000 avec le Basic, cela peut aussi vous intéresser.

Caractéristiques de base de l'affichage

L'affichage du VG5000 a les caractéristiques suivantes :

- Mode caractères de 40x25 caractères.
- Chaque caractère se compose de 8 pixels en largeur sur 10 pixels en hauteur.
- Chaque caractère est codé sur deux octets.
- La résolution de l'affichage est de 8*40*10*25, soit 80 000 pixels, ce qui est intéressant pour une machine d'initiation de cette époque.

- huit couleurs sont disponibles, numérotées entre 0 et 7.
- en mode texte (commandes TX ou ET), vous ne pouvez modifier que la couleur du texte. Pour utiliser une couleur de fond autre que celle définie avec la commande INIT, il faut passer par la contraignante instruction DELIM.
- en mode graphique (commandes GR ou EG), vous pouvez modifier les couleurs du caractère et du fond.

- un caractère affiché peut-être un caractère TEXTE ou GRAPHIQUE.
- quatre polices différentes sont utilisables sous Basic par le VG5000.
- chaque police se compose de 96 caractères numérotés entre 32 et 127.
- l'utilisateur peut modifier les caractères d'une police TEXTE et d'une police GRAPHIQUE avec les commandes BASIC SETET et SETEG. Les deux autres polices sont figées.

- La mémoire vidéo occupe 40*25*2, soit 2000 octets. Elle est stockée dans la mémoire centrale du VG5000 dans la zone &"4000"-&"47CF."

Cette mémoire n'est qu'un buffer périodiquement envoyé au contrôleur graphique Thomson EF9345 par le VG5000. Ce processeur dispose d'une RAM dédiée de 8ko, non accessible directement par le Basic, servant entre autres choses au stockage des polices redéfinies par l'utilisateur.

Le système du VG5000 n'utilise qu'une partie des possibilités de l'EF9345. Il est possible d'activer d'autres modes graphiques (et même un mode 80 colonnes) moyennant une programmation directe en langage machine de cette puce. Ceci est hélas complexe et hors du propos de ce petit article.

Au final, cela nous donne un affichage vidéo assez particulier et aux contraintes fortes. Néamoins, le VG5000 par rapport à d'autres ordinateurs d'initiation a un avantage, la possibilité de redéfinir des caractères. Cela semble surprenant, mais pas mal de ses concurrents ne peuvent pas le faire sous Basic (Matra Alice, V-tech Laser 310, Oric).


Codage d'un caractère dans le buffer vidéo

Préparez l'aspirine ! Cette organisation complexe est malheureusement différente de celle utilisée pour programmer directement le contrôleur vidéo EF 9345. Je vous rassure, ce dernier n'est pas plus simple à dompter :-). L codage des caractères, attributs et couleurs tient sur trois octets sur l'EF9345 au lieu de deux sur le buffer mémoire du système). On retrouve néanmoins quelques similarités si ça peut vous consoler.

Voyons donc quelle est la logique de codage de la mémoire "système" par le VG5000.

1er octet : bits 0 à 6 (soit de 0 à 127) : caractère ASCII à afficher. Le bit 7 sert à sélectionner les tables de caractères redéfinis (1) ou fixes (0).

2ème octet : sélection mode texte/graphique et choix des couleurs

Signification des bits du deuxième octet

2 1 0 : sélection de la couleur du texte
=================
0 0 0 = noir (0)
0 0 X = rouge (1)
0 X 0 = vert (2)
0 X X = jaune (3)
X 0 0 = bleu (4)
X 0 X = magenta (5)
X X 0 = cyan (6)
X X X = blanc (7)

3 : mode clignotant actif (1) / inactif (0)

4 : mode double hauteur actif (1) / inactif (0)
5 : mode double largeur actif (1) / inactif (0)
6 : mode inversion vidéo actif (1) / inactif (0)
7 : sélection mode graphique (1) / mode texte (0)


Si le mode graphique est activé, les bits 4 à 6 servent à sélectionner l'encre de fond selon le même codage que la couleur du texte.

En mode texte, le VG5000 permet de changer la couleur de fond, ainsi que d'autre petites babioles. Cela correspond à la commande DELIM Basic.

1er octet : &X 1000 0000 soit &80 soit 128
Nous avons vu précédemment que le bit 7 sert aussi à définir l'usage d'une table de caractères redéfinis ou pas. Mais dans ce cas là, les autres bits ne sont pas tous à zéro (caractères entre 32 et 127).

2ème octet : Bits 0,1,2 = couleur du fond de la bordure du DELIM
Bit 3 = soulignement du texte
Bits 4,5,6 = couleur du fond du mode texte
Bit 7 = affichage normal (1), zoom vertical (0)


Quelques comportements intrigants en Basic

- la couleur de fond d'un caractère se "propage" sur sa droite

Ex : INIT:CURSORX1:CURSORY 1:EG 4,3:PRINT " ";

Seule solution pour éviter ce désagrement, afficher à la suite un caractère avec la "bonne" couleur. Un exemple :

10 INIT:CURSORX1:CURSORY 1:EG 4,3:PRINT " ";:EG 0,6:PRINT" ";

On se retrouve alors avec un carré jaune sur la gauche de l'écran suivi d'un carré de la couleur du fond.

On peut mettre à profit cette bizarrerie pour modifier à volonté la couleur de fond d'une ligne texte, chose non prévue dans le Basic. La valeur est à poker sur le deuxième octet correspondant au caractère 0 d'une ligne.

128+0=128 fond noir
128+16=144 fond rouge
128+32=160 fond vert
128+48=176 fond jaune
128+64=192 fond bleu
128+80=208 fond magenta
128+96=224 fond cyan
128+110=240 fond blanc

Exemple : poke 16385,240 donnera un fond blanc sur la première ligne de caractères.

La formule pour déterminer l'adresse du POKE pour une ligne est toute simple : 16385+numéro de ligne*80


- On ne peut pas aller sur la colonne 0 en mode interactif

En mode direct, le mode TEXTE est actif. La première colonne (CURSORX 0) est réservée pour définir la couleur de fond de la ligne, l'équivalent de la commande DELIM Basic. Après un reset du VG5000, on a les octets &H80 &HE6 en &H4000, soit :

1er octet : activation mode DELIM
2ème octet : Affichage normal, fond cyan, délimiteur cyan