Entrée OUTIN de EXT v1.11

Permet d'obtenir les codes OUT et IN des touches de la HP49G en assembleur.

Comment s'en servir ?

1. Lancer OUTIN
2. Attendre un beep (sauf si le bip est désactivé, c'est-à-dire si le flag système -56 est armé)
3. Appuyer sur la touche voulue

OUTIN renvoie les codes OUT et IN de la touche appuyée.

Exemple: Touche X
=> OUTIN renvoie
"OUT: 004"
"IN: 0010"

A quoi correspondent les codes IN et OUT ?

En résumé, pour le clavier de la HP49, le code OUT donne la colonne de la touche :
N O P <=
R S T U
W X Y Z
7 8 9 *
4 5 6 -
1 2 3 +
0 . SPC ENTER
--- --- --- ---
008 004 002 001

...Ce qui est moins vrai pour les autres touches.

En fait, le code OUT correspond a un fil qui relie les touches de même code OUT, fil sur lequel la HP émet du courant lorsqu'on teste les touches.
Un autre ensemble de fils relie les touches de même code IN, globalement disposé en lignes. Quand une touche est enfoncée, elle permet au courant qui vient de sa colonne de circuler vers sa ligne, ce qui met à 1 un bit du registre IN...

Comment s'en servir pour tester une touche en assembleur ?

Il faut stocker le code OUT de la touche dans C champ X, puis appeler la routine qui teste le clavier (en 0020F, mnémonique standard OUTCINRTN) et vérifier (cas de la touche effectivement enfoncée) que C contient le code IN de la touche testée (pour simplifier).

Deux solutions: (exemple de la touche X)

Solution simple:

LC 0010 ; Code IN
A=C A
LC 004 ; Code OUT
GOSBVL OUTCINRTN
C=C&A B
?C#0 B
GOYES Touche_enfoncée
*Touche_non_enfoncée
...
*Touche_enfoncée
...
@

Solution optimisée:

On teste en sortie de OUTCINRTN si le bit qui est à 1 dans le code IN de la touche est effectivement à 1 dans le registre C.
Avantage: on peut alors tester successivement les différentes touche de même code OUT, n'est-ce pas, Bertrand...

LC 004
GOSBVL OUTCINRTN
?CBIT=1 4
GOYES Touche_enfoncée
*Touche_non_enfoncée
...
*Touche_enfoncée
...
@

Pourquoi la routine OUTCINRTN pour tester le clavier ?

L'instruction C=IN du Saturn ne fonctionne convenablement que si elle est exécutée en adresse paire. En 0020F, on a :
0020F OUT=C
00212 C=IN (donc en adresse paire)
00215 RTN

That's all, folks !

Yoann Désir

08/07/01

Téléchargez ici la version HP49G de cette doc

hp49g.multimania.com
www.hp-sources.com