Protocole Clavier/fr
Jump to navigation
Jump to search
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.