1

pourrait m'aider a optimiser ça?

void XChar_XOR(short x,short y,struct CHAR c,unsigned char *Plane)
{
register short i=0;
register unsigned char a,b;
y += c.Yoffset; //decalage horyzontal par rapport au 'top' de la chaine
x--;
y--;
b=(x&7);
Plane += (y<<5)-(y<<1)+(x>>3); //adresse de la premiere ligne du sprite
while(i<c.hau)
{
a=*(c.map+i);
	*Plane ^= a>>b;         //avant la séparation du sprite entre 2 Bytes
	*(Plane+1) ^= a<<(8-b); //après la séparation
	Plane +=30; //une ligne au dessous
	i++;
}
}


qui donne en asm:
.globl XChar_XOR
XChar_XOR:
	link.w %a6,#0
	movm.l #0x1c00,-(%sp)
	sub.l %a1,%a1
	move.b 12(%a6),%d0
	ext.w %d0
	add.w 10(%a6),%d0
	move.w 8(%a6),%d2
	subq.w #1,%d2
	subq.w #1,%d0
	move.b %d2,%d5
	and.b #7,%d5
	move.w %d0,%d1
	lsl.w #1,%d1
	lsl.w #5,%d0
	sub.w %d1,%d0
	asr.w #3,%d2
	add.w %d2,%d0
	move.w %d0,%a0
	move.l 28(%a6),%d1
	add.l %a0,%d1
	move.b 14(%a6),%d0
	ext.w %d0
	cmp.w %a1,%d0
	jble .L27
	clr.w %d3
	clr.w %d2
	move.w %d0,%d4
	move.l %d1,%a0
	.even
.L28:
	move.b 15(%a6,%a1.w),%d3
	move.b %d5,%d2
	move.w %d3,%d0
	asr.w %d2,%d0
	eor.b %d0,(%a0)
	moveq.l #8,%d1
	sub.w %d2,%d1
	move.w %d3,%d0
	lsl.w %d1,%d0
	eor.b %d0,1(%a0)
	lea (30,%a0),%a0
	addq.w #1,%a1
	cmp.w %a1,%d4
	jbgt .L28
.L27:
	movm.l (%sp)+,#0x38
	unlk %a6
	rts
	.even


sachant que:
struct CHAR           //forme d'un caractère
{
char Yoffset;         //decalage par rapport  au 'top'
char lar;             //largeur
char hau;             //hauteur
unsigned char map[12];//sprite
};
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay

2

merci...
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay

3

j'imagine que tout le plaisir est pour toi?
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay

4

Bon perso j'ai fait ca rapidement je sais meme pas si ca marche.. mais si tu veux un truc rapide, faut vire la structurewink))

void XChar_XOR(short x,short y,struc CHAR,unsigned char* plan)
{
    register short					y2= y+c.Yoffset-1+c.hau,i=c.hau;
    register long           plant = (long)plan+(y2<<5)-(y2+y2)+((x-->>3)&0xfffe);
    register unsigned short lsr  = 24-(x&15);

while(i--) { *(long*)plant^=*(c.map+i)<<lsr; plant -=30; }
}

[edit]Edité par TiMad le 24-08-2001 à 01:06:38[/edit]
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

5

[pollux] erf en C sinon c'est pas interressant..
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

6

TiMad> Pk ?

7

bof
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

8

non, non, l'asm c'est parfait!
mais je debute...
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay

9

je debute en asm!
[pollux]> je veux bien mettre
ton nom ds la page readme mais pas en commentaire.
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay

10

merci pollux!
PS:comment je fais pour OR?
(faut remplacer eor par koi?)
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay

11

[pollux]>oula! ça deconne ton truc!eek
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay

12

non, ça c'est bon!
j'ai rectifie en rajoutant un
 add.w #1,%a1

avant le
 move.b (a1)+,d0 /* car d0.w&-256 == 0 */
 subq.w #1,d0
loop:


car ma structure a 3 char avant le sprite et non pas 2
mais je ne comprends pas pkoi mais ça affiche le sprite avec un x qui ne correspond pas:
soit c'est bon, soit 1Byte avant ou un Byte apres.
alors comme c'est pour afficher des strings,
"salut les gars"
peut devenir:
"astuls elg ras"
voila.
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay

13

On peut faire plus rapide en C mais bon...
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

14

timad>je vais essayer ta routine
je posterait le "bench"
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay

15

Non pas celle qui est sur le forum.. d'ailleur je sais meme pas si elle marchewink
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

16

en effet, elle marche pas!
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay