¿Puedo grabar binarios desde emulador con comandos o algo?

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

Moderador: Sir Cilve Sinclair

Responder
maeloterkim
rst 0
Mensajes: 21
Registrado: Mar Abr 30, 2019 8:52 am

¿Puedo grabar binarios desde emulador con comandos o algo?

Mensaje por maeloterkim » Sab Jun 15, 2019 8:06 pm

Hola

Normalmente con ZXSpin si quiero grabar un fichero binario, voy a : file -> save binary file

le doy los datos de dirección de memoria y numero de bytes y me graba un fichero con la extension
que quiera que puede ser .bin por ejemplo

Peeeero...

¿Se puede hacer esto con algún emulador y maquina +2 , +3, u otra , etc
directamente desde comandos en basic o desde codigo máquina, que no sea en un TAP y sean ficheros diferentes?

En seudocódigo seía algo así:

graba El Primer Trozo de memoria en un fichero binario

graba El segundo Trozo de memoria en otro fichero binario diferente

etc ... etc

Quizás existe alguna macro o algo ?¿?¿?¿?

Más que nada para no hacerlo a mano ya que son muchos :)

Es decir que lo grabe directamente a PC desde el emulador como ficheros binarios diferentes

Espero haberme explicado bien :)

No se si esto debería estar aquí o en emuladores (quizás en los dos sitios)

Gracias

Avatar de Usuario
Nat
Herbert
Mensajes: 95
Registrado: Lun Mar 25, 2019 9:31 am

Re: ¿Puedo grabar binarios desde emulador con comandos o alg

Mensaje por Nat » Sab Jun 15, 2019 8:30 pm

No sé si he entendido bien pero creo que en los que conozco la máquina emulada no sabe de la máquina anfitriona y por eso me inclino a pensar que la comunicación directa entre Sinclair BASIC o código máquina con el sistema de ficheros del PC no sea posible excepto si el emulador ofreciera un API específico. Corregidme por favor si me equivoco.

Una solución diferente pero más universal sería grabar el contenido de toda la memoria a un snapshot SNA y desde el PC extraer los diferentes binarios de ese único fichero.
Saludos,
Nat

hikoki
Freddy Hardest
Mensajes: 657
Registrado: Sab Nov 23, 2013 8:27 am

Re: ¿Puedo grabar binarios desde emulador con comandos o alg

Mensaje por hikoki » Sab Jun 15, 2019 8:48 pm

Basinc tiene una serie de formatos propios (bsc,bsd..) para que los comandos de Sinclair Basic (Load,Save,Load Data,Save Data..) puedan tratar con ficheros del PC.

https://documentation.help/BASin/files.html

Ejemplo: https://www.worldofspectrum.org/forums/ ... ent_505482

maeloterkim
rst 0
Mensajes: 21
Registrado: Mar Abr 30, 2019 8:52 am

Re: ¿Puedo grabar binarios desde emulador con comandos o alg

Mensaje por maeloterkim » Sab Jun 15, 2019 9:21 pm

Gracias

mirando esos links de basinc he encontrado esto, por si a alguien le sirve:

BASin can save memory dumps as either .bsc, which includes the header described above, or as raw bytes if the .bsc extension is absent from the filename - e.g. SAVE "c:\BASin\Screen.scr" CODE 16384,6912 would save a raw .scr dump of the current display memory, with no header. This can be loaded into any emulator which supports the loading of Binary files.

en esta página https://documentation.help/BASin/format_bsc.html

Así que en principio con basinc podría grabar directamente trozos de memoria a distintos
ficheros binarios de la siguiente forma:

SAVE "c:\RUTA\PARA_GRABAR_FICHERO\nombre-fichero.bin" CODE DIRECCION-INICIAL,NUM_BYTES


A ver si funciona :)

hikoki
Freddy Hardest
Mensajes: 657
Registrado: Sab Nov 23, 2013 8:27 am

Re: ¿Puedo grabar binarios desde emulador con comandos o alg

Mensaje por hikoki » Sab Jun 15, 2019 9:39 pm

Si haces un Save dentro de Basin con formato bsc, ya guarda las direcciones en el fichero y puedes hacer Load prescindiendo de ellas.
.bsd es util con arrays
tambien puedes cargar .scr directamente desde un programa,etc
Mira este otro post del mismo hilo que te ponia arriba para ver como organizar ficheros en un proyecto de Basin
https://www.worldofspectrum.org/forums/ ... ent_505382

Avatar de Usuario
Nat
Herbert
Mensajes: 95
Registrado: Lun Mar 25, 2019 9:31 am

Re: ¿Puedo grabar binarios desde emulador con comandos o alg

Mensaje por Nat » Sab Jun 15, 2019 9:41 pm

Pero si graba como .bsc ¿no le añade la cabecera al principio del fichero binario? Aunque si es para cargarlas desde el Spectrum y usando Basinc no importa.
Saludos,
Nat

maeloterkim
rst 0
Mensajes: 21
Registrado: Mar Abr 30, 2019 8:52 am

Re: ¿Puedo grabar binarios desde emulador con comandos o alg

Mensaje por maeloterkim » Dom Jun 16, 2019 12:54 pm

Bueno al final lo he "conseguido" por si a alguien le sirve :)

Usando el zxBasic de Boriel lo que quería hacer es, poder crear con un programa en BASIC los binarios necesarios,
para otro programa que los necesita y de esa forma además poder probarlos en el emulador directamente

Al final lo he hecho de la siguiente forma por si le sirve a alguien

1) Creamos el programa en Basic o ZXBasic de Boriel con Basic compilado
2) Dentro de ese programa creamos tantas sentencias SAVE como binarios necesitemos (trozos de memoria con bytes)
3) Creamos un fichero TAP y lo leemos con BASINC
4) Antes de ejecutar las sentencias SAVE del programa ( esto se puede conseguir poniendo
un PRINT "Pulsa tecla para SAVE": PAUSE 0)
hay que asegurarse tenemos seteado en el creador de cintas de BASINC donde pone streaming->SAVE

donde pone streaming->SAVE debe estar señalado con un sigo de validación

De esta forma todas las sentencias SAVE directamente las irá grabando en el TAP mismo después del programa principal,
sin esperar a pulsar tecla ni nada. Grabando todos los SAVE seguidos en el TAP

5) Ahora en el TAP inicial deberíamos tener, el programa que crea los binarios en memoria y los binarios con header

6) He encontrado aqui http://www.seasip.info/ZX/unix.html unas herramientas para manejar ficheros TAP

Dentro de esas herramientas tenemos
tapget y unspecform

tapget => Extrae un bloque de un fichero TAP con header
unspecform => le quita el header al bloque extraido

De la siguiente forma podemos extraer los binarios sin header

tapget file.tap screen => Sacamos creen con header
unspecform screen screen.bin => Quitamos el header a screen

De esta forma podemos tener un cierto "entorno de desarrollo" con el que podemos

1) Crear tantas sentencias SAVE como necesitemos
2) Crear un fichero .BAT en windows para ir separando cada uno de los binarios
3) Y leerlos con include después como binario, en otro programa con ZX BASIC de Boriel o en pasmo etc , sin el espacio ocupado por la rutina que crea los binarios

y ya tá :)

---------------
Última edición por maeloterkim el Mar Jun 18, 2019 2:18 pm, editado 1 vez en total.

Avatar de Usuario
Nat
Herbert
Mensajes: 95
Registrado: Lun Mar 25, 2019 9:31 am

Re: ¿Puedo grabar binarios desde emulador con comandos o alg

Mensaje por Nat » Dom Jun 16, 2019 2:05 pm

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?
Saludos,
Nat

maeloterkim
rst 0
Mensajes: 21
Registrado: Mar Abr 30, 2019 8:52 am

Re: ¿Puedo grabar binarios desde emulador con comandos o alg

Mensaje por maeloterkim » Dom Jun 16, 2019 2:50 pm

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á :)

Responder

¿Quién está conectado?

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