[ARM926EJ-S] Routine pour le scrolling

Bonjour,
Je reviens avec une routine pour faire du scrolling.
Je ne vous donne que celle qui décale l'écran de façon horizontale, enfin, de gauche a droite.
Le scrollsave me sert autant pour la routine verticale que horizontale, c'est pour cela qu'elle fait 320*2 octets.
Maintenant, je voudrais essayer de faire en sorte qu'elle prenne encore une fois, un parametre en r1, mais que si r1 est négatif, que ca fasse dans l'autre sens.
Et aussi, l'optimiser un max pour qu'elle soit (beaucoup) plus rapide
Voila, merci d'avance pour votre aide
Je reviens avec une routine pour faire du scrolling.
Je ne vous donne que celle qui décale l'écran de façon horizontale, enfin, de gauche a droite.
- Code: Select all
scrollv
stmfd sp!, {r0-r12, lr}
;r1 -> décalage en nombre de fois
mov r10, r1
sub r10, r10, #1
scrollvloop
mov r0, #0xC0000010
ldr r0, [r0]
mov r1, #320
sub r1, r1, #1
mov r2, #0
adr r3, scrollsave
scrollvloop1
mov r4, #0
mov r5, #0
add r5, r5, r2, lsl #1
add r4, r4, r1, lsl #1
add r4, r4, r2, lsl #9
add r4, r4, r2, lsl #7
ldrh r6, [r0, r4]
strh r6, [r3, r5]
add r2, r2, #1
cmp r2, #240
bllt scrollvloop1
sub r1, r1, #1
scrollvloop2
mov r2, #0
scrollvloop3
mov r4, #0
mov r5, #0
add r6, r1, #1
add r4, r4, r2, lsl #9
add r4, r4, r2, lsl #7
mov r5, r4
add r4, r4, r1, lsl #1
add r5, r5, r6, lsl #1
ldrh r6, [r0, r4]
strh r6, [r0, r5]
add r2, r2, #1
cmp r2, #240
bllt scrollvloop3
subs r1, r1, #1
blpl scrollvloop2
mov r2, #0
adr r3, scrollsave
scrollvloop4
mov r4, #0
mov r5, #0
add r5, r5, r2, lsl #1
add r4, r4, r2, lsl #7
add r4, r4, r2, lsl #9
ldrh r6, [r3, r5]
strh r6, [r0, r4]
add r2, r2, #1
cmp r2, #240
bllt scrollvloop4
subs r10, r10, #1
blpl scrollvloop
ldmfd sp!, {r0-r12, pc}
scrollsave
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
dcw 0,0,0,0,0,0,0,0,0,0
Le scrollsave me sert autant pour la routine verticale que horizontale, c'est pour cela qu'elle fait 320*2 octets.
Maintenant, je voudrais essayer de faire en sorte qu'elle prenne encore une fois, un parametre en r1, mais que si r1 est négatif, que ca fasse dans l'autre sens.
Et aussi, l'optimiser un max pour qu'elle soit (beaucoup) plus rapide

Voila, merci d'avance pour votre aide