SOFTWARE EDUCATIVO PARA EL ESTUDIO DEL
MICROPROCESADOR MC68000
Hilera J.R. , García R. , *Esteban L.F.
Universidad de Alcalá de Henares (*Univ. Politécnica de Madrid)
Escuela Universitaria Politécnica (*E.U. de Informática)
Dpto. Matemáticas
Campus Universitario 28871 Alcalá de Henares
Tfno: (91) 885 49 01
Fax: (91) 885 48 04
e-mail: mthilera@alcala.es
RESUMEN
En esta ponencia se presenta un entorno didáctico para ser utilizado en laboratorios de programación en ensamblador y en cursos o asignaturas relacionadas con el microprocesador MC68000. Realiza la simulación, en un Computador Personal, de una máquina basada en este micro, permitiendo la edición, traducción y ejecución de programas en lenguaje ensamblador, con acceso directo a la memoria y registros del sistema. También proporciona un curso de Enseñanza Asistida por Ordenador (E.A.O.) donde, además de estudiar con detalle el microprocesador MC68000, también se consideran otros aspectos básicos relacionados con el funcionamiento de los computadores en general.
1. INTRODUCCIÓN
Uno de los objetivos que se ha pretendido con este entorno de trabajo ha sido el ofrecer una herramienta a aquellos programadores que tengan un acceso limitado a máquinas reales basadas en el microprocesador MC68000 sobre las que han de ejecutar sus programas, pero que, en cambio, como es habitual, dispongan de un computador personal (basado en un microprocesador de la familia del i8086) o puedan tener un fácil acceso a él. En tal caso se ofrece un entorno en el que poder editar, ensamblar, ejecutar y , en definitiva, probar los programas en ensamblador del MC68000, simulando la arquitectura de una máquina basada en este micro.
Sin embargo, el motivo principal de la creación de este entorno ha sido el facilitar la tarea de profesores y alumnos en la explicación y seguimiento de asignaturas o cursos que pretendan el estudio del funcionamiento básico de los computadores a nivel de programación en lenguaje ensamblador y lenguaje máquina. Para ello, se ha supuesto un sistema basado en el microprocesador MC68000, que es sencillo de programar a este nivel, sobre todo, por el hecho de direccionar la memoria de forma lineal, evitando la segmentación que supondría el trabajar, por ejemplo, con micros de la familia del i8086.
En este sentido, se trata de una herramienta de carácter eminentemente didáctico que permite, por un lado, el diseño de programas y su ejecución, pudiéndose comprobar la evolución, a nivel de registros, del estado del computador durante dicha ejecución; y por otro lado, la realización de un curso de enseñanza asitida por ordenador que servirá para conocer aspectos concretos de la programación o arquitectura del micro, así como para recordar conceptos básicos informáticos, como la codificación binaria, álgebra de Boole, componentes de un computador, etc. En los siguientes apartados se analizarán con cierto detalle estas dos partes del entorno, la de simulación de un computador basado en el MC68000 y la de enseñanza asistida por ordenador.
2. SIMULADOR DEL MICROPROCESADOR MC68000
La parte de simulación permite editar, ensamblar y ejecutar programas en lenguaje ensamblador del MC68000 en cualquier Computador Personal bajo sistema operativo MS-DOS. La presentación de usuario es semejante a la de otros entornos comerciales de programación, aunque en este caso, como se muestra en la figura 1, se divide en dos ventanas de tamaño variable: una de edición (parte izquierda), con el programa fuente con el que se está trabajando y otra de arquitectura interna del micro (derecha) que permite visualizar todos los registros del MC68000, la pila, parte de la memoria y los idicadores de estado, para poder modificar su contenido y observar su evolución durante la ejecución de los programas. Exite la posibilidad, simplemente pulsando un tecla de función, de expandir ambas ventanas, para conseguir que cualquiera de ellas ocupe toda la pantalla y así poder editar líneas más largas, en el caso de la de edición, o visualizar más memoria y la pila, en el caso de la de arquitectura interna.
El Simulador constituye un único programa ejecutable, para cuyo desarrollo se ha utilizado el lenguaje de programación C con un enfoque de diseño modular descendente (Top-Down), con los módulos indicados en la figura 2. Cada módulo se ha implementado en uno o varios ficheros que han sido compilados por separado y enlazados posteriormente para constituir un único programa ejecutable de un tamaño aproximado de 270K bytes.
Figura 1. Pantalla de presentación del simulador
El módulo FICHERO se encarga de gestionar las funciones típicas sobre los ficheros utilizados en el Simulador, que son llevadas a cabo por los siguientes submódulos: CARGAR, permite recuperar un fichero del disco y llevarlo a la ventana de edición; NUEVO, borra la ventana de edición, dejándola preparada para la edición de un nuevo programa; GRABAR, para salvar en un fichero el contenido de la ventana de edición; RENOMBRAR, permite cambiar el nombre al fichero cargado en la ventana de edición; IR AL DOS, para salir temporalmente del simulador, pudiendo volver mediante la ejecución del comando exit del sistema operativo DOS; y SALIR, para salir definitivamente del simulador, dando por finalizada la sesión de trabajo. El módulo AYUDA proporciona información sobre el Simulador y permite ejecutar el curso de Enseñanza Asistida del MC68000.
Figura 2. Esquema general de diseño del Simulador
Editor de Programas
El módulo EDITAR (Fig. 2) permite visualizar y modificar el contenido de ficheros de texto en formato ASCII que contendrán los programas en ensamblador. Se ha diseñado un editor de pantalla que permite desplazarse por la misma para modificar e insertar texto en cualquier posición. Para facilitar esta tarea, el texto se almacena en una lista dinámica bidireccional cuyos nodos representan las líneas de texto, como cadenas de caracteres; estando cada línea enlazada con la siguiente y con la anterior mediante punteros (Fig. 3).
Figura 3. Almacenamiento de las líneas de texto en una lista bidireccional.
La estructura de datos completa correspondiente al texto manejado por el editor incluye también información acerca de la situación de la ventana de edición respecto del texto total, la posición de cursor y los punteros a la primera y última líneas de la lista bidireccional de la figura 3 [1].
Ensamblador de dos pasos
El módulo ENSAMBLAR (Fig. 2) permite realizar la traducción a lenguaje máquina del programa fuente en ensamblador presente en la ventana de edición. Se trata de un ensamblador de dos pasos (o pasadas) que accede, por tanto, dos veces al programa fuente para evitar el problema de las referencias adelantadas [2], que consiste en utilizar etiquetas en sentencias anteriores a aquella en la que se define su valor. Durante el primer paso se realiza el análisis léxicográfico y sintáctico, además de generar una tabla de símbolos con los valores numéricos de todas las etiquetas que aparecen en el programa. En el segundo se obtiene el código objeto (lenguaje máquina), accediendo a la tabla de símbolos para traducir sentencias que utilicen alguna etiqueta. Este código objeto obtenido al ensamblar el programa es almacenado en las posiciones correspondientes de la memoria simulada, estando listo para su ejecución. El ensamblador reconoce las directivas habituales en otros entornos de trabajo sobre el MC68000, la mayoría de las instrucciones de este micro (aritméticas, lógicas, movimiento, BCD, desplazamiento y rotación, manipulación de bits, control del programa y control del sistema) y todos los modos de direccionamiento.
Existe la posiblidad de incluir en los programas, mediante la directiva include, el contenido de otros ficheros de texto; lo cual facilita la programación modular mediante la creación de ficheros de biblioteca con subrutinas de uso general, con la consiguiente simplificación de los programas fuentes. El simulador también ofrece la opción, al ensamblar, de generar un fichero de texto .LST que contiene el programa fuente junto su traducción a lenguaje máquina (Fig. 4).
SIMULADOR DEL 68000 × S68× Version 1.01 (C)LFE 10:58:13 16/05/1994 D:\68000\PRUEBA.S68 Contador Código Maquina Código Ensamblador × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × 00000000 ORG 0 00000000 2600 MOVE.L D0,D3 00000002 D681 ADD.L D1,D3 00000004 69000008 BVS ERROR 00000008 6100001A BRA FIN 0000000C 41F80000 ERROR LEA 0,A0 00000010 2A3C4572726F MOVE #'Erro',D5 00000016 0BC83100 MOVEP D5,$3100(A0) 0000001A 3A3C7221 MOVE.W #'r!',D5 0000001E 0B883108 MOVEP.W D5,$3108(A0) 00000022 4E41 FIN TRAP #1 00000024 END *** Programa Ensamblado Sin Ningún Error *** Lineas Ensambladas : 21 Tamaño del Objeto : 36 Bytes Codigo Generado : 36 Bytes Datos Inicializados: 0 Bytes Datos Sin Inicializar: 0 Bytes |
Figura 4. Fichero .LST generado al ensamblar el programa de la figura 1.
Arquitectura de la Máquina Simulada
El programa desarrollado realiza la simulación de un computador con un micro MC68000 como Unidad Central de Proceso (UCP), una Memoria Principal de 16K bytes (direcciones hexadecimales en el rango $0000 hasta $3FFF) y unos puertos de entrada/salida mapeados en memoria para permitir la comunicación con los periféricos (pantalla, teclado e impresora).
La UCP MC68000 simulada incorpora los cinco tipos de registros de este mocroprocesador: 8 registros de datos de 32 bits (D0-D7), 7 registros de direcciones de 32 bits (A0-A6), un registro puntero de pila de 32 bits (A7 ó SP), un registro contador de programa de 32 bits (PC) y un registro de códigos de condición (acarreo, desbordamiento, etc.) de 8 bits (CCR).
En cuanto a los periféricos, en el caso de la pantalla simulada (modo texto), se utilizan puertos para enviar un carácter a una posición determinada ($3090: Cordenada X, $3091: Coordenada Y, $3092: Carácter), para fijar el estado del cursor ($3094: 0 Oculto, 1 Bloque, 2 Normal) y para simular cada posición de la pantalla de 24 líneas de 80 caracteres como una palabra de memoria compuesta de dos bytes, uno para el valor ASCII del carácter y otro para sus atributos de vídeo, con 24x80x2=3840 direcciones asignadas en el rango $3100-$3FFF. El teclado, por su parte, tiene asociadas dos direcciones, una para su registro de estado ($F002: 0 No hay tecla pulsada, 1 Tecla pulsada) y otra para el buffer o registro de dato ($F000), que contiene el valor ASCII de la última tecla pulsada. También se asigna una dirección ($E000) al buffer de la impresora conectada en paralelo al computador en el que se ejcuta el simulador, pudiéndose comprobar el estado de la misma (ocupada, sin papel, etc.) a través del byte menos significativo del registro D0 después de enviar un carácter.
Los módulos del programa encargados de la simulación de esta arquitectura son los denominados EJECUTAR y MEMORIA (Fig. 2). El primero ejecuta el programa objeto, en lenguaje máquina del MC68000, cargado en la memoria simulada, permitiendo hacerlo en modo paso a paso para facilitar la depuración de los programas, comprobando el estado de la máquina tras la ejecución de cada instrucción. También el módulo EJECUTAR permite visualizar la pantalla de la máquina simulada (Ventana de ejecución). El segundo de los módulos, MEMORIA, es el que permite al usuario el acceso a la totalidad de registros y celdas de memoria de la máquina simulada (Ventana de la Figura 1) para modificar, si así lo desea, sus contenidos. Este módulo permite al usuario elegir el tipo de representación (Hexadecimal, Decimal u Octal) de la información almacenada en memoria y registros.
3. CURSO DE E.A.O. DEL MC68000
Este curso, al que se puede acceder desde el simulador a través de una opción gestionada por el módulo AYUDA, pretende ser útil para recordar conceptos informáticos básicos y aprender otros más avanzados relacionados con el microprocesador MC68000. Se ha cuidado especialmente la interface de usuario mediante la utilización de gráficos, ofreciendo la posibilidad de usar el ratón o el teclado y posibilitando la elección entre diez diferentes velocidades de presentación de textos.
El curso se ha estructurado en ocho partes o capítulos accesibles desde el menú principal (Fig. 5). El primero es un repaso de los conceptos básicos (bit, sistemas de numeracion, operaciones aritméticas y lógicas, etc.) necesarios para poder seguir el resto de capítulos. En el segundo se describe la estructura interna de un computador en general y la del microprocesador MC68000 en particular. El tercer capítulo trata del funcionamiento de la memoria y de cómo es utilizada por el micro. En el siguiente se realiza una descripción detallada de los registros del MC68000. El quinto capítulo trata sobre los modos de direccionamiento. En el sexto se aborda de forma extensa el tema de la programación en ensamblador (Fig. 6), analizando todos los tipos de instrucciones, operandos, directivas y dedicando un apartado para el tratamiento de subrutinas. El séptimo capítulo constituye una útil guia de referencia que permite obtener una completa información sobre cualquier instrucción concreta del microprocesador. Finalmente, el capítulo ocho es una descripción de otros micros de la familia del MC68000 (68008, 68010, 68012, 68020) y de los periféricos más habituales en sistemas basados en micros de esta familia [3].
Cada uno de estos capítulos incluye un gran número de ejemplos para facilitar la asimilación de lo que se explica en cada momento. También existen ejercicios resueltos que permitirán al usuario la comprobación de lo aprendido. Además, el programa está provisto de un sistema de ayuda on-line que permite, desde cualquier punto, consultar la guía de referencia para obtener información sobre cualquier instrucción del micro.
Diseño Orientado a Objetos
El diseño del curso se ha basado en una metodología de orientación a objetos [4], con C++ como lenguaje de programación. Se ha desarrollado un sistema con una clase para cada capítulo que da acceso a un submenú particular; derivándose todas ellas de una clase abstracta principal que se utiliza para soportar una interface común, permitiendo que los objetos creados de las clases derivadas usen dicha interface para definir sus propias implementaciones.
Al ejecutar el programa se crea, en primer lugar, un objeto de la clase que da acceso al menú o pantalla principal del curso. Cuando desde este menú se selecciona un capítulo concreto, se destruye el objeto anterior, creando uno de una clase que permite en cualquier momento acceder al sistema de ayuda on-line, y otro de una clase para el capítulo elegido, cuyo constructor se encarga, a través de sus propias funciones y de las heredadas, de abrir una ventana con las coordenadas correspondientes, dibujar la pantalla e inicializar el ratón para dicha ventana. A partir de entonces, a través de funciones internas de la clase del objeto creado y de otras heredadas de la principal, se permite al usuario el acceso a los distintos apartados del capítulo. Una vez finalizadas las operaciones dentro de esta clase, al salir del capítulo, se desactiva el ratón, se elimina la ventana de la pantalla y se destruye el objeto. Este sistema de clases se ha enlazado en un sólo fichero ejecutable de un tamaño aproximado de 1M bytes [5].
4. CONCLUSIONES
Este entorno educativo para el estudio del MC68000 ha sido utilizado con éxito en cursos y asignaturas de introducción a los computadores. Sin embargo, se trata de una primera versión susceptible de posibles mejoras y ampliaciones, tanto en la parte de simulación como en la de Enseñanza Asistida por Ordenador.
En el caso del Simulador, el ensamblador se podría convertir en un macroensamblador, incorporando la utilización de macros. Se podría ampliar el editor de programas añadiendo tratamiento de bloques, de búsqueda y sustitución de palabras, etc. Esta primera versión trabaja en modo usuario (aunque con algunos privilegios del modo supervisor como modificación del registro de condiciones y la simulación de algunas interrupciones internas o "traps"); una posterior versión podría diferenciar entre modos usuario y supervisor. También sería interesante añadir un tratamiento de excepciones como violación de privilegios, interrupciones externas e internas, etc. Y, evidentemente, podría desarrollarse una versión para simular otros microprocesadores más avanzados de la familia del MC68000.
El curso de Enseñanza Asistida siempre es susceptible de ser mejorado tanto en el aspecto de presentación, aumentando el grado de dinamismo y gráficos para atraer en mayor medida la atención del usuario, como en el de contenidos, incorporando nuevos conceptos generales o específicos y actualizando los mismos con las caracterísiticas de nuevas versiones del micro que van apareciendo. También es conveniente mejorar el apartado referente a ejercicios, aumentando su número y permitiendo una mayor interacción con el usuario, permitiendo a éste la introducción de la respuesta y mejorando la presentación.
5. BIBLIOGRAFÍA
[1] L.F. Esteban. "Simulador del 68000". E.U. de Informática de la U.P.M. (T.F.C.) Mayo, 1992.
[2] A.S. Tanenbaun. "Structured Computer Organization". Ed. Prentice-Hall. 1984.
[3] T.L. Harman y B. Lawson. "The Motorola MC68000 microprocessor family". Ed. Prentice-Hall, 1985.
[4] B.J. Cox y A.J. Novobilski. "Object-Oriented Programming". Ed. Addison Wesley, 1991.
[5] R. García. "Diseño Orientado a Objetos de un Sistema de Enseñanza Asistida por Ordenador del microprocesador 68000". E.U. Politécnica. Univ. de Alcalá. T.F.C. 1994.