Programmation Assembleur

Temps d'accès à la VRAM

Cet article a été mis à jour, vous consultez ici une archive de cet article!

Problématique



Le processeur graphique du MSX (appelé VDP) fonctionne de façon autonome du processeur central (CPU), le Z80.

Le CPU communique avec le VDP à travers des ports d'entrée/sortie (ports I/O).
Ces ports I/O permettent de lire et/ou d'écrire dans les registres qui contrôlent le fonctionnement du VDP (choix du mode graphique, taille des sprites, etc.), mais aussi de lire ou écrire dans la mémoire vidéo (VRAM) du VDP.

La lecture/écriture en VRAM se fait de façon indirect : on configure les registres du VDP (pour indiquer notamment l'adresse à accéder en VRAM), puis on lit/écrit la VRAM à travers les ports I/O.
Le VDP doit traiter ces demandes d'accès de son coté.
Hors, quand il est occupé à afficher une image à l'écran, le VDP peut prendre plus de temps à répondre à ces demandes que de temps qu'il faut au CPU pour les faire.
Il peut donc arriver que le CPU envois des données trop rapidement au VDP et que certaines soient perdu, faute de temps pour les traiter.
Il en résulte un affichage incorrect des données que le programme souhaitait envoyer.
Idem si le CPU essaye de lire trop vite des données en VRAM : Les valeurs récupérées peuvent être incorrectes.

Le temps de traitements des demandes d'accès à la VRAM dépend de certains paramètres :
- La génération du VDP,
- Le mode écran (screen mode) actuel,
- L'activité du VDP au moment de la demande.

Génération et mode écran


Durant la période commerciale du MSX, 3 générations de VDP ont été utilisés :
- Texas Instrument TMS9918 (MSX1),
- Yamaha V9938 (MSX2),
- Yamaha V9958 (MSX2+ et turbo R).

Globalement, le V9938 est plus rapide que le TMS9918... a une exception près.
Voici les temps d'accès minimal au VDP exprimé en nombre de cycles du CPU en fonction des modes écrans.
Screen mode VDP mode MSX1 cycles MSX2/2+ cycles
0,W40 T1 12 20
0,W80 T2 -- 20
1 G1 29 15
2 G2 29 15
3 MC 13 15
4 G3 -- 15
5 G4 -- 15
6 G5 -- 15
7 G3 -- 15
8 G7 -- 15


Activité du VDP



L'activité du VDP au moment de la demande à un gros impact sur son temps de réaction.
Par exemple, lorsque le VDP est en train de "dessiner" les bordures, son temps de réaction est plus grand que le temps minimum nécessaire pour le CPU pour faire une demande d'accès à la VRAM.
Ainsi, dans certains cas, il n'y a aucun contrainte de temps d'accès à la VRAM :
- Quand le VDP est dans le H-Blank (bordure droite/gauche), ou le V-Blank (bordure bas/haut). Note : Le V-Blank étant relativement long, il est possible d'utiliser ce temps pour lire/écrire des données en VRAM a une vitesse maximale.
- Quand l'affichage est désactiver. Note : On peut utiliser un écran noir (affichage désactivé) pour charger plus rapidement un niveau par ex.

L'activation ou non des sprites a un impact sur la réactivité du VDP, mais l'impact exacte sur les temps d'accès n'est pas connu.