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.
Cliquez pour revenir au menu du site... ou ici pour retourner au menu du tutorial.