TUTORIAL ASSEMBLEUR - chapitre 8

La carte vido
---------------

Nous avons vu dans le chapitre 7, la prsence d'une zone de la mmoire appelle mmoire vido.
Il s'agit l seulement de la partie "visible" du processus de gnration d'image. 
En effet, le point avant d'tre affich sur votre cran doit passer par une srie d'tape. 
Le priphrique qui s'occupe de tout cela, est la carte vido ou carte graphique. Celle-ci 
permet de contrler l'cran, sa rsolution, 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 rsolutions
SVGA : 16 millions de couleurs, 1024x768 au maximum

Tout le monde possde du SVGA dsormais. 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 forcment les mmes types de teintes qu'une autre. C'est un problme
qui n'apparat qu'avec les modes possdant 256 couleurs et moins.
Il faut donc adapter l'cran  notre image pour viter d'avoir un rsultat dcevant. 
Il existe plusieurs mthodes qui passent soit par le BIOS ou les registres de la carte vido.
On commence avec la plus simple mais la plus lente aussi. On ne peut avec cette mthode 
que modifier une couleur entire 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 premires 
lignes, a plante (bizarre ;)... Ensuite, MOV ES,AX donc ES=CS. Nous nous plaons dans les 
donnes 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 possdez Help-PC de Jurgens, vous n'aurez pas de problmes  trouver ces diffrentes 
fonctions.

Le XOR BX,BX indique que nous commenons  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 donne 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 mthode est  utiliser que lorsqu'on affiche une image non anime. 
Sa lenteur empche la possibilit de l'implanter dans des animations.
Nous passons  un stade suprieur. Nous allons directement modifier les registres de la carte 
vido. (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 premire 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 priphrique (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-mme. $
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 priphriques.

Si l'on veut modifier une couleur, on peut utiliser la mthode 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 modifie. Ensuite, nous avons le 3c9h qui 
crit les composantes (toujours par le biais de AL) grce aux OUT's. Vous pouvez
ds 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 ###
   
