La vidéo du VG5000 :
LE HARDWARE
Au cœur de la machine :
Le VG5000 est équipé d'un processeur vidéo
SGS-Thomson EF9345 et de 8 ko de RAM SRAM D4168C (200ns)
Le 9345 est un microprocesseur semi-graphique et controlleur d'écran.
Il est optimisé pour l'affichage sur télévison nb ou couleur
(64ms par ligne), utilisable en 50 ou 60Hz.
L'interfaçage entre le processeur vidéo EF9343 et la RAM
à noter que ce type d'interfaçage permettrait de
changer la ram 8Ko par une 16Ko car l'adressage se fait via multiplexage.
Le brochage du 9345
1-Masse électrique |
20-+5V alimentation |
2-Lecture dans la RAM |
21-Bit de donnée 3 |
3-Ecriture dans la RAM |
22-Bit de donnée 4 |
4- Présence d'une donnée ou d'une adresse
sur le bus ADM0-ADM7 |
23-Bit de donnée 5 |
5-Sortie de synchro trame du TV |
24-Bit de donnée 6 |
6-Sortie de synchro ligne du TV |
25-Bit de donnée 7 |
7-Sortie bleu |
26-Validation du circuit |
8-Sortie vert |
27-Bit 13 |
9-Sortie rouge |
28-Bit 12 |
10-Sortie d'incrustation |
29-Bit 11 |
11-Entrée d'horloge 12 mhz |
30-Bit 10 |
12-Sortie d'horloge 4 mhz |
31-Bit 9 |
13-Entrée de synchro |
32-Bit 8 |
14-Indication d'adresse sur le bus de donnée |
33-Bit 7 |
15-Indication de sortie d'une donnée |
34-Bit 6 |
16-Indication d'entrée d'une donnée |
35-Bit 5 |
17-Bit de donnée 0 |
36-Bit 4 |
18-Bit de donnée 1 |
37-Bit 3 |
19-Bit de donnée 2 |
38-Bit 2 |
|
39-Bit 1 |
|
40-Bit 0 |
en rouge: Bus d'adresses poids fort
en bleu: Bus d'adresses poids faible multiplexé
avec le bus de données du Z80
La connectique :
Brochage du connecteur vidéo DIN du VG5000
N° de broche |
Description |
1 |
Commande rapide |
2 |
Masse |
3 |
Bleu |
4 |
Sync |
5 |
Rouge |
6 |
Commande lente |
7 |
BF |
8 |
Vert |
Brochage du connecteur vidéo SCART
N° de broche |
Description |
1 |
Sortie audio droite |
2 |
Entrée audio droite |
3 |
Sortie audio gauche |
4 |
Masse commune audio |
5 |
Masse "bleu" |
6 |
Entrée audio gauche |
7 |
Entrée composante "bleu" |
8 |
Entrée commutation lente |
9 |
Masse "vert" |
10 |
Horloge |
11 |
Entrée composante "vert" |
12 |
Commande à distance |
13 |
Masse "rouge" |
14 |
Masse commande à distance |
15 |
Entrée composante "rouge" |
16 |
Entrée commutation rapide |
17 |
Masse vidéo |
18 |
Masse commutation rapide |
19 |
Sortie vidéo |
20 |
Entrée vidéo |
21 |
Blindage de la fiche |
Comment faire son cable vidéo :
VG5000 |
|
SCART TV |
7 |
BF |
|
2 |
Entrée Audio Droite |
7 |
BF |
|
6 |
Entrée Audio Gauche |
2 |
Masse |
|
4 |
Masse Audio |
4 |
Sync. |
|
20 |
Entrée Vidéo Composite |
1 |
Commande Rapide |
|
16 |
Commutation rapide |
6 |
Commande Lente |
|
8 |
Commutation lente |
3 |
Bleu |
|
7 |
Entrée Bleu |
8 |
Vert |
|
11 |
Entrée Vert |
5 |
Rouge |
|
15 |
Entrée Rouge |
2 |
Masse |
|
17 |
Masse Commune Vidéo |
Pour ceux qui n'ont pas de télévision avec prise
scart, il existe le VU-0011, convertisseur RVB en UHF Secam.
Il est même possible de connecter son VG5000 sur l'entrée
vidéo d'un carte PCTV via un convertisseur CGV (les screenshots couleurs
ont été faits de cette manière).
LE SOFTWARE
Organisation du processeur vidéo EF9345
Le Z80 et le EF9345 communiquent par l'intermédiaire d'un
bus 8 bits multiplexé et par les ports d'entrées-sorties $8F et
$CF.
Le processeur vidéo possède ses propres registres internes lui
permettant de gérer de façon autonome tous les paramètres
d'affichage.
L'utilisateur peut communiquer avec le EF9345 par l'intermédiaire des
routines du Basic, par l'intermédiaire des routines d'accès direct
(sans passer par le buffer vidéo) ou bien même directement en utilisant
tous les modes disponibles sur ce processeur (le VG 5000 utilise uniquement
le mode 16 bits par caractère).
En BASIC
L'affichage :
L'affichage se fait en 40 colonnes et 25 lignes pour le VG5000
mais il pourrait se faire en 80 colonnes sur 25 lignes via une routine assembleur.
A l'écran s'affichent 40 x 25 soit 1000 caractères
ou 80 000 pixels. En équivalent bitmap cela donne (40 x 8) par (25 x
10), soit 320 x 250.
Les caractères :
- 110 caractères ASCII texte
- 128 caractères graphiques
- 192 caractères utilisateur
En mode 40 colonnes, un caractére fait en honrizontal
8 pixels par 10 pixels en vertical soit 80 pixels par caractére.
La matrice en figure 2, peut servir à determiner la codification
hexadécimal des caractéres.
Exemple : la codification de la 5 ème ligne est égale
à 67 soit 4+2 = 6 et 4+2+1 = 7
En basic, deux commandes existent pour créer des caractéres,
les commandes SETEG et SETET.
Matrice des caractères en mode texte Matrice des caractères en mode graphique Génération des codes SETET ou SETEG Instruction et opérateurs basic
CURSORX A |
Positionne le curseur à l'abscisse spécifiée par
A (colonne). |
CURSORY A |
Positionne le curseur à l'ordonnée spécifiée
par A (ligne). |
DELIM A,B,C |
Met un message en relief en changeant la couleur du délimiteur
(opérande A) et celle du fond (opérande B) et en le soulignant
(opérande C).
Les valeurs des opérandes A et B correspondent au tableau des codes
de couleurs, l'opérande C doit avoir une valeur impaire pour un
souligné et une valeur paire pour un non souligné.
Ex : tapez le programme suivant :
10 INIT 6,6
20 DELIM 1,2,0
30 PRINT "Bonjour à tous";
40 DELIM 3,6,0
Faites "RUN" et vous voyez un carré rouge
suivi de "Bonjour à tous" sur fond vert, suivi d'un carré
jaune.
|
DISPLAY A |
Permet de modifier la vitesse d'affichage des caractères. L'opérande
A doit être compris entre 0 et 255. Le délai d'affichage
entre deux caractères est 20*A en ms.
L'opérande est facultatif et vaut 20 par défaut.
Ex : tapez le programme suivant
10 A$="ESSAI DE LA COMMANDE DISPLAY"
20 FORI=ITOLEN(A$)
30 PRINT MID$(A$,1,1);
40 SOUND 200,1
50 DISPLAY
60 NEXT I
Exécutez le programme, puis supprimez la ligne 50 ; vous apprécierez
alors l'intérêt de DISPLAY. |
EG A,B,C |
Initialise le mode graphique spécial (caractères définis
par l'utilisateur).
L'opérande A correspond à la couleur de l'encre, l'opérande
B à la couleur du fond. Voir le tableau des codes de couleurs.
L'opérande C définit le clignotement (0 = stable, 1 = clignotant).
Ex : tapez le programme suivant
10 CURSORX 10 : CURSORY 10
20 EG 3,4,1
Ce programme définit la ligne 10 à partir de la colonne
10, comme zone graphique clignotante encre jaune, fond bleu. |
ET A,B,C |
Initialise le mode texte spécial.
L'opérande A correspond à la couleur.
L'opérande B correspond à l'attribut des caractères
(voir attribut des caractéres), l'opérande C au clignotement
(0 = stable, 1 = clignotant) |
GR A,B,C |
Initialise le mode graphique normal.
Les opérandes A, B, C sont les mêmes que pour EG. |
INIT A,B |
Efface l'écran et change la couleur (l'encre opérande A)
et du fond (opérande B).
|
LPOS (A) |
Donne l'abscisse (colonne) du dernier caractère Imprimé
(sur l'imprimante). |
LPRINT |
Permet l'impression d'une variable ou d'une chaîne 1e caractères
sur l'imprimante. |
PAGE |
Permet de geler le scrolling de l'écran. |
POS (A) |
Donne l'abscisse (colonne) du dernier caractère affiché
à l'écran. |
PRINT |
Permet l'impression d'une variable ou d'une chaîne de caractères
à l'écran. |
SCREEN |
Permet d'afficher à l'écran une image qui a été
réalisée après une commande STORE. |
SCROLL |
Permet le scrolling de l'écran après que celui-ci ait été
gelé par la commande PAGE. |
SETEG A,"BBCCDDEEFFGGHHIIKK" |
Permet de définir un caractère graphique spécial.
L'opérande A définit le caractère (code compris entre
32 et 127), tandis que l'opérande entre guillemets définit
la nouvelle matrice du caractère, chaque ligne étant représentée
par une valeur hexadécimale, soit deux caractères.
Ex : matrice du caractère A
00000000 soit 00 en hexadécimal
00111000 soit 38 en hexadécimal
01000100 soit 44 en hexadécimal
01000100 soit 44 en hexadécimal
01000100 soit 44 en hexadécimal
01111100 soit 7C en hexadécimal
01000100 soit 44 en hexadécimal
01000100 soit 44 en hexadécimal
00000000 soit 00 en hexadécimal
00000000 soit 00 en hexadécimal
On peut donc redéfinir le A par
SETEG 65, "00384444447C44440000". |
SETET A,"BBCCDDEEFFGGHHIIJJKK" |
Commande identique à SETEG, mais elle permet de définir
un caractère de texte spécial. |
SPC (A) |
Affiche A espace(s) à la position courante du curseur. L'opérande
A doit être compris entre 0 et 255. |
STORE |
Permet de concevoir une image sans que celle-ci n'apparaisse à
l'écran lors de sa fabrication. On évite ainsi la désagréable
apparition de motifs successifs.
Pour faire afficher l'image ainsi conçue, on utilise SCREEN.
Nota : DISPLAY, END, STOP, un scrolling d'écran, une erreur, font
aussi apparaître l'image.
Ex : reprenez le programme donné pour DISPLAY en supprimant la
ligne 50 et en rajoutant les lignes
50 STORE
70 SCREEN
Remarque : la ligne 70 est facultative puisque le
programme s'achève derrière (=END). Elle a uniquement un
but pédagogique. |
TAB (A) |
Permet d'effectuer des tabulations aussi bien sur l'écran que sur
l'imprimante. L'opérande A doit être compris entre 1 et 39. |
TX A,B,C |
Initialise le mode texte normal. Les opérandes A, B, C sont les
mêmes que pour ET. |
CSAVES "xxxx" |
Sauve l'écran sur la cassette |
Les codes couleurs :
0
noir |
1 rouge |
2 vert |
3 jaune |
4
bleu |
5 violet |
6 cyan |
7 blanc |
|
|
Attributs des caractères :
0 |
normal |
1 |
double hauteur |
2 |
double largeur |
3 |
double hauteur et double largeur |
4 |
inversion vidéo |
5 |
inversion vidéo et double hauteur |
6 |
inversion vidéo et double largeur |
7 |
inversion vidéo, double hauteur et double largeur |
Quelques exemples :
TX 0,0 |
TX0,2 |
TX0,1 |
TX0,3 |
TX0,5 |
Voici quelques actuces accessibles depuis le basic via la commande poke :
PASSER EN MINUSCULES/MAJUSCULES PAR PROGRAMME
Majuscules : POKE &"47FE",1
Minuscules : POKE &"47FE",O
CHANGER LA COULEUR DU BORD ET L'ASPECT DU CURSEUR
C'est l'octet $47FD qui gère ces deux fonctions : le quartet
de poids faible correspond à la couleur, le quartet de poids fort à
l'aspect du curseur.
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
inutilisé |
inutilisé |
clignotement |
forme |
couleur |
couleur |
couleur |
couleur |
Si le bit 4 est à 0, le curseur est un pavé.
Si le bit 4 est à 1, le curseur est un trait.
Si le bit 5 est à 0, le curseur est fixe.
Si le bit 5 est à 1, le curseur est clignotant.
Ceci revient à choisir le code de la couleur et à ajouter 16 si
l'on veut un trait comme curseur, et/ou ajouter 32 si l'on veut qu'il clignote.
Exemples :
Couleur rouge, pavé clignotant |
=> 1+32 = 33 |
donc POKE &"47FD",33 |
Couleur verte, trait fixe |
=> 2 + 16 = 18 |
donc POKE &"47FD",18 |
Couleur jaune, pavé fixe |
=> 3 |
donc POKE &"47FD",3 |
Couleur bleu, trait clignotant |
=> 4 + 16 + 32 = 52 |
donc POKE &"47FD",52 |
RESTAURER LA POSITION COURANTE DU CURSEUR
Si, pour une raison quelconque, vous désirez restaurer la
position courante du curseur après une erreur, rien de plus simple :
POKE &"47FD,PEEK(&"47FD") AND 191 : POKE &"4871",
PEEK(&"4871") AND 64
LANGAGE MACHINE
Adresses système
la mémoire écran : $4000 à $4700 soit la
zone de 16384 à 18384
Les Variables écran :
47FA |
Compteur d'interruption pour le rafraichissement de l'écran |
47FB |
Drapeau indiquant si l'écran a besoin d'être rafraichi. |
47FC |
Valeur de référence pour le compteur d'interruptions. |
47FD |
Couleur du pourtour et aspect du curseur |
47FE |
Bascule majuscule / minuscule |
4802 |
Attribut de couleur d'encre pour le prochain caractère à
afficher :
Bits 0 à 2 |
couleur d'encre |
Bit 3 |
clignotement |
Bit 4 |
double largeur (texte) |
Bit 5 |
double hauteur (texte) |
Bits 4 à 6 |
couleur de fond (graphique) |
Bit 7 |
0 = texte / 1 = graphique |
|
4803 |
Attribut de couleur utilisé par init :
Bits 0 à 2 |
encre de la colonne 0 |
Bit 3 |
= 0 |
Bits 4 à 6 |
couleur de fond |
Bit 7 |
= 1 |
|
4804 |
Drapeau de redéfinition de caractéres :
Bits 0 à 6 |
= 0 |
Bit 7 |
0 = normal / 1 = redéfini |
|
4805 |
Abscisse du curseur (colonne) |
4806 |
Ordonnée du curseur (ligne) |
Les routines de gestion d'affichage :
$0092 |
Envoie un caractère de 16 bits à l'écran directement
sans passer par le buffer vidéo géré par le Z80. La
position du caractère est donnée par HL, H représentant
l'ordonnée (ligne) 0 - ligne 0, 8-31 - lignes 1-24, et L représentant
l'abscisse (colonne) 0-39 - colonnes 0-39.
D doit contenir le code du caractère et E son attribut. Les registres
BC et AF sont altérés. |
$0095 |
Envoie un caractère de 16 bits à l'écran directement
sans passer par le buffer vidéo géré par le Z80. L'affichage
se fait à la position courante du curseur. D doit contenir le code
du caractère, et E son attribut. Les registres BC et AF sont altérés. |
$0098 |
Permet de lire un caractère de 16 bits directement depuis la mémoire
écran à la position définie par HL (codage identique
à $0092). Le code du caractère revient dans D, tandis que
son attribut revient dans E. Les registres AF, BC et DE sont altérés. |
$009B |
Permet de lire un caractère de 16 bits directement depuis la mémoire
écran à la position courante du curseur. Le code du caractère
revient dans D, tandis que son attribut revient dans E.
Les registres AF, BC et DE sont altérés. |
$009E |
Efface l'écran et réinitialise la couleur du fond définie
par $4803, et de l'encre définie par $4802.Tous les registres sont
altérés. |
$00A1 |
Efface une ligne et réinitialise les couleurs de fond et d'encre
(idem $009E). A doit contenir le numéro de la ligne à effacer.
Tous les registres sont altérés. |
$00A4 |
Interrompt le déroulement d'un programme jusqu'à ce que
le circuit vidéo soit disponible pour un transfert de données.
Le registre AF est altéré. |
$00A7 |
Calcule l'adresse physique d'une position d'écran par rapport à
son abscisse et son ordonnée. H doit contenir l'ordonnée et
L l'abscisse. L'adresse calculée revient dans HL. Tous les registres
sont altérés. |
$00AD |
Charge les registres du processeur vidéo EF9345 dans une table
pointée par HL. Le premier octet de la table sera le nombre de données
dans la table. Les registres seront codés sur deux octets, le premier
octet étant l'adresse de selection du registre, et le secon le contenu
du registre. Les registres AF, BC et HL sont altérés. |
Les Applications du commerce :
Salut L'artiste de Nice Ideas, ce logiciel permet de
faire des dessins en 320x250 en 8 couleurs. L'utilisation est moins aisée
qu'un logiciel travaillant directement en bitmap mais les résultats reste
quand même d'un bon niveau.
Les Jeux :
voici quelques captures d'écrans de jeux :
|