INTRODUCTION
La programmation graphique en assembleur ouvre un vaste champ de possibilités pour créer des effets visuels directement en manipulant la mémoire vidéo.
Dans ce chapitre, nous allons :
-
Comprendre la mémoire vidéo (VRAM)
-
Découvrir les modes vidéos du BIOS
-
Apprendre à afficher des pixels et à effacer l’écran
Nous nous limiterons au mode graphique 320x200x256 couleurs (mode 13h) pour rester simples et pédagogiques. Les autres modes (SVGA, Mode-X, TrueColor, etc.) nécessitent des techniques plus avancées.
La mémoire vidéo
La mémoire vidéo, ou VRAM (Video RAM), est un bloc réservé à l’affichage à l’écran :
-
Taille : 64 Ko en mode réel
-
Adresse de base :
0A000h:0000
Pour utiliser la VRAM, il faut initialiser le mode vidéo via l’interruption BIOS INT 10h.
Le mode 13h
-
Résolution : 320 x 200 pixels
-
Couleurs : 256
-
Accès simple : chaque pixel correspond à 1 byte (index de couleur)
Calcul de l’offset d’un pixel
En assembleur, la VRAM est linéaire. L’adresse d’un pixel (X,Y) est donnée par :
offset=(Y∗320)+X\text{offset} = (Y * 320) + X
Exemple : pixel en (12,79)
offset=(79∗320)+12=25292\text{offset} = (79 * 320) + 12 = 25292
Exemple : afficher un pixel jaune
Attendre l’appui d’une touche
Pour ne pas revenir immédiatement au mode texte :
-
XOR AX, AX: plus court queMOV AX,0 -
INT 16h: interruption clavier pour pause -
INT 10havecAX=03h: réinitialise le mode texte
Effacer l’écran
Méthode avec MOV
Pour effacer 64000 bytes (320×200 pixels), on peut utiliser une boucle :
-
ADD DI,2: on écrit 2 bytes à la fois pour accélérer -
La boucle parcourt tous les pixels de l’écran
Méthode optimisée avec STOSB et REP
Pour gagner en taille et en vitesse :
-
STOSBcombiné àREPpermet d’éviter les instructions MOV/ADD répétitives -
Cette technique réduit considérablement la taille du code
-
Utile pour optimisation mémoire ou pour intro 4k
Points clés
-
La VRAM est linéaire, chaque pixel occupe 1 byte dans le mode 13h
-
La position d’un pixel se calcule avec
(Y*320)+X -
MOV ES:[offset], ALpermet de dessiner un pixel -
STOSB/REPaccélère le remplissage de blocs mémoire (ex. effacer l’écran) -
Toujours restaurer le mode texte avant de quitter le programme