Emulation d'Assdesass sur To9 - l'histoire du 6846 clone
Modérateurs : Papy.G, fneck, Carl
Re: Emulation d'Assdesass sur To9
[mode hors sujet ON, désolé]
Tu sais si c'est pareil pour les instructions Z80 ?
[mode hors sujet OFF, vraiment désolé !]
Tu sais si c'est pareil pour les instructions Z80 ?
[mode hors sujet OFF, vraiment désolé !]
Re: Emulation d'Assdesass sur To9
@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... )
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... )
Re: Emulation d'Assdesass sur To9
@__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:
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...
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]
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...
Re: Emulation d'Assdesass sur To9
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.
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.
Re: Emulation d'Assdesass sur To9
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+.
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.
L'obstacle augmente mon ardeur.
Re: Emulation d'Assdesass sur To9
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 ?
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.
L'obstacle augmente mon ardeur.
Re: Emulation d'Assdesass sur To9
@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.
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.
Re: Emulation d'Assdesass sur To9
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.
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.
Re: Emulation d'Assdesass sur To9
Le temps de copier ASSDESASS sur une carte SD (ça ne sera pas long ), 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...
[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.
L'obstacle augmente mon ardeur.
Re: Emulation d'Assdesass sur To9
@Daniel
J'ai une version crackée si t'es intéressé...
J'ai une version crackée si t'es intéressé...
Re: Emulation d'Assdesass sur To9
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.
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.
L'obstacle augmente mon ardeur.
Re: Emulation d'Assdesass sur To9
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.
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.
Re: Emulation d'Assdesass sur To9
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.
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.
L'obstacle augmente mon ardeur.
Re: Emulation d'Assdesass sur To9
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).
[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).
-
- Messages : 7988
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Emulation d'Assdesass sur To9
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
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos