Música 128K desde código máquina.

Todo sobre la creación, diseño y programación de nuevo software para
nuestro Spectrum

Moderador: Sir Cilve Sinclair

Responder
Avatar de Usuario
Rafa
Jack The Nipper
Mensajes: 181
Registrado: Lun May 07, 2007 11:59 am

Música 128K desde código máquina.

Mensaje por Rafa » Mar Dic 04, 2007 8:59 pm

Hola. ¿Sabéis de alguna página o foro en el que se relate como acceder al chip de sonido desde código máquina?
Creo que era a través de dos puertos, pero no sé cuáles son.
¿Se podría hacer sonar música o sonido al mismo tiempo que el programa/juego está funcionando?(sin interrupciones).
Gracias.
RANDOMIZE USR 0

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Música 128K desde código máquina.

Mensaje por mcleod_ideafix » Mié Dic 05, 2007 2:32 am

Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
Rafa
Jack The Nipper
Mensajes: 181
Registrado: Lun May 07, 2007 11:59 am

Re: Música 128K desde código máquina.

Mensaje por Rafa » Mié Dic 05, 2007 4:43 pm

OK. Gracias por contestar.
La segunda pregunta versaba sobre cómo hacer sonar esta música sin interrumpir al procesador ni usar interrupciones.(en código máquina)
RANDOMIZE USR 0

Avatar de Usuario
na_th_an
Nonamed
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía

Re: Música 128K desde código máquina.

Mensaje por na_th_an » Mié Dic 05, 2007 5:41 pm

Necesitas interrupciones. Es lo único que te garantiza que se llamará a un player a intervalos regulares, algo indispensable para tocar música.

Avatar de Usuario
Rafa
Jack The Nipper
Mensajes: 181
Registrado: Lun May 07, 2007 11:59 am

Re: Música 128K desde código máquina.

Mensaje por Rafa » Mié Dic 05, 2007 7:11 pm

OK. O sea que no hay solución.
También sería posible ya que el sonido no para la ejecución de un programa, aunque muy complicado de implementar, casi imposible, cada x T-estados en la ejecución del programa. Pero claro, habría que ir sumando T-estados en cada sentencia (lo que tarda cada sentencia en ejecutarse). Cada vez que lo pienso lo veo más descabellado.
Sería como programar, por ejemplo un menú. Y cada x bytes (dependiendo del tiempo que tarde en ejecutarse) meter los OUT's correspondientes.

UN POCO CUTRE, PERO PODRÍA HACERSE. ¿QUÉ OPINÁIS?
RANDOMIZE USR 0

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Música 128K desde código máquina.

Mensaje por mcleod_ideafix » Mié Dic 05, 2007 7:52 pm

Como poder, podría hacerse, pero tendrías que estar contando los T-estados de cada instruccion para como tú mismo dices, ir metiendo los OUT's a intervalos regulares. Llevar eso a la práctica es otro cantar: o te tomas el gran trabajón (poco útil teniendo las interrupciones para hacer esto mismo más cómodamente), o te haces primero una utilidad que analice el código fuente e inserte los OUT's en los lugares apropiados, y la usas como "preprocesador" metiéndole el código fuente "silencioso" y la ristra de OUT's, y obteniendo a la salida un código fuente con OUT's insertados de forma regular. De otra forma, cada vez que cambiaras algo en el código fuente, tendrías que volver a recolocar los OUT's a mano.
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
Rafa
Jack The Nipper
Mensajes: 181
Registrado: Lun May 07, 2007 11:59 am

Re: Música 128K desde código máquina.

Mensaje por Rafa » Mié Dic 05, 2007 8:02 pm

De acuerdo contigo en todo. Pero la gran ventaja sería que se pueden utilizar las interrupciones para cualquier otra cosa.
RANDOMIZE USR 0

Avatar de Usuario
Metalbrain
Freddy Hardest
Mensajes: 592
Registrado: Lun May 07, 2007 8:17 am
Ubicación: Sevilla
Contactar:

Re: Música 128K desde código máquina.

Mensaje por Metalbrain » Mié Dic 05, 2007 8:22 pm

¿Y por que no puedes hacer dos cosas con las interrupciones? Primero actualizas la música, y luego haces lo que quieras hacer... la música suele cambiar poco en 0,02 segundos, a menos que estés haciendo una locura como el DIGISID. Además tienes que tener en cuenta que muchas veces el tiempo de ejecución de un código no es fijo: depende de los datos, variables...

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Música 128K desde código máquina.

Mensaje por mcleod_ideafix » Jue Dic 06, 2007 12:33 am

O primero haces lo que tengas que hacer (sobre todo si está relacionado con actualizar la pantalla), y después empleas un par de docenitas de T-estados en actualizar los registros del AY.
Y si quieres más velocidad y no te basta con actualizarlos 50 veces por segundo, siempre puedes sincronizarte con el barrido horizontal de la pantalla usando el famoso IN 255...
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
na_th_an
Nonamed
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía

Re: Música 128K desde código máquina.

Mensaje por na_th_an » Vie Dic 07, 2007 9:06 am

mcleod_ideafix escribió:Y si quieres más velocidad y no te basta con actualizarlos 50 veces por segundo, siempre puedes sincronizarte con el barrido horizontal de la pantalla usando el famoso IN 255...


¿El que no funciona en +2A y +3? ;)

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Música 128K desde código máquina.

Mensaje por mcleod_ideafix » Vie Dic 07, 2007 9:20 pm

... a menos que sueldes la famosa resistencia entre los bit 7 de cada banco... ;)
Pero sí, vaya, que si se va a usar el AY es porque el hard es un +2/+3 y ahí no puedes contar conque exista ese hack... Nada, nada, a usar la interrupción de los 50 Hz :P
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
TrueVideo
Jack The Nipper
Mensajes: 195
Registrado: Mié May 23, 2007 8:34 am
Ubicación: BCN
Contactar:

Re: Música 128K desde código máquina.

Mensaje por TrueVideo » Vie Dic 07, 2007 10:08 pm

Tal como te han dicho la solución pasa por usar interrupciones. Podrás seguir utilizando las interrupciones para lo que quieras porque por suerte la actualización de los registros necesarios es una cuestión trivial. En el caso de los efectos incluso puedes permitirte el lujo de incluir un pequeño procesador parametrizable para hacer perrerías varias en tiempo real (LFO's, tremolos, vibratos locos...) con una inversión mínima de t-estados.

Respecto a la sincronización da igual que lo hagas antes o después de los accesos a pantalla, porque siendo para 128 supongo que utilizarás la pantalla virtual, no? :)

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 46 invitados