J'ai essaye ScrRectScroll et ScrRectShift qui sont trop lentes pour mes besoins.
J'ai fait quelques essais (ci-dessous) les scrolls verticaux sont acceptables mais les scrolls horyzontaux sont toujours insuffisants.
J'ai vraiment pas d'autres idee, donc merci de votre aide. (petite precision : je ne suis que novice en asm)
Ma methode pour le scroll horyzontal est de shifter tous les words de l'ecran.
#define LINE 30
char *scrollBuffer; // est intialise au debut du programme : malloc(LCD_SIZE-LINE);
void scrollUp(void *ptr) //plutot rapide cette fonction
{
memcpy(ptr,ptr+LINE,LCD_SIZE-LINE);
}
void scrollDown(void *ptr) //moyennement rapide
{
//je ne peux pas faire un memcpy direct car la memoire serait remplacee avant d'etre copiee
// et passer par un buffer auxiliaire est toujours plus rapide que memmove
memcpy(scrollBuffer,ptr,LCD_SIZE-LINE);
memcpy(ptr+LINE,scrollBuffer,LCD_SIZE-LINE);
}
void scrollLeft(void *screen) //rapidite vraiment merdique :'(
{
ulint ptr=screen;
asm{
movem.l d0-d2/a0,-(a7)
move.l ptr,a0
move.w #0,d0 //compteur
whill:
move.w (a0),d1
lsl.w #1,d1
addq.l #2,a0
move.w (a0),d2
and.w #0x8000,d2
cmp.w #0,d2
beq elsl
or.b #1,d1
elsl:
subq.l #2,a0
move.w d1,(a0) //modifie l'ecran
addq.l #2,a0 //prochain word a scroller
addq.w #1,d0 //incremente le compeur
cmp.w #0x780,d0
bne whill
movem.l (a7)+,d0-d2/a0
};
}
void scrollRight(void *screen) //rapidite vraiment merdique :'(
{
ulint ptr=screen;
asm{
movem.l d0-d2/a0,-(a7)
move.l ptr,a0
move.w #0,d0 //compteur
move.w #0,d2
whilr:
move.w (a0),d1
lsr.w #1,d1
cmp.w #0,d2
beq elsr
or.w #0x8000,d1
elsr:
move.w (a0),d2
move.w d1,(a0)
and.w #1,d2
addq.l #2,a0 //prochain a scroller
addq.w #1,d0 //incremente le compeur
cmp.w #0x780,d0
bne whilr
movem.l (a7)+,d0-d2/a0
};
}