Restaurando los registros del AY

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

Moderador: Sir Cilve Sinclair

Restaurando los registros del AY

Notapor zup el Jue Mar 29, 2018 12:56 pm

Bueno, siguiendo con la historia de convertir snapshots a tap estilo transfer... tengo tres ideas para los 128k, a ver qué véis factible:

Alternativa 1: pasar del AY (los sna de 128k lo hacen).
1.- Cargador BASIC que carga (o lleva incrustado c/m).
2.- Se carga el SCREEN$ (con las rayas que delatan que es un transfer).
3.- Se carga la memoria a partir de 25000 (lo que carga parte de la página 5, y las páginas 2 y 0 completas).
4.- Se cargan las páginas 1, 3, 4, 6 y 7.
5.- Se pone la página que corresponde en su sitio.(*)
6.- Se carga el cacho de memoria que falta (de 23296 a 24999)(**).
7.- Se ejecuta el código que restaura los registros de la CPU (=las rayas del transfer)(**).

Alternativa 2: Cargar los registros AY fuera de la vista.
Lo mismo que en el anterior, pero entre los registros AY irían en el c/m del paso 1 y se restaurarían entre el paso 4 y 5.

Alternativa 3: Cargar los registros AY a la vista.
Los mismo en el anterior, pero los registros irían en la memoria de pantalla junto con el código que restaura los registros de la CPU. En el paso 7, primero se restaurarían los registros del AY y luego los de la CPU. Esto lleva acarreado que habría más corrupción en la pantalla.

En las alternativas 2 y 3, los registros del AY quedarían "desincronizados". Mientras cargamos el último bloque y restauramos la CPU, pasa un tiempo en el cual las notas dejarían de sonar (si hay alguna sonando) pero eso creo que es inevitable. Lo bueno es que cuando el Spectrum vuelva a tocar notas, todos los instrumentos estarían ya cargados. En la alternativa 2 quedan menos sincronizados porque pasa más tiempo, pero nos evitamos estropear más la pantalla (curiosidad... ¿puede hacerse que una nota suene "eternamente" en un AY?).

Resumiendo... ¿qué planteamiento os parece mejor? ¿se os ocurre alguna forma alternativa de hacerlo? Gracias.

(*)Esto fallará si la ROM paginada no es la de 48k, ya que el paso siguiente requiere la rutina de carga. No es lo habitual, pero creo que hay juegos de Ópera que se ejecutan en el modo all-ram de los +2A/+3 precisamente para evitar que los transfers los copien.

(**)En un transtape ambos pasos serían simultáneos. La rutina ubicada en 16384 lo primero que hace es cargar el bloque de 49052 bytes a partir de 16484... con modificarla para que cargue nuestro bloque bastaría.
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start...
zup
Freddy Hardest
 
Mensajes: 624
Registrado: Vie Ago 15, 2008 2:43 pm

Re: Restaurando los registros del AY

Notapor zup el Lun Abr 02, 2018 9:31 am

Actualización sobre este tema...

La cinta de Cybernoid II tiene dos versiones, una para 48k y otra para 128k. La única diferencia entre las dos es que la de 128k usa el AY para el sonido pero en ningún momento comprueba que se esté ejecutando en una máquina 128k. Esto es inofensivo y no tiene mayor efecto en el 48k... salvo que te quedas sin sonido.

El caso es que he cargado esta versión en un 48k, he hecho un snapshot, lo he convertido y lo he cargado en una máquina de 128k. Al ser un snapshot de 48k, los registros del AY no están preservados. Al ponerlo en marcha en el 128k no ha habido más problemas y la música se ha escuchado correctamente.

Supongo que (en este caso) ignorar los registros AY no es mayor problema (el AY se reprograma continuamente). Probablemente los 7 primeros registros no tengan tanta importancia como el resto, ya que son las notas o el ruido que se escucha y se refrescan continuamente.

Las preguntas siguen en pie, todavía estoy indeciso de cómo restaurar los registros.
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start...
zup
Freddy Hardest
 
Mensajes: 624
Registrado: Vie Ago 15, 2008 2:43 pm

Re: Restaurando los registros del AY

Notapor zx81 el Lun Abr 02, 2018 2:34 pm

Para cualquier juego con música AY los registros más importantes son reescritos muy a menudo, así que quizá puedas encontrar problemas si no restauras bien el registro 7 (el mixer) y el del generador de envolventes.

Hay otros dos, el Port-A y el POrt-B que, aunque raramente utilizados, sí deberían restaurarse bien. Si no lo haces, te volverás loco con el Tai-Pan de 128k. Avisado estás... :D
Debido al fallo de un mecanismo, el lanzagranadas M203 se te podía disparar cuando menos lo esperaras, lo que te habría hecho bastante impopular entre lo que quedara de tu unidad.
Revista del ejército EE.UU. PS, agosto 1993.

Emulador JSpeccy
ZXBaremulator
zx81
Freddy Hardest
 
Mensajes: 571
Registrado: Vie Dic 28, 2007 3:14 pm
Ubicación: Valencia

Re: Restaurando los registros del AY

Notapor mcleod_ideafix el Vie Abr 13, 2018 6:30 pm

Hay una cosa que no entiendo de todo esto.... si estás haciendo una utilidad que transforma un snapshot a un TAP, y el snapshot de por sí no salva los valores del AY, ¿cómo los vas a restaurar si no tienes la información de qué valores tenía al crearse el snapshot?

Si el snapshot no es SNA ni Z80, sino SZX, entonces creo que sí hay dentro de él la información de los valores actuales del AY.

Si el snapshot lo estás creando tú en un Spectrum real porque estás modificando la ROM de un Transtape o algo parecido, entonces sí, puedes leer el estado del AY.

Yo voto por la opción 3. Las notas que dejan de sonar durante la creación del snapshot son sólo aquellas que están usando una envolvente que termina con volumen nulo. Las que no, se quedan "cogidas" (como el ejemplo siguiente).

Sobre si es posible dejar una nota sonando ininterrumpidamente en el AY, sí, es posible.
Código: Seleccionar todo
10 OUT 65533,0: OUT 49149,200
20 OUT 65533,7: OUT 49149,254
30 OUT 65533,8: OUT 49149,15
Web: ZX Projects | Twitter: @zxprojects
Avatar de Usuario
mcleod_ideafix
Johnny Jones
 
Mensajes: 3980
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera

Re: Restaurando los registros del AY

Notapor zup el Vie Abr 13, 2018 7:54 pm

Bueno, la historia es un homenaje a los transfers de la época y es algo experimental (lo cuento en otro hilo). Aclarando un poco las cosas...

- Por ahora los experimentos los estoy haciendo con una utilidad que hace convierte .sna a .tap de transtape.
- Tienes razón, .sna no guarda los registros del AY. Sin embarlo, la idea era expandirlo a soportar .z80 (que sí los guarda) y .sp (que ni siquiera soporta 128k, pero es otro homenaje).
- Ninguno de los transfers que pienso imitar (=corrupción de pantalla) soportaba 128k. Es un montaje de mi cargador y la rutina de arranque estándar del transfer correspondiente.

De hecho, creo que los únicos transfers que recuerdo de la época que soportaban 128k eran los Multiface 3 (no estoy seguro de que el 1 lo hiciera) y una de las versiones del Pokeador Automático. Del primero tengo alguna muestra (pero no acierto a tocar la tecla para saber cómo funciona) y del segundo no tengo ninguna muestra a la que hincarle el diente.

Lo de las notas me lleva a pensar que la alternativa más viable sería la tercrea. En la segunda alternativa, corro el riesgo de que una nota se quede colgando mientras carga los últimos 1704 bytes... que sería bastante molesto.
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start...
zup
Freddy Hardest
 
Mensajes: 624
Registrado: Vie Ago 15, 2008 2:43 pm


Volver a Programación y nuevos desarrollos

¿Quién está conectado?

Usuarios navegando este Foro: No hay usuarios registrados visitando el Foro y 1 invitado