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 ###