Commodore manía
Commodore 64 => Desarrollo => Mensaje iniciado por: riq en Enero 15, 2015, 20:32:18
-
Hola,
¿Alguien tiene experience haciendo un juego compatible con PAL y NTSC a la vez?
Leí las diferencias técnicas entre ambos (http://"http://unusedino.de/ec64/technical/misc/vic656x/pal-ntsc.html"), y también vi que se puede detectar en runtime fácilmente cuando estas en PAL y cuando NTSC ( http://codebase64.org/doku.php?id=base:detect_pal_ntsc (http://codebase64.org/doku.php?id=base:detect_pal_ntsc) )
Mi duda más bien básica:
¿Cual es la mejor manera para que el juego funcione a la misma velocidad tanto en NTSC como en PAL?
¿Se pone un "delay" en si estas en NTSC? ¿tienen algún ejemplo que muestro como hacerlo?
Gracias!
-
La teoría es sencilla, el funcionamiento diferente si el juego es PAL o NTSC es debido a que la mayoría de juegos sincronizan alguna (o varias) de sus rutinas con el refresco de pantalla (el famoso raster).
El refresco es diferente en PAL y NTSC, una pantalla PAL se refresca 50 veces por segundo mientras que una NTSC lo hace 60. Por lo tanto si hemos sincronizado el código para que algo se ejecute a determinada velocidad en PAL se verá mas rápido en NTSC y viceversa.
Soluciones hay varias, una es no sincronizar con los raster sino con el timer del CIA que es independiente de si es PAL o NTSC. Otra es detectar al principio del programa si estamos en un sistema PAL o NTSC (y por lo tanto refrescando a 50 o 60 veces por segundo) y tener en cuenta eso a la hora de sincronizar el código.
-
Gracias Carlos.
¿Tenes idea donde puedo encontras más información?
¿O conoces de algún juego open source que use alguno de esos métodos?
Estoy ahora leyendo el código del Metal Warrior 4 ( http://cadaver.homeftp.net/games.htm (http://cadaver.homeftp.net/games.htm) ) para ver bien que usan.
Pero si conoces de algún ejemplo más sencillo que eso, te agradecería.
Gracias!
-
Un ejemplo de sincronización de código con las interrupciones del CIA: http://codebase64.org/doku.php?id=base:timerinterrupts (http://codebase64.org/doku.php?id=base:timerinterrupts)
-
gracias! eso era exactamente lo que estaba buscando :)
-
Lo que no esté en Codebase64...