CPU

M++ simulator

Open source

Introduction

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.

Motivaciones

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.

Simulador desarrollado en C++
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.

Desarrollo

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.

Problem谩tica

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.

驴C贸mo simulo la comunicaci贸n entre 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 del 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.

Publicaci贸n / Subscripci贸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.

Multiplataforma

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?

Resultado

Pagina de bienvenida
Figura 3. Pagina de bienvenida

P谩gina principal
Figura 4. P谩gina principal

P谩gina del programador
Figura 5. P谩gina del programador

P谩gina de informaci贸n
Figura 6. P谩gina de informaci贸n

Simulador M++ en acci贸n
Figura 7. Simulador M++ en acci贸n