Je vais présenter uniquement ce qui est utile pour débuter le programme assembleur.
Le MSX c’est un processeur Z80 (le coeur). Il discute avec 3 organes principaux :
Revenons au Z80, il dispose de 3 sortes de mémoires :
![Stucture du MSX](/tuto asm 01/02/images/strucmsx.png?classes=shadow)
Les mémoires sont des cases. Pour pouvoir les différencier, on leur a donné des numéros que l’on appelle Adresse (comme les numéros des maisons dans une rue).
Appelée mémoire morte. On peut simplement lire cette mémoire.
On ne peut pas la modifier (données constructeur).
Elle contient de petits programmes (routines) bien pratiques que l’on utilisera en assembleur pour lancer des actions ou faire des calculs.
Appelée mémoire vive. Elle est modifiable et c’est celle que nous utiliserons pour programmer. Par contre elle s’efface dès que l’on éteint le MSX. C’est pour cela que l’on sauvegarde nos programmes.
Ce sont des sortes de mémoires. Ils n’ont pas d’adresse mais des lettres. En assembleur, c’est avec eux (une vingtaine environ) que l’on va jouer. On va rappeler des adresses, lire ou écrire dedans et faire des calculs. Et tout ça, c’est avec l’aide de ces registres que l’on va le faire.
![Registres internes du Z80](/tuto asm 01/02/images/regz80.jpg?classes=shadow)
Il existe une page très simple et explicative du fonctionnement de ces registres du Z80 : Wiki Z80
Il est important que l’on parle du VDP pour finir car c’est avec lui que l’on va discuter fréquemment pour afficher nos sprites et les faire bouger. Je passe volontairement sur les autres processeurs (PSG et PPI), on y reviendra au besoin.
Ce processeur permet d’afficher des images, des caractères ou des sprites à l’écran. Il contient 16ko de mémoire, appelée VRAM (dans laquelle on peut lire et écrire) et 9 registres internes (R0 à R7+ 1 registre d’état) qui ne sont pas les mêmes que ceux du Z80. La VRAM est divisée en 5 tables : 3 pour gérer l’affichage des caractères et 2 pour les sprites. Ces tables ne sont rien d’autre qu’un groupe d’adresses pouvant stocker des nombres.
Les 3 tables des caractères:
Le principe de fonctionnement de ces 3 tables est le suivant : on demande au processeur VDP d’afficher un (ou des) caractère(s) en définissant ce que l’on veut afficher, où on veut l’afficher et dans quelle couleur. Et comme on connait maintenant les tables de caractères, on pourra modifier la forme de ces derniers à volonté (par exemple pour dessiner un décor de jeu).
Les 2 tables des sprites:
-TGS (Table Génératrice des Sprites): Stocke les dessins des sprites que l’on va définir.
-TAS (Table des Attributs des Sprites): stocke la position, le numéro et la couleur de chaque sprite.
![Registres internes du Z80](/tuto asm 01/02/images/vdp.png?classes=shadow)
Chacune de ces 5 tables débute par une adresse que l’on doit connaitre pour pouvoir y intégrer une liste d’informations, qui seront stockées à partir de là, vers les adresses suivantes en fonction du nombre d’informations (données) à stocker.
Pour définir automatiquement ces adresses de début en suivant les données constructeur, le VDP utilise 4 modes de fonctionnement :
Le programme assembleur que je veux expliquer utilise le SCREEN 1 donc je ne parlerai que de celui-là pour l’instant.
Le SCREEN 1 sur MSX1 c’est 32 colonnes sur 24 lignes de texte et la possibilité d’utiliser les sprites.
![Registres internes du Z80](/tuto asm 01/02/images/adrscreen1.png?classes=shadow)