Encore du nettoyage
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@31 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
139cdcdb1c
commit
ac387ca2ff
61
Makefile
Normal file
61
Makefile
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
CC = gcc
|
||||||
|
COPT = -Wall -Os -c
|
||||||
|
LOPT = -lSDL -o grafx2
|
||||||
|
|
||||||
|
gfx2 : main.o init.o graph.o sdlscreen.o divers.o special.o boutons.o palette.o aide.o operatio.o loadsave.o readline.o moteur.o files.o op_c.o linux.o op_asm.o
|
||||||
|
$(CC) $(LOPT) main.o graph.o divers.o init.o files.o linux.o loadsave.o boutons.o moteur.o sdlscreen.o aide.o palette.o operatio.o op_c.o readline.o special.o op_asm.o
|
||||||
|
|
||||||
|
main.o : graph.o const.h struct.h global.h graph.h divers.h init.h boutons.h moteur.h files.h loadsave.h main.c readini.h saveini.h
|
||||||
|
$(CC) $(COPT) main.c
|
||||||
|
|
||||||
|
init.o : const.h struct.h global.h modesvdo.h graph.h boutons.h palette.h aide.h operatio.h init.c readini.c saveini.c
|
||||||
|
$(CC) $(COPT) init.c
|
||||||
|
|
||||||
|
graph.o : divers.o graph.c pages.c const.h struct.h global.h divers.h
|
||||||
|
$(CC) $(COPT) graph.c
|
||||||
|
|
||||||
|
divers.o : global.h const.h divers.c
|
||||||
|
$(CC) $(COPT) divers.c
|
||||||
|
|
||||||
|
special.o : const.h struct.h global.h graph.h moteur.h special.c
|
||||||
|
$(CC) $(COPT) special.c
|
||||||
|
|
||||||
|
boutons.o : boutons.c shade.c const.h struct.h global.h divers.h graph.h moteur.h readline.h files.h loadsave.h init.h readini.h saveini.h
|
||||||
|
$(CC) $(COPT) boutons.c
|
||||||
|
|
||||||
|
palette.o : const.h struct.h global.h divers.h graph.h moteur.h readline.h palette.c
|
||||||
|
$(CC) $(COPT) palette.c
|
||||||
|
|
||||||
|
aide.o : const.h struct.h global.h divers.h graph.h moteur.h aide.c
|
||||||
|
$(CC) $(COPT) aide.c
|
||||||
|
|
||||||
|
moteur.o : const.h struct.h global.h graph.h divers.h moteur.c
|
||||||
|
$(CC) $(COPT) moteur.c
|
||||||
|
|
||||||
|
operatio.o : const.h struct.h global.h divers.h moteur.h graph.h operatio.h operatio.c
|
||||||
|
$(CC) $(COPT) operatio.c
|
||||||
|
|
||||||
|
readline.o : const.h struct.h global.h divers.h graph.h readline.c
|
||||||
|
$(CC) $(COPT) readline.c
|
||||||
|
|
||||||
|
files.o : const.h struct.h global.h graph.h divers.h files.c
|
||||||
|
$(CC) $(COPT) files.c
|
||||||
|
|
||||||
|
loadsave.o : const.h struct.h global.h divers.h graph.h loadsave.c pages.h op_c.h op_asm.h
|
||||||
|
$(CC) $(COPT) loadsave.c
|
||||||
|
|
||||||
|
op_c.o : struct.h op_c.c op_c.h op_asm.h
|
||||||
|
$(CC) $(COPT) op_c.c
|
||||||
|
|
||||||
|
op_asm.o : op_asm.h op_asm.c
|
||||||
|
$(CC) $(COPT) op_asm.c
|
||||||
|
|
||||||
|
sdlscreen.o : sdlscreen.c sdlscreen.h
|
||||||
|
$(CC) $(COPT) sdlscreen.c
|
||||||
|
|
||||||
|
linux.o : linux.h linux.c
|
||||||
|
$(CC) $(COPT) linux.c
|
||||||
|
|
||||||
|
clean :
|
||||||
|
rm -rf *.o
|
||||||
|
rm grafx2
|
||||||
472
dpmi.asm
472
dpmi.asm
@ -1,472 +0,0 @@
|
|||||||
.386P
|
|
||||||
.MODEL FLAT
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_TEXT Segment dword public 'code'
|
|
||||||
Assume cs:_TEXT, ds:_DATA
|
|
||||||
|
|
||||||
|
|
||||||
; -- Fonctions DPMI --
|
|
||||||
public Physical_address_mapping
|
|
||||||
public Free_physical_address_mapping
|
|
||||||
public Lock_linear_region
|
|
||||||
public Unlock_linear_region
|
|
||||||
public Allocate_ldt_descriptor
|
|
||||||
public Free_ldt_descriptor
|
|
||||||
public Set_segment_base_address
|
|
||||||
public Set_segment_limit
|
|
||||||
public Set_descriptor_access_rights
|
|
||||||
public Get_segment_base_address
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Physical_address_mapping proc near
|
|
||||||
|
|
||||||
push ebp
|
|
||||||
mov ebp,esp
|
|
||||||
|
|
||||||
arg Physical_address:dword,Physical_size:dword,Linear_address_pointer:dword
|
|
||||||
|
|
||||||
push ebx
|
|
||||||
push esi
|
|
||||||
push edi
|
|
||||||
|
|
||||||
; On met dans BX:CX l'adresse physique … mapper
|
|
||||||
mov eax,Physical_address
|
|
||||||
mov cx,ax
|
|
||||||
shr eax,16
|
|
||||||
mov bx,ax
|
|
||||||
|
|
||||||
; On met dans SI:DI la taille de l'adresse physique … mapper
|
|
||||||
mov eax,Physical_size
|
|
||||||
mov di,ax
|
|
||||||
shr eax,16
|
|
||||||
mov si,ax
|
|
||||||
|
|
||||||
; On appelle le service DPMI de mappage d'adresse physique
|
|
||||||
mov ax,0800h
|
|
||||||
int 31h
|
|
||||||
|
|
||||||
jc Physical_address_mapping_Erreur
|
|
||||||
|
|
||||||
; On sauve l'adresse lin‚aire … l'adresse donn‚e
|
|
||||||
mov eax,Linear_address_pointer
|
|
||||||
mov [eax+00h],cx
|
|
||||||
mov [eax+02h],bx
|
|
||||||
; Et on renvoie un code d'erreur nul
|
|
||||||
xor ax,ax
|
|
||||||
|
|
||||||
Physical_address_mapping_Erreur:
|
|
||||||
|
|
||||||
pop edi
|
|
||||||
pop esi
|
|
||||||
pop ebx
|
|
||||||
|
|
||||||
mov esp,ebp
|
|
||||||
pop ebp
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
Physical_address_mapping endp
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Free_physical_address_mapping proc near
|
|
||||||
|
|
||||||
push ebp
|
|
||||||
mov ebp,esp
|
|
||||||
|
|
||||||
arg Linear_address:dword
|
|
||||||
|
|
||||||
push ebx
|
|
||||||
|
|
||||||
; On met dans BX:CX l'adresse lin‚aire … d‚mapper
|
|
||||||
mov eax,Linear_address
|
|
||||||
mov cx,ax
|
|
||||||
shr eax,16
|
|
||||||
mov bx,ax
|
|
||||||
|
|
||||||
; On appel le service DPMI de lib‚ration d'un mappage d'adresse physique
|
|
||||||
mov ax,0801h
|
|
||||||
int 31h
|
|
||||||
|
|
||||||
jc Free_physical_address_mapping_Erreur
|
|
||||||
|
|
||||||
; On renvoie un code d'erreur nul
|
|
||||||
xor ax,ax
|
|
||||||
|
|
||||||
Free_physical_address_mapping_Erreur:
|
|
||||||
|
|
||||||
pop ebx
|
|
||||||
|
|
||||||
mov esp,ebp
|
|
||||||
pop ebp
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
Free_physical_address_mapping endp
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Lock_linear_region proc near
|
|
||||||
|
|
||||||
push ebp
|
|
||||||
mov ebp,esp
|
|
||||||
|
|
||||||
arg Linear_address:dword,Linear_size:dword
|
|
||||||
|
|
||||||
push ebx
|
|
||||||
push esi
|
|
||||||
push edi
|
|
||||||
|
|
||||||
; On met dans BX:CX l'adresse lin‚aire … locker
|
|
||||||
mov eax,Linear_address
|
|
||||||
mov cx,ax
|
|
||||||
shr eax,16
|
|
||||||
mov bx,ax
|
|
||||||
|
|
||||||
; On met dans SI:DI la taille de l'adresse lin‚aire … locker
|
|
||||||
mov eax,Linear_size
|
|
||||||
mov di,ax
|
|
||||||
shr eax,16
|
|
||||||
mov si,ax
|
|
||||||
|
|
||||||
; On appel le service DPMI de lockage d'adresse lin‚aire
|
|
||||||
mov ax,0600h
|
|
||||||
int 31h
|
|
||||||
|
|
||||||
jc Lock_linear_region_Erreur
|
|
||||||
|
|
||||||
; On renvoie un code d'erreur nul
|
|
||||||
xor ax,ax
|
|
||||||
|
|
||||||
Lock_linear_region_Erreur:
|
|
||||||
|
|
||||||
pop edi
|
|
||||||
pop esi
|
|
||||||
pop ebx
|
|
||||||
|
|
||||||
mov esp,ebp
|
|
||||||
pop ebp
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
Lock_linear_region endp
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Unlock_linear_region proc near
|
|
||||||
|
|
||||||
push ebp
|
|
||||||
mov ebp,esp
|
|
||||||
|
|
||||||
arg Linear_address:dword,Linear_size:dword
|
|
||||||
|
|
||||||
push ebx
|
|
||||||
push esi
|
|
||||||
push edi
|
|
||||||
|
|
||||||
; On met dans BX:CX l'adresse lin‚aire … d‚locker
|
|
||||||
mov eax,Linear_address
|
|
||||||
mov cx,ax
|
|
||||||
shr eax,16
|
|
||||||
mov bx,ax
|
|
||||||
|
|
||||||
; On met dans SI:DI la taille de l'adresse lin‚aire … d‚locker
|
|
||||||
mov eax,Linear_size
|
|
||||||
mov di,ax
|
|
||||||
shr eax,16
|
|
||||||
mov si,ax
|
|
||||||
|
|
||||||
; On appel le service DPMI de d‚lockage d'adresse lin‚aire
|
|
||||||
mov ax,0601h
|
|
||||||
int 31h
|
|
||||||
|
|
||||||
jc Unlock_linear_region_Erreur
|
|
||||||
|
|
||||||
; On renvoie un code d'erreur nul
|
|
||||||
xor ax,ax
|
|
||||||
|
|
||||||
Unlock_linear_region_Erreur:
|
|
||||||
|
|
||||||
pop edi
|
|
||||||
pop esi
|
|
||||||
pop ebx
|
|
||||||
|
|
||||||
mov esp,ebp
|
|
||||||
pop ebp
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
Unlock_linear_region endp
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Allocate_ldt_descriptor proc near
|
|
||||||
|
|
||||||
push ebp
|
|
||||||
mov ebp,esp
|
|
||||||
|
|
||||||
arg Nombre_de_descripteurs:word,Base_selector_pointer:dword
|
|
||||||
|
|
||||||
push ebx
|
|
||||||
push esi
|
|
||||||
push edi
|
|
||||||
|
|
||||||
; On met dans CX le nombre de descripteurs ldt … allouer
|
|
||||||
mov cx,Nombre_de_descripteurs
|
|
||||||
|
|
||||||
; On appel le service DPMI d'allocation de descripteurs ldt
|
|
||||||
mov ax,0000h
|
|
||||||
int 31h
|
|
||||||
|
|
||||||
jc Allocate_ldt_descriptor_Erreur
|
|
||||||
|
|
||||||
; On sauve la valeur du s‚lecteur de base
|
|
||||||
mov ebx,Base_selector_pointer
|
|
||||||
mov [ebx],ax
|
|
||||||
; Et on renvoie un code d'erreur nul
|
|
||||||
xor ax,ax
|
|
||||||
|
|
||||||
Allocate_ldt_descriptor_Erreur:
|
|
||||||
|
|
||||||
pop edi
|
|
||||||
pop esi
|
|
||||||
pop ebx
|
|
||||||
|
|
||||||
mov esp,ebp
|
|
||||||
pop ebp
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
Allocate_ldt_descriptor endp
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Free_ldt_descriptor proc near
|
|
||||||
|
|
||||||
push ebp
|
|
||||||
mov ebp,esp
|
|
||||||
|
|
||||||
arg Selector:word
|
|
||||||
|
|
||||||
push ebx
|
|
||||||
push esi
|
|
||||||
push edi
|
|
||||||
|
|
||||||
; On met dans BX le descripteur ldt … lib‚rer
|
|
||||||
mov bx,Selector
|
|
||||||
|
|
||||||
; On appel le service DPMI de lib‚ration de descripteur ldt
|
|
||||||
mov ax,0001h
|
|
||||||
int 31h
|
|
||||||
|
|
||||||
jc Free_ldt_descriptor_Erreur
|
|
||||||
|
|
||||||
; On renvoie un code d'erreur nul
|
|
||||||
xor ax,ax
|
|
||||||
|
|
||||||
Free_ldt_descriptor_Erreur:
|
|
||||||
|
|
||||||
pop edi
|
|
||||||
pop esi
|
|
||||||
pop ebx
|
|
||||||
|
|
||||||
mov esp,ebp
|
|
||||||
pop ebp
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
Free_ldt_descriptor endp
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Set_segment_base_address proc near
|
|
||||||
|
|
||||||
push ebp
|
|
||||||
mov ebp,esp
|
|
||||||
|
|
||||||
arg Selector:word,Linear_base_address:dword
|
|
||||||
|
|
||||||
push ebx
|
|
||||||
|
|
||||||
; On met dans CX:DX l'adresse de base lin‚aire … assigner au segment
|
|
||||||
mov eax,Linear_base_address
|
|
||||||
mov dx,ax
|
|
||||||
shr eax,16
|
|
||||||
mov cx,ax
|
|
||||||
|
|
||||||
; On met dans BX le s‚lecteur auquel il faut assigner l'adresse de base
|
|
||||||
mov bx,Selector
|
|
||||||
|
|
||||||
; On appel le service DPMI d'assignation d'adresse de base … un segment
|
|
||||||
mov ax,0007h
|
|
||||||
int 31h
|
|
||||||
|
|
||||||
jc Set_segment_base_address_Erreur
|
|
||||||
|
|
||||||
; On renvoie un code d'erreur nul
|
|
||||||
xor ax,ax
|
|
||||||
|
|
||||||
Set_segment_base_address_Erreur:
|
|
||||||
|
|
||||||
pop ebx
|
|
||||||
|
|
||||||
mov esp,ebp
|
|
||||||
pop ebp
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
Set_segment_base_address endp
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Set_segment_limit proc near
|
|
||||||
|
|
||||||
push ebp
|
|
||||||
mov ebp,esp
|
|
||||||
|
|
||||||
arg Selector:word,Segment_limit:dword
|
|
||||||
|
|
||||||
push ebx
|
|
||||||
|
|
||||||
; On met dans CX:DX la limite (taille) … assigner au segment
|
|
||||||
mov eax,Segment_limit
|
|
||||||
mov dx,ax
|
|
||||||
shr eax,16
|
|
||||||
mov cx,ax
|
|
||||||
|
|
||||||
; On met dans BX le s‚lecteur auquel il faut assigner une limite
|
|
||||||
mov bx,Selector
|
|
||||||
|
|
||||||
; On appel le service DPMI d'assignation de limite … un segment
|
|
||||||
mov ax,0008h
|
|
||||||
int 31h
|
|
||||||
|
|
||||||
jc Set_segment_limit_Erreur
|
|
||||||
|
|
||||||
; On renvoie un code d'erreur nul
|
|
||||||
xor ax,ax
|
|
||||||
|
|
||||||
Set_segment_limit_Erreur:
|
|
||||||
|
|
||||||
pop ebx
|
|
||||||
|
|
||||||
mov esp,ebp
|
|
||||||
pop ebp
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
Set_segment_limit endp
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Set_descriptor_access_rights proc near
|
|
||||||
|
|
||||||
push ebp
|
|
||||||
mov ebp,esp
|
|
||||||
|
|
||||||
arg Selector:word,Rights:word
|
|
||||||
|
|
||||||
push ebx
|
|
||||||
|
|
||||||
; On met dans CX les droits … assigner au segment
|
|
||||||
mov cx,Rights
|
|
||||||
|
|
||||||
; On met dans BX le s‚lecteur auquel il faut assigner des droits
|
|
||||||
mov bx,Selector
|
|
||||||
|
|
||||||
; On appel le service DPMI d'assignation de droits … un segment
|
|
||||||
mov ax,0009h
|
|
||||||
int 31h
|
|
||||||
|
|
||||||
jc Set_descriptor_access_rights_Erreur
|
|
||||||
|
|
||||||
; On renvoie un code d'erreur nul
|
|
||||||
xor ax,ax
|
|
||||||
|
|
||||||
Set_descriptor_access_rights_Erreur:
|
|
||||||
|
|
||||||
pop ebx
|
|
||||||
|
|
||||||
mov esp,ebp
|
|
||||||
pop ebp
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Set_descriptor_access_rights endp
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Get_segment_base_address proc near
|
|
||||||
|
|
||||||
push ebp
|
|
||||||
mov ebp,esp
|
|
||||||
|
|
||||||
arg Selector:word,Linear_base_address_pointer:dword
|
|
||||||
|
|
||||||
push ebx
|
|
||||||
|
|
||||||
; On met dans BX le s‚lecteur dont il faut lire l'adresse de base
|
|
||||||
mov bx,Selector
|
|
||||||
|
|
||||||
; On appel le service DPMI de lecture d'adresse de base d'un segment
|
|
||||||
mov ax,0006h
|
|
||||||
int 31h
|
|
||||||
|
|
||||||
jc Get_segment_base_address_Erreur
|
|
||||||
|
|
||||||
; On sauve l'adresse de base lin‚aire du segment
|
|
||||||
mov eax,Linear_base_address_pointer
|
|
||||||
mov [eax+00h],dx
|
|
||||||
mov [eax+02h],cx
|
|
||||||
; On renvoie un code d'erreur nul
|
|
||||||
xor ax,ax
|
|
||||||
|
|
||||||
Get_segment_base_address_Erreur:
|
|
||||||
|
|
||||||
pop ebx
|
|
||||||
|
|
||||||
mov esp,ebp
|
|
||||||
pop ebp
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
Get_segment_base_address endp
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_TEXT ENDS
|
|
||||||
END
|
|
||||||
20
dpmi.h
20
dpmi.h
@ -1,20 +0,0 @@
|
|||||||
|
|
||||||
#ifndef _DPMI_H_
|
|
||||||
#define _DPMI_H_
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
word Physical_address_mapping(byte * Physical_address,dword Size,byte * * Linear_address_pointer);
|
|
||||||
word Free_physical_address_mapping(byte * Linear_address);
|
|
||||||
word Lock_linear_region(byte * Linear_address,dword Size);
|
|
||||||
word Unlock_linear_region(byte * Linear_address,dword Size);
|
|
||||||
word Allocate_ldt_descriptor(word Nombre_de_descripteurs,word * Base_selector_pointer);
|
|
||||||
word Free_ldt_descriptor(word Selector);
|
|
||||||
word Set_segment_base_address(word Selector,byte * Linear_base_address);
|
|
||||||
word Set_segment_limit(word Selector,dword Segment_limit);
|
|
||||||
word Set_descriptor_access_rights(word Selector,word Rights);
|
|
||||||
word Get_segment_base_address(word Selector,byte * * Linear_base_address_pointer);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
227
mcnormal.asm
227
mcnormal.asm
@ -1,227 +0,0 @@
|
|||||||
; -- Calcul de la meilleure couleur s'approchant d'une teinte particuliŠre --
|
|
||||||
|
|
||||||
Meilleure_couleur proc near
|
|
||||||
|
|
||||||
push ebp
|
|
||||||
mov ebp,esp
|
|
||||||
|
|
||||||
arg Rouge:byte,Vert:byte,Bleu:byte
|
|
||||||
|
|
||||||
push ebx
|
|
||||||
push esi
|
|
||||||
push edi
|
|
||||||
|
|
||||||
|
|
||||||
; On place dans ESI l'adresse de la palette
|
|
||||||
mov esi,offset Principal_Palette
|
|
||||||
|
|
||||||
; On place l'indice de la couleur au d‚but de la table d'exclusion de coul.
|
|
||||||
mov MC_Indice,offset Exclude_color
|
|
||||||
|
|
||||||
; EDI servira … stocker la meilleure diff‚rence
|
|
||||||
mov edi,07FFFFFFFh
|
|
||||||
|
|
||||||
; On se sert de CL pour compter la couleur en cours
|
|
||||||
; (et CH servira … stocker la meilleure couleur)
|
|
||||||
xor cx,cx
|
|
||||||
|
|
||||||
; On nettoie la partie haute de EAX:
|
|
||||||
xor eax,eax
|
|
||||||
|
|
||||||
Meilleure_couleur_Pour_chaque_couleur:
|
|
||||||
|
|
||||||
; On v‚rifie que la couleur ne soit pas exclue
|
|
||||||
mov ebx,MC_Indice
|
|
||||||
cmp byte ptr [ebx],0
|
|
||||||
jnz Meilleure_couleur_Pas_mieux
|
|
||||||
|
|
||||||
; EBX sert … pointer la table pr‚calcul‚e
|
|
||||||
mov ebx,MC_Table_differences
|
|
||||||
|
|
||||||
; On calcule la diff‚rence:
|
|
||||||
;
|
|
||||||
; Le calcul s'effectue dans EDX (on y cumule les diff‚rences), en se
|
|
||||||
; servant de EBX pour pointer la table pr‚calcul‚e, et de AX comme
|
|
||||||
; indice dans la table
|
|
||||||
|
|
||||||
; On s'occupe de la composante Rouge
|
|
||||||
mov al,[esi]
|
|
||||||
mov dl,[esi+1] ; et en entrelac‚ de la composante verte
|
|
||||||
mov ah,Rouge
|
|
||||||
mov dh,Vert
|
|
||||||
sub al,ah
|
|
||||||
sub dl,dh
|
|
||||||
and eax,127
|
|
||||||
and edx,127
|
|
||||||
mov edx,[ebx+4*edx+128*4]
|
|
||||||
add edx,[ebx+4*eax]
|
|
||||||
|
|
||||||
; On s'occupe de la composante Bleue
|
|
||||||
mov al,[esi+2]
|
|
||||||
mov ah,Bleu
|
|
||||||
sub al,ah
|
|
||||||
and eax,127
|
|
||||||
add edx,[ebx+4*eax+256*4]
|
|
||||||
|
|
||||||
jz Meilleure_couleur_Correspond_impeccablement
|
|
||||||
|
|
||||||
cmp edx,edi
|
|
||||||
jae Meilleure_couleur_Pas_mieux
|
|
||||||
|
|
||||||
; L…, on sait que CL contient une meilleure couleur que CH
|
|
||||||
|
|
||||||
mov ch,cl ; On commence par mettre CH … CL
|
|
||||||
mov edi,edx ; Ensuite, on peut mettre DI (meilleure diff‚rence) … jour
|
|
||||||
|
|
||||||
Meilleure_couleur_Pas_mieux:
|
|
||||||
|
|
||||||
inc MC_Indice
|
|
||||||
add esi,3
|
|
||||||
|
|
||||||
inc cl
|
|
||||||
jnz Meilleure_couleur_Pour_chaque_couleur
|
|
||||||
|
|
||||||
; Ici, on sait que CH contient d‚j… la meilleure couleur. On va donc faire
|
|
||||||
; une sortie rapide (c'est pas bien, mais ‡a fait gagner 3 cycles)
|
|
||||||
|
|
||||||
mov al,ch
|
|
||||||
|
|
||||||
|
|
||||||
pop edi
|
|
||||||
pop esi
|
|
||||||
pop ebx
|
|
||||||
|
|
||||||
mov esp,ebp
|
|
||||||
pop ebp
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
Meilleure_couleur_Correspond_impeccablement:
|
|
||||||
|
|
||||||
; Ici, on sait que CL contient la couleur qui correspond exactement aux
|
|
||||||
; exigences de l'appelant
|
|
||||||
|
|
||||||
mov al,cl
|
|
||||||
|
|
||||||
|
|
||||||
pop edi
|
|
||||||
pop esi
|
|
||||||
pop ebx
|
|
||||||
|
|
||||||
mov esp,ebp
|
|
||||||
pop ebp
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
Meilleure_couleur endp
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; -- Calcul de la meilleure couleur s'approchant d'une teinte particuliŠre --
|
|
||||||
; -- et ceci SANS exclure certaines couleurs coch‚es par l'utilisateur --
|
|
||||||
|
|
||||||
Meilleure_couleur_sans_exclusion proc near
|
|
||||||
|
|
||||||
push ebp
|
|
||||||
mov ebp,esp
|
|
||||||
|
|
||||||
arg Rouge:byte,Vert:byte,Bleu:byte
|
|
||||||
|
|
||||||
push ebx
|
|
||||||
push esi
|
|
||||||
push edi
|
|
||||||
|
|
||||||
|
|
||||||
; On place dans ESI l'adresse de la palette
|
|
||||||
mov esi,offset Principal_Palette
|
|
||||||
|
|
||||||
; EDI servira … stocker la meilleure diff‚rence
|
|
||||||
mov edi,07FFFFFFFh
|
|
||||||
|
|
||||||
; On se sert de CL pour compter la couleur en cours
|
|
||||||
; (et CH servira … stocker la meilleure couleur)
|
|
||||||
xor cx,cx
|
|
||||||
|
|
||||||
; On nettoie la partie haute de EAX:
|
|
||||||
xor eax,eax
|
|
||||||
|
|
||||||
; EBX sert … pointer la table pr‚calcul‚e
|
|
||||||
mov ebx,MC_Table_differences
|
|
||||||
|
|
||||||
MCSE_Pour_chaque_couleur:
|
|
||||||
|
|
||||||
; On calcule la diff‚rence:
|
|
||||||
;
|
|
||||||
; Le calcul s'effectue dans EDX (on y cumule les diff‚rences), en se
|
|
||||||
; servant de EBX pour pointer la table pr‚calcul‚e, et de AX comme
|
|
||||||
; indice dans la table
|
|
||||||
|
|
||||||
; On s'occupe de la composante Rouge
|
|
||||||
mov al,[esi]
|
|
||||||
mov dl,[esi+1] ; et en entrelac‚ de la composante verte
|
|
||||||
mov ah,Rouge
|
|
||||||
mov dh,Vert
|
|
||||||
sub al,ah
|
|
||||||
sub dl,dh
|
|
||||||
and eax,127
|
|
||||||
and edx,127
|
|
||||||
mov edx,[ebx+4*edx+128*4]
|
|
||||||
add edx,[ebx+4*eax]
|
|
||||||
|
|
||||||
; On s'occupe de la composante Bleue
|
|
||||||
mov al,[esi+2]
|
|
||||||
mov ah,Bleu
|
|
||||||
sub al,ah
|
|
||||||
and eax,127
|
|
||||||
add edx,[ebx+4*eax+256*4]
|
|
||||||
|
|
||||||
jz MCSE_Correspond_impeccablement
|
|
||||||
|
|
||||||
cmp edx,edi
|
|
||||||
jae MCSE_Pas_mieux
|
|
||||||
|
|
||||||
; L…, on sait que CL contient une meilleure couleur que CH
|
|
||||||
|
|
||||||
mov ch,cl ; On commence par mettre CH … CL
|
|
||||||
mov edi,edx ; Ensuite, on peut mettre DI (meilleure diff‚rence) … jour
|
|
||||||
|
|
||||||
MCSE_Pas_mieux:
|
|
||||||
|
|
||||||
add esi,3
|
|
||||||
|
|
||||||
inc cl
|
|
||||||
jnz MCSE_Pour_chaque_couleur
|
|
||||||
|
|
||||||
; Ici, on sait que CH contient d‚j… la meilleure couleur. On va donc faire
|
|
||||||
; une sortie rapide (c'est pas bien, mais ‡a fait gagner 3 cycles)
|
|
||||||
|
|
||||||
mov al,ch
|
|
||||||
|
|
||||||
|
|
||||||
pop edi
|
|
||||||
pop esi
|
|
||||||
pop ebx
|
|
||||||
|
|
||||||
mov esp,ebp
|
|
||||||
pop ebp
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
MCSE_Correspond_impeccablement:
|
|
||||||
|
|
||||||
; Ici, on sait que CL contient la couleur qui correspond exactement aux
|
|
||||||
; exigences de l'appelant
|
|
||||||
|
|
||||||
mov al,cl
|
|
||||||
|
|
||||||
|
|
||||||
pop edi
|
|
||||||
pop esi
|
|
||||||
pop ebx
|
|
||||||
|
|
||||||
mov esp,ebp
|
|
||||||
pop ebp
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
Meilleure_couleur_sans_exclusion endp
|
|
||||||
246
mcpourp2.asm
246
mcpourp2.asm
@ -1,246 +0,0 @@
|
|||||||
; -- Calcul de la meilleure couleur s'approchant d'une teinte particuliŠre --
|
|
||||||
Meilleure_couleur proc near
|
|
||||||
|
|
||||||
push ebp
|
|
||||||
mov ebp,esp
|
|
||||||
|
|
||||||
arg Rouge:byte,Vert:byte,Bleu:byte
|
|
||||||
|
|
||||||
push ebx
|
|
||||||
push esi
|
|
||||||
push edi
|
|
||||||
|
|
||||||
|
|
||||||
; On place dans ESI l'adresse de la palette
|
|
||||||
mov esi,offset Principal_Palette
|
|
||||||
|
|
||||||
; On place l'indice de la couleur au d‚but de la table d'exclusion de coul.
|
|
||||||
mov MC_Indice,offset Exclude_color
|
|
||||||
|
|
||||||
; EDI servira … stocker la meilleure diff‚rence
|
|
||||||
mov edi,07FFFFFFFh
|
|
||||||
|
|
||||||
; On se sert de CL pour compter la couleur en cours
|
|
||||||
; (et CH servira … stocker la meilleure couleur)
|
|
||||||
xor cx,cx
|
|
||||||
|
|
||||||
Meilleure_couleur_Pour_chaque_couleur:
|
|
||||||
|
|
||||||
mov ebx,MC_Indice
|
|
||||||
cmp byte ptr [ebx],0
|
|
||||||
jnz Meilleure_couleur_Pas_mieux
|
|
||||||
|
|
||||||
; On calcule la diff‚rence:
|
|
||||||
|
|
||||||
; On s'occupe de la composante Rouge
|
|
||||||
xor ebx,ebx
|
|
||||||
xor eax,eax
|
|
||||||
mov bl,[esi]
|
|
||||||
mov al,Rouge
|
|
||||||
sub eax,ebx
|
|
||||||
imul eax
|
|
||||||
mov MC_DR,eax
|
|
||||||
|
|
||||||
; On s'occupe de la composante Verte
|
|
||||||
xor ebx,ebx
|
|
||||||
xor eax,eax
|
|
||||||
mov bl,[esi+1]
|
|
||||||
mov al,Vert
|
|
||||||
sub eax,ebx
|
|
||||||
imul eax
|
|
||||||
mov MC_DV,eax
|
|
||||||
|
|
||||||
; On s'occupe de la composante Bleue
|
|
||||||
xor ebx,ebx
|
|
||||||
xor eax,eax
|
|
||||||
mov bl,[esi+2]
|
|
||||||
mov al,Bleu
|
|
||||||
sub eax,ebx
|
|
||||||
imul eax
|
|
||||||
mov MC_DB,eax
|
|
||||||
|
|
||||||
; On totalise la "distance" dans EBX
|
|
||||||
mov eax,30
|
|
||||||
mul MC_DR
|
|
||||||
mov ebx,eax
|
|
||||||
|
|
||||||
mov eax,59
|
|
||||||
mul MC_DV
|
|
||||||
add ebx,eax
|
|
||||||
|
|
||||||
mov eax,11
|
|
||||||
mul MC_DB
|
|
||||||
add ebx,eax
|
|
||||||
jz Meilleure_couleur_Correspond_impeccablement
|
|
||||||
|
|
||||||
cmp ebx,edi
|
|
||||||
jae Meilleure_couleur_Pas_mieux
|
|
||||||
|
|
||||||
; L…, on sait que CL contient une meilleure couleur que CH
|
|
||||||
|
|
||||||
mov ch,cl ; On commence par mettre CH … CL
|
|
||||||
mov edi,ebx ; Ensuite, on peut mettre DI (meilleure diff‚rence) … jour
|
|
||||||
|
|
||||||
Meilleure_couleur_Pas_mieux:
|
|
||||||
|
|
||||||
inc MC_Indice
|
|
||||||
add esi,3
|
|
||||||
|
|
||||||
inc cl
|
|
||||||
jnz Meilleure_couleur_Pour_chaque_couleur
|
|
||||||
|
|
||||||
; Ici, on sait que CH contient d‚j… la meilleure couleur. On va donc faire
|
|
||||||
; une sortie rapide (c'est pas bien, mais ‡a fait gagner 3 cycles)
|
|
||||||
|
|
||||||
mov al,ch
|
|
||||||
|
|
||||||
pop edi
|
|
||||||
pop esi
|
|
||||||
pop ebx
|
|
||||||
|
|
||||||
mov esp,ebp
|
|
||||||
pop ebp
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
Meilleure_couleur_Correspond_impeccablement:
|
|
||||||
|
|
||||||
; Ici, on sait que CL contient la couleur qui correspond exactement aux
|
|
||||||
; exigences de l'appelant
|
|
||||||
|
|
||||||
mov al,cl
|
|
||||||
|
|
||||||
|
|
||||||
pop edi
|
|
||||||
pop esi
|
|
||||||
pop ebx
|
|
||||||
|
|
||||||
mov esp,ebp
|
|
||||||
pop ebp
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
Meilleure_couleur endp
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; -- Calcul de la meilleure couleur s'approchant d'une teinte particuliŠre --
|
|
||||||
; -- et ceci SANS exclure certaines couleurs coch‚es par l'utilisateur --
|
|
||||||
|
|
||||||
Meilleure_couleur_sans_exclusion proc near
|
|
||||||
|
|
||||||
push ebp
|
|
||||||
mov ebp,esp
|
|
||||||
|
|
||||||
arg Rouge:byte,Vert:byte,Bleu:byte
|
|
||||||
|
|
||||||
push ebx
|
|
||||||
push esi
|
|
||||||
push edi
|
|
||||||
|
|
||||||
|
|
||||||
; On place dans ESI l'adresse de la palette
|
|
||||||
mov esi,offset Principal_Palette
|
|
||||||
|
|
||||||
; EDI servira … stocker la meilleure diff‚rence
|
|
||||||
mov edi,07FFFFFFFh
|
|
||||||
|
|
||||||
; On se sert de CL pour compter la couleur en cours
|
|
||||||
; (et CH servira … stocker la meilleure couleur)
|
|
||||||
xor cx,cx
|
|
||||||
|
|
||||||
MCSE_Pour_chaque_couleur:
|
|
||||||
|
|
||||||
; On calcule la diff‚rence:
|
|
||||||
|
|
||||||
; On s'occupe de la composante Rouge
|
|
||||||
xor ebx,ebx
|
|
||||||
xor eax,eax
|
|
||||||
mov bl,[esi]
|
|
||||||
mov al,Rouge
|
|
||||||
sub eax,ebx
|
|
||||||
imul eax
|
|
||||||
mov MC_DR,eax
|
|
||||||
|
|
||||||
; On s'occupe de la composante Verte
|
|
||||||
xor ebx,ebx
|
|
||||||
xor eax,eax
|
|
||||||
mov bl,[esi+1]
|
|
||||||
mov al,Vert
|
|
||||||
sub eax,ebx
|
|
||||||
imul eax
|
|
||||||
mov MC_DV,eax
|
|
||||||
|
|
||||||
; On s'occupe de la composante Bleue
|
|
||||||
xor ebx,ebx
|
|
||||||
xor eax,eax
|
|
||||||
mov bl,[esi+2]
|
|
||||||
mov al,Bleu
|
|
||||||
sub eax,ebx
|
|
||||||
imul eax
|
|
||||||
mov MC_DB,eax
|
|
||||||
|
|
||||||
; On totalise la "distance" dans EBX
|
|
||||||
mov eax,30
|
|
||||||
mul MC_DR
|
|
||||||
mov ebx,eax
|
|
||||||
|
|
||||||
mov eax,59
|
|
||||||
mul MC_DV
|
|
||||||
add ebx,eax
|
|
||||||
|
|
||||||
mov eax,11
|
|
||||||
mul MC_DB
|
|
||||||
add ebx,eax
|
|
||||||
jz MCSE_Correspond_impeccablement
|
|
||||||
|
|
||||||
cmp ebx,edi
|
|
||||||
jae MCSE_Pas_mieux
|
|
||||||
|
|
||||||
; L…, on sait que CL contient une meilleure couleur que CH
|
|
||||||
|
|
||||||
mov ch,cl ; On commence par mettre CH … CL
|
|
||||||
mov edi,ebx ; Ensuite, on peut mettre DI (meilleure diff‚rence) … jour
|
|
||||||
|
|
||||||
MCSE_Pas_mieux:
|
|
||||||
|
|
||||||
add esi,3
|
|
||||||
|
|
||||||
inc cl
|
|
||||||
jnz MCSE_Pour_chaque_couleur
|
|
||||||
|
|
||||||
; Ici, on sait que CH contient d‚j… la meilleure couleur. On va donc faire
|
|
||||||
; une sortie rapide (c'est pas bien, mais ‡a fait gagner 3 cycles)
|
|
||||||
|
|
||||||
mov al,ch
|
|
||||||
|
|
||||||
pop edi
|
|
||||||
pop esi
|
|
||||||
pop ebx
|
|
||||||
|
|
||||||
mov esp,ebp
|
|
||||||
pop ebp
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
MCSE_Correspond_impeccablement:
|
|
||||||
|
|
||||||
; Ici, on sait que CL contient la couleur qui correspond exactement aux
|
|
||||||
; exigences de l'appelant
|
|
||||||
|
|
||||||
mov al,cl
|
|
||||||
|
|
||||||
|
|
||||||
pop edi
|
|
||||||
pop esi
|
|
||||||
pop ebx
|
|
||||||
|
|
||||||
mov esp,ebp
|
|
||||||
pop ebp
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
Meilleure_couleur_sans_exclusion endp
|
|
||||||
Loading…
x
Reference in New Issue
Block a user