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 }; }