› Foros › Retro y descatalogado › Consolas clásicas
Furrinchas escribió:La primera frase no podría ser mas desacertada.
danibus escribió:En fin, no es mi intención ensuciar el hilo, pero si el ejercicio práctico vale para sonido, porqué no para sprites, rutinas de IA, nuevas fases, etc
Coliflor escribió:¿Una 16 bits con música de calidad CD? Lo veo imposible.
Impresionante ese sonido, y uno que sale en relacionados con el pcm de la mega. Es increíble lo que nos falta por ver exprimiendo esas consolas.Señor Ventura escribió:https://www.youtube.com/watch?v=p_60V8UdYEY
Manveru Ainu escribió:Impresionante ese sonido, y uno que sale en relacionados con el pcm de la mega. Es increíble lo que nos falta por ver exprimido en esas consolas.Señor Ventura escribió:https://www.youtube.com/watch?v=p_60V8UdYEY
Conozco a más de uno que le gustaría más actividad en la SNES jejeje, a ver si te enganchas.Señor Ventura escribió:A mi me está matando la ingenieria, pero como me pegue un año sabático le voy a meter tal pedrada a la programación de snes, que si no hago algo para esta máquina de aquí a un lustro, me corto los huevines xD
edit:
https://www.youtube.com/watch?v=h9WzrJ5OyWA
Señor Ventura escribió:Coliflor escribió:¿Una 16 bits con música de calidad CD? Lo veo imposible.
https://www.youtube.com/watch?v=p_60V8UdYEY
magno escribió:Te voy a meter un capón de los gordos, @Señor Ventura... ¡La SNES no trasmite los samples de audio por DMA ni necesariamente durante el NMI!
Así que lamento decirte que tus cálculos no sirven
El audio de la SNEs es un subsistema propio, dotado de boot (para cargar el código inicial al micro), microprocesador (SPC700), coprocesador (es un DSP dediado a procesar samples) y 64KB de RAM propia.
Para acceder a ese subsistema desde el micro principal (el 65C816) se hace de esta manera:
SuperFamicom Wiki
Francamente, me encanta ver tu entusiasmo, @Señor Ventura y me gustaría que tuvieras un nivel suficiente para mantener charlas productivas (incluso podríamos colaborar para hacer cosas chulas en SNES), pero te montas unas enormes pajas mentales infundadas y llenas el foro de información confusa e inexacta, cosa que se podía evitar fácilmente consultando la Wikipedia (donde explica el subsistema de audio de la SNES) o SuperFamicom Wiki. Concretamente, esto del audio te lo comenté acuando hablamos del SFA2, que el parón inicial antes del combate se hace porque se ha de transferir el audio al subsistema
Por cierto, la SNES nunca puede sacar audio en calidad CD puesto que la "calidad CD" como tal implica siempre 44.1KHz de frecuencia de muestreo de audio.
Señor Ventura escribió:Estaba convencido de que los parones del SFA2 se debían al proceso de reiniciar el driver de sonido, y no a la transferencia de samples [...]
Señor Ventura escribió: [...] de hecho la razón de que tarde tanto es debida a que se hace por HDMA (si paras todo para llenar la ram del sonido, lo estarás haciendo a 5,72KB, y completarías la tarea en menos de 12 frames, no los 4 o 5 segundos que tarda el juego).
Señor Ventura escribió:el DMA está "imbuído" dentro de una de las ppu's del sistema de vídeo, y comunica únicamente la VRAM con la ROM, por lo que no es posible compartir ese canal con la RAM del sistema de sonido. Hablar de DMA cuando hablas del sonido es una cagada importante, claro...
Señor Ventura escribió:La cuestión es que el bus que comunica la RAM del sonido con la ROM, sigue siendo de 5,72KB por frame, ¿no?... la pega es que gráficos y sonido tienen que transferir datos turnandose, entonces.
magno escribió:Señor Ventura escribió:Estaba convencido de que los parones del SFA2 se debían al proceso de reiniciar el driver de sonido, y no a la transferencia de samples [...]
A ver, no lo he examinado en detalle, pero lo que se comenta en otros foros y la lógica dice que el parón es por enviar todo a la ARAM (Audio RAM) del SPC-700.Señor Ventura escribió: [...] de hecho la razón de que tarde tanto es debida a que se hace por HDMA (si paras todo para llenar la ram del sonido, lo estarás haciendo a 5,72KB, y completarías la tarea en menos de 12 frames, no los 4 o 5 segundos que tarda el juego).
No, no se hace por HDMA. El HDMA, como ya te he comentado en otra ocasión, es Horizontal Direct Memory Access, y se usa para acceder a la PPU durante el borrado horizontal en vez de el vertical. Esto permite cambiar ciertos registros de la PPU cada línea de pantalla de forma automatizada, ya que el HDMA lo programas antes de que empiece el frame siguiente y éste va saltando automáticamente en cada línea haciendo las transferencias deseadas.
Y no, para transferir los samples de audio has de hacer lo que puse en el link anterior... ¿Lo has mirado? Se hace escribiendo en unos registros, pero no por DMA, sino registro a registro.Señor Ventura escribió:el DMA está "imbuído" dentro de una de las ppu's del sistema de vídeo, y comunica únicamente la VRAM con la ROM, por lo que no es posible compartir ese canal con la RAM del sistema de sonido. Hablar de DMA cuando hablas del sonido es una cagada importante, claro...
Tampoco, macho, estás en racha El DMA es un modo de transferencia de datos entre el bus A y el bus B de la SNES. El bus A es el que todos conocemos como bus estándar: el que está conectado al bus de direcciones del micro principal 65C816 por el que se accede a RAM y ROM.
El bus B es un bus separado que está mapeado en las direcciones $21XX del mapa de memoria de la SNES. Este bus conecta el micro con los "periféricos" del sistema: PPU y sus modos gráficos, CG-RAM (paleta de colores), OAM (memoria de sprites), VRAM (memoria de video), multiplicadores, divisores, etc...
Las transferencias DMA solo se pueden hacer entre el bus-A y el bus-B o viceversa. Así, por ejemplo, EN PRINCIPIO (con lo que te acabo de explicar) no puedes hacer DMA entre la dirección de RAM $7E:8000 y la $7F:0000, por ejemplo, porque ambas direcciones están en el bus A; tampoco podrías hacerlas entre ROM $C0:0000 y $7F:8000, por ejemplo. Pero como esas dos transferencias podrían ser útiles a los programadores, los desarrolladores del hardware de Nintendo abrieron hábilmente un acceso en el bus-B para acceder a la RAM del sistema. Así, puedes hacer una transferencia DMA desde ROM $C0:0000 al registro $2180, previamente habiendo configurado $2181/82/83 con la dirección $7F:8000.Señor Ventura escribió:La cuestión es que el bus que comunica la RAM del sonido con la ROM, sigue siendo de 5,72KB por frame, ¿no?... la pega es que gráficos y sonido tienen que transferir datos turnandose, entonces.
¡¡Tampoco!! ¡Has hecho pleno! No hay bus específico que comunica la ROM (que está en el bus A) con la ARAM (que está en el bus B, registro $2140); a priori podrías decir: "hombre, pues hago un DMA desde ROM al registro $2140 y envío todos los samples"... Y eso técnicamente es posible, pero el resultado no sería válido, es decir, no habrías conseguido meter los samples en ARAM... ¿Por qué? Pues si miras el código ensamblador que te enlacé antes, verás que cada byte de samples que se envían a ARAM implica escribir el byte en el registro $2140 y esperar a que el SPC-700 lo lea, momento en el cual cambia el valor que el 65C816 lee del registro $2140 y es una forma de confirmar que el SPC-700 ha recibido ese byte.
Si quieres saber la velocidad de transferencia de muestras, tendrías que ejecutar ese código en el bsnes con el perfil ACCURACY y comprobar cuánto tarda en transferir 1Kbyte, por ejemplo. Ya te digo que el tiempo es mucho mayor del que imaginas.
Gammenon escribió:Tenía entendido que era muy lento pasar los datos al SPC-700 pero no sospechaba que fuese tan lento. Entonces lo de cambiar los samples mientras el juego esté en funcionamiento, como hacen los Sonics en los créditos finales como que no, no?
O´Neill escribió:Los tipicos parones que se aprecian en el axelay, casualmente cuando cambia de música, ¿es por esa razón?
danibus escribió:MITO... busted pues
magno escribió:danibus escribió:MITO... busted pues
¿A qué te refieres? El "mito" como tú lo llamas es una realidad: el sonido de la SNES es mucho mejor que el del resto de máquina de su nivel y potencia; Lo que pasa es que la comunicación con él es poco flexible para toda la flexibilidad de programación que tiene la APU (por todos los microcódigos que puedes descargar y las diferentes configuraciones del DSP), pero eso no quita que se hayan hecho grandes obras musicales para la SNES.
magno escribió:Señor Ventura escribió:Estaba convencido de que los parones del SFA2 se debían al proceso de reiniciar el driver de sonido, y no a la transferencia de samples [...]
A ver, no lo he examinado en detalle, pero lo que se comenta en otros foros y la lógica dice que el parón es por enviar todo a la ARAM (Audio RAM) del SPC-700.
magno escribió:No, no se hace por HDMA. El HDMA, como ya te he comentado en otra ocasión, es Horizontal Direct Memory Access, y se usa para acceder a la PPU durante el borrado horizontal en vez de el vertical. Esto permite cambiar ciertos registros de la PPU cada línea de pantalla de forma automatizada, ya que el HDMA lo programas antes de que empiece el frame siguiente y éste va saltando automáticamente en cada línea haciendo las transferencias deseadas.
magno escribió:Y no, para transferir los samples de audio has de hacer lo que puse en el link anterior... ¿Lo has mirado? Se hace escribiendo en unos registros, pero no por DMA, sino registro a registro.
magno escribió:Tampoco, macho, estás en racha El DMA es un modo de transferencia de datos entre el bus A y el bus B de la SNES. El bus A es el que todos conocemos como bus estándar: el que está conectado al bus de direcciones del micro principal 65C816 por el que se accede a RAM y ROM.
El bus B es un bus separado que está mapeado en las direcciones $21XX del mapa de memoria de la SNES. Este bus conecta el micro con los "periféricos" del sistema: PPU y sus modos gráficos, CG-RAM (paleta de colores), OAM (memoria de sprites), VRAM (memoria de video), multiplicadores, divisores, etc...
Las transferencias DMA solo se pueden hacer entre el bus-A y el bus-B o viceversa. Así, por ejemplo, EN PRINCIPIO (con lo que te acabo de explicar) no puedes hacer DMA entre la dirección de RAM $7E:8000 y la $7F:0000, por ejemplo, porque ambas direcciones están en el bus A; tampoco podrías hacerlas entre ROM $C0:0000 y $7F:8000, por ejemplo. Pero como esas dos transferencias podrían ser útiles a los programadores, los desarrolladores del hardware de Nintendo abrieron hábilmente un acceso en el bus-B para acceder a la RAM del sistema. Así, puedes hacer una transferencia DMA desde ROM $C0:0000 al registro $2180, previamente habiendo configurado $2181/82/83 con la dirección $7F:8000.
magno escribió:¡¡Tampoco!! ¡Has hecho pleno! No hay bus específico que comunica la ROM (que está en el bus A) con la ARAM (que está en el bus B, registro $2140); a priori podrías decir: "hombre, pues hago un DMA desde ROM al registro $2140 y envío todos los samples"... Y eso técnicamente es posible, pero el resultado no sería válido, es decir, no habrías conseguido meter los samples en ARAM... ¿Por qué? Pues si miras el código ensamblador que te enlacé antes, verás que cada byte de samples que se envían a ARAM implica escribir el byte en el registro $2140 y esperar a que el SPC-700 lo lea, momento en el cual cambia el valor que el 65C816 lee del registro $2140 y es una forma de confirmar que el SPC-700 ha recibido ese byte.
magno escribió:Si quieres saber la velocidad de transferencia de muestras, tendrías que ejecutar ese código en el bsnes con el perfil ACCURACY y comprobar cuánto tarda en transferir 1Kbyte, por ejemplo. Ya te digo que el tiempo es mucho mayor del que imaginas.
chinitosoccer escribió:El scp700 no era un chip del todo adecuado para una consola como SNES basada en cartuchos, donde habia que estar comprimiendo todo para abaratar costo de la ROM, la que si le sacó jugo fue la PS1 que lleva el mismo chip o una evolución de este y ahi si que le dieron pa tenga y guarde, tambien hubiera estado bueno que Sony hubiese lanzaddo una version en tarjeta ISA para PCs, pero viendo la oferta de la competencia ni siquiera se lo plantearon, Roland Sound Canvas, Yamaha SW600, Creative waveblaster etc.
danibus escribió:Es decir, estuve leyendo a nosekuawa (léase japo cuyo nombre no recuerdo), que participó en el diseño del megacd, que el objetivo inicial del megacd era superar el límite de capacidad que te imponía el cartucho (poca capacidad y muy caro), para ello primero cargarían el juego y luego, según iba necesitando el desarrollador, ir borrando y cargando partes nuevas del cd.
Pero claro, el megacd era caro, y además con una velocidad de lectura de mierda, y luego les dio a todos por usarlo para vídeos de mierda en vez de usarlo para su objetivo inicial.
Señor Ventura escribió:Es que se me hace rarísimo tener que estar escribiendo samples en ram que ya están ahí a cada round, ese problema no sucede por ejemplo en el street fighter 2 world warrior/turbo, y viendo como suenan los 3, dudo que el alpha 2 requiera mas memoria.
Señor Ventura escribió:Tiene que haber alguna salida, porque claramente el streaming de audio (en el vídeo dice que son 4MB en un minuto, pero en realidad son 8), está transifiriendo a una tasa de datos 16 veces superior a la que en teoría estoy viendo que en realidad parece que hace (en condiciones normales).
Señor Ventura escribió:Eso que comentas es lo que sucede por ejemplo en el super mario world, en el que se transfieren tiles comprimidas a la memoria RAM, y se envían descomprimidas a la VRAM a través de la dirección $7E:8000 y $7F:0000 que comentas, ¿no?.
Señor Ventura escribió:Pero lo de configurar el registro $2181/82/83 como registro $2180 se me escapa, ¿con que instrucción puedes hacer eso?.
Señor Ventura escribió:Estoy leyendo que puedes usar el HDMA para que el 65c816 lea ese registro... pero esto sigue siendo lento, aunque evitas tener a la cpu constantemente ocupada, ¿no?. Vamos, no usas el HDMA para transferir, sino para "checkear", así que estaba equivocado, claro.
Todavía me encuentro algo confuso con esto, es como si hubiera que paralizar todo para mandar samples mas rápido... coño, y acabo de caer en la cuenta de que eso es lo que sucede xDDD. ¿Entonces lo he entendido bien?.
Señor Ventura escribió:Pero, ¿como se explica que se puedan enviar samples todavía mas rápido?:
https://youtu.be/p_60V8UdYEY?t=13
Señor Ventura escribió:Con esto ya me tiras por la ventana.
8 frames... es que no puede ser
chinitosoccer escribió:A mi me hubiese gustado un MegaCD con mas Ram, o por lo menos expandible por medio de algún cartucho, pero hace tiempo estuve leyendo y al parecer no hay forma de establecer esa "comunicacion" entre el slot de cartuchos como expansion de RAM y el MegaCD, alguna limitacion del hardware que no permite al VDP acceder a la ROM como lo hace PC Engine, NES o Neogeo, sin antes pasar por la RAM de video......o algo asi
Gammenon escribió:que la CPU de la misma lea los datos y los suba al cartucho de RAM
chinitosoccer escribió:Gammenon escribió:que la CPU de la misma lea los datos y los suba al cartucho de RAM
"Que la CPU lea los datos y los suba al cartucho de RAM" ni pajolera idea de como funciona el MegaCD no?
En modo MegaCD es el 68000 de MegaCD es el que toma control de todo el sistema, el 68000 de Megadrive no hace practicamente nada.
Gammenon escribió:chinitosoccer escribió:Gammenon escribió:que la CPU de la misma lea los datos y los suba al cartucho de RAM
"Que la CPU lea los datos y los suba al cartucho de RAM" ni pajolera idea de como funciona el MegaCD no?
En modo MegaCD es el 68000 de MegaCD es el que toma control de todo el sistema, el 68000 de Megadrive no hace practicamente nada.
El final fight de mega cd no lo mueve la MD "pelada"? La cpu de mega cd no tiene acceso a la parte de MD (ram, cartucho, vdp, etc)?
chinitosoccer escribió:Gammenon escribió:chinitosoccer escribió:
"Que la CPU lea los datos y los suba al cartucho de RAM" ni pajolera idea de como funciona el MegaCD no?
En modo MegaCD es el 68000 de MegaCD es el que toma control de todo el sistema, el 68000 de Megadrive no hace practicamente nada.
El final fight de mega cd no lo mueve la MD "pelada"? La cpu de mega cd no tiene acceso a la parte de MD (ram, cartucho, vdp, etc)?
Segun tengo entendido corre enteramente sobre el Asic + 68000 de SegaCD.
magno escribió:danibus escribió:MITO... busted pues
¿A qué te refieres? El "mito" como tú lo llamas es una realidad: el sonido de la SNES es mucho mejor que el del resto de máquina de su nivel y potencia; Lo que pasa es que la comunicación con él es poco flexible para toda la flexibilidad de programación que tiene la APU (por todos los microcódigos que puedes descargar y las diferentes configuraciones del DSP), pero eso no quita que se hayan hecho grandes obras musicales para la SNES.
Esta frase se está poniendo de modatheelf escribió:No das ni una
theelf escribió:@danibus
Caro no, costoso que no es lo mismo. Caro es que el precio es elevado sin justificacion, costoso es cuando el precio es elevado, pero justificado
theelf escribió:Trabajaba y lo pude hacer, asi q no creo inasumible..... inasumible era si tenias 10 anios y tus padres no te la compraban
theelf escribió:@MasterDan
Bueno... yo vivia en argentina en ese momento, con la problematica de tener una moneda siempre devaluada, y aun asi me compre la MegaCD y un Mitsumi 1x para mi PC
Trabajaba y lo pude hacer, asi q no creo inasumible..... inasumible era si tenias 10 anios y tus padres no te la compraban
chinitosoccer escribió:ademas si tenias una edad por debajo de esa franja tampoco te encontrabas en condiciones de disfrutar debidamente del mundillo.
magno escribió:No son el mismo juego realmente... Si no recuerdo mal, en la presentación de personajes antes de un combate del SFII la música no cambia, es la principal, pero con unos acordes que terminan en fade-out. En el SFA2 creo recordar que la música sí es diferente, por lo que en algún momento hay que cargar las voces de presentación y la música del escenario.
Lo digo de memoria, igual sí se hubiera podido hacer mejor, no sé.
magno escribió:Señor Ventura escribió:Tiene que haber alguna salida, porque claramente el streaming de audio (en el vídeo dice que son 4MB en un minuto, pero en realidad son 8), está transifiriendo a una tasa de datos 16 veces superior a la que en teoría estoy viendo que en realidad parece que hace (en condiciones normales).
¿Y cómo sabes eso? ¿Cómo has calculado esas tasas?
magno escribió:El bucle de trasnferencia que te linké dura 26 ciclos por cada byte transferido a $2140 y faltaría saber cuándo el SPC-700 ha leído dicho dato. Si te haces un driver bueno, podrías escribir desde la CPU $2140, luego $2141, luego $2142 y por último $2143 de forma consecutiva y que el programa que corre en el SPC-700 los vaya enviando a su ARAM de forma secuencial. Así reduces la espera a 1 vez cada 4 bytes que escribes.
Luego, esta transferencia se hace en cualquier instante, no hace falta esperar a NMIs ni nada, así que:
1 frame = 262 scanlines activas * 1362 master clocks por línea = 357368 master clocks
La CPU ejecuta cada instrucción en 6 master clocks * 26 ciclos que dura el bucle = 156 master clocks por cada byte enviado al SPC-700
Por tanto, ejecutas 2290 veces el bucle de audio en un frame si el tiempo de respuesta del SPC-700 es de 1 ciclo; si fuera de 4 (es el máximo porque funciona a 1MHz y el de SNES a 3.58MHz), tendrías lo ejecutarías 572 veces (572 bytes transferidos) en un frame EN EL PEOR CASO.
Pensando que solo transfieres samples con BBR (que comprime en un ratio 32:9), habrías enviado 1018 muestras de audio de 16 bits en un solo frame. En 1 segundo (60 frames) enviarías unos 61000 muestras de 16 bits EN EL PEOR CASO, 244000 EN EL MEJOR CASO.
¿En serio te parece poco 60Kmuestras por segundo para un sistema de audio que trabaja a 32kHz? Es prácticamente el doble de la tasa de muestreo en el peor de los casos. Y como normalmente las muestras de toda la música la envías del tirón antes de empezar una fase o una escena, podrías enviar una canción de 10 segundos de duración en 2~4 segundos sin problemas. Y todo esto, sabiendo que como mucho tienes 64KBytes para almacenar muestras en la RAM de la APU, pues fijate que todo el sistema está más o menos bien escalado: llenarías la ARAM en un cuarto de segundo (250 mseg) enviando muestras en el peor de los casos.
Un driver bien programado podría tener una rutina que agilizara al máximo la recepción de samples en el SPC-700 y a la que se llamara desde el micro principal cuando se necesitara enviar samples.
magno escribió:Ya te he contado otras veces que el HDMA es independiente, va pos su cuenta, así que si leyeras ese registro con el HDMA... ¿luego qué? ¿Qué haces con el dato leído?
La idea de leer el registro $2140 es saber si el SPC-700 ha leído el byte enviado en ese registro y pasar a enviar el siguiente. Si lo haces con HDMA, primero has de esperar a que acabe la línea actual para que salte el HDMA (con el consguiente gasto inútil de tiempo) y una vez leyeras el dato y lo enviaras a RAM, ¿cómo haces para que el micro sepa si es el mismo byte que envió al principio de línea? ¿Lo mantienes parado hasta entonces? Si haces eso, entonces el HDMA no sirve de nada, porque la idea de un DMA es que el micro pueda seguir haciendo otras cosas mientras se transfiere.
magno escribió:Señor Ventura escribió:Pero, ¿como se explica que se puedan enviar samples todavía mas rápido?:
https://youtu.be/p_60V8UdYEY?t=13
Ya vi este video y sigo sin entender como antes a qué te refieres con "más rápido".... ¿Más rápido que qué? ¿Que el programa ése que se está ejecutando en el video? ¿Tienes el código fuente del programa?
magno escribió:Señor Ventura escribió:Con esto ya me tiras por la ventana.
8 frames... es que no puede ser
Y tanto que te voy a tirar por la ventana ¿De dónde te sacas los 8 frames?
danibus escribió:No me he explicado bien, me refiero a la premisa del creador del hilo de que era posible, al final no lo es y de ahí el "busted", imitando a la serie de Cazadores de Mitos. No entro a valorar la música de la snes.
Señor Ventura escribió:magno escribió:No son el mismo juego realmente... Si no recuerdo mal, en la presentación de personajes antes de un combate del SFII la música no cambia, es la principal, pero con unos acordes que terminan en fade-out. En el SFA2 creo recordar que la música sí es diferente, por lo que en algún momento hay que cargar las voces de presentación y la música del escenario.
Lo digo de memoria, igual sí se hubiera podido hacer mejor, no sé.
La cuestión es que en todos los street fighters de snes la música se corta entre round y round, pero en los primeros no requiere pararse alrededor de 3 o 4 segundos.
Según lo que has explicado mas abajo, pinta entonces a un driver de sonido poco optimizado, y por añadidura, a tener que volver a transferir los samples cuando ya estaban en la ram del spc700.magno escribió:Señor Ventura escribió:Tiene que haber alguna salida, porque claramente el streaming de audio (en el vídeo dice que son 4MB en un minuto, pero en realidad son 8), está transifiriendo a una tasa de datos 16 veces superior a la que en teoría estoy viendo que en realidad parece que hace (en condiciones normales).
¿Y cómo sabes eso? ¿Cómo has calculado esas tasas?
En realidad son 7680KB.
32Khz a 16 bits durante 1 minuto, sale eso, casi 8MB, no los 4 que dice el comentario del vídeo.magno escribió:El bucle de trasnferencia que te linké dura 26 ciclos por cada byte transferido a $2140 y faltaría saber cuándo el SPC-700 ha leído dicho dato. Si te haces un driver bueno, podrías escribir desde la CPU $2140, luego $2141, luego $2142 y por último $2143 de forma consecutiva y que el programa que corre en el SPC-700 los vaya enviando a su ARAM de forma secuencial. Así reduces la espera a 1 vez cada 4 bytes que escribes.
Luego, esta transferencia se hace en cualquier instante, no hace falta esperar a NMIs ni nada, así que:
1 frame = 262 scanlines activas * 1362 master clocks por línea = 357368 master clocks
La CPU ejecuta cada instrucción en 6 master clocks * 26 ciclos que dura el bucle = 156 master clocks por cada byte enviado al SPC-700
Por tanto, ejecutas 2290 veces el bucle de audio en un frame si el tiempo de respuesta del SPC-700 es de 1 ciclo; si fuera de 4 (es el máximo porque funciona a 1MHz y el de SNES a 3.58MHz), tendrías lo ejecutarías 572 veces (572 bytes transferidos) en un frame EN EL PEOR CASO.
Pensando que solo transfieres samples con BBR (que comprime en un ratio 32:9), habrías enviado 1018 muestras de audio de 16 bits en un solo frame. En 1 segundo (60 frames) enviarías unos 61000 muestras de 16 bits EN EL PEOR CASO, 244000 EN EL MEJOR CASO.
¿En serio te parece poco 60Kmuestras por segundo para un sistema de audio que trabaja a 32kHz? Es prácticamente el doble de la tasa de muestreo en el peor de los casos. Y como normalmente las muestras de toda la música la envías del tirón antes de empezar una fase o una escena, podrías enviar una canción de 10 segundos de duración en 2~4 segundos sin problemas. Y todo esto, sabiendo que como mucho tienes 64KBytes para almacenar muestras en la RAM de la APU, pues fijate que todo el sistema está más o menos bien escalado: llenarías la ARAM en un cuarto de segundo (250 mseg) enviando muestras en el peor de los casos.
Un driver bien programado podría tener una rutina que agilizara al máximo la recepción de samples en el SPC-700 y a la que se llamara desde el micro principal cuando se necesitara enviar samples.
Joder, que grande eres... ya hasta parce sencillo cuando lo explicas tu
Entonces la transferencia es *virtualmente* simultánea al DMA, me parece una pasadamagno escribió:Ya te he contado otras veces que el HDMA es independiente, va pos su cuenta, así que si leyeras ese registro con el HDMA... ¿luego qué? ¿Qué haces con el dato leído?
La idea de leer el registro $2140 es saber si el SPC-700 ha leído el byte enviado en ese registro y pasar a enviar el siguiente. Si lo haces con HDMA, primero has de esperar a que acabe la línea actual para que salte el HDMA (con el consguiente gasto inútil de tiempo) y una vez leyeras el dato y lo enviaras a RAM, ¿cómo haces para que el micro sepa si es el mismo byte que envió al principio de línea? ¿Lo mantienes parado hasta entonces? Si haces eso, entonces el HDMA no sirve de nada, porque la idea de un DMA es que el micro pueda seguir haciendo otras cosas mientras se transfiere.
Ostras, pues es verdad...
Lo que interpreté de ese texto es que la idea es aprovechar el margen de tiempo entre scanline y scanline para que la cpu lea esos registros, pero no lo había visto como un gasto inutil de tiempo por esperar hasta ese momento, sino como un momento del frame en el que puedes permitirte que la cpu se centre en eso.
Sin embargo, si no lo entiendo mal no puedes hacer que la cpu lo lea en el momento, sino que debes acceder a la ram posteriormente para leerlo, por lo que te da igual una cosa que la otra... o mejor dicho, no, porque pierdes canales HDMA que puedes necesitar para otras tareas.magno escribió:Señor Ventura escribió:Pero, ¿como se explica que se puedan enviar samples todavía mas rápido?:
https://youtu.be/p_60V8UdYEY?t=13
Ya vi este video y sigo sin entender como antes a qué te refieres con "más rápido".... ¿Más rápido que qué? ¿Que el programa ése que se está ejecutando en el video? ¿Tienes el código fuente del programa?
Perdón, no decía mas rápido, sino samples a mayor tasa, pero ya me ha quedado claro ^^u
(gracias!!)magno escribió:Señor Ventura escribió:Con esto ya me tiras por la ventana.
8 frames... es que no puede ser
Y tanto que te voy a tirar por la ventana ¿De dónde te sacas los 8 frames?
Que no, que no te lo digodanibus escribió:No me he explicado bien, me refiero a la premisa del creador del hilo de que era posible, al final no lo es y de ahí el "busted", imitando a la serie de Cazadores de Mitos. No entro a valorar la música de la snes.
Lo que ha dicho es que no se hace por DMA, pero si es posible. De hecho... ¿no has visto el vídeo?.
chinitosoccer escribió:Driver de sonido en SNES????......pero de que mierda........ ???
chinitosoccer escribió:Driver de sonido en SNES????......pero de que mierda........ ???
Señor Ventura escribió:chinitosoccer escribió:Estamos hablando de un ancho de banda total de 8KB por frame
(En realidad entre 7,95 y 7,96KB... 0,74KB por frame mas que megadrive... dios, tenía que decirlo xDD).