Página 1 de 2

Cuestiones sobre paginación de memoria 128K

Publicado: 15 Feb 2016, 17:21
por Haplo
Llega un momento en la vida de todo juego en desarrollo que empieza a chocarse con la limitación de memoria...

Asi que estuve aprendiendo cómo funciona el tema de la paginación de memoria y me ha sorprendido lo sencillete que es, en mis tiempos me parecía casi magia :maestro: . El caso es que me ha llamado la atención el modo especial adicional del los +2A y +3, el ALL-RAM.
No es que tenga mucho misterio, pero me ha surgido una duda que no he podido responder con lo que visto:

¿son compatibles simultáneamente?

Es decir, si por ejemplo tengo activado el mapa de memoria ALL-RAM 4-5-6-7 ¿ puedo ir cambiando la página que cae entre xC000h y xFFFFh de la manera en que se hace en el modo normal? ¿o lo más parecido es commutar entre los 4 esquemas de memoria especiales?

También creo haber leído que el DivIDE es incompatible con el modo ALL-RAM.

Saludetes.

Re: Cuestiones sobre paginación de memoria 128K

Publicado: 15 Feb 2016, 19:52
por antoniovillena
No. El modo all RAM no te permite paginar simultáneamente lo que cae en memoria alta. Pero ten en cuenta que tienes 4 modos all RAMs distintos, cada uno con su combinación. Puedes ir saltando entre estos 4 modos, con cuidado de no cambiar ni lo que tienes en programa (PC) ni en pila (SP). Lo del DivIDE no lo sé porque no lo he programado. Pero programar e ir conmutando entre los 4 modos all-RAM es complicadillo por lo que te he comentado antes.

La ventaja es que puedes direccionar los 64k del Z80 (en lugar de los 48K) sin paginación (normalmente la ROM no se usa en los juegos). La desventaja es que sólo es compatible en +2A/+3, por lo que raramente se usa.

Re: Cuestiones sobre paginación de memoria 128K

Publicado: 15 Feb 2016, 23:10
por mcleod_ideafix
Haplo escribió:¿son compatibles simultáneamente?
A lo que te ha contestado Antonio, añado poca cosa: no pueden usarse simultáneamente porque precisamente hay un bit en el registro 1FFD que indica si vas a usar la paginación "estilo 128K" o la paginación "estilo +3", por lo que las dos a la vez, no puedes.
Haplo escribió:También creo haber leído que el DivIDE es incompatible con el modo ALL-RAM.
El model original, el 57c es incompatible en el sentido de que en modo all-RAM puede haber colisiones entre el bus de datos desde el DivIDE y el bus de datos desde la RAM del Spectrum, y además la señal ROMCS para inhabilitar las ROMs no inhabilita la RAM que hubiese en espacio de ROM. En el ZX-Uno no existe tal colisión, y si el DivMMC está activado, cuando le toque paginarse, se pagina, haya lo que haya en los primeros 16K del espacio direccionable. Es decir, se comporta como debería hacerlo lógicamente.

Re: Cuestiones sobre paginación de memoria 128K

Publicado: 15 Feb 2016, 23:39
por chernandezba
Por cierto, yo encontré un juego que usa ese modo... El livingstone supongo 2, la versión +2A (hay dos cargas, una 48/128 y otra para +2A). En el juego intercambia continuamente de páginas Ram 4563 y 4763, de tal manera que usa un doble buffer de pantalla...

Re: Cuestiones sobre paginación de memoria 128K

Publicado: 17 Feb 2016, 20:50
por Haplo
Entendido, ya me parecia a mi raro que fuera así, pero por preguntar que no quede jejej

Una cuestión más relacionada con la memoria y que he leído en la descripción del modo radastaniano:
- 4 páginas de pantalla disponibles: 4000h, 6000h, C000h, E000h. Estas dos últimas, en el banco 7 de memoria. Para cambiar de pantalla, por ejemplo de la 4000h a la 6000h, o de la C000h a la E000h, hay que poner un 1 en el bit 0 del puerto $FF (ya que esta característica está heredada de los modos de Timex implementados)
Me parece muy interesante y quizás utilice este sistema para el juego. Me simplificaría mucho el tema gráfico.
¿Este funcionamiento está soportado por el ZesarUX? ¿alguien lo ha probado?

Re: Cuestiones sobre paginación de memoria 128K

Publicado: 18 Feb 2016, 00:17
por chernandezba
Hola

ZEsarUX lee ese bit del puerto ff de timex pero solo para los modos de vídeo de timex. En modo ulaplus no se lee para nada.
Lo que sí que se lee es el bit 3 del puerto 32765, que indica si la pantalla viene de la RAM 5 o la 7. Es decir, puedes tener dos pantallas en modo ulaplus (o modo 128 normal tal cual), a diferencia de las 4 que ofrece la especificación de zxuno.
No sé en qué momento el equipo de zxuno metió ese bit de timex en los modos ulaplus, pero yo no me enteré, jeje

Re: Cuestiones sobre paginación de memoria 128K

Publicado: 18 Feb 2016, 00:26
por Haplo
ejem, con razón no me funcionaba el test que estaba haciendo hace un rato... bueno pues aclarado el misterio jeje
Eso sí, te agradecería una jartá que lo incluyeras en la lista de TO DO para un futuro cercano :okidoki;

Re: Cuestiones sobre paginación de memoria 128K

Publicado: 18 Feb 2016, 15:14
por mcleod_ideafix
chernandezba escribió:No sé en qué momento el equipo de zxuno metió ese bit de timex en los modos ulaplus, pero yo no me enteré, jeje
Se metió sólo, como quien dice. Es sencillamente la consecuencia de cambiar la dirección base de la exploración de pantalla de $0000 a $2000, que es lo que se hace en Timex. Esto significa que automáticamente, cualquier modo gráfico que implemente la ULA, presente o futuro, puede comenzar a explorar en cualquiera de esas dos direcciones (están referidas no al comienzo del espacio de direcciones de la CPU sino al comienzo del bloque de 16K correspondiente, que puede ser de la página 5 o de la 7).

En ZesarUX no debería ser difícil implementar esto: si para el modo Radastaniano exploras desde la dirección $0000 de la página 5 o la 7, ahora sencillamente coge el bit 0 del registro $FF y úsalo con un XOR en el bit 13 de la dirección de exploración.

Re: Cuestiones sobre paginación de memoria 128K

Publicado: 19 Feb 2016, 22:40
por chernandezba
Hola

Si, es muy fácil agregarlo. Lo añadiré en breve ;)
Lo que sí que he añadido, y siguiendo la 'estela' del zxuno, como viene siendo costumbre en mi...jeje... Es los timings de pentagon.
Por fin he podido ver demos como la mescaline casi perfecta... Y digo casi porque aunque el timing es perfecto, la rutina de refresco de pantalla no, y hay alguna columna que se 'sale' de cómo se debería ver.. Cosa muy complicada de corregir, que se presenta en todos los timings, y que requeriría mayor procesado en paralelo y aumentar la carga de cpu...
Resumiendo, que al menos con esos timings de pentagon, las músicas se oyen bien, y los efectos también, a diferencia de ejecutarlas con timings de 128 en el que se oyen lentas las músicas y/o los efectos de color en Hi-res salen completamente desfasados

Saludos
César

Re: Cuestiones sobre paginación de memoria 128K

Publicado: 20 Feb 2016, 16:36
por chernandezba
Hola
Ya he agregado soporte para pantalla shadow de timex en modo ulaplus radastaniano.
En cuanto suba una nueva beta lo podréis probar (o si compiláis el último source, como siempre)

Saludos
César