Nat escribió:Es parecido al tipo de solución que propuse y aunque tu propuesta es válida quizás tenga más etapas. Mi propuesta era:
1) Grabar desde el emulador (o desde donde sea) un snapshot SNA que, por defecto, incluye toda la memoria
2) Crear un fichero de proceso por lotes que con alguna utilidad externa (por ejemplo, bintool) que conoce el formato SNA, y extraer los binarios:
Código: Seleccionar todo
bintool -c -fmADDRESS -lSIZE < snapshot.sna > bin0001.bin
aunque también se puede usar:
Código: Seleccionar todo
bintool -c -fmSTART_ADDRESS -emEND_ADDRESS < snapshot.sna > bin0001.bin
con las direcciones de origen y final. Puedes usar offsets en el fichero o posiciones de memoria del Spectrum con solo añadir la 'm'.
3) Leerlos como binarios desde tu programa BASIC, PASMO, etc.
Creo que ahorra pasos, por ejemplo, escribir todas las sentencias SAVE.
Por curiosidad, ¿cuál es el objetivo último de tener estos binarios?
Hola
Bueno la solución que he puesto en principio tiene "grandes ventajas" y es que no necesito saber las direcciones y el tamaño
donde están los trozos de memoria que necesito. Lo cual es un chollo
Ese es el principal problema de manejar tantos ficheros diferentes (que son muchos)
Ahora mismo el programa origen que realiza los cálculos que necesito para el otro programa, hace los SAVE de la siguiente forma
SAVE "nombre-fichero" CODE @label1,numVariable*4
SAVE "nombre-fichero-2" CODE @label2,numVariable*3
SAVE "nombre-fichero-3" CODE @label3,numVariable*2
ETC ETC
Muchos SAVE distintos que pueden variar de tamaño y dirección mientras se desarrolla (incluir alguna cosa, quitar alguna cosa. Vamos lo típico)
Donde @label lo calcula automáticamente el compilador de ZX Boriel
y el tamaño numVariable*4 también
Solo le pongo las etiquetas y se que va a funcionar
De tal forma que de todos los trozos que necesito automáticamente calcula todas las direcciones y tamaños, ya que son muchos ficheros diferentes y hacerlo a mano es un tocho
Así que de esta forma solo necesito
1) Poner los SAVE de los trozos que necesito, calculados automáticamente( que ya cuesta si son muchos

)
2) Extraer los binarios con el programa del anterior mencionado antes( con un .BAT)
3) Incluirlos con INCLUDE en el otro programa donde los necesito
por ejemplo
trozo1:
ASM
incbin "trozo1" INCLUYO ESTE TROZO SIN SABER NI DIRECCIÓN NI TAMAÑO
END ASM
trozo2:
ASM
incbin "trozo2" INCLUYO ESTE OTRO TROZO SIN SABER NI DIRECCIÓN NI TAMAÑO
END ASM
ETC ETC
Y de esta forma no me preocupo de saber ninguna dirección ni tamaño ( excepto que no sobrepase los 48K

)
Se que el primer programa sacará los datos de donde lo necesito y el segundo los pondrá donde lo necesito
Todo solo con etiquetas, automáticamente
Si cambio algo en el primer programa origen todo lo demás cambiará automáticamente
Respecto a los binarios
Bueno esos binarios son unos datos precalculados que utilizará el programa definitivo para que vaya más rápido
Ahora ya funciona pero va un poco lento
Algo muy típico en el zx spectrum, unas tablas de valores guardadas para tener rapidez
Y ya tá
