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

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

Modérateurs : Carl, Papy.G, fneck

Tomix
Messages : 91
Enregistré le : 16 sept. 2012 15:20

Re: Emulation d'Assdesass sur To9

Message par Tomix » 07 janv. 2017 22:08

Donc tout ceci nous fait converger vers l'hypothèse d'un +4 sur l'écriture du latch en mode div par 8. Pour moi, ça a du sens.

D'un point de vue émulateur maintenant, il faut donc, quand on écrit en $e7c6/$e7c7, prendre en compte la valeur au bout de 4 cycles, sachant qu'en mode normal, il ne doit pas y avoir de lag sur le latch.
Merci nicholo pour tes recherches très précises qui nous ont donné beaucoup de matières à réfléchir.

Alors du coup je suis super content pour mon émulateur To9. J''ai plus qu'a implémenter le bon algo pour reproduire fidèlement le fonctionnement de mon To à moi. Je pense que Daniel va être content aussi même s'il ne dit plus rien. Mais, par curiosité (et pas que), j'aimerai bien comprendre pourquoi le comportement du 6846 du To9 est différent de celui de mon To8D et de celui de sam (et probablement de beaucoup d'autres).

__sam__
Messages : 3959
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Emulation d'Assdesass sur To9

Message par __sam__ » 07 janv. 2017 22:19

Pour le TO8D, il faut $9C0 pour que ca marche. soit ($9C0+1)*8=19976µs, ca dépasse de 8 cycles par rapport aux 19968 de l'écran. La valeur qui marche sur ton TO9 me semble plus logique, et pourtant elle ne marche pas sur nos TO8D dont le matériel est identique pour la partie timer. C'est à n'y rien comprendre.
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.
New Teo 1.8.4 8)

Daniel
Messages : 10261
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Emulation d'Assdesass sur To9

Message par Daniel » 07 janv. 2017 22:32

Tomix a écrit :Daniel va être content aussi même s'il ne dit plus rien.
Je reste muet car je ne comprends pas plus que vous la différence d'une machine à l'autre. Plutôt que de faire des hypothèses dans le vide, je vais sortir quelques machines pour tester le comportement du debugger d'ASSDESASS. Laissez-moi un peu de temps...

Pour info, je vous ai dit que le debugger fonctionnait bien sur un TO8. C'est vrai si on teste sur une vingtaine d'instructions, il saute bien à la bonne adresse. Par contre, si on frappe espace en permanence pour dérouler des centaines d'instructions, il arrive un moment où il se plante, toujours au même endroit. Je ne sais pas si c'est normal ou si c'est lié au timer.
Daniel
L'obstacle augmente mon ardeur.

Tomix
Messages : 91
Enregistré le : 16 sept. 2012 15:20

Re: Emulation d'Assdesass sur To9

Message par Tomix » 07 janv. 2017 22:33

@__sam__
Si tu peux essayer les 2 tests sur ton To9 quand tu y auras accès...

@Daniel
Pour info, quand tu appuies sur ENTREE, le debugueur déroule les instructions sans s’arrêter. Essaie de voir si ça déconne pareil?
En écrivant ceci, je viens de tester sur assdesass et le debugueur s'arrête juste après le ORCC quand je debug E803... Je sais pas si c'est normal. Il faudra que je teste ça sur mon To9.

nicolho
Messages : 237
Enregistré le : 10 nov. 2016 16:53

Re: Emulation d'Assdesass sur To9

Message par nicolho » 07 janv. 2017 23:07

Tomix, juste pour préciser : j'avais parlé d'un +1 possiblement introduit par un latch à la sortie du compteur ("IOF" en bas du grand schéma si j'ai bien compris), donc sans rapport avec le latch du double registre (16 bits) qui sert à passer le preset au compteur sans délai, puisque c'est justement son rôle et la raison de sa présence, si on se rapporte à la fin des explications de "Counter Latch Initialization" (désolé pour la redite).
Modifié en dernier par nicolho le 08 janv. 2017 01:18, modifié 1 fois.

__sam__
Messages : 3959
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Emulation d'Assdesass sur To9

Message par __sam__ » 07 janv. 2017 23:15

Tomix a écrit :le debugueur s'arrête juste après le ORCC quand je debug E803... Je sais pas si c'est normal.
C'est pas illogique, CC étant modifié pour bloquer les IRQ dans $E803, le 6809e n'écoute plus le timer utilisé pour le débug.

Sinon, pour le clavier, j'imagine un truc: il génère une IRQ vers le CPU via le 6804. Si cette IRQ se produit au moment du PULS de ASSDESSAS, l'interrupt clavier est traitée. Pendant que le moniteur traite le clavier les interrupts sont éviemment bloquées. Je ne sais pas trop alors comment ca se passe lors de ces doubles interruptions pour le 6809, mais si ca se trouve la reconnaissance de l'interrupt timer aura lieu après l'instruction executée par le RTI, et donc décalée. D'où la plante.

OK c'est confus, mais pour simplifier, je me demande si la double interruption qui se produit quand le clavier apparait alors que asdesass ne provoquerait pas un soucis surtout que la reception des datas série du clavier touche à la partie I/O du 6846. Encore le 6846. Décidément! C'est vraiment un circuit hypercomplexe et très exploité pour pleins de trucs différents par les thomsons. Pas étonnant qu'on a du mal à comprendre toutes les subtilités.
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.
New Teo 1.8.4 8)

Tomix
Messages : 91
Enregistré le : 16 sept. 2012 15:20

Re: Emulation d'Assdesass sur To9

Message par Tomix » 08 janv. 2017 13:28

@nicolho
Oui mais ton analyse n'est pas sur le 6846. Alors je fais les liens avec mes constatations. Donc je prends en compte le possible +3/+4 sur le 6846 là ou sa concorde avec mes tests. :)

D'ailleurs j'ai refait des tests sur To8D et voici le comportement (pour les tests sur To9, on verra plus tard):
* En mode "continuous" 000 (respectivement TCR3/4/5) + prescaler 8:
- si lancement du compteur via écriture du latch, après activation du CR: il faut mettre $9C0 pour cycler une VBL
- si lancement du compteur via CR, après init du latch: il faut mettre $9C0 pour cycler une VBL. Donc, idem.
* En mode "continuous" 010 + prescaler 8:
- je ne peux lancer le compteur que via le CR: il faut mettre $9C0 pour cycler une VBL. Donc, idem.
* En mode "continuous" 000 sans prescaler:
- si lancement du compteur via écriture du latch, après activation du CR: il faut mettre $4DFF pour cycler une VBL, comme sur To9
- si lancement du compteur via CR, après init du latch: il faut mettre $4DFF pour cycler une VBL, comme sur To9

Mon hypothèse c'est que, sur To9, au moment où le timer récupère le latch pour pré-seter le décompteur, ça lui prend 4 cycles pour multiplier cette valeur par 8 en interne (hypothétiquement 1 cycle par décalage + 1 cycle magique quelque part). Là je spécule, on est d'accord.

Donc, visiblement, le To8D se comporte comme le To9 sans prescaler. En tout cas, pour les modes testés jusqu'ici. Et, avec prescaler, c'est différent.

Je suggère donc, en mode prescale, d'attendre 4 cycles au moment du preset du décompteur (et non pas à l'écriture en $E7C6/C7) avant de commencer le compte à rebours. Ca c'est pour le To9.

Parce que le plus tordu dans tout ça, c'est que je fais des hypothèses au sujet du To9, sur la base de tests effectués sur To8D qui ne concordent pas avec le To9. Je navigue aux instruments et je me mélange les pinceaux.

@__sam__
Ton idée est juste. Quand une IRQ clavier intervient 1 cycle avant l'IRQ timer (par exemple), le code de l'IRQ clavier est traité et le code de l'IRQ timer est remis à après le traitement de la première IRQ. Le PC n'ayant pas changé entre les 2 IRQ, l'IRQ timer peut donc être traité avant l'instruction assdesass à débuguer, voire avant le PULS.
Comme mon émulateur n'émule pas un To8, il serait sympa de savoir ce qui se passe sur l'émulateur To8 quand on appuie sur espace pour avancer dans le debug...
Modifié en dernier par Tomix le 08 janv. 2017 20:50, modifié 1 fois.

__sam__
Messages : 3959
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Emulation d'Assdesass sur To9

Message par __sam__ » 08 janv. 2017 13:56

$4DFF = 19967, et si on ajoute 1 on a la durée de la VBL. Ca marche! En mode sans prescale les machines ont le même comportement. C'est une bonne chose (c'est le mode que j'utilise perso pour mes trucs de musique).

Mais bon que le même composant 6846 ne fasse pas la même chose entre 2 types de machines est plus qu'étrange. Il n'y a pas de raisons. Est-ce que par hasard ton TO9 n'aurait pas un jitter spécial lié à l'usure qui décale tout de -1cycle? Il faurait tester sur d'autres TO9 pour voir si ca ne serait pas le tiens qui soit exceptionnel.
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.
New Teo 1.8.4 8)

Tomix
Messages : 91
Enregistré le : 16 sept. 2012 15:20

Re: Emulation d'Assdesass sur To9

Message par Tomix » 08 janv. 2017 15:45

@__sam__
Mes routines datent d'il y a 20/30 ans. Mon ordi était moins vieux :)

Sinon, mon To9 est de la première génération. Ma ROM est légèrement différente de la tienne. Ce n'est pas la même non plus que dans DcMoto. D'ailleurs je le suspecte d'être équipé du premier WD pour la gestion du lecteur de disquette.
Et donc, pour finir, j'avais testé à l'époque ma routine de synchro sur un To9 plus récent (pour l'époque), et ça fonctionnait bien avec $9BF.

Sinon, pour revenir au coup du CC sur Assdesass, je ne sais pas si c'est normal qu'il s'arrête sur le ORCC car cette instruction (comme le SWI) est interprétée par Assdesass. Je ne suis pas allé plus loin dans le code mais il y a un test à ce sujet.

Extrait:

Code : Tout sélectionner

7921  9    LDA   ($6189) IRQ:$00 FIRQ:$00 RPC:$7921 DP:$61 A:$20 B:$20 X:$62e5 Y:$7735 U:$e80a S:$69d6 CC:$c9
7925  2    CMPA  #$3f    IRQ:$00 FIRQ:$00 RPC:$7925 DP:$61 A:$7e B:$20 X:$62e5 Y:$7735 U:$e80a S:$69d6 CC:$c1
7927  5(6) LBEQ  $74a9   IRQ:$00 FIRQ:$00 RPC:$7927 DP:$61 A:$7e B:$20 X:$62e5 Y:$7735 U:$e80a S:$69d6 CC:$c0
792b  5    LDX   <$89    IRQ:$00 FIRQ:$00 RPC:$792b DP:$61 A:$7e B:$20 X:$62e5 Y:$7735 U:$e80a S:$69d6 CC:$c0
792d  4    LDA   ,X      IRQ:$00 FIRQ:$00 RPC:$792d DP:$61 A:$7e B:$20 X:$e803 Y:$7735 U:$e80a S:$69d6 CC:$c8
792f  2    CMPA  #$1a    IRQ:$00 FIRQ:$00 RPC:$792f DP:$61 A:$7e B:$20 X:$e803 Y:$7735 U:$e80a S:$69d6 CC:$c0
7931  3    BNE   $793b   IRQ:$00 FIRQ:$00 RPC:$7931 DP:$61 A:$7e B:$20 X:$e803 Y:$7735 U:$e80a S:$69d6 CC:$c0
793b  6    LDY   <$81    IRQ:$00 FIRQ:$00 RPC:$793b DP:$61 A:$7e B:$20 X:$e803 Y:$7735 U:$e80a S:$69d6 CC:$c0
793e  8    JSR   $76e6   IRQ:$00 FIRQ:$00 RPC:$793e DP:$61 A:$7e B:$20 X:$e803 Y:$dfff U:$e80a S:$69d6 CC:$c8
76e6  2    LDB   #$16    IRQ:$00 FIRQ:$00 RPC:$76e6 DP:$61 A:$7e B:$20 X:$e803 Y:$dfff U:$e80a S:$69d4 CC:$c8
76e8  4    LDA   ,Y      IRQ:$00 FIRQ:$00 RPC:$76e8 DP:$61 A:$7e B:$16 X:$e803 Y:$dfff U:$e80a S:$69d4 CC:$c0
76ea  2    COMA          IRQ:$00 FIRQ:$00 RPC:$76ea DP:$61 A:$00 B:$16 X:$e803 Y:$dfff U:$e80a S:$69d4 CC:$c4
76eb  4    STA   ,Y      IRQ:$00 FIRQ:$00 RPC:$76eb DP:$61 A:$ff B:$16 X:$e803 Y:$dfff U:$e80a S:$69d4 CC:$c9
76ed  4    CMPA  ,Y      IRQ:$00 FIRQ:$00 RPC:$76ed DP:$61 A:$ff B:$16 X:$e803 Y:$dfff U:$e80a S:$69d4 CC:$c9
76ef  5(6) LBNE  $742b   IRQ:$00 FIRQ:$00 RPC:$76ef DP:$61 A:$ff B:$16 X:$e803 Y:$dfff U:$e80a S:$69d4 CC:$c4
76f3  6    COM   ,Y      IRQ:$00 FIRQ:$00 RPC:$76f3 DP:$61 A:$ff B:$16 X:$e803 Y:$dfff U:$e80a S:$69d4 CC:$c4
76f5  5    RTS           IRQ:$00 FIRQ:$00 RPC:$76f5 DP:$61 A:$ff B:$16 X:$e803 Y:$dfff U:$e80a S:$69d4 CC:$c5
7941  2    LDB   #$14    IRQ:$00 FIRQ:$00 RPC:$7941 DP:$61 A:$ff B:$16 X:$e803 Y:$dfff U:$e80a S:$69d6 CC:$c5
7943  8    JSR   $e803   IRQ:$00 FIRQ:$00 RPC:$7943 DP:$61 A:$ff B:$14 X:$e803 Y:$dfff U:$e80a S:$69d6 CC:$c1
e803  4    JMP   $ecff   IRQ:$00 FIRQ:$00 RPC:$e803 DP:$61 A:$ff B:$14 X:$e803 Y:$dfff U:$e80a S:$69d4 CC:$c1
ecff  8    JMP   ($6008) IRQ:$00 FIRQ:$00 RPC:$ecff DP:$61 A:$ff B:$14 X:$e803 Y:$dfff U:$e80a S:$69d4 CC:$c1
Le premier LDA récupère l'opcode de l'instruction à debuguer.
Selon la valeur, il est interprété ou exécuté avec le process que l'on connait tous maintenant.

Sinon, j'attends le retour de Daniel sur ses différentes machines.
Il faudrait même voir à tester sur Mo5 et Mo6...

__sam__
Messages : 3959
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Emulation d'Assdesass sur To9

Message par __sam__ » 08 janv. 2017 16:40

Sur MO5 le timer n'est pas programmable. Donc ca n'est pas un problème pour lui.
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.
New Teo 1.8.4 8)

Daniel
Messages : 10261
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Emulation d'Assdesass sur To9

Message par Daniel » 08 janv. 2017 17:12

Sur MO il n'y a ni timer ni 6846. Simple is beautiful :wink:
Daniel
L'obstacle augmente mon ardeur.

__sam__
Messages : 3959
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Emulation d'Assdesass sur To9

Message par __sam__ » 08 janv. 2017 17:14

Il faut se contenter de l'interruption à 50hz qui fait clignoter le curseur. Trop long pour beaucoup d'applications fines.
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.
New Teo 1.8.4 8)

Tomix
Messages : 91
Enregistré le : 16 sept. 2012 15:20

Re: Emulation d'Assdesass sur To9

Message par Tomix » 08 janv. 2017 17:15

J'avais oublié ce détail.

nicolho
Messages : 237
Enregistré le : 10 nov. 2016 16:53

Re: Emulation d'Assdesass sur To9

Message par nicolho » 08 janv. 2017 19:44

nicolho a écrit :...probablement à cause des 3 autres flip flops utilisés par le "diviseur par 8" ...
En conclusion, je pense que ce délai est ajouté pour synchroniser les horloges avec la première transition du diviseur, qui apparaît en sortie de la chaîne des flips flops au bout de 3 cycles (soit 1 cycle par flip flop).
... pour le cycle qui manque pour retrouver nos "+4", il est possiblement causé par le latch (...) à la sortie du compteur (pour le signal d'interruption)
Tomix a écrit :Mon hypothèse c'est que, sut To9, au moment où le timer récupère le latch pour pré-seter le décompteur, ça lui prend 4 cycles pour multiplier cette valeur par 8 en interne (hypothétiquement 1 cycle par décalage + 1 cycle magique quelque part). Là je spécule, on est d'accord.
Ah bah tu as la même hypothèse que moi finalement, ça fait plaisir :D les grands esprits se recontrent. :mrgreen:
edit : ah oui, j'oubliais que je parlais du 6840 et toi du 6846, qui n'a rien à voir :wink:

Plus sérieusement, je voulais savoir d'où étaient issus les désassemblages que tu as posté dans ce topic ? (disons, avec quel désassembleur tu désassembles le désassembleur Assdesass ? à vous souhaits :))

Et aussi, est-ce que ce sont exactement les mêmes modèles (EF6846P ?) qui sont utilisés sur TO8 et TO9 ? (sinon, quels sont les noms inscrits sur les puces ?)

Tomix
Messages : 91
Enregistré le : 16 sept. 2012 15:20

Re: Emulation d'Assdesass sur To9

Message par Tomix » 08 janv. 2017 20:46

@nicholo
Très sérieusement, je ne connais pas le 6840, et je n'étais pas sûr d'avoir bien compris ton histoire de flip flop sur le diviseur par 8. Si ma reformulation veut dire la même chose, c'est tant mieux. ;)
Et du coup, le cycle magique qui manque qui serait "causé par le latch à la sortie du compteur", tu entends quoi par là? Que c'est au moment de l'interruption qu'il faudrait le décompter? Parce que là je ne suis pas sûr. J'aurai tendance à penser que c'est avec les 3 premier cycles, lors du preset du compteur.

Pour ce qui est du désassemblage, ça vient de mon émulateur. J'ai un mode debug où je peux voir le code se dérouler. Donc c'est mon désassembleur perso. Pourquoi?

Pour ce qui est du modèle de 6846, je me suis posé la même question que toi. J'attends de pouvoir désosser mon To9 pour relever la référence. Car j'ai encore refait des tests et des tests et, quelle que soit la valeur que je mets dans les TCR3/4/5, il y a toujours une différence avec mon To9 en mode prescale.

Répondre