Sonido AY en BASIC con OUTs

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

Moderador: Sir Cilve Sinclair

Responder
Avatar de Usuario
Forni
Herbert
Mensajes: 53
Registrado: Mar May 08, 2007 9:03 am
Ubicación: Madrid

Sonido AY en BASIC con OUTs

Mensaje por Forni » Jue Ene 17, 2008 9:00 am

Me he percatado de un problema que afecta a los modelos de 128k, en concreto al 128k, al +2 gris, y al Pentagon, que además afecta a mi juego QiZX.

En el juego introduje efectos de sonido utilizando el chip AY mediante OUTs, con el fin de tener algo de sonido sin tener que parar la ejecución del mismo como hace la sentencia BEEP.
Pues bien, he comprobado que en dichos modelos el sonido no se reproduce como debería si ejecutamos el juego en modo de 128k, es decir, cargándolo con la opcion "Tape Loader" del menú principal o desde "128 BASIC" con LOAD "". La solución pasa por cargarlos en modo 48k. Para ello hay que elegir "48 BASIC" en el menú, o bien escribir SPECTRUM o ejecutar RANDOMIZE USR 0 en "128 BASIC", y después hacer LOAD "" como de contumbre.

En el resto de modelos, menos en el de 16k en el que no puede cargar por falta de memoria, funciona sin problemas (en 48k podeis activar la opción de "AY-3-8912" en el SPIN o el SPECTACULATOR).

Supongo que tiene que ver con la paginación del intérprete de BASIC que debe de sobreescribir los puertos en determinadas situaciones, aunque no me he puesto a investigarlo a parte de estas pruebas básicas. Si alguien sabe a ciencia cierta porque pasa, o cual podría ser la solución al problema, le agardecería que me lo contase. Podría solucionarlo y escribir una v2.0 :)

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

Re: Sonido AY en BASIC con OUTs

Mensaje por na_th_an » Jue Ene 17, 2008 12:01 pm

Pon la rutina que usas, porque yo he hecho sonar la AY con OUT desde BASIC y no recuerdo haber tenido problemas de compatibilidad :)

Avatar de Usuario
Forni
Herbert
Mensajes: 53
Registrado: Mar May 08, 2007 9:03 am
Ubicación: Madrid

Re: Sonido AY en BASIC con OUTs

Mensaje por Forni » Jue Ene 17, 2008 12:12 pm

Pues por ejemplo, esta parte no suena:

Código: Seleccionar todo

2816 REM *************************************** Dibuja relleno
2817 PRINT "\{p6i6f1}";q$;h$: PAPER 5: INK 1: OUT 65533,7: OUT 49149,247: OUT 65533,12: OUT 49149,5: OUT 65533,6: OUT 49149,255: OUT 65533,13
2818 FOR f=1+CODE n$ TO CODE o$ STEP 2: LET s=0
2819 FOR g=CODE l$ TO CODE m$ STEP 2: IF ATTR (f,g)=182 THEN LET s=NOT s
2820 IF s THEN PRINT v$(.5*f,.5*g): OUT 49149,0: NEXT e: GO TO 3840
3072 NEXT g: NEXT f: PRINT "\{p5i1}";q$;"\{p6i6}";i$

Lo que hago es preparar el sonido cargando los registros pertinentes del AY con los OUTs del principio y después sólo activo el sonido con el OUT de la línea 2820. Así hago ruido con una única intrucción (el OUT) y sin parar el programa mucho.
Supongo que el modo 128k el interprete de BASIC se encargará de borrar los registros del AY después de la ejecución de cada línea, o algo parecido...

Este trozo de código es el que se encarga de dibujar el relleno cuando reclamas una nueva zona de pantalla, por si lo quieres probar con el juego en marcha.

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

Re: Sonido AY en BASIC con OUTs

Mensaje por na_th_an » Jue Ene 17, 2008 5:00 pm

Puede que se modifique algo entre una cosa y otra, puede ser tema de datos en el bus y cosas así, o que BASIC de esas versiones desactiva el AY o algo asi. No puedo ayudarte más, porque yo cuando lo he usado he escrito todos los registros de una tacada, y así nunca he tenido problemas. Pero claro, eso te pararía algo más la ejecución...

Responder

¿Quién está conectado?

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