Protocole Clavier/fr: Difference between revisions

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

Revision as of 22:15, 17 December 2023

                        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.