Amstrad Plus Index du Forum

Amstrad Plus
Découverte de la gamme Old et Plus des Cpc d'Amstrad.

 FAQFAQ   RechercherRechercher   MembresMembres   GroupesGroupes   S’enregistrerS’enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

routine clavier rapide

 
Poster un nouveau sujet   Répondre au sujet    Amstrad Plus Index du Forum -> Bienvenue sur ce forum -> Programmation
Sujet précédent :: Sujet suivant  
Auteur Message
roudoudou


Hors ligne

Inscrit le: 14 Juil 2016
Messages: 388
Localisation: LYON
Masculin
Point(s): 4
Moyenne de points: 0,01

MessagePosté le: Mar 20 Mar - 14:38 (2018)    Sujet du message: routine clavier rapide Répondre en citant

ça ne servira peut-être pas à beaucoup de monde mais il peut être intéressant d'avoir une routine clavier rapide si on est juste en CPU
pour ma part, je trouve ça intéressant dans tous les cas, puisqu'on peut le faire, héhé
la routine prend plus de mémoire qu'une routine classique, j'ai déroulé la boucle principale mais surtout, j'utilise des registres fantômes pour accéder au PPI
comme le rappelle l'article de cpcwiki http://www.cpcwiki.eu/index.php/8255#The_8255_in_the_CPC
le PPI est sélectionné quand A11 du port I/O est à zéro, point barre
Les autres bits sont mis à 1 par convention pour éviter des conflits avec d'autres matériels mais la commande se situant sur A9 et A8, on peut sans risque mettre A10 à zéro plutôt que 1, ce qui va nous arranger
Nous adresserons donc le PPI via les ports
F4 mais aussi F0
F5 mais aussi F1
F6 mais aussi F2
F7 mais aussi F3
Ce qui nous ouvre la porte à pas mal d'optimisations
De plus, l'instruction outi étant particulièrement rapide, on va s'en servir plus que de raison pour envoyer toutes nos valeurs


Code:
;------------------------------
; optimised keyboard scanning
; roudoudou (c) 2018
;
; using shadowed PPI adresses
; #F7 -> #F3
; #F6 -> #F2
; #F5 -> #F1
; #F4 -> #F0
;
keyboard_scan:
ld hl,keyboard_buffer_init
ld b,#F5
outi ; out (#F4),#0E
dec b
outi ; out (#F2),#C0
out (c),0 ; out (#F2),0
ld bc,#F8F4
outi
repeat 10
outi
ld b,c
ini
rend
; remet le PPI en état de faire de la musique!
ld c,#82
out (c),c ; out (#F3),#82
outi      ; out (#F2),0
dec b
outi      ; out (#F0),0
ret

keyboard_buffer_init
defb #0E
defb #C0
defb #92
keyboard_buffer=$+1
keyboard_line=#40
repeat 10
defb keyboard_line,0
keyboard_line=keyboard_line+1
rend
defb 0
defb 0


Revenir en haut
Publicité






MessagePosté le: Mar 20 Mar - 14:38 (2018)    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
Longshot


Hors ligne

Inscrit le: 21 Nov 2015
Messages: 87
Masculin
Point(s): 1
Moyenne de points: 0,01

MessagePosté le: Mar 20 Mar - 20:16 (2018)    Sujet du message: routine clavier rapide Répondre en citant

Shocked Ben voyons!!


Si tu mets A11 à 0 tu sélectionnes en effet le PPI.
Mais si tu mets A10 à 0 tu crées potentiellement d'autres combinaisons qui peuvent affecter d'autres périphériques simultanément.

Du coup, ton programme risque de "discuter" avec d'autres périphériques.


Par exemple le moteur drive est commandé via :  xxxxx0x0 0xxxxxxx (FA7E pour désactiver les autres périphériques x=1)

Si tu envoies 0 sur une adresse qui contient ces bits à 0, tu arrêtes le drive, sinon tu le démarres.


Le OUTI envoie une valeur de #40 à #49 (01000xxx) pour la sélection de la ligne clavier, donc une valeur non nulle (arrêt du drive...). F2 avec une ligne clavier c’est donc une porte ouverte pour tous les périphériques qui répondent à certaines combinaisons
xxxx0x10  xxxxxxxx PPI port F6 avec une donnée  (x sont à 1 pour éviter les autres périph)

xxxxx0x0 0xxxxxxx FDC Motor (x sont à 1 pour éviter les autres périph)
Mais si tu mets A10 à 0 alors on a plusieurs combo, et déjà tu crées un accès FDC motor...

Donc si sur un CPC tu fais un OUT &F200,1 en toute logique ça doit démarrer le drive...
Et donc ton truc doit déjà arrêter le drive!

Après il faut vérifier au cas par cas, mais il y a des périphériques qui ont chaud (ram vortex, ram 4mb, rs232, aleste 520)
Bref, tu n'es pas à l'abri que ta routine se mette un jour à connecter une ram...

Si tu veux une routine rapide, et moyennant une contrainte de positionnement de la table clavier en ram (#xx40) :
LD B,D
OUT (C ),L
LD B,E
INI
Avec L qui contient #40 et H=xx, D=#F4 et E=#F6
Ca va aussi vite, ça prend autant de place car on n’a plus besoin d'une table de 20 octets mais de 10 et c'est donc plus simple à gérer.


 


Revenir en haut
roudoudou


Hors ligne

Inscrit le: 14 Juil 2016
Messages: 388
Localisation: LYON
Masculin
Point(s): 4
Moyenne de points: 0,01

MessagePosté le: Mar 20 Mar - 20:37 (2018)    Sujet du message: routine clavier rapide Répondre en citant

Merci pour la nouvelle optimisation, on doit pouvoir cumuler Mr. Green

Comme je ne compte pas tester le clavier pendant un accès disque, ça me va Razz

Effectivement, ça éteint le moteur du lecteur de disquette Okay


Revenir en haut
Longshot


Hors ligne

Inscrit le: 21 Nov 2015
Messages: 87
Masculin
Point(s): 1
Moyenne de points: 0,01

MessagePosté le: Mar 20 Mar - 21:15 (2018)    Sujet du message: routine clavier rapide Répondre en citant

En fait, j'ai dit une petite bêtise.
Ca doit pouvoir se régler en partie pour le FDC.
C'est ce qui est dans C qui constitue l'adresse complète d'I/O.
Si on a A11=0, A10=1, A8/A9=Reg PPI, alors le contenu de C n'est pas interprété comme périphérique.

Par contre, lorsque A10=0, le contenu de C n'est pas anodin.
(registre que tu n'as pas initialisé en entrée soit dit en passant...)
Vu que  tu as "étendu" la méthode à tous les registres du PPI, tu as démultiplié les périphériques potentiels.
Car selon C, on peut attaquer pas mal de choses.
Prenons par exemple le FDC Reg Data : xxxxx0x1 0xxxxxx1
Ou encore la ram VORTEX : xxxxx0xx x0xxxx0x
Dans ton programme, lorsque tu te soucies de C, il vaut F4 (11110100) puis 82 (10000010).
Ces deux valeurs ne devraient pas pouvoir agir sur le drive motor car le bit 7 est à 1.
OUT &F280,1 ne devrait pas démarrer le drive.
Elles ne devraient pas non plus interférer sur le FDC pour la même raison (bit 7=1)
La ram vortex échappe à la faux Roudoudou grâce à l'absence du combo bit 1&6=0 dans F4 et 82.
Je pense que la CPCISA (1111100x 111xxxxx) appréciera moins  #F4 en présence du PPI port A et port B

 
Citation:
 Comme je ne compte pas tester le clavier pendant un accès disque, ça me va
C'est pas une raison ! Rogntudju!
Il faut quand même que tu préviennes que ta routine peut avoir ce genre d'effet de bord.


Revenir en haut
roudoudou


Hors ligne

Inscrit le: 14 Juil 2016
Messages: 388
Localisation: LYON
Masculin
Point(s): 4
Moyenne de points: 0,01

MessagePosté le: Mar 20 Mar - 21:41 (2018)    Sujet du message: routine clavier rapide Répondre en citant

Heu je suppose que pour entrer chez les Logon c'est mort alors? Laughing

Revenir en haut
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 2 664
Masculin
Point(s): 53
Moyenne de points: 0,02

MessagePosté le: Mar 20 Mar - 22:22 (2018)    Sujet du message: routine clavier rapide Répondre en citant

roudoudou a écrit:
Heu je suppose que pour entrer chez les Logon c'est mort alors? Laughing


MacDeath a fermé les inscriptions...  Mort de Rire
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Revenir en haut
Longshot


Hors ligne

Inscrit le: 21 Nov 2015
Messages: 87
Masculin
Point(s): 1
Moyenne de points: 0,01

MessagePosté le: Mar 20 Mar - 22:51 (2018)    Sujet du message: routine clavier rapide Répondre en citant

 
Citation:
 Heu je suppose que pour entrer chez les Logon c'est mort alors?

Tu trouveras du bien plus "sale" dans certaines démos logon Embarassed

Revenir en haut
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 2 664
Masculin
Point(s): 53
Moyenne de points: 0,02

MessagePosté le: Mer 21 Mar - 22:03 (2018)    Sujet du message: routine clavier rapide Répondre en citant

Iron avait fait un schéma assez intéressant que je vous partage.



Ca pourra donner une certaine idée de quel port peut être touché ou pas.
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Revenir en haut
cmp


Hors ligne

Inscrit le: 08 Sep 2014
Messages: 180
Localisation: nord
Masculin Balance (23sep-22oct)
Point(s): 2
Moyenne de points: 0,01

MessagePosté le: Mer 21 Mar - 22:36 (2018)    Sujet du message: routine clavier rapide Répondre en citant

Excellent le schéma Smile 
_________________
CMP from impact cpc


Revenir en haut
Skype
Longshot


Hors ligne

Inscrit le: 21 Nov 2015
Messages: 87
Masculin
Point(s): 1
Moyenne de points: 0,01

MessagePosté le: Mer 21 Mar - 23:58 (2018)    Sujet du message: routine clavier rapide Répondre en citant

 
Citation:
Excellent le schéma


En effet, le schéma présente très bien les choses
Il ne reste plus qu'à le compléter avec toutes les adresses i/o connues.
Reste plus qu'à écrire un petit programme en basic ou tu renseignes un port BC, et qui t'indique en retour tous les périphériques concernés..


Revenir en haut
roudoudou


Hors ligne

Inscrit le: 14 Juil 2016
Messages: 388
Localisation: LYON
Masculin
Point(s): 4
Moyenne de points: 0,01

MessagePosté le: Jeu 22 Mar - 09:34 (2018)    Sujet du message: routine clavier rapide Répondre en citant

Pas mal d'info ici, c'est vrai que l'idée d'un programme basic est sympa Smile
http://www.cpcwiki.eu/index.php/I/O_Port_Summary


Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 05:06 (2018)    Sujet du message: routine clavier rapide

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Amstrad Plus Index du Forum -> Bienvenue sur ce forum -> Programmation Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  

Index | Panneau d’administration | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com