Copy Link
Add to Bookmark
Report
Tutorial Assembleur - Chapitre 08
TUTORIAL ASSEMBLEUR - chapitre 8
--------------------------------
La carte vidéo
---------------
Nous avons vu dans le chapitre 7, la présence d'une zone de la mémoire appellée mémoire vidéo.
Il s'agit là seulement de la partie "visible" du processus de génération d'image.
En effet, le point avant d'être affiché sur votre écran doit passer par une série d'étape.
Le périphérique qui s'occupe de tout cela, est la carte vidéo ou carte graphique. Celle-ci
permet de contrôler l'écran, sa résolution, la palette de couleurs, la vitesse de balayage,....
Il convient de faire la distinction entre plusieurs types de cartes :
CGA : 4 couleurs avec 320x200 et noir/blanc avec 640x200... On oublie...
EGA : 16 couleurs avec 640x350 avec d'autres modes. Il reste quelques adeptes de l'EGA
VGA : 256 couleurs avec 320x200 et 16 couleurs en 640x480. Des modes textes et d'autres résolutions
SVGA : 16 millions de couleurs, 1024x768 au maximum
Tout le monde possède du SVGA désormais. Les nouvelles cartes reprennent toujours les
modes des anciennes, on a donc des modes CGA sur une carte SVGA :>
La palette
----------
Une image n'a pas forcément les mêmes types de teintes qu'une autre. C'est un problème
qui n'apparaît qu'avec les modes possédant 256 couleurs et moins.
Il faut donc adapter l'écran à notre image pour éviter d'avoir un résultat décevant.
Il existe plusieurs méthodes qui passent soit par le BIOS ou les registres de la carte vidéo.
On commence avec la plus simple mais la plus lente aussi. On ne peut avec cette méthode
que modifier une couleur entière mais un des ses composantes de facon separee. Le code
vient d'un tutorial de VLA :
MOV AX,CS
MOV ES,AX
MOV DX,offset Palette
MOV AX,1012h
XOR BX,BX
MOV CX,256
INT 10h
Tout d'abord, le MOV AX,CS car ES doit valoir CS. En tout cas, sans les deux premières
lignes, ça plante (bizarre ;)... Ensuite, MOV ES,AX donc ES=CS. Nous nous plaçons dans les
données de la palette avec MOV DX,offset Palette, on aurait pu faire aussi un LEA DX,Palette.
Nous mettons dans AX, les nombres qui nous permettent de choisir l'embranchement 10h et le
sous-embranchement 12h de l'interruption 10h. L'embranchement 10h permet de modifier les
couleurs et le 12h porte la mention "set block of DAC color registers".
Si vous possédez Help-PC de Jurgens, vous n'aurez pas de problèmes à trouver ces différentes
fonctions.
Le XOR BX,BX indique que nous commençons à la couleur 0 et le MOV CX,256 indique l'écriture
de 256 couleurs donc l'ensemble de la palette. On finit avec le INT 10h pour modifier le tout.
La palette doit être donnée en indiquant les 3 composantes rouge, vert et bleu, dans l'ordre.
Il faut trois octets par couleur, ce qui fait 768 octets pour la palette finale.
N'oubliez pas que cette méthode est à utiliser que lorsqu'on affiche une image non animée.
Sa lenteur empêche la possibilité de l'implanter dans des animations.
Nous passons à un stade supérieur. Nous allons directement modifier les registres de la carte
vidéo. (Code venant du Tutorial toujours de VLA) :
MOV AX,CS
MOV DS,AX
MOV AL,0
MOV DX,03C8h
OUT DX,AL
INC DX
MOV SI,offset Palette
MOV CX,256*3
REP OUTSB
Le MOV AL,0 pour dire que la première couleur est 0. Le MOV DX,03C8h donne une indication
pour l'écriture des couleurs dans la DAC. Le OUT est l'instruction qui permet d'envoyer
à l'adresse d'un périphérique (adresse=DX), la valeur de AL. Ensuite, nous faisons un
INC DX qui augmente DX de 1 et le fait passer à la valeur 03c9h qui est l'écriture elle-même. $
Ensuite, SI se place sur la palette. Nous mettons dans CX, 256*3, 768 pour dire qu'il y a
256 couleurs avec 3 composantes. Et enfin, le REP OUTSB qui s'apparente au MOVSB mais avec des
ports de périphériques.
Si l'on veut modifier une couleur, on peut utiliser la méthode qui suit :
MOV DX,03c8h
OUT DX,AL
MOV DX,3c9h
MOV AL,AH
OUT DX,AL
MOV AL,BL
OUT DX,AL
MOV AL,BH
OUT DX,AL
Il faut, avant de lancer cette routine, placer dans AL l'index de la couleur.
Dans AH, la composante rouge. Dans BL, la composante verte et dans BH, la composante bleue.
Comme avant, nous initialisons l'écriture avec le 03c8h. Nous avons dans AL, l'index qui est
envoyé pour dire que c'est cette couleur qui est modifiée. Ensuite, nous avons le 3c9h qui
écrit les composantes (toujours par le biais de AL) grâce aux OUT's. Vous pouvez
dès maintenant modifier la couleur 0 dans un programme, vous verrez le noir se changer
dans la couleur que vous avez choisi.
### Chapitre 8 - dake / c a l o d o x ###
### http://www.space.ch/scene/calodox ###