Tutorial 8
Utilisation de Getkey pour détecter l'appui sur une touche

Survol
   
Ce tutorial va vous montrer comment utiliser le ROM call _getkey

Qu'est-ce que  _Getkey?
   
_Getkey est un ROM call similaire à son homologue en TI-Basic, getkey. Getkey surveille s'il y a pression d'une touche du clavier. Ensuite, dépendamment de ce que vous voulez faire, getkey peut afficher le code de la touche que vous avez pressée, exécuter une autre commande, ou faire une pause dans le programme.

Programmation
   
Ce programme utilise _getkey pour faire une pause.


#define B_CALL(xxxx)   rst 28h \ .dw xxxx
#define B_JUMP(xxxx) call 50h \ .dw xxxx

_clrlcdfull                      =4540h             ;Les définitions et constantes habituelles, regardez dans la section Nouvelles Commandes pour plus d'information
_homeup                      =4558h
_getkey                        =4972h
 
            .org     9D95h

 
            B_CALL(_homeup)                    ;Appelle l'écran de démarrage (home screen)
            B_CALL(_getkey)                      ;Fait une pause jusqu'à la prochaine pression d'une touche
            B_CALL(_clrlcdfull)                   ;Après la pression d'une touche, efface l'écran. Ou vous pouvez utiliser n'importe quelle autre commande de purge d'écran (Tutorial 3)
            ret                                            ;Retour à l'état de bonne vieille calculatrice

 
.end
END


Nouvelles Commandes
    _getkey - Détecte la pression d'une touche, enregistre son code si nécessaire


Programmation
    Nous allons faire notre propre programme qui affichera le code hexadécimal (hex) de la touche pressée. Le code pour ce programme est ici. Il a peut-être l'air compliqué, mais ne l'est pas. Je vais commenter le programme régulièrement pour ne pas vous perdre. Un concept important à comprendre est la "pile". La pile retient les nombres pour une utilisation ou une référence future. Dans ce programme, elle retient le code hex de chaque touche pressée.

 

 #define B_CALL(xxxx)  rst 28h \ .dw xxxx
#define B_JUMP(xxxx) call 50h \ .dw xxxx
 
_clrlcdf                         =4540h             ;Les définitions et constantes habituelles, regardez dans la section Nouvelles Commandes pour plus d'information
_homeup                      =4558h
_puts                           =450Ah
_putc                           =4504h
_getkey                        =4972h
_newline                       =452Eh
 
 
            .org      9D95h
 
            B_CALL(_clrlcdf)                        ; Vide l'écran
            B_CALL(_homeup)                     ; Place le curseur sur la première ligne
            ld         hl,txt1                            ; Affiche le message du label txt1
            B_CALL(_puts)
            B_CALL(_getkey)                       ; Détecte la pression d'une touche
            push     af                                  ; Enregistre la pression de la touche dans le registre a
            B_CALL(_clrlcdf)                         ; Vide l'écran encore
            B_CALL(_homeup)                      ; Réaffiche l'écran home
            ld         hl,txt2                            ; Affiche le message 2
            B_CALL(_puts)                           ; Affiche le texte
            pop       af                                 ; restaure le registre (reg) a
            call       dishex                          ; Suit les commandes du label dishex pour trouver le code hex de la touche
            B_CALL(_getkey)                      ; fait une pause jusqu'à la pression de touche suivante
            B_CALL(_newline)                     ; Renvoie le curseur à la ligne suivante
            ret                                            ;Retourne au TI-OS
 
dishex: push     af                                 ; garde une copie de la valeur
            and       0F0h                            ; supprimer le quartet inférieur (demi-octet)
            rra                                           ; décaler le quartet de 4 positions vers la droite
            rra
            rra
            rra
            ld         l,a                                ; Affiche le code hex de la touche dans Str1
            ld         h,0
            ld         de,hexStr
            push     de                                ; garder pour les autres quartets / keep for other nibbler
            add       hl,de                            ; add offset to hexStr address
            ld         a,(hl)                            ; trouve le caractère ASCII correct dans la chaîne ci-dessous pour afficher le code hex de la touche pressée.
 
bcall(_putc)                                          ; affiche le caractère
            pop       de
            pop       af
            and       0Fh                              ; effacer le quartet supérieur
            ld         l,a
            ld         h,0
            add       hl,de
            ld         a,(hl)
            bcall(_putc)
            ret                                           ; Retourne au TI-OS
 
hexStr .db       "0123456789ABCDEF"  ; Caractères utilisés pour afficher le code hex de la touche
txt1      .db       "Push a key.",0
txt2      .db       "Key code: ",0

.end
END

Nouvelles Commandes
         _putc - Affiche un caractère et avance le curseur
         push - Pousse un nombre sur la pile.
         pop - Enlève un nombre de la pile.
         call - Cela ressemble à la macro de TI-83, et sert pratiquement à la même chose, sauf que pour la TI-83 Plus, il renvoie le programme à un certain  label.

Conclusion
     Ce programme n'était pas exactement "ultra-rapide". Cela est du au fait que la commande _Getkey scannait le clavier entier pour rechercher l'appui d'une touche. Plus tard nous ferons un programme comme celui-ci, seulement nous réduirons la zone de clavier dans laquelle _Getkey cherchera l'appui d'une touche, ce qui le rendra plus rapide.

 

Tutorial 9

    Cliquez pour revenir au menu du site... ou ici pour retourner au menu du tutorial.