A ver, la cuestión que planteas es muy interesante, pero no es fácil de responder, ya que normalmente las limitaciones de un sistema tan complejo como las consolas suele venir por varios factores. Intentaré responderte, aunque parte de las respuestas ya las comenté en otros hilos:
Sexy MotherFucker escribió:- ¿Hasta qué punto importa la CPU en SNES o MD a la hora de sacar a flote el máximo ancho de banda nominal por frame del DMA, que es de 7ypico kb en Megadrive, y 6ypico en SuperNintendo? Siempre había creído que esto tenía que ver más con los anchos de banda de las propias memorias, y todo lo relacionado con el sistema gráfico.
Por definición de lo que es un Direct Memory Access, la CPU no influye en ABSOLUTAMENTE nada en el DMA. De hecho, la gracia del DMA es que la CPU está parada mientras éste se ejecuta, ya que el bus entre la ROM y la RAM o la ROM y la VRAM estarían ocupados y habría colisión. Es decir, imagina que la CPU lanza un DMA y mientras éste envía datos desde ROM a VRAM, la CPU siguiente ejecutando la siguiente instrucción del programa, que está en ROM también. Sería necesario un arbitraje de bus , que es algo complejo y no existe en estas consolas.
Lo que pasa es que si la CPU tiene que "renderizar" una parte de la imagen, cuanto más rápida sea la CPU, antes tendrá preparado el siguiente frame, pero el DMA para enviar las tiles o el tilemap a VRAM siempre será igual de lento.
En el caso de SNES, el DMA se ejecuta a la frecuencia más baja posible de funcionamiento del bus A (el que conecta ROM/RAM con CPU, el bus B es el que conecta PPU con CPU), que es 2.58MHz, es decir, 8 ciclos de reloj maestro. Como ya te comenté en otro post, esto se debe a que el 65C816 tiene 1 ciclo de acceso externo (tanto de escritura como de lectura), así que como la memoria RAM y la memoria VRAM son bastante lentas en tiempo de acceso, ese ciclo de lectura/escritura de la CPU tiene que ser largo (es decir, frecuencia baja) para que le dé tiempo a la ROM o RAM a tener el dato listo en sus pines de salida.
Además de la frecuencia de reloj del DMA, está el tiempo que se le asigna a hacer dichas transferencias. En la SNES, para escribir en VRAM tienes que estar en el borrado vertical, que es el instante de tiempo en el que el haz de electrones del tubo de la TV está desconectado y retornando a la esquina superior izquierda de la pantalla para dibujar el siguiente campo de la imagen. Ese tiempo es de 25 líneas en PAL y 21 en NTSC, y esto viene definido por el estándar de video, no por la consola (aunque realmente para la consola el blanking vertical empieza un poco antes y termina un poco después, ya que sólo tiene 240 líneas activas). Así que en PAL harías el DMA a la misma frecuencia que en NTSC, pero tendrías más tiempo para enviar datos, por lo que el ancho de banda por frame es mayor.
Sexy MotherFucker escribió:- ¿Influye el hecho de la resolución que emiten? Es decir; ¿si la SNES tuviese que dibujar a 320x224 en lugar de a 256 perdería ancho de banda? Ojo; 320x224 outpout literal, no 512 en los fondos y 256 en el campo de los sprites, y en cualquier caso ya sabemos que SNES no es compatible con ese ratio, es simplemente por teorizar y entender el concepto. En el caso de la MD al pasar al modo 256x224 disminuye, pero eso es porque SEGA la capó así a propósito para el modo retrocompatible con Master System II.
Es que si la SNES tuviera una resolución vertical diferente ya no sería SNES... Me explico con datos de NTSC (para PAL son igual, solo que el blanking vertical dura más):
* Para la SNES, la pantalla de tu televisor tiene 262 líneas en cada campo (par e impar), es decir, 524 líneas por frame (el estándar de NTSC dice que hay 525, 262 en el campo par y 263 en el impar).
* Para la SNES el campo par de tu TV es un frame, y el campo impar es el siguiente frame, es decir, que trabaja de forma entrelazada actualizando el contenido de la pantalla de la TV en cada campo, en vez de hacerlo en cada frame como lo haría si funcionara de forma progresiva.
* Cuando el contador vertical interno a la SNES marca 0, empieza la parte activa de la imagen; cuando llega a 240, empieza el blanking vertical que durará hasta la línea 261 (21 líneas de V-Blank, aunque esto es configurable a 224, pero para no liarlo más, lo dejamos así).
* El contador se resetea al final de la línea 261 y vuelve a 0, empezando el siguiente campo activo de la imagen.
Así que si quieres sacar una resolución vertical diferente, te tienes que ajustar a ese patrón de dibujado de las líneas, podrías sacar hasta 256x256, pero fíjate que entonces sólo tendrías 6 líneas de borrado vertical, lo cual es inviable.
Si lo que quieres es cambiar es la resolución horizontal, entonces habría que cambiar más cosas del funcionamiento de la SNES, pero el ancho de banda a VRAM (frecuencia del DMA y tiempo de V-Blank) no cambiarían.
Sexy MotherFucker escribió:- Y en el caso de que sea la CPU la que dicte el rendimiento del ancho de banda; ¿hasta qué punto cara a generar ancho de banda le lastra al WDC el tener una memoria WRAM a menor frecuencia? Porque Ventura dice que simplemente de tener una ram a 3,58 mhz la SNES alcanzaría nada menos que un 128% más de ancho de banda que la propia Megadrive.
Si la WRAM, la VRAM y las ROM hubieran sido más rápidas, todo podría haber ido a más frecuencia, teniendo en cuenta que el límite fundamentalmente lo marca el ciclo de acceso de lectrua/escritura del 65C816 y el tiempo de acceso de la ROM y RAM (la más lenta de ambas).
Lo que dice
@Señor Ventura es parcialmente cierto, porque si la RAM hubiera tenido un tiempo de acceso de menos de 100ns y todas las ROMs que se usaran en los cartuchos también, entonces no hubiera habido necesidad de un modo "Slow-ROM" a 2.68MHz y se hubiera podido usar el DMA a más frecuencia.
También cabe la posibilidad que lo que esté limitando la frecuencia máxima del DMA sea el propio controlador de DMA (que creo que va en el chip PPU-1), pero lo dudo.