[ASM] un SetPixel cross-compatible

Il y a pas longtemps, voulant faire un programme en assembleur, je me heurte à un problème : ma Nspire rev AA a un écran un peu bizarre : du 240*320 contrairement à du 320*240 sur les rev antérieures à W. Pour pouvoir continuer mon programme sans casser la compatibilité avec les autres Nspires, j'ai fait une routine de setPixel (avec clipping mais possibilité de l'appeler sans clipping) compatible 320*240 et 240*320, et sous la demande de grosged, je la poste ici 
La routine en elle même est:
(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
) et appeler cette routine :
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

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
