Keyboard Protocol
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.
Back to Programming