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

__sam__
Messages : 7961
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Emulation d'Assdesass sur To9

Message par __sam__ »

ben une vbl c'est 20ms soit 20000 cycles et pas 19968. Il te manque 32 cycles.
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
Tomix
Messages : 91
Inscription : 16 sept. 2012 15:20

Re: Emulation d'Assdesass sur To9

Message par Tomix »

Petit déterrage d'info au sujet des vbl:
http://www.logicielsmoto.com/phpBB/viewtopic.php?p=1177

Donc 19968 cycles en principe.
__sam__
Messages : 7961
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Emulation d'Assdesass sur To9

Message par __sam__ »

Effectivement, on a 625lignes entrelacées de 64µs par images à 25hz. Ramené à 50hz on a 312 lignes + 1/2. Cette 1/2 ligne correspond à l'écart entre 20ms et 20ms-1/2ligne=20 000 - 32 = 19968.

Je me demande comment s'adaptent les TV avec cette 1/2 ligne manquante non envoyée par le thomson. Mais c'est un autre sujet.

[EDIT] ah ok, je crois que cette 1/2ligne est le temps de retour du faisceau en haut de l'écran est était utilisé en TV pour le signal ANTIOPE.
Dernière modification par __sam__ le 05 janv. 2017 22:14, modifié 1 fois.
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
nicolho
Messages : 409
Inscription : 10 nov. 2016 16:53

Re: Emulation d'Assdesass sur To9

Message par nicolho »

__sam__ a écrit :Maintenant ce qui est étrange est qu'il faille ajouter ce +4 en émul et pas sur machine réelle, comme s'il y avait une latence implicite de +4 cycles en mode "/8".
A ce point là, si on avait "ksakafaire", et aussi également pour savoir mieux l'émuler, on pourrait se lancer dans une batterie de tests en analysant les signaux réels sur les pattes du 6846 pour observer son comportement concret.
Signé : Capitaine Obvious (d'accord, je sors...)
Tomix
Messages : 91
Inscription : 16 sept. 2012 15:20

Re: Emulation d'Assdesass sur To9

Message par Tomix »

@__sam__
Le temps de retour du faisceau vertical, c'est l'équivalent de 64 lignes de balayage (de mémoire). Ou 40? Au pire, si je me trompe, on va dire quelques 10 aines de lignes virtuelles. Donc, plusieurs 100 aines de cycles. Donc, plus qu'1/2 ligne.
Je me servais de cet espace invisible (le retour vertical du faisceau) pour planquer des initialisations de palette.

Au passage, le temps de retour de faisceau horizontal, c'est 8 cycles (de mémoire aussi).

[EDIT]
Je corrige: ta 1/2 ligne correspond bien au signal teletext. On la compte avec le retour de faisceau qui vaut encore plus de lignes.
__sam__
Messages : 7961
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Emulation d'Assdesass sur To9

Message par __sam__ »

Le manuel technique TO8/TO9/TO9+ indique bien 40µs pour la fenêtre visible (qui corresponent à 40GPL) + 24µs pour les bords avec un total de 64µs par ligne. L'ordi gère 312 lignes (et 312*64µs=19968 cycles, ca cole). Sur ces 312, 200 sont utilisées pour l'écran visible, laissant 112 lignes pour le tour haut et bas + intervalle de retour. Mais il n'indique pas le temps de cet intervalle. Bon c'est pas grave.
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
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3051
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: Emulation d'Assdesass sur To9

Message par Papy.G »

Dans la doc d'un autre VDP de SGS-Thomson, on peut lire que les modes entrelacés ont une demi-ligne de plus que les modes progressifs, des fois que ça pourrait aider, il y a aussi des tableaux de timings dans sa doc. (Le EF9345 :wink: )
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Tomix
Messages : 91
Inscription : 16 sept. 2012 15:20

Re: Emulation d'Assdesass sur To9

Message par Tomix »

Ok. Ces petits détails sont intéressants mais, pour en revenir au sujet, on a 19968 cycles par VBL:

Sur To9, on fixe $9BF comme valeur pour cycler exactement 1 VBL avec le timer (=($9BF+1)*8 = 19968).
Avec ma bidouille de 4 cycles en plus, mon compteur interne passe à ($9BF+1)*8+4=19972. Donc, c'est pas bon car, avec cette valeur élevée, il ne faut pas ajouter 4.
Et, au passage, le truc étrange est que je dois mettre $9C0 sur mon To8D pour cycler une VBL.

Quelle est la logique du coup?

Une petite différence cependant: Pour la synchro avec $9BF, le départ du timer se fait en modifiant le registre de contrôle.
Dans le cas d'assdesass, il se fait en initialisant le décompteur, après avoir touché au registre de contrôle.
Mais ceci n'explique pas la différence avec mon To8D.
nicolho
Messages : 409
Inscription : 10 nov. 2016 16:53

Re: Emulation d'Assdesass sur To9

Message par nicolho »

EURÊKA !! JE CROIS BIEN QUE J'AI DÉBUSQUÉ LE +4 DANS LA DOC DU 6846 !!! :mrgreen: :D :mrgreen:
Pardon pour cette élan d’allégresse intempestif :) , mais en lisant à nouveau la doc du timer (les datasheets étant quand même censés être une référence très précise quant au fonctionnement d'un circuit) je me suis intéressé aux sigles qu'on avait un peu délaissés, en particulier en regardant de plus près tout ce qui concerne l'initialisation du compteur (et je vous ai stabiloté tout ça à l'ancienne :) ).

Dans ce tableau, on voit bien qu'une initialisation du compteur nécessite toujours une transition négative de /CTG :
initialisations du compteur (doc timer mc6846).png
initialisations du compteur (doc timer mc6846).png (147.17 Kio) Consulté 4238 fois
Et dans la description de CTG, il est expliqué que ce signal est reconnu au bout de QUATRE cycles d'horloge ! :
CTG (extrait doc timer mc6846).png
CTG (extrait doc timer mc6846).png (141.63 Kio) Consulté 4238 fois
Comme /CTG est toujours abaissé (car "pulled-down" sur la carte mère), il est fort probable qu'il soit simplement "samplé" au bout de 4 cycles (sans besoin de transition descendante) au niveau bas donc, après l'écriture du preset (ou un simple démarrage avec TCR0) et que le compteur soit déclenché à ce moment là (il est également précisé que cela se passe indépendamment de la division par 8 de l'horloge).

Voilà qui expliquerait bien le délai de 4 cycles que vous aviez constaté.
Tomix
Messages : 91
Inscription : 16 sept. 2012 15:20

Re: Emulation d'Assdesass sur To9

Message par Tomix »

@nicolho
Ca c'est du travail de Sherlock Holmes!

Donc, en résumé, dans le cas d'une initialisation "à la volée" du compteur, celui-ci est pris en compte 4 cycles plus tard?
Et dans le cas où c'est le CR qui active le compteur, la valeur ayant été renseignée plus de 4 cycles en amont, le démarrage est immédiat. Ceci expliquerait le mécanisme avec assdesass, et l'autre mécanisme avec la synchro VBL ($9BF), l'initialisation du CR ne se faisant pas dans le même ordre.

Donc, pour ce qui est du To9, tout va bien. Mais du côté de mon To8D, ça cloche. A moins que l'erreur ne vienne que de mon To8.
Je rappelle juste que, sur mon To8, quand je lance Assdesass et que je fais ma manip en debug, le timer déclenche son time out une instruction voir deux trop tôt. Je rappelle également qu'une synchro VBL nécessite la valeur $9C0 sur mon To8, au lieu de $9BF sur To9...
Si c'est spécifique à mon To8, c'est qu'il a mal vieilli.
nicolho
Messages : 409
Inscription : 10 nov. 2016 16:53

Re: Emulation d'Assdesass sur To9

Message par nicolho »

Tomix a écrit :Ca c'est du travail de Sherlock Holmes!
Merci, enfin j'ai juste LLPDM (francisation de RTFM :D )
Tomix a écrit :Et dans le cas où c'est le CR qui active le compteur, la valeur ayant été renseignée plus de 4 cycles en amont, le démarrage est immédiat
C'est pas forcément que la valeur a déjà été enregistrée, mais comme tu dis, possible qu'il y ait deux processus d'initialisation différents, selon qu'on le fasse par le preset ou par le CR.
le timer déclenche son time out une instruction voir deux trop tôt...
...Si c'est spécifique à mon To8, c'est qu'il a mal vieilli.
Peut-être que c'est ton prescaler (diviseur par 8 ) qui se mélange les pinceaux ( :?: simple hypothèse..) ? il faudrait éventuellement tester en le désactivant (par TCR2) voir ce que ça donne...
Tomix
Messages : 91
Inscription : 16 sept. 2012 15:20

Re: Emulation d'Assdesass sur To9

Message par Tomix »

En relisant la doc, je ne suis pas sûr.

CTG correspond à un signal d'entrée sur le timer (je ne sais pas ce qu'il signifie dans le contexte du To9).
La doc dit juste que l'initialisation du compteur à lieu soit via le CTG (front descendant), soit via un Reset (avec le CR), soit via un Write sur le latch.
Dans le cas Assdesass, c'est un Write sur le Latch qui provoque le redémarrage du décompteur.

Il faudrait l'avis d'un expert pour comprendre à quoi le CTG correspond.

Sinon, ce 6846 à un latch 16 bits conçu pour du cpu 8 bits. Il utilise un registre interne qui permet de stocker la valeur haute du latch ($e7c6), et il recombine ce registre avec la valeur basse ($e7c7) quand celle-ci arrive, pour stocker la valeur 16 bits dans le latch.
On peut imaginer que le processus de recombinaison prenne 4 cycles...
nicolho
Messages : 409
Inscription : 10 nov. 2016 16:53

Re: Emulation d'Assdesass sur To9

Message par nicolho »

Tomix a écrit :En relisant la doc, je ne suis pas sûr.
Edit: moi non plus 8)
La doc dit juste que l'initialisation du compteur à lieu soit via le CTG (front descendant), soit via un Reset (avec le CR), soit via un Write sur le latch.
Tu l'affirmes, c'est bien possible mais ça reste une interprétation visuelle du tableau que j'ai posté plus haut (Table 3 - Operating Mode) avec, pour le "mode continu", dans "Counter Initialization", ceci : "/CTG descendant + W + R", et c'est pour ça que je n'étais pas absolument catégorique sur ce que ça implique concernant le fonctionnement (comme je disais, j'ai un doute sur l'aspect "transition")
Il faudrait l'avis d'un expert pour comprendre ce que le CTG veut dire.
Carrément !? Pas besoin d'expert pour comprendre ce que ça peut vouloir dire. Ça signifie (très probablement) "Counter/Timer Gate", et son rôle est expliqué en toute lettre dans la description de /CTG postée également ci-dessus ( :roll: ) ce qui laisse cette fois-ci moins de place à l'interprétation concernant son utilité : "/CTG .. is used as a trigger or a clock gating function to the Timer".

Donc d'après ce qui est écrit, il ne s'agit pas seulement du "déclencheur" des initialisations du compteur, mais aussi d'une porte (gate) pour son horloge, qui laisse passer cette dernière ou pas (je dis ça d'après mes rudiments encore frais de circuits logiques : en principe, ça permet de bloquer ou pas l'arrivée du signal d'horloge sur un compteur, et donc de le mettre en pause).
Sinon, ce 6846 à un latch 16 bits conçu pour du cpu 8 bits. Il utilise un registre interne qui permet de stocker la valeur haute du latch ($e7c6), et il recombine ce registre avec la valeur basse ($e7c7) quand celle-ci arrive, pour stocker la valeur 16 bits dans le latch.
...On peut imaginer que le processus de recombinaison prenne 4 cycles...
Là aussi, tu paraphrases la rubrique "Counter Latch Initialization", avec une interprétation moins catégorique (+1 j'aime :D ) mais justement, dans la suite du paragraphe, les auteurs ont pris la peine de dire que ce processus s'effectuait de manière synchrone avec les écritures du processeur (je paraphrase aussi leur explication : le MSB bufferisé est chargé automatiquement dans le latch à l'écriture du LSB).
Pour ma part, je ne partage pas ton sentiment sur un délai lié au chargement chargement du preset. Il me semble que le latch devrait avoir ses 16 bits en 2 cycles d'écritures (MSB+LSB) pour finalement les relâcher tous ensemble (c'est précisément sa fonction) dès le cycle suivant sur les entrées du compteur... mais tu as peut-être raison.

Ce qu'il nous faudrait, pour comprendre plus justement le fonctionnement interne, c'est le schéma du circuit logique complet (en tout cas pour la partie Timer) du 6846.
Dernière modification par nicolho le 06 janv. 2017 17:36, modifié 1 fois.
__sam__
Messages : 7961
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Emulation d'Assdesass sur To9

Message par __sam__ »

Tomix a écrit :CTG correspond à un signal d'entrée sur le timer (je ne sais pas ce qu'il signifie dans le contexte du To9).
C'est l'horloge E, celle à 1Mhz qui alimente le processeur d'après le manuel technique. L'explication de nicolho me semble bonne pour expliquer le +4.

Par contre ca n'explique pas pourquoi sur ton TO8D il faille un cycle de plus que sur TO9. Tu es bien sur ? Si tu as un code pour mesurer la VBL, je peux vérifier chez moi ce soir ce que ca donne sur mon TO8D.
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
nicolho
Messages : 409
Inscription : 10 nov. 2016 16:53

Re: Emulation d'Assdesass sur To9

Message par nicolho »

__sam__ a écrit :
Tomix a écrit :CTG correspond à un signal d'entrée sur le timer (je ne sais pas ce qu'il signifie dans le contexte du To9).
C'est l'horloge E, celle à 1Mhz qui alimente le processeur d'après le manuel technique. L'explication de nicolho me semble bonne pour expliquer le +4.
euh à quoi ça sert que Ducros... c'est pas seulement que c'est pas du tout ça (tout le monde peut se tromper, aucun problème) et encore moins "d'après le manuel technique"... mais c'est surtout que je viens de l'expliquer précisément dans le message précédent, posté 15 minutes plus tôt... :mrgreen: (en plus de l'image du paragraphe "/CTG" tirée de la doc et visible plus haut :roll: )

Et pour le "contexte du TO9", d'après les schémas c'est comme pour le TO8, ça correspond à ce j'avais dit dès le départ tout à l'heure :
nicolho a écrit :... /CTG est toujours abaissé (car "pulled-down" sur la carte mère)
Dernière modification par nicolho le 06 janv. 2017 17:55, modifié 3 fois.
Répondre