Re: Scrutation clavier Amstrad

Top Page

Reply to this message
Author: Patrice Karatchentzeff
Date:  
To: Frédéric
CC: Guilde
Subject: Re: Scrutation clavier Amstrad
Chaque appui de touche ne déclenche pas une interruption ?

Le dim. 23 janv. 2022 à 15:46, Frédéric <fma38@???> a écrit :
>
> Hello,
>
> Je me replonge dans le développement sur Amstrad CPC, en assembleur Z80.
>
> Pour un projet, je suis en train de refaire les routines système de
> gestion du clavier, et j'aurais besoin de vos lumières. Pas pour la
> programmation en elle-même, mais plutôt pour l'algo.
>
> La gestion hardware du clavier du CPC est décrite ici :
>
> http://quasar.cpcscene.net/doku.php?id=assem:ppi#l_interfacage
>
> Pour lire une touche, on commence par positionner les bits 0-3 du port C du
> PPI 8255, ce qui a pour but de sélectionner la ligne du clavier, puis on
> relis les bits via le port A¹.
>
> Ma routine de scan fonctionne bien : à chaque frame écran (tous les 1/50s)
> je lis et stocke les 10 lignes brutes dans un buffer, et j'en profite pour
> stocker aussi, dans un second buffer, les changements depuis la dernière
> scrutation (un simple XOR avec la valeur précédente).
>
> Ensuite, je traite ces données brutes pour retrouver la touche appuyée, et
> gérer la répétition. Et c'est là où ma routine fonctionne mal. En fait,
> elle fonctionne bien tant que je n'appuie pas sur plusieurs touches !
>
> L'appui simultané sur plusieurs touches est de 2 types :
>
> - les touches sont sur des lignes différentes ;
> - les touches sont sur les mêmes lignes.
>
> Dans le premier cas, ma routine s'en sort un peu (quoique la gestion de la
> répétition peut foirer), mais dans le second cas, ma routine ne marche pas
> du tout, car je compare la donnée brute pour retrouver la touche, mais
> s'il y a 2 bits modifiés, ça ne matche aucune touche.
>
> La solution qui me vient à l'esprit c'est de tester, pour chaque ligne,
> tous les bits qui ont changés, et de construire un buffer. Je pense voir
> comment faire dans le cas simple, mais je sèche pour la gestion de la
> répétition (délai et période). Car il faut aussi gérer l'arrêt de la
> répétition, qui intervient soit quand on presse une nouvelle touche, soit
> quand on relâche celle qui a déclenché la répétition :o/
>
> Si vous avez des suggestions d'algo pour faire ça, je suis preneur !
>
> Merci d'avance.
>
> ¹ en fait, les bits clavier sont reliés au port I/O du chip son, lequel
> est relu via le port A du PIO 8255 :
>
> https://raw.githubusercontent.com/floooh/emu-info/master/cpc/cpc6128_schematics.png
>
> --
>     Frédéric

>



-- 
      |\      _,,,---,,_           Patrice KARATCHENTZEFF
ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:patrice.karatchentzeff@gmail.com
     |,4-  ) )-,_. ,\ (  `'-'
    '---''(_/--'  `-'\_)