Zlika / theodore

Libretro core for Thomson MO/TO emulation / Core Libretro pour l'émulation des ordinateurs Thomson MO/TO.
GNU General Public License v3.0
16 stars 24 forks source link

IRQ Timer Frequency #32

Open bhrousseau opened 3 years ago

bhrousseau commented 3 years ago

Lorsqu'on positionne un timer IRQ la fréquence de déclenchement n'est pas respectée. Un léger décalage se produit. De ce fait si on utilise ce timer pour des effets raster, ça ne fonctionne pas et les lignes défilent au lieu d'être fixes. Idem pour produire un son, la fréquence n'est pas respectée.

Voici le fil de discussion de la correction du problème équivalent sous dcmoto : https://forum.system-cfg.com/viewtopic.php?t=5519&start=15

Tu trouveras ici : https://forum.system-cfg.com/download/file.php?id=18308 un fd de test que sam avait fait à l'époque : Il positionne le timer à 6413µs, ce qui correspond exactement à 13 lignes d'écran. Or 13 est un diviseur exact des 312 lignes verticales. Du coup on doit voir des barres colorées stables sur le tour, et entendre une note à 601Hz (= 1000000/(264*13))

=> or sous theodore les lignes défilent contrairement au même programme sur machine réelle.

Cordialement, Benoit Rousseau.

Zlika commented 3 years ago

Il va falloir que je potasse un peu plus le fonctionnement du timer pour régler ce problème j'ai l'impression. J'ai essayé de prendre en compte un des commentaires du thread que tu m'indiques qui précise :

De ce que j'en comprends c'est que lors de la lecture de CSR ($E7C0), les bits CSR0-2 sont indiqués comme devant être passé à 0 le moment venu. Pour CSR0 cela se fait lors de la prochaine lecture du compteut en $E7C6 ou $E7C7 (au 1er des deux lu).

En remettant à 0 CSR0 à la lecture de E7C6/E7C7 il y a une amélioration : la fréquence du son semble bonne (le spectre fait avec Audacity me donne bien un pic à ~601Hz alors que le son était beaucoup plus aigü avant) et les lignes défilent "moins vite" mais elles défilent quand même.