Avant de commencer l'initiation proprement dite, il est intéressant de savoir ce qui fait tout l'intérêt d'apprendre un langage comme l'assembleur, et ce qu'il est nécessaire de connaître un minimum avant de se lancer dans le grand bain !
Comme vous le savez sans doute, l'intérieur de votre MSX est composé de plein de choses qui sont sensées communiquer entre elles. Je vais vous faire ici une petite liste de ce qui va nous intéresser par la suite :
- un micro-processeur
Z80A et sa mémoire dédiée (
RAM) et (
ROM) (il y a aussi un R800 sur les Turbo-R, mais c'est une autre histoire que nous n'aborderons pas ici, du moins pas dans un premier temps !
)
- un processeur graphique, que nous appellerons
VDP, et sa mémoire vive dédiée (
VRAM)
- un processeur sonore, désigné par
PSG (rien à voir avec le foot hein...
)
- un circuit d'interface (lui c'est le
PPI)
Tous ces composants interagissent entre eux, tel un ensemble de musiciens jouant ensemble un morceau de musique. Ici, le Z80 a le rôle du chef d'orchestre. C'est lui qui va tout piloter. Le but de l'assembleur, c'est de parler directement au Z80. Votre code sera la partition que fera jouer le chef d'orchestre !
Vous me direz que vous pouvez parler au Z80 avec le MSX-Basic. Certes, mais le résultat sera nettement moins rapide.
Pour simplifier les choses, le Z80 ne connaît qu'une langue : le langage machine. Il ne comprend que les chiffres binaires, des suites de 0 et de 1 (que l'on écrit souvent en hexadécimal dans les programmes pour simplifier). Quand vous lui parlez en MSX-Basic, il a besoin d'un interprète ! Et le temps que votre programme soit interprété et traduit en langage machine à ce bon vieux Z80, il y a pas mal de temps qui s'écoule... Le problème du MSX-Basic est donc que la traduction se fait en direct, ce qui induit beaucoup plus de lenteur.
L'assembleur quant à lui est un langage à compiler ! La traduction du programme se fait une seule fois, ce qui veut dire qu'une fois celle-ci effectuée, vous parlerez directement, sans interprète au Z80. Le gain de rapidité est juste... énorme !!
Avant d'entrer dans le vif du sujet, il va être nécessaire de se pencher un peu sur ce bon vieux Z80. En effet, il est indispensable d'en savoir un minimum sur sa structure proprement dite... et sur ce qu'il sait faire.
Et vous vous rendrez compte que finalement... Ben il ne sait pas faire grand-chose !!
Son boulot, c'est de travailler sur des bits, regroupés en octets (si ça ne vous parle pas, je vous invite à lire le
cours sur le binaire). Ce qu'il va faire avec ces octets, c'est s'en servir pour adresser des cases mémoire (Aïe, ça parle un peu en chinois là...
j'y reviendrai plus tard), définir des numéros de port (euh... pareil qu'avant
), faire des calculs élémentaires (addition, soustraction, opérations logiques) et envoyer des données.
Bon alors, l'adressage de cases mémoire : comme vous le savez (ou pas), le MSX a de la mémoire. Celle-ci peut être représentée sous forme d'une looooongue pile de cases, chacune d'elle ne pouvant contenir qu'un et un seul octet. C'est pour ça d'ailleurs qu'on chiffre les mémoires en X-octets (remplacez X par ce que vous voulez, Kilo, Mega, Giga, Tera).