dcvg5k: simuler le clavier dans Fichier

Couvre tous les domaines de l'émulation ou de la virtualisation ainsi que les discussions sur les divers outils associés.

Modérateurs : Papy.G, fneck, Carl

joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

dcvg5k: simuler le clavier dans Fichier

Message par joaopa »

Bonjour,

la fonction simuler le clavier de dcvg5k donne des résultats erronés si on veut écrire un fichier texte dans le logiciel Fichier. J'ai attaché un fichier texte pour tester.

Merci d'avance
Pièces jointes
factor.l.zip
(546 octets) Téléchargé 150 fois
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: dcvg5k: simuler le clavier dans Fichier

Message par Daniel »

Fichier est un logiciel très spécial, car il n'utilise pas les routines standard du système pour les entrées/sorties. Pour le faire fonctionner avec dcvg5k, il a été nécessaire de reprogrammer tous les accès à la cassette.

Je n'ai pas vérifié, mais je suppose que c'est un problème similaire pour la lecture du clavier. Il faudrait rechercher comment les touches sont lues, et éventuellement remplacer les routines utilisées par des appels standard. L'émulateur peut détourner les routines standard du système car elles sont immuables et à une adresse bien définie. Par contre il ne peut pas connaître les routines d'entrées/sorties recopiées (et peut-être modifiées) à l'intérieur d'un logiciel.
Daniel
L'obstacle augmente mon ardeur.
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: dcvg5k: simuler le clavier dans Fichier

Message par joaopa »

J'ai dessassemblé Fichier et il appelle bien la routine 02a7H pour la gestion du clavier.
La simulation du clavier fait-elle quelque chose de particulier avec cette routine?

Merci d'avance
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: dcvg5k: simuler le clavier dans Fichier

Message par Daniel »

La simulation du clavier attend l'exécution de la routine 02a7. Quand elle est appelée, le code de la touche est copié dans le registre A et l'exécution se poursuit en 02ee.

Code : Tout sélectionner

  //attente scrutation clavier
  while((CPU.PC.W & 0xffff) != 0x02a7) Run(1);
  //envoi de la touche
  CPU.AF.W = (CPU.AF.W & 0x00ff) | (c << 8);
  CPU.PC.W = 0x02ee;
C'est très simple, et je ne sais pas ce qui peut poser problème. Peut-être la codification de certains caractères dans le fichier texte est-elle différente de celle attendue par le VG5000 ? Le caractère déposé dans le registre A est celui du fichier texte, sauf pour les caractères accentués dont le code est modifié par la fonction suivante :

Code : Tout sélectionner

 switch(c & 0xff)
 {
  case 0xa3: keybtext[keybindex++] = 0x1c; break; //£
  case 0xbd: keybtext[keybindex++] = 0x1d; break; //½
  case 0xe0: keybtext[keybindex++] = 0x17; break; //à
  case 0xe2: keybtext[keybindex++] = 0x18; break; //â
  case 0xe7: keybtext[keybindex++] = 0x15; break; //ç
  case 0xe8: keybtext[keybindex++] = 0x19; break; //è
  case 0xe9: keybtext[keybindex++] = 0x12; break; //é
  case 0xea: keybtext[keybindex++] = 0x1b; break; //ê
  case 0xeb: keybtext[keybindex++] = 0x65; break; //ë
  case 0xee: keybtext[keybindex++] = 0x11; break; //î
  case 0xef: keybtext[keybindex++] = 0x14; break; //ï
  case 0xf4: keybtext[keybindex++] = 0x1a; break; //ô
  case 0xf6: keybtext[keybindex++] = 0x5f; break; //ö
  case 0xf9: keybtext[keybindex++] = 0x13; break; //ù
  case 0xfb: keybtext[keybindex++] = 0x16; break; //û
  default:   keybtext[keybindex++] = c; break;
 }
Il y a peut-être d'autres caractères spéciaux dans le fichier en entrée, qu'il faudrait transcoder aussi pour les rendre compatibles avec le VG5000 ? Peux-tu essayer de vérifier ce point ?
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3047
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: dcvg5k: simuler le clavier dans Fichier

Message par Papy.G »

Maintenant que les PCs sont assez puissants, serait-il envisageable d'intégrer à tes émulateurs un mode de simulation de matrice clavier (éventuellement désactivable), dans lequel les frappes clavier du PC (ou simulées) sont stockées dans une zone mémoire représentant la matrice, et où la routine de la rom comme les autres viendrait piocher lorsque le programme le demande (ou lors d'une interruption clavier, lorsque le matériel émulé le supporte). 8)
Je sais bien que les conseilleurs ne sont pas les payeurs, mais c'était juste une idée comme ça, n'étant pas pour l'instant utilisateur de tes émulateurs. :oops:
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: dcvg5k: simuler le clavier dans Fichier

Message par Daniel »

En utilisation normale de l'émulateur, c'est déjà comme tu le proposes : il y a en mémoire un tableau de touches, avec un bit indiquant si elle est enfoncée ou pas.

En simulation du clavier par un fichier texte, je ne peux pas utiliser le même système car il est beaucoup trop lent. Il faudrait attendre l'interruption déclenchant la scrutation du clavier, puis la scrutation elle-même, puis le décodage de la touche, avant de pouvoir entrer le caractère suivant, avec un petit délai de sécurité pour ne pas risquer de l'envoyer trop tôt.

C'est pourquoi je court-circuite la scrutation et le décodage des touches lors de la simulation du clavier par un fichier texte ou par le presse-papier. Ca revient au même dès lors que le programme utilise la routine standard pour acquérir les touches.

Le problème rencontré avec le logiciel Fichier vient plus vraisemblablement d'une anomalie dans la trans-codification des caractères entre le fichier Windows et le VG5000. Si c'est bien ça l'erreur, elle sera facile à corriger.
Daniel
L'obstacle augmente mon ardeur.
Xavier

Re: dcvg5k: simuler le clavier dans Fichier

Message par Xavier »

Salut,
avec ce programme:
10 I=key(0)
20 if I=0 THEN GOTO10
30 PRINT CHR$(i)
40 GOTO 10

Avec "Rafraîchissement après chaque caractère."
Le buffer presse-papier est purgé pour une ligne supérieure à 255 caractères.

Avec "Après chaque ligne(plus rapide)"
ça marche aussi.

Mais, les retours chariots ne sont pas pris en compte !!! (car il en a!)

Donc, c'est le programme qui applique un buffer limité par lignes.
Il faut donc ajouter des CRLF à chaque lignes... car l'émulateur ne doit pas être compatible avec les fichiers texte MAC ou Unix, avec un simple CR (h0D) ou un simple LF(h0A), que ne gère pas Windows!

Et dans ton exemple, tu es au format Unix... et l'émulateur de reconnait pas les retour à la ligne en LF...

Donc, il faut que tu choisisses le format texte PC (en CRLF) pour valider tous les retours à la ligne!
CQFD.

Ton fichier (Unix): (h0A)

Code : Tout sélectionner

Offset      0  1  2  3  4  5  6  7   8  9 10 11 12 13 14 15
00000000   5B 46 41 43 54 4F 52 2E  4C 5D 0A 5B 32 34 6D 61   [FACTOR.L].[24ma
00000016   79 38 37 61 62 75 5D 0A  0A 5B 43 68 6F 70 20 66   y87abu]..[Chop f
00000032   61 63 74 6F 72 73 20 64  20 66 72 6F 6D 20 6E 5D   actors d from n]
00000048   0A 5B 52 65 74 75 72 6E  20 64 20 69 66 20 74 68   .[Return d if th
00000064   69 73 20 77 61 73 20 6E  27 73 20 62 69 67 67 65   is was n's bigge
Windows: (h0D0A)

Code : Tout sélectionner

Offset      0  1  2  3  4  5  6  7   8  9 10 11 12 13 14 15
00000000   5B 46 41 43 54 4F 52 2E  4C 5D 0D 0A 5B 32 34 6D   [FACTOR.L]..[24m
00000016   61 79 38 37 61 62 75 5D  0D 0A 0D 0A 5B 43 68 6F   ay87abu]....[Cho
00000032   70 20 66 61 63 74 6F 72  73 20 64 20 66 72 6F 6D   p factors d from
00000048   20 6E 5D 0D 0A 5B 52 65  74 75 72 6E 20 64 20 69    n]..[Return d i
00000064   66 20 74 68 69 73 20 77  61 73 20 6E 27 73 20 62   f this was n's b
Et le Mac: (h0D)

Code : Tout sélectionner

Offset      0  1  2  3  4  5  6  7   8  9 10 11 12 13 14 15
00000000   5B 46 41 43 54 4F 52 2E  4C 5D 0D 5B 32 34 6D 61   [FACTOR.L].[24ma
00000016   79 38 37 61 62 75 5D 0D  0D 5B 43 68 6F 70 20 66   y87abu]..[Chop f
00000032   61 63 74 6F 72 73 20 64  20 66 72 6F 6D 20 6E 5D   actors d from n]
00000048   0D 5B 52 65 74 75 72 6E  20 64 20 69 66 20 74 68   .[Return d if th
00000064   69 73 20 77 61 73 20 6E  27 73 20 62 69 67 67 65   is was n's bigge
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: dcvg5k: simuler le clavier dans Fichier

Message par Daniel »

Xavier a écrit :l'émulateur ne doit pas être compatible avec les fichiers texte MAC ou Unix
Oui, c'est une bonne piste, mais à mon avis c'est le logiciel FICHIER qui n'est pas compatible avec MAC ou Unix.
DCVG5K envoie bêtement les caractères du fichier texte. Il peut être aux normes Windows ou pas, peu importe. Mais le logiciel FICHIER, lui, doit espérer un CR-LF en fin de ligne, et s'il ne le reçoit pas il est perdu.

De plus, en mode ligne, dcvg5k détecte la fin de ligne grâce au caractère CR. S'il n'y en a pas il envoie tout le fichier d'un coup, ce qui n'est peut-être pas prévu par le logiciel FICHIER.
Daniel
L'obstacle augmente mon ardeur.
Xavier

Re: dcvg5k: simuler le clavier dans Fichier

Message par Xavier »

:D
De plus, en mode ligne, dcvg5k détecte la fin de ligne grâce au caractère CR.
Bien vu Daniel!
Unix est en LF.
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: dcvg5k: simuler le clavier dans Fichier

Message par joaopa »

J'ai remplacé tout les CR par CRLF. Mais toujours le même problème. Je continue l'enquête.
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: dcvg5k: simuler le clavier dans Fichier

Message par Daniel »

Le problème se produit avec la simulation clavier en mode "ligne", mais ce produit-il aussi en mode "caractère" ?
Le logiciel Fichier n'est peut-être pas assez rapide pour traiter les touches quand elles sont envoyées trop vite.
La première hypothèse (mauvaise codification de certains caractères) reste aussi à examiner.
Daniel
L'obstacle augmente mon ardeur.
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: dcvg5k: simuler le clavier dans Fichier

Message par joaopa »

Ca ne doit pas être un problème d'encodage des caractères. Il semble qu'il manque des caractères (en moyenne 1 sur 2)
Ca fait bien penser à un problème de timing. J'ai divisé par le temps d'attente dans la routine d'acquisition des caractères du logiciel Fichier, mais ca ne change rien malheureusement.

Chaque fois que dcvg5k rencontre l'appel 02a7H, il déroute le fonctionnement vers son programme interne. Est-ce comme ceci que fonctionne l'émulateur. Si c'est oui, je ne vois pas comment pourrait apparaître le problème de timing, puisque dcvg5k doit rendre la main au programme Fichier après avoir traité et envoyé son caractère et pendant ce temps là, le programme VG5000 est inactif
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: dcvg5k: simuler le clavier dans Fichier

Message par joaopa »

Le problème de timing semble se préciser. Il y a une boucle d'attente de 1000h et une autre de 600h (pas imbriquées l'une dans l'autre, mais presque à la suite) dans la routine d'acquisition du caractère. J'ai mis toutes les deux à 0001h et là je récupère plus de caractères avec la fonction simulation de caractères.

Daniel, peux-tu mettre un temps d'attente pour l'envoi de caractère dans cette fonction
(genre 1 seconde pour commencer pour être sûr que c'est bien le problème. Si c'est le cas, on pourra baisser le temps d'attente petit à petit.)
Merci d'avance
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: dcvg5k: simuler le clavier dans Fichier

Message par Daniel »

L'envoi de caractères par dcvg5k n'est pas contrôlé par un timer, mais par le VG5000 quand il appelle la routine 02a7.

Pour ralentir l'acquisition, il faut que le VG5000 appelle moins souvent cette routine. Je ne me souviens plus comment fonctionne la scrutation du clavier. Elle est peut-être déclenchée par une interruption ? Dans ce cas il faudrait la désactiver tant que le logiciel FICHIER n'a pas fini de traiter la touche.
Daniel
L'obstacle augmente mon ardeur.
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: dcvg5k: simuler le clavier dans Fichier

Message par joaopa »

Bonjour,

j'ai trouvé le problème. Fichier fait une boucle de 600h qui lit la routine 2a7H. Ca va très vite. Si on a deux valeurs consécutives distinctes (sachant que 2a7 renvoie 0 si aucune touche n'est appuyée), Fichiers renvoie aussitôt la dernières valeur obtenue sans finir la boucle. Si on va au bout de la boucle, la dernière valeur obtenue (si non nulle, sinon on recommence) est renvoyée.
En moyenne, avec la fonction simulation clavier, on perd un caractère sur deux.
Répondre