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ête.
Voici les temps d'accès minimal au VDP en nombre de cycle 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




Le temps de traitements des demandes d'accès à la VRAM dépend de certains paramètres :
- La génération du VDP
- L'activité du VDP au moment de la demande (s'il dessine une bordure )
- Le mode écran (screen mode) actuel (certain étant plus ou moins couteux, le VDP à plus ou moins de temps pour traiter les demandes d'accès)



En assembleur, il faut donc par exemple utiliser une commande out pour envoyer une donnée au VDP.