Overclocking en el emulador de SNES
El emulador bsnes tiene un nuevo modo de overclocking para eliminar las ralentizaciones en los juegos de SNES, manteniendo la jugabilidad precisa. Copiamos hardware SNES antiguo en máquinas modernas mucho más potentes. Eliminar las ralentizaciones debe ser trivial, ¿verdad? Para un emulador como bsnes, que está escrito para lograr una precisión de píxeles perfecta al copiar, el problema es definitivamente insignificante. Estén atentos para saber por qué.
La Super Nintendo fue para su época un sistema impresionante, en su mayor parte. La velocidad de fotogramas de SNES está bloqueada en 60 FPS, lo que es un poco sorprendente teniendo en cuenta que el estándar NTSC era de solo 30 FPS. NTSC requiere 30 fotogramas por segundo, pero estos son fotogramas entrelazados. 30 veces por segundo se actualizan las líneas de exploración pares y 30 veces por segundo se actualizan las líneas de exploración impares. Entonces, 60 veces por segundo, se actualiza la mitad de la pantalla, alternando entre las líneas pares e impares.
En la parte superior de cada cuadro, el equivalente a media línea de exploración marca si el resto del cuadro son líneas de exploración pares o impares. Para producir un 60 FPS limpio, el SNES no se entrelazó y solo escribió siempre en las mismas 240 líneas de escaneo. Es por eso que incluso las consolas retro pueden verse tan mal en las pantallas modernas. Las líneas de escaneo en blanco estaban ocultas por el desenfoque analógico de los televisores CRT.
El procesador primario SNES opera toda la lógica del juego y actualiza los gráficos 60 veces por segundo, terminando los cálculos de cada cuadro antes de que el televisor comience a escribir ese cuadro en la pantalla. Los juegos generalmente se han escrito cuidadosamente para garantizar que el procesamiento de cada cuadro se complete dentro de esa ventana de 16 milisegundos.
La mayoría de los juegos tienen varios escenarios en los que suceden muchas cosas a la vez y el procesador simplemente no puede seguir el ritmo de la velocidad de fotogramas. En este caso, el juego comienza tarde. Debido a que la velocidad de fotogramas está fuertemente sincronizada a 60 fps, el fotograma anterior simplemente se muestra nuevamente y el juego se pausa para ese fotograma mientras finaliza el procesamiento.
La solución bsnes está lista. Se agregan líneas de escaneo virtual, pero la copia de audio y video está en pausa. Esto permite que todo el proceso suceda muy rápidamente y, sin embargo, continúe sincronizándose con los 60 FPS normales. A continuación se muestra la demostración de Gradius III, que muestra los resultados.
https://www.youtube.com/watch?v=viw3xMTXX40
Imagen de título: Sandos (CC BY-SA 3.0).
Hako Jack dice:
Básicamente, ¿hay alguna manera de generar un video no entrelazado usando un CRT tradicional? ¡Ay, no lo sé en absoluto! ¿Cómo se decide entonces el 240p? Creo que he visto diferentes consolas de juegos de la misma generación con diferentes números de resoluciones verticales.
compuesto dice:
240p es más que un truco dentro del tipo 480i. En 480i, la línea extraña se dibuja normalmente: la primera línea comienza al comienzo del trazo vertical. Sin embargo, el campo paralínea se dibuja con un ligero retraso para dejar que el trazo vertical caiga por debajo de las líneas impares ya dibujadas.
240p elimina este retraso en campos planos, lo que obliga al CRT a crear siempre líneas impares y nunca dibujar líneas pares. Por tanto, imagen progresiva 240p60. Debido a que 240p no es exactamente un tipo oficial, muchos monitores modernos lo confunden con 480i e intentan vincularlo (lo cual es terrible porque no está entrelazado al principio) o dibujar cada dos fotogramas en líneas pares / impares como una señal de 480i. De cualquier manera: no es un gran look. El doble de línea, como el Open Scan Converter, puede detectar 240p y manejarlo correctamente, emitiendo una señal HDMI / DVI de línea doble.
Alex Rossie dice:
Con suerte, esto se aplica a Saturno, que tiene una serie de procesadores y relojes mucho más compleja (incluidas dos computadoras centrales).
Es algo que he pedido para un yabuse más de una vez, pero poco interés (y estaba lejos de poder implementar algo así).
Trabajé hace un tiempo en uno de los primeros emuladores de megadiscos / genesis con mejoras en la fluidez de los cuadros, pero el audio sufrió y puse un retraso que se volvió mucho más complejo.
Anónimo dice:
¿Crees que este método de overclocking podría funcionar con Saturn? Aquí alguien que intenta explicar cómo funciona esto parece sugerir que es principalmente para consolas 2D: https://www.reddit.com/r/emulation/comments/cohx9n/comment/ewlfjuk
Mitch Hancock (@DracheMitch) dice:
La Saturn era una consola 2D, por lo que Sony ejecutó SEGA en esa generación de consolas: era casi imposible ejecutar juegos 3D en ella, por lo que la mayoría de los juegos no se podían transportar.
Anónimo dice:
He visto a gente preguntarse si este método de overclocking podría implementarse en FPGA de alguna forma ...
rnjacobs dice:
El video entrelazado es "automático" cuando se trabaja con CRT. Cuando el índice hsync es un múltiplo entero del índice vsync, obtienes un video progresivo. Cuando es ± 1/2, obtienes un video entrelazado.
Existe una fantasía ("sincronización adicional") en torno al masaje de la señal síncrona sintética para que vsync pueda comenzar a la mitad de hsync cada dos seguimientos.
Tanya Myoko dice:
* a SNES, ne an.
An se usa solo cuando la siguiente palabra comienza con un sonido de vocal. Por lo general, tiene una excusa con acrónimos porque se pueden pronunciar de 2 maneras. Sistema de entretenimiento SNES o sobre Nintendo. Ni empezar con un sonido vocalkeith de canadá dice:
FWIW, "An Ess-In-Ee-Ess" es la forma en que generalmente se pronuncia cuando se habla como el acrónimo, que comienza con un sonido de vocal.
Jonathan Bennett dice:
El lenguaje es extraño. Pronuncio SNES como "es en ee es"