Protocole Clavier/fr: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
Olivier.jan (talk | contribs) m (Olivier.jan moved page Protocole Clavier to Protocole Clavier/fr) |
||
(3 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
+ | {{Languages|Keyboard Protocol}} |
||
<pre> |
<pre> |
||
CLAVIER INTELLIGENT |
CLAVIER INTELLIGENT |
||
Line 4: | Line 5: | ||
1. Introduction |
1. Introduction |
||
− | 2. Documents de |
+ | 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 |
+ | 4.3. Mode déplacement curseur |
5. Manettes de jeu |
5. Manettes de jeu |
||
− | 5.1. Compte-rendu d' |
+ | 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 20: | ||
6. Horloge calendrier |
6. Horloge calendrier |
||
− | 7. Demandes d' |
+ | 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 28: | ||
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 |
+ | 9.6. Fixe le seuil de déplacement souris |
− | 9.7. Fixe l' |
+ | 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. |
+ | 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. |
+ | 9.13. Désactivation de la souris |
9.14. Pause |
9.14. Pause |
||
− | 9.15. Fixe le mode |
+ | 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' |
+ | 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. |
+ | 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 |
+ | 9.24. Chargement de données en mémoire |
− | 9.25. Lecture de |
+ | 9.25. Lecture de données en mémoire |
− | 9.26. |
+ | 9.26. Exécution de routine contr“leur |
− | 9.27. Demandes d' |
+ | 9.27. Demandes d'état |
10. Appendice A : Codes de scrutation clavier |
10. Appendice A : Codes de scrutation clavier |
||
Line 64: | Line 65: | ||
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 |
+ | 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 |
+ | comporte également une horloge avec gestion de la date d'une |
− | + | précision d'une seconde. |
|
− | Le clavier intelligent a |
+ | 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 |
+ | 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 |
+ | 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 |
+ | 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 |
+ | modes par défaut. |
− | 2. Documents de |
+ | 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 |
+ | Atari Corp. RBP/GHU/SD Keyboard Layout (non paginé, non daté) |
Line 95: | Line 96: | ||
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 |
+ | 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 |
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 |
|
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 |
+ | le code d'appui de la touche (bit 7 positionné … 1). |
− | Les codes |
+ | Les codes spécifiques 0xF6 … 0xFF sont réservés pour les |
fonctions suivantes : |
fonctions suivantes : |
||
− | OxF6 compte-rendu d' |
+ | 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 |
+ | (bit 0 … 1 si bouton droit appuyé |
− | bit 1 … 1 si bouton gauche |
+ | bit 1 … 1 si bouton gauche appuyé) |
0xFC heure et date |
0xFC heure et date |
||
− | 0xFD descripteur d' |
+ | 0xFD descripteur d'état manettes de jeu |
− | 0xFE |
+ | 0xFE événement manette de jeu 0 |
− | 0xFF |
+ | 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'. |
|
Line 124: | Line 125: | ||
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 |
+ | 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 |
+ | souris doit ˆtre scrutée suffisament souvent pour autoriser le |
− | suivi de |
+ | 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 |
+ | position relative (… la précédente), de la position absolue de la |
− | souris dans un systŠme de |
+ | 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 |
+ | Les boutons de la souris peuvent ˆtre traités comme partie |
− | + | 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 |
+ | descripteur de position de la souris lorsqu'un événement souris se |
− | produira. Constitue un |
+ | produira. Constitue un événement souris tout appui ou tout |
− | relƒchement de bouton, ou tout |
+ | relƒchement de bouton, ou tout déplacement dépassant dans l'un des |
− | axes de |
+ | axes de coordonnées un seuil donné. En l'absence de seuil, tout |
− | bit de |
+ | 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 |
+ | position relative de la souris avec un incrément horizontal ou |
− | vertical significativement plus |
+ | 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 |
+ | 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 |
+ | 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 |
+ | 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 gauche |
− | deltaX |
+ | deltaX décalage horizontal signé |
− | deltaY |
+ | deltaY décalage vertical signé |
− | On notera que la valeur des bits d' |
+ | On notera que la valeur des bits d'état des boutons doit ˆtre |
− | valide mˆme si le MODE D'ACTIVATION SOURIS a |
+ | valide mˆme si le MODE D'ACTIVATION SOURIS a été positionné pour |
− | que les boutons soient |
+ | que les boutons soient considérés comme partie intégrante du |
clavier. |
clavier. |
||
− | Si le |
+ | Si le décalage cumulé des déplacements horizontaux ou |
− | verticaux de la souris |
+ | verticaux de la souris déborde le domaine +127 … -128, le compte- |
− | rendu de positionnement relatif est |
+ | rendu de positionnement relatif est effectué sur plusieurs blocs |
descriptifs successifs. |
descriptifs successifs. |
||
− | On notera que le signe du |
+ | 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 |
+ | Le clavier intelligent a la possibilité de rendre compte de |
− | la position de la souris en |
+ | la position de la souris en coordonnées absolues. Des commandes |
− | existent pour |
+ | existent pour réinitialiser la position de la souris, définir les |
− | + | échelles horizontale et verticale, et demander la position |
|
courante de la souris. |
courante de la souris. |
||
− | 4.3. Mode |
+ | 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 |
+ | souris en équivalences clavier. Le nombre d'appuis de touche |
− | correspondant … une action peut ˆtre |
+ | 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 |
+ | 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' |
+ | 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 |
+ | relƒchement de touche immédiatement aprŠs le code d'appui de |
− | touche. Les appuis de bouton de la souris provoquent |
+ | 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 |
+ | … 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 210: | ||
5. Manettes de jeu |
5. Manettes de jeu |
||
− | 5.1. Compte-rendu d' |
+ | 5.1. Compte-rendu d'événement manette de jeu |
− | Dans ce mode, le clavier intelligent |
+ | 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 |
|
interrupteur ou contact de la manette de jeu). |
interrupteur ou contact de la manette de jeu). |
||
− | Le bloc descripteur d'un |
+ | Le bloc descripteur d'un événement manette de jeu est |
− | + | constitué de deux octets: |
|
− | %1111 111x |
+ | %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 225: | ||
| |||| |
| |||| |
||
| ------------ position de la manette |
| ------------ position de la manette |
||
− | ----------------- |
+ | ----------------- état du bouton de feu |
5.2. Interrogation de manette de jeu |
5.2. Interrogation de manette de jeu |
||
− | L' |
+ | 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 |
+ | 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 |
+ | 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' |
+ | 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' |
+ | Ce mode permet de consacrer presque toute l'activité du |
− | circuit clavier au compte-rendu des |
+ | circuit clavier au compte-rendu des états successifs des manettes |
− | de jeu selon une cadence |
+ | 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 |
+ | processeur mais également la scrutation des manettes de jeu (les |
− | informations ne sont pas |
+ | informations ne sont pas empilées). |
5.4. Surveillance Bouton de feu |
5.4. Surveillance Bouton de feu |
||
− | Ce mode permet de |
+ | 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' |
+ | du bouton de feu de la manette de jeu. Dans ce mode, l'état du |
− | bouton de feu est |
+ | bouton de feu est testé … la fréquence maximale autorisée par la |
− | vitesse de transmission |
+ | 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 265: | ||
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 |
+ | 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 |
+ | Le circuit clavier peut ˆtre commandé pour que les actions |
− | sur les manettes de jeu soient converties en |
+ | sur les manettes de jeu soient converties en équivalents clavier |
(touches curseur). |
(touches curseur). |
||
− | Les |
+ | Les événements manette de jeu produisent un code d'appui de |
− | touche |
+ | touche immédiatement suivi d'un code de relƒchement, de la mˆme |
− | fa‡on que pour les |
+ | fa‡on que pour les événements souris. Les boutons de feu des |
− | manettes de jeu ont |
+ | manettes de jeu ont également leur équivalents clavier, codes |
− | juste |
+ | 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 283: | ||
6. Horloge calendrier |
6. Horloge calendrier |
||
− | Le clavier intelligent contr“le |
+ | 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 |
+ | jour est garantie pour une précision de une seconde. |
− | 7. Demandes d' |
+ | 7. Demandes d'état |
− | L' |
+ | L'état courant du clavier, les modes actifs et les paramŠtres |
− | peuvent ˆtre obtenus par des commandes de demande d' |
+ | 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 299: | ||
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 |
+ | sous tension afin de détecter des erreurs majeures (somme de |
− | contr“le des |
+ | contr“le des mémoires mortes et test des mémoires vives) et divers |
− | problŠmes comme des touches |
+ | problŠmes comme des touches coincées. Toute touche appuyée lors de |
− | la mise sous tension est |
+ | la mise sous tension est considérée comme coincée et son code de |
− | relƒchement est |
+ | 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 |
+ | 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 |
+ | version 0xF0, les suivantes auront les numéros 0xF1, etc.) |
− | Les options par |
+ | 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 |
+ | avec un incrément d'une unité pour chaque axe. |
− | 2) Origine verticale Y=0 correspondant au haut de l' |
+ | 2) Origine verticale Y=0 correspondant au haut de l'écran. |
− | 3) Mode compte-rendu d' |
+ | 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 |
+ | 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 |
+ | 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 |
+ | une commande de désactivation de la souris est re‡ue alors que le |
− | port 0 est logiquement |
+ | port 0 est logiquement lié … une souris, le bouton est alors |
− | + | 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 |
|
− | 0x00) qui ne sont pas |
+ | 0x00) qui ne sont pas développés ici ne provoquent aucune |
− | + | opération (ils peuvent ˆtre assimilés … des NOP). |
|
9.1. RESET |
9.1. RESET |
||
Line 338: | Line 339: | ||
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 |
+ | 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 |
+ | 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 |
+ | 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 |
+ | 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 |
+ | … la fin du break s'il s'agit d'un reset matériel). Le clavier |
− | teste ensuite la matrice clavier pour |
+ | teste ensuite la matrice clavier pour déceler d'éventuelles |
− | touches |
+ | 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 |
+ | (un code de relƒchement survenant sans avoir été précédé par un |
− | code d'appui de touche doit ˆtre |
+ | 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 |
+ | Notes du traducteur : De par son architecture matérielle, l'unité |
− | centrale du ST est |
+ | 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 |
+ | qui assure les communications série entre le MC68000 et le 6801 |
− | responsable du clavier. Il en |
+ | 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 |
+ | 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 |
+ | * 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, |
+ | _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 382: | ||
0x07 |
0x07 |
||
%0000 0mss mode de prise en compte |
%0000 0mss mode de prise en compte |
||
− | ||| (m est |
+ | ||| (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 396: | ||
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. |
|
− | Cette commande |
+ | Cette commande définit la fa‡on d'agir des boutons de la |
− | souris, plus |
+ | souris, plus précisément la fa‡on dont ils seront pris en compte. |
− | Le mode de traitement par |
+ | Le mode de traitement par défaut des boutons de la souris est |
− | %00000000, c'est-…-dire que les boutons sont |
+ | %00000000, c'est-…-dire que les boutons sont considérés comme |
− | partie |
+ | 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 411: | ||
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 |
+ | dire que chaque déplacement de la souris provoque l'envoi d'un |
− | descripteur comprenant les |
+ | descripteur comprenant les décalages horizontaux et verticaux |
− | relatifs … la |
+ | relatifs … la précédente position. Les blocs descripteurs de |
− | positionnement sont |
+ | positionnement sont générés de fa‡on asynchrone par le clavier |
− | intelligent lorsqu'un |
+ | intelligent lorsqu'un déplacement selon l'un des axes dépasse le |
− | seuil minimal |
+ | seuil minimal fixé (voir 9.6. SEUIL DECALAGE SOURIS). Selon le |
− | mode |
+ | mode fixé par la commande précédente, des descripteurs de position |
− | peuvent |
+ | peuvent également ˆtre envoyés lorsqu'un des boutons de la souris |
− | est |
+ | est pressé ou relƒché. Dans les autres cas, les boutons de la |
− | souris sont |
+ | souris sont considérés comme des touches clavier. |
Line 434: | Line 435: | ||
0x09 |
0x09 |
||
− | Xsup position horizontale maximale (en |
+ | Xsup position horizontale maximale (en unités de |
− | Xinf |
+ | Xinf déplacement) codée sur deux octets |
− | Ysup position verticale maximale (en |
+ | Ysup position verticale maximale (en unités de |
− | Yinf |
+ | Yinf déplacement) codée sur deux octets |
− | Les |
+ | Les déplacements de souris seront décrits en positionnement |
− | absolu. Les |
+ | absolu. Les coordonnées horizontale et verticale sont conservées |
au reset. |
au reset. |
||
− | Dans ce mode, les valeurs des |
+ | Dans ce mode, les valeurs des coordonnées conservées ne |
− | doivent pas sortir de l'intervalle 0 - grand nombre positif |
+ | doivent pas sortir de l'intervalle 0 - grand nombre positif défini |
− | par la commande. Un |
+ | par la commande. Un déplacement jusqu'… une coordonnée négative |
− | sera |
+ | sera ignoré. La commande fixe la valeur positive maximale qui peut |
− | ˆtre atteinte. Toute valeur |
+ | ˆ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 |
+ | 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 |
+ | 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 |
+ | 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' |
+ | 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 |
+ | que cette commande n'est pas affectée par l'origine des |
− | + | 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 |
+ | Xseuil seuil horizontal en unités de déplacement |
− | Yseuil seuil vertical en |
+ | Yseuil seuil vertical en unités de déplacement |
− | Cette commande fixe le seuil … partir duquel un |
+ | 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 |
+ | 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 |
+ | verticaux sont fixés … 1 par défaut lors du RESET (ou … la mise |
sous tension). |
sous tension). |
||
− | NDT : Une |
+ | NDT : Une unité de déplacement de la souris correspond |
− | environ … 0,2 mm, cela se traduit au bureau GEM par un |
+ | environ … 0,2 mm, cela se traduit au bureau GEM par un déplacement |
d'un pixel. |
d'un pixel. |
||
Line 489: | Line 490: | ||
0x0C |
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 |
+ | 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 |
en mode de positionnement absolu de la souris. Dans ce mode, un |
||
− | nombre |
+ | nombre déterminé d'unités de déplacement horizontal ou vertical |
− | doit survenir pour qu'un |
+ | 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 |
Il est important de relever que cette commande ne fonctionne |
||
− | qu'en mode de positionnement absolu mˆme si l'on a |
+ | 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 516: | ||
0000 xxxx |
0000 xxxx |
||
|||| |
|||| |
||
− | ||| ----- bouton droit |
+ | ||| ----- bouton droit pressé depuis derniŠre demande |
− | || ------ bouton droit |
+ | || ------ bouton droit relƒché depuis derniŠre demande |
− | | ------- bouton gauche |
+ | | ------- bouton gauche pressé depuis derniŠre demande |
− | -------- bouton gauche |
+ | -------- bouton gauche relƒché depuis derniŠre demande |
Xsup |
Xsup |
||
− | Xinf |
+ | Xinf coordonnée horizontale sur deux octets |
Ysup |
Ysup |
||
− | Yinf |
+ | 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 |
+ | 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 559: | ||
− | Cette commande fixe l'origine de l'axe des |
+ | Cette commande fixe l'origine de l'axe des ordonnées en bas |
− | du systŠme de |
+ | 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 |
+ | 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 |
9.11. FIXE L'ORIGINE VERTICALE EN HAUT |
||
Line 570: | Line 571: | ||
− | Cette commande fixe l'origine de l'axe des |
+ | Cette commande fixe l'origine de l'axe des ordonnées en haut |
− | du systŠme de |
+ | 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 |
+ | 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. |
mise sous tension du systŠme. |
||
9.12. REPRISE |
9.12. REPRISE |
||
− | Reprend l'envoi des |
+ | Reprend l'envoi des données du circuit clavier vers le |
− | processeur. Etant |
+ | 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 |
+ | 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 |
+ | tout bonnement ignorée. |
Line 598: | Line 599: | ||
− | Plus aucun compte-rendu d' |
+ | 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' |
+ | 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' |
+ | (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 |
+ | N.B.: Si les boutons de la souris ont été définis comme |
− | devant ˆtre |
+ | devant ˆtre traités comme des touches clavier, cette commande |
− | les AFFECTE |
+ | les AFFECTE également (c'est-…-dire qu'ils deviennent inactifs). |
9.14. PAUSE |
9.14. PAUSE |
||
Line 614: | Line 615: | ||
0x13 |
0x13 |
||
− | Stoppe l'envoi de |
+ | Stoppe l'envoi de données du clavier vers le processeur |
− | jusqu'… ce qu'une autre commande soit |
+ | jusqu'… ce qu'une autre commande soit envoyée au clavier. |
− | L' |
+ | L'activité du clavier est toujours scrutée et les codes de |
− | scrutation de mˆme que les codes ASCII sont |
+ | scrutation de mˆme que les codes ASCII sont empilés (jusqu'au |
− | maximum |
+ | maximum supporté par le microcontr“leur, c'est-…-dire 8 octets) |
− | afin d'ˆtre |
+ | 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 |
+ | 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 |
+ | RELATIF de la souris, les événements souris sont cumulés en |
− | fonction des seuils de |
+ | fonction des seuils de décalage maxima, afin de produire le |
− | minimum de blocs descripteurs possibles (les seuils de |
+ | minimum de blocs descripteurs possibles (les seuils de décalage |
− | maxima s' |
+ | 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 |
+ | 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. |
en mode de POSITIONNEMENT RELATIF de la souris. |
||
− | Etant |
+ | Etant donné que le tampon de stockage d'événements du circuit |
− | clavier n'est que de 8 octets, il est |
+ | 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 |
+ | processeur ne devant pas ˆtre figées plus de quelques |
− | millisecondes si l'on ne |
+ | millisecondes si l'on ne désire pas perdre d'événement. |
− | Les communications sont |
+ | Les communications sont stoppées seulement aprŠs l'envoi en |
− | cours, si un envoi est en cours. Le mode PAUSE ne |
+ | cours, si un envoi est en cours. Le mode PAUSE ne débutera qu'une |
− | fois le bloc descripteur |
+ | 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 |
|
− | + | é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 653: | ||
− | Entre en mode compte-rendu d' |
+ | 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' |
+ | 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 663: | ||
− | + | 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' |
+ | 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 672: | ||
− | Renvoie un enregistrement |
+ | 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 679: | ||
0x17 |
0x17 |
||
− | vitesse temps d' |
+ | vitesse temps d'échantillonnage en centiŠmes de seconde |
− | Blocs |
+ | 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 689: | ||
%nnnn mmmm |
%nnnn mmmm |
||
|||| |||| |
|||| |||| |
||
− | |||| ------ |
+ | |||| ------ état de la Manette 0 |
− | ----------- |
+ | ----------- é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 |
+ | 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. |
|
− | N.B. : Le programmeur ne peut pas fixer cette |
+ | N.B. : Le programmeur ne peut pas fixer cette fréquence … un |
− | taux |
+ | taux supérieur … ce que permet la vitesse de communication série |
− | pour l'envoi de blocs de deux octets (NDT: la |
+ | 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 706: | ||
0x18 |
0x18 |
||
− | Valeur |
+ | Valeur retournée: (tant que l'on est dans ce mode) |
− | %bbbb bbbb |
+ | %bbbb bbbb état du bouton de feu de la manette |
1. (huit informations par octet, le |
1. (huit informations par octet, le |
||
− | premier |
+ | 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 |
+ | 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 |
+ | 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 |
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' |
+ | interrogations par secondes]). L'intervalle d'échantillonnage |
reste aussi constant que possible. |
reste aussi constant que possible. |
||
Line 725: | Line 726: | ||
0x19 |
0x19 |
||
− | RX temps (en diziŠmes de seconde) |
+ | RX temps (en diziŠmes de seconde) nécessaire pour |
− | produire un |
+ | produire un décalage horizontal |
− | RY temps (en diziŠmes de seconde) |
+ | RY temps (en diziŠmes de seconde) nécessaire pour |
− | produire un |
+ | 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 |
+ | 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 |
+ | 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 |
+ | 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 |
+ | contact aprŠs relƒchement produisant un décalage |
vertical du curseur |
vertical du curseur |
||
− | Dans ce mode, la manette de jeu 0 est |
+ | 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 |
|
− | sont |
+ | 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- |
+ | 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 |
|
− | plus de sens et la |
+ | 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 761: | ||
− | + | Désactive la génération d'événements manettes de jeu (la |
|
− | scrutation des manettes peut ˆtre |
+ | 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' |
+ | 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 772: | ||
0x1B |
0x1B |
||
− | AA |
+ | AA année (deux derniers chiffres significatifs) |
MM mois |
MM mois |
||
JJ jour |
JJ jour |
||
Line 779: | Line 780: | ||
− | Toutes les |
+ | 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 |
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 |
+ | 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 |
+ | Valeurs retournées : |
− | 0xFC en-tˆte d' |
+ | 0xFC en-tˆte d'événement date et heure |
− | AA |
+ | AA année (2 chiffres inférieurs) |
MM mois |
MM mois |
||
JJ jour |
JJ jour |
||
Line 800: | Line 801: | ||
− | Toutes les |
+ | Toutes les données relatives … la date et l'heure sont |
− | + | retournées au format BCD (binaire codé décimal). |
|
Line 812: | Line 813: | ||
0x20 |
0x20 |
||
− | adr_sup adresse de la |
+ | adr_sup adresse de la mémoire vive du contr“leur |
− | adr_inf o— charger les |
+ | adr_inf o— charger les données |
nombre nombre d'octets … charger (0 … 128) |
nombre nombre d'octets … charger (0 … 128) |
||
− | { |
+ | {données} |
Cette commande permet au processeur de placer des valeurs |
Cette commande permet au processeur de placer des valeurs |
||
− | arbitraires dans la |
+ | arbitraires dans la mémoire vive du contr“leur. L'intervalle de |
− | temps |
+ | temps séparant l'envoi de chaque donnée doit ˆtre d'au minimum 20 |
millisecondes. |
millisecondes. |
||
Line 826: | Line 827: | ||
0x21 |
0x21 |
||
− | adr_sup adresse de la |
+ | adr_sup adresse de la mémoire du contr“leur … |
− | adr_inf partir de laquelle lire les |
+ | adr_inf partir de laquelle lire les données. |
− | Valeurs |
+ | Valeurs retournées : |
− | 0xF6 en-tˆte d' |
+ | 0xF6 en-tˆte d'état |
− | 0x20 code d'accŠs |
+ | 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 |
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 |
+ | 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 |
+ | adr_sup adresse de la routine en mémoire morte du |
− | adr_inf contr“leur que l'on |
+ | adr_inf contr“leur que l'on désire faire exécuter. |
− | Cette commande permet au processeur d'ordonner l' |
+ | Cette commande permet au processeur d'ordonner l'exécution |
− | d'un sous-programme |
+ | 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 |
+ | N.D.T.: Les fonctions 0x20 et 0x22 sont d'un usage périlleux car |
− | elles |
+ | 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 |
+ | 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 866: | ||
9.27. DEMANDES D'ETAT |
9.27. DEMANDES D'ETAT |
||
− | Les commandes de demande d' |
+ | Les commandes de demande d'état sont constituées de l'octet |
− | de commande de positionnement dans cet |
+ | 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 |
+ | Valeurs retournées : |
− | 0xF6 en-tˆte de |
+ | 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 894: | ||
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 |
+ | mode courant ou les paramŠtres associés … un mode donné. Tous les |
− | compte-rendus d' |
+ | 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 |
+ | qu'elles puissent ˆtre stockées (aprŠs réception de l'octet $F6 |
− | d'en-tˆte de |
+ | d'en-tˆte de réponse état) et renvoyées par la suite sous forme de |
− | commandes de positionnement d' |
+ | commandes de positionnement d'état par le processeur afin de |
− | restaurer un |
+ | restaurer un état donné. Les octets nuls de remplissage seront |
− | alors |
+ | alors traités comme des commandes inopérantes par le circuit |
clavier. |
clavier. |
||
− | N.D.T.: Pour traiter les |
+ | 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'emplacement par Kbdvbase (Trap 14, fonction $22), en ajoutant $C |
||
− | … l'adresse de retour de cette fonction (voir bios |
+ | … 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 |
+ | A0 l'adresse de départ du bloc d'octets réponse de la demande |
− | d' |
+ | d'état et dans A1 l'adresse de fin plus un de cette réponse. |
− | D'une fa‡on |
+ | D'une fa‡on générale, toutes les réponses du clavier passent |
− | par l'un des vecteurs |
+ | par l'un des vecteurs pointés indirectement par Kbdvbase et |
− | + | nécessitent donc un traitement particulier par des routines |
|
utilisateur. |
utilisateur. |
||
Line 922: | Line 923: | ||
0x88 mode de positionnement de la souris |
0x88 mode de positionnement de la souris |
||
− | 0x89 (plus |
+ | 0x89 (plus précisément mode de traitement des |
− | 0x8A |
+ | 0x8A déplacements de la souris par le circuit clavier) |
− | 0x8B seuil de |
+ | 0x8B seuil de décalage de la souris |
− | 0x8C |
+ | 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 934: | ||
0x90 (renvoie 0x0F si en bas, 0x10 si en haut) |
0x90 (renvoie 0x0F si en bas, 0x10 si en haut) |
||
− | 0x92 |
+ | 0x92 activité de la souris (réponse : 0x00 si active, |
0x12 si inactive) |
0x12 si inactive) |
||
Line 940: | Line 941: | ||
0x99 |
0x99 |
||
− | 0x9A |
+ | 0x9A activité des manettes de jeu (réponse : 0x00 si |
− | actives, 0x1A si |
+ | actives, 0x1A si désactivées) |
− | Il est de la |
+ | 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 |
+ | 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 |
Les commandes de DEMANDE D'ETAT ne sont pas prises en compte |
||
Line 974: | Line 975: | ||
10. Appendice A -- Codes de scrutation clavier |
10. Appendice A -- Codes de scrutation clavier |
||
− | Les 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 |
N.D.T.: Le traducteur s'est permis de fournir les codes clavier |
||
Line 982: | Line 983: | ||
Valeur hexa. Clavier anglais Clavier fran‡ais |
Valeur hexa. Clavier anglais Clavier fran‡ais |
||
− | 00 ( |
+ | 00 (inutilisée) (inutilisée) |
01 Esc Esc |
01 Esc Esc |
||
02 1 1 |
02 1 1 |
||
Line 1,037: | Line 1,038: | ||
35 / = |
35 / = |
||
36 Shift (droit) Shift (droit) |
36 Shift (droit) Shift (droit) |
||
− | 37 ( |
+ | 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,052: | ||
43 F9 F9 |
43 F9 F9 |
||
44 F10 F10 |
44 F10 F10 |
||
− | 45 ( |
+ | 45 (inutilisée) (inutilisée) |
− | 46 ( |
+ | 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 ( |
+ | 49 (inutilisée) (inutilisée) |
− | 4A |
+ | 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 ( |
+ | 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 |
+ | 4E Pavé numérique + Pavé numérique + |
− | 4F ( |
+ | 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 ( |
+ | 51 (inutilisée) (inutilisée) |
52 Insert Insert |
52 Insert Insert |
||
53 Delete Delete |
53 Delete Delete |
||
− | 54 ( |
+ | 54 (inutilisée) (inutilisée) |
− | 55 ( |
+ | 55 (inutilisée) (inutilisée) |
− | 56 ( |
+ | 56 (inutilisée) (inutilisée) |
− | 57 ( |
+ | 57 (inutilisée) (inutilisée) |
− | 58 ( |
+ | 58 (inutilisée) (inutilisée) |
− | 59 ( |
+ | 59 (inutilisée) (inutilisée) |
− | 5A ( |
+ | 5A (inutilisée) (inutilisée) |
− | 5B ( |
+ | 5B (inutilisée) (inutilisée) |
− | 5C ( |
+ | 5C (inutilisée) (inutilisée) |
− | 5D ( |
+ | 5D (inutilisée) (inutilisée) |
− | 5E ( |
+ | 5E (inutilisée) (inutilisée) |
− | 5F ( |
+ | 5F (inutilisée) (inutilisée) |
− | 60 touche ISO ( |
+ | 60 touche ISO (inutilisée) < |
61 Undo Undo |
61 Undo Undo |
||
62 Help Help |
62 Help Help |
||
− | 63 |
+ | 63 Pavé numérique ( Pavé numérique ( |
− | 64 |
+ | 64 Pavé numérique ) Pavé numérique ) |
− | 65 |
+ | 65 Pavé numérique / Pavé numérique / |
− | 66 |
+ | 66 Pavé numérique * Pavé numérique * |
− | 67 |
+ | 67 Pavé numérique 7 Pavé numérique 7 |
− | 68 |
+ | 68 Pavé numérique 8 Pavé numérique 8 |
− | 69 |
+ | 69 Pavé numérique 9 Pavé numérique 9 |
− | 6A |
+ | 6A Pavé numérique 4 Pavé numérique 4 |
− | 6B |
+ | 6B Pavé numérique 5 Pavé numérique 5 |
− | 6C |
+ | 6C Pavé numérique 6 Pavé numérique 6 |
− | 6D |
+ | 6D Pavé numérique 1 Pavé numérique 1 |
− | 6E |
+ | 6E Pavé numérique 2 Pavé numérique 2 |
− | 6F |
+ | 6F Pavé numérique 3 Pavé numérique 3 |
− | 70 |
+ | 70 Pavé numérique 0 Pavé numérique 0 |
− | 71 |
+ | 71 Pavé numérique . Pavé numérique . |
− | 72 |
+ | 72 Pavé numérique Enter Pavé numérique Enter |
− | N.D.T. : Rappelons que les codes |
+ | 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. |
de boutons de feu des manettes de jeu. |
||
</pre> |
</pre> |
||
− | + | [[Category:Programming]] |
|
+ | [[Category:Documents in French]] |
Latest revision as of 22:17, 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.