Létrange clavier du MO
Penchons-nous sur lastuce qui consiste à appuyer simultanément
sur les touches « M », « O » et « 6 » à partir de la page den-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 lenfoncement de plusieurs touches...
Pour tester le clavier dun MO, il nexiste quun seul registre :
$A7C1. Ce registre a un comportement très particulier : son état ne change pas lorsque lon
appuie sur une touche mais lorsquon 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. Lavantage évident dun tel test est quil
permet deffectuer une lecture de clavier très rapidement, pour un jeu par exemple, sans passer
par les points dentré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 nen 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 lexposé é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 quen appuyant en même temps sur les touches CNT, SHIFT
et BASIC.
|