π
<-
Chat plein-écran
[^]

Gérer la compatibilité écran (mono/couleur)+(click/touch)Pad

C, C++, ASM...

Gérer la compatibilité écran (mono/couleur)+(click/touch)Pad

Message non lude grosged » 18 Aoû 2017, 10:18

Je me suis penché sur un moyen de programmer en ASM ARM, de sorte que l'on puisse exécuter le programme sur TI-nspire avec écran couleur ou monochrome, avec clavier ClickPad ou TouchPad.

J'ai donc réécrit ma routine de gestion clavier dans cette optique:
Code: Tout sélectionner
GETKEY: push    {r0-r4,lr}              @ EN SORTIE: R12=une touche entre 1 et 88 (=0 si rien)
        mov     r3,#77                  @ au départ , val de rang = 77
        mov     r12,#0                  @ r12=0 (et le restera si aucune touche pressée)
        adr     r0,x900e001e
        ldr     r0,[r0]                 @ r0=#0x900e001e
        ldr     r2,[r0,#-2]             @ Testons le bit10 en #0x900e001c ...(dédié à aucune touche)
        tst     r2,#0b10000000000       @ On n'est pas sur modèle clickpad?
        beq     touchp                  @ alors passons à la gestion touchpad!
clickp: ldr     r4,[r0,#-0x1e]          @ Comme les modèles clickpad sont
        orr     r1,r4,#1                @ par défaut en mode "single scan",
        str     r1,[r0,#-0x1e]          @ on mets le  bit0 à 1 pour passer en mode "continuous scan".
        adr     r1,b11111111111
        ldr     r1,[r1]                 @ masque pour ne conserver que les bits 0 à 10
whichk: ldrh    r2,[r0],#-2             @ dans r2 l'état d'une rangée de touches
        mvn     r2,r2                   @ inverse r2 (car sur clickpad, bit à 0 = touche pressée)
        and     r2,r2,r1                @ Seuls les 11 premiers bits nous intéressent
        clz     r2,r2                   @ En partant du bit 31, combien de bits nuls avant un bit à 1 ?..
        rsbs    r2,r2,#32               @ 32-résultat =valeur entre 1 et 11 si l'une des touches est pressée.
        addne   r12,r2,r3               @ non nul?..Alors r12=valeur + rang
        subs    r3,r3,#11               @ avant d'analyser le paquet de 11bits précédant, rang=rang-11
        bhs     whichk                  @ Continue tant que r3 sup ou =0
        str     r4,[r0,#-0x0e]          @ Remets le clavier en mode "single scan"
        pop     {r0-r4,pc}              @ restaure r0-r4 &  pc=lr  pour quitter la routine     
touchp: ldrh    r2,[r0],#-2             @ on démarre en offset $1e
        clz     r2,r2                   @En partant du bit 31, combien de bits nuls avant un bit à 1 ?..
        rsbs    r2,r2,#32               @ 32-résultat =valeur entre 1 et 11 si l'une des touches est pressée
        addne   r12,r2,r3               @ non nul?..Alors r12=valeur + rang
        subs    r3,r3,#11               @ avant d'analyser le paquet de 11bits précédant, rang=rang-11
        bhs     touchp                  @ Continue tant que r3 sup ou =0
        pop     {r0-r4,pc}
       
x900e001e:      .long   0x900e001e     
b11111111111:   .long   0b11111111111


J'ai remarqué que certaines touches sont codées exactement de la même manière (même emplacement dans le tableau)

Image
(tableau du clavier TouchPad)
ça permet d'éviter de devoir utiliser d'autres touches qu'initialement prévu selon qu'un modèle ou l'autre est utilisé ;)


En ce qui concerne la détection du type d'écran, j'ai dû ruser un peu... ;)
Les modèles monochromes ayant un contrôleur LCD "PL110" , et "PL111" pour les modèles couleurs, Il en résulte des différences d'adressage.
En effet le registre de contrôle LCD et le registre de "masquage d'interruption" sont inversement placés :p
Voici comment , en tout début de programme, j'ai procédé:

Code: Tout sélectionner
mov   r0,#0xc000001c   @ =registre de contrôle LCD sur monochrome
   ldr   r1,[r0]
   tst   r1,#4      @ bit2 de r0 à 1 ? (ç-à-d en mode 4bpp?)
   subeq   r0,r0,#4      @ sinon on est sur couleur , alors AdrLcdCtrl=#0xc0000018
Dernière édition par grosged le 19 Avr 2019, 12:53, édité 4 fois.
Avatar de l’utilisateur
grosgedVIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 30.2%
 
Messages: 770
Images: 75
Inscription: 14 Sep 2011, 12:29
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: Gérer la compatibilité écran (mono/couleur)+(click/touch

Message non lude grosged » 20 Déc 2017, 17:46

EDIT: j'ai légèrement modifié cette routine : dorénavant, le test pour connaître le type de clavier s'effectue au moyen d'une 'case' non dédiée (ce qui est beaucoup plus sûr !)
C'est précisément le bit10 en adresse 900E001C ;)

(voir https://hackspire.org/index.php/Keypads )
Avatar de l’utilisateur
grosgedVIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 30.2%
 
Messages: 770
Images: 75
Inscription: 14 Sep 2011, 12:29
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile


Retourner vers Native: Ndless, Linux, ...

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 10 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1480 utilisateurs:
>1443 invités
>32 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)