-
Notifications
You must be signed in to change notification settings - Fork 0
Mpp simulator
Se trata de un simple, rapido, y potente simulador para la M++
Esta máquina (M++) se estudia en la asignatura Estructura de Computadores en ingeniería informática de la Universidad de Deusto. En ella se aprenden conceptos básicos fundamentos y estructura de computadores.
En la parte de prácticas se utliza la M++ para resolver diferentes problemas con el objetivo de aprender a microprogramar.
Actualmente existen dos simuladores para la M++, uno construido en Java y otro en C++. Tanto el primero como el segundo, bajo mi punto de vista, tienen ciertos aspectos mejorables. Yo calificaría a ambos como versiones depreciadas.
Figura 1. Simulador desarrollado en C++
El simulador representado en la Figura 1, sólo estaba disponible para Windows, por lo que los alumnos con otros sistemas operativos, no podían utilizarlo de forma cómoda.
Es entonces cuando comienzo a desarrollar un simulador en C, un lenguaje de propósito general de medio/bajo nivel que se puede utilizar en todos los sistemas operativos por su independecia de hardware.
Mi máximo deseo era la programación de un simulador de la M++ lo más fiel a la realidad, es decir, tratar de simular cada uno de sus componentes hardware.
Para poder ser fiel a la realidad quería encapsular cada uno de los componentes, pudiendo estos realizar únicamente su funciónes principales y de comunicación.
Esto significaba que un componente no podía hacer llamadas a otros componentes.
En la realidad esto se da gracias a los buses, pequeños cables que conectan los componentes, que se comunican por la presencia (1) o ausencia (0) de una señal eléctrica.
Es entonces cuando surge la idea de el diseño Publicación / Subscripción.
Esto permitiría que cada componente pudiera publicar un información en un "bus" (canal) y que cualquier otro componente pudiera subscribirse a dicho canal y recibir dicha información.
Figura 2. Publicación / Subscripción
El componente "Memoria" puede recibir información del bus de datos gracias a la subscripción al TOPIC_1 mientras que también podría enviar información al bus de datos publicando en el TOPIC_2.
Cualquier componente puede subscribirse a n canales como publicar en n canales.
Uno de los aspectos más importantes es la compatibilidad con todos los sistemas operativos.
La interfaz visual fue lo más problematico para programarlo en C. Aunque hay varias librerías que hacen esto posible, fue una tarea difícil y tediosa que no producía el resultado deseado.
Quería un diseño fácil de utilizar y sobretodo amigable y bonito.
Cuando un usuario utiliza tu programa cómo una herramienta para realizar algo, lo más que puede hacer el desarrollador es facilitarselo a través de una interfaz accesible.
También traté de hacer la interfaz gráfica en Java, pero tampoco me convencía.
Entonces es cuando compienzo el desarrollo de la interfaz gráfica en la web, a través de React.
Pero, si el núcleo está desarrollado en C, ¿cómo puedo utilizarlo en la web?. Tradicionalmente no se podía "importar" ficheros binarios (compilados de c) en la web. Desde 2015, esto es posible gracias a WebAssembly, un formato de código binario portable que se ejecuta en el lado del cliente (portable).
¿Para qué desarrollar un programa en cada plataforma, si se puede crear una web accesible desde todos los sistemas operativos?
Figura 3. Pagina de bienvenida
Figura 4. Página principal
Figura 5. Página del programador
Figura 6. Página de información
Figura 7. Simulador M++ en acción