★ APPLICATIONS ★ PROGRAMMATION ★ MONA-3 en CP/M|Amstrad Personal) ★ |
MONA-3 (Amstrad Personal) | Applications Programmation |
Hasta ahora los ensambladores de CP/M eran algo exotérico, difícil de utilizar y al alcance de unos pocos privilegiados. Los aficionados al Código Máquina disponen, bien seguro, de esa gran herramienta que es el desensamblador MONA. En esta ocasión, nos hemos permitido el lujo de un «pequeño» truco de magia y lo hemos convertido en un auténtico desensamblador CP/M. Para conocer cómo funciona internamente el CP/M os presentamos este programa-cu-riosidad, que permite poder utilizar un desensamblador que muchos conocéis como es el Mona, de Hisoft, nada menos que en CP/M 2.2, realizando una serie de modificaciones en la cabecera del programa directamente en el disco. Lo primero que vamos a hacer es coger un disco vacío, o bien uno que podamos borrar todo su contenido, y formatearlo. Este programa permite utilizar el Mona en CP/M 2.2, Teclear ICPM y cuando nos conteste con el mensaje “A> ” tecleamos Disckit2, a continuación elegiremos la opción Format. El programa ofrecerá un nuevo menú del cual hemos de elegir el System format. Cuando nos pida introducir un disco de sistema debemos poner en la unidad el que contiene el CP/M 2.2 y seguir las instrucciones del programa. Una vez tengamos el disco formateado, salimos del programa Disckit2. Ahora tras el mensaje “A> ” tecleamos: Filecopy Mona31.bin y cuando el programa nos pida el fichero Fuente o Source introducimos el disco que contiene el Mona31.bin y pulsamos una tecla, cuando el programa nos pida el fichero Destino o Destination debemos introducir el disco que acabamos de formatear. Una vez realizados estos pasos, volvemos al Basic y mediante un catálogo comprobamos que el fichero Mona31.bin está en el disco que habíamos formateado. Ahora se cambia el nombre del fichero copiado mediante la orden: |REN, “MON.COM”, “MONA31 .BIN” A continuación se copia el listado del Programa I y después de haber corregido todos los errores de tecleo, salvarlo en el disco donde habíamos grabado la copia de Mona. Es muy importante seguir este orden, primero sacar la copia en un disco vacío y después salvar en el mismo disco el programa Basic, antes de ejecutarlo. Hay un Stop en la línea 150 que sirve para probar que no hay ningún error de tecleo. Ahora viene lo más importante, y es quitar de la mesa de trabajo todos los discos excepto en el que se encuentre el Mon.com y el programa Basic, para evitar posibles equivocaciones. A continuación ejecutar el programa Basic, habiendo quitado el Stop de la línea 150 y seguir sus instrucciones. Cuando haya concluido su ejecución podemos comprobar que la modificación ha tenido éxito, haciendo ICPM y cuando nos conteste con el Prompt“A> ” teclear: MON 20000 [ENTER] ahora se tiene que cargar el programa y empezar su ejecución. En caso de que haya algún error revisar el listado Basic, sobre todo las líneas de Data y empezar el proceso de nuevo, ya que la modificación que se produce en el programa se realiza directamente en el disco. El listado 1 permite relocalizar el Mon cuando se carga en memoria, especificando una dirección en decimal después del nombre del fichero, por ejemplo: MON 10000El número especificado debe estar entre 777 y 31487, en el caso de que no se encuentre entre estos valores no se cargará el fichero.Una vez en el Mon, se pueden utilizar todos sus comandos, con la única diferencia que las opciones “R” y “W” del Mon, para leer o escribir ficheros, se realizan con la cinta y no con el disco. Si se quiere leer o escribir un fichero ASCII de tipo Com del disco es necesario introducir en el Mon un pequeño programa en Código Máquina que aparece en el Programa II. Esta rutina se puede escribir mediante un ensamblador cualquiera, o bien copiando el Listado II mediante el “Cargador Universal” y después, salvándolo en forma binaria en una cinta, con el nombre de Lector, para que después, cuando estemos ejecutando el Mon en CP/M poderlo recuperar de la cinta mediante la opción “R” y colocarlo en la posición &9600. Cómo leer un fichero COM Si por ejemplo queremos ejecutar paso a paso el fichero DUMP.COM tendremos que seguir los siguientes pasos:
MON 2000
Cuando haya terminado de leer el fichero retornará al Mon y el fichero leído, en este caso el DUMP.COM, estará a partir de la dirección &100. Además en la dirección &9672 tendremos la dirección del final del fichero leído. Los ficheros Com siempre hay que cargarlos en la dirección &0100, ya que es la dirección donde los carga el CP/M y donde se empiezan a ejecutar. Cómo crear un fichero “COM” Una vez hayamos leído un fichero, como el DUMP.COM, podemos obtener una copia de éste con las modificaciones que hayamos realizado, por ejemplo de los mensajes de ayuda, mediante el programa Lector que habíamos utilizado para leerlo. Para salvarlo tenemos que colocar el nombre del fichero en la dirección &5C, de la misma forma que para la lectura, además, en este caso no se puede repetir un nombre de fichero que ya exista en el disco. A continuación, se coloca en la posición de memoria &9674, la dirección donde termina el fichero a salvar, que en la mayoría de los casos será igual a la que se obtenía en la dirección &9672. Después colocamos un breakpoint en &9638, y ejecutamos el programa mediante: J :&963CSi todo ha ido bien el fichero estará salvado en el disco.En el programa se utilizan cinco llamadas del bdos, la primera sirve para abrir el fichero cargando “DE” con la dirección &5C y en “C” el valor &F y después llamar a la dirección &0005, la segunda necesita la misma dirección en “DE” y en “C” el valor &10 y sirve para cerrar el fichero, la encargada de leer cada bloque del fichero necesita en “DE” lo mismo que las anteriores y en “C” el valor &14, para crear un nuevo fichero se necesita en “DE” lo mismo que antes y en “C” el valor &16 y la última llamada es la que escribe un bloque en el disco y que necesita en “DE” lo de siempre y en “C” el valor &15. Los bloques siempre se refieren a las posiciones de memoria entre la &80 y la &100.
|