Inscription : 12 Juin 2008, 20:29 Message(s) : 1709
Ah oui, je me souviens maintenant ! je vais relire cela, dommage que ce soit une version traduite et pas les 'vrai' travaux de cette homme en français !
Inscription : 12 Juin 2008, 20:29 Message(s) : 1709
Bon, je galère pour l'émulation du moniteur... le code du CRTC semble bon mais par contre je ne comprends pas comment le moniteur se resynchronise...
en gros pour la synchro horizontale ont a trois périodes
52us = 832 pixels, on affiche. puis y'a trois périodes : // horizontal sync front porch : 1.65 us +- 0.3 us // horizontal sync pulse : 4.7 us +- 0.2 us // horizontal sync back porch : 5.65 us +- 0.3 us // ------------------ // horizontal line blanking interval : 12.00 us +- 0.3 us = 192 pixels (ou GA clock) !
et 832+192= 1024 = 64us
mais que se passe-t-il exactement pendant l'horizontal sync pulse ? si on reçoit le signal de synchro du CRTC/GA à ce moment là, c'est nickel, mais si on le reçoit pas, je comprends qu'on doit forcément pas exactement revenir à 0 à gauche de l'écran et que ça décale jusqu'à recevoir la synchro au bon moment ? en gros, le tube cathodique décharge son condo, revient pas exactement à gauche dans ce cas ? mais avec quel équation ?
et si on change R0, que se passe-t-il exactement ? comme c'est de l'électronique, ça doit réagir avec des équations ?!
idem pour la partie verticale avec ces timmings, que se passe-t-il donc si on reçoit pas la synchro comme il faut ?! // vertical sync Pre-equalisation pulses : 2.5 lines // vertical sync pulse : 2.5 lines // vertical sync Post-equalisation pulses : 2.5 lines // vertical blanking end : 17.5 lines // vertical sync blanking interval : 25 lines (PAL Standard)
Bon, je galère pour l'émulation du moniteur... le code du CRTC semble bon mais par contre je ne comprends pas comment le moniteur se resynchronise...
J'ai parfaitement compris (et je ne dois pas être le seul) tes questions. En réaction première, je dirai comme TotO:
TotO a écrit :
Utiliser un émulateur pour tester des comportements de VSync, c'est un peu une blague en fait ?
Pas de méprise: beaucoup de respect pour ce que tu fais. Ceci dit, à toi de voir directement avec le hardware ce qu'il se passe, non? Ce qui me permet d'enchainer: "hardware" ici c'est le moniteur du CPC, il peut être règlé bien différemment d'un moniteur à l'autre (rien que la synchro VBL derrière l'écran, histoire par exemple de supporter le flipping à 60Hz de l'Asic Inside). Ajoute à cela, déjà à l'époque: ceux qui branchaient le CPC sur une télévision, ou le comportement était/est encore différent (anecdotique: le "true color" que Longshot avait pu généré sur une télé en jouant sur la largeur de la HBL, et qui ne donna rien sur le moniteur CPC). Ajoutons à cela les problématiques plus actuelles quand tu branches le CPC sur un projo ou un moniteur "numérique" (LCD, plasma,...): pas systématique, mais souvent çà requiert alors une synchro parfaite pour fonctionner (exemple: 19968us précisément, et sans "jump" de l'écran si tu changes la position de la VBL sinon t'as un écran noir derrière; ou encore sans HBL au milieu de ligne pour changer de mode).
Retour à tes questions: comment qu'il se comporte le moniteur du CPC? je sais pas, me semble judicieux que tu zyeutes par toi-même et fais au mieux. Pour aller plus loin: zyeutes aussi sur la télévision, les projos et les écrans LCD, çà se comportera différemment. Bon courage (sans arrière pensée).
par contre, il manque le schéma et je n'arrive toujours pas à savoir le timming exact !
Je vous remercie par avance de votre aide !
Le schema (8.gif) devrait se trouver dans le zip de lone plus haut. Sinon tu le trouvera sur amstrad.eu -> ressources/server ftp -> Documentation/CPC-Hardware/doc_Pierre_Guerrier_CRTC.zip
Sinon, ci-joint les timings de quelques signaux mesuré sur CPC : 16MHz : oscillateur a 16MHz CPUn : signal servant a différencier les acces mémoire CPU / GA, sert aussi de clock pour l'AY CCLK : clock du CRTC, sert aussi de LSB pour l'adresse mémoire fetché par le GA. Le CRTC fonctionne sur front descendant. Sur le 40010, l'etat haut est plus court d'un cycle de 16MHz (en rouge) 4MHz : clock du Z80 WAITn : = READY du GA
Vous n’êtes pas autorisé(e) à consulter les fichiers insérés à ce message.
Inscription : 12 Juin 2008, 20:29 Message(s) : 1709
Cela marche impeccable avec ces timmings !
j'ai mis un peu de temps à répondre, car j'avais deux bugs sur l'émulation z80 à trouver et cela n'a pas été facile !
Par contre, je lis sur les forums, cpcwiki, les sources d'émulateur, etc. que le GA n'envoie pas de HSYNC si < 2 us et qu'il envoi un max de 6us de HSYNC pas plus... ou qu'il n'envoie pas de VSYNC avant 1 HSync, etc...
pour moi, la seule chose que fait le GA, c'est d'attendre la fin de HSYNC pour incrémenter son compteur. si compteur = 52, il envoi un signal d'interruption au Z80 après la VSYNC et deux fin de HSYNC, il envoi le signal d'interruption au Z80 si son compteur de HSYNC >= 32 (compteur&0x20).
donc le GA envoi directement le HSYNC|VSYNC (signal SYNC) au monitor dès qu'il les reçoit...
ce qui est logique parce que : - le signal CRTC.VSYNC est disponible directement par le PPI, donc le programme Z80 peut l'avoir dès que disponible. - le moniteur ne se soucis du HSYNC qu'en fin de ligne affiché lors du retour de ligne, si le HSYNC est inférieur à la durée de détection à ce moment là, c'est le moniteur qui gére (ou qui n'affiche pas) ! - le moniteur mets 2 lignes de VSYNC pour être sur que c'est bien une VSYNC et pas une HSYNC de reçu (même signal sur SYNC COMPOSITE (HSYNC|VSYNC)) !
par contre, si on envoi pas de signal de HSYNC du tout, le GA ne compte pas de fin de HSYNC, donc pas d'interruption et pas d'affichage ! ce qui généralement abouti à un écran noir !
il faudrait pouvoir mesurer les signaux avec un oscillo qui sortent du CRTC et celui de GA et voir si l'envoi se fait bien en même temps !
Inscription : 12 Juin 2008, 20:29 Message(s) : 1709
un petit up car personne ne m'a encore aidé à ce sujet !
Je vous remercie par avance de votre aide
en complément, et d'après quelques tests. Le GA semble changer de mode de 2us après le début de la HSYNC et non à la fin de la HSYNC comme j'avais compris dans les documentations ?! ?
Inscription : 20 Août 2013, 18:03 Message(s) : 258
Megachur a écrit :
Cela marche impeccable avec ces timmings ! Par contre, je lis sur les forums, cpcwiki, les sources d'émulateur, etc. que le GA n'envoie pas de HSYNC si < 2 us et qu'il envoi un max de 6us de HSYNC pas plus... ou qu'il n'envoie pas de VSYNC avant 1 HSync, etc...
Pour une configuration du CRTC par le FW : HSYNC en sortie du GA est de 6us (celle du CRTC est de 10us) La syncro est décalée de 2us par rapport a celle du CRTC. Maintenant, je n'ai pas fait de test spécifique avec des synchro plus courte.
Pour d'autre mesure, il va falloir attendre ! pas d’accès au CPC pour les 3 semaine a venir.
Inscription : 12 Juin 2008, 20:29 Message(s) : 1709
Ok, merci de ton aide -> j'attends cela avec impatience...
je mets mon code actuel du GA à ce sujet, si quelqu'un peut aider
Code :
crtc.clock(); // others
if(this.gaModeafterHS) { this.gaModeafterHS--; if(!this.gaModeafterHS){ this.SMODE=this.SMODEtoSet;// Changing the mode will take effect after the next HSync is issued. } }
if(this.HSYNC!=crtc.HS) {
this.HSYNC=crtc.HS;
if(!this.HSYNC) {// On every falling edge of the HSync signal, the Gate Array will increment the counter by one. When the counter reaches 52, the Gate Array raise the INT signal and reset the counter. With 50Hz PAL CRTC settings (one HSync every 64us) this will produce a 300Hz interrupt rate.
if(this.VSYNCDetect) {// Z80 Interrupt synchronised to 2 HSYNCs after VSYNC this.gaHSafterVS=2; } }
} this.SYNC=this.HSYNC|this.VSYNC; }
ce que j'ai trouvé à force d'essayer c'est que le GA envoie la VSYNC après une ligne (prochaine HSYNC après détection) et elle dure une ligne...
d'après mes essais, cela permet l'affichage au moins de ces deux démos : Madness (UK) (128K) (1994) [DEMO] et Sea You Soon (UK) (128K) (1993) [DEMO] ! les plupart des autres testent pas la durée de la vsync, mais juste son début !
Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 75 invité(s)
Vous ne pouvez pas publier de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas insérer de pièces jointes dans ce forum