MSX Village forum

La Place des Développeurs Buffer clavier

aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2904

Le 08/01/2011 à 22h00
Je réfléchi à des idées de p'tit jeu à développé sur MSX et j'aimerai savoir l'une d'entre elle est réalisable.
En gros, il s'agit d'une suite de tableau fixe avec des énigmes à réaliser en contrôlant 2 personnages en simultané (un jeu pour tester son ambidextrie ^^).
D'où ma question : le buffer clavier des MSX est t'il assez grand pour gérer 12 touches (6 par personnage) utilisables et au maximum 6 (3 par personnage) simultanément.
Je me souviens qu'a mes débuts de dev sur PC, ce problème m'avait bien embêté.
Quand est t'il sur MSX ? :hum

EDIT : Pour info, je compte dev en C et ASM (au cas ou le Basic aurait une limitation spécifique). Edité par aoineko Le 08/01/2011 à 22h02


On est toujours ignorant avant de savoir.
Github    
Obelix Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 03/10/2009 à 08h06

Messages: 1702

Le 08/01/2011 à 22h05
:top :) pour ton premier post


MSX 8235 , MSX 8245 , MSX 8250 , MSX 8280

   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2904

Le 08/01/2011 à 22h10
Je peux faire péter le champagne... j'ai retrouvé mes codes de test C pour MSX et tous les tools de compilation. :D


On est toujours ignorant avant de savoir.
Github    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10730

Le 08/01/2011 à 22h27
le clavier du MSX est une matrice et est directement décodé donc l'appui sur plein de touches est possible

maintenant quand a savoir si elles arrivent dans le buffer clavier c'est autre chose

la technique utilisée est INKEY$ en basic qui renvoi la derniére touche utlisée uniquement

en machine le test de la matrice est prévu dans le bios et renvoi le code des touches enfoncées sur une ligne

routine 0141H SNSMAT ScaN Specified row in keyboard MATrix
on charge dans A la numero de la ligne 0 a 8 ou 0 a 10 avec pavé numérique
on relis dans A l'état de la ligne en binaire une touche enfoncée = 0

par cette méthode on peux donc tester au maximun 8 touches en même temps
le seul probléme restant c'est que la matrice n'est pas dans l'ordre des touches du clavier


:noel
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2904

Le 08/01/2011 à 22h44
Jipe :
par cette méthode on peux donc tester au maximun 8 touches en même temps

le seul probléme restant c'est que la matrice n'est pas dans l'ordre des touches du clavier




Cool !

Si rien n'empêche de faire plusieurs test par cycle on dois pouvoir tester toutes les touches.

Tu as un lien vers le mapping touches <=> entrée dans la matrices ?



Sinon, puisqu'on me demandé des détails sur ce projet, l'idée et de contrôler 2 personnages en même temps en vue de coté.

Pour chaque personnage, on a besoin de 6 touches : droite/gauche, haut/bas (saut/échelle), un bouton action et un bouton menu (qui pourrait être commun). Au pire, on pourrait sauter en diagonale et appuyer sur le bouton d'action sur les 2 personnages en même temps (d'où les 6 boutons simultanés). Ceci dit, ce sera très rarement le cas. ^^


On est toujours ignorant avant de savoir.
Github    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10730

Le 08/01/2011 à 22h51
et 2 joysticks ce serait pas plus facile a gérer pour un tel jeu ?

sinon pour le clavier tout est ici : http://map.grauw.nl/articles/keymatrix.php

le key ghosting doit répondre a ta prémiére question


:noel
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2904

Le 09/01/2011 à 00h18
Jipe :
et 2 joysticks ce serait pas plus facile a gérer pour un tel jeu ?



sinon pour le clavier tout est ici : http://map.grauw.nl/articles/keymatrix.php



le key ghosting doit répondre a ta prémiére question




Merci pour le lien, je lis ça de suite.



Pour les 2 joysticks, ça me semble plus difficile à manipuler et puis, tout le monde à pas 2 joystick. ^^

2 sets de touches, j'utilisai ça à l'époque des 1er FPS sur PC : ZQSD pour orienter la camera et les flèches pour se déplacer.

En fait, à l'origine, c'était un projet de jeu pour le PlaystationNetwork (PS3) et le XboxLiveArcade (X360) ; le concept s'applique bien aux manettes à double stick de ces consoles.

J'ai bon espoir que ce soir jouable au clavier (en terme de jouabilité) mais au pire, je ferai autre chose. :D



EDIT : J'suis un peu rouillé ^^

Le code pour récupérer le contenu du clavier est bien :

Code :

ld        a,4(ix)
call    0x0141
ld        l,a


Ou 4(ix) est l'adresse de ma variable matrixRow lors de l'appel de fonction. J'ai le même genre de code pour le joystick qui, de mémoire, marche bien.

J'ai fait un code de test qui affiche un point à l'écran pour chaque bit à un mais j'obtiens un gros pavé... c-à-d tous les bits à 1. :moue



EDIT 2 : Ne pas programmer quand on est crevé devrait être une règle absolue :fou



En fait tout marche ; erreur d'algo plus pas fait gaffe que le 1 signifie "non appuyé" et 0 "appuyé". Du coup, c'est nickel, sauf que quand j'appui sur trop de touche en même temps, les suivantes sont pas prise en comte. Problème de BlueMSX ou du PC ? Si qq'un peut tester sur un vrai MSX, voici la rom de test : test.zip Edité par aoineko Le 10/01/2011 à 16h40


On est toujours ignorant avant de savoir.
Github    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2904

Le 09/01/2011 à 13h02
Qq'un peut t'il tester mon programme sur un vrai MSX ? test.zip (rom + asm + bin)
Une fois lancer, appuyer sur plein de touches, chacune devant afficher un pixel en haut à gauche.
Sur PC via BlueMSX, au bout de qq touches appuyé, les autres sont plus prise en compte. :moue Edité par aoineko Le 09/01/2011 à 13h03


On est toujours ignorant avant de savoir.
Github    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10730

Le 09/01/2011 à 13h07
sur un vrai msx je n'ai pas assez de doigts pour tout allumer en même temps mais ça fonctionne bien

toutes les touches sonr scrutées sauf les fonction ,stop ,cls ,select ,ins ,del,esc, tab, ctrl,shift, return,,graph,space ,code

j'arrive a déplacer le sprite en appuyant un peu partout mais je ne trouve pas a trouver les combinaisons exactes des touches

le graph derriére suit bien le déplacement

on voit bien les limitations du clavier pc sur émulateur par rapport au vrai MSX :|

par contre la combinaison 1, A et 6 donne le même résultat : on allume un 4éme point parasite non attendu
ça se voit aussi en replaçant le 1 par 0 2 3 4 5 on active 4 points en appuyant sur chaque groupe de 3 touches
ça marche aussi avec A U G etc....


:noel
Site web    
MSXosaure Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 03/10/2009 à 00h09

Messages: 781

Le 09/01/2011 à 16h19
On en avait déjà parlé dans un autre post, extrait:



Citation :
Il y aune alternative à INKEY si tu veux, elle est plus rapide et plus "réactive" car elle concerne l'adressage des ports du PPI (Au secours :| ).

Mais non rien d'affolant on va pas non plus entrer directement dans la programmation ASM, :fou .



Il faut, dans un premier temps, s'équiper du tableau suivant.:







Le truc est simple si je veux scruter la touche "B", je dois envoyer dans le port C la valeur correspondante de la ligne où se situe "B", en l'occurrence: 2.



Ensuite je dois lire la valeur renvoyé dans le port B, c'est une valeur binaire codé sur 8 bit chaque colonne correspondant à un bit (vous savez: &B00010010,&B11001100,...) dans le cas présent si la touche "B" est enfoncée cela renverra la valeur &B01111111 (Le B se situant en début de rangée)autrement dit 127(en décimale). les touches non-enfoncées renvoyant '1' et les touches enfoncées '0'.



Pour la programmation ça se complique un peu:

Pour écrire dans C c'est: OUT &HAA,n° de ligne

Pour lire dans B c'est: variable=INP( &HA9)



Au final en programmation ça donne ça:



10 OUT &HAA,2: Z=INP(&hA9): IF Z=127THEN 'saut dans l'espace'



Attention cette méthode ne s'affranchit pas de l'appui sur une touche de la même ligne du port C, il existe une astuce mais cette petite ligne est déjà bien efficace!




Tu vois que l'on peut scruter plusieurs touches par ce biais, en espérant que ça t'aidera!


Le MSXien le plus à l'ouest :fou ... ou presque :D
osaurer
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2904

Le 09/01/2011 à 22h22
Merci les gars !



Jipe :
on voit bien les limitations du clavier pc sur émulateur par rapport au vrai MSX :|




Ah bin zut... ça va pas être relou pour dev sur PC :moue


On est toujours ignorant avant de savoir.
Github    
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie