Emulation d'Assdesass sur To9 - l'histoire du 6846 clone

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

Avatar de l’utilisateur
yo_fr
Messages : 1337
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: Emulation d'Assdesass sur To9

Message par yo_fr »

[mode hors sujet ON, désolé]
Tu sais si c'est pareil pour les instructions Z80 ?
[mode hors sujet OFF, vraiment désolé !]
nicolho
Messages : 409
Inscription : 10 nov. 2016 16:53

Re: Emulation d'Assdesass sur To9

Message par nicolho »

@yo_fr: en essayant de compter les cycles du Z80 (pour la routine du scan clavier sur MSX, rapport à un sujet récent..), j'étais tombé sur ce document qui s'approche un peu du tableau précédent de _sam_ : http://www.z80.info/z80ins.txt
Celui-ci présente les instructions décomposées en "cycles machine" (Mx, et leur nombres de cycles d'horloge Tx entre parenthèses), avec leurs actions respectives, comme les cycles de lecture ou d'écriture en mémoire, ça donne déjà une idée.

Évidemment, tout le fonctionnement avec les timings au cycle d'horloge près est savamment détaillé dans le manuel du processeur, avec moult esquisses des signaux, comme dans cette version parchemin :) plus concise que la doc actuelle, et plus agréable à lire je trouve : http://www.classiccmp.org/cini/pdf/Zilo ... Manual.PDF (euh, désolé d'en avoir rajouté dans la digression et le mode hors-sujet... :oops:)
Z80 - Memory Read or Write cycles.jpg
Z80 - Memory Read or Write cycles.jpg (54.2 Kio) Consulté 3830 fois
Tomix
Messages : 91
Inscription : 16 sept. 2012 15:20

Re: Emulation d'Assdesass sur To9

Message par Tomix »

@__sam__
Sympa tes diagrammes. Mais ils confirment que je n'ai pas de soucis de calcul de cycle entre l'initialisation du timer et le timeout.

Voici le code source exécuté par assdesass juste avant l'appel de l'instruction (ici j'appelle E815) dans le debugueur:

Code : Tout sélectionner

7951  LDB     #$46    2  RPC:$7951  DP:$61  A:$01  B:$14  X:$e815  Y:$dfff  U:$e81c  S:$69d6  CC:$c9
7953  STB     $e7c5   5  RPC:$7953  DP:$61  A:$01  B:$46  X:$e815  Y:$dfff  U:$e81c  S:$69d6  CC:$c1
7956  LDD     #$0007  3  RPC:$7956  DP:$61  A:$01  B:$46  X:$e815  Y:$dfff  U:$e81c  S:$69d6  CC:$c1
7959  STD     $e7c6   6  RPC:$7959  DP:$61  A:$00  B:$07  X:$e815  Y:$dfff  U:$e81c  S:$69d6  CC:$c1
795c  JMP     $7cf7   4  RPC:$795c  DP:$61  A:$00  B:$07  X:$e815  Y:$dfff  U:$e81c  S:$69d6  CC:$c1
7cf7  LDX     <$89    5  RPC:$7cf7  DP:$61  A:$00  B:$07  X:$e815  Y:$dfff  U:$e81c  S:$69d6  CC:$c1
7cf9  LDA     <$87    4  RPC:$7cf9  DP:$61  A:$00  B:$07  X:$e815  Y:$dfff  U:$e81c  S:$69d6  CC:$c9
7cfb  LDS     <$81    6  RPC:$7cfb  DP:$61  A:$00  B:$07  X:$e815  Y:$dfff  U:$e81c  S:$69d6  CC:$c5
7cfe  PSHS    X,A     8  RPC:$7cfe  DP:$61  A:$00  B:$07  X:$e815  Y:$dfff  U:$e81c  S:$dfff  CC:$c9
7d00  LDU     <$83    5  RPC:$7d00  DP:$61  A:$00  B:$07  X:$e815  Y:$dfff  U:$e81c  S:$dffc  CC:$c9
7d02  LDY     <$7f    6  RPC:$7d02  DP:$61  A:$00  B:$07  X:$e815  Y:$dfff  U:$0000  S:$dffc  CC:$c5
7d05  LDX     <$7d    5  RPC:$7d05  DP:$61  A:$00  B:$07  X:$e815  Y:$0000  U:$0000  S:$dffc  CC:$c5
7d07  LDA     <$88    4  RPC:$7d07  DP:$61  A:$00  B:$07  X:$0000  Y:$0000  U:$0000  S:$dffc  CC:$c5
7d09  TFR     A,DP    6  RPC:$7d09  DP:$61  A:$00  B:$07  X:$0000  Y:$0000  U:$0000  S:$dffc  CC:$c5
7d0b  LDD     $6185   6  RPC:$7d0b  DP:$00  A:$00  B:$07  X:$0000  Y:$0000  U:$0000  S:$dffc  CC:$c5
7d0e  PULS    CC,PC   8  RPC:$7d0e  DP:$00  A:$00  B:$00  X:$0000  Y:$0000  U:$0000  S:$dffc  CC:$c5
[instruction du debugueur à interpréter]
Avec, dans l'ordre, le PC, l'instruction, l'opérande, les cycles, puis le contexte juste avant chaque instruction.

Assdesass initialise le timer. Il remplit d'abord tous les registres. Il termine par renseigner le CC et le PC via le PULS. L'interruption intervient juste après le PULS.

Du coup, j'ai toujours mes 4 cycles à ajouter au timer pour que l'émulation se passe bien...
Tomix
Messages : 91
Inscription : 16 sept. 2012 15:20

Re: Emulation d'Assdesass sur To9

Message par Tomix »

Encore des news.

Dans la version "divisé par 8", Assdesass initialise le décompteur avec la valeur 7. J'ai donc pris un vrai To8 et j'ai testé 2/3 trucs dessus.
Si je fais sauter le mode "divisé par 8" pour passer en mode normal, je devrai donc multiplier par 8 la valeur du compteur pour que ça marche...

Et bien non, sur un vrai To8, avec la valeur 56 ($38 en hexa), ça ne fonctionne pas. Je dois monter à la valeur 65 ($41 en hexa) pour que ça fonctionne. Et sur mon émulateur, je dois monter à 67 (=$43). Je ne suis donc pas encore au point avec ces 2 cycles supplémentaires.

Tout doit se jouer sur le STD $E7C6.

[EDIT]
Bon, je ne comprends rien. Sur le vrai To8, j'ai re testé sans modifier Assdesass, et je m'aperçois que le debugueur fonctionne mal. Et oui, je n'avais pas fait attention qu'il ne sautait pas à la bonne instruction. Et si je monte de la valeur 7 à 8 ou 9, le résultat est imparfait. Il n'y a que si je fais sauter le mode divisé par 8, et que je place la bonne valeur, que ça marche.
Il va donc falloir vérifier tout ça sur un vrai To9.

Mais du coup, je ne vois pas techniquement ce qui peut différencier le To8 et le To9 sur ce point. Il va falloir faire une pause des fois ou je m’emmêlerai les pinceaux.
Daniel
Messages : 17426
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Emulation d'Assdesass sur To9

Message par Daniel »

Merci à Tomix pour ce fil de discussion du plus grand intérêt !
Je ne me suis pas trop manifesté car j'étais plongé à la fois dans la datasheet du 6846 et dans les sources de dcmoto.
J'ai réussi à faire une version dans laquelle ASSDESASS fonctionne bien, au moins dans mes derniers tests.

Comme Tomix j'utilise un compteur multiplié par 8. Si le compteur est initialisé avec la valeur 56 (7 *8) ça ne marche pas. Tout comme Tomix, je ne comprends pas pourquoi, alors j'ai aussi procédé par tâtonnements jusqu'à ce que ça marche. Ca a marché en ajoutant au compteur 2,25 cycles, soit 18 après multiplication par 8. En ajoutant 17 ça ne marche pas. En ajoutant 19 ça ne marche pas.

Allez savoir pourquoi....

Les tests étaient en émulation TO9. Je vais essayer maintenant le TO8 et le TO9+.
Daniel
L'obstacle augmente mon ardeur.
Daniel
Messages : 17426
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Emulation d'Assdesass sur To9

Message par Daniel »

Il n'y avait aucune raison que le programme réagisse autrement sur le TO8 et le TO9+. Je confirme qu'il donne les mêmes résultats, au moins en émulation. Je n'ai pas encore essayé avec les vraies machines.

La version "dcmoto_nouveau" a été mise à jour sur le site dcmoto.
Voici le lien : http://dcmoto.free.fr/emulateur/dcmoto_nouveau.zip

Même si les émulateurs sont corrigés, il ne faut pas en rester là et chercher à comprendre. En plus du problème d'émulation, il y a peut-être aussi un bug dans ASSDESASS ?
Daniel
L'obstacle augmente mon ardeur.
Tomix
Messages : 91
Inscription : 16 sept. 2012 15:20

Re: Emulation d'Assdesass sur To9

Message par Tomix »

@Daniel
Top! Enfin... pour la version To9...

Mais si tu me lis un peu avant, tu verras que j'ai découvert une bizarrerie en essayant assdesass sur mon To8D.
En effet, le debugueur debug pas comme sur To9. Le timeout se déclenche une instruction avant sur le To8.
Je n'ai pas mon To9 à porté, mais je suis certain que le pas à pas fonctionne bien dessus pour l'avoir utilisé de nombreuses années.

Il y aurait donc une différence hardware entre le To8 et le To9 avec ce process cpu + timer.

Je m'en vais contrôler le code d'Assdesass sur To7... à plus tard.
Tomix
Messages : 91
Inscription : 16 sept. 2012 15:20

Re: Emulation d'Assdesass sur To9

Message par Tomix »

Re.
Avec le dernier DCMOTO, sur To7/70, avec Assdesass pour To7, le debug fonctionne bien.
Le code source est identique, bien que pas à la même adresse. La valeur timer est donc 7 comme pour to9.
RAS.
Daniel
Messages : 17426
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Emulation d'Assdesass sur To9

Message par Daniel »

Le temps de copier ASSDESASS sur une carte SD (ça ne sera pas long :wink: ), et je vais l'essayer sur un vrai TO8.

[Edit 1]
Pas de chance, il y a un autre problème : Le programme se charge, affiche le titre en blanc sur fond noir avec le cadre bleu, et reste bloqué. Aucune touche ne fonctionne, on ne peut rien faire. Je ne sais pas pourquoi. Ma version est-elle mauvaise ? Ou incompatible ?

[Edit 2]
Je crois que c'est la protection contre la copie. Elle est en partie détournée pour ne pas bloquer dcmoto, mais fait encore appel au contrôleur de disquette. Sur le TO8 j'utilise un contrôleur de carte SD qui n'a pas le même comportement. Je vais supprimer tous les accès au contrôleur et ça va marcher...
Daniel
L'obstacle augmente mon ardeur.
Tomix
Messages : 91
Inscription : 16 sept. 2012 15:20

Re: Emulation d'Assdesass sur To9

Message par Tomix »

@Daniel
J'ai une version crackée si t'es intéressé...
Daniel
Messages : 17426
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Emulation d'Assdesass sur To9

Message par Daniel »

Merci, ce n'est pas nécessaire, je viens de déprotéger un peu mieux le fichier .fd.
Maintenant il fonctionne aussi bien sur le TO8 que sur dcmoto.
A l'occasion j'ai mis en ligne la nouvelle version to9.fd et aussi la version pour carte SD.

Le debug fonctionne aussi bien bien sur le vrai TO8 que dans l'émulateur, tout au moins dans l'essai avec P $E803. J'ai déroulé une trentaine d'instructions sans détecter d'anomalie.
Daniel
L'obstacle augmente mon ardeur.
Tomix
Messages : 91
Inscription : 16 sept. 2012 15:20

Re: Emulation d'Assdesass sur To9

Message par Tomix »

Tu as débugué les bonnes instructions?
Parce que sur mon To8D, le debug saute pas à la bonne adresse. Je déroule bien des instructions, mais pas les bonnes...
Test effectué avec un debug sur E803.
Daniel
Messages : 17426
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Emulation d'Assdesass sur To9

Message par Daniel »

Je viens de recommencer, toujours sur $E803, et le programme se déroule parfaitement bien. Les adresses du TO8 sont différentes de celles du TO9, mais le debugger affiche l'instruction attendue à chaque fois. Je n'ai testé qu'une vingtaine d'instructions.

Je n'ai pas de TO8D sous la main ce soir, mais demain je peux essayer d'en sortir un pour un nouvel essai. Je ne vois pas où peut être la différence, car le TO8 et le TO8D sont pratiquement identiques.
Daniel
L'obstacle augmente mon ardeur.
Tomix
Messages : 91
Inscription : 16 sept. 2012 15:20

Re: Emulation d'Assdesass sur To9

Message par Tomix »

Ok. Je vais ressortir mon To8D et refaire un test toute à l'heure.

[EDIT]
Je viens de récupérer ta version d'assdesass. Rien à faire, quand je lance P $E803, au lieu d'avancer en FF4D, il part en 7D0E, ce qui correspond au PULS CC,PC qui est censé faire un jump sur l'instruction à exécuter
Je suis sur un vrai To8D nu, donc sans cartouche, sans extension, sans manette, sans crayon optique, etc. Et je démarre depuis une disquette.

Autre anomalie: quand je lance plusieurs fois P $E803 après avoir breaké chaque fois, je fini par tomber en 7D0B, ce qui correspond au LDD $6185, une instruction avant.

Bref, c'est pas stable.

A noter que ça ne change rien si je branche un crayon optique ou une manette (on aurait pu imaginer un parasitage hasardeux).
__sam__
Messages : 7988
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Emulation d'Assdesass sur To9

Message par __sam__ »

Il y a des IRQ supplémentaires sur TO9 par rapport au TO8 au niveau de la gestion du clavier je crois. Est-ce que cela pourrait expliquer les différences entre TO9 et TO8 ?
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Répondre