Muy buenas,
Me estoy currando un ensamblador para el CPC (que quizá algún día acabe) y os traigo una parte del programa que he decidido convertir en una pequeña utilidad en ROM, y quiero compartir con todos vosotros y el sitio de Amstrad ESP.
Lo único que hace es sacar por pantalla las instrucciones de memoria, incluidas no documentadas. Creo que puede ser útil para combinar con el BASIC, pokes, etc...lo que haría cualquier desensamblador vamos,.. pero quizá el atractivo puede estar en su sencillez. No hay menús, ni cargas, nada más que un comando: |ORG,dirección
Lista, pausa, reanuda y vuelve al basic, no hay más de momento. El listado no tiene fin, cuando supere toda la memoria volverá al principio de nuevo y se debe usar la tecla ESC un par de veces para salir.
Espero que os guste, para cualquier sugerencia, duda, bug, etc, por favor, házmelo saber en este mismo hilo.
Gracias.
DISARM, desensamblador para CPC
Reglas del Foro
Debido a que hay varios temas pidiendo ayuda para programar en ensamblador máquinas distintas al Amstrad CPC, con micro distinto al Z80 y que incluso dependen del sistema operativo, nos vemos en la necesidad de poner por escrito que estos posts son bienvenidos pero que no es el lugar adecuado ya que por estos lares nos dedicamos más al ensamblador del Z80, un microprocesador de 8 bits que tuvo su gran auge en ordenadores y consolas de los años 80.
De todas formas, esto no quita que alguien que sepa del asunto pueda postear alguna respuesta pero es más fácil encontrar foros dedicados a programar en ensamblador en Windows o MS-DOS que ayudarán más que nosotros:
http://www.lawebdelprogramador.com/news ... nsamblador
Debido a que hay varios temas pidiendo ayuda para programar en ensamblador máquinas distintas al Amstrad CPC, con micro distinto al Z80 y que incluso dependen del sistema operativo, nos vemos en la necesidad de poner por escrito que estos posts son bienvenidos pero que no es el lugar adecuado ya que por estos lares nos dedicamos más al ensamblador del Z80, un microprocesador de 8 bits que tuvo su gran auge en ordenadores y consolas de los años 80.
De todas formas, esto no quita que alguien que sepa del asunto pueda postear alguna respuesta pero es más fácil encontrar foros dedicados a programar en ensamblador en Windows o MS-DOS que ayudarán más que nosotros:
http://www.lawebdelprogramador.com/news ... nsamblador
DISARM, desensamblador para CPC
- Adjuntos
-
- DISARM13.rar
- DISARM 1.3b
- (29.89 KiB) Descargado 17 veces
Última edición por Meta el Dom 10 Dic , 2023 9:19 am, editado 1 vez en total.
Re: DISARM, desensamblador para CPC
Vaya sorpresón! está muy chulo el programa, enhorabuena me recuerda a cuando yo usaba en aquellos tiempos el desensamblador de J. Epalza, que le publicaron el listado en una ¿Amstrad User?. Ahora todos tiramos del debugger del winape
Por cierto, estaría genial si hicieras un tutorial de cómo crear ROMs para los que no tenemos ni idea
Saludos.
Por cierto, estaría genial si hicieras un tutorial de cómo crear ROMs para los que no tenemos ni idea
Saludos.
Re: DISARM, desensamblador para CPC
Hola Urusergi,
Me alegro de que te guste el programilla, no es gran cosa la verdad, lo único que hace es indexar unas tablas y sacar el texto concatenado. Que por cierto, me vas a reñir, al final tanta historia con el txt_ouput y he dejado el programa sin las mejoras que hicimos el otro día, pero bueno, el caso es que funciona bastante bien creo yo, aunque se puede optimizar bastante por que el código viene de otra historia.
Hacer una ROM es muy fácil (desde winape y hasta donde yo sé), solo hay que tener un par de cosas en cuenta:
El winape hay que configurarlo para que escriba en el upper rom, poner una cabecera correctamente, una tabla de nombres de RSX con sus saltos y poco más. Luego hay más cosas que se pueden hacer, como parámetros especiales y tal, pero ahí no he profundizado mucho. La verdad es que sé lo básico para que funcione.
Dame un rato que te preparo un mini tutorial e investigamos el tema.
Me alegro de que te guste el programilla, no es gran cosa la verdad, lo único que hace es indexar unas tablas y sacar el texto concatenado. Que por cierto, me vas a reñir, al final tanta historia con el txt_ouput y he dejado el programa sin las mejoras que hicimos el otro día, pero bueno, el caso es que funciona bastante bien creo yo, aunque se puede optimizar bastante por que el código viene de otra historia.
Hacer una ROM es muy fácil (desde winape y hasta donde yo sé), solo hay que tener un par de cosas en cuenta:
El winape hay que configurarlo para que escriba en el upper rom, poner una cabecera correctamente, una tabla de nombres de RSX con sus saltos y poco más. Luego hay más cosas que se pueden hacer, como parámetros especiales y tal, pero ahí no he profundizado mucho. La verdad es que sé lo básico para que funcione.
Dame un rato que te preparo un mini tutorial e investigamos el tema.
Re: DISARM, desensamblador para CPC
Buenas, dejo por aquí la versión 1.1 con algunas mejoras.
V1.1.0
matrices, búferes y pilas del firmware no se muestran correctamente debido al uso de llamadas propias del sistema.Como por ejemplo la matriz UDG (#B736 en 6128), la pila temporal de las interrupciones (<#B8B3), búferes de teclado, etc.
Espero que sea útil, saludos
V1.1.0
- añadida columna de caracteres.
- eliminada búsqueda que calculaba la instrucción anterior a ORG y auto-completaba la siguiente.
- actualizado cálculo de tamaño de las instrucciones extendidas; algunas instrucciones desconocidas ahora se muestran con 2 bytes de memoria en vez de 4.
- añadida subrutina RST; la instrucción RST ahora se muestra con la dirección al vector en vez de número.
- optimización general de subrutinas de operandos.
matrices, búferes y pilas del firmware no se muestran correctamente debido al uso de llamadas propias del sistema.Como por ejemplo la matriz UDG (#B736 en 6128), la pila temporal de las interrupciones (<#B8B3), búferes de teclado, etc.
Espero que sea útil, saludos
- Adjuntos
-
- DISARM11.rar
- DISARM V1.1
- (2.33 KiB) Descargado 37 veces
Re: DISARM, desensamblador para CPC
Sigue así, te está quedando de lujo
También me gustaría hacer programas, pero, como ya me pasaba en aquellos años, no tenía imaginación y eso a pesar del nivelón de basic que gastaba por aquél entonces. Ahora parece que he aprendido algo de ensamblador pero sigo con el mismo problema
También me gustaría hacer programas, pero, como ya me pasaba en aquellos años, no tenía imaginación y eso a pesar del nivelón de basic que gastaba por aquél entonces. Ahora parece que he aprendido algo de ensamblador pero sigo con el mismo problema
Re: DISARM, desensamblador para CPC
Gracias por los ánimos
Te tengo por alguien que domina el tema, estoy seguro de que cualquier cosa que te propongas eres capaz de hacerla.
Si quieres te pongo tareas, ya verás que rápido usas la imaginación..
Te tengo por alguien que domina el tema, estoy seguro de que cualquier cosa que te propongas eres capaz de hacerla.
Si quieres te pongo tareas, ya verás que rápido usas la imaginación..
Re: DISARM, desensamblador para CPC
Si quieres te pongo tareas, ya verás que rápido usas la imaginación..
No sé si recoger el guante, miedo me da.
Si necesitas optimizar código puedo echar una mano, que dicen por ahí que soy bueno en esa tarea
Re: DISARM, desensamblador para CPC
Tranki que estoy de broma pero si me quedo en blanco ya te pediré ayuda.
Aunque, no será por cosas que se pueden hacer, aunque parezca que está todo inventado.
Aunque, no será por cosas que se pueden hacer, aunque parezca que está todo inventado.
Re: DISARM, desensamblador para CPC
Feliz navidad!!!
Traigo otra versión del desensamblador que soluciona el bug que me dejé en la versión anterior, donde los datos no se correspondían leyendo ciertas partes de la memoria que utiliza el firmware. La solución era sencilla, preservar los 4 bytes del puntero antes de hacer nada con el firmware (cosa que no tuve en cuenta en su día). Para ello, he cambiado bastante el programa, y de paso optimizar un poquito algunas subrutinas. Los datos de los búferes cambiarán igualmente pero al menos ahora las columnas se corresponden.
Iba a meter un traductor de instrucciones pero lo dejé hace algunas semanas, así que he dejado las listas de instrucciones que uso para tests en &C400, por si alguien quiere curiosear.
Que paséis un buen día!
Traigo otra versión del desensamblador que soluciona el bug que me dejé en la versión anterior, donde los datos no se correspondían leyendo ciertas partes de la memoria que utiliza el firmware. La solución era sencilla, preservar los 4 bytes del puntero antes de hacer nada con el firmware (cosa que no tuve en cuenta en su día). Para ello, he cambiado bastante el programa, y de paso optimizar un poquito algunas subrutinas. Los datos de los búferes cambiarán igualmente pero al menos ahora las columnas se corresponden.
Iba a meter un traductor de instrucciones pero lo dejé hace algunas semanas, así que he dejado las listas de instrucciones que uso para tests en &C400, por si alguien quiere curiosear.
Que paséis un buen día!
- Adjuntos
-
- DISARM12.rar
- DISARM V1.2
- (5.24 KiB) Descargado 26 veces
Re: DISARM, desensamblador para CPC
De nuevo por aquí
Subo una nueva versión con cosas que tenía pendientes y doy por concluida esta parte del desensamblador que deseo compartir. (La dejo en el primer post y borro la anterior que tenía errores).
V1.3.0 b
- Tabulación en el mnemónico y mayor espacio en la columna de operandos en detrimento del espacio de la columna de memoria. (necesario para las nuevas instruciones).
- Mejora de la notación de instrucciones de índice combinadas. De: LD B,RLC (IX+&xx) a LD A,SET 7,(IX+&xx) en vez de RLC (IX+&xx),B o SET 7,(IX+&xx),A etc. Lo mismo para el registro IY.
- Los registros de medio índice ahora se muestran en el listado como HX, LX, HY y LY, en vez de IXH, IXL, etc.
El código viene incluido por si quereis trastear, el programa es muy corto y asequible. Para ensamblar el programa se debe poner empty.rom en la slot 2 y ensamblar DISARM.ASM, despues hacer un cold reset en el winape y aparecerá la nueva inicialización en el emulador. Si la slot 2 estuviera ocupada se puede cambiar la linea del main:
WRITE DIRECT -1,2,#c0
De lo contrario, puedes añadir DISARM13.ROM con el programa ya ensamblado en cualquier slot (que no sea el basic, etc). Lo mismo para tu CPC si dispones de un medio para instalar roms.
Por el momento no hay mucho más, pero ya tengo bastante avanzada la otra parte del proyecto si hay interés. Para cualquier pregunta o sugerencia intentaré responder lo antes posible.
Un saludo y gracias por este espacio.
Subo una nueva versión con cosas que tenía pendientes y doy por concluida esta parte del desensamblador que deseo compartir. (La dejo en el primer post y borro la anterior que tenía errores).
V1.3.0 b
- Tabulación en el mnemónico y mayor espacio en la columna de operandos en detrimento del espacio de la columna de memoria. (necesario para las nuevas instruciones).
- Mejora de la notación de instrucciones de índice combinadas. De: LD B,RLC (IX+&xx) a LD A,SET 7,(IX+&xx) en vez de RLC (IX+&xx),B o SET 7,(IX+&xx),A etc. Lo mismo para el registro IY.
- Los registros de medio índice ahora se muestran en el listado como HX, LX, HY y LY, en vez de IXH, IXL, etc.
El código viene incluido por si quereis trastear, el programa es muy corto y asequible. Para ensamblar el programa se debe poner empty.rom en la slot 2 y ensamblar DISARM.ASM, despues hacer un cold reset en el winape y aparecerá la nueva inicialización en el emulador. Si la slot 2 estuviera ocupada se puede cambiar la linea del main:
WRITE DIRECT -1,2,#c0
De lo contrario, puedes añadir DISARM13.ROM con el programa ya ensamblado en cualquier slot (que no sea el basic, etc). Lo mismo para tu CPC si dispones de un medio para instalar roms.
Por el momento no hay mucho más, pero ya tengo bastante avanzada la otra parte del proyecto si hay interés. Para cualquier pregunta o sugerencia intentaré responder lo antes posible.
Un saludo y gracias por este espacio.
Re: DISARM, desensamblador para CPC
Naturalmente que hay interés en que saques todo el proyecto
Lo que me chirría un poco es el LD B,RLC (IX+&xx) y otros, que es cierto que es una representación exacta de lo que hace la instrucción, y aunque la clásica ha sido desde siempre RLC (IX+&xx),B yo, de largo, preferiría verlo así: RLC B,(IX+&xx)
Después de 36 años me siguen flipando los comandos RSX, hay que ver
Échale un ojo, si no lo has hecho ya, al CATRUN de NoRecess, para mi ya es fundamental.
Lo que me chirría un poco es el LD B,RLC (IX+&xx) y otros, que es cierto que es una representación exacta de lo que hace la instrucción, y aunque la clásica ha sido desde siempre RLC (IX+&xx),B yo, de largo, preferiría verlo así: RLC B,(IX+&xx)
Después de 36 años me siguen flipando los comandos RSX, hay que ver
Échale un ojo, si no lo has hecho ya, al CATRUN de NoRecess, para mi ya es fundamental.
Re: DISARM, desensamblador para CPC
Estas instrucciones son dífíciles de manejar y muy raras de ver, a si que tampoco creo que sea muy relevante. A mi, la clásica, me chirriaba total, y esta aunque dice lo correcto es más larga y tediosa de escribir. La verdad, no se me habia ocurrido ponerla como dices pero quizá también le chirrie a más de uno. En winape es con LD (ensamblada)...y si lo dice el Richarld... aún así, ya me has dejado el token jodio
La utilidad que mencionas tiene buena pinta, no la conocía, lo cierto es que las ROMS son una bendición para el Amstrad.
La utilidad que mencionas tiene buena pinta, no la conocía, lo cierto es que las ROMS son una bendición para el Amstrad.
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro
La Comunidad Española |