CRTC0 escritura 8 lectura 2

El registro de ancho de vsync generalmente se establece en 8 y se lee como 2 line-char.
Configurarlo en 2 hace que los juegos funcionen bien, pero no con las demos. De hecho, en el CRTC0 leemos el VSYNC paso a paso (Vcc), no por line-char.

Con el CRTC0 puedes configurar un VSYNC basado en registros.
Estoy intentando implementar el CRTC0 en FPGAmstrad.
Pero no sé qué demo es para CRTC1 o CRTC0.

Necesito saber qué demo es puramente CRTC0.
Por ejemplo, Logon’s Run no muestra la Game Boy 3D en mi CRTC0, ¿esta parte de la demo es solo para CRTC1?

Wake Up sí pasa la «detección de CRTC0», pero no corre a velocidad normal.

Esta pregunta resulta un poco confusa de leer.

¿Qué significa «read as 2 line-char»? Si R3=#8x, el CRTC generará un VSYNC de 8 líneas de escaneo (scanlines). La Gate Array usará esto para crear una señal de sincronismo compuesto de 4 líneas de escaneo.

¿Qué significa «Setting 2»? ¿Se refiere a configurar R3=#2x? En este caso, el CRTC solo generará 2 líneas de escaneo con VSYNC. No estoy seguro de si esto es suficiente para que la Gate Array cree la señal compuesta. E incluso si lo fuera, no sé si la señal compuesta sería lo bastante larga como para que el monitor pueda sincronizarse con ella.

¿Qué es una demo para CRTC0 y qué una para CRTC1? Una demo puede funcionar en ambos CRTCs o solo en uno de ellos, dependiendo del uso especial de ciertos registros. No tiene por qué ser el registro R3, bien podría ser otro.

Para obtener información detallada, sugiero el «Amstrad CPC CRTC Compendium» (AC3) de @Longshot de Logon System. Disponible en https://shaker.logonsystem.eu/ .

No puedo decir mucho sobre otras demos, pero yo mismo escribí una pequeña pre-demo (actualmente sin música ni texto en scroll) que ejecuta algunas pruebas para detectar el tipo de CRTC y luego utiliza el registro R0 para la selección de scanlines. Puedes verla en https://codeberg.org/lightforce6128/cpc-circles#circles .

1 me gusta

Más concretamente, en ACCC puedes consultar el capítulo 14.1 para configurar las longitudes de HSYNC (y VSYNC en los CRTC 0, 3, 4) y el capítulo 17.1 más específicamente sobre VSYNC.

Para evitar problemas de compatibilidad, se recomienda configurar R3=#0x para que el VSYNC en 0, 3, 4 tenga 16 líneas, como en los CRTC 1 y 2. La GATE ARRAY genera una señal compuesta de un máximo de 4 líneas entre la 3.ª y la 6.ª línea (por línea, me refiero a la señal HSYNC) después de la señal VSYNC del CRTC. Sin embargo, resulta útil programar más de 6 líneas (y por tanto 16 por uniformidad) para mantener el estado de la señal VSYNC que el Z80A puede leer desde el PPI.

No dejas claro el contexto que utilizaste para ejecutar las demos que mencionaste. Si te refieres a CPCs reales (y no a una FPGA, donde mencionaste acortar VSYNC a 2 líneas), entonces resulta bastante extraño porque «Logon’s run» funciona en todos los CRTCs. Si te referías a la FPGA o a algún apaño que redujo VSYNC a 2 (como es posible en el CRTC 0), entonces simplemente no tenía sentido hacerlo.

1 me gusta

Tenía una trampa para R3Vwidth/=x"8"

if R3Vwidth/=x"8" and etat_vsync=DO_VSYNC then
etat_vsync:=DO_NOTHING;
crtc0_state:=STATE_R3VWIDTH_3; – es una trampa
end if;

La ejecución de Logon cayó en la trampa: hace R3Width=0
Bruce Lee no cayó en la trampa.
Arkanoid no cayó en la trampa
El fallo de Buggy Boy no cayó en la trampa, así que no es por R3Vwidth

¿Qué hace R3Width en 0? ¿Una línea o nada? Si es una línea, ¿entonces 1 no hace otra línea?

Deberías consultar de verdad el capítulo 14.1 de ACCC, como mencioné antes.

Si estableces el cuarteto (nibble) más significativo de R3 a 1, entonces los CRTC 0, 3 y 4 generan una línea de VSYNC.

Si estableces este cuarteto a 0, estos CRTC generarán 16 líneas (no 0) para mantener la compatibilidad con los modelos que no cuentan con esta función (como los CRTC 1 y 2, que siempre generan 16 líneas porque los bits de este cuarteto están inoperativos).