La mémoire vidéo du VG5000

Révision du 16/09/2013



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 la couleur 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.


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

Préparez l'aspirine ! Petite consolation, une fois que vous maîtrisez ces règles, elle sont identiques à celles des données que vous envoyez à la puce vidéo si l'envie vous prend de programmer directement le contrôleur EF 9345.

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 intriguants 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 et plus une bande.

- 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 &"80" &"E6" en &"4000", soit :

1er octet : activation mode DELIM
2ème octet : Affichage normal, fond cyan, delimiteur cyan