paginación memoria 128k

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

Moderador: Sir Cilve Sinclair

paginación memoria 128k

Notapor Kodaly el Mie Ene 25, 2017 9:42 pm

Muy buenas. Sigo adelante con el juego que estoy desarrollando en ensamblador y me encuentro con la duda de si programarlo en 48k (que era lo que tenía previsto porque es lo primero que escribo en ensamblador) o pasar a los 128k.

He estado leyendo sobre la paginación de memoria en el curso de sromero y me queda claro el concepto. Sin embargo, no entiendo cómo se indica exactamente en el código a qué banco corresponden los datos, por ejemplo, que coloquemos a partir de $c000. Si pongo un org $c000 y a continuación datos de gráficos, etc...¿cómo indico que esos datos los quiero para el banco 1 por ejemplo? Luego tendría que hacer lo mismo pero asignando esa misma porción de memoria a otro banco. Otra cosa es luego leer esos datos con la rutina que cambia de banco, pero a la hora de escribirlos no encuentro información en ningún lado de cómo hacerlo.

¡Gracias de antemano!
Kodaly
Herbert
 
Mensajes: 68
Registrado: Lun Jul 23, 2012 1:55 pm

Re: paginación memoria 128k

Notapor hikoki el Sab Ene 28, 2017 4:14 pm

hikoki
Sabreman
 
Mensajes: 497
Registrado: Sab Nov 23, 2013 9:27 am

Re: paginación memoria 128k

Notapor climacus el Sab Ene 28, 2017 8:07 pm

Hola. Ese es un problema con el que me encontré. Uso el ensamblador PASMO y buscaba alguna instrucción del mismo para indicar en qué banco metía los datos, pero no la hay. Desconozco si algún otro ensamblador lo hace. Yo, en los juegos que he hecho para 128kb, he metido los datos en cada banco "a mano". Pagino el banco que quiero, espero pulsar una tecla y meto el fichero bin que me interese. Así con todos los bancos.
Todos mis juegos en formato físico
http://www.matranet.net/boutique/zx/zx.php
Avatar de Usuario
climacus
Sabreman
 
Mensajes: 405
Registrado: Mar Ago 25, 2009 1:46 pm

Re: paginación memoria 128k

Notapor Kodaly el Dom Ene 29, 2017 11:38 am

Muchísimas gracias a los dos.

Hikoki, son muy interesantes los enlaces. Aportan mucho sobre el tema en general pero no veo al pronto la solución al problema en concreto. Tendré que leerlo todo con más detenimiento y descifrar bien esos códigos.

Climacus, ¿podrías explicar por favor con más detalle (en modo para torpes) tu técnica? Ya me has sacado de más de un apuro zetaochentero. ¡Confío en tu conocimiento!
Kodaly
Herbert
 
Mensajes: 68
Registrado: Lun Jul 23, 2012 1:55 pm

Re: paginación memoria 128k

Notapor climacus el Lun Ene 30, 2017 10:23 am

Kodaly escribió:Muchísimas gracias a los dos.

Hikoki, son muy interesantes los enlaces. Aportan mucho sobre el tema en general pero no veo al pronto la solución al problema en concreto. Tendré que leerlo todo con más detenimiento y descifrar bien esos códigos.

Climacus, ¿podrías explicar por favor con más detalle (en modo para torpes) tu técnica? Ya me has sacado de más de un apuro zetaochentero. ¡Confío en tu conocimiento!


Te cuento cómo lo hago yo. Aunque seguro que hay otras maneras mucho mejores de hacerlo.
Como ensamblador uso PASMO, y para ejecutar el código, uso el Spectaculator, en el que es muy sencillo meter archivos .BIN en memoria.

Imagina que tienes toda la música del juego metida en el fichero MUSICA.BIN; tanto el reproductor como las canciones. Para que no te ocupen memoria, las quieres meter en el banco 3 y durante el juego lo vas usando como te interese.
El problema es cómo meter toda esa información en el banco 3.
Yo me creo un cargador que lo ejecuto al principio del juego. En este cargador cambio al banco 3. Uso una rutina que espera hasta que pulse una tecla. Cojo el archivo MUSICA.BIN y lo meto en el Spectaculator a partir de $C000. Así ya tengo mi reproductor y mis canciones en el banco 3. Una vez hecho esto, pulso la tecla y sigo con mi programa (cambio al banco que me interese, etc.).
Todos mis juegos en formato físico
http://www.matranet.net/boutique/zx/zx.php
Avatar de Usuario
climacus
Sabreman
 
Mensajes: 405
Registrado: Mar Ago 25, 2009 1:46 pm

Re: paginación memoria 128k

Notapor utopian el Lun Ene 30, 2017 11:25 am

Yo también utilizo Pasmo y un cargador a medida para meter los datos. La idea es:

1- Tienes que dividir el código en trozos de 16K, y las partes que vayan en páginas que no sean las "por defecto" las ensamblas con "org $c000", generándote cada una un archivo .bin (por ejemplo, ram3.bin, ram6.bin, etc).

2- Una vez tienes todos los bloques, yo utilizo mi herramienta (https://github.com/fjpena/zx-spectrum/t ... r/buildtzx) para crear un TZX que cargue todos los bloques en sus sitios correctos en memoria.

El principal problema de poner código en esos bancos de memoria es que si quieres llamar a código que esté en RAM3 desde la memoria principal, tienes que paginar ese banco primero, saber la dirección en la que tienes la rutina, y luego paginar de vuelta. Con Pasmo se hace un poco complicado, por lo que tiendo a dejar las páginas adicionales para datos o cosas muy autocontenidas, como el player de música con sus músicas correspondientes.
utopian
Manic Miner
 
Mensajes: 217
Registrado: Jue May 10, 2007 2:28 pm

Re: paginación memoria 128k

Notapor climacus el Lun Ene 30, 2017 12:48 pm

utopian escribió:Yo también utilizo Pasmo y un cargador a medida para meter los datos. La idea es:

1- Tienes que dividir el código en trozos de 16K, y las partes que vayan en páginas que no sean las "por defecto" las ensamblas con "org $c000", generándote cada una un archivo .bin (por ejemplo, ram3.bin, ram6.bin, etc).

2- Una vez tienes todos los bloques, yo utilizo mi herramienta (https://github.com/fjpena/zx-spectrum/t ... r/buildtzx) para crear un TZX que cargue todos los bloques en sus sitios correctos en memoria.

El principal problema de poner código en esos bancos de memoria es que si quieres llamar a código que esté en RAM3 desde la memoria principal, tienes que paginar ese banco primero, saber la dirección en la que tienes la rutina, y luego paginar de vuelta. Con Pasmo se hace un poco complicado, por lo que tiendo a dejar las páginas adicionales para datos o cosas muy autocontenidas, como el player de música con sus músicas correspondientes.


Ya sabía yo que tenía que haber una forma mejor de hacerlo... :)
Todos mis juegos en formato físico
http://www.matranet.net/boutique/zx/zx.php
Avatar de Usuario
climacus
Sabreman
 
Mensajes: 405
Registrado: Mar Ago 25, 2009 1:46 pm

Re: paginación memoria 128k

Notapor Kodaly el Lun Ene 30, 2017 4:37 pm

Mil gracias a utopian y a climacus. Voy a intentar lo que decís a ver si soy capaz de sacarlo adelante y si no, pues nada...este primer juego se escribe para 48k. No sabía que esto de la paginación fuese algo tan laborioso.
Kodaly
Herbert
 
Mensajes: 68
Registrado: Lun Jul 23, 2012 1:55 pm

Re: paginación memoria 128k

Notapor Ivanzx el Mar Ene 31, 2017 1:31 am

Kodaly escribió:Mil gracias a utopian y a climacus. Voy a intentar lo que decís a ver si soy capaz de sacarlo adelante y si no, pues nada...este primer juego se escribe para 48k. No sabía que esto de la paginación fuese algo tan laborioso.


Por curiosidad, qué juego es? :) O qué tipo de juego?
Ivanzx
Nonamed
 
Mensajes: 1153
Registrado: Lun May 07, 2007 12:11 pm
Ubicación: Frankfurt, Germany

Re: paginación memoria 128k

Notapor Kodaly el Mar Ene 31, 2017 3:26 pm

Ivanzx escribió:
Kodaly escribió:Mil gracias a utopian y a climacus. Voy a intentar lo que decís a ver si soy capaz de sacarlo adelante y si no, pues nada...este primer juego se escribe para 48k. No sabía que esto de la paginación fuese algo tan laborioso.


Por curiosidad, qué juego es? :) O qué tipo de juego?


Pues he denominado al proyecto "Survival Zx". Es un arcade de scroll horizontal (caracter a caracter) con algunos tintes de videoaventura en el que un superviviente realiza una serie de misiones en una ciudad infestada de zombis. Tengo ya dos fases. Los gráficos no son gran cosa, que nadie se emocione! :D Lo estoy desarrollando como ejercicio sin más ambición.
Kodaly
Herbert
 
Mensajes: 68
Registrado: Lun Jul 23, 2012 1:55 pm

Re: paginación memoria 128k

Notapor mcleod_ideafix el Dom Feb 05, 2017 3:06 am

climacus escribió:Hola. Ese es un problema con el que me encontré. Uso el ensamblador PASMO y buscaba alguna instrucción del mismo para indicar en qué banco metía los datos, pero no la hay. Desconozco si algún otro ensamblador lo hace


Sí. SjAsmPlus permite especificar en qué banco de memoria de 128K va el código o los datos. Luego, en el programa, sigues necesitando las instrucciones OUT para seleccionar el banco en cuestión, pero ya sabes que el código o los datos, una vez hayas paginado el banco correspondiente, estarán ahí.

Para eso, al principio de tu cdigo fuente pones:

Código: Seleccionar todo
device zxspectrum128


Y a partir de ahí, cuando quieras indicar que algo va en tal o cuál página harías algo como (por ejemplo, para la página 0)
Código: Seleccionar todo
page 0
org 0c000h


Y ya lo que venga, se ensamblará en la posición 49152 de memoria y siguientes, pero del banco 0 de memoria.

Todo esto es posible porque SjAsmPlus no genera TAPs ni TZX, sino snapshots de 48K y 128K.
Web: ZX Projects | Twitter: @zxprojects
Avatar de Usuario
mcleod_ideafix
Johnny Jones
 
Mensajes: 3962
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera

Re: paginación memoria 128k

Notapor Kodaly el Vie Feb 17, 2017 11:10 pm

Muy buenas. He estado retirado de la programación un tiempo pero vuelvo al tajo. Antes de nada, agradecer a McLeod su aportación.

Estoy probando con la solución que daba utopian pero me encuentro con un problema. Se supone que tendría que ensamblar aparte en un bin el bloque a partir de 24000 hasta que termina la memoria contenida. Luego el siguiente bloque de 16k hasta $c000 y los diferentes bancos que procedan. En el código hay llamadas a etiquetas que corresponden a datos que irían en $c000. Al ensamblar, Pasmo me da error ya que hay etiquetas que hacen referencia a gráficos sin declarar en esos bloques todavía. ¿Me podéis dar alguna idea?
Kodaly
Herbert
 
Mensajes: 68
Registrado: Lun Jul 23, 2012 1:55 pm

Re: paginación memoria 128k

Notapor utopian el Lun Feb 20, 2017 11:49 am

Lo que suelo hacer en Pasmo es generar los ficheros de símbolos de los otros .asm (pasmo test.asm test.bin test.sym), y luego incluir ese .sym en el fichero en el que hago referencia a las etiquetas.
utopian
Manic Miner
 
Mensajes: 217
Registrado: Jue May 10, 2007 2:28 pm

Re: paginación memoria 128k

Notapor Kodaly el Lun Feb 20, 2017 7:37 pm

utopian escribió:Lo que suelo hacer en Pasmo es generar los ficheros de símbolos de los otros .asm (pasmo test.asm test.bin test.sym), y luego incluir ese .sym en el fichero en el que hago referencia a las etiquetas.

Muchísimas gracias, utopian! Probaré lo que dices.

He estado trasteando con tu programa, en concreto probando a crear el tzx a partir de los archivos de ejemplo (betiled). El problema es que me sale al final el mensaje de "cannot read file". He descargado todos los archivos en una carpeta pero aunque me crea el tzx, me sale ese mensaje de error y el tzx no carga. Obviamente no será fallo del programa, algo habré hecho mal. Lo he ejecutado tal como indicabas en las instrucciones. Lo único es que en el "template" he puesto a 0 el compresor, porque tal como venía en el ejemplo me da error al no tener instalado el compresor.
Kodaly
Herbert
 
Mensajes: 68
Registrado: Lun Jul 23, 2012 1:55 pm

Re: paginación memoria 128k

Notapor utopian el Lun Feb 20, 2017 8:29 pm

Kodaly escribió:He estado trasteando con tu programa, en concreto probando a crear el tzx a partir de los archivos de ejemplo (betiled). El problema es que me sale al final el mensaje de "cannot read file". He descargado todos los archivos en una carpeta pero aunque me crea el tzx, me sale ese mensaje de error y el tzx no carga. Obviamente no será fallo del programa, algo habré hecho mal. Lo he ejecutado tal como indicabas en las instrucciones. Lo único es que en el "template" he puesto a 0 el compresor, porque tal como venía en el ejemplo me da error al no tener instalado el compresor.


¿No te dice qué fichero no puede leer? Si es así, debe ser que tienes algún problema con los saltos de línea en el template.txt o also similar (yo creo los archivos desde Linux, que usa un formato diferente para los saltos de línea). Prueba a crear el fichero de nuevas desde un Notepad a ver qué tal.
utopian
Manic Miner
 
Mensajes: 217
Registrado: Jue May 10, 2007 2:28 pm

Siguiente

Volver a Programación y nuevos desarrollos

¿Quién está conectado?

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