Gestion de la palette graphique et affichage de toutes les couleurs de la palette , centré et classé par couleurs en mode 13

Soyez le premier à donner votre avis sur cette source.

Vue 5 368 fois - Téléchargée 449 fois

Description

Cette source gerent les 256 couleurs de la palette graphique en mode 13h, cree 64 tons de rouge , 64 tons de vert, 64 tons de bleu et 64 tons de gris .
Puis une fois les couleurs initialisé dans la palette les affiches, classés par couleur et centré .

Ce code est fait pour fasm, pour les autres assembleur quelques modification minime sont a apportés .

Source / Exemple :

MOV     AX, 13h	               ; passage en mode 13h
INT	10h		

debut:
	
MOV     DX, 03C8h	
XOR     AX, AX		
OUT     DX, AL		                  ; initialisation de la palette
INC     DX		

MOV     CX, 64	
	
rouge:	

OUT     DX, AL		        ; 64 tons de rouge, 0 de vert,0 de bleu
PUSH    AX		
XOR     AX, AX		
OUT     DX, AL		
OUT     DX, AL		
POP     AX		
INC     AX		
LOOP    rouge		

MOV     CX,64		
	
vert:
PUSH    AX
XOR     AX,AX
OUT     DX, AL		      ; 64 tons de vert, 0 de rouge , 0 de bleu
POP     AX		
OUT     DX, AL
PUSH    AX
XOR     AX,AX		
OUT     DX, AL		
POP     AX		
INC     AX		
LOOP    vert		

MOV     CX,64		
	
bleu:
PUSH    AX
XOR     AX,AX
OUT     DX, AL	              ;64 tons de bleu, 0 de rouge , 0 de vert	
OUT     DX, AL
POP     AX	
OUT     DX, AL				
INC     AX		
LOOP    bleu		

MOV     CX,64
	
gris:
OUT     DX, AL			
OUT     DX, AL	           ; 64 tons de rouge , 64 tons de vert et 64 tons
OUT     DX, AL	     ; de bleu donne du gris , donc on a 64 tons de 	
INC     AX		         ; gris
LOOP    gris		

MOV     CX,64
        	
	

	

MOV     AX,0A000h                ; 0a000h est l'adresse de la carte video
MOV     ES,AX                    ; on ne peut pas faire de mov es, 0a000h donc
                                 ; on utilise AX

MOV     DI,16032                 ; on commence au pixel 16032 et on va ecrir sur
MOV     CX,100                   ; 100  ligne pour que notre palette de couleur
		      ; soit centré au millieu de l'ecrant
		; rappel : pour obtenir le numero d'un pixel =
				; [y*320] + x




ligne:
XOR     BX,BX                   ; on commence a la couleur 0 et on sauvegarde
PUSH    DI                      ; DI

pix:
MOV     [ES:DI],BX              ; on ecrit le pixel .
INC     DI                      ; on incremente DI de 1 .
INC     BX                      ; on incremente BX (vouleur) de 1 .
CMP     BX,255                 ; on verifi qu'on ne depasse pas les 256 couleurs
JNE     pix                     ; autorisé par le mode 13h , et si on ne depasse
	                        ; pas on continue .

POP     DI                      ; on fait revenir DI et on lui rajoute 320, donc
ADD     DI,320                  ; une ligne puisque en mode 13h l'ecrant fait
LOOP    ligne                  ; 320x200 , et on retourne a "ligne" pour continué
	                        ; a dessiner les pixels et ca pour 100 ligne
	                        ; ce qui est déclarer plus haut , docn regarder
	                        ; un peut plus haut si vous ne comprener pas
	                        ; pourquoi




        



XOR     AX, AX                  ; on attend l'appui d'une touche pour continuer
INT     16H                     ; (16h =  interruption clavier)

MOV     AX, 03H                 ; on repasse en mode texte
INT     10H
        
RET                              ; et on rend la main au dos

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

roidesrats
Messages postés
8
Date d'inscription
vendredi 12 septembre 2003
Statut
Membre
Dernière intervention
9 avril 2005
-
merci pour cette source, c'est exactement le genre de source que je recherchais, très efficace et utile, merci encore.

A part ca, j'ai une petite question à propos des notations quand on utilise ES.
Lorsqu'on veut ecrire MOV [DS:DI],BX
on peut ecrire MOV [DI], BX.
Ce que je voulais savoir, s'il vous plait, c'est quelles sont les notations équivalentes à "MOV [ES:DI],BX" ?
(en fait sur mon asm j'ai dû le remplacer l'utilisation de ES par DS afin que ca fonctionne. et cette question pour savoir si c'est ES ou la notation qui plaisait pas trop à l'asm, voilà :) )
acidcrasher
Messages postés
7
Date d'inscription
lundi 14 janvier 2002
Statut
Membre
Dernière intervention
10 avril 2005
-
merci pour ce commebtaire ca fait plaisir :) .

pour ta question , la reponse est simple :

j'utilise Fasm , et la syntaxe est légérement differente suivant les assembleur .

par exemple si tu utilise Nasm la syntaxe est la suivante :

MOV DS:[DI], BX

au lieu de :


MOV [DS:DI], BX

sous Fasm .

voila , j'espere avoir repondu a ta question , sinon n'hesite pas a demander des details ;)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.