Le registre de largeur de vsync est généralement défini à 8 et lu comme 2 line-chars.
Le régler sur 2 fait tourner les jeux correctement, mais pas les démos. En réalité, sur le CRTC0, on lit la VSYNC pas à pas (Vcc), et non par line-char.
Avec le CRTC0, on peut définir une VSYNC basée sur un registre.
J’essaie d’implémenter le CRTC0 dans FPGAmstrad.
Mais je ne sais pas quelle démo est pour CRTC1 ou CRTC0.
J’ai besoin de savoir quelle démo est purement CRTC0.
Par exemple, Logon’s run n’affiche pas la Game Boy 3D sur mon CRTC0, cette partie de la démo est-elle réservée au CRTC1 ?
Wake Up passe bien la « détection CRTC0 », mais ne tourne pas à la vitesse normale.
Cette question est un peu déroutante à lire.
Que signifie « read as 2 line-char » ? Si R3=#8x, le CRTC générera un VSYNC de 8 lignes de balayage (scanlines). Le Gate Array l’utilisera ensuite pour générer un signal de synchronisation composite de 4 lignes de balayage.
Que signifie « Setting 2 » ? S’agit-il de régler R3=#2x ? Dans ce cas, le CRTC ne générera que 2 lignes de balayage avec VSYNC. Je ne suis pas certain que cela suffise au Gate Array pour générer le signal composite. Et même si c’est le cas, je ne sais pas si le signal composite sera assez long pour que le moniteur puisse se synchroniser dessus.
Qu’est-ce qu’une démo CRTC0, qu’est-ce qu’une démo CRTC1 ? Une démo peut tourner sur les deux CRTC ou seulement sur l’un d’eux, selon une utilisation spécifique de certains registres. Il ne s’agit pas forcément du registre R3, cela peut très bien être un autre.
Pour des informations détaillées, je conseille l’« Amstrad CPC CRTC Compendium » (AC3) de @Longshot de Logon System, disponible sur https://shaker.logonsystem.eu/ .
Je ne peux pas trop m’avancer sur d’autres démos, mais j’ai moi-même écrit une petite pré-démo (actuellement sans musique ni scroll text) qui effectue des tests pour détecter le type de CRTC, puis utilise le registre R0 pour la sélection des lignes de balayage. À voir sur https://codeberg.org/lightforce6128/cpc-circles#circles .
1 « J'aime »
Plus précisément, dans l’ACCC, vous pouvez consulter le chapitre 14.1 pour le réglage des longueurs HSYNC (et VSYNC sur CRTC 0, 3, 4) et le chapitre 17.1 plus particulièrement sur la VSYNC.
Pour éviter les problèmes de compatibilité, il est recommandé de régler R3=#0x afin que la VSYNC sur 0, 3, 4 fasse 16 lignes, comme sur les CRTC 1 et 2. Le GATE ARRAY génère un signal composite d’un maximum de 4 lignes entre la 3e et la 6e ligne (par ligne, j’entends le signal HSYNC) après le signal VSYNC du CRTC. Cependant, il est utile de programmer plus de 6 lignes (et donc 16 par souci d’uniformité) pour maintenir l’état du signal VSYNC que le Z80A peut lire depuis le PPI.
Le contexte dans lequel vous avez exécuté les démos mentionnées n’est pas très clair. Si vous parlez de véritables CPC (et non d’un FPGA, où vous avez mentionné avoir réduit la VSYNC à 2 lignes), c’est plutôt étrange, car la « Logon’s run » fonctionne sur tous les CRTC. Si vous parliez du FPGA ou d’une astuce quelconque ayant réduit la VSYNC à 2 (comme c’est possible sur le CRTC 0), cela ne servait tout simplement à rien de le faire.
1 « J'aime »
J’avais un piège pour R3Vwidth/=x"8"
if R3Vwidth/=x"8" and etat_vsync=DO_VSYNC then
etat_vsync:=DO_NOTHING;
crtc0_state:=STATE_R3VWIDTH_3; – c’est un piège
end if;
Logon’s run est piégé : il fait R3Width=0
Bruce Lee n’est pas piégé.
Arkanoid n’est pas piégé
Le bug de Buggy Boy n’est pas piégé, donc ça ne vient pas de R3Vwidth
Est-ce que R3Width à 0 fait une ligne ou rien ? Si c’est une ligne, est-ce que du coup 1 n’en fait pas une autre ?
Tu devrais vraiment consulter le chapitre 14.1 de l’ACCC, comme je l’ai mentionné plus tôt.
Si tu règles le demi-octet (nibble) de poids fort de R3 sur 1, les CRTC 0, 3 et 4 génèrent une ligne de VSYNC.
Si tu règles ce demi-octet sur 0, ces CRTC génèrent alors 16 lignes (et non 0) afin de rester compatibles avec les modèles qui ne disposent pas de cette fonctionnalité (comme les CRTC 1 et 2, qui génèrent toujours 16 lignes car les bits de ce demi-octet sont inopérants).