[Exelvision] ROM du TMS7041 de l'EXL100

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

Modérateurs : Papy.G, fneck, Carl

Daniel
Messages : 17426
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

[Exelvision] ROM du TMS7041 de l'EXL100

Message par Daniel »

Torlus est bien le génie que je supposais :D
Après maintes péripéties, il a réalisé l'impossible : dumper la rom du TMS7041 de l'EXL100 :!:

C'est une mine d'informations qui va dévoiler bien des mystères de l'EXL100, et qui vaut bien un sujet dédié dans le forum. Je propose de poster ici ce que nous découvrirons.
Daniel
L'obstacle augmente mon ardeur.
jvernet
Messages : 2460
Inscription : 12 avr. 2007 10:59
Localisation : France 69
Contact :

Re: [Exelvision] ROM du TMS7041 de l'EXL100

Message par jvernet »

Commençons par remettre le lien vers l'extraction de Greg:

http://heliscar.com/greg/7041b.bin
et on attend avec impatience vos travaux !!!
Fabrice Montupet

Re: [Exelvision] ROM du TMS7041 de l'EXL100

Message par Fabrice Montupet »

Un sacré boulot qu'à a abattu notre ami Greg, encore un grand Bravo! :D
Concernant le lien, j'ai vu avec Greg pour proposer une zone de stockage permanente à cette ROM, ici: http://www.ti99.com/exelvision/website/ ... -de-medias
jester
Messages : 2328
Inscription : 01 janv. 2009 23:16
Localisation : Grenoble

Re: [Exelvision] ROM du TMS7041 de l'EXL100

Message par jester »

Pour les travaux il faut pas s'attendre à des merveilles.
La ROM va permettre à Daniel d'obtenir un émulateur au comportement plus proche de celui de l'Exl100 (est-ce un bien ? j'hésite à répondre :D ), il pourra remplacer pleins de boites noires... et/ou affiner des paramètres.
Ensuite ça ne changera pas grand chose pour programmer la bête:
1) on aura la possibilité de tester sous l'émulateur avec un résultat quasi identique à la machine,
2) on pourra dialoguer avec le 7041 en connaissance de cause, afin d'éviter certaine situations et optimiser de manière générale l'échange.
3) peut être allons-nous découvrir des fonctions non documentées ???

Mais le travail d'analyse est surement beaucoup plus compliqué que pour la ROM du 7020.
Il me semble que ce 7041 travaillait en mode Peripheral Expansion et non pas en mode Single Chip si j'en crois le nombre de MOVP ? Après il faut trouver la signification de tous ces ports...

En bref, je ne sais pas si ça va me permettre d'adapter Space Harrier :wink: mais je suis sur que ça va donner mal à la tête à Daniel dans les mois qui viennent.
Daniel
Messages : 17426
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Exelvision] ROM du TMS7041 de l'EXL100

Message par Daniel »

C'est passionnant de travailler sur ce code que nous attendions depuis plus d'un an :D

Pour commencer une mauvaise nouvelle : le dump est faux :cry:
La bonne nouvelle est que l'on peut reconstituer la vraie rom en inversant les plages f400-f7ff et f800-fbff :D

Après l'inversion c'est nettement plus clair. On retrouve bien évidemment le joli papillon et le générateur de caractères standard, ainsi que la chaîne LPC tant attendue. En fait il n'y a pas une chaîne LPC, mais trois. Elles sont jouées dans un certain ordre, avec des répétitions. Mais je ne suis pas encore arrivé à reconstituer un son audible. Plus exactement, en jouant les chaînes séparément, on a l'impression de synthèse vocale plus que de musique. Encore un mystère à élucider.

Code : Tout sélectionner

-----------------------------------
Emission de chaines LPC
-----------------------------------
F5F3 d143      MOV    B,R67
F5F5 d542      CLR    R66
F5F7 76044122  BTJO   %>04,R65,$F61D -------
F5FB 77014103  BTJZ   %>01,R65,$F602 -      |
F5FF 728042    MOV    %>80,R66        |     |
                           <----------      |
F602 7602410e  BTJO   %>02,R65,$F614        |
F606 7610410e  BTJO   %>10,R65,$F618        |
F60A aaf6e2    LDA    @>F6E2(B) <--------   |  chaine LPC n°3
F60D 440042    OR     R0,R66 <--------   |  |
F610 736241    AND    %>62,R65        |  |  |
F613 0a        RETS       ------------|--|--|--> retour
F614 761041f2  BTJO   %>10,R65,$F60A -|--   |
F618 aaf6a2    LDA    @>F6A2(B)       |     |  chaine LPC n°2
F61B e0f0      JMP    $F60D --------->|     |
F61D aaf662    LDA    @>F662(B) <-----|-----   chaine LPC n°1       
F620 2d5a      CMP    %>5A,A          |
F622 e6e9      JNE    $F60D ----------
F624 73fb41    AND    %>FB,R65
F627 e02a      JMP    $F653

-----------------------------------

-----------------------------------
F653 720442    MOV    %>04,R66
F656 72ff43    MOV    %>FF,R67
F659 737741    AND    %>77,R65
F65C 0a        RETS   

----------------------------------------------------------------------
Chaines LPC en F662, F6A2, F6E2
----------------------------------------------------------------------
F660 c5 0a 1a 5a 5a 5a 5a 05 5a 5a 5a 5a 18 5a 5a 12  ...ZZZZ.ZZZZ.ZZ.
F670 5a 5a 5a 5a 16 5a 8d 92 94 8c 01 5a 03 5a 8e 8f  ZZZZ.Z.....Z.Z..
F680 95 5a 5a 0f 08 1b 14 0d 0e 07 13 15 0b 1d 19 5a  .ZZ............Z
F690 02 04 17 10 0a 1e 90 93 1c 06 11 09 0c 5a 91 00  .............Z..
F6A0 5a 5a 7a 80 81 82 83 65 20 2d 84 5a 78 3a 1b 72  ZZz....e -.Zx:.r
F6B0 2c 86 09 85 76 3d 26 24 21 02 61 08 63 3b 11 22  ,...v=&$!.a.c;."
F6C0 14 29 8a 6f 68 5b 74 6d 6e 67 73 75 6b 5d 79 8b  .).oh[tmngsuk]y.
F6D0 62 64 77 70 6a 5e 27 10 5c 66 71 69 6c 0d 28 40  bdwpj^'.\fqil.(@
F6E0 04 04 5a 80 81 82 83 45 20 5f 84 5a 58 2f 1b 52  ..Z....E _.ZX/.R
F6F0 3f 86 09 85 56 2b 31 36 38 30 41 08 43 2e 32 33  ?...V+1680A.C.23
F700 39 23 8a 4f 48 3c 54 4d 4e 47 53 55 4b 3e 59 8b  9#.OH<TMNGSUK>Y.
F710 42 44 57 50 4a 7e 34 37 2a 46 51 49 4c 0d 35 25  BDWPJ~47*FQIL.5%
F720 04 04 00 00 00 00 00 00 00 00 00 00 00 00 00 1c  ................
----------------------------------------------------------------------
Sinon je retrouve bien les éléments du dialogue avec le tms7020, avec réception et émission d'octets via la boîte à lettre. J'ai trouvé aussi le traitement des fonctions 0 à 13, et là il y a une grosse surprise : la fonction 01, réputée inexistante sur exl100, attend un octet en paramètre et fait quelquechose puisqu'elle appelle cette routine :

Code : Tout sélectionner

--------------------------------------
Table des fonctions
--------------------------------------
F1E5 f006  00 Reset du 7041
F1E7 f361  01 Fonction mysterieuse non documentee
F1E9 f22f  02 Lecture valeur courante clavier/joystick 0
F1EB f236  03 Lecture valeur courante joystick 1
F1ED f201  04 Teste la disponibilite de l'interface serie
F1EF f21c  05 Emission d'un octet via l'interface serie
F1F1 f305  06 Initialisation du port serie 
F1F3 f006  07 Reset du 7041
F1F5 f23d  08 Hard reset du synthetiseur
F1F7 f24b  09 Demarrage du synthetiseur
F1F9 f256  10 Saisie de donnees pour le synthetiseur 
F1FB f2d8  11 Envoi du generateur standard
F1FD f006  12 Reset du 7041 
F1FF f2ab  13 Envoi du logo exelvision

------------------------------------------
F01 = Fonction mysterieuse non documentee
------------------------------------------
F361 a70404fc  BTJZP  %>04,P4,$F361
F365 8ef177    CALL   $F177          Lecture de la boite a lettre du 7020
F368 06        DINT   
F369 d10a      MOV    B,R10
F36B 5301      AND    %>01,B
F36D c2        DEC    B
F36E c4        INV    B
F36F c8        PUSH   B
F370 5315      AND    %>15,B
F372 542a      OR     %>2A,B
F374 9200      MOVP   B,P0
F376 d13f      MOV    B,R63
F378 c9        POP    B
F379 5305      AND    %>05,B
F37B 540a      OR     %>0A,B
F37D 9210      MOVP   B,P16
F37F d140      MOV    B,R64
F381 73ef09    AND    %>EF,R9
F384 05        EINT   
F385 0a        RETS   
Voilà, pas d'autre scoop pour l'instant. Je posterai un désassemblage avec commentaires dans les heures ou les jours qui viennent. Encore merci à torlus, et je croise les doigts pour qu'il arrive à ressouder les deux processeurs sans trop de dégâts.
Dernière modification par Daniel le 24 sept. 2009 17:16, modifié 2 fois.
Daniel
L'obstacle augmente mon ardeur.
jester
Messages : 2328
Inscription : 01 janv. 2009 23:16
Localisation : Grenoble

Re: [Exelvision] ROM du TMS7041 de l'EXL100

Message par jester »

L'inversion ne m'étonne pas, c'est le même problème qu'avec le dump du 7020... le changement de mode semble rendre fou l'accès à la mémoire.
Plus exactement, en jouant les chaînes séparément, on a l'impression de synthèse vocale plus que de musique. Encore un mystère à élucider.
La encore je suis moyennement étonné. Le 5220 est incapable de faire de la musique, il rejoue toujours une forme vocalisée. La musique de Guppy ressemble plus à quelqu'un qui chante (avec déformation) qu'à une musique. Le bip est peut être juste une astuce pour avoir un Bip pas trop ridicule à partir de chaines LPC.

La découverte de fonction cachée a déjà commencé... reste à donner une interprétation à tous ces ports !!!
(La fonction 01 est indiquée comme "Fonction nulle pour le speech" dans la doc technique d'exelvision, donc ça doit avoir un lien avec le synthé vocal... réinitialisation ? insertion de blanc dans la lecture d'un son ? Test de la présence du synthé ? Passage en mode sampler 24bits 32 voix ?)

Tu trouveras peut être une aide au décodage des codes clavier ?

Et comment intègres-tu cette ROM dans ton émulateur. Je suppose que tu ne peux pas la faire exécuter directement par ta machine virtuelle TMS7000 ? tu vas modifier ton code "boite noire" du 7041 ou bien tu vas modifier l'émulateur pour exécuter la ROM ?
Daniel
Messages : 17426
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Exelvision] ROM du TMS7041 de l'EXL100

Message par Daniel »

Voilà, j'ai mis en ligne :
- les trois chaînes LPC : son1 son2 son3
- la rom 7041 désassemblée : tms7041rom.txt

Elle est commentée très partiellement. Je mettrai le fichier à jour si j'ajoute d'autres commentaires. Dans un premier temps je m'en servirai uniquement de référence pour améliorer les fonctions de dcexel.

L'émulation de l'exeltel est maintenant la priorité. Le 7041 passera après, et uniquement si c'est nécessaire. Il faudra me prouver d'abord sur un cas concret que le comportement de dcexel est très différent de l'exl100. Ou alors je le ferai comme exercice de programmation multi-thread :wink:
Daniel
L'obstacle augmente mon ardeur.
jester
Messages : 2328
Inscription : 01 janv. 2009 23:16
Localisation : Grenoble

Re: [Exelvision] ROM du TMS7041 de l'EXL100

Message par jester »

La preuve elle est vite faite... je lance quelques démos de scrolling que j'avais fait et sur mon EXL100 le clavier ne réagit pas du tout de la même manière... + les quelques gèles qui arrivent parfois encore dans certains jeux cartouches. On peut pas dire que Menkar soit 100% comme l'original... proche... mais ça merdouille pas mal au niveau audio !

Tu fais comme tu veux mais j'étais persuadé que tu allais foncé sur la possibilité d'avoir une émulation la plus exacte possible ou simplement d'intégrer cette ROM qui a tant manqué à une période. Avoir un 7041 aux petits oignonx ne pourrait que simplifier la mise au point de l'émulation de l'exetel (le 7042 ne devant pas être très différent... et je peux filer un exetel à Torlus histoire de ne pas se prendre la tête une seconde fois).

Perso, et ça n'engage que moi, avoir une émulation fidèle du 7041 me branche plus qu'une émulation de l'exetel qui est la même machine avec un peu de ROM et surtout 64Ko de VRAM (que DCEXEL gère déjà fort bien). Ma femme me dit qu'elle préfèrerait DcHector, bon, ça ce sont les femmes :wink:

Bonne soirée et merci pour le désassemblage (j'ai pas eu le temps de regarder tes sources du désassembleur).
gatesbillou
Messages : 128
Inscription : 31 juil. 2008 14:02
Localisation : la cadiere d'azur - var (83)

Re: [Exelvision] ROM du TMS7041 de l'EXL100

Message par gatesbillou »

D'accord avec jester , il y a des comportements anormaux sur certain jeux (ou alors je suis pas doué :oops: )
Daniel est le maitre d'oeuvre de dcexel , il en a déja fait beaucoup , mais c'est vraie qu'une emulation parfaite de l'exeltel serait sympa :mrgreen:

A+

ps : si torlus grille l'exeltel de jester j'en ai un en rab :D
Daniel
Messages : 17426
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Exelvision] ROM du TMS7041 de l'EXL100

Message par Daniel »

Bon, c'est d'accord, j'émulerai le 7041, mais pour l'instant je suis sur l'exeltel alors il faudra attendre un peu. Je suis moins optimiste que vous pour les bugs, la complexité de l'émulation simultanée de deux processeurs risque d'en ajouter plus que d'en corriger. Enfin attendons de voir :roll:

[Hors-sujet]
Pour faire patienter madame jester je voulais mettre en ligne une version de test de dchector, mais je viens de voir que le site http://dchector.free.fr est indisponible (erreur 503). Je ne peux même pas me connecter en ftp. Espérons qu'il reviendra vite...
Daniel
L'obstacle augmente mon ardeur.
Fabrice Montupet

Re: [Exelvision] ROM du TMS7041 de l'EXL100

Message par Fabrice Montupet »

Je rejoins Jester. Mais je ne suis peut-être pas bien placé pour répondre car j'utilise les vraies machines, presque pas les émulateurs.
Exeltel est une machine à part, son intérêt réside essentiellement dans un usage télématique et dire que cet usage est restreint de nos jours tient de l'euphémisme ;)
J'ai le sentiment qu'au niveau des priorités, ceux qui utilisent l'émulateur apprécieront sûrement plus une émulation complète d'EXL100 que d'executer un Exeltel virtuel pour finalement rien en faire de plus qu'un EXL100 ... à moins de faire un émulateur de réseau Teletel accessible par le web ^_^.
Cela dit, n'oublions pas le côté plaisir du développement. Si dans un premier temps Daniel se régale plus à émuler Exeltel qu'à paufiner celui d'EXL 100, c'est à lui de voir :)
jester
Messages : 2328
Inscription : 01 janv. 2009 23:16
Localisation : Grenoble

Re: [Exelvision] ROM du TMS7041 de l'EXL100

Message par jester »

J'ai parcouru rapidement le contenu commenté de la ROM et je tiens à modérer mes premiers propos.
Finalement si on retire les différentes fonctions qui ne font souvent qu'échanger avec quelques ports (sans véritable algo, juste une suite d'instructions basiques), la partie initialisation (un peu longue !), et les données (jeu de caractères, papillon, chaines LPC), il ne reste plus grand chose.
Je comprends Daniel qui ne doit rien trouver de très sexy la dedans où que son émulation du 7041 ne fasse déjà.
Emuler le 7041... je dirais même simuler dans ce cas... doit impliquer de grosse refonte de son émulateur pour finalement du pipi de chien.

Je pense que l'intérêt de la ROM réside surtout dans l'analyse du fonctionnement de la mailbox, l'échange avec le synthe vocal, l'acquisition des codes claviers et surtout la stratégie de déclenchement des interruptions vers le 7020. C'est cette gestion qui peut être affiner dans l'émulateur, avec correction des différents timing. Ainsi l'émulateur donnera un fonctionnement quasi identique à l'Exel100... sans simuler obligatoirement les deux puces (7020 + 7041).
Il n'y a surement que quelques portions de la ROM qui seront pertinentes pour modifier légèrement le comportement de la boite noire du 7041. Donc après l'excitation du début, je pense que l'efficacité prime.
Je vote donc pour une correction de l'émulation en fonction des résultats de l'analyse du contenu de la ROM... et la simulation 7020+7041 peut effectivement rester un jeu d'informaticien à remettre à plus tard.
Daniel
Messages : 17426
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Exelvision] ROM du TMS7041 de l'EXL100

Message par Daniel »

Sur le sujet il y a toujours eu deux écoles :

- Ceux qui veulent émuler précisément chaque circuit et construire un émulateur comme un assemblage de différents modules standards. C'est l'idée en particulier des concepteurs de MAME et MESS.

- Ceux qui veulent reproduire fidèlement le comportement d'une machine en privilégiant la simplicité et les performances, sans se soucier du détail des signaux électriques.

Les deux positions ont des avantages et des inconvénients. Il serait trop long de les énumérer ici, mais pour résumer la première donne des usines à gaz peu performantes et une émulation précise, la deuxième donne des émulateurs simples et économes en ressources avec quelques imprécisions dans les petits détails.

J'ai toujours hésité entre les deux voies : la première est plus satisfaisante pour l'esprit, la deuxième est plus efficace. A chaque fois j'ai opté pour la simplicité. Avec le recul, je suis assez satisfait de ces choix : émuler chaque circuit donne une émulation parfaite en théorie . En pratique on est loin du compte, et mes petits émulateurs simplistes sont meilleurs que l'usine à gaz parsemée de nombreux bugs. L'émulation est approximative dans les premières versions. Elle s'améliore rapidement en corrigeant un par un les défauts constatés. Les programmes commerciaux et les démos poussant la machine dans ses derniers retranchements aident beaucoup pour la mise au point.

Par exemple je me pose la question depuis quinze ans pour l'émulation du PIA 6821 des Thomson. J'ai depuis longtemps dans mes cartons un module dc6821 reprenant toutes les spécifications de la datasheet. Mais je ne l'ai intégré à aucun de mes émulateurs, et ne l'intégrerai probablement jamais : le cablâge hard de la carte mère rend inutiles 80% des fonctions prévues. Même choix pour le synthétiseur SN76477 de l'Hector.

Ce sera la même alternative pour le tms7041. Et probablement le même choix final, s'il est possible d'obtenir une émulation fidèle sans reproduire tous les détails de fonctionnement du processeur.
Daniel
L'obstacle augmente mon ardeur.
jester
Messages : 2328
Inscription : 01 janv. 2009 23:16
Localisation : Grenoble

Re: [Exelvision] ROM du TMS7041 de l'EXL100

Message par jester »

Je suis arrivée à la même conclusion que toi après réflexion.
Pourquoi changer une formule qui marche et détruire un travail déjà abouti ? je m'étais emballé.

Donc j'espère que la ROM du 7041 (et j'en suis sur) permettra d'affiner le comportement de DCExel...

Exemple 1: dans mon scrolling en mode mapping controlé par le clavier, sur Dcexel lorsque je maintiens une touche pressée ça déroule en continue, mais sur Exl100 ça foire complètement et il faut rappuyer sur la touche, ou bien ça déroule même après avoir relachée la touche. j'ai surement mal programmé le relâchement de touche, mais le comportement différent est très perturbant (le fait que ça marche bien sur Dcexel est trompeur et gênant). -> sans doute Pb 7041

Exemple 2: dans Menkar les sons du synthe vocal disparaissent parfois et ça finit parfois par planter -> sur qu'il y a du 7041 la dessus.

Exemple 3: sous Wizord les sons sont beaucoup plus pourris sur Exl100 (pleins de zouic, poui brzz) -> l'émulation est trop meilleure. :lol:


Si tu veux aussi t'investir dans l'exeltel, c'est magnifique. Comme je te l'ai dit, je peux te prêter un exeltel complet si tu veux gagner du temps en testant directement sur la bête. J'ai même un Exeldisk pour compléter... la c'est un prêt empoisonné car il faut le modifier pour qu'il soit compatible Exeltel (et je sais pas comment).
Avatar de l’utilisateur
fneck
Site Admin
Messages : 17539
Inscription : 01 avr. 2007 12:03
Localisation : Drôme Provençale (26)
Contact :

Re: [Exelvision] ROM du TMS7041 de l'EXL100

Message par fneck »

C'est intéressant ces deux approches de l'émulation. En y réfléchissant, je pense que ce qu'on recherche à travers un émulateur est une réaction fidèle en sortie en fonction des données d'entrées. C'est comme pour un simulateur quelconque, d'ailleurs où est vraiment la différence avec un émulateur, l'important est la reproduction la plus précise possible de la machine et de ses réactions. Après la boîte noire qu'il y a au milieu importe peu.

L'ordinateur étant capable de réaliser certaines fonctions directement, l'idée de vouloir les réaliser absolument par analogie électrique ne me semble pas la plus efficace. En fait, si je devais programmer quelque chose, je crois que je choisirai l'approche par la simplicité.
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Répondre