Envoyer un e-mail à Collection ThomsonCollection Thomson
EditoForum 2002Liens
Nanoreseau
Docs
Logiciels
Matériel
Imprimer le document
Retour à la liste

L’étrange clavier du MO

Penchons-nous sur l’astuce qui consiste à appuyer simultanément sur les touches « M », « O » et « 6 » à partir de la page d’en-tête du MO6 pour faire apparaître la photo digitalisée des concepteurs à l’écran... Quel étrange phénomène pour un clavier Thomson que de pouvoir repérer l’enfoncement de plusieurs touches...

Pour tester le clavier d’un MO, il n’existe qu’un seul registre : $A7C1. Ce registre a un comportement très particulier : son état ne change pas lorsque l’on appuie sur une touche mais lorsqu’on demande si telle ou telle touche a été appuyée. Ce qui permet la simultanéité du repérage.

Le programmeur écrit donc le scancode (code de clavier hard) de la touche à tester dans le registre $A7C1 et le bit 7 de $A7C1 retourne en lecture l’état de la touche : 0 si la touche est appuyée, 1 si elle est relâchée. L’avantage évident d’un tel test est qu’il permet d’effectuer une lecture de clavier très rapidement, pour un jeu par exemple, sans passer par les points d’entrées standard du moniteur, parsemés de boucles et de tests de décodage.

Voici les scancodes des MO :

Scancodes clavier pour MO5

Scancodes clavier pour MO6

On peut remarquer que les deux tables se recoupent, à quelques exceptions près. Les touches [ , ), ^, ù et ] du clavier MO6 sont appelées par une programmation spéciale. Nous n’en parlons ici que pour rendre cet article plus exhaustif :

    - Gel des interruptions (ORCC #$50)
    - Bit 3 de $A7C0 mis à 0
    - Bit 2 de $A7C2 mis à 0
    - Bit 3 de $A7C0 mis à 1
    - Appel de la touche appuyée de $40 à $00 par pas de -$10
    - Bit 3 de $A7C0 remis à 0
    - Bit 2 de $A7C2 remis à 1
    - Rétablissement des interruptions (rétablissement de CC)

Scancodes clavier 2 pour MO6

Le but de l’exposé étant de savoir comment tester plusieurs touches simultanément, le programme suivant va nous permettre de choisir les touches que nous devrons activer en les plaçant dans le tampon BUFF (offset $12 du programme) et en concluant la liste par $FF :

  30 8C 0F          DEBUT LEAX  <BUFF,PCR         Ptr sur table de touches
  E6 80             KEY   LDB   ,X+               Lit un code de touche
  2B 0A                   BMI   EXIT              Si fin, sort du programme
  F7 A7C1                 STB   $A7C1             Requête du scancode
  F6 A7C1                 LDB   $A7C1             Lit si touche appuyée
  2B F1                   BMI   DEBUT             Si  pas appuyée, relecture
  20 F2                   BRA   KEY               Lit touche suivante
  39                EXIT  RTS                      |
                    BUFF  RMB   11

En écrivant et en lançant le programme Basic suivant:

  10 CLEAR 1000,&H3FFF                           Réserve la place mémoire
  20 A$="308C0FE6802B0AF7A7C1F6A7C12BF120F2      | Code en langage machine
  39"                                            | pour le test clavier
  30 B$="6A7072FF"                               Codes des touches + $FF
  40 A$=A$+B$                                    Rassemble le code
  50 FOR I=0 TO LEN(A$)/2                        |
  60 POKE &H4000+I,VAL("&H"+MID$(A$,I*2+1,2))    | Implante le code en $4000
  70 NEXT                                        |
  80 EXEC &H4000                                 Exécute le programme machine

... vous ne pourrez espérer retourner au Basic qu’en appuyant en même temps sur les touches CNT, SHIFT et BASIC.

Site
Plus
Forums
Code
Créations

*Site en favoris
*Page en favoris
*Site en démarrage
*Page en démarrage


Haut de page

Collection Thomson 2015 © Ghislain Fournier & François Mouret