Forum Graph100

Forum Graph100

Vous n'êtes pas identifié.

Annonce

Bonjour et bienvenue sur le nouveau Forum Graph100 !
L'intégralité des données a été transférée sur un forum PunBB et tout les comptes sont fonctionnels avec le même nom d'utilisateur et mot de passe.
Un wiki est aussi disponible avec le même compte ! N'oubliez pas de remettre votre avatar, bon surf !
Pour plus d'informations, consultez ce post.

#1 16 Jul 2002 06:13:28

casioworld
Programmeur Graph100
Lieu: Palaiseau (Essonne)
Date d'inscription: 08 Feb 2002
Messages: 1843
Site web

afficher un sprite en ASM

voila, je voudrais savoir comment on affiche un sprite en ASM. je voudrais tout savoir, si possible un exemple. merci


- http://www.casioworld.wb.st  --> plus grande base de données pour Graph100+
- http://efreidelirium.free.fr --> vive l'EFREI mdr

Hors ligne

 

#2 20 Jul 2002 11:28:50

Guest
Invité

Re: afficher un sprite en ASM

(Depuis un cybercafé pres de la plage alors vous plaignez pas...)

ben t'as 2 methodes:
-le pixel par pixel, c'est lent, un pixel = 1 octet, mais ca permet de faire des effets de transparence...
exemple:

Code:

//supposons que la fonction d'affichage de pixel soit:
void pix_blanc(char x,char y)
void pix_gris(char x,char y)
void pix_noir(char x,char y)

//et pour les couleurs:
#define COULEUR_BLANC 0
#define COULEUR_GRIS 1
#define COULEUR_NOIR 2
#define COULEUR_TRANSPARENT 3

//on a:
unsigned char sprite[8][8]{
1,1,1,1,1,1,1,1,
2,2,2,2,2,2,2,2,
3,3,3,3,3,3,3,3,
0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,
2,2,2,2,2,2,2,2,
3,3,3,3,3,3,3,3,
0,0,0,0,0,0,0,0};
//:-) c'est juste un exemple...

//et:
void sprite(char x,char y, unsigned char* sprit)
{
char i;
char j;
for(j=0;j<8;j++)
{
for(i=0;i<8;i++)
{
switch(sprit[j][i])
{
case COULEUR_BLANC:
pix_blanc(x+i,y+j)
break;
case COULEUR_GRIS:
pix_gris(x+i,y+j)
break;
case COULEUR_NOIR:
pix_noir(x+i,y+j)
break;
case COULEUR_TRANSPARENT:
default:
//on laisse le pixel precedent...
}
}
}
return;
}

C'est la methode la plus facile(MAIS PAS LA PLUS RAPIDE), et permet de gerer facilement les nivo de gris et la transparence...

-l'octet par octet: passage par l'asm quasi obligé(voir dans un post résté sur le furom normal pour le code[le nom du post contient le mot sprite]) MAIS EXTREMEMENT PLUS RAPIDE...
par contre, plus difficile de gerer transparence et niveaux de gris)

Sinon attendre debut septembre ca m'a donné envie de faire un tuto, et vu que je suis en vacances je peux pas pour l'instant...

 

#3 20 Jul 2002 11:37:20

mastermage
Magicien G100
Lieu: Charleville-Mézières,Compiègne
Date d'inscription: 31 Jan 2002
Messages: 1008

Re: afficher un sprite en ASM

(c'est moi mastermage ce forum m'a encore deco)

EXCUSE MOI j'avais pas vu "en asm"

g ressorti mon post...

Mode d'emploi: compiler avec NASM en .obj,
et utiliser avec N'importe quoi... OU copier le code assembleur dans une fonction...

En utilisant par exemple
Code:

Code:

unsigned char monsprite[8]={ 
0xAA, //10101010 
0x55, //01010101 
0xAA, //10101010 
0x55, //01010101 
0xFF, //11111111 
0x00, //00000000 
0xFF, //11111111 
0x00}; //00000000 

sprite8or(20,39,monsprite); 
 

Voila vous compilez ca(le code ci-dessous) avec nasm (ne prenez que les fonctions necessaires...) pour en faire un .obj, et apres on peut le linker avec des programmes faits avec nasm ou turbo c(parce qu'il faut savoir que turbo c rajoute un "_" (sans les ") avant chaque nom, quand on ecrit sprite8(...) turbo c ecrit _sprite8) voila pour les questions repondez au post.

ne vous inquietez pas pour la taille de la routine, c'est beaucoup lus rapide (meme si c'est pas optimisé).

les _specialLeft et les _SpecialRight sont a garder avec la routine principale, ils gerent les bord gauche et droite de l'ecran...

Code:

Code:

SEGMENT _TEXT class=CODE 

GLOBAL _Sprite8 
GLOBAL _Sprite8or 
GLOBAL _Sprite8xor 

GLOBAL _Sprite8_noclip 
GLOBAL _Sprite8or_noclip 
GLOBAL _Sprite8xor_noclip 

;------------> Sprite8 <----------- 
;Affiche le sprite8 à DS:SI 
;DX=y CX=x 
;registres détruits: AX,BX,CX,DX,SI,DI 
;---------------------------------- 
;void Sprite8(int x,int y,void* spr); 

_Sprite8: 
   mov cx,[sp+2] 
   mov dx,[sp+4] 
   mov si,[sp+6] 

Sprite8: 
   mov di,1023 
   mov bx,8 

   cmp dx,0 
   jge .clippedTop 
    
   add si,dx 
   add bx,dx 
   xor dx,dx 
   cmp bx,0 
   jg .clippedy 
   ret 
.clippedTop: 
   cmp dx,56 
   jle .clippedy 
    
   mov ax,dx 
   sub ax,56 
   sub bx,ax 
   jg .clippedy 
   ret 
.clippedy: 
   sub di,dx 
   cmp cx,0 
   jge .OKLeft 
   jmp Sprite8_SpecialLeft 
.OKLeft: 
   cmp cx,120 
   jl .OKRight 
   jmp Sprite8_SpecialRight 
.OKRight: 
   sub di,64 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
.loopdisplay: 
   xor al,al 
   or ah,0xff 
   shr ax,cl 
   and [es:di+bx],ah 
   and [es:di+bx+64],al 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   or [es:di+bx],al 
   or [es:di+bx+64],ah 
   dec bx 
   cmp bx,dx 
   jne .loopdisplay 
   ret 
    
Sprite8_SpecialRight: 
   cmp cx,128 
   jl .OKclipped 
   ret 
.OKclipped: 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
.loopdisplay: 
   xor al,al 
   or ah,0xff 
   shr ax,cl 
   and [es:di+bx],al 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   xor [es:di+bx],ah 
   dec bx 
   cmp bx,dx 
   jne .loopdisplay 
   ret 

Sprite8_SpecialLeft: 
   cmp cx,-8 
   jg .OKclipped 
   ret 
.OKclipped: 
   add cx,8 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
.loopdisplay: 
   xor al,al 
   or ah,0xff 
   shr ax,cl 
   and [es:di+bx],ah 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   xor [es:di+bx],al 
   dec bx 
   cmp bx,dx 
   jne .loopdisplay 
   ret 

;void Sprite8or(int x,int y,void* spr); 

_Sprite8or: 
   mov cx,[sp+2] 
   mov dx,[sp+4] 
   mov si,[sp+6] 

Sprite8or: 
   mov di,1023 
   mov bx,8 

   cmp dx,0 
   jge .clippedTop 
    
   add si,dx 
   add bx,dx 
   xor dx,dx 
   cmp bx,0 
   jg .clippedy 
   ret 
.clippedTop: 
   cmp dx,56 
   jle .clippedy 
    
   mov ax,dx 
   sub ax,56 
   sub bx,ax 
   jg .clippedy 
   ret 
.clippedy: 
   sub di,dx 
   cmp cx,0 
   jge .OKLeft 
   jmp Sprite8or_SpecialLeft 
.OKLeft: 
   cmp cx,120 
   jl .OKRight 
   jmp Sprite8or_SpecialRight 
.OKRight: 
   sub di,64 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
.loopdisplay: 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   or [es:di+bx],al 
   or [es:di+bx+64],ah 
   dec bx 
   cmp bx,dx 
   jne .loopdisplay 
   ret 
    
Sprite8or_SpecialRight: 
   cmp cx,128 
   jl .OKclipped 
   ret 
.OKclipped: 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
.loopdisplay: 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   xor [es:di+bx],ah 
   dec bx 
   cmp bx,dx 
   jne .loopdisplay 
   ret 

Sprite8or_SpecialLeft: 
   cmp cx,-8 
   jg .OKclipped 
   ret 
.OKclipped: 
   add cx,8 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
.loopdisplay: 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   xor [es:di+bx],al 
   dec bx 
   cmp bx,dx 
   jne .loopdisplay 
   ret 

;void Sprite8xor(int x,int y,void* spr); 

_Sprite8xor: 
   mov cx,[sp+2] 
   mov dx,[sp+4] 
   mov si,[sp+6] 

Sprite8xor: 
   mov di,1023 
   mov bx,8 

   cmp dx,0 
   jge .clippedTop 
    
   add si,dx 
   add bx,dx 
   xor dx,dx 
   cmp bx,0 
   jg .clippedy 
   ret 
.clippedTop: 
   cmp dx,56 
   jle .clippedy 
    
   mov ax,dx 
   sub ax,56 
   sub bx,ax 
   jg .clippedy 
   ret 
.clippedy: 
   sub di,dx 
   cmp cx,0 
   jge .OKLeft 
   jmp Sprite8xor_SpecialLeft 
.OKLeft: 
   cmp cx,120 
   jl .OKRight 
   jmp Sprite8xor_SpecialRight 
.OKRight: 
   sub di,64 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
.loopdisplay: 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   or [es:di+bx],al 
   or [es:di+bx+64],ah 
   dec bx 
   cmp bx,dx 
   jne .loopdisplay 
   ret 
    
Sprite8xor_SpecialRight: 
   cmp cx,128 
   jl .OKclipped 
   ret 
.OKclipped: 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
.loopdisplay: 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   xor [es:di+bx],ah 
   dec bx 
   cmp bx,dx 
   jne .loopdisplay 
   ret 

Sprite8xor_SpecialLeft: 
   cmp cx,-8 
   jg .OKclipped 
   ret 
.OKclipped: 
   add cx,8 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
.loopdisplay: 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   xor [es:di+bx],al 
   dec bx 
   cmp bx,dx 
   jne .loopdisplay 
   ret 

;-----------> Sprite8_noclip <----------- 
;Pareil que Sprite8, mais ne gere pas le clipping 
;Attention aux limites de l'ecran !! 
;---------------------------------------- 
;void Sprite8_noclip(int x,int y,void* spr); 

_Sprite8_noclip: 
   mov cx,[sp+2] 
   mov dx,[sp+4] 
   mov si,[sp+6] 

Sprite8_noclip: 
   mov di,959 ;1023-64 
   mov bx,8 
   sub di,dx 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
.loopdisplay: 
   xor al,al 
   or ah,0xff 
   shr ax,cl 
   and [es:di+bx],ah 
   and [es:di+bx+64],al 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   or [es:di+bx],al 
   or [es:di+bx+64],ah 
   dec bx 
   cmp bx,dx 
   jne .loopdisplay 
   ret 

;void Sprite8or_noclip(int x,int y,void* spr); 

_Sprite8or_noclip: 
   mov cx,[sp+2] 
   mov dx,[sp+4] 
   mov si,[sp+6] 

Sprite8or_noclip: 
   mov di,959 ;1023-64 
   mov bx,8 
   sub di,dx 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
.loopdisplay: 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   or [es:di+bx],al 
   or [es:di+bx+64],ah 
   dec bx 
   cmp bx,dx 
   jne .loopdisplay 
   ret 

;void Sprite8xor_noclip(int x,int y,void* spr); 

_Sprite8xor_noclip: 
   mov cx,[sp+2] 
   mov dx,[sp+4] 
   mov si,[sp+6] 

Sprite8xor_noclip: 
   mov di,959 ;1023-64 
   mov bx,8 
   sub di,dx 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
.loopdisplay: 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   xor [es:di+bx],al 
   xor [es:di+bx+64],ah 
   dec bx 
   cmp bx,dx 
   jne .loopdisplay 
   ret

Hors ligne

 

#4 20 Jul 2002 13:53:43

C@siomax
Programmeur Graph100
Lieu: Grenoble, au QG de fmw-product
Date d'inscription: 03 Feb 2002
Messages: 3042
Site web

Re: afficher un sprite en ASM

En fait si g bien compris il suffit de mettre: (en C)

Code:

SEGMENT _TEXT class=CODE 

GLOBAL _Sprite8 
GLOBAL _Sprite8or 
GLOBAL _Sprite8xor 

GLOBAL _Sprite8_noclip 
GLOBAL _Sprite8or_noclip 
GLOBAL _Sprite8xor_noclip 

void Sprite8(int x,int y,void* spr)
{

copier-coller la routine

}

et c'est bon?

Sinon comment on peut gérer des niveausx de gris avec cette routine?


:mrd: :mrd:
.·´¯`·.¸.-> Casiomax <-·´¯`·.¸.·

Statut: indéfini

Hors ligne

 

#5 20 Jul 2002 16:26:05

casioworld
Programmeur Graph100
Lieu: Palaiseau (Essonne)
Date d'inscription: 08 Feb 2002
Messages: 1843
Site web

Re: afficher un sprite en ASM

tu fou

GLOBAL _Sprite8
GLOBAL _Sprite8or
GLOBAL _Sprite8xor

si tu veux le clipping
et

GLOBAL _Sprite8_noclip
GLOBAL _Sprite8or_noclip
GLOBAL _Sprite8xor_noclip

t'as pas besoin de mettre les deux. Mais sinon tu as compris.
C'est en fait le clipping ????
C'est code en base quoi OxAA (ce qui remplace les 01010101 du sprite)???
Ca serait pas poosible d'avoir une fonction quiinverse les pixels ??? e trouve ca plus facile pour effacer un element du decor.
merci


- http://www.casioworld.wb.st  --> plus grande base de données pour Graph100+
- http://efreidelirium.free.fr --> vive l'EFREI mdr

Hors ligne

 

#6 20 Jul 2002 16:52:46

C@siomax
Programmeur Graph100
Lieu: Grenoble, au QG de fmw-product
Date d'inscription: 03 Feb 2002
Messages: 3042
Site web

Re: afficher un sprite en ASM

les globals c de l'asm non? En fait j'y comprends que dalle! Ni à l'hexa ni à l'asm!

Donc si tu  (ou qqn d'autre) pouvait mettre un exemple CONCRET en C ce serait pas mal, et ça aiderait plein de monde.


:mrd: :mrd:
.·´¯`·.¸.-> Casiomax <-·´¯`·.¸.·

Statut: indéfini

Hors ligne

 

#7 27 Jul 2002 13:11:43

mastermage
Magicien G100
Lieu: Charleville-Mézières,Compiègne
Date d'inscription: 31 Jan 2002
Messages: 1008

Re: afficher un sprite en ASM

yikes bon voila des explications et du code :

cool GLOBAL et SEGMENT c pour nasm

:idea: le clipping et une methode permettant de ne pas afficher les pixels hors de l'ecran, car lorsque cela arrive les calculs sont faux et des octets peuvent etre ecrits n'importe ou dans la memoire... (pour ceux qui ont deja eux des bugs graphiques avec pong de basbak c ca)

:arrow: le clipping prend du temps donc utilisez les fonctions sans le clipping si vous etes sur que ca debordera pas.

:arrow: sinon sous turboc on doit ecrire en decimal ou en hexadecimal(base 16)
une valeur en hexa est tjs precedee de 0x , et chaque chiffre en hexa correspond a 4 bits, ce qui simplifie les choses.

:twisted: voila le code des fomctions sous turbo c:

Code:

//prototypes des fonctions:

void Sprite8(int x,int y,void* spr,int segm);
//affiche un sprite (utilisation de mov)
// 1 -> met le pixel a noir
// 0 -> met le pixel a blanc

void Sprite8or(int x,int y,void* spr,int segm);
//affiche un sprite, n'affiche que le noir (utilisation du OR)
// 1 -> met le pixel a noir
// 0 -> rien

void Sprite8xor(int x,int y,void* spr,int segm);
//affiche un sprite en inversant les pixels (utilisation du XOR)
// 1 -> inversion
// 0 -> rien

void Sprite8_noclip(int x,int y,void* spr,int segm);
//comme Sprite8 mais ne gere pas le clipping

void Sprite8or_noclip(int x,int y,void* spr,int segm);
//comme Sprite8or mais ne gere pas le clipping

void Sprite8xor_noclip(int x,int y,void* spr,int segm);
//comme Sprite8xor mais ne gere pas le clipping

//code des fonctions:

void Sprite8(int x,int y,void* spr,int segm)
{
asm{
   push ax
   push bx
   push cx
   push dx
   push si
   push di
   push es

   mov cx,x 
   mov dx,y 
   mov si,spr
   mov ax,segm
   mov es,ax
 
   mov di,1023 
   mov bx,8 

   cmp dx,0 
   jge sp8clippedTop 
    
   add si,dx 
   add bx,dx 
   xor dx,dx 
   cmp bx,0 
   jg sp8clippedy 
   jmp sp8end 
}
sp8clippedTop: 
asm{
   cmp dx,56 
   jle sp8clippedy 
    
   mov ax,dx 
   sub ax,56 
   sub bx,ax 
   jg sp8clippedy 
   jmp sp8end 
}
sp8clippedy: 
asm{
   sub di,dx 
   cmp cx,0 
   jge sp8OKLeft 
   jmp Sprite8_SpecialLeft 
}
sp8OKLeft: 
asm{
   cmp cx,120 
   jl sp8OKRight 
   jmp Sprite8_SpecialRight 
}
sp8OKRight: 
asm{
   sub di,64 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
}
sp8loopdisplay: 
asm{
   xor al,al 
   or ah,0xff 
   shr ax,cl 
   and [es:di+bx],ah 
   and [es:di+bx+64],al 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   or [es:di+bx],al 
   or [es:di+bx+64],ah 
   dec bx 
   cmp bx,dx 
   jne sp8loopdisplay 
   jmp sp8end 
}
    
Sprite8_SpecialRight: 
asm{
   cmp cx,128 
   jl sp8srOKclipped 
   jmp sp8end 
}
sp8srOKclipped: 
asm{
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
}
sp8srloopdisplay: 
asm{
   xor al,al 
   or ah,0xff 
   shr ax,cl 
   and [es:di+bx],al 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   xor [es:di+bx],ah 
   dec bx 
   cmp bx,dx 
   jne sp8srloopdisplay 
   jmp sp8end
}

Sprite8_SpecialLeft: 
asm{
   cmp cx,-8 
   jg sp8slOKclipped 
   jmp sp8end 
}
sp8slOKclipped: 
asm{
   add cx,8 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
}
sp8slloopdisplay: 
asm{
   xor al,al 
   or ah,0xff 
   shr ax,cl 
   and [es:di+bx],ah 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   xor [es:di+bx],al 
   dec bx 
   cmp bx,dx 
   jne sp8slloopdisplay 
}
sp8end:
asm{
   pop es
   pop di
   pop si
   pop dx
   pop cx
   pop bx
   pop ax
}
return;
} 

void Sprite8or(int x,int y,void* spr,int segm)
{
asm{
   push ax
   push bx
   push cx
   push dx
   push si
   push di
   push es

   mov cx,x 
   mov dx,y 
   mov si,spr
   mov ax,segm
   mov es,ax
 
   mov di,1023 
   mov bx,8 

   cmp dx,0 
   jge sp8orclippedTop 
    
   add si,dx 
   add bx,dx 
   xor dx,dx 
   cmp bx,0 
   jg sp8orclippedy 
   jmp sp8orend 
}
sp8orclippedTop: 
asm{
   cmp dx,56 
   jle sp8orclippedy 
    
   mov ax,dx 
   sub ax,56 
   sub bx,ax 
   jg sp8orclippedy 
   jmp sp8orend 
}
sp8orclippedy: 
asm{
   sub di,dx 
   cmp cx,0 
   jge sp8orOKLeft 
   jmp Sprite8or_SpecialLeft 
}
sp8orOKLeft: 
asm{
   cmp cx,120 
   jl sp8orOKRight 
   jmp Sprite8or_SpecialRight 
}
sp8orOKRight: 
asm{
   sub di,64 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
}
sp8orloopdisplay: 
asm{
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   or [es:di+bx],al 
   or [es:di+bx+64],ah 
   dec bx 
   cmp bx,dx
   jne sp8orloopdisplay 
   jmp sp8orend 
}
    
Sprite8or_SpecialRight: 
asm{
   cmp cx,128 
   jl sp8orsrOKclipped 
   jmp sp8orend 
}
sp8orsrOKclipped: 
asm{
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx  
}
sp8orsrloopdisplay: 
asm{
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   or [es:di+bx],ah 
   dec bx 
   cmp bx,dx
   jne sp8orsrloopdisplay 
   jmp sp8orend
}

Sprite8or_SpecialLeft: 
asm{
   cmp cx,-8 
   jg sp8orslOKclipped 
   jmp sp8orend 
}
sp8orslOKclipped: 
asm{
   add cx,8 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
}
sp8orslloopdisplay: 
asm{
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   or [es:di+bx],al 
   dec bx 
   cmp bx,dx 
   jne sp8orslloopdisplay 
}
spor8end:
asm{
   pop es
   pop di
   pop si
   pop dx
   pop cx
   pop bx
   pop ax
}
return;
} 

void Sprite8xor(int x,int y,void* spr,int segm)
{
asm{
   push ax
   push bx
   push cx
   push dx
   push si
   push di
   push es

   mov cx,x 
   mov dx,y 
   mov si,spr
   mov ax,segm
   mov es,ax
 
   mov di,1023 
   mov bx,8 

   cmp dx,0 
   jge sp8xorclippedTop 
    
   add si,dx 
   add bx,dx 
   xor dx,dx 
   cmp bx,0 
   jg sp8xorclippedy 
   jmp sp8xorend 
}
sp8xorclippedTop: 
asm{
   cmp dx,56 
   jle sp8xorclippedy 
    
   mov ax,dx 
   sub ax,56 
   sub bx,ax 
   jg sp8xorclippedy 
   jmp sp8xorend 
}
sp8xorclippedy: 
asm{
   sub di,dx 
   cmp cx,0 
   jge sp8xorOKLeft 
   jmp Sprite8xor_SpecialLeft 
}
sp8xorOKLeft: 
asm{
   cmp cx,120 
   jl sp8xorOKRight 
   jmp Sprite8xor_SpecialRight 
}
sp8xorOKRight: 
asm{
   sub di,64 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx  
}
sp8xorloopdisplay: 
asm{
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   xor [es:di+bx],al 
   xor [es:di+bx+64],ah 
   dec bx 
   cmp bx,dx 
   jne sp8xorloopdisplay 
   jmp sp8xorend 
}
    
Sprite8xor_SpecialRight: 
asm{
   cmp cx,128 
   jl sp8xorsrOKclipped 
   jmp sp8xorend 
}
sp8xorsrOKclipped: 
asm{
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx  
}
sp8xorsrloopdisplay: 
asm{
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   xor [es:di+bx],ah 
   dec bx 
   cmp bx,dx 
   jne sp8xorsrloopdisplay 
   jmp sp8xorend
}

Sprite8xor_SpecialLeft: 
asm{
   cmp cx,-8 
   jg sp8xorslOKclipped 
   jmp sp8xorend 
}
sp8xorslOKclipped: 
asm{
   add cx,8 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx  
}
sp8xorslloopdisplay: 
asm{
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   xor [es:di+bx],al 
   dec bx 
   cmp bx,dx 
   jne sp8xorslloopdisplay 
}
sp8xorend:
asm{
   pop es
   pop di
   pop si
   pop dx
   pop cx
   pop bx
   pop ax
}
return;
}

void Sprite8_noclip(int x,int y,void* spr)
{
asm{
   push ax
   push bx
   push cx
   push dx
   push si
   push di
   push es

   mov cx,x 
   mov dx,y 
   mov si,spr
   mov qx,segm
   mov es,ax

   mov di,959 ;1023-64 
   mov bx,8 
   sub di,dx 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
}
sp8ncloopdisplay: 
asm{
   xor al,al 
   or ah,0xff 
   shr ax,cl 
   and [es:di+bx],ah 
   and [es:di+bx+64],al 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   or [es:di+bx],al 
   or [es:di+bx+64],ah 
   dec bx 
   cmp bx,dx 
   jne sp8xorncloopdisplay 

   pop es
   pop di
   pop si
   pop dx
   pop cx
   pop bx
   pop ax
}
   return;
}

void Sprite8or_noclip(int x,int y,void* spr)
{
asm{
   push ax
   push bx
   push cx
   push dx
   push si
   push di
   push es

   mov cx,x 
   mov dx,y 
   mov si,spr
   mov qx,segm
   mov es,ax

   mov di,959 ;1023-64 
   mov bx,8 
   sub di,dx 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
}
sp8xorncloopdisplay: 
asm{
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   or [es:di+bx],al 
   or [es:di+bx+64],ah 
   dec bx 
   cmp bx,dx 
   jne sp8xorncloopdisplay 

   pop es
   pop di
   pop si
   pop dx
   pop cx
   pop bx
   pop ax
}
   return;
}

void Sprite8xor_noclip(int x,int y,void* spr)
{
asm{
   push ax
   push bx
   push cx
   push dx
   push si
   push di
   push es

   mov cx,x 
   mov dx,y 
   mov si,spr
   mov qx,segm
   mov es,ax

   mov di,959 ;1023-64 
   mov bx,8 
   sub di,dx 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
}
sp8xorncloopdisplay: 
asm{
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   xor [es:di+bx],al 
   xor [es:di+bx+64],ah 
   dec bx 
   cmp bx,dx 
   jne sp8xorncloopdisplay 

   pop es
   pop di
   pop si
   pop dx
   pop cx
   pop bx
   pop ax
}
   return;
}

Hors ligne

 

#8 30 Jul 2002 08:13:18

Huji
tekistekeus
Lieu: Paris
Date d'inscription: 30 Jan 2002
Messages: 1533
Site web

Re: afficher un sprite en ASM

c tellement long kon preske considerer ca comme du flood....  8O  roll


Huji http://casiounivers.free.fr/Smileys_Or/smokin.gif
No noise, Nothing but my dreams...

Hors ligne

 

#9 30 Jul 2002 10:37:06

mastermage
Magicien G100
Lieu: Charleville-Mézières,Compiègne
Date d'inscription: 31 Jan 2002
Messages: 1008

Re: afficher un sprite en ASM

yikes c pas du flood parce que c'est intelligent, que ca sert a tt le monde... en general le flood c des conneries dedans... :x

Hors ligne

 

#10 01 Aug 2002 04:20:46

C@siomax
Programmeur Graph100
Lieu: Grenoble, au QG de fmw-product
Date d'inscription: 03 Feb 2002
Messages: 3042
Site web

Re: afficher un sprite en ASM

tu devrais les débugguer tes routines! Car tu as tout fait au copier-coller!

Code:


mov qx,segmt
mov es, qx

devrait être remplacé par:

Code:

mov ax,segmt
mov es,ax

Ensuite, tu as oublié des arguments dans certaines fonctions, il faut rajouter un int segmt)

ou bien remplacer segmt par l'adresse d'un buf video mais cela va de soi.

et puis à chaque compilation il me met que l'op ":" a été ignoré!

à voir...

PS: viiite! à débugguer! c important pr moi!


:mrd: :mrd:
.·´¯`·.¸.-> Casiomax <-·´¯`·.¸.·

Statut: indéfini

Hors ligne

 

#11 01 Aug 2002 22:33:15

mastermage
Magicien G100
Lieu: Charleville-Mézières,Compiègne
Date d'inscription: 31 Jan 2002
Messages: 1008

Re: afficher un sprite en ASM

Eh oh tu croyais pas que j'allais tout reecrire...

sinon pour le "qx" c'est un peu normal je suis comme je l'ai dis plein de fois aux states et g pas l'habitude du qwerty...

Bon excuse pour les fautes...

Rajoute les int segm

Je ferai un tuto sur les sprites des que je rentrerai en france (parce que la c rien ce que g marque)

euh regarde ou il te met ": a ete ignore"

Hors ligne

 

#12 02 Aug 2002 04:17:51

C@siomax
Programmeur Graph100
Lieu: Grenoble, au QG de fmw-product
Date d'inscription: 03 Feb 2002
Messages: 3042
Site web

Re: afficher un sprite en ASM

Ah ok t'es sur un clavier qwerty c pour ça! Mais c'est pas grave, j'ai presque fini de tout débugguer, car tu avais aussi oublié de changer les labels, et je retrouvais des commandes de saut vers des labels qui n'avaient rien à voir avec la fonction! Mais bon, ça c'est pas grave du tout. En ce qui concerne les ":", je vais essayer ça: (attention pas testé>>probablement buggué)

Code:

xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   xor es:[di+bx],al 
   xor es:[di+bx+64],ah 
   dec bx 
   cmp bx,dx 
   jne sp8xorncloopdisplay 

ça c'est pour le sprite8_or_noclip(dsl si je me suis gourré dans le nom lol )

En fait j'ai modifié la déclaration de l'adresse video, le segment reste sans crochets, alors que l'offset lui en a (pense à mov es:[si],al)

Voila je vais tester ça et je vous dis

++


:mrd: :mrd:
.·´¯`·.¸.-> Casiomax <-·´¯`·.¸.·

Statut: indéfini

Hors ligne

 

#13 02 Aug 2002 04:35:52

C@siomax
Programmeur Graph100
Lieu: Grenoble, au QG de fmw-product
Date d'inscription: 03 Feb 2002
Messages: 3042
Site web

Re: afficher un sprite en ASM

C'est bon j'ai réussi à afficher correctement un sprite ne te casse plus la tête les autres on plus. Donc bougez surtout pas, je vais aller vous programmer une lib avec ces fonctions toutes bien débugguées, et pê (mais ce sera pas pour aujourd'hui) les mêmes fonctions mais pour le grayscale.

Voilà, j'y vais moi!


:mrd: :mrd:
.·´¯`·.¸.-> Casiomax <-·´¯`·.¸.·

Statut: indéfini

Hors ligne

 

#14 02 Aug 2002 10:32:56

mastermage
Magicien G100
Lieu: Charleville-Mézières,Compiègne
Date d'inscription: 31 Jan 2002
Messages: 1008

Re: afficher un sprite en ASM

Hop voila moi aussi g tout debugge lol

Code:

//prototypes des fonctions: 

void Sprite8(int x,int y,void* spr,int segm); 
//affiche un sprite (utilisation de mov) 
// 1 -> met le pixel a noir 
// 0 -> met le pixel a blanc 

void Sprite8or(int x,int y,void* spr,int segm); 
//affiche un sprite, n'affiche que le noir (utilisation du OR) 
// 1 -> met le pixel a noir 
// 0 -> rien 

void Sprite8xor(int x,int y,void* spr,int segm); 
//affiche un sprite en inversant les pixels (utilisation du XOR) 
// 1 -> inversion 
// 0 -> rien 

void Sprite8_noclip(int x,int y,void* spr,int segm); 
//comme Sprite8 mais ne gere pas le clipping 

void Sprite8or_noclip(int x,int y,void* spr,int segm); 
//comme Sprite8or mais ne gere pas le clipping 

void Sprite8xor_noclip(int x,int y,void* spr,int segm); 
//comme Sprite8xor mais ne gere pas le clipping 

//code des fonctions: 

void Sprite8(int x,int y,void* spr,int segm) 
{ 
asm{ 
   push ax 
   push bx 
   push cx 
   push dx 
   push si 
   push di 
   push es 

   mov cx,x 
   mov dx,y 
   mov si,spr 
   mov ax,segm 
   mov es,ax 

   mov di,1023 
   mov bx,8 

   cmp dx,0 
   jge sp8clippedTop 
    
   add si,dx 
   add bx,dx 
   xor dx,dx 
   cmp bx,0 
   jg sp8clippedy 
   jmp sp8end 
} 
sp8clippedTop: 
asm{ 
   cmp dx,56 
   jle sp8clippedy 
    
   mov ax,dx 
   sub ax,56 
   sub bx,ax 
   jg sp8clippedy 
   jmp sp8end 
} 
sp8clippedy: 
asm{ 
   sub di,dx 
   cmp cx,0 
   jge sp8OKLeft 
   jmp Sprite8_SpecialLeft 
} 
sp8OKLeft: 
asm{ 
   cmp cx,120 
   jl sp8OKRight 
   jmp Sprite8_SpecialRight 
} 
sp8OKRight: 
asm{ 
   sub di,64 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
} 
sp8loopdisplay: 
asm{ 
   xor al,al 
   or ah,0xff 
   shr ax,cl 
   and [es:di+bx],ah 
   and [es:di+bx+64],al 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   or [es:di+bx],al 
   or [es:di+bx+64],ah 
   dec bx 
   cmp bx,dx 
   jne sp8loopdisplay 
   jmp sp8end 
} 
    
Sprite8_SpecialRight: 
asm{ 
   cmp cx,128 
   jl sp8srOKclipped 
   jmp sp8end 
} 
sp8srOKclipped: 
asm{ 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
} 
sp8srloopdisplay: 
asm{ 
   xor al,al 
   or ah,0xff 
   shr ax,cl 
   and [es:di+bx],al 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   xor [es:di+bx],ah 
   dec bx 
   cmp bx,dx 
   jne sp8srloopdisplay 
   jmp sp8end 
} 

Sprite8_SpecialLeft: 
asm{ 
   cmp cx,-8 
   jg sp8slOKclipped 
   jmp sp8end 
} 
sp8slOKclipped: 
asm{ 
   add cx,8 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
} 
sp8slloopdisplay: 
asm{ 
   xor al,al 
   or ah,0xff 
   shr ax,cl 
   and [es:di+bx],ah 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   xor [es:di+bx],al 
   dec bx 
   cmp bx,dx 
   jne sp8slloopdisplay 
} 
sp8end: 
asm{ 
   pop es 
   pop di 
   pop si 
   pop dx 
   pop cx 
   pop bx 
   pop ax 
} 
return; 
} 

void Sprite8or(int x,int y,void* spr,int segm) 
{ 
asm{ 
   push ax 
   push bx 
   push cx 
   push dx 
   push si 
   push di 
   push es 

   mov cx,x 
   mov dx,y 
   mov si,spr 
   mov ax,segm 
   mov es,ax 

   mov di,1023 
   mov bx,8 

   cmp dx,0 
   jge sp8orclippedTop 
    
   add si,dx 
   add bx,dx 
   xor dx,dx 
   cmp bx,0 
   jg sp8orclippedy 
   jmp sp8orend 
} 
sp8orclippedTop: 
asm{ 
   cmp dx,56 
   jle sp8orclippedy 
    
   mov ax,dx 
   sub ax,56 
   sub bx,ax 
   jg sp8orclippedy 
   jmp sp8orend 
} 
sp8orclippedy: 
asm{ 
   sub di,dx 
   cmp cx,0 
   jge sp8orOKLeft 
   jmp Sprite8or_SpecialLeft 
} 
sp8orOKLeft: 
asm{ 
   cmp cx,120 
   jl sp8orOKRight 
   jmp Sprite8or_SpecialRight 
} 
sp8orOKRight: 
asm{ 
   sub di,64 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
} 
sp8orloopdisplay: 
asm{ 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   or [es:di+bx],al 
   or [es:di+bx+64],ah 
   dec bx 
   cmp bx,dx 
   jne sp8orloopdisplay 
   jmp sp8orend 
} 
    
Sprite8or_SpecialRight: 
asm{ 
   cmp cx,128 
   jl sp8orsrOKclipped 
   jmp sp8orend 
} 
sp8orsrOKclipped: 
asm{ 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx  
} 
sp8orsrloopdisplay: 
asm{ 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   or [es:di+bx],ah 
   dec bx 
   cmp bx,dx 
   jne sp8orsrloopdisplay 
   jmp sp8orend 
} 

Sprite8or_SpecialLeft: 
asm{ 
   cmp cx,-8 
   jg sp8orslOKclipped 
   jmp sp8orend 
} 
sp8orslOKclipped: 
asm{ 
   add cx,8 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
} 
sp8orslloopdisplay: 
asm{ 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   or [es:di+bx],al 
   dec bx 
   cmp bx,dx 
   jne sp8orslloopdisplay 
} 
sp8orend:
asm{ 
   pop es 
   pop di 
   pop si 
   pop dx 
   pop cx 
   pop bx 
   pop ax 
} 
return; 
} 

void Sprite8xor(int x,int y,void* spr,int segm) 
{ 
asm{ 
   push ax 
   push bx 
   push cx 
   push dx 
   push si 
   push di 
   push es 

   mov cx,x 
   mov dx,y 
   mov si,spr 
   mov ax,segm 
   mov es,ax 

   mov di,1023 
   mov bx,8 

   cmp dx,0 
   jge sp8xorclippedTop 
    
   add si,dx 
   add bx,dx 
   xor dx,dx 
   cmp bx,0 
   jg sp8xorclippedy 
   jmp sp8xorend 
} 
sp8xorclippedTop: 
asm{ 
   cmp dx,56 
   jle sp8xorclippedy 
    
   mov ax,dx 
   sub ax,56 
   sub bx,ax 
   jg sp8xorclippedy 
   jmp sp8xorend 
} 
sp8xorclippedy: 
asm{ 
   sub di,dx 
   cmp cx,0 
   jge sp8xorOKLeft 
   jmp Sprite8xor_SpecialLeft 
} 
sp8xorOKLeft: 
asm{ 
   cmp cx,120 
   jl sp8xorOKRight 
   jmp Sprite8xor_SpecialRight 
} 
sp8xorOKRight: 
asm{ 
   sub di,64 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx  
} 
sp8xorloopdisplay: 
asm{ 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   xor [es:di+bx],al 
   xor [es:di+bx+64],ah 
   dec bx 
   cmp bx,dx 
   jne sp8xorloopdisplay 
   jmp sp8xorend 
} 
    
Sprite8xor_SpecialRight: 
asm{ 
   cmp cx,128 
   jl sp8xorsrOKclipped 
   jmp sp8xorend 
} 
sp8xorsrOKclipped: 
asm{ 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx  
} 
sp8xorsrloopdisplay: 
asm{ 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   xor [es:di+bx],ah 
   dec bx 
   cmp bx,dx 
   jne sp8xorsrloopdisplay 
   jmp sp8xorend 
} 

Sprite8xor_SpecialLeft: 
asm{ 
   cmp cx,-8 
   jg sp8xorslOKclipped 
   jmp sp8xorend 
} 
sp8xorslOKclipped: 
asm{ 
   add cx,8 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx  
} 
sp8xorslloopdisplay: 
asm{ 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   xor [es:di+bx],al 
   dec bx 
   cmp bx,dx 
   jne sp8xorslloopdisplay 
} 
sp8xorend: 
asm{ 
   pop es 
   pop di 
   pop si 
   pop dx 
   pop cx 
   pop bx 
   pop ax 
} 
return; 
} 

void Sprite8_noclip(int x,int y,void* spr,int segm)
{
asm{ 
   push ax 
   push bx 
   push cx 
   push dx 
   push si 
   push di 
   push es 

   mov cx,x 
   mov dx,y 
   mov si,spr 
   mov ax,segm
   mov es,ax 

   mov di,959 //;1023-64
   mov bx,8 
   sub di,dx 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
} 
sp8xorncloopdisplay:
asm{ 
   xor al,al 
   or ah,0xff 
   shr ax,cl 
   and [es:di+bx],ah 
   and [es:di+bx+64],al 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   or [es:di+bx],al 
   or [es:di+bx+64],ah 
   dec bx 
   cmp bx,dx 
   jne sp8xorncloopdisplay 

   pop es 
   pop di 
   pop si 
   pop dx 
   pop cx 
   pop bx 
   pop ax 
} 
   return; 
}

void Sprite8or_noclip(int x,int y,void* spr,int segm)
{ 
asm{ 
   push ax 
   push bx 
   push cx 
   push dx 
   push si 
   push di 
   push es 

   mov cx,x 
   mov dx,y 
   mov si,spr 
   mov ax,segm
   mov es,ax 

   mov di,959 //;1023-64
   mov bx,8 
   sub di,dx 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
} 
sp8xorncloopdisplay: 
asm{ 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   or [es:di+bx],al 
   or [es:di+bx+64],ah 
   dec bx 
   cmp bx,dx 
   jne sp8xorncloopdisplay 

   pop es 
   pop di 
   pop si 
   pop dx 
   pop cx 
   pop bx 
   pop ax 
} 
   return; 
} 

void Sprite8xor_noclip(int x,int y,void* spr,int segm)
{ 
asm{ 
   push ax 
   push bx 
   push cx 
   push dx 
   push si 
   push di 
   push es 

   mov cx,x 
   mov dx,y 
   mov si,spr 
   mov ax,segm
   mov es,ax 

   mov di,959 //;1023-64
   mov bx,8 
   sub di,dx 
   mov ax,cx 
   and ax,0xfff8 
   shl ax,3 
   sub di,ax 
   and cx,7 
   mov dx,0 
   sub dx,bx 
   xor bx,bx 
} 
sp8xorncloopdisplay: 
asm{ 
   xor ah,ah 
   lodsb 
   xchg al,ah 
   shr ax,cl 
   xor [es:di+bx],al 
   xor [es:di+bx+64],ah 
   dec bx 
   cmp bx,dx 
   jne sp8xorncloopdisplay 

   pop es 
   pop di 
   pop si 
   pop dx 
   pop cx 
   pop bx 
   pop ax 
} 
   return; 
} 

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr