
La routine en elle même est:
- Code: Select all
; arguments : r0 = lcd base, r1 = x, r2 = y, r11 = y
setPixel:
cmp r1, #0
bxlt lr
cmp r1, #320
bxge lr
cmp r2, #0
bxlt lr
cmp r2, #240
bxge lr
setPixelNoClip:
stmfd sp!, {r0,r3,r4}
ldr r3, =.LCD_T
ldrb r4, [r3]
cmp r4, #2
beq setPixel240x320
cmp r4, #6
beq setPixel240x320
setPixel320x240:
add r0, r0, r1, lsl #1
add r0, r0, r2, lsl #9
add r0, r0, r2, lsl #7
strh r11, [r0]
b endsetpx
setPixel240x320:
add r0, r0, r2, lsl #1
mov r3, #480
mla r0, r1, r3, r0
strh r11, [r0]
endsetpx:
ldmfd sp!, {r0,r3,r4}
bx lr
(je sais y'a des optis à faire, à faire avec le temps)
Pour pouvoir l'utiliser, il faut définir une "variable" LCD_T quelque part (je la met à la toute fin du code perso

- Code: Select all
checkLcdType:
stmfd sp!, {r0,lr}
bl lcd_type
ldr r3, =.LCD_T
strb r0, [r3]
ldmfd sp!, {r0,pc}
Cette routine vérifie l'écran pour savoir si c'est du 320*240 ou du 240*320 (enfin pas que, ça gère aussi les monochromes et autres écrans chelous qu'il peut y avoir)
Un truc qui serait bien aussi maintenant est d'ajouter la compatibilité monochrome au setPixel

Voilà, maintenant faites en ce que vous voulez
