¿Puedo grabar binarios desde emulador con comandos o algo?
Moderador: Sir Cilve Sinclair
-
- rst 0
- Mensajes: 21
- Registrado: Mar Abr 30, 2019 8:52 am
¿Puedo grabar binarios desde emulador con comandos o algo?
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
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
- Nat
- Herbert
- Mensajes: 95
- Registrado: Lun Mar 25, 2019 9:31 am
Re: ¿Puedo grabar binarios desde emulador con comandos o alg
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.
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
Nat
-
- Freddy Hardest
- Mensajes: 657
- Registrado: Sab Nov 23, 2013 8:27 am
Re: ¿Puedo grabar binarios desde emulador con comandos o alg
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
https://documentation.help/BASin/files.html
Ejemplo: https://www.worldofspectrum.org/forums/ ... ent_505482
-
- rst 0
- Mensajes: 21
- Registrado: Mar Abr 30, 2019 8:52 am
Re: ¿Puedo grabar binarios desde emulador con comandos o alg
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
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
-
- Freddy Hardest
- Mensajes: 657
- Registrado: Sab Nov 23, 2013 8:27 am
Re: ¿Puedo grabar binarios desde emulador con comandos o alg
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
.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
- Nat
- Herbert
- Mensajes: 95
- Registrado: Lun Mar 25, 2019 9:31 am
Re: ¿Puedo grabar binarios desde emulador con comandos o alg
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
Nat
-
- rst 0
- Mensajes: 21
- Registrado: Mar Abr 30, 2019 8:52 am
Re: ¿Puedo grabar binarios desde emulador con comandos o alg
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á
---------------
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.
- Nat
- Herbert
- Mensajes: 95
- Registrado: Lun Mar 25, 2019 9:31 am
Re: ¿Puedo grabar binarios desde emulador con comandos o alg
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:
aunque también se puede usar:
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?
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
Código: Seleccionar todo
bintool -c -fmSTART_ADDRESS -emEND_ADDRESS < snapshot.sna > bin0001.bin
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
Nat
-
- rst 0
- Mensajes: 21
- Registrado: Mar Abr 30, 2019 8:52 am
Re: ¿Puedo grabar binarios desde emulador con comandos o alg
HolaNat 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:
aunque también se puede usar:Código: Seleccionar todo
bintool -c -fmADDRESS -lSIZE < 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'.Código: Seleccionar todo
bintool -c -fmSTART_ADDRESS -emEND_ADDRESS < snapshot.sna > bin0001.bin
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?
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á
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 16 invitados