[Exelvision] Nouvel émulateur EXL100

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

Avatar de l’utilisateur
gilles
Messages : 2779
Inscription : 07 août 2008 13:44
Localisation : Nantes
Contact :

Re: [Exelvision] Nouvel émulateur EXL100

Message par gilles »

Tu peux mettre l'adresse de traitement de ton choix pour le traitement du timer il me semble... (en $C004).
tant que tu ne l'écrases pas dans ton prog, R2 est toujours valide...

a la fin du TRAP4
f980 74 02 02 OR %>2,R2 -- Speech in use

lors de la reception du message par le 7041 R2 est mis à jour
speech_buffer_end(IRQ):
f99e 73 FD 02 AND %>FD,R2

a priori c'est suffisant...
pour le VDP je sais qu'il est lent, c'est clair, mais pour avoir un affichage propre... la synchro... c'est bien... je ne supporte pas ces jeux basic dont l'affichage est quasi illisible parceque la synchro n'est pas utilisée...
jester
Messages : 2328
Inscription : 01 janv. 2009 23:16
Localisation : Grenoble

Re: [Exelvision] Nouvel émulateur EXL100

Message par jester »

C'est plus fin que cela... le FLGCOM marche bien tant que tu contrôles les choses dans ta boucle de programme principal, hors de toute interruption. Il se trouve que controler le FLGCOM au sein d'une interruption Timer (assez lente dans ce cas) pour lancer la routine de traitement d'une chanson (qui parcourt les notes et lance la production d'une note sur le 5220) pose des problèmes de Timing. Speech en cours est désactivé à plusieurs reprise à l'intérieur même de la routine de traitement du 7020, ainsi le Timer repère un arrêt du Speech alors qu'il est en phase intermédiaire de comm avec le 7041... lui même en cours de traitement avec le 5220. J'ai essayé de poser différent type de verrou beaucoup plus costaud que le simple test du FLGCOM, mais rien y fait... le 7041 se plante comme une bouse en bouclant sur une comm qui jamais ne se termine.
Et oui les interruptions doivent être réactivées à l'intérieur même de l'INT du Timer (grosse source de problème) sinon le 7020 loupe des envois de Data du Speech vers le 7041... et c'est la cata.

Mon programme marche très bien sous DcExel qui joue de la musique sous l'éditeur du Basic... mais plante à la première note sur unExel100 : preuve que la logique est bonne, mais le 7041 se fige (sans possiblité de faire de RESET, il est en fait dans une boucle d'attente).

Je suis arrivé à la conclusion que pendant q'un speech est en cours (chaine de communication 7020 <-> 7041 <-> 5220) il vaut mieux pas jouer au con avec les INT. Le moindre retard et c'est la mort par le bouton marche/arrêt !

Une version du programme test se trouve dans l'archive ICI. Il y a le codes asm (speechMusic2.asm) et le lanceur Basic (speechMusic2.k7). Je ne me souviens plus du type de controle appliqué dans cette version, il y en a eu tellement (jusqu'au controle bas niveau via IOCTL0).
Avatar de l’utilisateur
gilles
Messages : 2779
Inscription : 07 août 2008 13:44
Localisation : Nantes
Contact :

Re: [Exelvision] Nouvel émulateur EXL100

Message par gilles »

je testerai ca ce soir avec mon ému... qui devrait reproduire plus ou moins les memes bugs que l'exl100.
Je ne patche ni la rom ni ne regarde quelque registre que ce soit.
Je suis d'accord avec toi sur la mise à jour du flag à chaque envoi de 8 nouveaux octets (suite à un speech_low_buffer) mais il me semble qu'on peut jouer avec d'autres registres pour compléter la condition (il y a un pointeur qui suit le buffer en cours dans R7/R8) donc si R7/R8 est à la fin du buffer (8derniers octets) et que le flag repasse à l'état "pas de son" c'est bon...
jester
Messages : 2328
Inscription : 01 janv. 2009 23:16
Localisation : Grenoble

Re: [Exelvision] Nouvel émulateur EXL100

Message par jester »

Je n'avais pas pensé à ces deux registres, l'idée est bonne. Si on peut connaître aussi la fin du buffer alors ça peut le faire.
J'avais un peu laché ce test car le résultat audio n'était pas super convaincant, avec des contraintes assez énormes... et surtout j'ai pas encore compris comment se fait le calcul d'une note dans le détail. Si on arrive à comprendre la chaine LPC à la base du calcul des notes, on peut imaginer utiliser d'autres chaines et donc disposer d'autres sons.

Je bosse pour l'instant sur l'utilisation du Timer3 du 7042 comme Timer supplémentaire pour le 7040 (par procuration). Je pense qu'il sera possible d'utiliser un second Timer dans l'Exeltel en utilisant la gestion du port série embarqué dans le 7042 (et programmable via le 7040). ça peut être sympa... les premiers tests sont très encourageants.
Par contre sur l'Exl100, y'a pas moyen, le 7041 semble une préversion du 7042 (jamais officiellement documenté) dont le port série est incomplet. Donc tu peux t'éviter l'émulation du port série du 7041 qui reste définitivement sans intérêt.

Le port série étant la dernière grosse inconnue. Avec en plus la doc du 3556, je pense que les machines Exelvision auront perdu tous leurs secrets.

Voila les trucs en cours de mon coté.
Avatar de l’utilisateur
gilles
Messages : 2779
Inscription : 07 août 2008 13:44
Localisation : Nantes
Contact :

Re: [Exelvision] Nouvel émulateur EXL100

Message par gilles »

la datasheet du TMS5220 t'indiquera presque tout, en particulier les tableaux de la fin.
Ce qu'il faut savoir, c'est que les bits sont inversés par rapport à ce que l'on attend. ie lorsqu'on ecrit x07 vers le 5220, il va lire 11100000 et ainsi de suite.
Le pitch (6 bits pour les trames voiced (de longueur 50bits)) est en échelle variable.
Pour faire des notes, on ne fera que des trames voiced. Idealement on commence avec une energie faible, puis forte... puis on répete ces trames puis on repasse à une énergie faible puis on stoppe... pour éviter les transitions trop brutales...
Avatar de l’utilisateur
gilles
Messages : 2779
Inscription : 07 août 2008 13:44
Localisation : Nantes
Contact :

Re: [Exelvision] Nouvel émulateur EXL100

Message par gilles »

sinon le 7041 est documenté... il est dans les annexes du doc texas... pas de grosse différence par rapport au 7042
jester
Messages : 2328
Inscription : 01 janv. 2009 23:16
Localisation : Grenoble

Re: [Exelvision] Nouvel émulateur EXL100

Message par jester »

Je viens de regarder mon archive et je vois que la version avec Timer a disparu... j'en avais tellement mare que je me rappelle avoir tout effacé pour revenir à une routine dans une boucle programme, histoire de repartir sur des bases seines.

Bon je vais m'y remettre car ton idée de registre R7-R8 semble tout à fait réaliste, si ça ne marche pas avec ça, c'est qu'il y a un soucis ailleurs...

J'ai dans mes plans d'étudier de près les trames d'une chaine LPC. La où je suis un peu sec, c'est pour trouver le calcul permettant de faire le lien entre la fréquence d'une note et le contenu d'une trame.
Je suppose aussi qu'un spécialiste en analyse de signal pourrait ""assez facilement"" produire un convertisseur WAV -> LPC, parce que QBOX c'est pas extra... mais on a que ça.

Effectivement le 7041 est bien spécifié dans la doc du TMS7000... il vaut donc mieux imprimer que parcourir un document PDF. Mais je pense que le problème vient surtout de la manière de gérer le port série dans la ROM du 7041/7042 et dans l'initialisation au travers des 7020/7040. Bon je vais refaire des tests...
Avatar de l’utilisateur
gilles
Messages : 2779
Inscription : 07 août 2008 13:44
Localisation : Nantes
Contact :

Re: [Exelvision] Nouvel émulateur EXL100

Message par gilles »

pas encore essayé QBOX, il me semble que c'est du LPC12 et je ne suis pas certains que les coefficients soient les mêmes (hormis le fait qu'il y en ait 2 de plus...)... Sous linux j'ai trouvé un package (sources) qui fait du LPC10, c'est probablement une meilleure piste.
Pour tes sources... un petit projet sourceforge... avec un CVS ça le fait bien... Je sais que ça ouvre au monde entier la lecture des sources, mais en lisant de plus près les statistiques, le fait est rarissime... Jerome et Olivier ont lu les sources, peut être Daniel aussi... mais ca doit être pratiquement tout :)
Je vais t'envoyer un lien vers une version avec la synthèse vocale... qui marchouille et doit être correcte vis à vis de R7/R8 et FLGCOM. Une version PC allegro statique pour le moment, donc avec le debugger...
Avatar de l’utilisateur
gilles
Messages : 2779
Inscription : 07 août 2008 13:44
Localisation : Nantes
Contact :

Re: [Exelvision] Nouvel émulateur EXL100

Message par gilles »

En préversion sur la page habituelle une 0.6c allegro win32 qui cause. (lien dans la partie news).
Avatar de l’utilisateur
OlivierP
Messages : 703
Inscription : 21 sept. 2009 15:50
Localisation : IDF

Re: [Exelvision] Nouvel émulateur EXL100

Message par OlivierP »

A propos de debugger, j'ai complété celui de la version wxWidgets : http://dl.free.fr/pOySMxWsj
Il n'est pas encore fini, ni testé.
Avatar de l’utilisateur
gilles
Messages : 2779
Inscription : 07 août 2008 13:44
Localisation : Nantes
Contact :

Re: [Exelvision] Nouvel émulateur EXL100

Message par gilles »

Parfait ;) maintenant tu peux commencer a potasser la gestion du son parce que je viens de trouver le dernier bug dans la gestion des trames... Et il cause ;) mais il a un accent de casserole... Quelques détails a revoir dans le traitement ...
Avatar de l’utilisateur
OlivierP
Messages : 703
Inscription : 21 sept. 2009 15:50
Localisation : IDF

Re: [Exelvision] Nouvel émulateur EXL100

Message par OlivierP »

OK, je regarderai quand le CVS sera à jour.
Le son sera fait avec SDL car wxWidgets est très limité en la matière.
EDIT : je viens de tester le binaire windows, c'est très prometteur !
Avatar de l’utilisateur
gilles
Messages : 2779
Inscription : 07 août 2008 13:44
Localisation : Nantes
Contact :

Re: [Exelvision] Nouvel émulateur EXL100

Message par gilles »

et encore, cette version avait un bug idiot dans la remise à 0 de la FIFO du 5220, elle etait bien remise à 0 mais c'est une FIFO de bits, et le nombre de bits consommés n'était pas remis à 0... le bip du basic etait bon une fois sur 2... je vais mettre une nouvelle version en ligne...
[edit]
nouvelle version en ligne qui cause mieux :), pas aussi bien que DCexel... mais je me demande si DCexel ne parle pas mieux que les exelvision...
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Exelvision] Nouvel émulateur EXL100

Message par Daniel »

Je ne crois pas qu'un émulateur soft puisse faire mieux que le circuit analogique qu'il cherche à imiter. Dans l'idéal il fait aussi bien, dans la pratique un peu moins. La différence vient surtout du matériel de restitution du son. Un exeltel connecté à une chaîne haute-fidélité doit faire mieux que dcexel sur un PC.
Daniel
L'obstacle augmente mon ardeur.
jester
Messages : 2328
Inscription : 01 janv. 2009 23:16
Localisation : Grenoble

Re: [Exelvision] Nouvel émulateur EXL100

Message par jester »

DcExel parle peut être légèrement mieux qu'un Exl100, mais il faut vraiment tendre l'oreille. Il reproduit aussi très bien les Prount! Zlurg Kriizh Glurps qui font le bonheur des enchainements de sons sur Exl.
Un Exl100 parle par contre beaucoup mieux que ton émulation du 5220 qui semble un peu trop enroué... Wizord couve la grippe A :mrgreen:

Pour ma musique sous interruption j'ai testé l'idée du registre R7/R8. Mais c'est plus compliqué dans la réalité, car la routine pour jouer une chaine LPC dans la ROM envoie 24 octets au 7041, puis lecture sous interruption des blocs de 8 octets suivants (au moins 1). Donc il y a toujours au moins 32 octets de lus... et ça complique le code car la valeur du double registre R8 est différent de la fin de la chaine LPC !
J'ai essayé en testant juste si, après un FLGCOM Ok, le double registre R7/R8 est supérieur à la fin de chaine... facile et c'est un bon compromis.
Résultat :
- DcExel joue la musique sans soucis
- l'Exl100 joue la première note et plante exactement comme pour tous mes essais précédents
- ton émulateur plante sans jouer une seule note, je n'ai pas regardé plus loin (le chargement par Wav rend inutilisable tout bidouillage... il faut absolument placer le code dans une ROM sinon la folie n'est pas loin :lol: ).

Je veux bien que mon test de R7/R8 ne soit pas exact mais un plantage à la première note comme d'hab c'est étrange... il semble y avoir un soucis à gérer le speech dans une interruption.
DcExel émulant les fonctionnalités du 7041 mais pas le 7041, il ne plante pas si on ne touche pas le clavier... comportement logiquement normal... si le matériel réel n'était pas un Exl100 ! C'est un des rares cas ou DcExel déforme la réalité... un cas limite pour l'instant inexplicable.
J'espère que l'avancée de ton émulateur permettra de trouver une explication à ce petit mystère. Mais cette gestion du son entièrement sous interruption n'est pas naturel pour ce genre de machine, et la routine elle-même prend trop de temps de calcul pour être réellement utilisable dans une démo ou un jeu je pense.
Répondre