CPC Rulez
https://cpcrulez.fr/forum/

Gate Array Timmings !
https://cpcrulez.fr/forum/viewtopic.php?f=5&t=5232
Page 1 sur 2

Auteur :  Megachur [ 31 Mars 2014, 20:15 ]
Sujet du message :  Gate Array Timmings !

Je suis en train de me faire un simulateur CRTC / Gate Array / Z80 (je pensais pas devoir faire toutes les instructions au départ, mais si ;-)) pour tester certains effets.

je simule donc l'appel au GA à 16 Mhz (CK = clock) en gros comme cela :

GA_CK Z80_CK CRTC_CK RAM_VIDEO AY_CK (todo)
0 / 0Z80 / 0CRTC / 0RAM (wait CPU=true) at MA+0
1
2
3
4 / 1Z80 (wait if read/write RAM)
5
6
7
8 / 2Z80 / / 1RAM (wait CPU=true) at MA+1
9
10
11
12 / 3Z80 (wait if read/write RAM)
13
14
15
(16Mhz) (4Mhz) (1Mhz) (1Mhz)

+ l'extra wait rajouter par AMSTRAD avec le GA si on fait un I/O Port read or write en CPU_CK=1 !!!

D'après les essais que j'ai pu faire, c'est le timming le mieux : celui qui donne un timming à 3,3Mhz pour le Z80 (64 nops par ligne) et permet l'affichage avec CRTC !

pour l'AY je ne sais pas du tout où le positionner en terme d'appel !

je ne suis pas peu fier d'avoir pu simuler ainsi le pb d'affichage évoquer par Grim (VRAM Rasterization timings du 40010 sur http://www.grimware.org/doku.php/documentations/devices/gatearray !!! Il m'a suffit de décaler d'un cycle d'horloge l'appel au CRTC !

Mon gros problème c'est que je n'ai aucun moyen de vérifier si ce timming est exacte sur un 'vrai' cpc car je ne n'ai pas d'oscilloscope !!!

Est-ce que quelqu'un peu m'aider à valider ce timming d'appel des différents composants par le Gate array ? Il est possible que les appels soit différents selon les GA (ou l'ASIC) ?!

Je vous remercie par avance de votre aide et de votre passion cpcienne ;-) !!! :biere: :biere: :biere: :biere: :biere: :biere:

Auteur :  Megachur [ 31 Mars 2014, 20:38 ]
Sujet du message :  Re: Gate Array Timmings !

Euh, je viens de voir cela sur la page de Grim :
Code :
    If the counter>=32 (bit5=1), then no interrupt request is issued and counter is reset to 0.
    If the counter<32 (bit5=0), then an interrupt request is issued and counter is reset to 0.


il me semble que c'est l'inverse non ? cf http://cpctech.cpc-live.com/docs/gaint.html ???

Auteur :  Lone [ 31 Mars 2014, 21:52 ]
Sujet du message :  Re: Gate Array Timmings !

Oui je confirme, c'est une erreur.

Auteur :  fano [ 01 Avr 2014, 13:04 ]
Sujet du message :  Re: Gate Array Timmings !

Megachur a écrit :
je simule donc l'appel au GA à 16 Mhz (CK = clock) en gros comme cela :

GA_CK Z80_CK CRTC_CK RAM_VIDEO AY_CK (todo)
0 / 0Z80 / 0CRTC / 0RAM (wait CPU=true) at MA+0
1
2
3
4 / 1Z80 (wait if read/write RAM)
5
6
7
8 / 2Z80 / / 1RAM (wait CPU=true) at MA+1
9
10
11
12 / 3Z80 (wait if read/write RAM)
13
14
15
(16Mhz) (4Mhz) (1Mhz) (1Mhz)
Salut ! il me semble que ce n'est pas tout à fait exact, je t'invite à les lire quelques messages sur cette thread (http://www.cpcwiki.eu/forum/programming/crtc-help/msg69368/#msg69368) qui sont assez interessants à ce sujet.

Auteur :  Plissken [ 01 Avr 2014, 14:04 ]
Sujet du message :  Re: Gate Array Timmings !

Tu pourrais expliquer ce que tu entend par simulateur ?

Une émulation du hardware ?

Auteur :  Megachur [ 01 Avr 2014, 19:47 ]
Sujet du message :  Re: Gate Array Timmings !

Plissken a écrit :
Tu pourrais expliquer ce que tu entend par simulateur ?

Une émulation du hardware ?


oui ! :kissed:

Auteur :  Megachur [ 01 Avr 2014, 19:58 ]
Sujet du message :  Re: Gate Array Timmings !

fano a écrit :
Salut ! il me semble que ce n'est pas tout à fait exact, je t'invite à les lire quelques messages sur cette thread (http://www.cpcwiki.eu/forum/programming/crtc-help/msg69368/#msg69368) qui sont assez interessants à ce sujet.


j'ai regardé le sujet... mais je ne suis pas sûr qu'il soit aussi avancé que moi... ;-) je vais jeter un oeil (aie!!!) sur le code de jemu z80 !

il parle pas du timming CRTC, c'est dommage !

Merci d'avance de m'aider sur ces timmings du GA (le gardien du clock-clock) -> CRTC / READ MA / Z80 / AY ?

Auteur :  Overflow [ 01 Avr 2014, 20:54 ]
Sujet du message :  Re: Gate Array Timmings !

Megachur a écrit :
Euh, je viens de voir cela sur la page de Grim :
Code :
    If the counter>=32 (bit5=1), then no interrupt request is issued and counter is reset to 0.
    If the counter<32 (bit5=0), then an interrupt request is issued and counter is reset to 0.


il me semble que c'est l'inverse non ? cf http://cpctech.cpc-live.com/docs/gaint.html ???


Je confirme aussi, c'est l'inverse.

Et somme tout c'est assez embêtant, je m'explique:
pour un effet de démo commençant en haut de l'écran,
et requérant une synchro au NOP-cycle près,
généralement on attend l'interruption à la VBL
par HALT, avec un code similaire à EI:RET en RST#38

Ce même effet maintenant, disons qu'on le veuille plein-écran;
on est généralement en DI sur les quelques 272 lignes de l'écran visible;
et c'est là que le bât blesse: "en bas" de l'écran, y'a pas 32 lignes;
donc un EI éventuel (ou le out équivalent à resetter le compteur) après l'écran visible
ne permettra pas au dit compteur d'attendre 32 ou plus;
donc (on y arrive), pas d'interruption de générée à la VBL
et au final, pas possible avec HALT de se synchroniser à la VBL.

C'est un des trucs assez ch... qui a nécessité dans YAP! par exemple
d'envoyer ce fameux OUT pour resetter le compteur "vers le bas" de l'écran visible.
Y'a sans doute d'autre moyen de faire, comme la DTC:
pas de synchro, tout tourne pile poil en 1 VBL. Respect!

---

Sinon, à propos des timings: joker! :)

Auteur :  Megachur [ 02 Avr 2014, 17:46 ]
Sujet du message :  Re: Gate Array Timmings !

ça me fait penser également au timming de nos chers CTM 64x ! est-ce qu'ils sont au standard PAL exactement ?

et sinon quel est leur timming de hsync et vsync ?

je m'explique, en gros pour l'instant je fais cela :

soit je prends la synchro venant du CRTC (via le GA), je compte la synchro (pas d'affichage), et je réaffiche.
si je reste plus de deux lignes en synchro continue (après deux hsync), je suis en VSYNC (c'est parti pour n lignes de synchro verticale). Y'a qu'un signal venant du GA vers le moniteur !
pour la synchro imposé par le moniteur :
si je dépasse un certains x par ligne, je déclenche la synchro du moniteur. pour l'instant, j'ai mis les valeurs standard du PAL : HSYNC BEGIN (PAL Standard : 4.7 +- 0.1 us) et // HSYNC END (PAL Standard : 12.05 +- 0.25 us) soit en timming GA : 32 et 192 environ !
si je dépasse un certains n lignes, je déclenche la synchro du moniteur.//312.5 - 26 lines vsync standard pour le PAL. (j'ai pas encore codé l'interlace, juste un speudo interlignes)
avec ces timmings j'ai certains programmes qui utilise le CRTC (même en basic) où je dois régler le VHOLD pour que l'écran soit stable...
du coup, je me dis que les moniteurs CTM sont peut-être un poil plus tolérant sur la durée de VSYNC ?

autre question, j'ai compris qu'il ne pouvait y avoir qu'une VSYNC par frame !

:magic:

Merci à tous de votre aide, et en particulier notre maître du CRTC à la retraite : Overflow !!! ;-) pour l'instant aucune de tes démos ne tournent sur mon machin... j'ai encore à faire progresser mon simulateur !

Auteur :  Lone [ 04 Avr 2014, 10:15 ]
Sujet du message :  Re: Gate Array Timmings !

Hello,

Voila des problématiques qui me parlent...

Actuellement, je ne suis pas sur de comment sont les timings du moniteur : J'ai développé un algo de type "usine a gaz", qui permet de faire marcher la plupart des trucs (mais que je considère comme à revoir).

Par contre, concernant le VSync, le signal peut être généré plusieurs fois par frame. Si un seul doit être correctement positionné (timé) pour avoir un écran stable, on peut en avoir un autre en plein milieu. La partie 6 de "The demo" en présente un, notamment, mais le fond de l'écran étant noir, elle ne se voit pas. Par contre, quand on reload plusieurs fois le SNA en pj, on se rend compte que, de temps en temps, les deux parties d'écran sont inversées : Le moniteur s'est calé sur l'une ou l'autre de ces zones de synchro.

Concernant les timings de Hsync : C'est un peu complexe et apparemment assez flexible : Quelques demos proposent des frequences horizontales de 65 us, et d'autres font varier la position du signal HSync (la partie 5 de the demo, je crois - Dans cette megademo, on a décidement tout pour tester en profondeur un emulateur !). Il semble dans ces cas que le moniteur se recale correctement également.

Auteur :  TotO [ 04 Avr 2014, 12:33 ]
Sujet du message :  Re: Gate Array Timmings !

Utiliser un émulateur pour tester des comportements de VSync, c'est un peut une blague en fait ? :sweatingbullets:

Ce signal doit être généré par le CRTC toutes les 20ms en 50Hz. (19968μs exactement, d'après Grimware)

Lorsque le canon à électron a fini de balayer l'écran, il remonte sans rien afficher (Vblank) puis est "retenu" (Vhold) le temps de recevoir de la part du CRTC le signal de synchronisation. (VSync)
Si Vsync n'est pas envoyé durant cet instant, alors c'est le moniteur qui déclenche automatiquement en fonction de Vhold... Ce qui va provoquer un effet de déchirement de l'image (tearing), car l'affichage n'est plus synchronisé avec le CPC.

Le GA ne génère pas la VSync, mais la reçoit de la part du CRTC et se synchronise dessus. (génération de 6 interruptions chaque frame, soit toutes les 52 rasterlines)

Si Vsync n'est pas déclenchée au bon moment, ça peut provoquer des affichages hasardeux.
Le mieux étant de potasser les datasheets des différents CRTC.

Auteur :  markerror [ 05 Avr 2014, 07:28 ]
Sujet du message :  Re: Gate Array Timmings !

Bonjour,

Concernant la partie de Naminu dans The Demo, elle se comporte aussi comme cela sur un vrai CPC. De temps en temps, les deux écrans sont inversés.

Auteur :  Megachur [ 05 Avr 2014, 17:25 ]
Sujet du message :  Re: Gate Array Timmings !

Pour ceux que ça intéresse, j'ai trouvé ce doc très bien fait (quoique un poil technique quand même ;-)) : http://www.rennes.supelec.fr/ren/perso/ ... tv_opt.pdf

@TotO : effectivement tu as tout juste... mais ce que je disais c'est que c'est le GA qui envoi le signal de SYNC (=crtc.HSYNC|CRTC.VSYNC) au moniteur par un seul fil !
donc il faut compter...
soit c'est une hsync (au bout d'un certains compteurs) puis une fin de hsync. à la fin de la hsync, il faut rajouter le h-hold !
soit si le signal reste actif plus de deux lignes (1024*2 en compteur GA ou 64us*2) alors on considère que c'est une vsync. à la fin de la vsync, il faut rajouter le v-hold !

bon, c'est expliqué dans le pdf. ;-)

-> J'espère qu'un passionné de cpc qui a un oscillo et un cpc sous la main pourra me confirmer les timmings GA/CRTC/RAM/CPU ? :biere:

Auteur :  Megachur [ 06 Avr 2014, 07:26 ]
Sujet du message :  Re: Gate Array Timmings !

Lone a écrit :
Hello,

Voila des problématiques qui me parlent...

Actuellement, je ne suis pas sur de comment sont les timings du moniteur : J'ai développé un algo de type "usine a gaz", qui permet de faire marcher la plupart des trucs (mais que je considère comme à revoir).

Par contre, concernant le VSync, le signal peut être généré plusieurs fois par frame. Si un seul doit être correctement positionné (timé) pour avoir un écran stable, on peut en avoir un autre en plein milieu. La partie 6 de "The demo" en présente un, notamment, mais le fond de l'écran étant noir, elle ne se voit pas. Par contre, quand on reload plusieurs fois le SNA en pj, on se rend compte que, de temps en temps, les deux parties d'écran sont inversées : Le moniteur s'est calé sur l'une ou l'autre de ces zones de synchro.

Concernant les timings de Hsync : C'est un peu complexe et apparemment assez flexible : Quelques demos proposent des frequences horizontales de 65 us, et d'autres font varier la position du signal HSync (la partie 5 de the demo, je crois - Dans cette megademo, on a décidement tout pour tester en profondeur un emulateur !). Il semble dans ces cas que le moniteur se recale correctement également.


je comprends que lorsque le GA envoie le signal de SYNC correspondant à la VSYNC (issu du CRTC), le moniteur se mets en VSYNC... cependant, il ne fait le retour à zéro (x=0 et =0) que lorsqu'il a dépassé son compteur de ligne max (ex pour 312,5 lignes, 288 lignes+24,5 lignes pour le retour) ?

Auteur :  Lone [ 06 Avr 2014, 20:01 ]
Sujet du message :  Re: Gate Array Timmings !

Excellente question, qui nécessiterait sans doute un oscillo pour avoir la réponse :

Soit c'est effectivement ce qui se passe, soit c'est le GA qui, pendant la durée ou il génère le vsync, va "couper" l'envoi des données pendant ce laps de temps (26 lignes si je ne m'abuse ?)

Côté moniteur, n'oublions pas non plus que nous ne sommes pas dans le domaine de l’électronique numérique, il doit s'agir plus de niveau que de compteurs, concernant la vsync, entre autre.

La documentation concernant le CRTC (et le VDU sur ce point précis) de Pierre Guerrier est d'ailleurs très instructive .

Page 1 sur 2 Le fuseau horaire est UTC+1 heure
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/