Problemas Desensamblando un Programa MSX con Ensamblador PC

Por manolito74

Paragon (1266)

Imagen del manolito74

10-07-2022, 06:53

Hola:

Pues bien, ayer me dio por probar/buscar algún Desensamblador de Z80 para PC y probar a Desensamblar algún Programa.

Me encontré con este estupendo IDE que permite tanto Ensamblar como Desensamblar y que al parecer utiliza PASMO por "debajo":

https://zdevstudio-z80-development-studio.software.informer....

También me encontré este Desensamblador Online, que permite desensamblar Z80 (En "Archivo" eliges Z80 y luego pones la dirección de Desensamblado. Luego te hace una pregunta, que le dices que NO y en el Listado que te sale, con el botón derecho sobre la primera línea pulsamos en Data-->Code y ya muestra el Código Desensamblado)

Bien, el caso es que he hecho pruebas con el Fichero VECOPE.BIN, cuyas direcciones son:

  • Begin: D212
  • End: D835
  • Execution: D801

Hi,

He utilizado para Desensamblar la Dirección de Inicio: D212 Sin embargo el Listado Desensamblado que obtengo es distinto del que obtengo al Desensamblarlo en el MSX (con el RSC, en un Emulador con el Debugger, ...) Pongo aquí la Captura para ver la comparación.

Sin embargo, si le resto 7 en hexadecimal a la dirección de Inicio los Listados son iguales (sólo difieren en la primera-segunda línea) Es decir, uso la Dirección: D20B que la obtengo de restarle 7 a la Dirección de Inicio, es decir:

D212 - 7 = D20B

Aquí pongo la imagen para que se ve :

No entiendo el porqué obtengo esas diferencias si uso la Dirección de Inicio "real" en el Desensamblador de PC pero sin embargo si le resto 7 a la Dirección de inicio, los Listados Desensamblados del MSX y PC coinciden...

¿Alguna explicación técnico/lógica?

Gracias & Saludetes. ;-)

Pd. Y por cierto: ¿qué DESENSAMBLADORES para Z80 usáis en el PC?

Login sesión o register para postear comentarios

Por Guillian

Prophet (3506)

Imagen del Guillian

10-07-2022, 09:05

La diferencia se debe a la cabecera del binario (7 bytes): FE 12 D2 35 D8 01 D8
Cuando cargas un binario desde el MSX con BLOAD o un programa que la reconozca, esa cabecera se descarta tras obtener en qué parte de la memoria hay que cargar los datos, cuanto ocupan y la dirección de ejecucción.

Pero en un desensamblador genérico, ese binario se carga por completo, incluyendo la cabecera. De ahí la diferencía de 7 bytes que has notado.
En estos casos tienes que descartar la cabecera al cargar el fichero, o cargarlo 7 bytes antes.

Por manolito74

Paragon (1266)

Imagen del manolito74

10-07-2022, 20:24

Hola @Guillian:

¡Perfecto...! ¡1.000 gracias por la aclaración...! ;-)

Vamos, que por "prueba/error" yo mismo al final llegué a hacerlo correctamente, pero siempre se agradece que alguien te lo explique a nivel Técnico (máxime cuando es tan simple) ;-)

(Pero ya se sabe... que los que no tenemos conocimientos siempre necesitamos y agradecemos la ayuda de los que controláis más del tema..) XD

El Z80 Development Studio lo descubrí por causalidad y he de reconocer que tiene muy buena pinta. Quizás, no sea una maravilla pero es funcional y además tiene un IDE Gráfico, cosa que siempre es de agradecer.

@Guillian (o lo demás), ¿conoces, conocéis algún otro Desensamblador de Z80 que utilicéis, tanto con IDE Gráfico o con Línea de Comandos? Porque el PASMO en principio es sólo Ensamblador, ¿no?

Gracias & Saludetes. ;-)

Por Guillian

Prophet (3506)

Imagen del Guillian

11-07-2022, 08:09

Para echar un ojo rápido te puede valer https://onlinedisassembler.com
Si ya quieres analizar en detalle un programa, es mejor usar algo parecido al IDA Pro o Ghidra

Por manolito74

Paragon (1266)

Imagen del manolito74

11-07-2022, 12:38

Hola @Guillian:

Te he enviado un Correo, para un tema más específico.

Cuando puedas, le echas un vistazo y me comentas algo, please. ,-)

Gracias & Saludetes. ;-)

Por manolito74

Paragon (1266)

Imagen del manolito74

07-08-2022, 12:31

Hola:

Me acabo de dar cuenta que en mi Post inicial, cuando hablo del "Desensamblador Web" se me olvidó citar la dirección...

0- El Desensamblador Web es este:

https://onlinedisassembler.com/odaweb/

1- Pulsamos en "FILE ---> UPLOAD FILE" y nos aparece esta ventana:

2- Luego en "Seleccionar Archivo" elegimos el Fichero a Desensamblar (ya nos da automáticamente un Nombre al "Proyecto") Lo dejamos todo como está y pulsamos Ok:

3- En esta Pantalla, la cubrimos así:

NB: Aunque nuestro Fichero MSX realmente empieza en la Dirección 0xD212 nosotros ponemos como "Dirección Base" para Desensamblar: 0xD20B (para que interprete el Fichero correctamente y no se líe con los 7 Bytes que ocupa la Cabecera del Fichero MSX...

Esa dirección que ponemos se obtiene simplemente (como explica Guillian) restando 7 a la dirección de Inicio de Nuestro Fichero MSX:

D212 - 7 = D20B

4- Pulsamos OK. En la Pantalla siguiente, nos muestra una alerta de "Entry Point not Found" y pulsamos que NO

Ahora ya casi casi tenemos nuestro Fichero Desensamblado... (nos aparece esta Pantalla):

5- El último paso es pulsar con el ratón en la primera línea, luego Botón Derecho y elegimos la Opción: "DATA-->>CODE C" tal que así:

6- ¡Y ahora ya SÍ que tenemos nuestro Programa DESENSAMBLADO!

Es una forma de Desensamblar nuestros Programas MSX y hacer pruebas de forma rápida y simple. ;-)

Saludetes. ;-)

Por manolito74

Paragon (1266)

Imagen del manolito74

07-08-2022, 13:40

Hola de nuevo:

Ya que estamos, y como es un tema del que al menos yo casi no he encontrado información (me refiero a Desensambladores de Z80 para PC...) comparto otro Desensamblador que me he encontrado por causalidad.

Se llama DZ80 y esta es su Página Web:

http://www.inkland.org.uk/dz80/

El ejecutable para la versión Güindous[/u ]se descarga aquí:

http://www.inkland.org.uk/dz80/dz80w200.exe

(En el momento en que escribo esto la versión que hay es la 2.0)

Ejecutamos el Acceso Directo que nos aparece (o hemos creado en nuestro Escritorio) y seleccionamos "[u]Browse" para elegir (en la ventana de Diálogo para seleccionar el Fichero ponemos *.* para que nos aparezcan todos los Ficheros de cualquier extensión...) Yo de nuevo pruebo con el VECOPE.BIN

Pulsamos en "Options" y nos aparece esta ventana, que rellenamos con estos valores:

A la hora de cubrir los Datos de esta Pantalla, varias cosas MUY IMPORTANTES:

- Desmarcad el "check" de "LABELLED"

- En el campo "Start" ponemos el valor de inicio real del Fichero Binario MSX en Formato Decimal: 53778 (que en Hexadecimal es D212...)

- En el campo "File Start" ponemos el valor en Formato Decimal 53771 (que en Hexadecimal es D20B)

- En el campo "End" ponemos el valor en Formato Decimal 55349 (que en Hexadecimal es D835)

El resto no tocamos nada y lo dejamos todo como está.

Nota: Juraría que en esa ventana hay que poner las direcciones siempre en Decimal sino no funciona... Así que hacedlo siempre así. ;-)

- Pulsamos Ok y de nuevo volvemos a la Ventana Principal:

(Veréis que en la imagen en el "cuadro blanco" aparece información, pero es de pruebas anteriores que hice: a vosotros no os debería aparecer nada...)

Ahora pulsamos en "Disassemble" y nos muestra esta información:

Si nos fijamos, veremos que:

- El Fichero de Entrada, en este caso, es el VECOPE.BIN

- El Fichero de Salida, en este caso, es el VECOPE.ASM

- Nos informa que ha desensamblado el Rango: 0D212 --> 0D835 (que se corresponden con la Dirección de Inicio y Fin de nuestro Fichero Binario VECOPE.BIN)

- También nos muestra el número de instrucciones que ha Desensamblado.

Ya sólo nos muestra ir al Directorio en el que estaba el Fichero Binario y abriremos el Fichero ".asm", en este caso VECOPE.ASM y veremos el Código Desensamblado (en Formato [u]Hexadecimal[/u]):

Pues nada, ahí os queda esa información sobre otro Desensamblador Z80 para usar en el PC con Interfaz Gráfica, rápido y sencillo. ;-)

Saludetes. ;-)

Pd. Si alguien conoce algún Desensamblador más de Z80 para PC y lo comparte pues se agradece. ;-)