CLAVIER INTELLIGENT
1. Introduction
2. Documents de r‚f‚rence
3. Clavier
4. Souris
4.1. Positionnement relatif
4.2. Positionnement absolu
4.3. Mode d‚placement curseur
5. Manettes de jeu
5.1. Compte-rendu d'‚v‚nement manette de jeu
5.2. Interrogation de manette de jeu
5.3. Surveillance manette de jeu
5.4. Surveillance bouton de feu
5.5. Mode clavier des manettes de jeu
6. Horloge calendrier
7. Demandes d'‚tat
8. Mise sous tension
9. Jeu des commandes clavier
9.1. Reset
9.2. Mode de prise en compte des boutons de souris
9.3. Fixe le mode de positionnement relatif de la souris
9.4. Fixe le mode de positionnement absolu de la souris
9.5. Fixe la souris en mode clavier
9.6. Fixe le seuil de d‚placement souris
9.7. Fixe l'‚chelle de la souris
9.8. Mode demande de la position absolue de la souris
9.9. D‚finit la position de la souris
9.10. Fixe l'origine verticale en bas
9.11. Fixe l'origine verticale en haut
9.12. Reprise
9.13. D‚sactivation de la souris
9.14. Pause
9.15. Fixe le mode ‚v‚nement manette de jeu
9.16. Fixe le mode demande manette de jeu
9.17. Demande d'‚tat manette de jeu
9.18. Surveillance manette de jeu
9.19. Surveillance du bouton de feu
9.20. Fixe la manette de jeu en mode clavier
9.21. D‚sactivation des manettes de jeu
9.22. Mise … jour de l'horloge-calendrier
9.23. Demande de la date et de l'heure
9.24. Chargement de donn‚es en m‚moire
9.25. Lecture de donn‚es en m‚moire
9.26. Ex‚cution de routine contr“leur
9.27. Demandes d'‚tat
10. Appendice A : Codes de scrutation clavier
PROTOCOLE DU CLAVIER INTELLIGENT
(Mise … jour : 26/02/85)
1. Introduction
Le clavier intelligent (IKBD) d'Atari Corp. est un contr“leur
clavier d'usage commun suffisamment flexible pour ˆtre utilis‚
avec un grand nombre de produits sans modifications. Le clavier,
avec son contr“leur, fournit des points de connexion convenables
pour une souris et des manettes de jeu. Le processeur clavier
comporte ‚galement une horloge avec gestion de la date d'une
pr‚cision d'une seconde.
Le clavier intelligent a ‚t‚ con‡u comme suffisamment g‚n‚ral
pour pouvoir servir dans un grand nombre de nouveaux produits
informatiques. Des ajustements quant au nombre de touches du
clavier, la r‚solution de la souris, etc. peuvent ˆtre effectu‚s.
Le clavier intelligent communique avec le processeur maŒtre
par une liaison s‚rie bi-directionnelle … haute vitesse. Il peut
fonctionner dans plusieurs modes afin de rendre possibles diverses
utilisations du clavier, des manettes de jeu ou de la souris. Un
usage restreint du contr“leur est ‚galement autoris‚ pour des
applications dans lesquelles un mode de communication
unidirectionnel est utile, ceci par une gestion soigneuse des
modes par d‚faut.
2. Documents de r‚f‚rence
Atari Corp. RBP/GHU/SD Keyboard Schematic (14/09/84)
Atari Corp. RBP/GHU/SD Keyboard Layout (non pagin‚, non dat‚)
3. Clavier
Le clavier retourne toujours les codes d'appui et de
relƒchement de touche, chaque fois qu'une touche est press‚e ou
relƒch‚e. Les codes d'appui de touche d‚butent … 1 et sont d‚finis
dans l'appendice A en fin de chapitre. A titre d'exemple, la
position de la touche ISO dans la table des codes de touches
press‚es existera mˆme si aucune touche ne correspond … cette
position sur un clavier particulier. Le code de relƒchement de
touche peut ˆtre obtenu en effectuant un OU logique entre 0x80 et
le code d'appui de la touche (bit 7 positionn‚ … 1).
Les codes sp‚cifiques 0xF6 … 0xFF sont r‚serv‚s pour les
fonctions suivantes :
OxF6 compte-rendu d'‚tat
0xF7 position absolue de la souris
0xF8-0xFB position relative de la souris
(bit 0 … 1 si bouton droit appuy‚
bit 1 … 1 si bouton gauche appuy‚)
0xFC heure et date
0xFD descripteur d'‚tat manettes de jeu
0xFE ‚v‚nement manette de jeu 0
0xFF ‚v‚nement manette de jeu 1
Les deux touches 'Shift' retournent des codes d'appui
diff‚rents. Il en va de mˆme pour les touches 'Enter' et 'Return'.
4. Souris
Le port souris doit ˆtre capable de contr“ler une souris avec
une r‚solution d'environ 200 comptes (d‚placements ou cliquages)
par pouce (NDT: soit 80 positions par centimŠtres environ). La
souris doit ˆtre scrut‚e suffisament souvent pour autoriser le
suivi de d‚placements … une vitesse allant jusqu'… 10 pouces par
seconde (NDT: soit environ 25 cm/s).
Le clavier intelligent peut rendre compte des actions sur la
souris selon trois modes distincts. Il peut rendre compte de la
position relative (… la pr‚c‚dente), de la position absolue de la
souris dans un systŠme de coordonn‚es convenu, ou convertir les
d‚placements de la souris en codes clavier curseur ‚quivalents.
Les boutons de la souris peuvent ˆtre trait‚s comme partie
int‚grante de la souris ou comme des touches de clavier
suppl‚mentaires.
4.1. Positionnement relatif
En mode positionnement relatif, le clavier retournera un
descripteur de position de la souris lorsqu'un ‚v‚nement souris se
produira. Constitue un ‚v‚nement souris tout appui ou tout
relƒchement de bouton, ou tout d‚placement d‚passant dans l'un des
axes de coordonn‚es un seuil donn‚. En l'absence de seuil, tout
bit de r‚solution provoque un envoi vers le processeur maŒtre.
On notera que le clavier intelligent peut retourner une
position relative de la souris avec un incr‚ment horizontal ou
vertical significativement plus ‚lev‚ que le seuil. Cela arrivera
lorsqu'aucun compte-rendu de positionnement relatif de la souris
n'aura ‚t‚ renvoy‚ : a) parce que le clavier a ‚t‚ inhib‚ (les
‚v‚nements seront stock‚s jusqu'… ce que la communication avec le
clavier reprenne) b) parce qu'un ‚v‚nement est en train d'ˆtre
transmis.
Le descripteur de positionnement relatif de la souris est un
bloc constitu‚ de trois octets (peu importe le mode clavier):
%1111 10xx drapeau de positionnement relatif
||
| ---------- ‚tat du bouton droit
----------- ‚tat du bouton gauche
deltaX d‚calage horizontal sign‚
deltaY d‚calage vertical sign‚
On notera que la valeur des bits d'‚tat des boutons doit ˆtre
valide mˆme si le MODE D'ACTIVATION SOURIS a ‚t‚ positionn‚ pour
que les boutons soient consid‚r‚s comme partie int‚grante du
clavier.
Si le d‚calage cumul‚ des d‚placements horizontaux ou
verticaux de la souris d‚borde le domaine +127 … -128, le compte-
rendu de positionnement relatif est effectu‚ sur plusieurs blocs
descriptifs successifs.
On notera que le signe du d‚calage vertical deltaY est
fonction de l'origine verticale choisie.
4.2. Positionnement absolu
Le clavier intelligent a la possibilit‚ de rendre compte de
la position de la souris en coordonn‚es absolues. Des commandes
existent pour r‚initialiser la position de la souris, d‚finir les
‚chelles horizontale et verticale, et demander la position
courante de la souris.
4.3. Mode d‚placement curseur
Le clavier intelligent peut convertir les actions sur la
souris en ‚quivalences clavier. Le nombre d'appuis de touche
correspondant … une action peut ˆtre sp‚cifi‚ diff‚remment pour
chaque axe. Le clavier intelligent fournit des informations sur
les actions souris selon la plus haute r‚solution valable et
g‚nŠre simplement une paire d'‚v‚nements appui de touche pour
chaque multiple du facteur d'‚chelle.
Ce mode de fonctionnement provoque l'envoi du code de
relƒchement de touche imm‚diatement aprŠs le code d'appui de
touche. Les appuis de bouton de la souris provoquent ‚galement
l'envoi de codes d'appui et de relƒchement de touche correspondant
… ceux qui leur sont normalement assign‚s dans la table des codes
clavier (soit 0x74 pour le bouton droit et 0x75 pour le gauche).
5. Manettes de jeu
5.1. Compte-rendu d'‚v‚nement manette de jeu
Dans ce mode, le clavier intelligent g‚nŠre un bloc
descripteur chaque fois que la position de la manette de jeu a
chang‚e (c'est-…-dire pour chaque ouverture ou fermeture d'un
interrupteur ou contact de la manette de jeu).
Le bloc descripteur d'un ‚v‚nement manette de jeu est
constitu‚ de deux octets:
%1111 111x d‚signe un ‚v‚nement manette de jeu
|
--------- manette de jeu 0 ou 1
%x000 yyyy
| ||||
| ------------ position de la manette
----------------- ‚tat du bouton de feu
5.2. Interrogation de manette de jeu
L'‚tat courant des ports manette de jeu peut ˆtre interrog‚ …
n'importe quel moment dans ce mode en envoyant une commande
d'"interrogation manette de jeu" vers le circuit clavier.
La r‚ponse du clavier intelligent … cette interrogation prend
la forme d'un bloc de trois octets ayant le sens suivant :
0xFD en-tˆte de r‚ponse manette de jeu
%x000 yyyy manette de jeu 0
%x000 yyyy manette de jeu 1
o— x correspond … l'‚tat du bouton de feu et yyyy … la
position de la manette.
5.3. Surveillance manette de jeu
Ce mode permet de consacrer presque toute l'activit‚ du
circuit clavier au compte-rendu des ‚tats successifs des manettes
de jeu selon une cadence d‚finie par l'utilisateur. Le clavier
reste dans ce mode jusqu'… une commande de reset ou une commande
le placant dans un autre mode. Dans ce mode, la commande PAUSE ne
stoppe pas seulement les communications entre le clavier et le
processeur mais ‚galement la scrutation des manettes de jeu (les
informations ne sont pas empil‚es).
5.4. Surveillance Bouton de feu
Ce mode permet de d‚dier le circuit clavier au seul contr“le
du bouton de feu de la manette de jeu. Dans ce mode, l'‚tat du
bouton de feu est test‚ … la fr‚quence maximale autoris‚e par la
vitesse de transmission s‚rie. Les donn‚es sont compact‚es sur
huit bits pour envoi au processeur maŒtre. Le circuit clavier
reste dans ce mode jusqu'… une commande de reset ou une commande
de changement de mode. Dans ce mode la commande PAUSE ne stoppe
pas seulement l'envoi des informations du clavier vers le
processeur mais arrˆte aussi temporairement la scrutation du
bouton de mise … feu (les informations ne sont pas empil‚es).
5.5. Mode Clavier des manettes de jeu
Le circuit clavier peut ˆtre command‚ pour que les actions
sur les manettes de jeu soient converties en ‚quivalents clavier
(touches curseur).
Les ‚v‚nements manette de jeu produisent un code d'appui de
touche imm‚diatement suivi d'un code de relƒchement, de la mˆme
fa‡on que pour les ‚v‚nements souris. Les boutons de feu des
manettes de jeu ont ‚galement leur ‚quivalents clavier, codes
juste sup‚rieurs … ceux de la matrice clavier (soit 0x74 pour la
manette 0 et 0x75 pour la manette 1).
6. Horloge calendrier
Le clavier intelligent contr“le ‚galement une horloge
calendrier pour le systŠme. Des commandes sont disponibles pour
remettre … jour et interroger cette horloge calendrier. La mise …
jour est garantie pour une pr‚cision de une seconde.
7. Demandes d'‚tat
L'‚tat courant du clavier, les modes actifs et les paramŠtres
peuvent ˆtre obtenus par des commandes de demande d'‚tat
correspondant … des commandes du clavier intelligent.
8. Mise sous tension
Le contr“leur clavier effectue un auto-test simple … la mise
sous tension afin de d‚tecter des erreurs majeures (somme de
contr“le des m‚moires mortes et test des m‚moires vives) et divers
problŠmes comme des touches coinc‚es. Toute touche appuy‚e lors de
la mise sous tension est consid‚r‚e comme coinc‚e et son code de
relƒchement est renvoy‚ (ce qui, en l'absence de code d'appui le
pr‚c‚dant, est consid‚r‚ comme une erreur clavier). Si l'auto-
test du contr“leur s'est d‚roul‚ sans erreur, le code 0xF0 est
renvoy‚. (La premiŠre version du clavier intelligent ‚tait la
version 0xF0, les suivantes auront les num‚ros 0xF1, etc.)
Les options par d‚faut du clavier sont les suivantes :
1) Compte-rendu du positionnement de la souris en mode relatif
avec un incr‚ment d'une unit‚ pour chaque axe.
2) Origine verticale Y=0 correspondant au haut de l'‚cran.
3) Mode compte-rendu d'‚v‚nement pour les manettes de jeu.
4) Deux boutons pris en compte pour la souris.
AprŠs toute commande manette de jeu, le circuit clavier
considŠre que les manettes de jeu sont connect‚es aux ports 0 et 1
des manettes de jeu. Toute commande souris (sauf la DESACTIVATION
DE SOURIS) entraŒne la scrutation du port 0 comme ‚tant le port
reli‚ … la souris et les deux boutons d‚pendant de celle-ci. Si
une commande de d‚sactivation de la souris est re‡ue alors que le
port 0 est logiquement li‚ … une souris, le bouton est alors
assign‚ … la manette 1.
9. Jeu des commandes clavier
Cette partie comprend la liste des commandes qui peuvent ˆtre
envoy‚es au clavier intelligent. Les codes de commande (comme
0x00) qui ne sont pas d‚velopp‚s ici ne provoquent aucune
op‚ration (ils peuvent ˆtre assimil‚s … des NOP).
9.1. RESET
Ox80
0x01
REMARQUE: La commande RESET est la seule commande clavier qui
comprenne deux octets en dehors des paramŠtres. Tout octet suivant
0x80, autre que 0x01, sera ignor‚ (et provoquera la non prise en
compte de la commande 0x80).
Un reset du circuit clavier peut ‚galement ˆtre provoqu‚ en
envoyant un break durant au moins 200ms vers le circuit clavier.
L'envoi d'une commande reset amŠne la remise des paramŠtres
clavier … leurs valeurs par d‚faut (voir 8. Mise sous tension). Il
n'affecte pas l'horloge calendrier.
Une commande de RESET provoque l'auto-test du circuit
clavier. Si ce test est positif, le clavier envoie le code 0xF0
dans un d‚lai de 300ms aprŠs la r‚ception de la commande RESET (ou
… la fin du break s'il s'agit d'un reset mat‚riel). Le clavier
teste ensuite la matrice clavier pour d‚celer d'‚ventuelles
touches coinc‚es. Toute touche consid‚r‚e comme coinc‚e provoque
l'envoi du code break (relƒchement) correspondant … cette touche
(un code de relƒchement survenant sans avoir ‚t‚ pr‚c‚d‚ par un
code d'appui de touche doit ˆtre consid‚r‚ comme une erreur au
niveau de la matrice clavier).
Notes du traducteur : De par son architecture mat‚rielle, l'unit‚
centrale du ST est reli‚e au clavier intelligent via le processeur
multifonctions MC68901 et un ACIA MC6850. C'est ce dernier circuit
qui assure les communications s‚rie entre le MC68000 et le 6801
responsable du clavier. Il en d‚coule que toute commande vers le
circuit clavier suppose que l'ACIA est actif et correctement
programm‚.
A titre d'information, voici l'ensemble des commandes de
reset de circuit ACIA et clavier envoy‚es lors du boot du systŠme
par le systŠme d'exploitation :
move.b #$3,$FFFC00 * reset ACIA MC6850
move.b #$96,$FFFC00 * division horloge/16, 8 bits
* sans parit‚, 1 bit stop,etc.
move.l #_commande,-(sp) * ptr commande reset et modes
move.w #3,-(a7) * 4 octets … envoyer
bsr _Ikbdws * fonction $19 du trap 14
_commande dc.b $80,$01,$12,$1A * reset, d‚sactive souris et
* manettes de jeu
9.2. FIXE LE MODE DE PRISE EN COMPTE DES BOUTONS DE SOURIS
0x07
%0000 0mss mode de prise en compte
||| (m est suppos‚ … 1 en mode code CLAVIER
||| de la souris)
------------ 0wx l'appui ou le relƒchement de
|| bouton provoque un compte-rendu
|| de position souris (wx n'est
|| significatif que si la souris
|| est en positionnement absolu)
| --- 1 -> la pression du bouton pro-
| voque un compte-rendu de
| la position absolue
---- 1 -> le relƒchement du bouton
provoque un compte-rendu de
la position absolue
100 : les boutons de la souris sont
consid‚r‚s comme des touches.
Cette commande d‚finit la fa‡on d'agir des boutons de la
souris, plus pr‚cis‚ment la fa‡on dont ils seront pris en compte.
Le mode de traitement par d‚faut des boutons de la souris est
%00000000, c'est-…-dire que les boutons sont consid‚r‚s comme
partie int‚grante de la souris.
9.3. FIXE LE MODE DE POSITIONNEMENT RELATIF DE LA SOURIS
0x08
Place la souris en mode relatif (mode PAR DEFAUT), c'est …
dire que chaque d‚placement de la souris provoque l'envoi d'un
descripteur comprenant les d‚calages horizontaux et verticaux
relatifs … la pr‚c‚dente position. Les blocs descripteurs de
positionnement sont g‚n‚r‚s de fa‡on asynchrone par le clavier
intelligent lorsqu'un d‚placement selon l'un des axes d‚passe le
seuil minimal fix‚ (voir 9.6. SEUIL DECALAGE SOURIS). Selon le
mode fix‚ par la commande pr‚c‚dente, des descripteurs de position
peuvent ‚galement ˆtre envoy‚s lorsqu'un des boutons de la souris
est press‚ ou relƒch‚. Dans les autres cas, les boutons de la
souris sont consid‚r‚s comme des touches clavier.
9.4. FIXE LE MODE DE POSITIONNEMENT ABSOLU DE LA SOURIS
0x09
Xsup position horizontale maximale (en unit‚s de
Xinf d‚placement) cod‚e sur deux octets
Ysup position verticale maximale (en unit‚s de
Yinf d‚placement) cod‚e sur deux octets
Les d‚placements de souris seront d‚crits en positionnement
absolu. Les coordonn‚es horizontale et verticale sont conserv‚es
au reset.
Dans ce mode, les valeurs des coordonn‚es conserv‚es ne
doivent pas sortir de l'intervalle 0 - grand nombre positif d‚fini
par la commande. Un d‚placement jusqu'… une coordonn‚e n‚gative
sera ignor‚. La commande fixe la valeur positive maximale qui peut
ˆtre atteinte. Toute valeur sup‚rieure est ignor‚e.
9.5. FIXE LA SOURIS EN MODE CLAVIER
0x0A
Xdelta distance en unit‚s horizontales provoquant
l'envoi du code {LEFT} ou du code {RIGHT}
Ydelta distance en unit‚s verticales provoquant
l'envoi du code {UP} ou du code {DOWN}
Place la souris en mode clavier … la place du mode position
relative ou position absolue. AprŠs chaque d‚placement de souris
exc‚dant le seuil horizontal ou vertical fix‚ par cette commande,
le circuit clavier envoie l'‚quivalent d'un appui de touche
curseur du clavier, puis le code de relƒchement de touche. A noter
que cette commande n'est pas affect‚e par l'origine des
d‚placements souris.
9.6. FIXE LE SEUIL DE DEPLACEMENT SOURIS
0x0B
Xseuil seuil horizontal en unit‚s de d‚placement
Yseuil seuil vertical en unit‚s de d‚placement
Cette commande fixe le seuil … partir duquel un d‚placement
de la souris sur l'axe horizontal ou vertical provoquera l'envoi
par le circuit clavier d'un descripteur de position souris. On
notera qu'elle n'affecte pas la r‚solution des donn‚es renvoy‚es
au processeur. Cette commande est UNIQUEMENT valide en mode de
positionnement relatif de la souris. Les seuils horizontaux et
verticaux sont fix‚s … 1 par d‚faut lors du RESET (ou … la mise
sous tension).
NDT : Une unit‚ de d‚placement de la souris correspond
environ … 0,2 mm, cela se traduit au bureau GEM par un d‚placement
d'un pixel.
9.7. FIXE L'ECHELLE DE LA SOURIS
0x0C
X‚chelle nombre d'unit‚s de d‚placement par X interne
Y‚chelle nombre d'unit‚s de d‚placement par Y interne
Cette commande d‚finit le facteur r‚ducteur … appliquer aux
d‚placements horizontaux et verticaux. Elle est valide UNIQUEMENT
en mode de positionnement absolu de la souris. Dans ce mode, un
nombre d‚termin‚ d'unit‚s de d‚placement horizontal ou vertical
doit survenir pour qu'un d‚calage interne de une unit‚ soit
enregistr‚e par le contr“leur clavier.
Il est important de relever que cette commande ne fonctionne
qu'en mode de positionnement absolu mˆme si l'on a command‚ au
clavier de rendre compte des appuis ou des relƒchements de boutons
de la souris (voir commande 0x07, Ý9.2.).
9.8. DEMANDE DE LA POSITION ABSOLUE DE LA SOURIS
0x0D
Cette commande renvoie :
OxF7 en-tˆte de descripteur de position absolue
0000 xxxx
||||
||| ----- bouton droit press‚ depuis derniŠre demande
|| ------ bouton droit relƒch‚ depuis derniŠre demande
| ------- bouton gauche press‚ depuis derniŠre demande
-------- bouton gauche relƒch‚ depuis derniŠre demande
Xsup
Xinf coordonn‚e horizontale sur deux octets
Ysup
Yinf coordonn‚e verticale sur deux octets
La commande de demande de la position absolue de la souris
est UNIQUEMENT valide en mode de positionnement absolu de la
souris, peu importe le mode de traitement des boutons fix‚ par une
commande 0x07 (voir Ý9.2.).
9.9. DEFINIT LA POSITION DE LA SOURIS
0X0E
0X00 octet de remplissage
Xsup
Xinf position horizontale absolue de la souris
Ysup
Yinf position verticale absolue de la souris
Cette commande permet au programmeur de fixer la position
absolue de la souris, horizontale et verticale.
9.10. FIXE L'ORIGINE VERTICALE EN BAS
0x0F
Cette commande fixe l'origine de l'axe des ordonn‚es en bas
du systŠme de coordonn‚es logiques utilis‚ par le circuit clavier,
tant en mode de positionnement absolu que relatif. Dans ce mode,
le d‚placement de la souris vers l'utilisateur se traduit par un
d‚calage n‚gatif et un d‚placement dans le sens oppos‚ par un
d‚calage positif.
9.11. FIXE L'ORIGINE VERTICALE EN HAUT
0x10
Cette commande fixe l'origine de l'axe des ordonn‚es en haut
du systŠme de coordonn‚es logiques utilis‚ par le circuit clavier,
tant en mode de positionnement absolu que relatif. Dans ce mode,
le d‚placement de la souris vers l'utilisateur se traduit par un
d‚calage positif et un d‚placement dans le sens oppos‚ par un
d‚calage n‚gatif. Ce mode est le mode PAR DEFAUT au reset ou … la
mise sous tension du systŠme.
9.12. REPRISE
Reprend l'envoi des donn‚es du circuit clavier vers le
processeur. Etant donn‚ que toute commande re‡ue par le circuit
clavier alors qu'il se trouve en mode PAUSE constitue un ordre de
REPRISE implicite, cette commande peut ˆtre consid‚r‚e comme
inutile. Si le clavier n'est pas en mode PAUSE, cette commande est
tout bonnement ignor‚e.
9.13. DESACTIVATION DE LA SOURIS
0x12
Plus aucun compte-rendu d'‚v‚nement souris n'est envoy‚ par
le circuit clavier au processeur (et la scrutation peut ˆtre
inactive). Toute commande d'entr‚e dans un mode souris valide
provoque la reprise des envois de descripteurs de position souris.
(Les commandes d'entr‚e dans un mode valides sont : FIXE LE
POSITIONNEMENT RELATIF DE LA SOURIS, FIXE LE POSITIONNEMENT ABSOLU
DE LA SOURIS et FIXE LA SOURIS EN MODE CLAVIER).
N.B.: Si les boutons de la souris ont ‚t‚ d‚finis comme
devant ˆtre trait‚s comme des touches clavier, cette commande
les AFFECTE ‚galement (c'est-…-dire qu'ils deviennent inactifs).
9.14. PAUSE
0x13
Stoppe l'envoi de donn‚es du clavier vers le processeur
jusqu'… ce qu'une autre commande soit envoy‚e au clavier.
L'activit‚ du clavier est toujours scrut‚e et les codes de
scrutation de mˆme que les codes ASCII sont empil‚s (jusqu'au
maximum support‚ par le microcontr“leur, c'est-…-dire 8 octets)
afin d'ˆtre envoy‚s au processeur lorsque celui-ci demandera la
reprise des envois. Si l'on se trouve en mode EVENEMENT MANETTE DE
JEU, les ‚v‚nements manette sont ‚galement empil‚s.
Les actions sur la souris sont prises en compte tant que l'on
se trouve en mode PAUSE. Si le clavier est en mode POSITIONNEMENT
RELATIF de la souris, les ‚v‚nements souris sont cumul‚s en
fonction des seuils de d‚calage maxima, afin de produire le
minimum de blocs descripteurs possibles (les seuils de d‚calage
maxima s'‚tendent de -128 … +127 unit‚s de d‚placement). L'appui
ou le relƒchement d'un bouton de la souris amŠne tout ‚v‚nement
cumul‚ … ˆtre stock‚ dans un bloc descripteur, si l'on se trouve
en mode de POSITIONNEMENT RELATIF de la souris.
Etant donn‚ que le tampon de stockage d'‚v‚nements du circuit
clavier n'est que de 8 octets, il est recommand‚ d'user de ce mode
avec discernement, les communications entre le clavier et le
processeur ne devant pas ˆtre fig‚es plus de quelques
millisecondes si l'on ne d‚sire pas perdre d'‚v‚nement.
Les communications sont stopp‚es seulement aprŠs l'envoi en
cours, si un envoi est en cours. Le mode PAUSE ne d‚butera qu'une
fois le bloc descripteur compl‚tement envoy‚.
Lorsque le circuit clavier se trouve en mode SURVEILLANCE DE
MANETTE ou SURVEILLANCE DE BOUTON DE FEU, la commande PAUSE stoppe
‚galement ce mode de compte-rendu permanent, c'est-…-dire que les
‚v‚nements ne sont plus empil‚s pour transmission.
9.15. FIXE LE MODE EVENEMENT MANETTE DE JEU
0x14
Entre en mode compte-rendu d'‚v‚nement manette de jeu. Il
s'agit du mode PAR DEFAUT. Chaque ouverture ou fermeture de
contact d'une manette de jeu provoque l'envoi d'un descripteur
d'‚v‚nement manette de jeu.
9.16. FIXE LE MODE DEMANDE MANETTE DE JEU
0x15
D‚sactive le mode EVENEMENT MANETTE DE JEU. Le processeur
doit envoyer au circuit une commande de DEMANDE D'ETAT MANETTE DE
JEU pour connaŒtre l'‚tat d'une manette.
9.17. DEMANDE D'ETAT MANETTE DE JEU
0x16
Renvoie un enregistrement d‚crivant l'‚tat courant des
manettes de jeu. Cette commande est valide que l'on se trouve en
mode EVENEMENT MANETTE DE JEU ou en mode DEMANDE MANETTE DE JEU.
9.18. SURVEILLANCE MANETTE DE JEU
0x17
vitesse temps d'‚chantillonnage en centiŠmes de seconde
Blocs retourn‚s (blocs de 2 octets retourn‚s
aussi longtemps que l'on est dans ce mode) :
%0000 00xy
||
| --- Bouton de feu Manette 0
---- Bouton de feu Manette 1
%nnnn mmmm
|||| ||||
|||| ------ ‚tat de la Manette 0
----------- ‚tat de la Manette 1
Dans ce mode, le clavier intelligent ne fait que trois
choses: a) communiquer sur la ligne s‚rie, b) mettre … jour
l'horloge-calendrier, c) surveiller les manettes de jeu. Le taux
plac‚ en paramŠtre d‚finit la fr‚quence d'‚chantillonnage.
N.B. : Le programmeur ne peut pas fixer cette fr‚quence … un
taux sup‚rieur … ce que permet la vitesse de communication s‚rie
pour l'envoi de blocs de deux octets (NDT: la fr‚quence minimale
d'un centiŠme de seconde est admise par le circuit clavier!).
9.19. SURVEILLANCE DU BOUTON DE FEU
0x18
Valeur retourn‚e: (tant que l'on est dans ce mode)
%bbbb bbbb ‚tat du bouton de feu de la manette
1. (huit informations par octet, le
premier ‚chantillonnage ‚tant donn‚
dans le bit fort (bit 7))
Dans ce mode, le clavier intelligent ne fait que trois
choses: a) communiquer sur la ligne s‚rie, b) mettre … jour
l'horloge-calendrier, c) surveiller le bouton de feu de la
manette 1. Le bouton de feu est scrut‚ … une fr‚quence telle que 8
‚chantillonnages sont effectu‚s pour un octet envoy‚ (c'est-…-dire
que la vitesse de scrutation est de 8/10ø de la vitesse de
transmission [NDT: soit une vitesse de scrutation de 6340
interrogations par secondes]). L'intervalle d'‚chantillonnage
reste aussi constant que possible.
9.20. FIXE LA MANETTE DE JEU EN MODE CLAVIER
0x19
RX temps (en diziŠmes de seconde) n‚cessaire pour
produire un d‚calage horizontal
RY temps (en diziŠmes de seconde) n‚cessaire pour
produire un d‚calage vertical
TX temps (en diziŠmes de seconde) de fermeture du
contact avant relƒchement produisant un d‚calage
horizontal du curseur
TY temps (en diziŠmes de seconde) de fermeture du
contact avant relƒchement produisant un d‚calage
vertical du curseur
VX temps (en diziŠmes de seconde) de fermeture du
contact aprŠs relƒchement produisant un d‚calage
horizontal du curseur
VY temps (en diziŠmes de seconde) de fermeture du
contact aprŠs relƒchement produisant un d‚calage
vertical du curseur
Dans ce mode, la manette de jeu 0 est scrut‚e et trait‚e
comme s'il s'agissait des touches curseur. A la fermeture de
contact, un code d'appui et de relƒchement de touche curseur est
g‚n‚r‚. Puis aprŠs un d‚lai (RX ou RY selon le cas), ces codes
sont renvoy‚s selon une fr‚quence d‚finie par TX et TY. AprŠs
r‚ouverture de contact, des codes curseur sont g‚n‚r‚s selon une
fr‚quence d‚finie par VX et VY. Ceci autorise une gestion de la
manette avec auto-r‚p‚tition.
On notera qu'en pla‡ant RX et/ou RY … 0, il est possible de
d‚sactiver cette auto-r‚p‚tition. Les valeurs de TX et TY n'ont
plus de sens et la g‚n‚ration de codes s'effectue via VX et VY).
9.21. DESACTIVATION DES MANETTES DE JEU
0x1A
D‚sactive la g‚n‚ration d'‚v‚nements manettes de jeu (la
scrutation des manettes peut ˆtre d‚sactiv‚e). Toute entr‚e dans
un mode de fonctionnement manettes de jeu provoque la reprise des
compte-rendus d'‚v‚nements manette de jeu (les modes de
fonctionnement manette sont MODE EVENEMENT MANETTE DE JEU, MODE
DEMANDE MANETTE, SURVEILLANCE MANETTE DE JEU, SURVEILLANCE BOUTON
DE FEU ET MANETTES EN MODE CLAVIER).
9.22. MISE A JOUR DE L'HORLOGE-CALENDRIER
0x1B
AA ann‚e (deux derniers chiffres significatifs)
MM mois
JJ jour
hh heure
mm minute
ss seconde
Toutes les donn‚es concernant la date et l'heure doivent ˆtre
envoy‚es vers le clavier au format BCD (binaire cod‚ d‚cimal).
Tout chiffre qui ne rentre pas dans le format BCD ne sera pas
pris en compte et ne provoquera pas de modification du champ
correspondant de la date ou de l'heure. Cela permet de ne modifier
que quelques-unes des caract‚ristiques de la date ou de l'heure.
9.23. DEMANDE DE LA DATE ET DE L'HEURE
0x1C
Valeurs retourn‚es :
0xFC en-tˆte d'‚v‚nement date et heure
AA ann‚e (2 chiffres inf‚rieurs)
MM mois
JJ jour
hh heure
mm minute
ss seconde
Toutes les donn‚es relatives … la date et l'heure sont
retourn‚es au format BCD (binaire cod‚ d‚cimal).
9.24. CHARGEMENT DE DONNEES EN MEMOIRE
0x20
adr_sup adresse de la m‚moire vive du contr“leur
adr_inf o— charger les donn‚es
nombre nombre d'octets … charger (0 … 128)
{donn‚es}
Cette commande permet au processeur de placer des valeurs
arbitraires dans la m‚moire vive du contr“leur. L'intervalle de
temps s‚parant l'envoi de chaque donn‚e doit ˆtre d'au minimum 20
millisecondes.
9.25. LECTURE DE DONNEES EN MEMOIRE
0x21
adr_sup adresse de la m‚moire du contr“leur …
adr_inf partir de laquelle lire les donn‚es.
Valeurs retourn‚es :
0xF6 en-tˆte d'‚tat
0x20 code d'accŠs m‚moire
donn‚e 6 octets de donn‚es lus en
donn‚e m‚moire … partir de l'adresse
donn‚e envoy‚e en paramŠtre
donn‚e
donn‚e
donn‚e
Cette commande permet au processeur de lire le contenu des
m‚moires du contr“leur. Elle permet de lire aussi bien le contenu
de la m‚moire morte que de la m‚moire vive.
9.26. EXECUTION DE ROUTINE CONTROLEUR
0x22
adr_sup adresse de la routine en m‚moire morte du
adr_inf contr“leur que l'on d‚sire faire ex‚cuter.
Cette commande permet au processeur d'ordonner l'ex‚cution
d'un sous-programme r‚sident dans la m‚moire morte du contr“leur
clavier.
N.D.T.: Les fonctions 0x20 et 0x22 sont d'un usage p‚rilleux car
elles n‚cessitent une bonne connaissance de la topographie m‚moire
du 6301, contr“leur clavier. Des informations sur le contenu de
cette m‚moire et les registres de travail du 6301 peuvent ˆtre
obtenus dans l'ouvrage "Au coeur de l'Atari ST" (cf. bibliographie
en annexe).
9.27. DEMANDES D'ETAT
Les commandes de demande d'‚tat sont constitu‚es de l'octet
de commande de positionnement dans cet ‚tat avec le bit 7 plac‚ …
1 (OU logique avec 0x80). Exemple :
0x88 (ou 0x89 ou 0x8A) demande de mode souris
Valeurs retourn‚es :
0xF6 en-tˆte de r‚ponse d'‚tat
mode 0x08 si RELATIF
0x09 si ABSOLU
0x0A si CLAVIER
param1 0 si mode RELATIF
Xsup si mode ABSOLU
Xdelta si mode CLAVIER
param2 0 si mode RELATIF
Xinf si mode ABSOLU
Ydelta si mode CLAVIER
param3 0 si mode RELATIF
Ysup si mode ABSOLU
0 si mode CLAVIER
param4 0 si mode RELATIF
Yinf si mode ABSOLU
0 si mode CLAVIER
0 bourrage
0
Les commandes de DEMANDE D'ETAT interrogent le clavier sur le
mode courant ou les paramŠtres associ‚s … un mode donn‚. Tous les
compte-rendus d'‚tat sont format‚s dans des blocs de 8 octets. Les
r‚ponses … des demandes d'‚tat sont fournies de telle sorte
qu'elles puissent ˆtre stock‚es (aprŠs r‚ception de l'octet $F6
d'en-tˆte de r‚ponse ‚tat) et renvoy‚es par la suite sous forme de
commandes de positionnement d'‚tat par le processeur afin de
restaurer un ‚tat donn‚. Les octets nuls de remplissage seront
alors trait‚s comme des commandes inop‚rantes par le circuit
clavier.
N.D.T.: Pour traiter les r‚ponses … une demande d'‚tat, il est
n‚cessaire de d‚tourner le vecteur r‚ponse d'‚tat, dont on obtient
l'emplacement par Kbdvbase (Trap 14, fonction $22), en ajoutant $C
… l'adresse de retour de cette fonction (voir bios ‚tendu).
En pla‡ant sa propre routine dans ce vecteur, on re‡oit dans
A0 l'adresse de d‚part du bloc d'octets r‚ponse de la demande
d'‚tat et dans A1 l'adresse de fin plus un de cette r‚ponse.
D'une fa‡on g‚n‚rale, toutes les r‚ponses du clavier passent
par l'un des vecteurs point‚s indirectement par Kbdvbase et
n‚cessitent donc un traitement particulier par des routines
utilisateur.
Les commandes valides de DEMANDE D'ETAT sont les suivantes:
0x87 mode d'action des boutons de la souris
0x88 mode de positionnement de la souris
0x89 (plus pr‚cis‚ment mode de traitement des
0x8A d‚placements de la souris par le circuit clavier)
0x8B seuil de d‚calage de la souris
0x8C ‚chelle de d‚calage de la souris (en ABSOLU)
0x8F demande du type d'origine verticale de la souris
0x90 (renvoie 0x0F si en bas, 0x10 si en haut)
0x92 activit‚ de la souris (r‚ponse : 0x00 si active,
0x12 si inactive)
0x94 demande du mode manette de jeu
0x95
0x99
0x9A activit‚ des manettes de jeu (r‚ponse : 0x00 si
actives, 0x1A si d‚sactiv‚es)
Il est de la responsabilit‚ du programmeur de n'avoir qu'une
r‚ponse … une demande en mˆme temps (autrement dit, il faut
traiter la r‚ponse … une demande avant d'en faire une seconde, les
r‚ponses n'‚tant pas empil‚es).
Les commandes de DEMANDE D'ETAT ne sont pas prises en compte
si le clavier intelligent se trouve en mode SURVEILLANCE MANETTE
DE JEU ou en mode SURVEILLANCE BOUTON DE FEU.
10. Appendice A -- Codes de scrutation clavier
Les codes de scrutation clavier retourn‚ par le clavier ont
‚t‚ choisi afin de simplifier la mise en oeuvre du GEM.
N.D.T.: Le traducteur s'est permis de fournir les codes clavier
correspondant … la matrice de clavier fran‡aise en sus des codes
correspondant … la matrice de clavier anglaise.
Valeur hexa. Clavier anglais Clavier fran‡ais
00 (inutilis‚e) (inutilis‚e)
01 Esc Esc
02 1 1
03 2 2
04 3 3
05 4 4
06 5 5
07 6 6
08 7 7
09 8 8
0A 9 9
0B 0 0
0C - )
0D == -
0E Backspace Backspace
0F Tab Tab
10 Q A
11 W Z
12 E E
13 R R
14 T T
15 Y Y
16 U U
17 I I
18 O O
19 P P
1A [ [
1B ] ]
1C Return Return
1D Control Control
1E A Q
1F S S
20 D D
21 F F
22 G G
23 H H
24 J J
25 K K
26 L L
27 ; M
28 ' —
29 ` `
2A Shift (gauche) Shift (gauche)
2B \ \
2C Z W
2D X X
2E C C
2F V V
30 B B
31 N N
32 M ,
33 , ;
34 . :
35 / =
36 Shift (droit) Shift (droit)
37 (inutilis‚e) (inutilis‚e)
38 Alternate Alternate
39 Barre d'espacement Barre d'espacement
3A CapsLock CapsLock
3B F1 F1
3C F2 F2
3D F3 F3
3E F4 F4
3F F5 F5
40 F6 F6
41 F7 F7
42 F8 F8
43 F9 F9
44 F10 F10
45 (inutilis‚e) (inutilis‚e)
46 (inutilis‚e) (inutilis‚e)
47 Home Home
48 FlŠche vers le haut FlŠche vers le haut
49 (inutilis‚e) (inutilis‚e)
4A Pav‚ num‚rique - Pav‚ num‚rique -
4B FlŠche vers la gauche FlŠche vers la gauche
4C (inutilis‚e) (inutilis‚e)
4D FlŠche vers la droite FlŠche vers la droite
4E Pav‚ num‚rique + Pav‚ num‚rique +
4F (inutilis‚e) (inutilis‚e)
50 FlŠche vers le bas FlŠche vers le bas
51 (inutilis‚e) (inutilis‚e)
52 Insert Insert
53 Delete Delete
54 (inutilis‚e) (inutilis‚e)
55 (inutilis‚e) (inutilis‚e)
56 (inutilis‚e) (inutilis‚e)
57 (inutilis‚e) (inutilis‚e)
58 (inutilis‚e) (inutilis‚e)
59 (inutilis‚e) (inutilis‚e)
5A (inutilis‚e) (inutilis‚e)
5B (inutilis‚e) (inutilis‚e)
5C (inutilis‚e) (inutilis‚e)
5D (inutilis‚e) (inutilis‚e)
5E (inutilis‚e) (inutilis‚e)
5F (inutilis‚e) (inutilis‚e)
60 touche ISO (inutilis‚e) <
61 Undo Undo
62 Help Help
63 Pav‚ num‚rique ( Pav‚ num‚rique (
64 Pav‚ num‚rique ) Pav‚ num‚rique )
65 Pav‚ num‚rique / Pav‚ num‚rique /
66 Pav‚ num‚rique * Pav‚ num‚rique *
67 Pav‚ num‚rique 7 Pav‚ num‚rique 7
68 Pav‚ num‚rique 8 Pav‚ num‚rique 8
69 Pav‚ num‚rique 9 Pav‚ num‚rique 9
6A Pav‚ num‚rique 4 Pav‚ num‚rique 4
6B Pav‚ num‚rique 5 Pav‚ num‚rique 5
6C Pav‚ num‚rique 6 Pav‚ num‚rique 6
6D Pav‚ num‚rique 1 Pav‚ num‚rique 1
6E Pav‚ num‚rique 2 Pav‚ num‚rique 2
6F Pav‚ num‚rique 3 Pav‚ num‚rique 3
70 Pav‚ num‚rique 0 Pav‚ num‚rique 0
71 Pav‚ num‚rique . Pav‚ num‚rique .
72 Pav‚ num‚rique Enter Pav‚ num‚rique Enter
N.D.T. : Rappelons que les codes hexad‚cimaux 0x74 et 0x75 sont
utilis‚s par le contr“leur clavier pour la simulation des appuis
de boutons de feu des manettes de jeu.