
(en plus il est dans le grand sud montpellierain

Orion_ (./21) :
PpHd > et tu n'a jamais rien releasé ?
; Affichage d'un sprite par transparence sans clipping en mode 16 bits !
; In:
; r0 = x
; r1 = y
; r2 = Sprite ptr
; r3 = Screen Ptr
EXPORT DrawSprite
DrawSprite
stmfd sp!,{r4,r5,r6,lr} ; Preserve registres
ldrh r4,[r2],#2 ; Charge Taille Y
ldrh lr,[r2],#2 ; Charge Taille X
rsb r0,r0,r0,lsl #4 ; x * 15
add r0,r1,r0,lsl #4 ; x = 16 * (15 * x) + y
add r3,r3,r0,lsl #1 ; r3 = Screen ptr
mov r5,#240*2 ; Taille d'une colonne
mov r1,#0
sub r5,r5,r4,lsl #1 ; Correction au ptr d'écran apres scan d'1 ligne
LoopX
mov r6,r4 ; Recharge nbr de pixel verticaux
LoopY
ldrh r0,[r2],#2 ; Charge pixel
cmp r0,r1 ; Transparent ?
strneh r0,[r3] ; Affichage
add r3,r3,#2 ; Avancee ptr ecran
subs r6,r6,#1 ; Boucle Y
bne LoopY
add r3,r3,r5 ; Increment X
subs lr,lr,#1 ; Boucle X
bne LoopX
ldmfd sp!,{r4,r5,r6,pc} ; Pop et retour a l'appelant
; Affichage d'un sprite par transparence sans clipping en mode 16 bits !
; Sprite de hauteur x16
; In:
; r0 = x
; r1 = y
; r2 = Sprite ptr
; r3 = Screen Ptr
EXPORT DrawSprite2
DrawSprite2
stmfd sp!,{r4-r12,lr} ; Preserve registres
ldrh r11,[r2],#2 ; Charge Taille Y
ldrh lr,[r2],#2 ; Charge Taille X
rsb r0,r0,r0,lsl #4 ; x * 15
add r0,r1,r0,lsl #4 ; x = 16 * (15 * x) + y
add r1,r3,r0,lsl #1 ; r3 = Screen ptr
mov r0,#-1
mov r0,r0,lsl #16
mov r0,r0,lsr #16 ; r0 = $0000FFFF
mov r11,r11,lsr #4 ; Nbr pixel verticaux /16
LoopX2
mov r12,r11 ; Recharge nbr de pixel verticaux / 16
LoopY2
; Nouvelle version
ldmia r2!,{r3-r10} ; Load data from sprite - 16 pixels
tst r3,r0 ; Test transparent pixel r0 = 0xFFFF
strneh r3,[r1,#0]
movs r3,r3,lsr #16 ; Test transparent pixel r0 = 0xFFFF
strneh r3,[r1,#2]
tst r4,r0 ; Test transparent pixel
strneh r4,[r1,#4]
movs r4,r4,lsr #16 ; Test transparent pixel
strneh r4,[r1,#2+4]
tst r5,r0 ; Test transparent pixel
strneh r5,[r1,#8]
movs r5,r5,lsr #16 ; Test transparent pixel
strneh r5,[r1,#2+8]
tst r6,r0 ; Test transparent pixel
strneh r6,[r1,#12]
movs r6,r6,lsr #16 ; Test transparent pixel
strneh r6,[r1,#2+12]
tst r7,r0 ; Test transparent pixel
strneh r7,[r1,#16]
movs r7,r7,lsr #16 ; Test transparent pixel
strneh r7,[r1,#2+16]
tst r8,r0 ; Test transparent pixel
strneh r8,[r1,#20]
movs r8,r8,lsr #16 ; Test transparent pixel
strneh r8,[r1,#2+20]
tst r9,r0 ; Test transparent pixel
strneh r9,[r1,#24]
movs r9,r9,lsr #16 ; Test transparent pixel
strneh r9,[r1,#2+24]
tst r10,r0 ; Test transparent pixel
strneh r10,[r1,#28]
movs r10,r10,lsr #16 ; Test transparent pixel
strneh r10,[r1,#2+28]
add r1,r1,#32
subs r12,r12,#1 ; Boucle Y
bne LoopY2
add r1,r1,#240*2 ; Next Colonne
subs lr,lr,#1 ; Boucle X
sub r1,r1,r11,lsl #5 ; Minus what we have already done
bne LoopX2
ldmfd sp!,{r4-r12,pc} ; Pop et retour a l'appelant
...sans passer par le bios de la GP32...
...la gestion d'init du LCD et des surfaces graphique ce fait au niveau du BIOS...
non c'est le bios, pas le firmware, y'a 2 partie