Señor Ventura escribió:Mas que no haberse probado en hardware, lo que he detectado es que muchos juegos hacen pirulas con el scroll si desactivas la emulación del hdma, así que habría que tener cuidado ahí.
Me refería a probarlo en una demo para sacar todo el potencial a esta técnica sin tener en cuenta otros canales.
Si se usara en algún juego, no tendrías que desactivar ningún canal HDMA, simplemente tener cuidado de que en cada línea el HDMA se ejecute dentro del HBlank y no lo estés sobrecargando tanto que se salga de él.
Señor Ventura escribió:¿Como va el uso del hdma a través de varios canales?, ¿se puede hacer de forma simultánea? (enviar samples de sonido por un lado, mientras que por otro actualizas la posición de un plano).
No, de forma simultánea no, ya que tanto el DMA como el HDMA mantienen a la CPU principal parada mientras se ejecuta para evitar colisiones de bus y por tanto, la necesidad de un controlador de memoria.
Puedes programar varios canales HDMA antes de que empiece un frame, y luego, al empezar cada scanline se ejecutan los canales HDMA habilitados para esa línea. Por ejemplo, podrías estar escribiendo a los registros de la CGRAM con el HDMA[0] en las líneas 180-224 para darle color a una caja de diálogo en un juego de RPG, escribiendo en todas las líneas en los registros de scroll con el HDMA[1] y usar el HDMA[2] para enviar samples de audio en las líneas que sean necesarias para cumplir el ancho de banda que necesites, por ejemplo en las líneas 112 a 179.
Así, cuando arranca un nuevo frame y empieza el scanline 0, se ejecutaría sólo el HDMA[1], en la línea 1 lo mismo y así hasta la línea 112, en la que se ejecutaría primero el HDMA[1] y luego el HDMA[2] para enviar el audio. Aquí es donde tendrías que tener cuidado de no exceder el HBlank, ya que estarías escribiendo 16 bits de color en CGRAM con el HDMA[1] y entre 1 y 4 bytes de audio con el HDMA[2].