Restaurando los registros del AY
Publicado: 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.
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.