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.